Вы должны будете использовать эвристику, чтобы установить этот факт и быть уверенным, насколько это возможно. Проблема в том, что буквально существуют собственные программы пользовательского режима (например, autochk.exe
) и библиотеки DLL (откровенно ничего не приходит в голову, но я видел их как часть нативных программ, которые делают вещи до запуска winlogon.exe
), а также аналоги режима ядра (bootvid.dll
, hal.dll
и ядро в одной из его различных форм ntoskrnl.exe
).
Итак, чтобы установить это драйвер, вы можете попробовать следующее:
IMAGE_OPTIONAL_HEADER::SubSystem
, как указывалось, должно означать, что он "нативный" (т.е. не имеет подсистемы: IMAGE_SUBSYSTEM_NATIVE
)
- Убедитесь, что
IMAGE_FILE_HEADER::Characteristics
- это , а не DLL (что означает, что это DLL ядра или пользовательского режима, проверьте по IMAGE_FILE_DLL
)
- Убедитесь, что он делает или делает не импорт
ntdll.dll
или другую DLL пользовательского режима или наоборот, что он импортирует один из модулей режима ядра (ntoskrnl.exe
, hal.dll
, bootvid.dll
), чтобы установить, будет ли он работать в режиме ядра или пользователя.
Все структуры и определения включены в winnt.h
.
Суть:
- установить подсистему (для вашего случая интересна только
IMAGE_SUBSYSTEM_NATIVE
)
- установить это DLL или нет
- устанавливает, ссылается ли он на компоненты режима пользователя или ядра