Я звоню PsGetCurrentProcess
чтобы получить PEPROCESS
структура, как я могу прочитать PE заголовок моего процесса в режиме ядра, что-то вроде этот код, который делает это в режиме пользователя?
Моя цель — получить информацию о версии из PE-заголовка.
Я рекомендую получить эту информацию при создании процесса. Ты можешь использовать PsSetCreateProcessNotifyRoutine(Ex)
получать уведомления при создании нового процесса. PsSetLoadImageNotifyRoutine
информирует вас, когда PE-файл (включая основной исполняемый файл процесса) сопоставлен с виртуальным адресным пространством.
Это плохая идея, чтобы прочитать информацию о версии из памяти процесса, когда процесс полностью инициализирован и запущен. Процесс имеет полный контроль над отображением файла PE, поэтому он может подделать информацию о версии. Более того, вы можете получить доступ к памяти режима пользователя только при низком уровне IRQL (PASSIVE_LEVEL). Обратные вызовы минифильтров также могут быть вызваны в APC_LEVEL / DISPATCH_LEVEL.
Других решений пока нет …