-/*++ NDK Version: 0095
+/*++ NDK Version: 0098
Copyright (c) Alex Ionescu. All rights reserved.
Author:
- Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
+ Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
--*/
//
#include <umtypes.h>
#include <cfg.h>
-#if defined(_MSC_VER) && !defined(NTOS_MODE_USER)
+#if !defined(NTOS_MODE_USER)
#include <ntimage.h>
#endif
#include <cmtypes.h>
#include <ketypes.h>
#include <potypes.h>
#include <lpctypes.h>
+#ifdef NTOS_MODE_USER
+#include <obtypes.h>
+#endif
//
-// Atom and Language IDs
+// GCC compatibility
+//
+#if defined(__GNUC__)
+#define __ALIGNED(n) __attribute__((aligned (n)))
+#elif defined(_MSC_VER)
+#define __ALIGNED(n) __declspec(align(n))
+#else
+#error __ALIGNED not defined for your compiler!
+#endif
+
+//
+// Rtl Atom
//
-typedef USHORT LANGID, *PLANGID;
typedef USHORT RTL_ATOM, *PRTL_ATOM;
#ifndef NTOS_MODE_USER
//
// Kernel Exported Object Types
//
+extern POBJECT_TYPE NTSYSAPI ExDesktopObjectType;
+extern POBJECT_TYPE NTSYSAPI ExWindowStationObjectType;
extern POBJECT_TYPE NTSYSAPI ExIoCompletionType;
extern POBJECT_TYPE NTSYSAPI ExMutantObjectType;
extern POBJECT_TYPE NTSYSAPI ExTimerType;
//
// Exported NT Build Number
//
-extern ULONG NTSYSAPI NtBuildNumber;
+extern ULONG NtBuildNumber;
//
// Invalid Handle Value Constant
//
-#define INVALID_HANDLE_VALUE (HANDLE)-1
+#define INVALID_HANDLE_VALUE (HANDLE)-1
#endif
//
// Increments
//
-#define MUTANT_INCREMENT 1
+#define MUTANT_INCREMENT 1
//
// Callback Object Access Mask
//
-#define CALLBACK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x0001)
-#define CALLBACK_EXECUTE (STANDARD_RIGHTS_EXECUTE|SYNCHRONIZE|0x0001)
-#define CALLBACK_WRITE (STANDARD_RIGHTS_WRITE|SYNCHRONIZE|0x0001)
-#define CALLBACK_READ (STANDARD_RIGHTS_READ|SYNCHRONIZE|0x0001)
+#define CALLBACK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x0001)
+#define CALLBACK_EXECUTE (STANDARD_RIGHTS_EXECUTE|SYNCHRONIZE|0x0001)
+#define CALLBACK_WRITE (STANDARD_RIGHTS_WRITE|SYNCHRONIZE|0x0001)
+#define CALLBACK_READ (STANDARD_RIGHTS_READ|SYNCHRONIZE|0x0001)
//
// Event Object Access Masks
//
#ifdef NTOS_MODE_USER
-#define EVENT_QUERY_STATE 0x0001
+#define EVENT_QUERY_STATE 0x0001
+
+//
+// Semaphore Object Access Masks
+//
+#define SEMAPHORE_QUERY_STATE 0x0001
+#else
//
-// Semaphore Object Acess Masks
+// Mutant Object Access Masks
//
-#define SEMAPHORE_QUERY_STATE 0x0001
+#define MUTANT_QUERY_STATE 0x0001
+#define MUTANT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
+ SYNCHRONIZE | \
+ MUTANT_QUERY_STATE)
+
+#define TIMER_QUERY_STATE 0x0001
+#define TIMER_MODIFY_STATE 0x0002
+#define TIMER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
+ SYNCHRONIZE | \
+ TIMER_QUERY_STATE | \
+ TIMER_MODIFY_STATE)
#endif
//
// Event Pair Access Masks
//
-#define EVENT_PAIR_ALL_ACCESS 0x1F0000L
+#define EVENT_PAIR_ALL_ACCESS 0x1F0000L
+
+//
+// Profile Object Access Masks
+//
+#define PROFILE_CONTROL 0x0001
+#define PROFILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | PROFILE_CONTROL)
//
// Maximum Parameters for NtRaiseHardError
//
-#define MAXIMUM_HARDERROR_PARAMETERS 4
+#define MAXIMUM_HARDERROR_PARAMETERS 4
+
+//
+// Pushlock bits
+//
+#define EX_PUSH_LOCK_LOCK_V ((ULONG_PTR)0x0)
+#define EX_PUSH_LOCK_LOCK ((ULONG_PTR)0x1)
+#define EX_PUSH_LOCK_WAITING ((ULONG_PTR)0x2)
+#define EX_PUSH_LOCK_WAKING ((ULONG_PTR)0x4)
+#define EX_PUSH_LOCK_MULTIPLE_SHARED ((ULONG_PTR)0x8)
+#define EX_PUSH_LOCK_SHARE_INC ((ULONG_PTR)0x10)
+#define EX_PUSH_LOCK_PTR_BITS ((ULONG_PTR)0xf)
+
+//
+// Pushlock Wait Block Flags
+//
+#define EX_PUSH_LOCK_FLAGS_EXCLUSIVE 1
+#define EX_PUSH_LOCK_FLAGS_WAIT_V 1
+#define EX_PUSH_LOCK_FLAGS_WAIT 2
+
+//
+// Resource (ERESOURCE) Flags
+//
+#define ResourceHasDisabledPriorityBoost 0x08
//
// Shutdown types for NtShutdownSystem
ResponseNo,
ResponseOk,
ResponseRetry,
- ResponseYes
+ ResponseYes,
+ ResponseTryAgain,
+ ResponseContinue
} HARDERROR_RESPONSE, *PHARDERROR_RESPONSE;
//
SystemUnloadGdiDriverInformation,
SystemTimeAdjustmentInformation,
SystemSummaryMemoryInformation,
- SystemNextEventIdInformation,
- SystemEventIdsInformation,
- SystemCrashDumpInformation,
+ SystemMirrorMemoryInformation,
+ SystemPerformanceTraceInformation,
+ SystemObsolete0,
SystemExceptionInformation,
SystemCrashDumpStateInformation,
SystemKernelDebuggerInformation,
SystemPrioritySeperation,
SystemPlugPlayBusInformation,
SystemDockInformation,
- _SystemPowerInformation, // FIXME
+ SystemPowerInformationNative,
SystemProcessorSpeedInformation,
SystemCurrentTimeZoneInformation,
SystemLookasideInformation,
SystemVerifierInformation,
SystemAddVerifier,
SystemSessionProcessesInformation,
- SystemInformationClassMax
+ SystemLoadGdiDriverInSystemSpaceInformation,
+ SystemNumaProcessorMap,
+ SystemPrefetcherInformation,
+ SystemExtendedProcessInformation,
+ SystemRecommendedSharedDataAlignment,
+ SystemComPlusPackage,
+ SystemNumaAvailableMemory,
+ SystemProcessorPowerInformation,
+ SystemEmulationBasicInformation,
+ SystemEmulationProcessorInformation,
+ SystemExtendedHanfleInformation,
+ SystemLostDelayedWriteInformation,
+ SystemBigPoolInformation,
+ SystemSessionPoolTagInformation,
+ SystemSessionMappedViewInformation,
+ SystemHotpatchInformation,
+ SystemObjectSecurityMode,
+ SystemWatchDogTimerHandler,
+ SystemWatchDogTimerInformation,
+ SystemLogicalProcessorInformation,
+ SystemWow64SharedInformationObsolete,
+ SystemRegisterFirmwareTableInformationHandler,
+ SystemFirmwareTableInformation,
+ SystemModuleInformationEx,
+ SystemVerifierTriageInformation,
+ SystemSuperfetchInformation,
+ SystemMemoryListInformation,
+ SystemFileCacheInformationEx,
+ SystemThreadPriorityClientIdInformation,
+ SystemProcessorIdleCycleTimeInformation,
+ SystemVerifierCancellationInformation,
+ SystemProcessorPowerInformationEx,
+ SystemRefTraceInformation,
+ SystemSpecialPoolInformation,
+ SystemProcessIdInformation,
+ SystemErrorPortInformation,
+ SystemBootEnvironmentInformation,
+ SystemHypervisorInformation,
+ SystemVerifierInformationEx,
+ SystemTimeZoneInformation,
+ SystemImageFileExecutionOptionsInformation,
+ SystemCoverageInformation,
+ SystemPrefetchPathInformation,
+ SystemVerifierFaultsInformation,
+ MaxSystemInfoClass,
} SYSTEM_INFORMATION_CLASS;
//
//
typedef enum _MUTANT_INFORMATION_CLASS
{
- MutantBasicInformation
+ MutantBasicInformation,
+ MutantOwnerInformation
} MUTANT_INFORMATION_CLASS;
//
EventBasicInformation
} EVENT_INFORMATION_CLASS;
-#ifndef NTOS_MODE_USER
+#ifdef NTOS_MODE_USER
+
+//
+// Firmware Table Actions for SystemFirmwareTableInformation
+//
+typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION
+{
+ SystemFirmwareTable_Enumerate = 0,
+ SystemFirmwareTable_Get = 1,
+} SYSTEM_FIRMWARE_TABLE_ACTION, *PSYSTEM_FIRMWARE_TABLE_ACTION;
+
+//
+// Firmware Handler Callback
+//
+struct _SYSTEM_FIRMWARE_TABLE_INFORMATION;
+typedef
+NTSTATUS
+(__cdecl *PFNFTH)(
+ IN struct _SYSTEM_FIRMWARE_TABLE_INFORMATION *FirmwareTableInformation
+);
+
+#else
+
+//
+// Handle Enumeration Callback
+//
+struct _HANDLE_TABLE_ENTRY;
+typedef BOOLEAN
+(NTAPI *PEX_ENUM_HANDLE_CALLBACK)(
+ IN struct _HANDLE_TABLE_ENTRY *HandleTableEntry,
+ IN HANDLE Handle,
+ IN PVOID Context
+);
//
// Executive Work Queue Structures
typedef struct _EX_WORK_QUEUE
{
KQUEUE WorkerQueue;
- ULONG DynamicThreadCount;
+ LONG DynamicThreadCount;
ULONG WorkItemsProcessed;
ULONG WorkItemsProcessedLastPass;
ULONG QueueDepthLastPass;
union
{
PVOID Object;
- ULONG RefCnt:3;
- ULONG Value;
+ ULONG_PTR RefCnt:3;
+ ULONG_PTR Value;
};
} EX_FAST_REF, *PEX_FAST_REF;
//
-// FIXME
+// Executive Cache-Aware Rundown Reference Descriptor
//
-typedef struct _RUNDOWN_DESCRIPTOR
+typedef struct _EX_RUNDOWN_REF_CACHE_AWARE
{
- ULONG_PTR References;
- KEVENT RundownEvent;
-} RUNDOWN_DESCRIPTOR, *PRUNDOWN_DESCRIPTOR;
+ PEX_RUNDOWN_REF RunRefs;
+ PVOID PoolToFree;
+ ULONG RunRefSize;
+ ULONG Number;
+} EX_RUNDOWN_REF_CACHE_AWARE;
+
+//
+// Executive Rundown Wait Block
+//
+typedef struct _EX_RUNDOWN_WAIT_BLOCK
+{
+ ULONG_PTR Count;
+ KEVENT WakeEvent;
+} EX_RUNDOWN_WAIT_BLOCK, *PEX_RUNDOWN_WAIT_BLOCK;
+
+//
+// Executive Pushlock
+//
+#undef EX_PUSH_LOCK
+#undef PEX_PUSH_LOCK
+typedef struct _EX_PUSH_LOCK
+{
+ union
+ {
+ struct
+ {
+ ULONG_PTR Locked:1;
+ ULONG_PTR Waiting:1;
+ ULONG_PTR Waking:1;
+ ULONG_PTR MultipleShared:1;
+ ULONG_PTR Shared:sizeof (ULONG_PTR) * 8 - 4;
+ };
+ ULONG_PTR Value;
+ PVOID Ptr;
+ };
+} EX_PUSH_LOCK, *PEX_PUSH_LOCK;
+
+//
+// Executive Pushlock Wait Block
+//
+typedef __ALIGNED(16) struct _EX_PUSH_LOCK_WAIT_BLOCK
+{
+ union
+ {
+ KGATE WakeGate;
+ KEVENT WakeEvent;
+ };
+ struct _EX_PUSH_LOCK_WAIT_BLOCK *Next;
+ struct _EX_PUSH_LOCK_WAIT_BLOCK *Last;
+ struct _EX_PUSH_LOCK_WAIT_BLOCK *Previous;
+ LONG ShareCount;
+ LONG Flags;
+#if DBG
+ BOOLEAN Signaled;
+ EX_PUSH_LOCK NewValue;
+ EX_PUSH_LOCK OldValue;
+ PEX_PUSH_LOCK PushLock;
+#endif
+} EX_PUSH_LOCK_WAIT_BLOCK, *PEX_PUSH_LOCK_WAIT_BLOCK;
//
// Callback Object
//
typedef struct _CALLBACK_OBJECT
{
- ULONG Name;
+ ULONG Signature;
KSPIN_LOCK Lock;
LIST_ENTRY RegisteredCallbacks;
- ULONG AllowMultipleCallbacks;
-} CALLBACK_OBJECT , *PCALLBACK_OBJECT;
+ BOOLEAN AllowMultipleCallbacks;
+ UCHAR reserved[3];
+} CALLBACK_OBJECT;
+
+//
+// Callback Handle
+//
+typedef struct _CALLBACK_REGISTRATION
+{
+ LIST_ENTRY Link;
+ PCALLBACK_OBJECT CallbackObject;
+ PCALLBACK_FUNCTION CallbackFunction;
+ PVOID CallbackContext;
+ ULONG Busy;
+ BOOLEAN UnregisterWaiting;
+} CALLBACK_REGISTRATION, *PCALLBACK_REGISTRATION;
+
+//
+// Internal Callback Object
+//
+typedef struct _EX_CALLBACK_ROUTINE_BLOCK
+{
+ EX_RUNDOWN_REF RundownProtect;
+ PEX_CALLBACK_FUNCTION Function;
+ PVOID Context;
+} EX_CALLBACK_ROUTINE_BLOCK, *PEX_CALLBACK_ROUTINE_BLOCK;
+
+//
+// Internal Callback Handle
+//
+typedef struct _EX_CALLBACK
+{
+ EX_FAST_REF RoutineBlock;
+} EX_CALLBACK, *PEX_CALLBACK;
+
+//
+// Profile Object
+//
+typedef struct _EPROFILE
+{
+ PEPROCESS Process;
+ PVOID RangeBase;
+ SIZE_T RangeSize;
+ PVOID Buffer;
+ ULONG BufferSize;
+ ULONG BucketSize;
+ PKPROFILE ProfileObject;
+ PVOID LockedBufferAddress;
+ PMDL Mdl;
+ ULONG_PTR Segment;
+ KPROFILE_SOURCE ProfileSource;
+ KAFFINITY Affinity;
+} EPROFILE, *PEPROFILE;
//
// Handle Table Structures
//
+typedef struct _HANDLE_TRACE_DB_ENTRY
+{
+ CLIENT_ID ClientId;
+ HANDLE Handle;
+ ULONG Type;
+ PVOID StackTrace[16];
+} HANDLE_TRACE_DB_ENTRY, *PHANDLE_TRACE_DB_ENTRY;
+
+typedef struct _HANDLE_TRACE_DEBUG_INFO
+{
+ LONG RefCount;
+ ULONG TableSize;
+ ULONG BitMaskFlags;
+ FAST_MUTEX CloseCompatcionLock;
+ ULONG CurrentStackIndex;
+ HANDLE_TRACE_DB_ENTRY TraceDb[1];
+} HANDLE_TRACE_DEBUG_INFO, *PHANDLE_TRACE_DEBUG_INFO;
+
typedef struct _HANDLE_TABLE_ENTRY_INFO
{
ULONG AuditMask;
ULONG_PTR ObAttributes;
PHANDLE_TABLE_ENTRY_INFO InfoTable;
ULONG_PTR Value;
- } u1;
+ };
union
{
ULONG GrantedAccess;
- USHORT GrantedAccessIndex;
+ struct
+ {
+ USHORT GrantedAccessIndex;
+ USHORT CreatorBackTraceIndex;
+ };
LONG NextFreeTableEntry;
- } u2;
+ };
} HANDLE_TABLE_ENTRY, *PHANDLE_TABLE_ENTRY;
typedef struct _HANDLE_TABLE
{
- ULONG Flags;
- LONG HandleCount;
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+ ULONG TableCode;
+#else
PHANDLE_TABLE_ENTRY **Table;
+#endif
PEPROCESS QuotaProcess;
- HANDLE UniqueProcessId;
- LONG FirstFreeTableEntry;
- LONG NextIndexNeedingPool;
- ERESOURCE HandleTableLock;
+ PVOID UniqueProcessId;
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+ EX_PUSH_LOCK HandleTableLock[4];
+ LIST_ENTRY HandleTableList;
+ EX_PUSH_LOCK HandleContentionEvent;
+#else
+ ERESOURCE HandleLock;
LIST_ENTRY HandleTableList;
KEVENT HandleContentionEvent;
+#endif
+ PHANDLE_TRACE_DEBUG_INFO DebugInfo;
+ LONG ExtraInfoPages;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+ union
+ {
+ ULONG Flags;
+ UCHAR StrictFIFO:1;
+ };
+ LONG FirstFreeHandle;
+ PHANDLE_TABLE_ENTRY LastFreeHandleEntry;
+ LONG HandleCount;
+ ULONG NextHandleNeedingPool;
+#else
+ ULONG FirstFree;
+ ULONG LastFree;
+ ULONG NextHandleNeedingPool;
+ LONG HandleCount;
+ union
+ {
+ ULONG Flags;
+ UCHAR StrictFIFO:1;
+ };
+#endif
} HANDLE_TABLE, *PHANDLE_TABLE;
#endif
BOOLEAN AbandonedState;
} MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
+typedef struct _MUTANT_OWNER_INFORMATION
+{
+ CLIENT_ID ClientId;
+} MUTANT_OWNER_INFORMATION, *PMUTANT_OWNER_INFORMATION;
+
//
// Information Structures for NtQueryAtom
//
ULONG LowestPhysicalPageNumber;
ULONG HighestPhysicalPageNumber;
ULONG AllocationGranularity;
- ULONG MinimumUserModeAddress;
- ULONG MaximumUserModeAddress;
- KAFFINITY ActiveProcessorsAffinityMask;
+ ULONG_PTR MinimumUserModeAddress;
+ ULONG_PTR MaximumUserModeAddress;
+ ULONG_PTR ActiveProcessorsAffinityMask;
CCHAR NumberOfProcessors;
} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
ULONG SystemCalls;
} SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
-// Class 3
+// Class 3
typedef struct _SYSTEM_TIMEOFDAY_INFORMATION
{
LARGE_INTEGER BootTime;
LARGE_INTEGER TimeZoneBias;
ULONG TimeZoneId;
ULONG Reserved;
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+ ULONGLONG BootTimeBias;
+ ULONGLONG SleepTimeBias;
+#endif
} SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION;
// Class 4
HANDLE InheritedFromUniqueProcessId;
ULONG HandleCount;
ULONG SessionId;
- ULONG PageDirectoryFrame;
+ ULONG_PTR PageDirectoryBase;
//
// This part corresponds to VM_COUNTERS_EX.
// NOTE: *NOT* THE SAME AS VM_COUNTERS!
//
- ULONG PeakVirtualSize;
+ SIZE_T PeakVirtualSize;
ULONG VirtualSize;
- ULONG PageFaultCount;
- ULONG PeakWorkingSetSize;
- ULONG WorkingSetSize;
- ULONG QuotaPeakPagedPoolUsage;
- ULONG QuotaPagedPoolUsage;
- ULONG QuotaPeakNonPagedPoolUsage;
- ULONG QuotaNonPagedPoolUsage;
- ULONG PagefileUsage;
- ULONG PeakPagefileUsage;
- ULONG PrivateUsage;
+ SIZE_T PageFaultCount;
+ SIZE_T PeakWorkingSetSize;
+ SIZE_T WorkingSetSize;
+ SIZE_T QuotaPeakPagedPoolUsage;
+ SIZE_T QuotaPagedPoolUsage;
+ SIZE_T QuotaPeakNonPagedPoolUsage;
+ SIZE_T QuotaNonPagedPoolUsage;
+ SIZE_T PagefileUsage;
+ SIZE_T PeakPagefileUsage;
+ SIZE_T PrivatePageCount;
//
// This part corresponds to IO_COUNTERS
LARGE_INTEGER WriteTransferCount;
LARGE_INTEGER OtherTransferCount;
- SYSTEM_THREAD_INFORMATION TH[1];
+ //SYSTEM_THREAD_INFORMATION TH[1];
} SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
// Class 6
LARGE_INTEGER TimeOfCalls[1];
} SYSTEM_CALL_TIME_INFORMATION, *PSYSTEM_CALL_TIME_INFORMATION;
-// Class 11
-typedef struct _SYSTEM_MODULE_INFORMATION_ENTRY
-{
- ULONG Unknown1;
- ULONG Unknown2;
- PVOID Base;
- ULONG Size;
- ULONG Flags;
- USHORT Index;
- USHORT NameLength;
- USHORT LoadCount;
- USHORT PathLength;
- CHAR ImageName[256];
-} SYSTEM_MODULE_INFORMATION_ENTRY, *PSYSTEM_MODULE_INFORMATION_ENTRY;
-typedef struct _SYSTEM_MODULE_INFORMATION
-{
- ULONG Count;
- SYSTEM_MODULE_INFORMATION_ENTRY Module[1];
-} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
-
-// Class 12
-typedef struct _SYSTEM_RESOURCE_LOCK_ENTRY
-{
- ULONG ResourceAddress;
- ULONG Always1;
- ULONG Unknown;
- ULONG ActiveCount;
- ULONG ContentionCount;
- ULONG Unused[2];
- ULONG NumberOfSharedWaiters;
- ULONG NumberOfExclusiveWaiters;
-} SYSTEM_RESOURCE_LOCK_ENTRY, *PSYSTEM_RESOURCE_LOCK_ENTRY;
-
-typedef struct _SYSTEM_RESOURCE_LOCK_INFO
-{
- ULONG Count;
- SYSTEM_RESOURCE_LOCK_ENTRY Lock[1];
-} SYSTEM_RESOURCE_LOCK_INFO, *PSYSTEM_RESOURCE_LOCK_INFO;
+// Class 11 - See RTL_PROCESS_MODULES
-// FIXME: Class 13
-typedef struct _SYSTEM_BACKTRACE_INFORMATION_ENTRY
-{
- ULONG Dummy;
-} SYSTEM_BACKTRACE_INFORMATION_ENTRY, *PSYSTEM_BACKTRACE_INFORMATION_ENTRY;
+// Class 12 - See RTL_PROCESS_LOCKS
-typedef struct _SYSTEM_BACKTRACE_INFORMATION
-{
- ULONG Unknown[4];
- ULONG Count;
- SYSTEM_BACKTRACE_INFORMATION_ENTRY Trace[1];
-} SYSTEM_BACKTRACE_INFORMATION, *PSYSTEM_BACKTRACE_INFORMATION;
+// Class 13 - See RTL_PROCESS_BACKTRACES
// Class 14 - 15
typedef struct _SYSTEM_POOL_ENTRY
ULONG BopCount;
} SYSTEM_VDM_INSTEMUL_INFO, *PSYSTEM_VDM_INSTEMUL_INFO;
-// FIXME: Class 20
-typedef struct _SYSTEM_VDM_BOP_INFO
-{
- PVOID Dummy;
-} SYSTEM_VDM_BOP_INFO, *PSYSTEM_VDM_BOP_INFO;
+// Class 20 - ULONG VDMBOPINFO
// Class 21
-typedef struct _SYSTEM_CACHE_INFORMATION
+typedef struct _SYSTEM_FILECACHE_INFORMATION
{
ULONG CurrentSize;
ULONG PeakSize;
ULONG MaximumWorkingSet;
ULONG CurrentSizeIncludingTransitionInPages;
ULONG PeakSizeIncludingTransitionInPages;
- ULONG Unused[2];
-} SYSTEM_CACHE_INFORMATION, *PSYSTEM_CACHE_INFORMATION;
+ ULONG TransitionRePurposeCount;
+ ULONG Flags;
+} SYSTEM_FILECACHE_INFORMATION, *PSYSTEM_FILECACHE_INFORMATION;
// Class 22
typedef struct _SYSTEM_POOLTAG
USHORT ModifiedCount;
USHORT PageTableCount;
} SYSTEM_MEMORY_INFO, *PSYSTEM_MEMORY_INFO;
+
typedef struct _SYSTEM_MEMORY_INFORMATION
{
ULONG InfoSize;
PVOID SectionPointer;
PVOID EntryPoint;
PIMAGE_EXPORT_DIRECTORY ExportSectionPointer;
+ ULONG ImageLength;
} SYSTEM_GDI_DRIVER_INFORMATION, *PSYSTEM_GDI_DRIVER_INFORMATION;
// Class 27
-// Not an actually class, simply a PVOID to the ImageAddress
+// Not an actually class, simply a PVOID to the ImageAddress
// Class 28
typedef struct _SYSTEM_QUERY_TIME_ADJUST_INFORMATION
// Class 29 - Same as 25
-// FIXME: Class 30 - 31
+// FIXME: Class 30
-// Class 32
-typedef struct _SYSTEM_CRASH_DUMP_INFORMATION
+// Class 31
+typedef struct _SYSTEM_REF_TRACE_INFORMATION
{
- HANDLE CrashDumpSection;
-} SYSTEM_CRASH_DUMP_INFORMATION, *PSYSTEM_CRASH_DUMP_INFORMATION;
+ UCHAR TraceEnable;
+ UCHAR TracePermanent;
+ UNICODE_STRING TraceProcessName;
+ UNICODE_STRING TracePoolTags;
+} SYSTEM_REF_TRACE_INFORMATION, *PSYSTEM_REF_TRACE_INFORMATION;
+
+// Class 32 - OBSOLETE
// Class 33
typedef struct _SYSTEM_EXCEPTION_INFORMATION
} SYSTEM_DOCK_INFORMATION, *PSYSTEM_DOCK_INFORMATION;
// Class 42
-// FIXME: Conflict with WINNT.H
-typedef struct __SYSTEM_POWER_INFORMATION
+typedef struct _SYSTEM_POWER_INFORMATION_NATIVE
{
BOOLEAN SystemSuspendSupported;
BOOLEAN SystemHibernateSupported;
BOOLEAN SystemAcOrDc;
BOOLEAN PowerDownDisabled;
LARGE_INTEGER SpindownDrives;
-} _SYSTEM_POWER_INFORMATION, *P_SYSTEM_POWER_INFORMATION;
+} SYSTEM_POWER_INFORMATION_NATIVE, *PSYSTEM_POWER_INFORMATION_NATIVE;
// Class 43
typedef struct _SYSTEM_LEGACY_DRIVER_INFORMATION
} SYSTEM_LEGACY_DRIVER_INFORMATION, *PSYSTEM_LEGACY_DRIVER_INFORMATION;
// Class 44
-typedef struct _TIME_ZONE_INFORMATION RTL_TIME_ZONE_INFORMATION;
+//typedef struct _TIME_ZONE_INFORMATION RTL_TIME_ZONE_INFORMATION;
// Class 45
typedef struct _SYSTEM_LOOKASIDE_INFORMATION
// Class 50
// Not a structure. Only a ULONG_PTR for the SystemRangeStart
-// FIXME: Class 51 (Based on MM_DRIVER_VERIFIER_DATA)
+// Class 51
+typedef struct _SYSTEM_VERIFIER_INFORMATION
+{
+ ULONG NextEntryOffset;
+ ULONG Level;
+ UNICODE_STRING DriverName;
+ ULONG RaiseIrqls;
+ ULONG AcquireSpinLocks;
+ ULONG SynchronizeExecutions;
+ ULONG AllocationsAttempted;
+ ULONG AllocationsSucceeded;
+ ULONG AllocationsSucceededSpecialPool;
+ ULONG AllocationsWithNoTag;
+ ULONG TrimRequests;
+ ULONG Trims;
+ ULONG AllocationsFailed;
+ ULONG AllocationsFailedDeliberately;
+ ULONG Loads;
+ ULONG Unloads;
+ ULONG UnTrackedPool;
+ ULONG CurrentPagedPoolAllocations;
+ ULONG CurrentNonPagedPoolAllocations;
+ ULONG PeakPagedPoolAllocations;
+ ULONG PeakNonPagedPoolAllocations;
+ ULONG PagedPoolUsageInBytes;
+ ULONG NonPagedPoolUsageInBytes;
+ ULONG PeakPagedPoolUsageInBytes;
+ ULONG PeakNonPagedPoolUsageInBytes;
+} SYSTEM_VERIFIER_INFORMATION, *PSYSTEM_VERIFIER_INFORMATION;
// FIXME: Class 52
-// Class 53
-typedef struct _SYSTEM_SESSION_PROCESSES_INFORMATION
+// Class 53
+typedef struct _SYSTEM_SESSION_PROCESS_INFORMATION
{
ULONG SessionId;
- ULONG BufferSize;
+ ULONG SizeOfBuf;
PVOID Buffer; // Same format as in SystemProcessInformation
-} SYSTEM_SESSION_PROCESSES_INFORMATION, *PSYSTEM_SESSION_PROCESSES_INFORMATION;
+} SYSTEM_SESSION_PROCESS_INFORMATION, *PSYSTEM_SESSION_PROCESS_INFORMATION;
+// FIXME: Class 54-97
+
+//
+// Hotpatch flags
+//
+#define RTL_HOTPATCH_SUPPORTED_FLAG 0x01
+#define RTL_HOTPATCH_SWAP_OBJECT_NAMES 0x08 << 24
+#define RTL_HOTPATCH_SYNC_RENAME_FILES 0x10 << 24
+#define RTL_HOTPATCH_PATCH_USER_MODE 0x20 << 24
+#define RTL_HOTPATCH_REMAP_SYSTEM_DLL 0x40 << 24
+#define RTL_HOTPATCH_PATCH_KERNEL_MODE 0x80 << 24
+
+
+// Class 69
+typedef struct _SYSTEM_HOTPATCH_CODE_INFORMATION
+{
+ ULONG Flags;
+ ULONG InfoSize;
+ union
+ {
+ struct
+ {
+ ULONG Foo;
+ } CodeInfo;
+ struct
+ {
+ USHORT NameOffset;
+ USHORT NameLength;
+ } KernelInfo;
+ struct
+ {
+ USHORT NameOffset;
+ USHORT NameLength;
+ USHORT TargetNameOffset;
+ USHORT TargetNameLength;
+ UCHAR PatchingFinished;
+ } UserModeInfo;
+ struct
+ {
+ USHORT NameOffset;
+ USHORT NameLength;
+ USHORT TargetNameOffset;
+ USHORT TargetNameLength;
+ UCHAR PatchingFinished;
+ NTSTATUS ReturnCode;
+ HANDLE TargetProcess;
+ } InjectionInfo;
+ struct
+ {
+ HANDLE FileHandle1;
+ PIO_STATUS_BLOCK IoStatusBlock1;
+ PVOID RenameInformation1;
+ PVOID RenameInformationLength1;
+ HANDLE FileHandle2;
+ PIO_STATUS_BLOCK IoStatusBlock2;
+ PVOID RenameInformation2;
+ PVOID RenameInformationLength2;
+ } RenameInfo;
+ struct
+ {
+ HANDLE ParentDirectory;
+ HANDLE ObjectHandle1;
+ HANDLE ObjectHandle2;
+ } AtomicSwap;
+ };
+} SYSTEM_HOTPATCH_CODE_INFORMATION, *PSYSTEM_HOTPATCH_CODE_INFORMATION;
+
+//
+// Class 75
+//
+#ifdef NTOS_MODE_USER
+typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER
+{
+ ULONG ProviderSignature;
+ BOOLEAN Register;
+ PFNFTH FirmwareTableHandler;
+ PVOID DriverObject;
+} SYSTEM_FIRMWARE_TABLE_HANDLER, *PSYSTEM_FIRMWARE_TABLE_HANDLER;
+
+//
+// Class 76
+//
+typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION
+{
+ ULONG ProviderSignature;
+ SYSTEM_FIRMWARE_TABLE_ACTION Action;
+ ULONG TableID;
+ ULONG TableBufferLength;
+ UCHAR TableBuffer[1];
+} SYSTEM_FIRMWARE_TABLE_INFORMATION, *PSYSTEM_FIRMWARE_TABLE_INFORMATION;
+
+//
+// Class 81
+//
+typedef struct _SYSTEM_MEMORY_LIST_INFORMATION
+{
+ SIZE_T ZeroPageCount;
+ SIZE_T FreePageCount;
+ SIZE_T ModifiedPageCount;
+ SIZE_T ModifiedNoWritePageCount;
+ SIZE_T BadPageCount;
+ SIZE_T PageCountByPriority[8];
+ SIZE_T RepurposedPagesByPriority[8];
+} SYSTEM_MEMORY_LIST_INFORMATION, *PSYSTEM_MEMORY_LIST_INFORMATION;
+
+#endif
#endif