как узнать функцию NtQueryInformationProcess для данной оси?

Тема в разделе "WASM.BEGINNERS", создана пользователем amvoz, 4 сен 2011.

  1. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    То есть я так понимаю, самое главное, это какую структуру она заполняет? Вот например в официальных доках
    http://msdn.microsoft.com/en-us/library/ms684280(v=vs.85).aspx

    Показано, что идёт заполнение такой структуры:
    Код (Text):
    1. typedef struct _PROCESS_BASIC_INFORMATION {
    2.     PVOID Reserved1;
    3.     PPEB PebBaseAddress;
    4.     PVOID Reserved2[2];
    5.     ULONG_PTR UniqueProcessId;
    6.     PVOID Reserved3;
    7. } PROCESS_BASIC_INFORMATION;
    (указатель на эту структуру передаётся третьим параметром в функцию NtQueryInformationProcess)

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++

    Так, но в некоторых местах я читаю, что реализация NtQueryInformationProcess зависит от версии оси. Ну, как реализация- какая именно структура передаётся параметром в эту функцию.
    Вот здесь
    http://www.codeproject.com/KB/threads/GetNtProcessInfo.aspx
    сказано, что совсем другая структура, такая:
    Код (Text):
    1. typedef struct _smPROCESS_BASIC_INFORMATION {
    2.     LONG ExitStatus;
    3.     smPPEB PebBaseAddress;
    4.     ULONG_PTR AffinityMask;
    5.     LONG BasePriority;
    6.     ULONG_PTR UniqueProcessId;
    7.     ULONG_PTR InheritedFromUniqueProcessId;
    8. } smPROCESS_BASIC_INFORMATION, *smPPROCESS_BASIC_INFORMATION;
    Ну, то есть, получается, NtQueryInformationProcess одинаковы, а структуры разные, так, что ли.
    Ну и вообще, хочется узнать, может есть какие способы узнавания подобного для ТЕКУЩЕЙ ВЕРСИИ, у меня XP home edition SP2, спасибо если кто откликнется.
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Смещения членов структур одинаковые, так что все в порядке. Просто MS не открывает для пользования остальные члены структуры, вот и все. Теоретически, неописанные члены структуры могут поменяться в следующей версии без какого-либо уведомления. Описанные тоже могут измениться, но MS об этом сообщит.
     
  3. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Структуры не разные, разные их интерпритация
     
  4. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    А как узнать интерпретацию структуры... PROCESS_BASIC_INFORMATION функцией NtQueryInformationProcess на моей оси?
    Ведь я так понял, она может заполнить например поле BasePriority базовым приоритетом, а может посчитать, что оно PVOID Reserved2[2];- зарезервировано то есть и ничем не заполнить. Как быть?
     
  5. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    amvoz
    в виндбг грузиш символы и команда dt PROCESS_BASIC_INFORMATION
     
  6. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    нельзя ли попроще как-нибудь объяснить...
     
  7. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    amvoz
    тут где-то Грейт писал для новичков как грузить символы в WinDbg
    а в виндбг смотри хелп по озвученной команде
     
  8. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
  9. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    amvoz
    меню пуск и там смотри
     
  10. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    По этой ссыли я качнул программку с исходниками вместе
    http://www.codeproject.com/KB/threads/GetNtProcessInfo.aspx

    Она демонстрирует работу NtQueryInformationProcess. Посмотрел- результаты корректны. И сдул описание структуры из тех исходников:
    Код (Text):
    1. typedef struct PROCESS_BASIC_INFORMATION {
    2.     LONG ExitStatus;
    3.     smPPEB PebBaseAddress;
    4.     ULONG_PTR AffinityMask;
    5.     LONG BasePriority;
    6.     ULONG_PTR UniqueProcessId;
    7.     ULONG_PTR InheritedFromUniqueProcessId;
    8. } smPROCESS_BASIC_INFORMATION, *smPPROCESS_BASIC_INFORMATION;
    А посоветованный тобой, wsd, способ предполагает что надо вручную забивать данные, о которых я, собсно и спрашиваю (символические файлы или как их там), а потом эти же данные по команде dt выводить

    WinDBG качнул по этой ссылке,
    http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.11.1.404.msi
    версия 2009, там экзешник нашёлся