Код (Text): ... (структура в пространстве NT) typedef struct _SYSTEM_HANDLE_INFORMATION { //Information Class 16 ULONG ProcessId; UCHAR ObjectTypeNumber; UCHAR Flags; // 0x01=PROTECT_FROM_CLOSE,0x02=INHERIT USHORT Handle; PVOID Object; ACCESS_MASK GrantedAccess; }SYSTEM_HANDLE_INFORMATION,*PSYSTEM_HANDLE_INFORMATION; ... PVOID buffer; ULONG bIO = 4194304; NT::ZwAllocateVirtualMemory(GetCurrentProcess(), &buffer, 0, &bIO, MEM_COMMIT, PAGE_READWRITE); NT::ZwQuerySystemInformation(NT::SystemHandleInformation, buffer, 4194304, NULL); NT::PSYSTEM_HANDLE_INFORMATION pHandle = (NT::PSYSTEM_HANDLE_INFORMATION)((ULONG)buffer); ... printf ("%i \n", pHandle->ProcessId); После СИх действий я дожен по идее получить данные о процессе - пид тип обьекта и тд. Но на деле выводится совсем не то что ожидается - taskmanager и procmon показывает другие цифры пида. Где может быть проблема?
ну кажись: Код (Text): typedef struct _SYSTEM_HANDLE { ULONG uIdProcess; UCHAR ObjectType; // OB_TYPE_* (OB_TYPE_TYPE, etc.) UCHAR Flags; // HANDLE_FLAG_* (HANDLE_FLAG_INHERIT, etc.) USHORT Handle; POBJECT pObject; ACCESS_MASK GrantedAccess; } SYSTEM_HANDLE, *PSYSTEM_HANDLE; typedef struct _SYSTEM_HANDLE_INFORMATION { ULONG uCount; SYSTEM_HANDLE aSH[]; } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION; а у тебя: Код (Text): NT::ZwQuerySystemInformation(NT::SystemHandleInformation, buffer, 4194304, NULL); NT::PSYSTEM_HANDLE_INFORMATION pHandle = (NT::PSYSTEM_HANDLE_INFORMATION)((ULONG)buf); значит ты спутал сам массив и запись в нём
функция возвращает структуру: Код (Text): typedef struct _SYSTEM_HANDLE_INFORMATION { ULONG uCount; SYSTEM_HANDLE aSH[]; } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION; в которой aSH это то что у тебя тописано как: Код (Text): typedef struct _SYSTEM_HANDLE_INFORMATION { //Information Class 16 ULONG ProcessId; UCHAR ObjectTypeNumber; UCHAR Flags; // 0x01=PROTECT_FROM_CLOSE,0x02=INHERIT USHORT Handle; PVOID Object; ACCESS_MASK GrantedAccess; }SYSTEM_HANDLE_INFORMATION,*PSYSTEM_HANDLE_INFORMATION; ты перепутал SYSTEM_HANDLE_INFORMATION и SYSTEM_HANDLE в результате у тебя в начале лишний двор - кол-во записей