То есть я так понимаю, самое главное, это какую структуру она заполняет? Вот например в официальных доках http://msdn.microsoft.com/en-us/library/ms684280(v=vs.85).aspx Показано, что идёт заполнение такой структуры: Код (Text): typedef struct _PROCESS_BASIC_INFORMATION { PVOID Reserved1; PPEB PebBaseAddress; PVOID Reserved2[2]; ULONG_PTR UniqueProcessId; PVOID Reserved3; } PROCESS_BASIC_INFORMATION; (указатель на эту структуру передаётся третьим параметром в функцию NtQueryInformationProcess) ++++++++++++++++++++++++++++++++++++++++++++++++++++++ Так, но в некоторых местах я читаю, что реализация NtQueryInformationProcess зависит от версии оси. Ну, как реализация- какая именно структура передаётся параметром в эту функцию. Вот здесь http://www.codeproject.com/KB/threads/GetNtProcessInfo.aspx сказано, что совсем другая структура, такая: Код (Text): typedef struct _smPROCESS_BASIC_INFORMATION { LONG ExitStatus; smPPEB PebBaseAddress; ULONG_PTR AffinityMask; LONG BasePriority; ULONG_PTR UniqueProcessId; ULONG_PTR InheritedFromUniqueProcessId; } smPROCESS_BASIC_INFORMATION, *smPPROCESS_BASIC_INFORMATION; Ну, то есть, получается, NtQueryInformationProcess одинаковы, а структуры разные, так, что ли. Ну и вообще, хочется узнать, может есть какие способы узнавания подобного для ТЕКУЩЕЙ ВЕРСИИ, у меня XP home edition SP2, спасибо если кто откликнется.
Смещения членов структур одинаковые, так что все в порядке. Просто MS не открывает для пользования остальные члены структуры, вот и все. Теоретически, неописанные члены структуры могут поменяться в следующей версии без какого-либо уведомления. Описанные тоже могут измениться, но MS об этом сообщит.
А как узнать интерпретацию структуры... PROCESS_BASIC_INFORMATION функцией NtQueryInformationProcess на моей оси? Ведь я так понял, она может заполнить например поле BasePriority базовым приоритетом, а может посчитать, что оно PVOID Reserved2[2];- зарезервировано то есть и ничем не заполнить. Как быть?
amvoz тут где-то Грейт писал для новичков как грузить символы в WinDbg а в виндбг смотри хелп по озвученной команде
А где WinDbg брать? Ну то есть я думал, что удачно качнул его отсюда http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx Он кстати приказал ещё вот это поставить http://msdn.microsoft.com/en-us/netframework/aa569263.aspx Ну ладно, но я не вижу в E:\Microsoft_SDKs ничего похожего на WinDbg.EXE!
По этой ссыли я качнул программку с исходниками вместе http://www.codeproject.com/KB/threads/GetNtProcessInfo.aspx Она демонстрирует работу NtQueryInformationProcess. Посмотрел- результаты корректны. И сдул описание структуры из тех исходников: Код (Text): typedef struct PROCESS_BASIC_INFORMATION { LONG ExitStatus; smPPEB PebBaseAddress; ULONG_PTR AffinityMask; LONG BasePriority; ULONG_PTR UniqueProcessId; ULONG_PTR InheritedFromUniqueProcessId; } smPROCESS_BASIC_INFORMATION, *smPPROCESS_BASIC_INFORMATION; А посоветованный тобой, wsd, способ предполагает что надо вручную забивать данные, о которых я, собсно и спрашиваю (символические файлы или как их там), а потом эти же данные по команде dt выводить WinDBG качнул по этой ссылке, http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.11.1.404.msi версия 2009, там экзешник нашёлся