Correction to 36917: EPROFILE/KPROFILE.Segment is pointer sized, not a pointer.
[reactos.git] / reactos / include / ndk / extypes.h
index 07af4cc..c44d6c9 100644 (file)
@@ -1,4 +1,4 @@
-/*++ NDK Version: 0095
+/*++ NDK Version: 0098
 
 Copyright (c) Alex Ionescu.  All rights reserved.
 
@@ -12,7 +12,7 @@ Abstract:
 
 Author:
 
-    Alex Ionescu (alex.ionescu@reactos.com)   06-Oct-2004
+    Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
 
 --*/
 
@@ -24,18 +24,31 @@ Author:
 //
 #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
@@ -43,6 +56,8 @@ typedef USHORT RTL_ATOM, *PRTL_ATOM;
 //
 // 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;
@@ -50,49 +65,94 @@ 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
@@ -128,7 +188,9 @@ typedef enum _HARDERROR_RESPONSE
     ResponseNo,
     ResponseOk,
     ResponseRetry,
-    ResponseYes
+    ResponseYes,
+    ResponseTryAgain,
+    ResponseContinue
 } HARDERROR_RESPONSE, *PHARDERROR_RESPONSE;
 
 //
@@ -166,9 +228,9 @@ typedef enum _SYSTEM_INFORMATION_CLASS
     SystemUnloadGdiDriverInformation,
     SystemTimeAdjustmentInformation,
     SystemSummaryMemoryInformation,
-    SystemNextEventIdInformation,
-    SystemEventIdsInformation,
-    SystemCrashDumpInformation,
+    SystemMirrorMemoryInformation,
+    SystemPerformanceTraceInformation,
+    SystemObsolete0,
     SystemExceptionInformation,
     SystemCrashDumpStateInformation,
     SystemKernelDebuggerInformation,
@@ -178,7 +240,7 @@ typedef enum _SYSTEM_INFORMATION_CLASS
     SystemPrioritySeperation,
     SystemPlugPlayBusInformation,
     SystemDockInformation,
-    _SystemPowerInformation, // FIXME 
+    SystemPowerInformationNative,
     SystemProcessorSpeedInformation,
     SystemCurrentTimeZoneInformation,
     SystemLookasideInformation,
@@ -190,7 +252,51 @@ typedef enum _SYSTEM_INFORMATION_CLASS
     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;
 
 //
@@ -198,7 +304,8 @@ typedef enum _SYSTEM_INFORMATION_CLASS
 //
 typedef enum _MUTANT_INFORMATION_CLASS
 {
-    MutantBasicInformation
+    MutantBasicInformation,
+    MutantOwnerInformation
 } MUTANT_INFORMATION_CLASS;
 
 //
@@ -234,7 +341,39 @@ typedef enum _EVENT_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
@@ -250,7 +389,7 @@ typedef struct _EX_QUEUE_WORKER_INFO
 typedef struct _EX_WORK_QUEUE
 {
     KQUEUE WorkerQueue;
-    ULONG DynamicThreadCount;
+    LONG DynamicThreadCount;
     ULONG WorkItemsProcessed;
     ULONG WorkItemsProcessedLastPass;
     ULONG QueueDepthLastPass;
@@ -265,34 +404,159 @@ typedef struct _EX_FAST_REF
     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;
@@ -306,27 +570,60 @@ typedef struct _HANDLE_TABLE_ENTRY
         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
@@ -356,6 +653,11 @@ typedef struct _MUTANT_BASIC_INFORMATION
     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
 //
@@ -412,9 +714,9 @@ typedef struct _SYSTEM_BASIC_INFORMATION
     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;
 
@@ -507,7 +809,7 @@ typedef struct _SYSTEM_PERFORMANCE_INFORMATION
     ULONG SystemCalls;
 } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
 
-// Class 3 
+// Class 3
 typedef struct _SYSTEM_TIMEOFDAY_INFORMATION
 {
     LARGE_INTEGER BootTime;
@@ -515,6 +817,10 @@ typedef struct _SYSTEM_TIMEOFDAY_INFORMATION
     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
@@ -552,24 +858,24 @@ typedef struct _SYSTEM_PROCESS_INFORMATION
     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
@@ -581,7 +887,7 @@ typedef struct _SYSTEM_PROCESS_INFORMATION
     LARGE_INTEGER WriteTransferCount;
     LARGE_INTEGER OtherTransferCount;
 
-    SYSTEM_THREAD_INFORMATION TH[1];
+    //SYSTEM_THREAD_INFORMATION TH[1];
 } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
 
 // Class 6
@@ -627,57 +933,11 @@ typedef struct _SYSTEM_CALL_TIME_INFORMATION
     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
@@ -804,14 +1064,10 @@ typedef struct _SYSTEM_VDM_INSTEMUL_INFO
     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;
@@ -820,8 +1076,9 @@ typedef struct _SYSTEM_CACHE_INFORMATION
     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
@@ -874,6 +1131,7 @@ typedef struct _SYSTEM_MEMORY_INFO
     USHORT ModifiedCount;
     USHORT PageTableCount;
 } SYSTEM_MEMORY_INFO, *PSYSTEM_MEMORY_INFO;
+
 typedef struct _SYSTEM_MEMORY_INFORMATION
 {
     ULONG InfoSize;
@@ -889,10 +1147,11 @@ typedef struct _SYSTEM_GDI_DRIVER_INFORMATION
     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
@@ -910,13 +1169,18 @@ typedef struct _SYSTEM_SET_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
@@ -988,8 +1252,7 @@ typedef struct _SYSTEM_DOCK_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;
@@ -1001,7 +1264,7 @@ typedef struct __SYSTEM_POWER_INFORMATION
     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
@@ -1012,7 +1275,7 @@ 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
@@ -1042,16 +1305,150 @@ 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