Get rid of explicit NtQuerySystemInformationEx syscall

This commit is contained in:
momo5502
2025-01-06 18:38:05 +01:00
parent 0585978157
commit 73eb7d659c
5 changed files with 168 additions and 38 deletions

View File

@@ -25,15 +25,6 @@
#include "threading.hpp"
#ifdef OS_WINDOWS
#pragma comment(lib, "ntdll")
extern "C"
{
NTSYSCALLAPI NTSTATUS NTAPI NtQuerySystemInformationEx(
_In_ SYSTEM_INFORMATION_CLASS SystemInformationClass, _In_reads_bytes_(InputBufferLength) PVOID InputBuffer,
_In_ ULONG InputBufferLength, _Out_writes_bytes_opt_(SystemInformationLength) PVOID SystemInformation,
_In_ ULONG SystemInformationLength, _Out_opt_ PULONG ReturnLength);
}
#pragma warning(pop)
#else
#pragma GCC diagnostic pop

View File

@@ -11,7 +11,12 @@
#else
#define DWORD std::uint32_t
#define _Field_size_(...)
#define _Struct_size_bytes_(...)
#define ANYSIZE_ARRAY 1
#define DWORD std::uint32_t
using LONG = std::int32_t;
using ULONG = DWORD;
using DWORD64 = std::uint64_t;
@@ -41,14 +46,14 @@ typedef union _LARGE_INTEGER
} LARGE_INTEGER;
using BYTE = std::uint8_t;
#define CHAR BYTE
#define CHAR BYTE
#endif
using WORD = std::uint16_t;
#define UCHAR unsigned char
#define BOOLEAN bool
using CSHORT = short;
using USHORT = WORD;

View File

@@ -905,3 +905,92 @@ struct EMU_RTL_SRWLOCK
{
typename Traits::PVOID Ptr;
};
#ifndef OS_WINDOWS
typedef enum _PROCESSOR_CACHE_TYPE
{
CacheUnified,
CacheInstruction,
CacheData,
CacheTrace
} PROCESSOR_CACHE_TYPE;
typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP
{
RelationProcessorCore,
RelationNumaNode,
RelationCache,
RelationProcessorPackage,
RelationGroup,
RelationProcessorDie,
RelationNumaNodeEx,
RelationProcessorModule,
RelationAll = 0xffff
} LOGICAL_PROCESSOR_RELATIONSHIP;
#endif
struct EMU_NUMA_NODE_RELATIONSHIP64
{
DWORD NodeNumber;
BYTE Reserved[18];
WORD GroupCount;
union
{
EMU_GROUP_AFFINITY64 GroupMask;
_Field_size_(GroupCount) EMU_GROUP_AFFINITY64 GroupMasks[ANYSIZE_ARRAY];
};
};
struct EMU_CACHE_RELATIONSHIP64
{
BYTE Level;
BYTE Associativity;
WORD LineSize;
DWORD CacheSize;
PROCESSOR_CACHE_TYPE Type;
BYTE Reserved[18];
WORD GroupCount;
union
{
EMU_GROUP_AFFINITY64 GroupMask;
_Field_size_(GroupCount) EMU_GROUP_AFFINITY64 GroupMasks[ANYSIZE_ARRAY];
};
};
struct EMU_PROCESSOR_GROUP_INFO64
{
BYTE MaximumProcessorCount;
BYTE ActiveProcessorCount;
BYTE Reserved[38];
EMULATOR_CAST(std::uint64_t, KAFFINITY) ActiveProcessorMask;
};
struct EMU_GROUP_RELATIONSHIP64
{
WORD MaximumGroupCount;
WORD ActiveGroupCount;
BYTE Reserved[20];
_Field_size_(ActiveGroupCount) EMU_PROCESSOR_GROUP_INFO64 GroupInfo[ANYSIZE_ARRAY];
};
struct EMU_PROCESSOR_RELATIONSHIP64
{
BYTE Flags;
BYTE EfficiencyClass;
BYTE Reserved[20];
WORD GroupCount;
_Field_size_(GroupCount) EMU_GROUP_AFFINITY64 GroupMask[ANYSIZE_ARRAY];
};
_Struct_size_bytes_(Size) struct EMU_SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX64
{
LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
DWORD Size;
union
{
EMU_PROCESSOR_RELATIONSHIP64 Processor;
EMU_NUMA_NODE_RELATIONSHIP64 NumaNode;
EMU_CACHE_RELATIONSHIP64 Cache;
EMU_GROUP_RELATIONSHIP64 Group;
};
};

View File

@@ -26,6 +26,7 @@ using NTSTATUS = std::uint32_t;
#define STATUS_NO_MORE_FILES ((NTSTATUS)0x80000006L)
#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004L)
#define STATUS_ACCESS_DENIED ((NTSTATUS)0xC0000022L)
#define STATUS_BUFFER_TOO_SMALL ((NTSTATUS)0xC0000023L)
#define STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS)0xC0000034L)