A fix in the SYSTEM_HANDLE_INFORMATION structure.
[reactos.git] / reactos / include / ddk / zwtypes.h
index 5e51821..34b4cca 100644 (file)
@@ -1,51 +1,6 @@
 #ifndef __INCLUDE_DDK_ZWTYPES_H
 #define __INCLUDE_DDK_ZWTYPES_H
 
-#define MAX_MESSAGE_DATA   (0x130)
-
-#define UNUSED_MSG_TYPE    (0x0)
-#define LPC_REQUEST        (0x1)
-#define LPC_REPLY          (0x2)
-#define LPC_DATAGRAM       (0x3)
-#define LPC_LOST_REPLY     (0x4)
-#define LPC_PORT_CLOSED    (0x5)
-#define LPC_CLIENT_DIED    (0x6)
-#define LPC_EXCEPTION      (0x7)
-#define LPC_DEBUG_EVENT    (0x8)
-#define LPC_ERROR_EVENT    (0x9)
-#define LPC_CONNECTION_REQUEST (0xa)
-#define LPC_CONNECTION_REFUSED (0xb)
-
-typedef struct _LPCSECTIONINFO
-{
-   DWORD Length;
-   HANDLE SectionHandle;
-   DWORD Unknown1;
-   DWORD SectionSize;
-   DWORD ClientBaseAddress;
-   DWORD ServerBaseAddress;
-} LPCSECTION, *PLPCSECTIONINFO;
-
-typedef struct _LPCSECTIONMAPINFO
-{
-   DWORD Length;
-   DWORD SectionSize;
-   DWORD ServerBaseAddress;
-} LPCSECTIONMAPINFO, *PLPCSECTIONMAPINFO;
-
-typedef struct _LPCMESSAGE
-{
-   WORD ActualMessageLength;
-   WORD TotalMessageLength;
-   DWORD MessageType;
-   DWORD ClientProcessId;
-   DWORD ClientThreadId;
-   DWORD MessageId;
-   DWORD SharedSectionSize;
-   BYTE MessageData[MAX_MESSAGE_DATA];
-} LPCMESSAGE, *PLPCMESSAGE;
-
-
 #define NtCurrentProcess() ( (HANDLE) 0xFFFFFFFF )
 #define NtCurrentThread() ( (HANDLE) 0xFFFFFFFE )
 
@@ -92,7 +47,8 @@ typedef struct _LPCMESSAGE
 #define ProcessWx86Information                 19
 #define ProcessHandleCount                     20
 #define ProcessAffinityMask                    21
-#define MaxProcessInfoClass                    22
+#define ProcessImageFileName                    22
+#define MaxProcessInfoClass                    23
 
 // thread query / set information class
 #define ThreadBasicInformation                 0
@@ -129,19 +85,617 @@ typedef struct _LPCMESSAGE
 #define EventBasicInformation                  0
 
 // system information
+// {Nt|Zw}{Query|Set}SystemInformation
+
+typedef
+enum _SYSTEM_INFORMATION_CLASS
+{
+       SystemInformationClassMin               = 0,
+       SystemBasicInformation                  = 0,    /* Q */
+       SystemProcessorInformation              = 1,    /* Q */
+       SystemPerformanceInformation            = 2,    /* Q */
+       SystemTimeInformation                   = 3,    /* Q */
+       SystemPathInformation                   = 4,
+       SystemProcessInformation                = 5,    /* Q */
+       SystemServiceDescriptorTableInfo        = 6,    /* Q */
+       SystemIoConfigInformation               = 7,    /* Q */
+       SystemProcessorTimeInformation          = 8,    /* Q */
+       SystemNtGlobalFlagInformation           = 9,    /* QS */
+       SystemInformation10                     = 10,
+       SystemModuleInformation                 = 11,   /* Q */
+       SystemResourceLockInformation           = 12,   /* Q */
+       SystemInformation13                     = 13,
+       SystemInformation14                     = 14,
+       SystemInformation15                     = 15,
+       SystemHandleInformation                 = 16,   /* Q */
+       SystemObjectInformation                 = 17,   /* Q */
+       SystemPageFileInformation               = 18,   /* Q */
+       SystemInstructionEmulationInfo          = 19,   /* Q */
+       SystemInformation20                     = 20,
+       SystemCacheInformation                  = 21,   /* QS */
+       SystemPoolTagInformation                = 22,   /* Q (checked build only) */
+       SystemProcessorScheduleInfo             = 23,   /* Q */
+       SystemDpcInformation                    = 24,   /* QS */
+       SystemInformation25                     = 25,
+       SystemLoadImage                         = 26,   /* S (callable) */
+       SystemUnloadImage                       = 27,   /* S (callable) */
+       SystemTimeAdjustmentInformation         = 28,   /* QS */
+       SystemInformation29                     = 29,
+       SystemInformation30                     = 30,
+       SystemInformation31                     = 31,
+       SystemCrashDumpSectionInfo              = 32,   /* Q */
+       SystemProcessorFaultCountInfo           = 33,   /* Q */
+       SystemCrashDumpStateInfo                = 34,   /* Q */
+       SystemDebuggerInformation               = 35,   /* Q */
+       SystemThreadSwitchCountersInfo          = 36,   /* Q */
+       SystemQuotaInformation                  = 37,   /* QS */
+       SystemLoadDriver                        = 38,   /* S */
+       SystemPrioritySeparationInfo            = 39,   /* S */
+       SystemInformation40                     = 40,
+       SystemInformation41                     = 41,
+       SystemInformation42                     = 42,
+       SystemInformation43                     = 43,
+       SystemTimeZoneInformation               = 44,   /* QS */
+       SystemLookasideInformation              = 45,   /* Q */
+       SystemInformationClassMax
+
+} SYSTEM_INFORMATION_CLASS;
+
+// SystemBasicInformation (0)
+typedef
+struct _SYSTEM_BASIC_INFORMATION
+{
+       DWORD   AlwaysZero;
+       ULONG   KeMaximumIncrement;
+       ULONG   MmPageSize;
+       ULONG   MmNumberOfPhysicalPages;
+       ULONG   MmLowestPhysicalPage;
+       ULONG   MmHighestPhysicalPage;
+       PVOID   MmLowestUserAddress;
+       PVOID   MmLowestUserAddress1;
+       PVOID   MmHighestUserAddress;
+       DWORD   KeActiveProcessors;
+       USHORT  KeNumberProcessors;
+       
+} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
+
+// SystemProcessorInformation (1)
+typedef
+struct _SYSTEM_PROCESSOR_INFORMATION
+{
+       USHORT  KeProcessorArchitecture;
+       USHORT  KeProcessorLevel;
+       USHORT  KeProcessorRevision;
+       USHORT  AlwaysZero;
+       DWORD   KeFeatureBits;
+
+} SYSTEM_PROCESSOR_INFORMATION, *PSYSTEM_PROCESSOR_INFORMATION;
+
+// SystemPerformanceInfo (2)
+typedef
+struct _SYSTEM_PERFORMANCE_INFO
+{
+       LARGE_INTEGER   TotalProcessorTime;
+       LARGE_INTEGER   IoReadTransferCount;
+       LARGE_INTEGER   IoWriteTransferCount;
+       LARGE_INTEGER   IoOtherTransferCount;
+       ULONG           IoReadOperationCount;
+       ULONG           IoWriteOperationCount;
+       ULONG           IoOtherOperationCount;
+       ULONG           MmAvailablePages;
+       ULONG           MmTotalCommitedPages;
+       ULONG           MmTotalCommitLimit;
+       ULONG           MmPeakLimit;
+       ULONG           PageFaults;
+       ULONG           WriteCopies;
+       ULONG           TransitionFaults;
+       ULONG           Unknown1;
+       ULONG           DemandZeroFaults;
+       ULONG           PagesInput;
+       ULONG           PagesRead;
+       ULONG           Unknown2;
+       ULONG           Unknown3;
+       ULONG           PagesOutput;
+       ULONG           PageWrites;
+       ULONG           Unknown4;
+       ULONG           Unknown5;
+       ULONG           PoolPagedBytes;
+       ULONG           PoolNonPagedBytes;
+       ULONG           Unknown6;
+       ULONG           Unknown7;
+       ULONG           Unknown8;
+       ULONG           Unknown9;
+       ULONG           MmTotalSystemFreePtes;
+       ULONG           MmSystemCodepage;
+       ULONG           MmTotalSystemDriverPages;
+       ULONG           MmTotalSystemCodePages;
+       ULONG           Unknown10;
+       ULONG           Unknown11;
+       ULONG           Unknown12;
+       ULONG           MmSystemCachePage;
+       ULONG           MmPagedPoolPage;
+       ULONG           MmSystemDriverPage;
+       ULONG           CcFastReadNoWait;
+       ULONG           CcFastReadWait;
+       ULONG           CcFastReadResourceMiss;
+       ULONG           CcFastReadNotPossible;
+       ULONG           CcFastMdlReadNoWait;
+       ULONG           CcFastMdlReadWait;
+       ULONG           CcFastMdlReadResourceMiss;
+       ULONG           CcFastMdlReadNotPossible;
+       ULONG           CcMapDataNoWait;
+       ULONG           CcMapDataWait;
+       ULONG           CcMapDataNoWaitMiss;
+       ULONG           CcMapDataWaitMiss;
+       ULONG           CcPinMappedDataCount;
+       ULONG           CcPinReadNoWait;
+       ULONG           CcPinReadWait;
+       ULONG           CcPinReadNoWaitMiss;
+       ULONG           CcPinReadWaitMiss;
+       ULONG           CcCopyReadNoWait;
+       ULONG           CcCopyReadWait;
+       ULONG           CcCopyReadNoWaitMiss;
+       ULONG           CcCopyReadWaitMiss;
+       ULONG           CcMdlReadNoWait;
+       ULONG           CcMdlReadWait;
+       ULONG           CcMdlReadNoWaitMiss;
+       ULONG           CcMdlReadWaitMiss;
+       ULONG           CcReadaheadIos;
+       ULONG           CcLazyWriteIos;
+       ULONG           CcLazyWritePages;
+       ULONG           CcDataFlushes;
+       ULONG           CcDataPages;
+       ULONG           ContextSwitches;
+       ULONG           Unknown13;
+       ULONG           Unknown14;
+       ULONG           SystemCalls;
+
+} SYSTEM_PERFORMANCE_INFO, *PSYSTEM_PERFORMANCE_INFO;
+
+// SystemTimeInformation (3)
+typedef
+struct _SYSTEM_TIME_INFORMATION
+{
+       TIME    KeBootTime;
+       TIME    KeSystemTime;
+       TIME    ExpTimeZoneBias;
+       ULONG   ExpTimeZoneId;
+       ULONG   Unused;
+       
+} SYSTEM_TIME_INFORMATION, *PSYSTEM_TIME_INFORMATION;
+
+// SystemPathInformation (4)
+// IT DOES NOT WORK
+typedef
+struct _SYSTEM_PATH_INFORMATION
+{
+       PVOID   Dummy;
+
+} SYSTEM_PATH_INFORMATION, * PSYSTEM_PATH_INFORMATION;
+
+// SystemProcessThreadInfo (5)
+typedef
+struct _SYSTEM_THREAD_INFORMATION
+{
+       TIME            KernelTime;
+       TIME            UserTime;
+       TIME            CreateTime;
+       ULONG           TickCount;
+       ULONG           StartEIP;
+       CLIENT_ID       ClientId;
+       ULONG           DynamicPriority;
+       ULONG           BasePriority;
+       ULONG           nSwitches;
+       DWORD           State;
+       KWAIT_REASON    WaitReason;
+       
+} SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;
+
+typedef
+struct SYSTEM_PROCESS_INFORMATION
+{
+       ULONG                           RelativeOffset;
+       ULONG                           ThreadCount;
+       ULONG                           Unused1 [6];
+       TIME                            CreateTime;
+       TIME                            UserTime;
+       TIME                            KernelTime;
+       UNICODE_STRING                  Name;
+       ULONG                           BasePriority;
+       ULONG                           ProcessId;
+       ULONG                           ParentProcessId;
+       ULONG                           HandleCount;
+       ULONG                           Unused2[2];
+       ULONG                           PeakVirtualSizeBytes;
+       ULONG                           TotalVirtualSizeBytes;
+       ULONG                           PageFaultCount;
+       ULONG                           PeakWorkingSetSizeBytes;
+       ULONG                           TotalWorkingSetSizeBytes;
+       ULONG                           PeakPagedPoolUsagePages;
+       ULONG                           TotalPagedPoolUsagePages;
+       ULONG                           PeakNonPagedPoolUsagePages;
+       ULONG                           TotalNonPagedPoolUsagePages;
+       ULONG                           TotalPageFileUsageBytes;
+       ULONG                           PeakPageFileUsageBytes;
+       ULONG                           TotalPrivateBytes;
+       SYSTEM_THREAD_INFORMATION       ThreadSysInfo [1];
+       
+} SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
+
+// SystemServiceDescriptorTableInfo (6)
+typedef
+struct _SYSTEM_SDT_INFORMATION
+{
+       ULONG   BufferLength;
+       ULONG   NumberOfSystemServiceTables;
+       ULONG   NumberOfServices [1];
+       ULONG   ServiceCounters [1];
+
+} SYSTEM_SDT_INFORMATION, *PSYSTEM_SDT_INFORMATION;
+
+// SystemIoConfigInformation (7)
+typedef
+struct _SYSTEM_IOCONFIG_INFORMATION
+{
+       ULONG   DiskCount;
+       ULONG   FloppyCount;
+       ULONG   CdRomCount;
+       ULONG   TapeCount;
+       ULONG   SerialCount;
+       ULONG   ParallelCount;
+       
+} SYSTEM_IOCONFIG_INFORMATION, *PSYSTEM_IOCONFIG_INFORMATION;
+
+// SystemProcessorTimeInformation (8)
+typedef
+struct _SYSTEM_PROCESSORTIME_INFO
+{
+       TIME    TotalProcessorRunTime;
+       TIME    TotalProcessorTime;
+       TIME    TotalProcessorUserTime;
+       TIME    TotalDPCTime;
+       TIME    TotalInterruptTime;
+       ULONG   TotalInterrupts;
+       ULONG   Unused;
+       
+} SYSTEM_PROCESSORTIME_INFO, *PSYSTEM_PROCESSORTIME_INFO;
+
+// SystemNtGlobalFlagInformation (9)
+typedef
+struct _SYSTEM_GLOBAL_FLAG_INFO
+{
+       ULONG   NtGlobalFlag;
+
+} SYSTEM_GLOBAL_FLAG_INFO, * PSYSTEM_GLOBAL_FLAG_INFO;
+
+// SystemInformation10 (10)
+// UNKNOWN
+
+// SystemModuleInformation (11)
+typedef
+struct _SYSTEM_MODULE_ENTRY
+{
+       ULONG   Unused;
+       ULONG   Always0;
+       ULONG   ModuleBaseAddress;
+       ULONG   ModuleSize;
+       ULONG   Unknown;
+       ULONG   ModuleEntryIndex;
+       USHORT  ModuleNameLength; /* Length of module name not including the path, this field contains valid value only for NTOSKRNL module*/
+       USHORT  ModulePathLength; /* Length of 'directory path' part of modulename*/
+       CHAR    ModuleName [256];
+
+} SYSTEM_MODULE_ENTRY, * PSYSTEM_MODULE_ENTRY;
+
+typedef
+struct _SYSTEM_MODULE_INFORMATION
+{
+       ULONG                   Count;
+       SYSTEM_MODULE_ENTRY     Module [1];
+       
+} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
+
+// SystemResourceLockInformation (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;
+
+// SystemInformation13 (13)
+// UNKNOWN
+
+// SystemInformation14 (14)
+// UNKNOWN
+
+// SystemInformation15 (15)
+// UNKNOWN
+
+// SystemHandleInformation (16)
+#if 0 
+#define OBJECT_TYPE_0                  0
+#define OBJECT_TYPE_1                  1
+#define OBJECT_TYPE_OBJDIRECTORY       2
+#define OBJECT_TYPE_SYMLINK            3
+#define OBJECT_TYPE_TOKEN              4
+#define OBJECT_TYPE_PROCESS            5
+#define OBJECT_TYPE_THREAD             6
+#define OBJECT_TYPE_EVENT              7
+#define OBJECT_TYPE_8                  8
+#define OBJECT_TYPE_MUTANT             9
+#define OBJECT_TYPE_SEMAPHORE          10
+#define OBJECT_TYPE_TIMER              11
+#define OBJECT_TYPE_12                 12
+#define OBJECT_TYPE_WINSTATION         13
+#define OBJECT_TYPE_DESKTOP            14
+#define OBJECT_TYPE_SECTION            15
+#define OBJECT_TYPE_KEY                        16
+#define OBJECT_TYPE_PORT               17
+#define OBJECT_TYPE_18                 18
+#define OBJECT_TYPE_19                 19
+#define OBJECT_TYPE_20                 20
+#define OBJECT_TYPE_21                 21
+#define OBJECT_TYPE_IOCOMPLETION       22
+#define OBJECT_TYPE_FILE               23
+#endif
+typedef
+struct _SYSTEM_HANDLE_ENTRY
+{
+       ULONG   OwnerPid;
+       BYTE    ObjectType;
+       BYTE    HandleFlags;
+       USHORT  HandleValue;
+       PVOID   ObjectPointer;
+       ULONG   AccessMask;
+       
+} SYSTEM_HANDLE_ENTRY, *PSYSTEM_HANDLE_ENTRY;
+
+typedef
+struct _SYSTEM_HANDLE_INFORMATION
+{
+       ULONG                   Count;
+       SYSTEM_HANDLE_ENTRY     Handle [1];
+       
+} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
+
+// SystemObjectInformation (17)
+// UNKNOWN
+typedef
+struct _SYSTEM_OBJECT_INFORMATION
+{
+       DWORD   Unknown;
+       /* FIXME */
+} SYSTEM_OBJECT_INFORMATION, *PSYSTEM_OBJECT_INFORMATION;
+
+// SystemPageFileInformation (18)
+typedef
+struct _SYSTEM_PAGEFILE_INFORMATION
+{
+       ULONG           RelativeOffset;
+       ULONG           CurrentSizePages;
+       ULONG           TotalUsedPages;
+       ULONG           PeakUsedPages;
+       UNICODE_STRING  PagefileFileName;
+       
+} SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION;
+
+// SystemInstructionEmulationInfo (19)
+typedef
+struct _SYSTEM_VDM_INFORMATION
+{
+       ULONG VdmSegmentNotPresentCount;
+       ULONG VdmINSWCount;
+       ULONG VdmESPREFIXCount;
+       ULONG VdmCSPREFIXCount;
+       ULONG VdmSSPREFIXCount;
+       ULONG VdmDSPREFIXCount;
+       ULONG VdmFSPREFIXCount;
+       ULONG VdmGSPREFIXCount;
+       ULONG VdmOPER32PREFIXCount;
+       ULONG VdmADDR32PREFIXCount;
+       ULONG VdmINSBCount;
+       ULONG VdmINSWV86Count;
+       ULONG VdmOUTSBCount;
+       ULONG VdmOUTSWCount;
+       ULONG VdmPUSHFCount;
+       ULONG VdmPOPFCount;
+       ULONG VdmINTNNCount;
+       ULONG VdmINTOCount;
+       ULONG VdmIRETCount;
+       ULONG VdmINBIMMCount;
+       ULONG VdmINWIMMCount;
+       ULONG VdmOUTBIMMCount;
+       ULONG VdmOUTWIMMCount;
+       ULONG VdmINBCount;
+       ULONG VdmINWCount;
+       ULONG VdmOUTBCount;
+       ULONG VdmOUTWCount;
+       ULONG VdmLOCKPREFIXCount;
+       ULONG VdmREPNEPREFIXCount;
+       ULONG VdmREPPREFIXCount;
+       ULONG VdmHLTCount;
+       ULONG VdmCLICount;
+       ULONG VdmSTICount;
+       ULONG VdmBopCount;
+
+} SYSTEM_VDM_INFORMATION, *PSYSTEM_VDM_INFORMATION;
+
+// SystemInformation20 (20)
+// UNKNOWN
+
+// SystemCacheInformation (21)
+typedef
+struct _SYSTEM_CACHE_INFORMATION
+{
+       ULONG   CurrentSize;
+       ULONG   PeakSize;
+       ULONG   PageFaultCount;
+       ULONG   MinimumWorkingSet;
+       ULONG   MaximumWorkingSet;
+       ULONG   Unused[4];
+
+} SYSTEM_CACHE_INFORMATION;
+
+// SystemPoolTagInformation (22)
+// found by Klaus P. Gerlicher
+// (implemented only in checked builds)
+typedef
+struct _POOL_TAG_STATS
+{
+       ULONG AllocationCount;
+       ULONG FreeCount;
+       ULONG SizeBytes;
+       
+} POOL_TAG_STATS;
+
+typedef
+struct _SYSTEM_POOL_TAG_ENTRY
+{
+       ULONG           Tag;
+       POOL_TAG_STATS  Paged;
+       POOL_TAG_STATS  NonPaged;
+
+} SYSTEM_POOL_TAG_ENTRY, * PSYSTEM_POOL_TAG_ENTRY;
+
+typedef
+struct _SYSTEM_POOL_TAG_INFO
+{
+       ULONG                   Count;
+       SYSTEM_POOL_TAG_ENTRY   PoolEntry [1];
+    
+} SYSTEM_POOL_TAG_INFO, *PSYSTEM_POOL_TAG_INFO;
+
+// SystemProcessorScheduleInfo (23)
+typedef
+struct _SYSTEM_PROCESSOR_SCHEDULE_INFO
+{
+       ULONG nContextSwitches;
+       ULONG nDPCQueued;
+       ULONG nDPCRate;
+       ULONG TimerResolution;
+       ULONG nDPCBypasses;
+       ULONG nAPCBypasses;
+       
+} SYSTEM_PROCESSOR_SCHEDULE_INFO, *PSYSTEM_PROCESSOR_SCHEDULE_INFO;
+
+// SystemDpcInformation (24)
+typedef
+struct _SYSTEM_DPC_INFORMATION
+{
+       ULONG   Unused;
+       ULONG   KiMaximumDpcQueueDepth;
+       ULONG   KiMinimumDpcRate;
+       ULONG   KiAdjustDpcThreshold;
+       ULONG   KiIdealDpcRate;
+
+} SYSTEM_DPC_INFORMATION, *PSYSTEM_DPC_INFORMATION;
+
+// SystemInformation25 (25)
+// UNKNOWN
+
+// SystemLoadImage (26)
+typedef
+struct _SYSTEM_IMAGE_LOAD
+{
+       UNICODE_STRING  ModuleFileName          IN;
+       PVOID           BaseAddress             OUT;
+       PVOID           Section                 OUT;
+       PVOID           EntryPoint              OUT;
+       PVOID           ExportDirectory         OUT;
+       
+} SYSTEM_IMAGE_LOAD, *PSYSTEM_IMAGE_LOAD;
+
+// SystemUnloadImage (27)
+typedef
+struct _SYSTEM_IMAGE_UNLOAD
+{
+       PVOID   Section IN; /* see SYSTEM_IMAGE_LOAD.ModuleSection */
+
+} SYSTEM_IMAGE_UNLOAD, *PSYSTEM_IMAGE_UNLOAD;
+
+
+// SystemTimeAdjustmentInformation (28)
+// (what is the right one?)
+#if 0
+typedef
+struct _SYSTEM_TIME_ADJUSTMENT_INFO
+{
+       TIME    TimeAdjustment;
+       BOOL    TimeAdjustmentDisabled;
+
+} SYSTEM_TIME_ADJUSTMENT_INFO, *PSYSTEM_TIME_ADJUSTMENT_INFO;
+#else
+typedef
+struct _SYSTEM_TIME_ADJUSTMENT_INFO
+{
+       ULONG   KeTimeAdjustment;
+       ULONG   KeMaximumIncrement;
+       BOOLEAN KeTimeSynchronization;
+       
+} SYSTEM_TIME_ADJUSTMENT_INFO, *PSYSTEM_TIME_ADJUSTMENT_INFO;
+#endif
+
+// SystemProcessorFaultCountInfo (33)
+typedef
+struct _SYSTEM_PROCESSOR_FAULT_INFO
+{
+       ULONG   nAlignmentFixup;
+       ULONG   nExceptionDispatches;
+       ULONG   nFloatingEmulation;
+       ULONG   Unknown;
+       
+} SYSTEM_PROCESSOR_FAULT_INFO, *PSYSTEM_PROCESSOR_FAULT_INFO;
+
+// SystemCrashDumpStateInfo (34)
+//
+
+// SystemDebuggerInformation (35)
+typedef
+struct _SYSTEM_DEBUGGER_INFO
+{
+       BOOLEAN KdDebuggerEnabled;
+       BOOLEAN KdDebuggerPresent;
+       
+} SYSTEM_DEBUGGER_INFO, *PSYSTEM_DEBUGGER_INFO;
+
+// SystemInformation36 (36)
+// UNKNOWN
+
+// SystemQuotaInformation (37)
+typedef
+struct _SYSTEM_QUOTA_INFORMATION
+{
+       ULONG   CmpGlobalQuota;
+       ULONG   CmpGlobalQuotaUsed;
+       ULONG   MmSizeofPagedPoolInBytes;
+       
+} SYSTEM_QUOTA_INFORMATION, *PSYSTEM_QUOTA_INFORMATION;
+
+// SystemLoadDriver (38)
+typedef
+struct _SYSTEM_DRIVER_LOAD
+{
+       UNICODE_STRING  DriverRegistryEntry;
+       
+} SYSTEM_DRIVER_LOAD, *PSYSTEM_DRIVER_LOAD;
+
 
