ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

extypes.h
Go to the documentation of this file.
00001 /*++ NDK Version: 0098
00002 
00003 Copyright (c) Alex Ionescu.  All rights reserved.
00004 
00005 Header Name:
00006 
00007     extypes.h
00008 
00009 Abstract:
00010 
00011     Type definitions for the Executive.
00012 
00013 Author:
00014 
00015     Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
00016 
00017 --*/
00018 
00019 #ifndef _EXTYPES_H
00020 #define _EXTYPES_H
00021 
00022 //
00023 // Dependencies
00024 //
00025 #include <umtypes.h>
00026 #include <cfg.h>
00027 #if !defined(NTOS_MODE_USER)
00028 #include <ntimage.h>
00029 #endif
00030 #include <cmtypes.h>
00031 #include <ketypes.h>
00032 #include <potypes.h>
00033 #include <lpctypes.h>
00034 #ifdef NTOS_MODE_USER
00035 #include <obtypes.h>
00036 #endif
00037 
00038 //
00039 // GCC compatibility
00040 //
00041 #if defined(__GNUC__)
00042 #define __ALIGNED(n)    __attribute__((aligned (n)))
00043 #elif defined(_MSC_VER)
00044 #define __ALIGNED(n)    __declspec(align(n))
00045 #else
00046 #error __ALIGNED not defined for your compiler!
00047 #endif
00048 
00049 //
00050 // Rtl Atom
00051 //
00052 typedef USHORT RTL_ATOM, *PRTL_ATOM;
00053 
00054 #ifndef NTOS_MODE_USER
00055 
00056 //
00057 // Kernel Exported Object Types
00058 //
00059 extern POBJECT_TYPE NTSYSAPI ExDesktopObjectType;
00060 extern POBJECT_TYPE NTSYSAPI ExWindowStationObjectType;
00061 extern POBJECT_TYPE NTSYSAPI ExIoCompletionType;
00062 extern POBJECT_TYPE NTSYSAPI ExMutantObjectType;
00063 extern POBJECT_TYPE NTSYSAPI ExTimerType;
00064 
00065 //
00066 // Exported NT Build Number
00067 //
00068 extern ULONG NTSYSAPI NtBuildNumber;
00069 
00070 //
00071 // Invalid Handle Value Constant
00072 //
00073 #define INVALID_HANDLE_VALUE                (HANDLE)-1
00074 
00075 #endif
00076 
00077 //
00078 // Increments
00079 //
00080 #define MUTANT_INCREMENT                    1
00081 
00082 //
00083 // Callback Object Access Mask
00084 //
00085 #define CALLBACK_ALL_ACCESS                 (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x0001)
00086 #define CALLBACK_EXECUTE                    (STANDARD_RIGHTS_EXECUTE|SYNCHRONIZE|0x0001)
00087 #define CALLBACK_WRITE                      (STANDARD_RIGHTS_WRITE|SYNCHRONIZE|0x0001)
00088 #define CALLBACK_READ                       (STANDARD_RIGHTS_READ|SYNCHRONIZE|0x0001)
00089 
00090 //
00091 // Event Object Access Masks
00092 //
00093 #ifdef NTOS_MODE_USER
00094 #define EVENT_QUERY_STATE                   0x0001
00095 
00096 //
00097 // Semaphore Object Access Masks
00098 //
00099 #define SEMAPHORE_QUERY_STATE               0x0001
00100 #else
00101 
00102 //
00103 // Mutant Object Access Masks
00104 //
00105 #define MUTANT_QUERY_STATE                  0x0001
00106 #define MUTANT_ALL_ACCESS                   (STANDARD_RIGHTS_REQUIRED | \
00107                                              SYNCHRONIZE | \
00108                                              MUTANT_QUERY_STATE)
00109 
00110 #define TIMER_QUERY_STATE                   0x0001
00111 #define TIMER_MODIFY_STATE                  0x0002
00112 #define TIMER_ALL_ACCESS                    (STANDARD_RIGHTS_REQUIRED | \
00113                                              SYNCHRONIZE | \
00114                                              TIMER_QUERY_STATE | \
00115                                              TIMER_MODIFY_STATE)
00116 #endif
00117 
00118 //
00119 // Event Pair Access Masks
00120 //
00121 #define EVENT_PAIR_ALL_ACCESS               0x1F0000L
00122 
00123 //
00124 // Profile Object Access Masks
00125 //
00126 #define PROFILE_CONTROL                     0x0001
00127 #define PROFILE_ALL_ACCESS                  (STANDARD_RIGHTS_REQUIRED | PROFILE_CONTROL)
00128 
00129 //
00130 // NtRaiseHardError-related parameters
00131 //
00132 #define MAXIMUM_HARDERROR_PARAMETERS        4
00133 #define HARDERROR_OVERRIDE_ERRORMODE        0x10000000
00134 
00135 //
00136 // Pushlock bits
00137 //
00138 #define EX_PUSH_LOCK_LOCK_V                 ((ULONG_PTR)0x0)
00139 #define EX_PUSH_LOCK_LOCK                   ((ULONG_PTR)0x1)
00140 #define EX_PUSH_LOCK_WAITING                ((ULONG_PTR)0x2)
00141 #define EX_PUSH_LOCK_WAKING                 ((ULONG_PTR)0x4)
00142 #define EX_PUSH_LOCK_MULTIPLE_SHARED        ((ULONG_PTR)0x8)
00143 #define EX_PUSH_LOCK_SHARE_INC              ((ULONG_PTR)0x10)
00144 #define EX_PUSH_LOCK_PTR_BITS               ((ULONG_PTR)0xf)
00145 
00146 //
00147 // Pushlock Wait Block Flags
00148 //
00149 #define EX_PUSH_LOCK_FLAGS_EXCLUSIVE        1
00150 #define EX_PUSH_LOCK_FLAGS_WAIT_V           1
00151 #define EX_PUSH_LOCK_FLAGS_WAIT             2
00152 
00153 //
00154 // Resource (ERESOURCE) Flags
00155 //
00156 #define ResourceHasDisabledPriorityBoost    0x08
00157 
00158 //
00159 // Shutdown types for NtShutdownSystem
00160 //
00161 typedef enum _SHUTDOWN_ACTION
00162 {
00163     ShutdownNoReboot,
00164     ShutdownReboot,
00165     ShutdownPowerOff
00166 } SHUTDOWN_ACTION;
00167 
00168 //
00169 // Responses for NtRaiseHardError
00170 //
00171 typedef enum _HARDERROR_RESPONSE_OPTION
00172 {
00173     OptionAbortRetryIgnore,
00174     OptionOk,
00175     OptionOkCancel,
00176     OptionRetryCancel,
00177     OptionYesNo,
00178     OptionYesNoCancel,
00179     OptionShutdownSystem,
00180     OptionOkNoWait,
00181     OptionCancelTryContinue
00182 } HARDERROR_RESPONSE_OPTION, *PHARDERROR_RESPONSE_OPTION;
00183 
00184 typedef enum _HARDERROR_RESPONSE
00185 {
00186     ResponseReturnToCaller,
00187     ResponseNotHandled,
00188     ResponseAbort,
00189     ResponseCancel,
00190     ResponseIgnore,
00191     ResponseNo,
00192     ResponseOk,
00193     ResponseRetry,
00194     ResponseYes,
00195     ResponseTryAgain,
00196     ResponseContinue
00197 } HARDERROR_RESPONSE, *PHARDERROR_RESPONSE;
00198 
00199 //
00200 //  System Information Classes for NtQuerySystemInformation
00201 //
00202 typedef enum _SYSTEM_INFORMATION_CLASS
00203 {
00204     SystemBasicInformation,
00205     SystemProcessorInformation,
00206     SystemPerformanceInformation,
00207     SystemTimeOfDayInformation,
00208     SystemPathInformation, 
00209     SystemProcessInformation,
00210     SystemCallCountInformation,
00211     SystemDeviceInformation,
00212     SystemProcessorPerformanceInformation,
00213     SystemFlagsInformation,
00214     SystemCallTimeInformation,
00215     SystemModuleInformation,
00216     SystemLocksInformation,
00217     SystemStackTraceInformation,
00218     SystemPagedPoolInformation,
00219     SystemNonPagedPoolInformation,
00220     SystemHandleInformation,
00221     SystemObjectInformation,
00222     SystemPageFileInformation,
00223     SystemVdmInstemulInformation,
00224     SystemVdmBopInformation,
00225     SystemFileCacheInformation,
00226     SystemPoolTagInformation,
00227     SystemInterruptInformation,
00228     SystemDpcBehaviorInformation,
00229     SystemFullMemoryInformation,
00230     SystemLoadGdiDriverInformation,
00231     SystemUnloadGdiDriverInformation,
00232     SystemTimeAdjustmentInformation,
00233     SystemSummaryMemoryInformation,
00234     SystemMirrorMemoryInformation,
00235     SystemPerformanceTraceInformation,
00236     SystemObsolete0,
00237     SystemExceptionInformation,
00238     SystemCrashDumpStateInformation,
00239     SystemKernelDebuggerInformation,
00240     SystemContextSwitchInformation,
00241     SystemRegistryQuotaInformation,
00242     SystemExtendServiceTableInformation,
00243     SystemPrioritySeperation,
00244     SystemPlugPlayBusInformation,
00245     SystemDockInformation,
00246     SystemPowerInformationNative,
00247     SystemProcessorSpeedInformation,
00248     SystemCurrentTimeZoneInformation,
00249     SystemLookasideInformation,
00250     SystemTimeSlipNotification,
00251     SystemSessionCreate,
00252     SystemSessionDetach,
00253     SystemSessionInformation,
00254     SystemRangeStartInformation,
00255     SystemVerifierInformation,
00256     SystemAddVerifier,
00257     SystemSessionProcessesInformation,
00258     SystemLoadGdiDriverInSystemSpaceInformation,
00259     SystemNumaProcessorMap,
00260     SystemPrefetcherInformation,
00261     SystemExtendedProcessInformation,
00262     SystemRecommendedSharedDataAlignment,
00263     SystemComPlusPackage,
00264     SystemNumaAvailableMemory,
00265     SystemProcessorPowerInformation,
00266     SystemEmulationBasicInformation,
00267     SystemEmulationProcessorInformation,
00268     SystemExtendedHanfleInformation,
00269     SystemLostDelayedWriteInformation,
00270     SystemBigPoolInformation,
00271     SystemSessionPoolTagInformation,
00272     SystemSessionMappedViewInformation,
00273     SystemHotpatchInformation,
00274     SystemObjectSecurityMode,
00275     SystemWatchDogTimerHandler,
00276     SystemWatchDogTimerInformation,
00277     SystemLogicalProcessorInformation,
00278     SystemWow64SharedInformationObsolete,
00279     SystemRegisterFirmwareTableInformationHandler,
00280     SystemFirmwareTableInformation,
00281     SystemModuleInformationEx,
00282     SystemVerifierTriageInformation,
00283     SystemSuperfetchInformation,
00284     SystemMemoryListInformation,
00285     SystemFileCacheInformationEx,
00286     SystemThreadPriorityClientIdInformation,
00287     SystemProcessorIdleCycleTimeInformation,
00288     SystemVerifierCancellationInformation,
00289     SystemProcessorPowerInformationEx,
00290     SystemRefTraceInformation,
00291     SystemSpecialPoolInformation,
00292     SystemProcessIdInformation,
00293     SystemErrorPortInformation,
00294     SystemBootEnvironmentInformation,
00295     SystemHypervisorInformation,
00296     SystemVerifierInformationEx,
00297     SystemTimeZoneInformation,
00298     SystemImageFileExecutionOptionsInformation,
00299     SystemCoverageInformation,
00300     SystemPrefetchPathInformation,
00301     SystemVerifierFaultsInformation,
00302     MaxSystemInfoClass,
00303 } SYSTEM_INFORMATION_CLASS;
00304 
00305 //
00306 //  System Information Classes for NtQueryMutant
00307 //
00308 typedef enum _MUTANT_INFORMATION_CLASS
00309 {
00310     MutantBasicInformation,
00311     MutantOwnerInformation
00312 } MUTANT_INFORMATION_CLASS;
00313 
00314 //
00315 //  System Information Classes for NtQueryAtom
00316 //
00317 typedef enum _ATOM_INFORMATION_CLASS
00318 {
00319     AtomBasicInformation,
00320     AtomTableInformation,
00321 } ATOM_INFORMATION_CLASS;
00322 
00323 //
00324 //  System Information Classes for NtQueryTimer
00325 //
00326 typedef enum _TIMER_INFORMATION_CLASS
00327 {
00328     TimerBasicInformation
00329 } TIMER_INFORMATION_CLASS;
00330 
00331 //
00332 //  System Information Classes for NtQuerySemaphore
00333 //
00334 typedef enum _SEMAPHORE_INFORMATION_CLASS
00335 {
00336     SemaphoreBasicInformation
00337 } SEMAPHORE_INFORMATION_CLASS;
00338 
00339 //
00340 //  System Information Classes for NtQueryEvent
00341 //
00342 typedef enum _EVENT_INFORMATION_CLASS
00343 {
00344     EventBasicInformation
00345 } EVENT_INFORMATION_CLASS;
00346 
00347 #ifdef NTOS_MODE_USER
00348 
00349 //
00350 // Firmware Table Actions for SystemFirmwareTableInformation
00351 //
00352 typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION
00353 {
00354     SystemFirmwareTable_Enumerate = 0,
00355     SystemFirmwareTable_Get = 1,
00356 } SYSTEM_FIRMWARE_TABLE_ACTION, *PSYSTEM_FIRMWARE_TABLE_ACTION;
00357 
00358 //
00359 // Firmware Handler Callback
00360 //
00361 struct _SYSTEM_FIRMWARE_TABLE_INFORMATION;
00362 typedef
00363 NTSTATUS
00364 (__cdecl *PFNFTH)(
00365     IN struct _SYSTEM_FIRMWARE_TABLE_INFORMATION *FirmwareTableInformation
00366 );
00367 
00368 #else
00369 
00370 //
00371 // Handle Enumeration Callback
00372 //
00373 struct _HANDLE_TABLE_ENTRY;
00374 typedef BOOLEAN
00375 (NTAPI *PEX_ENUM_HANDLE_CALLBACK)(
00376     IN struct _HANDLE_TABLE_ENTRY *HandleTableEntry,
00377     IN HANDLE Handle,
00378     IN PVOID Context
00379 );
00380 
00381 //
00382 // Executive Work Queue Structures
00383 //
00384 typedef struct _EX_QUEUE_WORKER_INFO
00385 {
00386     ULONG QueueDisabled:1;
00387     ULONG MakeThreadsAsNecessary:1;
00388     ULONG WaitMode:1;
00389     ULONG WorkerCount:29;
00390 } EX_QUEUE_WORKER_INFO, *PEX_QUEUE_WORKER_INFO;
00391 
00392 typedef struct _EX_WORK_QUEUE
00393 {
00394     KQUEUE WorkerQueue;
00395     LONG DynamicThreadCount;
00396     ULONG WorkItemsProcessed;
00397     ULONG WorkItemsProcessedLastPass;
00398     ULONG QueueDepthLastPass;
00399     EX_QUEUE_WORKER_INFO Info;
00400 } EX_WORK_QUEUE, *PEX_WORK_QUEUE;
00401 
00402 //
00403 // Executive Fast Reference Structure
00404 //
00405 typedef struct _EX_FAST_REF
00406 {
00407     union
00408     {
00409         PVOID Object;
00410         ULONG_PTR RefCnt:3;
00411         ULONG_PTR Value;
00412     };
00413 } EX_FAST_REF, *PEX_FAST_REF;
00414 
00415 //
00416 // Executive Cache-Aware Rundown Reference Descriptor
00417 //
00418 typedef struct _EX_RUNDOWN_REF_CACHE_AWARE
00419 {
00420     PEX_RUNDOWN_REF RunRefs;
00421     PVOID PoolToFree;
00422     ULONG RunRefSize;
00423     ULONG Number;
00424 } EX_RUNDOWN_REF_CACHE_AWARE;
00425 
00426 //
00427 // Executive Rundown Wait Block
00428 //
00429 typedef struct _EX_RUNDOWN_WAIT_BLOCK
00430 {
00431     ULONG_PTR Count;
00432     KEVENT WakeEvent;
00433 } EX_RUNDOWN_WAIT_BLOCK, *PEX_RUNDOWN_WAIT_BLOCK;
00434 
00435 //
00436 // Executive Pushlock
00437 //
00438 #undef EX_PUSH_LOCK
00439 #undef PEX_PUSH_LOCK
00440 typedef struct _EX_PUSH_LOCK
00441 {
00442     union
00443     {
00444         struct
00445         {
00446             ULONG_PTR Locked:1;
00447             ULONG_PTR Waiting:1;
00448             ULONG_PTR Waking:1;
00449             ULONG_PTR MultipleShared:1;
00450             ULONG_PTR Shared:sizeof (ULONG_PTR) * 8 - 4;
00451         };
00452         ULONG_PTR Value;
00453         PVOID Ptr;
00454     };
00455 } EX_PUSH_LOCK, *PEX_PUSH_LOCK;
00456 
00457 //
00458 // Executive Pushlock Wait Block
00459 //
00460 typedef __ALIGNED(16) struct _EX_PUSH_LOCK_WAIT_BLOCK
00461 {
00462     union
00463     {
00464         KGATE WakeGate;
00465         KEVENT WakeEvent;
00466     };
00467     struct _EX_PUSH_LOCK_WAIT_BLOCK *Next;
00468     struct _EX_PUSH_LOCK_WAIT_BLOCK *Last;
00469     struct _EX_PUSH_LOCK_WAIT_BLOCK *Previous;
00470     LONG ShareCount;
00471     LONG Flags;
00472 #if DBG
00473     BOOLEAN Signaled;
00474     EX_PUSH_LOCK NewValue;
00475     EX_PUSH_LOCK OldValue;
00476     PEX_PUSH_LOCK PushLock;
00477 #endif
00478 } EX_PUSH_LOCK_WAIT_BLOCK, *PEX_PUSH_LOCK_WAIT_BLOCK;
00479 
00480 //
00481 // Callback Object
00482 //
00483 typedef struct _CALLBACK_OBJECT
00484 {
00485     ULONG Signature;
00486     KSPIN_LOCK Lock;
00487     LIST_ENTRY RegisteredCallbacks;
00488     BOOLEAN AllowMultipleCallbacks;
00489     UCHAR reserved[3];
00490 } CALLBACK_OBJECT;
00491 
00492 //
00493 // Callback Handle
00494 //
00495 typedef struct _CALLBACK_REGISTRATION
00496 {
00497     LIST_ENTRY Link;
00498     PCALLBACK_OBJECT CallbackObject;
00499     PCALLBACK_FUNCTION CallbackFunction;
00500     PVOID CallbackContext;
00501     ULONG Busy;
00502     BOOLEAN UnregisterWaiting;
00503 } CALLBACK_REGISTRATION, *PCALLBACK_REGISTRATION;
00504 
00505 //
00506 // Internal Callback Object
00507 //
00508 typedef struct _EX_CALLBACK_ROUTINE_BLOCK
00509 {
00510     EX_RUNDOWN_REF RundownProtect;
00511     PEX_CALLBACK_FUNCTION Function;
00512     PVOID Context;
00513 } EX_CALLBACK_ROUTINE_BLOCK, *PEX_CALLBACK_ROUTINE_BLOCK;
00514 
00515 //
00516 // Internal Callback Handle
00517 //
00518 typedef struct _EX_CALLBACK
00519 {
00520     EX_FAST_REF RoutineBlock;
00521 } EX_CALLBACK, *PEX_CALLBACK;
00522 
00523 //
00524 // Profile Object
00525 //
00526 typedef struct _EPROFILE
00527 {
00528     PEPROCESS Process;
00529     PVOID RangeBase;
00530     SIZE_T RangeSize;
00531     PVOID Buffer;
00532     ULONG BufferSize;
00533     ULONG BucketSize;
00534     PKPROFILE ProfileObject;
00535     PVOID LockedBufferAddress;
00536     PMDL Mdl;
00537     ULONG_PTR Segment;
00538     KPROFILE_SOURCE ProfileSource;
00539     KAFFINITY Affinity;
00540 } EPROFILE, *PEPROFILE;
00541 
00542 //
00543 // Handle Table Structures
00544 //
00545 typedef struct _HANDLE_TRACE_DB_ENTRY
00546 {
00547     CLIENT_ID ClientId;
00548     HANDLE Handle;
00549     ULONG Type;
00550     PVOID StackTrace[16];
00551 } HANDLE_TRACE_DB_ENTRY, *PHANDLE_TRACE_DB_ENTRY;
00552 
00553 typedef struct _HANDLE_TRACE_DEBUG_INFO
00554 {
00555     LONG RefCount;
00556     ULONG TableSize;
00557     ULONG BitMaskFlags;
00558     FAST_MUTEX CloseCompatcionLock;
00559     ULONG CurrentStackIndex;
00560     HANDLE_TRACE_DB_ENTRY TraceDb[1];
00561 } HANDLE_TRACE_DEBUG_INFO, *PHANDLE_TRACE_DEBUG_INFO;
00562 
00563 typedef struct _HANDLE_TABLE_ENTRY_INFO
00564 {
00565     ULONG AuditMask;
00566 } HANDLE_TABLE_ENTRY_INFO, *PHANDLE_TABLE_ENTRY_INFO;
00567 
00568 typedef struct _HANDLE_TABLE_ENTRY
00569 {
00570     union
00571     {
00572         PVOID Object;
00573         ULONG_PTR ObAttributes;
00574         PHANDLE_TABLE_ENTRY_INFO InfoTable;
00575         ULONG_PTR Value;
00576     };
00577     union
00578     {
00579         ULONG GrantedAccess;
00580         struct
00581         {
00582             USHORT GrantedAccessIndex;
00583             USHORT CreatorBackTraceIndex;
00584         };
00585         LONG NextFreeTableEntry;
00586     };
00587 } HANDLE_TABLE_ENTRY, *PHANDLE_TABLE_ENTRY;
00588 
00589 typedef struct _HANDLE_TABLE
00590 {
00591 #if (NTDDI_VERSION >= NTDDI_WINXP)
00592     ULONG_PTR TableCode;
00593 #else
00594     PHANDLE_TABLE_ENTRY **Table;
00595 #endif
00596     PEPROCESS QuotaProcess;
00597     PVOID UniqueProcessId;
00598 #if (NTDDI_VERSION >= NTDDI_WINXP)
00599     EX_PUSH_LOCK HandleTableLock[4];
00600     LIST_ENTRY HandleTableList;
00601     EX_PUSH_LOCK HandleContentionEvent;
00602 #else
00603     ERESOURCE HandleLock;
00604     LIST_ENTRY HandleTableList;
00605     KEVENT HandleContentionEvent;
00606 #endif
00607     PHANDLE_TRACE_DEBUG_INFO DebugInfo;
00608     LONG ExtraInfoPages;
00609 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00610     union
00611     {
00612         ULONG Flags;
00613         UCHAR StrictFIFO:1;
00614     };
00615     LONG FirstFreeHandle;
00616     PHANDLE_TABLE_ENTRY LastFreeHandleEntry;
00617     LONG HandleCount;
00618     ULONG NextHandleNeedingPool;
00619 #else
00620     ULONG FirstFree;
00621     ULONG LastFree;
00622     ULONG NextHandleNeedingPool;
00623     LONG HandleCount;
00624     union
00625     {
00626         ULONG Flags;
00627         UCHAR StrictFIFO:1;
00628     };
00629 #endif
00630 } HANDLE_TABLE, *PHANDLE_TABLE;
00631 
00632 #endif
00633 
00634 //
00635 // Hard Error LPC Message
00636 //
00637 typedef struct _HARDERROR_MSG
00638 {
00639     PORT_MESSAGE h;
00640     NTSTATUS Status;
00641     LARGE_INTEGER ErrorTime;
00642     ULONG ValidResponseOptions;
00643     ULONG Response;
00644     ULONG NumberOfParameters;
00645     ULONG UnicodeStringParameterMask;
00646     ULONG_PTR Parameters[MAXIMUM_HARDERROR_PARAMETERS];
00647 } HARDERROR_MSG, *PHARDERROR_MSG;
00648 
00649 //
00650 // Information Structures for NtQueryMutant
00651 //
00652 typedef struct _MUTANT_BASIC_INFORMATION
00653 {
00654     LONG CurrentCount;
00655     BOOLEAN OwnedByCaller;
00656     BOOLEAN AbandonedState;
00657 } MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
00658 
00659 typedef struct _MUTANT_OWNER_INFORMATION
00660 {
00661     CLIENT_ID ClientId;
00662 } MUTANT_OWNER_INFORMATION, *PMUTANT_OWNER_INFORMATION;
00663 
00664 //
00665 // Information Structures for NtQueryAtom
00666 //
00667 typedef struct _ATOM_BASIC_INFORMATION
00668 {
00669     USHORT UsageCount;
00670     USHORT Flags;
00671     USHORT NameLength;
00672     WCHAR Name[1];
00673 } ATOM_BASIC_INFORMATION, *PATOM_BASIC_INFORMATION;
00674 
00675 typedef struct _ATOM_TABLE_INFORMATION
00676 {
00677     ULONG NumberOfAtoms;
00678     USHORT Atoms[1];
00679 } ATOM_TABLE_INFORMATION, *PATOM_TABLE_INFORMATION;
00680 
00681 //
00682 // Information Structures for NtQueryTimer
00683 //
00684 typedef struct _TIMER_BASIC_INFORMATION
00685 {
00686     LARGE_INTEGER TimeRemaining;
00687     BOOLEAN SignalState;
00688 } TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
00689 
00690 //
00691 // Information Structures for NtQuerySemaphore
00692 //
00693 typedef struct _SEMAPHORE_BASIC_INFORMATION
00694 {
00695     LONG CurrentCount;
00696     LONG MaximumCount;
00697 } SEMAPHORE_BASIC_INFORMATION, *PSEMAPHORE_BASIC_INFORMATION;
00698 
00699 //
00700 // Information Structures for NtQueryEvent
00701 //
00702 typedef struct _EVENT_BASIC_INFORMATION
00703 {
00704     EVENT_TYPE EventType;
00705     LONG EventState;
00706 } EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION;
00707 
00708 //
00709 // Information Structures for NtQuerySystemInformation
00710 //
00711 typedef struct _SYSTEM_BASIC_INFORMATION
00712 {
00713     ULONG Reserved;
00714     ULONG TimerResolution;
00715     ULONG PageSize;
00716     ULONG NumberOfPhysicalPages;
00717     ULONG LowestPhysicalPageNumber;
00718     ULONG HighestPhysicalPageNumber;
00719     ULONG AllocationGranularity;
00720     ULONG_PTR MinimumUserModeAddress;
00721     ULONG_PTR MaximumUserModeAddress;
00722     ULONG_PTR ActiveProcessorsAffinityMask;
00723     CCHAR NumberOfProcessors;
00724 } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
00725 
00726 // Class 1
00727 typedef struct _SYSTEM_PROCESSOR_INFORMATION
00728 {
00729     USHORT ProcessorArchitecture;
00730     USHORT ProcessorLevel;
00731     USHORT ProcessorRevision;
00732     USHORT Reserved;
00733     ULONG ProcessorFeatureBits;
00734 } SYSTEM_PROCESSOR_INFORMATION, *PSYSTEM_PROCESSOR_INFORMATION;
00735 
00736 // Class 2
00737 typedef struct _SYSTEM_PERFORMANCE_INFORMATION
00738 {
00739     LARGE_INTEGER IdleProcessTime;
00740     LARGE_INTEGER IoReadTransferCount;
00741     LARGE_INTEGER IoWriteTransferCount;
00742     LARGE_INTEGER IoOtherTransferCount;
00743     ULONG IoReadOperationCount;
00744     ULONG IoWriteOperationCount;
00745     ULONG IoOtherOperationCount;
00746     ULONG AvailablePages;
00747     ULONG CommittedPages;
00748     ULONG CommitLimit;
00749     ULONG PeakCommitment;
00750     ULONG PageFaultCount;
00751     ULONG CopyOnWriteCount;
00752     ULONG TransitionCount;
00753     ULONG CacheTransitionCount;
00754     ULONG DemandZeroCount;
00755     ULONG PageReadCount;
00756     ULONG PageReadIoCount;
00757     ULONG CacheReadCount;
00758     ULONG CacheIoCount;
00759     ULONG DirtyPagesWriteCount;
00760     ULONG DirtyWriteIoCount;
00761     ULONG MappedPagesWriteCount;
00762     ULONG MappedWriteIoCount;
00763     ULONG PagedPoolPages;
00764     ULONG NonPagedPoolPages;
00765     ULONG PagedPoolAllocs;
00766     ULONG PagedPoolFrees;
00767     ULONG NonPagedPoolAllocs;
00768     ULONG NonPagedPoolFrees;
00769     ULONG FreeSystemPtes;
00770     ULONG ResidentSystemCodePage;
00771     ULONG TotalSystemDriverPages;
00772     ULONG TotalSystemCodePages;
00773     ULONG NonPagedPoolLookasideHits;
00774     ULONG PagedPoolLookasideHits;
00775     ULONG Spare3Count;
00776     ULONG ResidentSystemCachePage;
00777     ULONG ResidentPagedPoolPage;
00778     ULONG ResidentSystemDriverPage;
00779     ULONG CcFastReadNoWait;
00780     ULONG CcFastReadWait;
00781     ULONG CcFastReadResourceMiss;
00782     ULONG CcFastReadNotPossible;
00783     ULONG CcFastMdlReadNoWait;
00784     ULONG CcFastMdlReadWait;
00785     ULONG CcFastMdlReadResourceMiss;
00786     ULONG CcFastMdlReadNotPossible;
00787     ULONG CcMapDataNoWait;
00788     ULONG CcMapDataWait;
00789     ULONG CcMapDataNoWaitMiss;
00790     ULONG CcMapDataWaitMiss;
00791     ULONG CcPinMappedDataCount;
00792     ULONG CcPinReadNoWait;
00793     ULONG CcPinReadWait;
00794     ULONG CcPinReadNoWaitMiss;
00795     ULONG CcPinReadWaitMiss;
00796     ULONG CcCopyReadNoWait;
00797     ULONG CcCopyReadWait;
00798     ULONG CcCopyReadNoWaitMiss;
00799     ULONG CcCopyReadWaitMiss;
00800     ULONG CcMdlReadNoWait;
00801     ULONG CcMdlReadWait;
00802     ULONG CcMdlReadNoWaitMiss;
00803     ULONG CcMdlReadWaitMiss;
00804     ULONG CcReadAheadIos;
00805     ULONG CcLazyWriteIos;
00806     ULONG CcLazyWritePages;
00807     ULONG CcDataFlushes;
00808     ULONG CcDataPages;
00809     ULONG ContextSwitches;
00810     ULONG FirstLevelTbFills;
00811     ULONG SecondLevelTbFills;
00812     ULONG SystemCalls;
00813 } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
00814 
00815 // Class 3
00816 typedef struct _SYSTEM_TIMEOFDAY_INFORMATION
00817 {
00818     LARGE_INTEGER BootTime;
00819     LARGE_INTEGER CurrentTime;
00820     LARGE_INTEGER TimeZoneBias;
00821     ULONG TimeZoneId;
00822     ULONG Reserved;
00823 #if (NTDDI_VERSION >= NTDDI_WIN2K)
00824     ULONGLONG BootTimeBias;
00825     ULONGLONG SleepTimeBias;
00826 #endif
00827 } SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION;
00828 
00829 // Class 4
00830 // This class is obsolete, please use KUSER_SHARED_DATA instead
00831 
00832 // Class 5
00833 typedef struct _SYSTEM_THREAD_INFORMATION
00834 {
00835     LARGE_INTEGER KernelTime;
00836     LARGE_INTEGER UserTime;
00837     LARGE_INTEGER CreateTime;
00838     ULONG WaitTime;
00839     PVOID StartAddress;
00840     CLIENT_ID ClientId;
00841     KPRIORITY Priority;
00842     LONG BasePriority;
00843     ULONG ContextSwitches;
00844     ULONG ThreadState;
00845     ULONG WaitReason;
00846     ULONG PadPadAlignment;
00847 } SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;
00848 #ifndef _WIN64
00849 C_ASSERT(sizeof(SYSTEM_THREAD_INFORMATION) == 0x40); // Must be 8-byte aligned
00850 #endif
00851 
00852 typedef struct _SYSTEM_PROCESS_INFORMATION
00853 {
00854     ULONG NextEntryOffset;
00855     ULONG NumberOfThreads;
00856     LARGE_INTEGER WorkingSetPrivateSize; //VISTA
00857     ULONG HardFaultCount; //WIN7
00858     ULONG NumberOfThreadsHighWatermark; //WIN7
00859     ULONGLONG CycleTime; //WIN7
00860     LARGE_INTEGER CreateTime;
00861     LARGE_INTEGER UserTime;
00862     LARGE_INTEGER KernelTime;
00863     UNICODE_STRING ImageName;
00864     KPRIORITY BasePriority;
00865     HANDLE UniqueProcessId;
00866     HANDLE InheritedFromUniqueProcessId;
00867     ULONG HandleCount;
00868     ULONG SessionId;
00869     ULONG_PTR PageDirectoryBase;
00870 
00871     //
00872     // This part corresponds to VM_COUNTERS_EX.
00873     // NOTE: *NOT* THE SAME AS VM_COUNTERS!
00874     //
00875     SIZE_T PeakVirtualSize;
00876     SIZE_T VirtualSize;
00877     ULONG PageFaultCount;
00878     SIZE_T PeakWorkingSetSize;
00879     SIZE_T WorkingSetSize;
00880     SIZE_T QuotaPeakPagedPoolUsage;
00881     SIZE_T QuotaPagedPoolUsage;
00882     SIZE_T QuotaPeakNonPagedPoolUsage;
00883     SIZE_T QuotaNonPagedPoolUsage;
00884     SIZE_T PagefileUsage;
00885     SIZE_T PeakPagefileUsage;
00886     SIZE_T PrivatePageCount;
00887 
00888     //
00889     // This part corresponds to IO_COUNTERS
00890     //
00891     LARGE_INTEGER ReadOperationCount;
00892     LARGE_INTEGER WriteOperationCount;
00893     LARGE_INTEGER OtherOperationCount;
00894     LARGE_INTEGER ReadTransferCount;
00895     LARGE_INTEGER WriteTransferCount;
00896     LARGE_INTEGER OtherTransferCount;
00897 //    SYSTEM_THREAD_INFORMATION TH[1];
00898 } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
00899 #ifndef _WIN64
00900 C_ASSERT(sizeof(SYSTEM_PROCESS_INFORMATION) == 0xB8); // Must be 8-byte aligned
00901 #endif
00902 
00903 //
00904 // Class 6
00905 typedef struct _SYSTEM_CALL_COUNT_INFORMATION
00906 {
00907     ULONG Length;
00908     ULONG NumberOfTables;
00909 } SYSTEM_CALL_COUNT_INFORMATION, *PSYSTEM_CALL_COUNT_INFORMATION;
00910 
00911 // Class 7
00912 typedef struct _SYSTEM_DEVICE_INFORMATION
00913 {
00914     ULONG NumberOfDisks;
00915     ULONG NumberOfFloppies;
00916     ULONG NumberOfCdRoms;
00917     ULONG NumberOfTapes;
00918     ULONG NumberOfSerialPorts;
00919     ULONG NumberOfParallelPorts;
00920 } SYSTEM_DEVICE_INFORMATION, *PSYSTEM_DEVICE_INFORMATION;
00921 
00922 // Class 8
00923 typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
00924 {
00925     LARGE_INTEGER IdleTime;
00926     LARGE_INTEGER KernelTime;
00927     LARGE_INTEGER UserTime;
00928     LARGE_INTEGER DpcTime;
00929     LARGE_INTEGER InterruptTime;
00930     ULONG InterruptCount;
00931 } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
00932 
00933 // Class 9
00934 typedef struct _SYSTEM_FLAGS_INFORMATION
00935 {
00936     ULONG Flags;
00937 } SYSTEM_FLAGS_INFORMATION, *PSYSTEM_FLAGS_INFORMATION;
00938 
00939 // Class 10
00940 typedef struct _SYSTEM_CALL_TIME_INFORMATION
00941 {
00942     ULONG Length;
00943     ULONG TotalCalls;
00944     LARGE_INTEGER TimeOfCalls[1];
00945 } SYSTEM_CALL_TIME_INFORMATION, *PSYSTEM_CALL_TIME_INFORMATION;
00946 
00947 // Class 11 - See RTL_PROCESS_MODULES
00948 
00949 // Class 12 - See RTL_PROCESS_LOCKS
00950 
00951 // Class 13 - See RTL_PROCESS_BACKTRACES
00952 
00953 // Class 14 - 15
00954 typedef struct _SYSTEM_POOL_ENTRY
00955 {
00956     BOOLEAN Allocated;
00957     BOOLEAN Spare0;
00958     USHORT AllocatorBackTraceIndex;
00959     ULONG Size;
00960     union
00961     {
00962         UCHAR Tag[4];
00963         ULONG TagUlong;
00964         PVOID ProcessChargedQuota;
00965     };
00966 } SYSTEM_POOL_ENTRY, *PSYSTEM_POOL_ENTRY;
00967 
00968 typedef struct _SYSTEM_POOL_INFORMATION
00969 {
00970     SIZE_T TotalSize;
00971     PVOID FirstEntry;
00972     USHORT EntryOverhead;
00973     BOOLEAN PoolTagPresent;
00974     BOOLEAN Spare0;
00975     ULONG NumberOfEntries;
00976     SYSTEM_POOL_ENTRY Entries[1];
00977 } SYSTEM_POOL_INFORMATION, *PSYSTEM_POOL_INFORMATION;
00978 
00979 // Class 16
00980 typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO
00981 {
00982     USHORT UniqueProcessId;
00983     USHORT CreatorBackTraceIndex;
00984     UCHAR ObjectTypeIndex;
00985     UCHAR HandleAttributes;
00986     USHORT HandleValue;
00987     PVOID Object;
00988     ULONG GrantedAccess;
00989 } SYSTEM_HANDLE_TABLE_ENTRY_INFO, *PSYSTEM_HANDLE_TABLE_ENTRY_INFO;
00990 
00991 typedef struct _SYSTEM_HANDLE_INFORMATION
00992 {
00993     ULONG NumberOfHandles;
00994     SYSTEM_HANDLE_TABLE_ENTRY_INFO Handles[1];
00995 } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
00996 
00997 // Class 17
00998 typedef struct _SYSTEM_OBJECTTYPE_INFORMATION
00999 {
01000     ULONG NextEntryOffset;
01001     ULONG NumberOfObjects;
01002     ULONG NumberOfHandles;
01003     ULONG TypeIndex;
01004     ULONG InvalidAttributes;
01005     GENERIC_MAPPING GenericMapping;
01006     ULONG ValidAccessMask;
01007     ULONG PoolType;
01008     BOOLEAN SecurityRequired;
01009     BOOLEAN WaitableObject;
01010     UNICODE_STRING TypeName;
01011 } SYSTEM_OBJECTTYPE_INFORMATION, *PSYSTEM_OBJECTTYPE_INFORMATION;
01012 
01013 typedef struct _SYSTEM_OBJECT_INFORMATION
01014 {
01015     ULONG NextEntryOffset;
01016     PVOID Object;
01017     HANDLE CreatorUniqueProcess;
01018     USHORT CreatorBackTraceIndex;
01019     USHORT Flags;
01020     LONG PointerCount;
01021     LONG HandleCount;
01022     ULONG PagedPoolCharge;
01023     ULONG NonPagedPoolCharge;
01024     HANDLE ExclusiveProcessId;
01025     PVOID SecurityDescriptor;
01026     OBJECT_NAME_INFORMATION NameInfo;
01027 } SYSTEM_OBJECT_INFORMATION, *PSYSTEM_OBJECT_INFORMATION;
01028 
01029 // Class 18
01030 typedef struct _SYSTEM_PAGEFILE_INFORMATION
01031 {
01032     ULONG NextEntryOffset;
01033     ULONG TotalSize;
01034     ULONG TotalInUse;
01035     ULONG PeakUsage;
01036     UNICODE_STRING PageFileName;
01037 } SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION;
01038 
01039 // Class 19
01040 typedef struct _SYSTEM_VDM_INSTEMUL_INFO
01041 {
01042     ULONG SegmentNotPresent;
01043     ULONG VdmOpcode0F;
01044     ULONG OpcodeESPrefix;
01045     ULONG OpcodeCSPrefix;
01046     ULONG OpcodeSSPrefix;
01047     ULONG OpcodeDSPrefix;
01048     ULONG OpcodeFSPrefix;
01049     ULONG OpcodeGSPrefix;
01050     ULONG OpcodeOPER32Prefix;
01051     ULONG OpcodeADDR32Prefix;
01052     ULONG OpcodeINSB;
01053     ULONG OpcodeINSW;
01054     ULONG OpcodeOUTSB;
01055     ULONG OpcodeOUTSW;
01056     ULONG OpcodePUSHF;
01057     ULONG OpcodePOPF;
01058     ULONG OpcodeINTnn;
01059     ULONG OpcodeINTO;
01060     ULONG OpcodeIRET;
01061     ULONG OpcodeINBimm;
01062     ULONG OpcodeINWimm;
01063     ULONG OpcodeOUTBimm;
01064     ULONG OpcodeOUTWimm ;
01065     ULONG OpcodeINB;
01066     ULONG OpcodeINW;
01067     ULONG OpcodeOUTB;
01068     ULONG OpcodeOUTW;
01069     ULONG OpcodeLOCKPrefix;
01070     ULONG OpcodeREPNEPrefix;
01071     ULONG OpcodeREPPrefix;
01072     ULONG OpcodeHLT;
01073     ULONG OpcodeCLI;
01074     ULONG OpcodeSTI;
01075     ULONG BopCount;
01076 } SYSTEM_VDM_INSTEMUL_INFO, *PSYSTEM_VDM_INSTEMUL_INFO;
01077 
01078 // Class 20 - ULONG VDMBOPINFO
01079 
01080 // Class 21
01081 typedef struct _SYSTEM_FILECACHE_INFORMATION
01082 {
01083     SIZE_T CurrentSize;
01084     SIZE_T PeakSize;
01085     ULONG PageFaultCount;
01086     SIZE_T MinimumWorkingSet;
01087     SIZE_T MaximumWorkingSet;
01088     SIZE_T CurrentSizeIncludingTransitionInPages;
01089     SIZE_T PeakSizeIncludingTransitionInPages;
01090     ULONG TransitionRePurposeCount;
01091     ULONG Flags;
01092 } SYSTEM_FILECACHE_INFORMATION, *PSYSTEM_FILECACHE_INFORMATION;
01093 
01094 // Class 22
01095 typedef struct _SYSTEM_POOLTAG
01096 {
01097     union
01098     {
01099         UCHAR Tag[4];
01100         ULONG TagUlong;
01101     };
01102     ULONG PagedAllocs;
01103     ULONG PagedFrees;
01104     SIZE_T PagedUsed;
01105     ULONG NonPagedAllocs;
01106     ULONG NonPagedFrees;
01107     SIZE_T NonPagedUsed;
01108 } SYSTEM_POOLTAG, *PSYSTEM_POOLTAG;
01109 
01110 typedef struct _SYSTEM_POOLTAG_INFORMATION
01111 {
01112     ULONG Count;
01113     SYSTEM_POOLTAG TagInfo[1];
01114 } SYSTEM_POOLTAG_INFORMATION, *PSYSTEM_POOLTAG_INFORMATION;
01115 
01116 // Class 23
01117 typedef struct _SYSTEM_INTERRUPT_INFORMATION
01118 {
01119     ULONG ContextSwitches;
01120     ULONG DpcCount;
01121     ULONG DpcRate;
01122     ULONG TimeIncrement;
01123     ULONG DpcBypassCount;
01124     ULONG ApcBypassCount;
01125 } SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
01126 
01127 // Class 24
01128 typedef struct _SYSTEM_DPC_BEHAVIOR_INFORMATION
01129 {
01130     ULONG Spare;
01131     ULONG DpcQueueDepth;
01132     ULONG MinimumDpcRate;
01133     ULONG AdjustDpcThreshold;
01134     ULONG IdealDpcRate;
01135 } SYSTEM_DPC_BEHAVIOR_INFORMATION, *PSYSTEM_DPC_BEHAVIOR_INFORMATION;
01136 
01137 // Class 25
01138 typedef struct _SYSTEM_MEMORY_INFO
01139 {
01140     PUCHAR StringOffset;
01141     USHORT ValidCount;
01142     USHORT TransitionCount;
01143     USHORT ModifiedCount;
01144     USHORT PageTableCount;
01145 } SYSTEM_MEMORY_INFO, *PSYSTEM_MEMORY_INFO;
01146 
01147 typedef struct _SYSTEM_MEMORY_INFORMATION
01148 {
01149     ULONG InfoSize;
01150     ULONG StringStart;
01151     SYSTEM_MEMORY_INFO Memory[1];
01152 } SYSTEM_MEMORY_INFORMATION, *PSYSTEM_MEMORY_INFORMATION;
01153 
01154 // Class 26
01155 typedef struct _SYSTEM_GDI_DRIVER_INFORMATION
01156 {
01157     UNICODE_STRING DriverName;
01158     PVOID ImageAddress;
01159     PVOID SectionPointer;
01160     PVOID EntryPoint;
01161     PIMAGE_EXPORT_DIRECTORY ExportSectionPointer;
01162     ULONG ImageLength;
01163 } SYSTEM_GDI_DRIVER_INFORMATION, *PSYSTEM_GDI_DRIVER_INFORMATION;
01164 
01165 // Class 27
01166 // Not an actually class, simply a PVOID to the ImageAddress
01167 
01168 // Class 28
01169 typedef struct _SYSTEM_QUERY_TIME_ADJUST_INFORMATION
01170 {
01171     ULONG TimeAdjustment;
01172     ULONG TimeIncrement;
01173     BOOLEAN Enable;
01174 } SYSTEM_QUERY_TIME_ADJUST_INFORMATION, *PSYSTEM_QUERY_TIME_ADJUST_INFORMATION;
01175 
01176 typedef struct _SYSTEM_SET_TIME_ADJUST_INFORMATION
01177 {
01178     ULONG TimeAdjustment;
01179     BOOLEAN Enable;
01180 } SYSTEM_SET_TIME_ADJUST_INFORMATION, *PSYSTEM_SET_TIME_ADJUST_INFORMATION;
01181 
01182 // Class 29 - Same as 25
01183 
01184 // FIXME: Class 30
01185 
01186 // Class 31
01187 typedef struct _SYSTEM_REF_TRACE_INFORMATION
01188 {
01189    UCHAR TraceEnable;
01190    UCHAR TracePermanent;
01191    UNICODE_STRING TraceProcessName;
01192    UNICODE_STRING TracePoolTags;
01193 } SYSTEM_REF_TRACE_INFORMATION, *PSYSTEM_REF_TRACE_INFORMATION;
01194 
01195 // Class 32 - OBSOLETE
01196 
01197 // Class 33
01198 typedef struct _SYSTEM_EXCEPTION_INFORMATION
01199 {
01200     ULONG AlignmentFixupCount;
01201     ULONG ExceptionDispatchCount;
01202     ULONG FloatingEmulationCount;
01203     ULONG ByteWordEmulationCount;
01204 } SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
01205 
01206 // Class 34
01207 typedef struct _SYSTEM_CRASH_STATE_INFORMATION
01208 {
01209     ULONG ValidCrashDump;
01210 } SYSTEM_CRASH_STATE_INFORMATION, *PSYSTEM_CRASH_STATE_INFORMATION;
01211 
01212 // Class 35
01213 typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION
01214 {
01215     BOOLEAN KernelDebuggerEnabled;
01216     BOOLEAN KernelDebuggerNotPresent;
01217 } SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION;
01218 
01219 // Class 36
01220 typedef struct _SYSTEM_CONTEXT_SWITCH_INFORMATION
01221 {
01222     ULONG ContextSwitches;
01223     ULONG FindAny;
01224     ULONG FindLast;
01225     ULONG FindIdeal;
01226     ULONG IdleAny;
01227     ULONG IdleCurrent;
01228     ULONG IdleLast;
01229     ULONG IdleIdeal;
01230     ULONG PreemptAny;
01231     ULONG PreemptCurrent;
01232     ULONG PreemptLast;
01233     ULONG SwitchToIdle;
01234 } SYSTEM_CONTEXT_SWITCH_INFORMATION, *PSYSTEM_CONTEXT_SWITCH_INFORMATION;
01235 
01236 // Class 37
01237 typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION
01238 {
01239     ULONG RegistryQuotaAllowed;
01240     ULONG RegistryQuotaUsed;
01241     SIZE_T PagedPoolSize;
01242 } SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
01243 
01244 // Class 38
01245 // Not a structure, simply send the UNICODE_STRING
01246 
01247 // Class 39
01248 // Not a structure, simply send a ULONG containing the new separation
01249 
01250 // Class 40
01251 typedef struct _SYSTEM_PLUGPLAY_BUS_INFORMATION
01252 {
01253     ULONG BusCount;
01254     PLUGPLAY_BUS_INSTANCE BusInstance[1];
01255 } SYSTEM_PLUGPLAY_BUS_INFORMATION, *PSYSTEM_PLUGPLAY_BUS_INFORMATION;
01256 
01257 // Class 41
01258 typedef struct _SYSTEM_DOCK_INFORMATION
01259 {
01260     SYSTEM_DOCK_STATE DockState;
01261     INTERFACE_TYPE DeviceBusType;
01262     ULONG DeviceBusNumber;
01263     ULONG SlotNumber;
01264 } SYSTEM_DOCK_INFORMATION, *PSYSTEM_DOCK_INFORMATION;
01265 
01266 // Class 42
01267 typedef struct _SYSTEM_POWER_INFORMATION_NATIVE
01268 {
01269     BOOLEAN SystemSuspendSupported;
01270     BOOLEAN SystemHibernateSupported;
01271     BOOLEAN ResumeTimerSupportsSuspend;
01272     BOOLEAN ResumeTimerSupportsHibernate;
01273     BOOLEAN LidSupported;
01274     BOOLEAN TurboSettingSupported;
01275     BOOLEAN TurboMode;
01276     BOOLEAN SystemAcOrDc;
01277     BOOLEAN PowerDownDisabled;
01278     LARGE_INTEGER SpindownDrives;
01279 } SYSTEM_POWER_INFORMATION_NATIVE, *PSYSTEM_POWER_INFORMATION_NATIVE;
01280 
01281 // Class 43
01282 typedef struct _SYSTEM_LEGACY_DRIVER_INFORMATION
01283 {
01284     PNP_VETO_TYPE VetoType;
01285     UNICODE_STRING VetoDriver;
01286 } SYSTEM_LEGACY_DRIVER_INFORMATION, *PSYSTEM_LEGACY_DRIVER_INFORMATION;
01287 
01288 // Class 44
01289 //typedef struct _TIME_ZONE_INFORMATION RTL_TIME_ZONE_INFORMATION;
01290 
01291 // Class 45
01292 typedef struct _SYSTEM_LOOKASIDE_INFORMATION
01293 {
01294     USHORT CurrentDepth;
01295     USHORT MaximumDepth;
01296     ULONG TotalAllocates;
01297     ULONG AllocateMisses;
01298     ULONG TotalFrees;
01299     ULONG FreeMisses;
01300     ULONG Type;
01301     ULONG Tag;
01302     ULONG Size;
01303 } SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
01304 
01305 // Class 46
01306 // Not a structure. Only a HANDLE for the SlipEvent;
01307 
01308 // Class 47
01309 // Not a structure. Only a ULONG for the SessionId;
01310 
01311 // Class 48
01312 // Not a structure. Only a ULONG for the SessionId;
01313 
01314 // FIXME: Class 49
01315 
01316 // Class 50
01317 // Not a structure. Only a ULONG_PTR for the SystemRangeStart
01318 
01319 // Class 51
01320 typedef struct _SYSTEM_VERIFIER_INFORMATION
01321 {
01322    ULONG NextEntryOffset;
01323    ULONG Level;
01324    UNICODE_STRING DriverName;
01325    ULONG RaiseIrqls;
01326    ULONG AcquireSpinLocks;
01327    ULONG SynchronizeExecutions;
01328    ULONG AllocationsAttempted;
01329    ULONG AllocationsSucceeded;
01330    ULONG AllocationsSucceededSpecialPool;
01331    ULONG AllocationsWithNoTag;
01332    ULONG TrimRequests;
01333    ULONG Trims;
01334    ULONG AllocationsFailed;
01335    ULONG AllocationsFailedDeliberately;
01336    ULONG Loads;
01337    ULONG Unloads;
01338    ULONG UnTrackedPool;
01339    ULONG CurrentPagedPoolAllocations;
01340    ULONG CurrentNonPagedPoolAllocations;
01341    ULONG PeakPagedPoolAllocations;
01342    ULONG PeakNonPagedPoolAllocations;
01343    SIZE_T PagedPoolUsageInBytes;
01344    SIZE_T NonPagedPoolUsageInBytes;
01345    SIZE_T PeakPagedPoolUsageInBytes;
01346    SIZE_T PeakNonPagedPoolUsageInBytes;
01347 } SYSTEM_VERIFIER_INFORMATION, *PSYSTEM_VERIFIER_INFORMATION;
01348 
01349 // FIXME: Class 52
01350 
01351 // Class 53
01352 typedef struct _SYSTEM_SESSION_PROCESS_INFORMATION
01353 {
01354     ULONG SessionId;
01355     ULONG SizeOfBuf;
01356     PVOID Buffer; // Same format as in SystemProcessInformation
01357 } SYSTEM_SESSION_PROCESS_INFORMATION, *PSYSTEM_SESSION_PROCESS_INFORMATION;
01358 
01359 // FIXME: Class 54-97
01360 
01361 //
01362 // Hotpatch flags
01363 //
01364 #define RTL_HOTPATCH_SUPPORTED_FLAG         0x01
01365 #define RTL_HOTPATCH_SWAP_OBJECT_NAMES      0x08 << 24
01366 #define RTL_HOTPATCH_SYNC_RENAME_FILES      0x10 << 24
01367 #define RTL_HOTPATCH_PATCH_USER_MODE        0x20 << 24
01368 #define RTL_HOTPATCH_REMAP_SYSTEM_DLL       0x40 << 24
01369 #define RTL_HOTPATCH_PATCH_KERNEL_MODE      0x80 << 24
01370 
01371 
01372 // Class 69
01373 typedef struct _SYSTEM_HOTPATCH_CODE_INFORMATION
01374 {
01375     ULONG Flags;
01376     ULONG InfoSize;
01377     union
01378     {
01379         struct
01380         {
01381             ULONG Foo;
01382         } CodeInfo;
01383         struct
01384         {
01385             USHORT NameOffset;
01386             USHORT NameLength;
01387         } KernelInfo;
01388         struct
01389         {
01390             USHORT NameOffset;
01391             USHORT NameLength;
01392             USHORT TargetNameOffset;
01393             USHORT TargetNameLength;
01394             UCHAR PatchingFinished;
01395         } UserModeInfo;
01396         struct
01397         {
01398             USHORT NameOffset;
01399             USHORT NameLength;
01400             USHORT TargetNameOffset;
01401             USHORT TargetNameLength;
01402             UCHAR PatchingFinished;
01403             NTSTATUS ReturnCode;
01404             HANDLE TargetProcess;
01405         } InjectionInfo;
01406         struct
01407         {
01408             HANDLE FileHandle1;
01409             PIO_STATUS_BLOCK IoStatusBlock1;
01410             PVOID RenameInformation1;
01411             PVOID RenameInformationLength1;
01412             HANDLE FileHandle2;
01413             PIO_STATUS_BLOCK IoStatusBlock2;
01414             PVOID RenameInformation2;
01415             PVOID RenameInformationLength2;
01416         } RenameInfo;
01417         struct
01418         {
01419             HANDLE ParentDirectory;
01420             HANDLE ObjectHandle1;
01421             HANDLE ObjectHandle2;
01422         } AtomicSwap;
01423     };
01424 } SYSTEM_HOTPATCH_CODE_INFORMATION, *PSYSTEM_HOTPATCH_CODE_INFORMATION;
01425 
01426 //
01427 // Class 75
01428 //
01429 #ifdef NTOS_MODE_USER
01430 typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER
01431 {
01432     ULONG ProviderSignature;
01433     BOOLEAN Register;
01434     PFNFTH FirmwareTableHandler;
01435     PVOID DriverObject;
01436 } SYSTEM_FIRMWARE_TABLE_HANDLER, *PSYSTEM_FIRMWARE_TABLE_HANDLER;
01437 
01438 //
01439 // Class 76
01440 //
01441 typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION
01442 {
01443     ULONG ProviderSignature;
01444     SYSTEM_FIRMWARE_TABLE_ACTION Action;
01445     ULONG TableID;
01446     ULONG TableBufferLength;
01447     UCHAR TableBuffer[1];
01448 } SYSTEM_FIRMWARE_TABLE_INFORMATION, *PSYSTEM_FIRMWARE_TABLE_INFORMATION;
01449 
01450 //
01451 // Class 81
01452 //
01453 typedef struct _SYSTEM_MEMORY_LIST_INFORMATION
01454 {
01455    SIZE_T ZeroPageCount;
01456    SIZE_T FreePageCount;
01457    SIZE_T ModifiedPageCount;
01458    SIZE_T ModifiedNoWritePageCount;
01459    SIZE_T BadPageCount;
01460    SIZE_T PageCountByPriority[8];
01461    SIZE_T RepurposedPagesByPriority[8];
01462    SIZE_T ModifiedPageCountPageFile;
01463 } SYSTEM_MEMORY_LIST_INFORMATION, *PSYSTEM_MEMORY_LIST_INFORMATION;
01464 
01465 #endif
01466 #endif

Generated on Sun May 27 2012 04:30:50 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.