Получение хендла процесса по EPROCESS

Тема в разделе "WASM.WIN32", создана пользователем rav, 7 июл 2005.

  1. rav

    rav New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2004
    Сообщения:
    159
    Адрес:
    Москва
    Всем доброго времени суток.



    Нужно по EPROCESS получить хендл процесса. Можно, конечно, вытащить ProcessId по смещению из этого самого EPROCESS, но, во-первых, под каждой ОСой оно своё, а во-вторых, нет гарантии, что со следующим сервис-паком это всё не отвалится. Попытался сделать так:



    ObInsertObject(pProcess,0,PROCESS_ALL_ACCESS,1,NULL,&hProcess);



    В результате выпал в БСОД где-то в районе работы с дескрипторами безопасности. Хотелось бы найти более-менее независящее от версий ОСы и сервис-паков решение. Спасибо.
     
  2. Zufyxe

    Zufyxe New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    137
    Адрес:
    Russia
    Ну, во-первыx, определись чего тебе нужно: ProcessId или Handle? :)

    Насколько я понимаю, речь идет о коде в ядре?

    Тогда поступаешь примерно так:

    ObOpenObjectByPointer(pEPROCESS,0,0,1,0,0,&Handle) - получаешь Handle.

    ZwQueryInformationProcess(Handle,ProcessBasicInformation,&InfoBuff,20h ,&RetLen) - получаешь PiD и еще кучу всего интересного... :)