dvp
Гость
|
|
« : 25-07-2003 06:33 » |
|
Использую ZwQuerySystemInformation с перебором по ID но может есть более краткий путь и второй вопрос как по ID добраться до EPROCESS
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #1 : 25-07-2003 07:35 » |
|
В вин НТ - есть база данных процессов. HKEY_PERFOMANCE_DATA...
Это по утверждению Рихтера база процессов.
Win95 Win 98 такой базы не имеют В них поиск можно осуществлять Process32First & Process32Next. С ней работают кроме простых функций работы с реджистри - есть набор функций PDH.dll в SDK.
В НТ есть ProcessStratus() EnumPocesses ()
Надеюсь этого хватит - если нет могу дописать еще код который это читает. Но его надо проверить.
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
dvp
Гость
|
|
« Ответ #2 : 25-07-2003 08:00 » |
|
да не хотелось бы пользоваться psapi, на ранних НТ ее вроде как нет Лучше через Native API, но что то не знаю я там такой ф-и мож через драйвер как можно....
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #3 : 25-07-2003 08:10 » |
|
HKEY_PERFOMANCE_DATA...
Попробуй просто через реджистри поиск в ключе делать - надеюсь со структурой разберешься....
NativeAPI - есть книга на сайте - скачай сееб - я ее не лопатил.
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
Anonymous
Гость
|
|
« Ответ #4 : 25-07-2003 09:36 » |
|
че то не найду если несложно киньте ссылкой плз
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #5 : 25-07-2003 09:59 » |
|
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
dvp
Гость
|
|
« Ответ #6 : 28-07-2003 06:58 » |
|
Ну как по ID добраться до EPROCESS, возможно ли это из из приложения иль нужно драйвер писать?
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #7 : 28-07-2003 12:56 » |
|
dvp, погоди ты ж вроде скачал книжку по своему предмету или нет???
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
dvp
Гость
|
|
« Ответ #8 : 28-07-2003 13:09 » |
|
Скачал, но там конкретно этого нет. Может это можно получить только в 0 кольце.
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #9 : 28-07-2003 14:57 » |
|
Ну тогда я не знаю... Есть куча возможностей - у тебя на все возможности стоят ограничения.
Жаль что не смог тебе помочь - может другие кто...
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
SlavaI
Главный специалист
Offline
|
|
« Ответ #10 : 28-07-2003 19:39 » |
|
Может это можно получить только в 0 кольце.
EPROCESS только в режиме ядра можно получить, то есть с помощью драйвера.
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #11 : 29-07-2003 00:28 » |
|
Можно еще по хэндлам окон пройтись и сопоставить им процессы (GetWindowProcessID). Каталог объектов (EPROCESS) Windows храниться в памяти ядра. Ты просто не сможешь сопоставить виртуальный адрес для своего опрашивающего процесса и адрес (даже если получится) полученой структуры EPROCESS.
|
|
|
Записан
|
while (8==8)
|
|
|
dvp
Гость
|
|
« Ответ #12 : 29-07-2003 04:16 » |
|
EPROCESS только в режиме ядра можно получить, то есть с помощью драйвера.
Ну понятно, на этом дискуссию можно считать закрытой. Спасибо всем откликнувшимся.....
|
|
|
Записан
|
|
|
|
SlavaI
Главный специалист
Offline
|
|
« Ответ #13 : 30-07-2003 19:30 » |
|
Ты просто не сможешь сопоставить виртуальный адрес для своего опрашивающего процесса и адрес (даже если получится) полученой структуры EPROCESS. Хоть дискуссия и закончена, отмечу, что Windows использует такую модель памяти, что виртуальные указатели на область памяти ядра будут верны всегда в независимости от процесса в котором они получены, за исключением памяти пространства сеанса и каталога страниц(может быть еще какие нибудь области памяти- сейчас не вспомню, те что привел разные у процессов в силу их назначения). Эта тема на старом форуме живо обсуждалась, особенно мной и Grozny.
|
|
|
Записан
|
|
|
|
dvp
Гость
|
|
« Ответ #14 : 20-08-2003 05:56 » |
|
Возобновлю дискуссию Если я в драйвер передам ID, и через PslookupProcessByProcessId получу доступ к EPROCESS и вытяну все что мне надо. Тогда никакой перебор не нужен.
|
|
|
Записан
|
|
|
|
SlavaI
Главный специалист
Offline
|
|
« Ответ #15 : 20-08-2003 06:03 » |
|
Почитай вот тут http://www.ntndis.com./forum/viewtopic.php?t=38
|
|
|
Записан
|
|
|
|
dvp
Гость
|
|
« Ответ #16 : 20-08-2003 06:35 » |
|
Ну да 1. Получаем EPROCESS с помощью IoGetCurrentProcess(). 2. берем PEB из EPROCESS 3. берем ProcessParameters из PEB 4. берем ImagePathName из ProcessParameters 5. все
вот так в принципе я и думал, вот только формат структур типа EPROCESS(PEB,...) видимо меняется от каждой версии ОС, по крайней мере у меня есть структура для НТ4, с 2000 есть различия. Где бы их можно было посмотреть для всех НТ-систем?
|
|
|
Записан
|
|
|
|
SlavaI
Главный специалист
Offline
|
|
« Ответ #17 : 20-08-2003 06:40 » |
|
вот так в принципе я и думал, вот только формат структур типа EPROCESS(PEB,...) видимо меняется от каждой версии ОС, по крайней мере у меня есть структура для НТ4, с 2000 есть различия. Где бы их можно было посмотреть для всех НТ-систем
Учти, что PEB в юзерском пространстве(а не в пространстве ядра), то есть ты должен быть в контексте процесса, чей путь ты ищешь. Давай свой mail я тебе вышлю h файл со структурами.
|
|
|
Записан
|
|
|
|
dvp
Гость
|
|
« Ответ #18 : 20-08-2003 06:42 » |
|
|
|
|
Записан
|
|
|
|
SlavaI
Главный специалист
Offline
|
|
« Ответ #19 : 20-08-2003 06:47 » |
|
Выслал.
|
|
|
Записан
|
|
|
|
dvp
Гость
|
|
« Ответ #20 : 20-08-2003 06:55 » |
|
спасибо большое Не забудь про правильный контекст, а то PEB чужой получишь, или вобще exception.
Вот тут что то не понял, в EPROCESS есть поле *PEB, адрес структуры PEB, разве я по этому указателю из режима ядра не смогу добраться до PEB? Или не все так просто
|
|
|
Записан
|
|
|
|
dvp
Гость
|
|
« Ответ #21 : 20-08-2003 06:57 » |
|
а блин не дочитал предыдущее, все понял
|
|
|
Записан
|
|
|
|
dvp
Гость
|
|
« Ответ #22 : 20-08-2003 07:00 » |
|
то есть как же тут быть, внедрять свой поток в чужой процесс, принимать от драйвера указатель на PEB и уже потом добираться до нужных полей?
|
|
|
Записан
|
|
|
|
SlavaI
Главный специалист
Offline
|
|
« Ответ #23 : 20-08-2003 07:02 » |
|
Вот тут что то не понял, в EPROCESS есть поле *PEB, адрес структуры PEB, разве я по этому указателю из режима ядра не смогу добраться до PEB? Или не все так просто
PEB лежит в пространстве пользователя(то есть ниже 0x80000000, или 0чС000000), что означает, что ты должен быть в контексте процесса, чей путь ты ищешь, так как при переключении потоков от разных процессов, по адресам, ниже указанных, отображаются страницы разных процессов, в то время как системные страницы у всех однинаковые. Еще учти, что все пространство пользователя может быть в страничный файл скинуто, то есть IRQL<DISPATCH должен быть.
|
|
|
Записан
|
|
|
|
|