NtdllBase.h
1 #pragma once 2 3 #include "pch.h" 4 5 #define DECLARE_NTDLL_FUNCTION(name, ...) \ 6 private: \ 7 typedef NTSTATUS(NTAPI* name ## _t)( \ 8 __VA_ARGS__ \ 9 ); \ 10 name ## _t m_ ## name; \ 11 public: \ 12 NTSTATUS name(__VA_ARGS__); 13 14 class Ntdll 15 { 16 private: 17 HMODULE m_module; 18 public: 19 struct SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX 20 { 21 PVOID Object; 22 ULONG_PTR UniqueProcessId; 23 ULONG_PTR HandleValue; 24 ULONG GrantedAccess; 25 USHORT CreatorBackTraceIndex; 26 USHORT ObjectTypeIndex; 27 ULONG HandleAttributes; 28 ULONG Reserved; 29 }; 30 31 struct SYSTEM_HANDLE_INFORMATION_EX 32 { 33 ULONG_PTR NumberOfHandles; 34 ULONG_PTR Reserved; 35 SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX Handles[1]; 36 }; 37 38 enum POOL_TYPE 39 { 40 NonPagedPool, 41 PagedPool, 42 NonPagedPoolMustSucceed, 43 DontUseThisType, 44 NonPagedPoolCacheAligned, 45 PagedPoolCacheAligned, 46 NonPagedPoolCacheAlignedMustS 47 }; 48 49 struct OBJECT_TYPE_INFORMATION 50 { 51 UNICODE_STRING Name; 52 ULONG TotalNumberOfObjects; 53 ULONG TotalNumberOfHandles; 54 ULONG TotalPagedPoolUsage; 55 ULONG TotalNonPagedPoolUsage; 56 ULONG TotalNamePoolUsage; 57 ULONG TotalHandleTableUsage; 58 ULONG HighWaterNumberOfObjects; 59 ULONG HighWaterNumberOfHandles; 60 ULONG HighWaterPagedPoolUsage; 61 ULONG HighWaterNonPagedPoolUsage; 62 ULONG HighWaterNamePoolUsage; 63 ULONG HighWaterHandleTableUsage; 64 ULONG InvalidAttributes; 65 GENERIC_MAPPING GenericMapping; 66 ULONG ValidAccess; 67 BOOLEAN SecurityRequired; 68 BOOLEAN MaintainHandleCount; 69 USHORT MaintainTypeList; 70 POOL_TYPE PoolType; 71 ULONG PagedPoolUsage; 72 ULONG NonPagedPoolUsage; 73 }; 74 75 Ntdll(); 76 77 DECLARE_NTDLL_FUNCTION(NtQuerySystemInformation, 78 ULONG SystemInformationClass, 79 PVOID SystemInformation, 80 ULONG SystemInformationLength, 81 PULONG ReturnLength 82 ) 83 84 DECLARE_NTDLL_FUNCTION(NtDuplicateObject, 85 HANDLE SourceProcessHandle, 86 HANDLE SourceHandle, 87 HANDLE TargetProcessHandle, 88 PHANDLE TargetHandle, 89 ACCESS_MASK DesiredAccess, 90 ULONG Attributes, 91 ULONG Options 92 ) 93 94 DECLARE_NTDLL_FUNCTION(NtQueryObject, 95 HANDLE ObjectHandle, 96 ULONG ObjectInformationClass, 97 PVOID ObjectInformation, 98 ULONG ObjectInformationLength, 99 PULONG ReturnLength 100 ); 101 };