Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как по ID получить имя процесса (NT)  (Прочитано 27381 раз)
0 Пользователей и 1 Гость смотрят эту тему.
dvp
Гость
« : 25-07-2003 06:33 » 

Использую ZwQuerySystemInformation с перебором по ID
но может есть более краткий путь
и второй вопрос как по ID добраться до EPROCESS
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline 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, но что то не знаю я там такой ф-и
мож через драйвер как можно....
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #3 : 25-07-2003 08:10 » 

HKEY_PERFOMANCE_DATA...

Попробуй просто через реджистри поиск в ключе делать - надеюсь со структурой разберешься....

NativeAPI - есть книга на сайте - скачай сееб - я ее не лопатил.
Записан

А птичку нашу прошу не обижать!!!
Anonymous
Гость
« Ответ #4 : 25-07-2003 09:36 » 

че то не найду если несложно киньте ссылкой плз
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #5 : 25-07-2003 09:59 » 

Нуууу....

Вот: ftp://shelek.no-ip.com/
Записан

А птичку нашу прошу не обижать!!!
dvp
Гость
« Ответ #6 : 28-07-2003 06:58 » 

Ну как по ID добраться до EPROCESS, возможно ли это из из приложения иль нужно драйвер писать?
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #7 : 28-07-2003 12:56 » 

dvp, погоди ты ж вроде скачал книжку по своему предмету или нет???
Записан

А птичку нашу прошу не обижать!!!
dvp
Гость
« Ответ #8 : 28-07-2003 13:09 » 

Скачал, но там конкретно этого нет.
Может это можно получить только в 0 кольце.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #9 : 28-07-2003 14:57 » 

Ну тогда я не знаю...
Есть куча возможностей - у тебя на все возможности стоят ограничения.

Жаль что не смог тебе помочь - может другие кто...
Записан

А птичку нашу прошу не обижать!!!
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #10 : 28-07-2003 19:39 » 

Цитата

Может это можно получить только в 0 кольце.


EPROCESS только в режиме ядра можно получить, то есть с помощью драйвера.
Записан
sss
Специалист

ru
Offline Offline

« Ответ #11 : 29-07-2003 00:28 » 

Можно еще по хэндлам окон пройтись и сопоставить им процессы (GetWindowProcessID). Каталог объектов (EPROCESS) Windows храниться в памяти ядра. Ты просто не сможешь сопоставить виртуальный адрес для своего опрашивающего процесса и адрес (даже если получится) полученой структуры EPROCESS.
Записан

while (8==8)
dvp
Гость
« Ответ #12 : 29-07-2003 04:16 » 

Цитата

EPROCESS только в режиме ядра можно получить, то есть с помощью драйвера.

Ну понятно, на этом дискуссию можно считать закрытой. Спасибо всем откликнувшимся.....
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #13 : 30-07-2003 19:30 » 

Цитата: sss
Ты просто не сможешь сопоставить виртуальный адрес для своего опрашивающего процесса и адрес (даже если получится) полученой структуры EPROCESS.


Хоть дискуссия и закончена, отмечу, что Windows использует такую модель памяти, что виртуальные указатели на область памяти ядра будут верны всегда в независимости от процесса в котором они получены, за исключением памяти пространства сеанса и каталога страниц(может быть еще какие нибудь области памяти- сейчас не вспомню, те что привел разные у процессов в силу их назначения). Эта тема на старом форуме живо обсуждалась, особенно мной и Grozny.
Записан
dvp
Гость
« Ответ #14 : 20-08-2003 05:56 » 

Возобновлю дискуссию Улыбаюсь
Если я в драйвер передам ID, и через PslookupProcessByProcessId получу доступ к EPROCESS и вытяну все что мне надо. Тогда никакой перебор не нужен.
Записан
SlavaI
Главный специалист

ru
Offline 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
Главный специалист

ru
Offline Offline

« Ответ #17 : 20-08-2003 06:40 » 

Цитата

вот так в принципе я и думал, вот только формат структур типа EPROCESS(PEB,...) видимо меняется от каждой версии ОС, по крайней мере у меня есть структура для НТ4, с 2000 есть различия. Где бы их можно было посмотреть для всех НТ-систем


Учти, что PEB в юзерском пространстве(а не в пространстве ядра), то есть ты должен быть в контексте процесса, чей путь ты ищешь.
Давай свой mail я тебе вышлю h файл со структурами.
Записан
dvp
Гость
« Ответ #18 : 20-08-2003 06:42 » 

dvp@ec.mv.ru
Записан
SlavaI
Главный специалист

ru
Offline 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
Главный специалист

ru
Offline Offline

« Ответ #23 : 20-08-2003 07:02 » 

Цитата

Вот тут что то не понял, в EPROCESS есть поле *PEB, адрес структуры PEB, разве я по этому указателю из режима ядра не смогу добраться до PEB? Или не все так просто


PEB лежит в пространстве пользователя(то есть ниже 0x80000000, или 0чС000000), что означает, что ты должен быть в контексте процесса, чей путь ты ищешь, так как при переключении потоков от разных процессов, по адресам, ниже указанных, отображаются страницы разных процессов, в то время как системные страницы у всех однинаковые.
Еще учти, что все пространство пользователя может быть в страничный файл скинуто, то есть IRQL<DISPATCH должен быть.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines