-/*
- * PROJECT: ReactOS Native Headers
- * FILE: include/ndk/extypes.h
- * PURPOSE: Definitions for exported Executive Functions not defined in DDK/IFS
- * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
- * UPDATE HISTORY:
- * Created 06/10/04
- */
+/*++ NDK Version: 0095
+
+Copyright (c) Alex Ionescu. All rights reserved.
+
+Header Name:
+
+ extypes.h
+
+Abstract:
+
+ Type definitions for the Executive.
+
+Author:
+
+ Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
+
+--*/
#ifndef _EXTYPES_H
#define _EXTYPES_H
-/* DEPENDENCIES **************************************************************/
-#include "ketypes.h"
+//
+// Dependencies
+//
+#include <umtypes.h>
+#include <cfg.h>
+#if defined(_MSC_VER) && !defined(NTOS_MODE_USER)
+#include <ntimage.h>
+#endif
+#include <cmtypes.h>
+#include <ketypes.h>
+#include <potypes.h>
+#include <lpctypes.h>
+
+//
+// Atom and Language IDs
+//
+typedef USHORT LANGID, *PLANGID;
+typedef USHORT RTL_ATOM, *PRTL_ATOM;
-/* EXPORTED DATA *************************************************************/
-extern POBJECT_TYPE NTOSAPI ExIoCompletionType;
-extern NTOSAPI POBJECT_TYPE ExMutantObjectType;
-extern NTOSAPI POBJECT_TYPE ExTimerType;
+#ifndef NTOS_MODE_USER
-/* CONSTANTS *****************************************************************/
+//
+// Kernel Exported Object Types
+//
+extern POBJECT_TYPE NTSYSAPI ExIoCompletionType;
+extern POBJECT_TYPE NTSYSAPI ExMutantObjectType;
+extern POBJECT_TYPE NTSYSAPI ExTimerType;
-#define INVALID_HANDLE_VALUE (HANDLE)-1
+//
+// Exported NT Build Number
+//
+extern ULONG NTSYSAPI NtBuildNumber;
-/* Increments */
-#define MUTANT_INCREMENT 1
+//
+// Invalid Handle Value Constant
+//
+#define INVALID_HANDLE_VALUE (HANDLE)-1
-/* Callback Object Access Rights */
-#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)
+#endif
+
+//
+// Increments
+//
+#define MUTANT_INCREMENT 1
-/* ENUMERATIONS **************************************************************/
+//
+// 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)
-/* TYPES *********************************************************************/
+//
+// Event Object Access Masks
+//
+#ifdef NTOS_MODE_USER
+#define EVENT_QUERY_STATE 0x0001
-/* You'll need the IFS for this, so use an equivalent version */
-#ifndef _NTIFS_
-typedef PVOID EX_RUNDOWN_REF;
+//
+// Semaphore Object Acess Masks
+//
+#define SEMAPHORE_QUERY_STATE 0x0001
#endif
-/* You'll need the IFS for these, so let's not force everyone to have it */
-#ifdef _NTIFS_
+//
+// Event Pair Access Masks
+//
+#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
+
+//
+// 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 2
+
+//
+// Shutdown types for NtShutdownSystem
+//
+typedef enum _SHUTDOWN_ACTION
+{
+ ShutdownNoReboot,
+ ShutdownReboot,
+ ShutdownPowerOff
+} SHUTDOWN_ACTION;
+
+//
+// Responses for NtRaiseHardError
+//
+typedef enum _HARDERROR_RESPONSE_OPTION
+{
+ OptionAbortRetryIgnore,
+ OptionOk,
+ OptionOkCancel,
+ OptionRetryCancel,
+ OptionYesNo,
+ OptionYesNoCancel,
+ OptionShutdownSystem
+} HARDERROR_RESPONSE_OPTION, *PHARDERROR_RESPONSE_OPTION;
+
+typedef enum _HARDERROR_RESPONSE
+{
+ ResponseReturnToCaller,
+ ResponseNotHandled,
+ ResponseAbort,
+ ResponseCancel,
+ ResponseIgnore,
+ ResponseNo,
+ ResponseOk,
+ ResponseRetry,
+ ResponseYes
+} HARDERROR_RESPONSE, *PHARDERROR_RESPONSE;
+
+//
+// System Information Classes for NtQuerySystemInformation
+//
+typedef enum _SYSTEM_INFORMATION_CLASS
+{
+ SystemBasicInformation,
+ SystemProcessorInformation,
+ SystemPerformanceInformation,
+ SystemTimeOfDayInformation,
+ SystemPathInformation, /// Obsolete: Use KUSER_SHARED_DATA
+ SystemProcessInformation,
+ SystemCallCountInformation,
+ SystemDeviceInformation,
+ SystemProcessorPerformanceInformation,
+ SystemFlagsInformation,
+ SystemCallTimeInformation,
+ SystemModuleInformation,
+ SystemLocksInformation,
+ SystemStackTraceInformation,
+ SystemPagedPoolInformation,
+ SystemNonPagedPoolInformation,
+ SystemHandleInformation,
+ SystemObjectInformation,
+ SystemPageFileInformation,
+ SystemVdmInstemulInformation,
+ SystemVdmBopInformation,
+ SystemFileCacheInformation,
+ SystemPoolTagInformation,
+ SystemInterruptInformation,
+ SystemDpcBehaviorInformation,
+ SystemFullMemoryInformation,
+ SystemLoadGdiDriverInformation,
+ SystemUnloadGdiDriverInformation,
+ SystemTimeAdjustmentInformation,
+ SystemSummaryMemoryInformation,
+ SystemNextEventIdInformation,
+ SystemEventIdsInformation,
+ SystemCrashDumpInformation,
+ SystemExceptionInformation,
+ SystemCrashDumpStateInformation,
+ SystemKernelDebuggerInformation,
+ SystemContextSwitchInformation,
+ SystemRegistryQuotaInformation,
+ SystemExtendServiceTableInformation,
+ SystemPrioritySeperation,
+ SystemPlugPlayBusInformation,
+ SystemDockInformation,
+ SystemPowerInformationNative,
+ SystemProcessorSpeedInformation,
+ SystemCurrentTimeZoneInformation,
+ SystemLookasideInformation,
+ SystemTimeSlipNotification,
+ SystemSessionCreate,
+ SystemSessionDetach,
+ SystemSessionInformation,
+ SystemRangeStartInformation,
+ SystemVerifierInformation,
+ SystemAddVerifier,
+ SystemSessionProcessesInformation,
+ SystemInformationClassMax
+} SYSTEM_INFORMATION_CLASS;
+
+//
+// System Information Classes for NtQueryMutant
+//
+typedef enum _MUTANT_INFORMATION_CLASS
+{
+ MutantBasicInformation
+} MUTANT_INFORMATION_CLASS;
+
+//
+// System Information Classes for NtQueryAtom
+//
+typedef enum _ATOM_INFORMATION_CLASS
+{
+ AtomBasicInformation,
+ AtomTableInformation,
+} ATOM_INFORMATION_CLASS;
+
+//
+// System Information Classes for NtQueryTimer
+//
+typedef enum _TIMER_INFORMATION_CLASS
+{
+ TimerBasicInformation
+} TIMER_INFORMATION_CLASS;
+
+//
+// System Information Classes for NtQuerySemaphore
+//
+typedef enum _SEMAPHORE_INFORMATION_CLASS
+{
+ SemaphoreBasicInformation
+} SEMAPHORE_INFORMATION_CLASS;
+
+//
+// System Information Classes for NtQueryEvent
+//
+typedef enum _EVENT_INFORMATION_CLASS
+{
+ EventBasicInformation
+} EVENT_INFORMATION_CLASS;
+
+#ifndef NTOS_MODE_USER
+
+//
+// Executive Work Queue Structures
+//
typedef struct _EX_QUEUE_WORKER_INFO
{
- UCHAR QueueDisabled:1;
- UCHAR MakeThreadsAsNecessary:1;
- UCHAR WaitMode:1;
+ ULONG QueueDisabled:1;
+ ULONG MakeThreadsAsNecessary:1;
+ ULONG WaitMode:1;
ULONG WorkerCount:29;
} EX_QUEUE_WORKER_INFO, *PEX_QUEUE_WORKER_INFO;
ULONG QueueDepthLastPass;
EX_QUEUE_WORKER_INFO Info;
} EX_WORK_QUEUE, *PEX_WORK_QUEUE;
-#endif
+//
+// Executive Fast Reference Structure
+//
typedef struct _EX_FAST_REF
{
union
};
} EX_FAST_REF, *PEX_FAST_REF;
+//
+// Executive Cache-Aware Rundown Reference Descriptor
+//
+typedef struct _EX_RUNDOWN_REF_CACHE_AWARE
+{
+ union
+ {
+ ULONG_PTR Count;
+ PVOID Ptr;
+ };
+ PVOID PoolToFree;
+} EX_RUNDOWN_REF_CACHE_AWARE, *PEX_RUNDOWN_REF_CACHE_AWARE;
+
+//
+// Executive Rundown Wait Block
+//
+typedef struct _EX_RUNDOWN_WAIT_BLOCK
+{
+ ULONG_PTR Count;
+ KEVENT RundownEvent;
+} EX_RUNDOWN_WAIT_BLOCK, *PEX_RUNDOWN_WAIT_BLOCK;
+
+//
+// Executive Pushlock
+//
typedef struct _EX_PUSH_LOCK
{
union
{
struct
{
- ULONG Waiting:1;
- ULONG Exclusive:1;
- ULONG Shared:30;
+ 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 Value;
+ ULONG_PTR Value;
PVOID Ptr;
};
} EX_PUSH_LOCK, *PEX_PUSH_LOCK;
-typedef struct _HANDLE_TABLE_ENTRY_INFO
-{
- ULONG AuditMask;
-} HANDLE_TABLE_ENTRY_INFO, *PHANDLE_TABLE_ENTRY_INFO;
-
-typedef struct _RUNDOWN_DESCRIPTOR
+//
+// Executive Pushlock Wait Block
+//
+#ifndef __GNUC__ // WARNING! PUSHLOCKS WILL NOT WORK IN GCC FOR NOW!!!
+__declspec(align(16))
+#endif
+typedef struct _EX_PUSH_LOCK_WAIT_BLOCK
{
- ULONG_PTR References;
- KEVENT RundownEvent;
-} RUNDOWN_DESCRIPTOR, *PRUNDOWN_DESCRIPTOR;
+ 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
+ BOOL 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 AllowMultipleCallbacks;
} CALLBACK_OBJECT , *PCALLBACK_OBJECT;
+//
+// Profile OBject
+//
+typedef struct _EPROFILE
+{
+ PEPROCESS Process;
+ PVOID ImageBase;
+ SIZE_T ImageSize;
+ PVOID Buffer;
+ ULONG BufferSize;
+ ULONG BucketSize;
+ PKPROFILE KeProfile;
+ PVOID LockedBuffer;
+ PMDL Mdl;
+ ULONG Segment;
+ KPROFILE_SOURCE ProfileSource;
+ KAFFINITY Affinity;
+} EPROFILE, *PEPROFILE;
+
+//
+// Handle Table Structures
+//
+typedef struct _HANDLE_TABLE_ENTRY_INFO
+{
+ ULONG AuditMask;
+} HANDLE_TABLE_ENTRY_INFO, *PHANDLE_TABLE_ENTRY_INFO;
+
typedef struct _HANDLE_TABLE_ENTRY
{
union
#endif
+//
+// Hard Error LPC Message
+//
+typedef struct _HARDERROR_MSG
+{
+ PORT_MESSAGE h;
+ NTSTATUS Status;
+ LARGE_INTEGER ErrorTime;
+ ULONG ValidResponseOptions;
+ ULONG Response;
+ ULONG NumberOfParameters;
+ ULONG UnicodeStringParameterMask;
+ ULONG Parameters[MAXIMUM_HARDERROR_PARAMETERS];
+} HARDERROR_MSG, *PHARDERROR_MSG;
+
+//
+// Information Structures for NtQueryMutant
+//
+typedef struct _MUTANT_BASIC_INFORMATION
+{
+ LONG CurrentCount;
+ BOOLEAN OwnedByCaller;
+ BOOLEAN AbandonedState;
+} MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
+
+//
+// Information Structures for NtQueryAtom
+//
+typedef struct _ATOM_BASIC_INFORMATION
+{
+ USHORT UsageCount;
+ USHORT Flags;
+ USHORT NameLength;
+ WCHAR Name[1];
+} ATOM_BASIC_INFORMATION, *PATOM_BASIC_INFORMATION;
+
+typedef struct _ATOM_TABLE_INFORMATION
+{
+ ULONG NumberOfAtoms;
+ USHORT Atoms[1];
+} ATOM_TABLE_INFORMATION, *PATOM_TABLE_INFORMATION;
+
+//
+// Information Structures for NtQueryTimer
+//
+typedef struct _TIMER_BASIC_INFORMATION
+{
+ LARGE_INTEGER TimeRemaining;
+ BOOLEAN SignalState;
+} TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
+
+//
+// Information Structures for NtQuerySemaphore
+//
+typedef struct _SEMAPHORE_BASIC_INFORMATION
+{
+ LONG CurrentCount;
+ LONG MaximumCount;
+} SEMAPHORE_BASIC_INFORMATION, *PSEMAPHORE_BASIC_INFORMATION;
+
+//
+// Information Structures for NtQueryEvent
+//
+typedef struct _EVENT_BASIC_INFORMATION
+{
+ EVENT_TYPE EventType;
+ LONG EventState;
+} EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION;
+
+//
+// Information Structures for NtQuerySystemInformation
+//
+typedef struct _SYSTEM_BASIC_INFORMATION
+{
+ ULONG Reserved;
+ ULONG TimerResolution;
+ ULONG PageSize;
+ ULONG NumberOfPhysicalPages;
+ ULONG LowestPhysicalPageNumber;
+ ULONG HighestPhysicalPageNumber;
+ ULONG AllocationGranularity;
+ ULONG MinimumUserModeAddress;
+ ULONG MaximumUserModeAddress;
+ KAFFINITY ActiveProcessorsAffinityMask;
+ CCHAR NumberOfProcessors;
+} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
+
+// Class 1
+typedef struct _SYSTEM_PROCESSOR_INFORMATION
+{
+ USHORT ProcessorArchitecture;
+ USHORT ProcessorLevel;
+ USHORT ProcessorRevision;
+ USHORT Reserved;
+ ULONG ProcessorFeatureBits;
+} SYSTEM_PROCESSOR_INFORMATION, *PSYSTEM_PROCESSOR_INFORMATION;
+
+// Class 2
+typedef struct _SYSTEM_PERFORMANCE_INFORMATION
+{
+ LARGE_INTEGER IdleProcessTime;
+ LARGE_INTEGER IoReadTransferCount;
+ LARGE_INTEGER IoWriteTransferCount;
+ LARGE_INTEGER IoOtherTransferCount;
+ ULONG IoReadOperationCount;
+ ULONG IoWriteOperationCount;
+ ULONG IoOtherOperationCount;
+ ULONG AvailablePages;
+ ULONG CommittedPages;
+ ULONG CommitLimit;
+ ULONG PeakCommitment;
+ ULONG PageFaultCount;
+ ULONG CopyOnWriteCount;
+ ULONG TransitionCount;
+ ULONG CacheTransitionCount;
+ ULONG DemandZeroCount;
+ ULONG PageReadCount;
+ ULONG PageReadIoCount;
+ ULONG CacheReadCount;
+ ULONG CacheIoCount;
+ ULONG DirtyPagesWriteCount;
+ ULONG DirtyWriteIoCount;
+ ULONG MappedPagesWriteCount;
+ ULONG MappedWriteIoCount;
+ ULONG PagedPoolPages;
+ ULONG NonPagedPoolPages;
+ ULONG PagedPoolAllocs;
+ ULONG PagedPoolFrees;
+ ULONG NonPagedPoolAllocs;
+ ULONG NonPagedPoolFrees;
+ ULONG FreeSystemPtes;
+ ULONG ResidentSystemCodePage;
+ ULONG TotalSystemDriverPages;
+ ULONG TotalSystemCodePages;
+ ULONG NonPagedPoolLookasideHits;
+ ULONG PagedPoolLookasideHits;
+ ULONG Spare3Count;
+ ULONG ResidentSystemCachePage;
+ ULONG ResidentPagedPoolPage;
+ ULONG ResidentSystemDriverPage;
+ 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 FirstLevelTbFills;
+ ULONG SecondLevelTbFills;
+ ULONG SystemCalls;
+} SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
+
+// Class 3
+typedef struct _SYSTEM_TIMEOFDAY_INFORMATION
+{
+ LARGE_INTEGER BootTime;
+ LARGE_INTEGER CurrentTime;
+ LARGE_INTEGER TimeZoneBias;
+ ULONG TimeZoneId;
+ ULONG Reserved;
+} SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION;
+
+// Class 4
+// This class is obsolete, please use KUSER_SHARED_DATA instead
+
+// Class 5
+typedef struct _SYSTEM_THREAD_INFORMATION
+{
+ LARGE_INTEGER KernelTime;
+ LARGE_INTEGER UserTime;
+ LARGE_INTEGER CreateTime;
+ ULONG WaitTime;
+ PVOID StartAddress;
+ CLIENT_ID ClientId;
+ KPRIORITY Priority;
+ LONG BasePriority;
+ ULONG ContextSwitches;
+ ULONG ThreadState;
+ ULONG WaitReason;
+} SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;
+
+typedef struct _SYSTEM_PROCESS_INFORMATION
+{
+ ULONG NextEntryOffset;
+ ULONG NumberOfThreads;
+ LARGE_INTEGER SpareLi1;
+ LARGE_INTEGER SpareLi2;
+ LARGE_INTEGER SpareLi3;
+ LARGE_INTEGER CreateTime;
+ LARGE_INTEGER UserTime;
+ LARGE_INTEGER KernelTime;
+ UNICODE_STRING ImageName;
+ KPRIORITY BasePriority;
+ HANDLE UniqueProcessId;
+ HANDLE InheritedFromUniqueProcessId;
+ ULONG HandleCount;
+ ULONG SessionId;
+ ULONG PageDirectoryFrame;
+
+ //
+ // This part corresponds to VM_COUNTERS_EX.
+ // NOTE: *NOT* THE SAME AS VM_COUNTERS!
+ //
+ ULONG PeakVirtualSize;
+ ULONG VirtualSize;
+ ULONG PageFaultCount;
+ ULONG PeakWorkingSetSize;
+ ULONG WorkingSetSize;
+ ULONG QuotaPeakPagedPoolUsage;
+ ULONG QuotaPagedPoolUsage;
+ ULONG QuotaPeakNonPagedPoolUsage;
+ ULONG QuotaNonPagedPoolUsage;
+ ULONG PagefileUsage;
+ ULONG PeakPagefileUsage;
+ ULONG PrivateUsage;
+
+ //
+ // This part corresponds to IO_COUNTERS
+ //
+ LARGE_INTEGER ReadOperationCount;
+ LARGE_INTEGER WriteOperationCount;
+ LARGE_INTEGER OtherOperationCount;
+ LARGE_INTEGER ReadTransferCount;
+ LARGE_INTEGER WriteTransferCount;
+ LARGE_INTEGER OtherTransferCount;
+
+ SYSTEM_THREAD_INFORMATION TH[1];
+} SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
+
+// Class 6
+typedef struct _SYSTEM_CALL_COUNT_INFORMATION
+{
+ ULONG Length;
+ ULONG NumberOfTables;
+} SYSTEM_CALL_COUNT_INFORMATION, *PSYSTEM_CALL_COUNT_INFORMATION;
+
+// Class 7
+typedef struct _SYSTEM_DEVICE_INFORMATION
+{
+ ULONG NumberOfDisks;
+ ULONG NumberOfFloppies;
+ ULONG NumberOfCdRoms;
+ ULONG NumberOfTapes;
+ ULONG NumberOfSerialPorts;
+ ULONG NumberOfParallelPorts;
+} SYSTEM_DEVICE_INFORMATION, *PSYSTEM_DEVICE_INFORMATION;
+
+// Class 8
+typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
+{
+ LARGE_INTEGER IdleTime;
+ LARGE_INTEGER KernelTime;
+ LARGE_INTEGER UserTime;
+ LARGE_INTEGER DpcTime;
+ LARGE_INTEGER InterruptTime;
+ ULONG InterruptCount;
+} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
+
+// Class 9
+typedef struct _SYSTEM_FLAGS_INFORMATION
+{
+ ULONG Flags;
+} SYSTEM_FLAGS_INFORMATION, *PSYSTEM_FLAGS_INFORMATION;
+
+// Class 10
+typedef struct _SYSTEM_CALL_TIME_INFORMATION
+{
+ ULONG Length;
+ ULONG TotalCalls;
+ 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;
+
+// FIXME: Class 13
+typedef struct _SYSTEM_BACKTRACE_INFORMATION_ENTRY
+{
+ ULONG Dummy;
+} SYSTEM_BACKTRACE_INFORMATION_ENTRY, *PSYSTEM_BACKTRACE_INFORMATION_ENTRY;
+
+typedef struct _SYSTEM_BACKTRACE_INFORMATION
+{
+ ULONG Unknown[4];
+ ULONG Count;
+ SYSTEM_BACKTRACE_INFORMATION_ENTRY Trace[1];
+} SYSTEM_BACKTRACE_INFORMATION, *PSYSTEM_BACKTRACE_INFORMATION;
+
+// Class 14 - 15
+typedef struct _SYSTEM_POOL_ENTRY
+{
+ BOOLEAN Allocated;
+ BOOLEAN Spare0;
+ USHORT AllocatorBackTraceIndex;
+ ULONG Size;
+ union
+ {
+ UCHAR Tag[4];
+ ULONG TagUlong;
+ PVOID ProcessChargedQuota;
+ };
+} SYSTEM_POOL_ENTRY, *PSYSTEM_POOL_ENTRY;
+
+typedef struct _SYSTEM_POOL_INFORMATION
+{
+ ULONG TotalSize;
+ PVOID FirstEntry;
+ USHORT EntryOverhead;
+ BOOLEAN PoolTagPresent;
+ BOOLEAN Spare0;
+ ULONG NumberOfEntries;
+ SYSTEM_POOL_ENTRY Entries[1];
+} SYSTEM_POOL_INFORMATION, *PSYSTEM_POOL_INFORMATION;
+
+// Class 16
+typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO
+{
+ USHORT UniqueProcessId;
+ USHORT CreatorBackTraceIndex;
+ UCHAR ObjectTypeIndex;
+ UCHAR HandleAttributes;
+ USHORT HandleValue;
+ PVOID Object;
+ ULONG GrantedAccess;
+} SYSTEM_HANDLE_TABLE_ENTRY_INFO, *PSYSTEM_HANDLE_TABLE_ENTRY_INFO;
+
+typedef struct _SYSTEM_HANDLE_INFORMATION
+{
+ ULONG NumberOfHandles;
+ SYSTEM_HANDLE_TABLE_ENTRY_INFO Handles[1];
+} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
+
+// Class 17
+typedef struct _SYSTEM_OBJECTTYPE_INFORMATION
+{
+ ULONG NextEntryOffset;
+ ULONG NumberOfObjects;
+ ULONG NumberOfHandles;
+ ULONG TypeIndex;
+ ULONG InvalidAttributes;
+ GENERIC_MAPPING GenericMapping;
+ ULONG ValidAccessMask;
+ ULONG PoolType;
+ BOOLEAN SecurityRequired;
+ BOOLEAN WaitableObject;
+ UNICODE_STRING TypeName;
+} SYSTEM_OBJECTTYPE_INFORMATION, *PSYSTEM_OBJECTTYPE_INFORMATION;
+
+typedef struct _SYSTEM_OBJECT_INFORMATION
+{
+ ULONG NextEntryOffset;
+ PVOID Object;
+ HANDLE CreatorUniqueProcess;
+ USHORT CreatorBackTraceIndex;
+ USHORT Flags;
+ LONG PointerCount;
+ LONG HandleCount;
+ ULONG PagedPoolCharge;
+ ULONG NonPagedPoolCharge;
+ HANDLE ExclusiveProcessId;
+ PVOID SecurityDescriptor;
+ OBJECT_NAME_INFORMATION NameInfo;
+} SYSTEM_OBJECT_INFORMATION, *PSYSTEM_OBJECT_INFORMATION;
+
+// Class 18
+typedef struct _SYSTEM_PAGEFILE_INFORMATION
+{
+ ULONG NextEntryOffset;
+ ULONG TotalSize;
+ ULONG TotalInUse;
+ ULONG PeakUsage;
+ UNICODE_STRING PageFileName;
+} SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION;
+
+// Class 19
+typedef struct _SYSTEM_VDM_INSTEMUL_INFO
+{
+ ULONG SegmentNotPresent;
+ ULONG VdmOpcode0F;
+ ULONG OpcodeESPrefix;
+ ULONG OpcodeCSPrefix;
+ ULONG OpcodeSSPrefix;
+ ULONG OpcodeDSPrefix;
+ ULONG OpcodeFSPrefix;
+ ULONG OpcodeGSPrefix;
+ ULONG OpcodeOPER32Prefix;
+ ULONG OpcodeADDR32Prefix;
+ ULONG OpcodeINSB;
+ ULONG OpcodeINSW;
+ ULONG OpcodeOUTSB;
+ ULONG OpcodeOUTSW;
+ ULONG OpcodePUSHF;
+ ULONG OpcodePOPF;
+ ULONG OpcodeINTnn;
+ ULONG OpcodeINTO;
+ ULONG OpcodeIRET;
+ ULONG OpcodeINBimm;
+ ULONG OpcodeINWimm;
+ ULONG OpcodeOUTBimm;
+ ULONG OpcodeOUTWimm ;
+ ULONG OpcodeINB;
+ ULONG OpcodeINW;
+ ULONG OpcodeOUTB;
+ ULONG OpcodeOUTW;
+ ULONG OpcodeLOCKPrefix;
+ ULONG OpcodeREPNEPrefix;
+ ULONG OpcodeREPPrefix;
+ ULONG OpcodeHLT;
+ ULONG OpcodeCLI;
+ ULONG OpcodeSTI;
+ 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 21
+typedef struct _SYSTEM_CACHE_INFORMATION
+{
+ ULONG CurrentSize;
+ ULONG PeakSize;
+ ULONG PageFaultCount;
+ ULONG MinimumWorkingSet;
+ ULONG MaximumWorkingSet;
+ ULONG CurrentSizeIncludingTransitionInPages;
+ ULONG PeakSizeIncludingTransitionInPages;
+ ULONG Unused[2];
+} SYSTEM_CACHE_INFORMATION, *PSYSTEM_CACHE_INFORMATION;
+
+// Class 22
+typedef struct _SYSTEM_POOLTAG
+{
+ union
+ {
+ UCHAR Tag[4];
+ ULONG TagUlong;
+ };
+ ULONG PagedAllocs;
+ ULONG PagedFrees;
+ ULONG PagedUsed;
+ ULONG NonPagedAllocs;
+ ULONG NonPagedFrees;
+ ULONG NonPagedUsed;
+} SYSTEM_POOLTAG, *PSYSTEM_POOLTAG;
+typedef struct _SYSTEM_POOLTAG_INFORMATION
+{
+ ULONG Count;
+ SYSTEM_POOLTAG TagInfo[1];
+} SYSTEM_POOLTAG_INFORMATION, *PSYSTEM_POOLTAG_INFORMATION;
+
+// Class 23
+typedef struct _SYSTEM_INTERRUPT_INFORMATION
+{
+ ULONG ContextSwitches;
+ ULONG DpcCount;
+ ULONG DpcRate;
+ ULONG TimeIncrement;
+ ULONG DpcBypassCount;
+ ULONG ApcBypassCount;
+} SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
+
+// Class 24
+typedef struct _SYSTEM_DPC_BEHAVIOR_INFORMATION
+{
+ ULONG Spare;
+ ULONG DpcQueueDepth;
+ ULONG MinimumDpcRate;
+ ULONG AdjustDpcThreshold;
+ ULONG IdealDpcRate;
+} SYSTEM_DPC_BEHAVIOR_INFORMATION, *PSYSTEM_DPC_BEHAVIOR_INFORMATION;
+
+// Class 25
+typedef struct _SYSTEM_MEMORY_INFO
+{
+ PUCHAR StringOffset;
+ USHORT ValidCount;
+ USHORT TransitionCount;
+ USHORT ModifiedCount;
+ USHORT PageTableCount;
+} SYSTEM_MEMORY_INFO, *PSYSTEM_MEMORY_INFO;
+typedef struct _SYSTEM_MEMORY_INFORMATION
+{
+ ULONG InfoSize;
+ ULONG StringStart;
+ SYSTEM_MEMORY_INFO Memory[1];
+} SYSTEM_MEMORY_INFORMATION, *PSYSTEM_MEMORY_INFORMATION;
+
+// Class 26
+typedef struct _SYSTEM_GDI_DRIVER_INFORMATION
+{
+ UNICODE_STRING DriverName;
+ PVOID ImageAddress;
+ PVOID SectionPointer;
+ PVOID EntryPoint;
+ PIMAGE_EXPORT_DIRECTORY ExportSectionPointer;
+} SYSTEM_GDI_DRIVER_INFORMATION, *PSYSTEM_GDI_DRIVER_INFORMATION;
+
+// Class 27
+// Not an actually class, simply a PVOID to the ImageAddress
+
+// Class 28
+typedef struct _SYSTEM_QUERY_TIME_ADJUST_INFORMATION
+{
+ ULONG TimeAdjustment;
+ ULONG TimeIncrement;
+ BOOLEAN Enable;
+} SYSTEM_QUERY_TIME_ADJUST_INFORMATION, *PSYSTEM_QUERY_TIME_ADJUST_INFORMATION;
+
+typedef struct _SYSTEM_SET_TIME_ADJUST_INFORMATION
+{
+ ULONG TimeAdjustment;
+ BOOLEAN Enable;
+} SYSTEM_SET_TIME_ADJUST_INFORMATION, *PSYSTEM_SET_TIME_ADJUST_INFORMATION;
+
+// Class 29 - Same as 25
+
+// FIXME: Class 30 - 31
+
+// Class 32
+typedef struct _SYSTEM_CRASH_DUMP_INFORMATION
+{
+ HANDLE CrashDumpSection;
+} SYSTEM_CRASH_DUMP_INFORMATION, *PSYSTEM_CRASH_DUMP_INFORMATION;
+
+// Class 33
+typedef struct _SYSTEM_EXCEPTION_INFORMATION
+{
+ ULONG AlignmentFixupCount;
+ ULONG ExceptionDispatchCount;
+ ULONG FloatingEmulationCount;
+ ULONG ByteWordEmulationCount;
+} SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
+
+// Class 34
+typedef struct _SYSTEM_CRASH_STATE_INFORMATION
+{
+ ULONG ValidCrashDump;
+} SYSTEM_CRASH_STATE_INFORMATION, *PSYSTEM_CRASH_STATE_INFORMATION;
+
+// Class 35
+typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION
+{
+ BOOLEAN KernelDebuggerEnabled;
+ BOOLEAN KernelDebuggerNotPresent;
+} SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION;
+
+// Class 36
+typedef struct _SYSTEM_CONTEXT_SWITCH_INFORMATION
+{
+ ULONG ContextSwitches;
+ ULONG FindAny;
+ ULONG FindLast;
+ ULONG FindIdeal;
+ ULONG IdleAny;
+ ULONG IdleCurrent;
+ ULONG IdleLast;
+ ULONG IdleIdeal;
+ ULONG PreemptAny;
+ ULONG PreemptCurrent;
+ ULONG PreemptLast;
+ ULONG SwitchToIdle;
+} SYSTEM_CONTEXT_SWITCH_INFORMATION, *PSYSTEM_CONTEXT_SWITCH_INFORMATION;
+
+// Class 37
+typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION
+{
+ ULONG RegistryQuotaAllowed;
+ ULONG RegistryQuotaUsed;
+ ULONG PagedPoolSize;
+} SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
+
+// Class 38
+// Not a structure, simply send the UNICODE_STRING
+
+// Class 39
+// Not a structure, simply send a ULONG containing the new separation
+
+// Class 40
+typedef struct _SYSTEM_PLUGPLAY_BUS_INFORMATION
+{
+ ULONG BusCount;
+ PLUGPLAY_BUS_INSTANCE BusInstance[1];
+} SYSTEM_PLUGPLAY_BUS_INFORMATION, *PSYSTEM_PLUGPLAY_BUS_INFORMATION;
+
+// Class 41
+typedef struct _SYSTEM_DOCK_INFORMATION
+{
+ SYSTEM_DOCK_STATE DockState;
+ INTERFACE_TYPE DeviceBusType;
+ ULONG DeviceBusNumber;
+ ULONG SlotNumber;
+} SYSTEM_DOCK_INFORMATION, *PSYSTEM_DOCK_INFORMATION;
+
+// Class 42
+typedef struct _SYSTEM_POWER_INFORMATION_NATIVE
+{
+ BOOLEAN SystemSuspendSupported;
+ BOOLEAN SystemHibernateSupported;
+ BOOLEAN ResumeTimerSupportsSuspend;
+ BOOLEAN ResumeTimerSupportsHibernate;
+ BOOLEAN LidSupported;
+ BOOLEAN TurboSettingSupported;
+ BOOLEAN TurboMode;
+ BOOLEAN SystemAcOrDc;
+ BOOLEAN PowerDownDisabled;
+ LARGE_INTEGER SpindownDrives;
+} SYSTEM_POWER_INFORMATION_NATIVE, *PSYSTEM_POWER_INFORMATION_NATIVE;
+
+// Class 43
+typedef struct _SYSTEM_LEGACY_DRIVER_INFORMATION
+{
+ PNP_VETO_TYPE VetoType;
+ UNICODE_STRING VetoDriver;
+ // CHAR Buffer[0];
+} SYSTEM_LEGACY_DRIVER_INFORMATION, *PSYSTEM_LEGACY_DRIVER_INFORMATION;
+
+// Class 44
+typedef struct _TIME_ZONE_INFORMATION RTL_TIME_ZONE_INFORMATION;
+
+// Class 45
+typedef struct _SYSTEM_LOOKASIDE_INFORMATION
+{
+ USHORT CurrentDepth;
+ USHORT MaximumDepth;
+ ULONG TotalAllocates;
+ ULONG AllocateMisses;
+ ULONG TotalFrees;
+ ULONG FreeMisses;
+ ULONG Type;
+ ULONG Tag;
+ ULONG Size;
+} SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
+
+// Class 46
+// Not a structure. Only a HANDLE for the SlipEvent;
+
+// Class 47
+// Not a structure. Only a ULONG for the SessionId;
+
+// Class 48
+// Not a structure. Only a ULONG for the SessionId;
+
+// FIXME: Class 49
+
+// Class 50
+// Not a structure. Only a ULONG_PTR for the SystemRangeStart
+
+// FIXME: Class 51 (Based on MM_DRIVER_VERIFIER_DATA)
+
+// FIXME: Class 52
+
+// Class 53
+typedef struct _SYSTEM_SESSION_PROCESSES_INFORMATION
+{
+ ULONG SessionId;
+ ULONG BufferSize;
+ PVOID Buffer; // Same format as in SystemProcessInformation
+} SYSTEM_SESSION_PROCESSES_INFORMATION, *PSYSTEM_SESSION_PROCESSES_INFORMATION;
+
+#endif