Здрасвуйте, после трехдневных мучений по переводу KTHREAD, EPROCESS и других возникающих по цепочке структур, под vista, возник вопрос ( хотя он должен был появится сразу ): - ПОЧЕМУ WINDDK 7600.16385.0 ( свежий) транслирует структуры отлчаюшиеся от тех же структур покаэанных windbg ???
WinDDK -> Build Environments-> Windows Vista and Windows Server 2008 например такой код: PKTHREAD pNotAlertableThread = NULL; PEPROCESS pSysProcess = NULL; поля pSysProcess (pNotAlertableThread ) имеет структуру отличную от _EPROCESS ( KTHREAD) в WinDbg, не хочется переписывать header файлы, стремно, ( сразу мысля пришла -- старею, лет 15 назад это было бы сделанно быстро и с чуством глубокого удовлетворения ), да и не думаю что, это необходимо.
Серверная Windows 7 это Windows Server 2008 R2. Сначала её хотели назвать Windows Server 7, потом сделали R2.
И все таки, есть ли способ ( должен быть) транслировать в нужном формате, или все пишут собственные хидеры ?
at0s >ПОЧЕМУ WINDDK 7600.16385.0 ( свежий) транслирует структуры Что значит "транслирует структуры"? >PEPROCESS pSysProcess = NULL; >поля pSysProcess имеет структуру отличную от _EPROCESS в WinDbg, не хочется переписывать header файлы Тоже ничего не понятно. При чём тут хидеры? Когда это в WDK стали давать полные определения структур вроде _EPROCESS? P.S. Просьба выполнять согласовывание в падежах и числах. Очень сложно парсить.
Sol_Ksacap я объявляю PEPROCESS pSysProcess = NULL, далле смотрим в дебагере: kd> dt nt!_EPROCESS +0x000 Pcb : _KPROCESS +0x080 ProcessLock : _EX_PUSH_LOCK .................... +0x0e8 AddressCreationLock : _EX_PUSH_LOCK +0x0ec RotateInProgress : Ptr32 _ETHREAD ................... +0x232 SubSystemMinorVersion : UChar +0x233 SubSystemMajorVersion : UChar +0x232 SubSystemVersion : Uint2B +0x234 PriorityClass : UChar +0x238 VadRoot : _MM_AVL_TABLE +0x258 Cookie : Uint4B +0x25c AlpcContext : _ALPC_PROCESS_CONTEXT kd> ??pSystemProcess struct _EPROCESS * 0x89850190 +0x000 Pcb : _KPROCESS +0x06c ProcessLock .......... +0x0d0 AddressCreationLock : _KGUARDED_MUTEX +0x0f0 HyperSpaceLock : 1 .......... +0x252 SubSystemMinorVersion : 0x1 '' +0x253 SubSystemMajorVersion : 0x5 '' +0x252 SubSystemVersion : 0x501 +0x254 PriorityClass : 0x2 '' +0x258 VadRoot : _MM_AVL_TABLE и т.д. ну зти структуры описанны в хидерах, и они каким-то образом не совпадают с системными, вот в чем вопрос.
at0s Эти структуры в заголовочных файлах лишь объявлены; Они не определены. typedef struct *_EPROCESS PEPROCESS; Об _ERPOCESS известно лишь то, что это есмь структура, и PEPROCESS – указатель на неё. >kd> ??pSystemProcess struct _EPROCESS * 0x89850190 Здесь у тебя левый _EPROCESS, который появился в дебажной информации, вероятно, из-за линковки с какой-то либой с неактуальным определением структуры. Выход: убрать\обновить либу, или же использовать полную квалификацию символов.
удалил и установил WDK -> (53) error C2037 left of 'ActiveProcessLinks' specifies undefined struct/union '_KPROCESS' Код (Text): PEPROCESS pSystemProcess = NULL; ..... 53. if(IsListEmpty(&pSystemProcess->ActiveProcessLinks)) DbgPrint(" * * * * * KernelExec -> No processes found!\n"); kd> dt nt!_EPROCESS ....... +0x0a0 ActiveProcessLinks : _LIST_ENTRY почему ?
Да сколько раз уже говорить можно: эти структуры не определены в заголовках WDK, они просто физически не могут быть там определены, потому как часто меняются не только от версии к версии ядра, но даже между пакетами обновлений (SP). Их нужно либо определять у себя для каждой из поддерживаемых твоим драйвером версий, либо вычислять смещения необходимых полей динамически, если это возможно.