-#define SystemInformation0                     0
-#define SystemInformation1                     1
-#define SystemPerformanceInformation           2
-#define SystemTimeInformation                  3
-#define SystemProcessInformation               5
-#define        SystemGlobalFlagInformation             9
-#define SystemDriverInformation                        11
-#define SystemPageFileInformation              18
-#define SystemCacheInformation                 21
-#define        SystemPoolTagStatsInformation           22
-#define SystemTimeAdjustmentInformation                28
-#define SystemTimeZoneInformation              44
 
 // memory information
 
@@ -308,168 +862,6 @@ typedef struct _OBJECT_TYPE_INFORMATION
        ULONG ReferenceCount;
 } OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
 
-// system information
-
-#if 0
-#pragma pack(2)
-typedef struct _SYSTEM_THREAD_INFORMATION
-{
-       FILETIME        ftCreationTime;
-       DWORD           dwUnknown1;
-       PVOID           dwStartAddress;
-       DWORD           dwOwningPID;
-       DWORD           dwThreadID;
-       DWORD           dwCurrentPriority;
-       DWORD           dwBasePriority;
-       DWORD           dwContextSwitches;
-       DWORD           dwThreadState;
-       DWORD           dwWaitReason;
-       DWORD           dwUnknown2 [ 5 ];
-       
-       
-} SYSTEM_THREAD_INFORMATION, * PSYSTEM_THREAD_INFORMATION;
-
-
-typedef struct _SYSTEM_PROCESS_INFORMATION
-{
-       DWORD                           dwOffset;
-       DWORD                           dwThreadCount;
-       DWORD                           dwUnknown1 [6];
-       FILETIME                        ftCreationTime;
-       DWORD                           dwUnknown2 [5];
-       WCHAR                           * pszProcessName;
-       DWORD                           dwBasePriority;
-       DWORD                           dwProcessID;
-       DWORD                           dwParentProcessID;
-       DWORD                           dwHandleCount;
-       DWORD                           dwUnknown3;
-       DWORD                           dwUnknown4;
-       DWORD                           dwVirtualBytesPeak;
-       DWORD                           dwVirtualBytes;
-       DWORD                           dwPageFaults;
-       DWORD                           dwWorkingSetPeak;
-       DWORD                           dwWorkingSet;
-       DWORD                           dwUnknown5;
-       DWORD                           dwPagedPool;
-       DWORD                           dwUnknown6;
-       DWORD                           dwNonPagedPool;
-       DWORD                           dwPageFileBytesPeak;
-       DWORD                           dwPrivateBytes;
-       DWORD                           dwPageFileBytes;
-       DWORD                           dwUnknown7 [4];
-       SYSTEM_THREAD_INFORMATION       Threads [1];
-
-} SYSTEM_PROCESS_INFORMATION, * PSYSTEM_PROCESS_INFORMATION;
-#endif
-
-typedef struct _SYSTEM_TIME_INFO
-{
-       LARGE_INTEGER   BootTime;
-       LARGE_INTEGER   SystemTime;
-       LARGE_INTEGER   TimeZoneBias;
-       ULONG           TimeZoneId;
-       ULONG           Unknown;
-} SYSTEM_TIME_INFO, *PSYSTEM_TIME_INFO;
-
-typedef struct _SYSTEM_GLOBAL_FLAGS_INFO
-{
-       DWORD   GlobalFlags;
-
-} SYSTEM_GLOBAL_FLAGS_INFO, * PSYSTEM_GLOBAL_FLAGS_INFO;
-
-#if 0
-#pragma pack(4)
-typedef struct _SYSTEM_DRIVER_INFO
-{
-       PVOID BaseAddress;
-       DWORD Unknown1;
-       DWORD Unknown2;
-       DWORD EntryIndex;
-       DWORD Unknown4;
-       CHAR  DriverName [256];
-
-} SYSTEM_DRIVER_INFO, * PSYSTEM_DRIVER_INFO;
-
-
-typedef struct _SYSTEM_DRIVERS_INFO
-{
-       DWORD DriverCount;
-       SYSTEM_DRIVER_INFO DriverInfo[1];
-} SYSTEM_DRIVERS_INFO, *PSYSTEM_DRIVERS_INFO;
-
-#pragma pack(4)
-typedef struct _SYSTEM_TIME_ADJUSTMENT
-{
-       TIME    TimeAdjustment;
-       BOOL    TimeAdjustmentDisabled;
-
-} SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;
-
-typedef struct _SYSTEM_CONFIGURATION_INFO {
-       union {
-               ULONG   OemId; 
-               struct { 
-                       WORD ProcessorArchitecture; 
-                       WORD Reserved; 
-               } tag1; 
-       } tag2; 
-       ULONG  PageSize; 
-       PVOID  MinimumApplicationAddress; 
-       PVOID  MaximumApplicationAddress; 
-       ULONG  ActiveProcessorMask; 
-       ULONG  NumberOfProcessors; 
-       ULONG  ProcessorType; 
-       ULONG  AllocationGranularity; 
-       WORD   ProcessorLevel; 
-       WORD   ProcessorRevision; 
-} SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO; 
-
-
-typedef struct _SYSTEM_PAGEFILE_INFORMATION
-{
-       DWORD   Unknown [6];
-       WCHAR   PagefileName [16];
-
-} SYSTEM_PAGEFILE_INFORMATION, * PSYSTEM_PAGEFILE_INFORMATION;
-
-
-typedef struct _SYSTEM_CACHE_INFORMATION
-{
-       ULONG   CurrentSize;
-       ULONG   PeakSize;
-       ULONG   PageFaultCount;
-       ULONG   MinimumWorkingSet;
-       ULONG   MaximumWorkingSet;
-       ULONG   Unused[4];
-} SYSTEM_CACHE_INFORMATION;
-
-
-/* SYSTEM_POOL_ENTRY_INFO, SYSTEM_POOL_INFORMATION
- * found by Klaus P. Gerlicher */
-typedef
-struct _SYSTEM_POOL_ENTRY_INFO
-{
-       ULONG   Tag;
-       ULONG   NP_Allocs;
-       ULONG   NP_Frees;
-       ULONG   NP_Used;
-       ULONG   P_Allocs;
-       ULONG   P_Frees;
-       ULONG   P_Used;
-
-} SYSTEM_POOL_ENTRY_INFO, * PSYSTEM_POOL_ENTRY_INFO;
-
-
-typedef
-struct _SYSTEM_POOL_INFORMATION
-{
-       ULONG                   Count;
-       SYSTEM_POOL_ENTRY_INFO  PoolEntry [1];
-    
-} SYSTEM_POOL_INFORMATION, *PSYSTEM_POOL_INFORMATION;
-
-#endif
-
 // file information
 
 typedef struct _FILE_BASIC_INFORMATION