ZwQuerySystemInformation

Тема в разделе "WASM.WIN32", создана пользователем loginrl_103, 22 фев 2008.

  1. loginrl_103

    loginrl_103 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2008
    Сообщения:
    271
    Код (Text):
    1. ...
    2. (структура в пространстве NT)
    3. typedef struct _SYSTEM_HANDLE_INFORMATION { //Information Class 16
    4.     ULONG       ProcessId;
    5.     UCHAR       ObjectTypeNumber;
    6.     UCHAR       Flags;          // 0x01=PROTECT_FROM_CLOSE,0x02=INHERIT
    7.     USHORT  Handle;
    8.     PVOID       Object;
    9.     ACCESS_MASK GrantedAccess;
    10. }SYSTEM_HANDLE_INFORMATION,*PSYSTEM_HANDLE_INFORMATION;
    11. ...
    12. PVOID buffer;
    13. ULONG bIO = 4194304;
    14. NT::ZwAllocateVirtualMemory(GetCurrentProcess(), &buffer, 0, &bIO, MEM_COMMIT, PAGE_READWRITE);
    15. NT::ZwQuerySystemInformation(NT::SystemHandleInformation, buffer, 4194304, NULL);
    16. NT::PSYSTEM_HANDLE_INFORMATION pHandle = (NT::PSYSTEM_HANDLE_INFORMATION)((ULONG)buffer);
    17. ...
    18. printf ("%i \n", pHandle->ProcessId);
    После СИх действий я дожен по идее получить данные о процессе - пид тип обьекта и тд. Но на деле выводится совсем не то что ожидается - taskmanager и procmon показывает другие цифры пида.
    Где может быть проблема?
     
  2. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    ну кажись:
    Код (Text):
    1. typedef struct _SYSTEM_HANDLE
    2. {
    3. ULONG uIdProcess;
    4. UCHAR ObjectType; // OB_TYPE_* (OB_TYPE_TYPE, etc.)
    5. UCHAR Flags; // HANDLE_FLAG_* (HANDLE_FLAG_INHERIT, etc.)
    6. USHORT Handle;
    7. POBJECT pObject;
    8. ACCESS_MASK GrantedAccess;
    9. } SYSTEM_HANDLE, *PSYSTEM_HANDLE;
    10.  
    11. typedef struct _SYSTEM_HANDLE_INFORMATION
    12. {
    13. ULONG uCount;
    14. SYSTEM_HANDLE aSH[];
    15. } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
    а у тебя:
    Код (Text):
    1. NT::ZwQuerySystemInformation(NT::SystemHandleInformation, buffer, 4194304, NULL);
    2. NT::PSYSTEM_HANDLE_INFORMATION pHandle = (NT::PSYSTEM_HANDLE_INFORMATION)((ULONG)buf);
    значит ты спутал сам массив и запись в нём
     
  3. loginrl_103

    loginrl_103 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2008
    Сообщения:
    271
    Не совсем понял тебя)

    ps. в первом посте подправил оптячаки под имя массива (там не buf а buffer).
     
  4. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    функция возвращает структуру:
    Код (Text):
    1. typedef struct _SYSTEM_HANDLE_INFORMATION
    2. {
    3. ULONG uCount;
    4. SYSTEM_HANDLE aSH[];
    5. } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
    в которой aSH это то что у тебя тописано как:
    Код (Text):
    1. typedef struct _SYSTEM_HANDLE_INFORMATION { //Information Class 16
    2.     ULONG       ProcessId;
    3.     UCHAR       ObjectTypeNumber;
    4.     UCHAR       Flags;          // 0x01=PROTECT_FROM_CLOSE,0x02=INHERIT
    5.     USHORT  Handle;
    6.     PVOID       Object;
    7.     ACCESS_MASK GrantedAccess;
    8. }SYSTEM_HANDLE_INFORMATION,*PSYSTEM_HANDLE_INFORMATION;
    ты перепутал SYSTEM_HANDLE_INFORMATION и SYSTEM_HANDLE в результате у тебя в начале лишний двор - кол-во записей