1 /*++ NDK Version: 0098 2 3 Copyright (c) Alex Ionescu. All rights reserved. 4 5 Header Name: 6 7 extypes.h 8 9 Abstract: 10 11 Type definitions for the Executive. 12 13 Author: 14 15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 17 --*/ 18 19 #ifndef _EXTYPES_H 20 #define _EXTYPES_H 21 22 // 23 // Dependencies 24 // 25 #include <umtypes.h> 26 #include <cfg.h> 27 #if !defined(NTOS_MODE_USER) 28 #include <ntimage.h> 29 #endif 30 #include <cmtypes.h> 31 #include <ketypes.h> 32 #include <potypes.h> 33 #include <lpctypes.h> 34 #ifdef NTOS_MODE_USER 35 #include <obtypes.h> 36 #endif 37 38 #ifdef __cplusplus 39 extern "C" { 40 #endif 41 42 // 43 // GCC compatibility 44 // 45 #if defined(__GNUC__) 46 #define __ALIGNED(n) __attribute__((aligned (n))) 47 #elif defined(_MSC_VER) 48 #define __ALIGNED(n) __declspec(align(n)) 49 #else 50 #error __ALIGNED not defined for your compiler! 51 #endif 52 53 // 54 // Rtl Atom 55 // 56 typedef USHORT RTL_ATOM, *PRTL_ATOM; 57 58 #ifndef NTOS_MODE_USER 59 60 // 61 // Kernel Exported Object Types 62 // 63 extern POBJECT_TYPE NTSYSAPI ExDesktopObjectType; 64 extern POBJECT_TYPE NTSYSAPI ExWindowStationObjectType; 65 extern POBJECT_TYPE NTSYSAPI ExIoCompletionType; 66 extern POBJECT_TYPE NTSYSAPI ExMutantObjectType; 67 extern POBJECT_TYPE NTSYSAPI ExTimerType; 68 69 // 70 // Exported NT Build Number 71 // 72 extern ULONG NTSYSAPI NtBuildNumber; 73 74 // 75 // Invalid Handle Value Constant 76 // 77 #define INVALID_HANDLE_VALUE (HANDLE)-1 78 79 #endif 80 81 // 82 // Increments 83 // 84 #define MUTANT_INCREMENT 1 85 86 // 87 // Callback Object Access Mask 88 // 89 #define CALLBACK_MODIFY_STATE 0x0001 90 #define CALLBACK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \ 91 SYNCHRONIZE | \ 92 CALLBACK_MODIFY_STATE) 93 94 // 95 // Event Object Access Masks 96 // 97 #ifdef NTOS_MODE_USER 98 #define EVENT_QUERY_STATE 0x0001 99 100 // 101 // Semaphore Object Access Masks 102 // 103 #define SEMAPHORE_QUERY_STATE 0x0001 104 #else 105 106 // 107 // Mutant Object Access Masks 108 // 109 #define MUTANT_QUERY_STATE 0x0001 110 #define MUTANT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \ 111 SYNCHRONIZE | \ 112 MUTANT_QUERY_STATE) 113 114 #define TIMER_QUERY_STATE 0x0001 115 #define TIMER_MODIFY_STATE 0x0002 116 #define TIMER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \ 117 SYNCHRONIZE | \ 118 TIMER_QUERY_STATE | \ 119 TIMER_MODIFY_STATE) 120 #endif 121 122 // 123 // Event Pair Access Masks 124 // 125 #define EVENT_PAIR_ALL_ACCESS 0x1F0000L 126 127 // 128 // Profile Object Access Masks 129 // 130 #define PROFILE_CONTROL 0x0001 131 #define PROFILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | PROFILE_CONTROL) 132 133 // 134 // Keyed Event Object Access Masks 135 // 136 #define KEYEDEVENT_WAIT 0x0001 137 #define KEYEDEVENT_WAKE 0x0002 138 #define KEYEDEVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \ 139 KEYEDEVENT_WAIT | \ 140 KEYEDEVENT_WAKE) 141 142 // 143 // NtRaiseHardError-related parameters 144 // 145 #define MAXIMUM_HARDERROR_PARAMETERS 4 146 #define HARDERROR_OVERRIDE_ERRORMODE 0x10000000 147 148 // 149 // Pushlock bits 150 // 151 #define EX_PUSH_LOCK_LOCK_V ((ULONG_PTR)0x0) 152 #define EX_PUSH_LOCK_LOCK ((ULONG_PTR)0x1) 153 #define EX_PUSH_LOCK_WAITING ((ULONG_PTR)0x2) 154 #define EX_PUSH_LOCK_WAKING ((ULONG_PTR)0x4) 155 #define EX_PUSH_LOCK_MULTIPLE_SHARED ((ULONG_PTR)0x8) 156 #define EX_PUSH_LOCK_SHARE_INC ((ULONG_PTR)0x10) 157 #define EX_PUSH_LOCK_PTR_BITS ((ULONG_PTR)0xf) 158 159 // 160 // Pushlock Wait Block Flags 161 // 162 #define EX_PUSH_LOCK_FLAGS_EXCLUSIVE 1 163 #define EX_PUSH_LOCK_FLAGS_WAIT_V 1 164 #define EX_PUSH_LOCK_FLAGS_WAIT 2 165 166 // 167 // Resource (ERESOURCE) Flags 168 // 169 #define ResourceHasDisabledPriorityBoost 0x08 170 171 // 172 // Shutdown types for NtShutdownSystem 173 // 174 typedef enum _SHUTDOWN_ACTION 175 { 176 ShutdownNoReboot, 177 ShutdownReboot, 178 ShutdownPowerOff 179 } SHUTDOWN_ACTION; 180 181 // 182 // Responses for NtRaiseHardError 183 // 184 typedef enum _HARDERROR_RESPONSE_OPTION 185 { 186 OptionAbortRetryIgnore, 187 OptionOk, 188 OptionOkCancel, 189 OptionRetryCancel, 190 OptionYesNo, 191 OptionYesNoCancel, 192 OptionShutdownSystem, 193 OptionOkNoWait, 194 OptionCancelTryContinue 195 } HARDERROR_RESPONSE_OPTION, *PHARDERROR_RESPONSE_OPTION; 196 197 typedef enum _HARDERROR_RESPONSE 198 { 199 ResponseReturnToCaller, 200 ResponseNotHandled, 201 ResponseAbort, 202 ResponseCancel, 203 ResponseIgnore, 204 ResponseNo, 205 ResponseOk, 206 ResponseRetry, 207 ResponseYes, 208 ResponseTryAgain, 209 ResponseContinue 210 } HARDERROR_RESPONSE, *PHARDERROR_RESPONSE; 211 212 // 213 // System Information Classes for NtQuerySystemInformation 214 // 215 typedef enum _SYSTEM_INFORMATION_CLASS 216 { 217 SystemBasicInformation, 218 SystemProcessorInformation, 219 SystemPerformanceInformation, 220 SystemTimeOfDayInformation, 221 SystemPathInformation, /// Obsolete: Use KUSER_SHARED_DATA 222 SystemProcessInformation, 223 SystemCallCountInformation, 224 SystemDeviceInformation, 225 SystemProcessorPerformanceInformation, 226 SystemFlagsInformation, 227 SystemCallTimeInformation, 228 SystemModuleInformation, 229 SystemLocksInformation, 230 SystemStackTraceInformation, 231 SystemPagedPoolInformation, 232 SystemNonPagedPoolInformation, 233 SystemHandleInformation, 234 SystemObjectInformation, 235 SystemPageFileInformation, 236 SystemVdmInstemulInformation, 237 SystemVdmBopInformation, 238 SystemFileCacheInformation, 239 SystemPoolTagInformation, 240 SystemInterruptInformation, 241 SystemDpcBehaviorInformation, 242 SystemFullMemoryInformation, 243 SystemLoadGdiDriverInformation, 244 SystemUnloadGdiDriverInformation, 245 SystemTimeAdjustmentInformation, 246 SystemSummaryMemoryInformation, 247 SystemMirrorMemoryInformation, 248 SystemPerformanceTraceInformation, 249 SystemObsolete0, 250 SystemExceptionInformation, 251 SystemCrashDumpStateInformation, 252 SystemKernelDebuggerInformation, 253 SystemContextSwitchInformation, 254 SystemRegistryQuotaInformation, 255 SystemExtendServiceTableInformation, 256 SystemPrioritySeperation, 257 SystemPlugPlayBusInformation, 258 SystemDockInformation, 259 SystemPowerInformationNative, 260 SystemProcessorSpeedInformation, 261 SystemCurrentTimeZoneInformation, 262 SystemLookasideInformation, 263 SystemTimeSlipNotification, 264 SystemSessionCreate, 265 SystemSessionDetach, 266 SystemSessionInformation, 267 SystemRangeStartInformation, 268 SystemVerifierInformation, 269 SystemAddVerifier, 270 SystemSessionProcessesInformation, 271 SystemLoadGdiDriverInSystemSpaceInformation, 272 SystemNumaProcessorMap, 273 SystemPrefetcherInformation, 274 SystemExtendedProcessInformation, 275 SystemRecommendedSharedDataAlignment, 276 SystemComPlusPackage, 277 SystemNumaAvailableMemory, 278 SystemProcessorPowerInformation, 279 SystemEmulationBasicInformation, 280 SystemEmulationProcessorInformation, 281 SystemExtendedHandleInformation, 282 SystemLostDelayedWriteInformation, 283 SystemBigPoolInformation, 284 SystemSessionPoolTagInformation, 285 SystemSessionMappedViewInformation, 286 SystemHotpatchInformation, 287 SystemObjectSecurityMode, 288 SystemWatchDogTimerHandler, 289 SystemWatchDogTimerInformation, 290 SystemLogicalProcessorInformation, 291 SystemWow64SharedInformationObsolete, 292 SystemRegisterFirmwareTableInformationHandler, 293 SystemFirmwareTableInformation, 294 SystemModuleInformationEx, 295 SystemVerifierTriageInformation, 296 SystemSuperfetchInformation, 297 SystemMemoryListInformation, 298 SystemFileCacheInformationEx, 299 SystemThreadPriorityClientIdInformation, 300 SystemProcessorIdleCycleTimeInformation, 301 SystemVerifierCancellationInformation, 302 SystemProcessorPowerInformationEx, 303 SystemRefTraceInformation, 304 SystemSpecialPoolInformation, 305 SystemProcessIdInformation, 306 SystemErrorPortInformation, 307 SystemBootEnvironmentInformation, 308 SystemHypervisorInformation, 309 SystemVerifierInformationEx, 310 SystemTimeZoneInformation, 311 SystemImageFileExecutionOptionsInformation, 312 SystemCoverageInformation, 313 SystemPrefetchPathInformation, 314 SystemVerifierFaultsInformation, 315 MaxSystemInfoClass, 316 } SYSTEM_INFORMATION_CLASS; 317 318 // 319 // System Information Classes for NtQueryMutant 320 // 321 typedef enum _MUTANT_INFORMATION_CLASS 322 { 323 MutantBasicInformation, 324 MutantOwnerInformation 325 } MUTANT_INFORMATION_CLASS; 326 327 // 328 // System Information Classes for NtQueryAtom 329 // 330 typedef enum _ATOM_INFORMATION_CLASS 331 { 332 AtomBasicInformation, 333 AtomTableInformation, 334 } ATOM_INFORMATION_CLASS; 335 336 // 337 // System Information Classes for NtQueryTimer 338 // 339 typedef enum _TIMER_INFORMATION_CLASS 340 { 341 TimerBasicInformation 342 } TIMER_INFORMATION_CLASS; 343 344 // 345 // System Information Classes for NtQuerySemaphore 346 // 347 typedef enum _SEMAPHORE_INFORMATION_CLASS 348 { 349 SemaphoreBasicInformation 350 } SEMAPHORE_INFORMATION_CLASS; 351 352 // 353 // System Information Classes for NtQueryEvent 354 // 355 typedef enum _EVENT_INFORMATION_CLASS 356 { 357 EventBasicInformation 358 } EVENT_INFORMATION_CLASS; 359 360 #ifdef NTOS_MODE_USER 361 362 // 363 // Firmware Table Actions for SystemFirmwareTableInformation 364 // 365 typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION 366 { 367 SystemFirmwareTable_Enumerate = 0, 368 SystemFirmwareTable_Get = 1, 369 } SYSTEM_FIRMWARE_TABLE_ACTION, *PSYSTEM_FIRMWARE_TABLE_ACTION; 370 371 // 372 // Firmware Handler Callback 373 // 374 struct _SYSTEM_FIRMWARE_TABLE_INFORMATION; 375 typedef 376 NTSTATUS 377 (__cdecl *PFNFTH)( 378 _In_ struct _SYSTEM_FIRMWARE_TABLE_INFORMATION *FirmwareTableInformation 379 ); 380 381 #else 382 383 // 384 // Handle Enumeration Callback 385 // 386 struct _HANDLE_TABLE_ENTRY; 387 typedef BOOLEAN 388 (NTAPI *PEX_ENUM_HANDLE_CALLBACK)( 389 _In_ struct _HANDLE_TABLE_ENTRY *HandleTableEntry, 390 _In_ HANDLE Handle, 391 _In_ PVOID Context 392 ); 393 394 // 395 // Executive Work Queue Structures 396 // 397 typedef struct _EX_QUEUE_WORKER_INFO 398 { 399 ULONG QueueDisabled:1; 400 ULONG MakeThreadsAsNecessary:1; 401 ULONG WaitMode:1; 402 ULONG WorkerCount:29; 403 } EX_QUEUE_WORKER_INFO, *PEX_QUEUE_WORKER_INFO; 404 405 typedef struct _EX_WORK_QUEUE 406 { 407 KQUEUE WorkerQueue; 408 LONG DynamicThreadCount; 409 ULONG WorkItemsProcessed; 410 ULONG WorkItemsProcessedLastPass; 411 ULONG QueueDepthLastPass; 412 EX_QUEUE_WORKER_INFO Info; 413 } EX_WORK_QUEUE, *PEX_WORK_QUEUE; 414 415 // 416 // Executive Fast Reference Structure 417 // 418 typedef struct _EX_FAST_REF 419 { 420 union 421 { 422 PVOID Object; 423 ULONG_PTR RefCnt:3; 424 ULONG_PTR Value; 425 }; 426 } EX_FAST_REF, *PEX_FAST_REF; 427 428 // 429 // Executive Cache-Aware Rundown Reference Descriptor 430 // 431 typedef struct _EX_RUNDOWN_REF_CACHE_AWARE 432 { 433 PEX_RUNDOWN_REF RunRefs; 434 PVOID PoolToFree; 435 ULONG RunRefSize; 436 ULONG Number; 437 } EX_RUNDOWN_REF_CACHE_AWARE; 438 439 // 440 // Executive Rundown Wait Block 441 // 442 typedef struct _EX_RUNDOWN_WAIT_BLOCK 443 { 444 ULONG_PTR Count; 445 KEVENT WakeEvent; 446 } EX_RUNDOWN_WAIT_BLOCK, *PEX_RUNDOWN_WAIT_BLOCK; 447 448 // 449 // Executive Pushlock 450 // 451 #undef EX_PUSH_LOCK 452 #undef PEX_PUSH_LOCK 453 typedef struct _EX_PUSH_LOCK 454 { 455 union 456 { 457 struct 458 { 459 ULONG_PTR Locked:1; 460 ULONG_PTR Waiting:1; 461 ULONG_PTR Waking:1; 462 ULONG_PTR MultipleShared:1; 463 ULONG_PTR Shared:sizeof (ULONG_PTR) * 8 - 4; 464 }; 465 ULONG_PTR Value; 466 PVOID Ptr; 467 }; 468 } EX_PUSH_LOCK, *PEX_PUSH_LOCK; 469 470 // 471 // Executive Pushlock Wait Block 472 // 473 474 // 475 // The wait block has to be properly aligned 476 // on a non-checked build even if the debug data isn't there. 477 // 478 #if defined(_MSC_VER) 479 #pragma warning(push) 480 #pragma warning(disable:4324) 481 #endif 482 483 typedef __ALIGNED(16) struct _EX_PUSH_LOCK_WAIT_BLOCK 484 { 485 union 486 { 487 KGATE WakeGate; 488 KEVENT WakeEvent; 489 }; 490 struct _EX_PUSH_LOCK_WAIT_BLOCK *Next; 491 struct _EX_PUSH_LOCK_WAIT_BLOCK *Last; 492 struct _EX_PUSH_LOCK_WAIT_BLOCK *Previous; 493 LONG ShareCount; 494 LONG Flags; 495 #if DBG 496 BOOLEAN Signaled; 497 EX_PUSH_LOCK NewValue; 498 EX_PUSH_LOCK OldValue; 499 PEX_PUSH_LOCK PushLock; 500 #endif 501 } EX_PUSH_LOCK_WAIT_BLOCK, *PEX_PUSH_LOCK_WAIT_BLOCK; 502 503 #if defined(_MSC_VER) 504 #pragma warning(pop) 505 #endif 506 507 // 508 // Callback Object 509 // 510 typedef struct _CALLBACK_OBJECT 511 { 512 ULONG Signature; 513 KSPIN_LOCK Lock; 514 LIST_ENTRY RegisteredCallbacks; 515 BOOLEAN AllowMultipleCallbacks; 516 UCHAR reserved[3]; 517 } CALLBACK_OBJECT; 518 519 // 520 // Callback Handle 521 // 522 typedef struct _CALLBACK_REGISTRATION 523 { 524 LIST_ENTRY Link; 525 PCALLBACK_OBJECT CallbackObject; 526 PCALLBACK_FUNCTION CallbackFunction; 527 PVOID CallbackContext; 528 ULONG Busy; 529 BOOLEAN UnregisterWaiting; 530 } CALLBACK_REGISTRATION, *PCALLBACK_REGISTRATION; 531 532 // 533 // Internal Callback Object 534 // 535 typedef struct _EX_CALLBACK_ROUTINE_BLOCK 536 { 537 EX_RUNDOWN_REF RundownProtect; 538 PEX_CALLBACK_FUNCTION Function; 539 PVOID Context; 540 } EX_CALLBACK_ROUTINE_BLOCK, *PEX_CALLBACK_ROUTINE_BLOCK; 541 542 // 543 // Internal Callback Handle 544 // 545 typedef struct _EX_CALLBACK 546 { 547 EX_FAST_REF RoutineBlock; 548 } EX_CALLBACK, *PEX_CALLBACK; 549 550 // 551 // Profile Object 552 // 553 typedef struct _EPROFILE 554 { 555 PEPROCESS Process; 556 PVOID RangeBase; 557 SIZE_T RangeSize; 558 PVOID Buffer; 559 ULONG BufferSize; 560 ULONG BucketSize; 561 PKPROFILE ProfileObject; 562 PVOID LockedBufferAddress; 563 PMDL Mdl; 564 ULONG_PTR Segment; 565 KPROFILE_SOURCE ProfileSource; 566 KAFFINITY Affinity; 567 } EPROFILE, *PEPROFILE; 568 569 // 570 // Handle Table Structures 571 // 572 typedef struct _HANDLE_TRACE_DB_ENTRY 573 { 574 CLIENT_ID ClientId; 575 HANDLE Handle; 576 ULONG Type; 577 PVOID StackTrace[16]; 578 } HANDLE_TRACE_DB_ENTRY, *PHANDLE_TRACE_DB_ENTRY; 579 580 typedef struct _HANDLE_TRACE_DEBUG_INFO 581 { 582 LONG RefCount; 583 ULONG TableSize; 584 ULONG BitMaskFlags; 585 FAST_MUTEX CloseCompatcionLock; 586 ULONG CurrentStackIndex; 587 HANDLE_TRACE_DB_ENTRY TraceDb[1]; 588 } HANDLE_TRACE_DEBUG_INFO, *PHANDLE_TRACE_DEBUG_INFO; 589 590 typedef struct _HANDLE_TABLE_ENTRY_INFO 591 { 592 ULONG AuditMask; 593 } HANDLE_TABLE_ENTRY_INFO, *PHANDLE_TABLE_ENTRY_INFO; 594 595 typedef struct _HANDLE_TABLE_ENTRY 596 { 597 union 598 { 599 PVOID Object; 600 ULONG_PTR ObAttributes; 601 PHANDLE_TABLE_ENTRY_INFO InfoTable; 602 ULONG_PTR Value; 603 }; 604 union 605 { 606 ULONG GrantedAccess; 607 struct 608 { 609 USHORT GrantedAccessIndex; 610 USHORT CreatorBackTraceIndex; 611 }; 612 LONG NextFreeTableEntry; 613 }; 614 } HANDLE_TABLE_ENTRY, *PHANDLE_TABLE_ENTRY; 615 616 typedef struct _HANDLE_TABLE 617 { 618 #if (NTDDI_VERSION >= NTDDI_WINXP) 619 ULONG_PTR TableCode; 620 #else 621 PHANDLE_TABLE_ENTRY **Table; 622 #endif 623 PEPROCESS QuotaProcess; 624 PVOID UniqueProcessId; 625 #if (NTDDI_VERSION >= NTDDI_WINXP) 626 EX_PUSH_LOCK HandleTableLock[4]; 627 LIST_ENTRY HandleTableList; 628 EX_PUSH_LOCK HandleContentionEvent; 629 #else 630 ERESOURCE HandleLock; 631 LIST_ENTRY HandleTableList; 632 KEVENT HandleContentionEvent; 633 #endif 634 PHANDLE_TRACE_DEBUG_INFO DebugInfo; 635 LONG ExtraInfoPages; 636 #if (NTDDI_VERSION >= NTDDI_LONGHORN) 637 union 638 { 639 ULONG Flags; 640 UCHAR StrictFIFO:1; 641 }; 642 LONG FirstFreeHandle; 643 PHANDLE_TABLE_ENTRY LastFreeHandleEntry; 644 LONG HandleCount; 645 ULONG NextHandleNeedingPool; 646 #else 647 ULONG FirstFree; 648 ULONG LastFree; 649 ULONG NextHandleNeedingPool; 650 LONG HandleCount; 651 union 652 { 653 ULONG Flags; 654 UCHAR StrictFIFO:1; 655 }; 656 #endif 657 } HANDLE_TABLE, *PHANDLE_TABLE; 658 659 #endif 660 661 // 662 // Hard Error LPC Message 663 // 664 typedef struct _HARDERROR_MSG 665 { 666 PORT_MESSAGE h; 667 NTSTATUS Status; 668 LARGE_INTEGER ErrorTime; 669 ULONG ValidResponseOptions; 670 ULONG Response; 671 ULONG NumberOfParameters; 672 ULONG UnicodeStringParameterMask; 673 ULONG_PTR Parameters[MAXIMUM_HARDERROR_PARAMETERS]; 674 } HARDERROR_MSG, *PHARDERROR_MSG; 675 676 // 677 // Information Structures for NtQueryMutant 678 // 679 typedef struct _MUTANT_BASIC_INFORMATION 680 { 681 LONG CurrentCount; 682 BOOLEAN OwnedByCaller; 683 BOOLEAN AbandonedState; 684 } MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION; 685 686 typedef struct _MUTANT_OWNER_INFORMATION 687 { 688 CLIENT_ID ClientId; 689 } MUTANT_OWNER_INFORMATION, *PMUTANT_OWNER_INFORMATION; 690 691 // 692 // Information Structures for NtQueryAtom 693 // 694 typedef struct _ATOM_BASIC_INFORMATION 695 { 696 USHORT UsageCount; 697 USHORT Flags; 698 USHORT NameLength; 699 WCHAR Name[1]; 700 } ATOM_BASIC_INFORMATION, *PATOM_BASIC_INFORMATION; 701 702 typedef struct _ATOM_TABLE_INFORMATION 703 { 704 ULONG NumberOfAtoms; 705 USHORT Atoms[1]; 706 } ATOM_TABLE_INFORMATION, *PATOM_TABLE_INFORMATION; 707 708 // 709 // Information Structures for NtQueryTimer 710 // 711 typedef struct _TIMER_BASIC_INFORMATION 712 { 713 LARGE_INTEGER TimeRemaining; 714 BOOLEAN SignalState; 715 } TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION; 716 717 // 718 // Information Structures for NtQuerySemaphore 719 // 720 typedef struct _SEMAPHORE_BASIC_INFORMATION 721 { 722 LONG CurrentCount; 723 LONG MaximumCount; 724 } SEMAPHORE_BASIC_INFORMATION, *PSEMAPHORE_BASIC_INFORMATION; 725 726 // 727 // Information Structures for NtQueryEvent 728 // 729 typedef struct _EVENT_BASIC_INFORMATION 730 { 731 EVENT_TYPE EventType; 732 LONG EventState; 733 } EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION; 734 735 // 736 // Information Structures for NtQuerySystemInformation 737 // 738 typedef struct _SYSTEM_BASIC_INFORMATION 739 { 740 ULONG Reserved; 741 ULONG TimerResolution; 742 ULONG PageSize; 743 ULONG NumberOfPhysicalPages; 744 ULONG LowestPhysicalPageNumber; 745 ULONG HighestPhysicalPageNumber; 746 ULONG AllocationGranularity; 747 ULONG_PTR MinimumUserModeAddress; 748 ULONG_PTR MaximumUserModeAddress; 749 ULONG_PTR ActiveProcessorsAffinityMask; 750 CCHAR NumberOfProcessors; 751 } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION; 752 753 // Class 1 754 typedef struct _SYSTEM_PROCESSOR_INFORMATION 755 { 756 USHORT ProcessorArchitecture; 757 USHORT ProcessorLevel; 758 USHORT ProcessorRevision; 759 USHORT Reserved; 760 ULONG ProcessorFeatureBits; 761 } SYSTEM_PROCESSOR_INFORMATION, *PSYSTEM_PROCESSOR_INFORMATION; 762 763 // Class 2 764 typedef struct _SYSTEM_PERFORMANCE_INFORMATION 765 { 766 LARGE_INTEGER IdleProcessTime; 767 LARGE_INTEGER IoReadTransferCount; 768 LARGE_INTEGER IoWriteTransferCount; 769 LARGE_INTEGER IoOtherTransferCount; 770 ULONG IoReadOperationCount; 771 ULONG IoWriteOperationCount; 772 ULONG IoOtherOperationCount; 773 ULONG AvailablePages; 774 ULONG CommittedPages; 775 ULONG CommitLimit; 776 ULONG PeakCommitment; 777 ULONG PageFaultCount; 778 ULONG CopyOnWriteCount; 779 ULONG TransitionCount; 780 ULONG CacheTransitionCount; 781 ULONG DemandZeroCount; 782 ULONG PageReadCount; 783 ULONG PageReadIoCount; 784 ULONG CacheReadCount; 785 ULONG CacheIoCount; 786 ULONG DirtyPagesWriteCount; 787 ULONG DirtyWriteIoCount; 788 ULONG MappedPagesWriteCount; 789 ULONG MappedWriteIoCount; 790 ULONG PagedPoolPages; 791 ULONG NonPagedPoolPages; 792 ULONG PagedPoolAllocs; 793 ULONG PagedPoolFrees; 794 ULONG NonPagedPoolAllocs; 795 ULONG NonPagedPoolFrees; 796 ULONG FreeSystemPtes; 797 ULONG ResidentSystemCodePage; 798 ULONG TotalSystemDriverPages; 799 ULONG TotalSystemCodePages; 800 ULONG NonPagedPoolLookasideHits; 801 ULONG PagedPoolLookasideHits; 802 ULONG Spare3Count; 803 ULONG ResidentSystemCachePage; 804 ULONG ResidentPagedPoolPage; 805 ULONG ResidentSystemDriverPage; 806 ULONG CcFastReadNoWait; 807 ULONG CcFastReadWait; 808 ULONG CcFastReadResourceMiss; 809 ULONG CcFastReadNotPossible; 810 ULONG CcFastMdlReadNoWait; 811 ULONG CcFastMdlReadWait; 812 ULONG CcFastMdlReadResourceMiss; 813 ULONG CcFastMdlReadNotPossible; 814 ULONG CcMapDataNoWait; 815 ULONG CcMapDataWait; 816 ULONG CcMapDataNoWaitMiss; 817 ULONG CcMapDataWaitMiss; 818 ULONG CcPinMappedDataCount; 819 ULONG CcPinReadNoWait; 820 ULONG CcPinReadWait; 821 ULONG CcPinReadNoWaitMiss; 822 ULONG CcPinReadWaitMiss; 823 ULONG CcCopyReadNoWait; 824 ULONG CcCopyReadWait; 825 ULONG CcCopyReadNoWaitMiss; 826 ULONG CcCopyReadWaitMiss; 827 ULONG CcMdlReadNoWait; 828 ULONG CcMdlReadWait; 829 ULONG CcMdlReadNoWaitMiss; 830 ULONG CcMdlReadWaitMiss; 831 ULONG CcReadAheadIos; 832 ULONG CcLazyWriteIos; 833 ULONG CcLazyWritePages; 834 ULONG CcDataFlushes; 835 ULONG CcDataPages; 836 ULONG ContextSwitches; 837 ULONG FirstLevelTbFills; 838 ULONG SecondLevelTbFills; 839 ULONG SystemCalls; 840 } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION; 841 842 // Class 3 843 typedef struct _SYSTEM_TIMEOFDAY_INFORMATION 844 { 845 LARGE_INTEGER BootTime; 846 LARGE_INTEGER CurrentTime; 847 LARGE_INTEGER TimeZoneBias; 848 ULONG TimeZoneId; 849 ULONG Reserved; 850 #if (NTDDI_VERSION >= NTDDI_WIN2K) 851 ULONGLONG BootTimeBias; 852 ULONGLONG SleepTimeBias; 853 #endif 854 } SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION; 855 856 // Class 4 857 // This class is obsolete, please use KUSER_SHARED_DATA instead 858 859 // Class 5 860 typedef struct _SYSTEM_THREAD_INFORMATION 861 { 862 LARGE_INTEGER KernelTime; 863 LARGE_INTEGER UserTime; 864 LARGE_INTEGER CreateTime; 865 ULONG WaitTime; 866 PVOID StartAddress; 867 CLIENT_ID ClientId; 868 KPRIORITY Priority; 869 LONG BasePriority; 870 ULONG ContextSwitches; 871 ULONG ThreadState; 872 ULONG WaitReason; 873 ULONG PadPadAlignment; 874 } SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION; 875 #ifndef _WIN64 876 C_ASSERT(sizeof(SYSTEM_THREAD_INFORMATION) == 0x40); // Must be 8-byte aligned 877 #endif 878 879 typedef struct _SYSTEM_PROCESS_INFORMATION 880 { 881 ULONG NextEntryOffset; 882 ULONG NumberOfThreads; 883 LARGE_INTEGER WorkingSetPrivateSize; //VISTA 884 ULONG HardFaultCount; //WIN7 885 ULONG NumberOfThreadsHighWatermark; //WIN7 886 ULONGLONG CycleTime; //WIN7 887 LARGE_INTEGER CreateTime; 888 LARGE_INTEGER UserTime; 889 LARGE_INTEGER KernelTime; 890 UNICODE_STRING ImageName; 891 KPRIORITY BasePriority; 892 HANDLE UniqueProcessId; 893 HANDLE InheritedFromUniqueProcessId; 894 ULONG HandleCount; 895 ULONG SessionId; 896 ULONG_PTR PageDirectoryBase; 897 898 // 899 // This part corresponds to VM_COUNTERS_EX. 900 // NOTE: *NOT* THE SAME AS VM_COUNTERS! 901 // 902 SIZE_T PeakVirtualSize; 903 SIZE_T VirtualSize; 904 ULONG PageFaultCount; 905 SIZE_T PeakWorkingSetSize; 906 SIZE_T WorkingSetSize; 907 SIZE_T QuotaPeakPagedPoolUsage; 908 SIZE_T QuotaPagedPoolUsage; 909 SIZE_T QuotaPeakNonPagedPoolUsage; 910 SIZE_T QuotaNonPagedPoolUsage; 911 SIZE_T PagefileUsage; 912 SIZE_T PeakPagefileUsage; 913 SIZE_T PrivatePageCount; 914 915 // 916 // This part corresponds to IO_COUNTERS 917 // 918 LARGE_INTEGER ReadOperationCount; 919 LARGE_INTEGER WriteOperationCount; 920 LARGE_INTEGER OtherOperationCount; 921 LARGE_INTEGER ReadTransferCount; 922 LARGE_INTEGER WriteTransferCount; 923 LARGE_INTEGER OtherTransferCount; 924 // SYSTEM_THREAD_INFORMATION TH[1]; 925 } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION; 926 #ifndef _WIN64 927 C_ASSERT(sizeof(SYSTEM_PROCESS_INFORMATION) == 0xB8); // Must be 8-byte aligned 928 #endif 929 930 // 931 // Class 6 932 typedef struct _SYSTEM_CALL_COUNT_INFORMATION 933 { 934 ULONG Length; 935 ULONG NumberOfTables; 936 } SYSTEM_CALL_COUNT_INFORMATION, *PSYSTEM_CALL_COUNT_INFORMATION; 937 938 // Class 7 939 typedef struct _SYSTEM_DEVICE_INFORMATION 940 { 941 ULONG NumberOfDisks; 942 ULONG NumberOfFloppies; 943 ULONG NumberOfCdRoms; 944 ULONG NumberOfTapes; 945 ULONG NumberOfSerialPorts; 946 ULONG NumberOfParallelPorts; 947 } SYSTEM_DEVICE_INFORMATION, *PSYSTEM_DEVICE_INFORMATION; 948 949 // Class 8 950 typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION 951 { 952 LARGE_INTEGER IdleTime; 953 LARGE_INTEGER KernelTime; 954 LARGE_INTEGER UserTime; 955 LARGE_INTEGER DpcTime; 956 LARGE_INTEGER InterruptTime; 957 ULONG InterruptCount; 958 } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION; 959 960 // Class 9 961 typedef struct _SYSTEM_FLAGS_INFORMATION 962 { 963 ULONG Flags; 964 } SYSTEM_FLAGS_INFORMATION, *PSYSTEM_FLAGS_INFORMATION; 965 966 // Class 10 967 typedef struct _SYSTEM_CALL_TIME_INFORMATION 968 { 969 ULONG Length; 970 ULONG TotalCalls; 971 LARGE_INTEGER TimeOfCalls[1]; 972 } SYSTEM_CALL_TIME_INFORMATION, *PSYSTEM_CALL_TIME_INFORMATION; 973 974 // Class 11 - See RTL_PROCESS_MODULES 975 976 // Class 12 - See RTL_PROCESS_LOCKS 977 978 // Class 13 - See RTL_PROCESS_BACKTRACES 979 980 // Class 14 - 15 981 typedef struct _SYSTEM_POOL_ENTRY 982 { 983 BOOLEAN Allocated; 984 BOOLEAN Spare0; 985 USHORT AllocatorBackTraceIndex; 986 ULONG Size; 987 union 988 { 989 UCHAR Tag[4]; 990 ULONG TagUlong; 991 PVOID ProcessChargedQuota; 992 }; 993 } SYSTEM_POOL_ENTRY, *PSYSTEM_POOL_ENTRY; 994 995 typedef struct _SYSTEM_POOL_INFORMATION 996 { 997 SIZE_T TotalSize; 998 PVOID FirstEntry; 999 USHORT EntryOverhead; 1000 BOOLEAN PoolTagPresent; 1001 BOOLEAN Spare0; 1002 ULONG NumberOfEntries; 1003 SYSTEM_POOL_ENTRY Entries[1]; 1004 } SYSTEM_POOL_INFORMATION, *PSYSTEM_POOL_INFORMATION; 1005 1006 // Class 16 1007 typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO 1008 { 1009 USHORT UniqueProcessId; 1010 USHORT CreatorBackTraceIndex; 1011 UCHAR ObjectTypeIndex; 1012 UCHAR HandleAttributes; 1013 USHORT HandleValue; 1014 PVOID Object; 1015 ULONG GrantedAccess; 1016 } SYSTEM_HANDLE_TABLE_ENTRY_INFO, *PSYSTEM_HANDLE_TABLE_ENTRY_INFO; 1017 1018 typedef struct _SYSTEM_HANDLE_INFORMATION 1019 { 1020 ULONG NumberOfHandles; 1021 SYSTEM_HANDLE_TABLE_ENTRY_INFO Handles[1]; 1022 } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION; 1023 1024 // Class 17 1025 typedef struct _SYSTEM_OBJECTTYPE_INFORMATION 1026 { 1027 ULONG NextEntryOffset; 1028 ULONG NumberOfObjects; 1029 ULONG NumberOfHandles; 1030 ULONG TypeIndex; 1031 ULONG InvalidAttributes; 1032 GENERIC_MAPPING GenericMapping; 1033 ULONG ValidAccessMask; 1034 ULONG PoolType; 1035 BOOLEAN SecurityRequired; 1036 BOOLEAN WaitableObject; 1037 UNICODE_STRING TypeName; 1038 } SYSTEM_OBJECTTYPE_INFORMATION, *PSYSTEM_OBJECTTYPE_INFORMATION; 1039 1040 typedef struct _SYSTEM_OBJECT_INFORMATION 1041 { 1042 ULONG NextEntryOffset; 1043 PVOID Object; 1044 HANDLE CreatorUniqueProcess; 1045 USHORT CreatorBackTraceIndex; 1046 USHORT Flags; 1047 LONG PointerCount; 1048 LONG HandleCount; 1049 ULONG PagedPoolCharge; 1050 ULONG NonPagedPoolCharge; 1051 HANDLE ExclusiveProcessId; 1052 PVOID SecurityDescriptor; 1053 OBJECT_NAME_INFORMATION NameInfo; 1054 } SYSTEM_OBJECT_INFORMATION, *PSYSTEM_OBJECT_INFORMATION; 1055 1056 // Class 18 1057 typedef struct _SYSTEM_PAGEFILE_INFORMATION 1058 { 1059 ULONG NextEntryOffset; 1060 ULONG TotalSize; 1061 ULONG TotalInUse; 1062 ULONG PeakUsage; 1063 UNICODE_STRING PageFileName; 1064 } SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION; 1065 1066 // Class 19 1067 typedef struct _SYSTEM_VDM_INSTEMUL_INFO 1068 { 1069 ULONG SegmentNotPresent; 1070 ULONG VdmOpcode0F; 1071 ULONG OpcodeESPrefix; 1072 ULONG OpcodeCSPrefix; 1073 ULONG OpcodeSSPrefix; 1074 ULONG OpcodeDSPrefix; 1075 ULONG OpcodeFSPrefix; 1076 ULONG OpcodeGSPrefix; 1077 ULONG OpcodeOPER32Prefix; 1078 ULONG OpcodeADDR32Prefix; 1079 ULONG OpcodeINSB; 1080 ULONG OpcodeINSW; 1081 ULONG OpcodeOUTSB; 1082 ULONG OpcodeOUTSW; 1083 ULONG OpcodePUSHF; 1084 ULONG OpcodePOPF; 1085 ULONG OpcodeINTnn; 1086 ULONG OpcodeINTO; 1087 ULONG OpcodeIRET; 1088 ULONG OpcodeINBimm; 1089 ULONG OpcodeINWimm; 1090 ULONG OpcodeOUTBimm; 1091 ULONG OpcodeOUTWimm ; 1092 ULONG OpcodeINB; 1093 ULONG OpcodeINW; 1094 ULONG OpcodeOUTB; 1095 ULONG OpcodeOUTW; 1096 ULONG OpcodeLOCKPrefix; 1097 ULONG OpcodeREPNEPrefix; 1098 ULONG OpcodeREPPrefix; 1099 ULONG OpcodeHLT; 1100 ULONG OpcodeCLI; 1101 ULONG OpcodeSTI; 1102 ULONG BopCount; 1103 } SYSTEM_VDM_INSTEMUL_INFO, *PSYSTEM_VDM_INSTEMUL_INFO; 1104 1105 // Class 20 - ULONG VDMBOPINFO 1106 1107 // Class 21 1108 typedef struct _SYSTEM_FILECACHE_INFORMATION 1109 { 1110 SIZE_T CurrentSize; 1111 SIZE_T PeakSize; 1112 ULONG PageFaultCount; 1113 SIZE_T MinimumWorkingSet; 1114 SIZE_T MaximumWorkingSet; 1115 SIZE_T CurrentSizeIncludingTransitionInPages; 1116 SIZE_T PeakSizeIncludingTransitionInPages; 1117 ULONG TransitionRePurposeCount; 1118 ULONG Flags; 1119 } SYSTEM_FILECACHE_INFORMATION, *PSYSTEM_FILECACHE_INFORMATION; 1120 1121 // Class 22 1122 typedef struct _SYSTEM_POOLTAG 1123 { 1124 union 1125 { 1126 UCHAR Tag[4]; 1127 ULONG TagUlong; 1128 }; 1129 ULONG PagedAllocs; 1130 ULONG PagedFrees; 1131 SIZE_T PagedUsed; 1132 ULONG NonPagedAllocs; 1133 ULONG NonPagedFrees; 1134 SIZE_T NonPagedUsed; 1135 } SYSTEM_POOLTAG, *PSYSTEM_POOLTAG; 1136 1137 typedef struct _SYSTEM_POOLTAG_INFORMATION 1138 { 1139 ULONG Count; 1140 SYSTEM_POOLTAG TagInfo[1]; 1141 } SYSTEM_POOLTAG_INFORMATION, *PSYSTEM_POOLTAG_INFORMATION; 1142 1143 // Class 23 1144 typedef struct _SYSTEM_INTERRUPT_INFORMATION 1145 { 1146 ULONG ContextSwitches; 1147 ULONG DpcCount; 1148 ULONG DpcRate; 1149 ULONG TimeIncrement; 1150 ULONG DpcBypassCount; 1151 ULONG ApcBypassCount; 1152 } SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION; 1153 1154 // Class 24 1155 typedef struct _SYSTEM_DPC_BEHAVIOR_INFORMATION 1156 { 1157 ULONG Spare; 1158 ULONG DpcQueueDepth; 1159 ULONG MinimumDpcRate; 1160 ULONG AdjustDpcThreshold; 1161 ULONG IdealDpcRate; 1162 } SYSTEM_DPC_BEHAVIOR_INFORMATION, *PSYSTEM_DPC_BEHAVIOR_INFORMATION; 1163 1164 // Class 25 1165 typedef struct _SYSTEM_MEMORY_INFO 1166 { 1167 PUCHAR StringOffset; 1168 USHORT ValidCount; 1169 USHORT TransitionCount; 1170 USHORT ModifiedCount; 1171 USHORT PageTableCount; 1172 } SYSTEM_MEMORY_INFO, *PSYSTEM_MEMORY_INFO; 1173 1174 typedef struct _SYSTEM_MEMORY_INFORMATION 1175 { 1176 ULONG InfoSize; 1177 ULONG StringStart; 1178 SYSTEM_MEMORY_INFO Memory[1]; 1179 } SYSTEM_MEMORY_INFORMATION, *PSYSTEM_MEMORY_INFORMATION; 1180 1181 // Class 26 1182 typedef struct _SYSTEM_GDI_DRIVER_INFORMATION 1183 { 1184 UNICODE_STRING DriverName; 1185 PVOID ImageAddress; 1186 PVOID SectionPointer; 1187 PVOID EntryPoint; 1188 PIMAGE_EXPORT_DIRECTORY ExportSectionPointer; 1189 ULONG ImageLength; 1190 } SYSTEM_GDI_DRIVER_INFORMATION, *PSYSTEM_GDI_DRIVER_INFORMATION; 1191 1192 // Class 27 1193 // Not an actually class, simply a PVOID to the ImageAddress 1194 1195 // Class 28 1196 typedef struct _SYSTEM_QUERY_TIME_ADJUST_INFORMATION 1197 { 1198 ULONG TimeAdjustment; 1199 ULONG TimeIncrement; 1200 BOOLEAN Enable; 1201 } SYSTEM_QUERY_TIME_ADJUST_INFORMATION, *PSYSTEM_QUERY_TIME_ADJUST_INFORMATION; 1202 1203 typedef struct _SYSTEM_SET_TIME_ADJUST_INFORMATION 1204 { 1205 ULONG TimeAdjustment; 1206 BOOLEAN Enable; 1207 } SYSTEM_SET_TIME_ADJUST_INFORMATION, *PSYSTEM_SET_TIME_ADJUST_INFORMATION; 1208 1209 // Class 29 - Same as 25 1210 1211 // FIXME: Class 30 1212 1213 // Class 31 1214 typedef struct _SYSTEM_REF_TRACE_INFORMATION 1215 { 1216 UCHAR TraceEnable; 1217 UCHAR TracePermanent; 1218 UNICODE_STRING TraceProcessName; 1219 UNICODE_STRING TracePoolTags; 1220 } SYSTEM_REF_TRACE_INFORMATION, *PSYSTEM_REF_TRACE_INFORMATION; 1221 1222 // Class 32 - OBSOLETE 1223 1224 // Class 33 1225 typedef struct _SYSTEM_EXCEPTION_INFORMATION 1226 { 1227 ULONG AlignmentFixupCount; 1228 ULONG ExceptionDispatchCount; 1229 ULONG FloatingEmulationCount; 1230 ULONG ByteWordEmulationCount; 1231 } SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION; 1232 1233 // Class 34 1234 typedef struct _SYSTEM_CRASH_STATE_INFORMATION 1235 { 1236 ULONG ValidCrashDump; 1237 } SYSTEM_CRASH_STATE_INFORMATION, *PSYSTEM_CRASH_STATE_INFORMATION; 1238 1239 // Class 35 1240 typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION 1241 { 1242 BOOLEAN KernelDebuggerEnabled; 1243 BOOLEAN KernelDebuggerNotPresent; 1244 } SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION; 1245 1246 // Class 36 1247 typedef struct _SYSTEM_CONTEXT_SWITCH_INFORMATION 1248 { 1249 ULONG ContextSwitches; 1250 ULONG FindAny; 1251 ULONG FindLast; 1252 ULONG FindIdeal; 1253 ULONG IdleAny; 1254 ULONG IdleCurrent; 1255 ULONG IdleLast; 1256 ULONG IdleIdeal; 1257 ULONG PreemptAny; 1258 ULONG PreemptCurrent; 1259 ULONG PreemptLast; 1260 ULONG SwitchToIdle; 1261 } SYSTEM_CONTEXT_SWITCH_INFORMATION, *PSYSTEM_CONTEXT_SWITCH_INFORMATION; 1262 1263 // Class 37 1264 typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION 1265 { 1266 ULONG RegistryQuotaAllowed; 1267 ULONG RegistryQuotaUsed; 1268 SIZE_T PagedPoolSize; 1269 } SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION; 1270 1271 // Class 38 1272 // Not a structure, simply send the UNICODE_STRING 1273 1274 // Class 39 1275 // Not a structure, simply send a ULONG containing the new separation 1276 1277 // Class 40 1278 typedef struct _SYSTEM_PLUGPLAY_BUS_INFORMATION 1279 { 1280 ULONG BusCount; 1281 PLUGPLAY_BUS_INSTANCE BusInstance[1]; 1282 } SYSTEM_PLUGPLAY_BUS_INFORMATION, *PSYSTEM_PLUGPLAY_BUS_INFORMATION; 1283 1284 // Class 41 1285 typedef struct _SYSTEM_DOCK_INFORMATION 1286 { 1287 SYSTEM_DOCK_STATE DockState; 1288 INTERFACE_TYPE DeviceBusType; 1289 ULONG DeviceBusNumber; 1290 ULONG SlotNumber; 1291 } SYSTEM_DOCK_INFORMATION, *PSYSTEM_DOCK_INFORMATION; 1292 1293 // Class 42 1294 typedef struct _SYSTEM_POWER_INFORMATION_NATIVE 1295 { 1296 BOOLEAN SystemSuspendSupported; 1297 BOOLEAN SystemHibernateSupported; 1298 BOOLEAN ResumeTimerSupportsSuspend; 1299 BOOLEAN ResumeTimerSupportsHibernate; 1300 BOOLEAN LidSupported; 1301 BOOLEAN TurboSettingSupported; 1302 BOOLEAN TurboMode; 1303 BOOLEAN SystemAcOrDc; 1304 BOOLEAN PowerDownDisabled; 1305 LARGE_INTEGER SpindownDrives; 1306 } SYSTEM_POWER_INFORMATION_NATIVE, *PSYSTEM_POWER_INFORMATION_NATIVE; 1307 1308 // Class 43 1309 typedef struct _SYSTEM_LEGACY_DRIVER_INFORMATION 1310 { 1311 PNP_VETO_TYPE VetoType; 1312 UNICODE_STRING VetoDriver; 1313 } SYSTEM_LEGACY_DRIVER_INFORMATION, *PSYSTEM_LEGACY_DRIVER_INFORMATION; 1314 1315 // Class 44 1316 //typedef struct _TIME_ZONE_INFORMATION RTL_TIME_ZONE_INFORMATION; 1317 1318 // Class 45 1319 typedef struct _SYSTEM_LOOKASIDE_INFORMATION 1320 { 1321 USHORT CurrentDepth; 1322 USHORT MaximumDepth; 1323 ULONG TotalAllocates; 1324 ULONG AllocateMisses; 1325 ULONG TotalFrees; 1326 ULONG FreeMisses; 1327 ULONG Type; 1328 ULONG Tag; 1329 ULONG Size; 1330 } SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION; 1331 1332 // Class 46 1333 // Not a structure. Only a HANDLE for the SlipEvent; 1334 1335 // Class 47 1336 // Not a structure. Only a ULONG for the SessionId; 1337 1338 // Class 48 1339 // Not a structure. Only a ULONG for the SessionId; 1340 1341 // FIXME: Class 49 1342 1343 // Class 50 1344 // Not a structure. Only a ULONG_PTR for the SystemRangeStart 1345 1346 // Class 51 1347 typedef struct _SYSTEM_VERIFIER_INFORMATION 1348 { 1349 ULONG NextEntryOffset; 1350 ULONG Level; 1351 UNICODE_STRING DriverName; 1352 ULONG RaiseIrqls; 1353 ULONG AcquireSpinLocks; 1354 ULONG SynchronizeExecutions; 1355 ULONG AllocationsAttempted; 1356 ULONG AllocationsSucceeded; 1357 ULONG AllocationsSucceededSpecialPool; 1358 ULONG AllocationsWithNoTag; 1359 ULONG TrimRequests; 1360 ULONG Trims; 1361 ULONG AllocationsFailed; 1362 ULONG AllocationsFailedDeliberately; 1363 ULONG Loads; 1364 ULONG Unloads; 1365 ULONG UnTrackedPool; 1366 ULONG CurrentPagedPoolAllocations; 1367 ULONG CurrentNonPagedPoolAllocations; 1368 ULONG PeakPagedPoolAllocations; 1369 ULONG PeakNonPagedPoolAllocations; 1370 SIZE_T PagedPoolUsageInBytes; 1371 SIZE_T NonPagedPoolUsageInBytes; 1372 SIZE_T PeakPagedPoolUsageInBytes; 1373 SIZE_T PeakNonPagedPoolUsageInBytes; 1374 } SYSTEM_VERIFIER_INFORMATION, *PSYSTEM_VERIFIER_INFORMATION; 1375 1376 // FIXME: Class 52 1377 1378 // Class 53 1379 typedef struct _SYSTEM_SESSION_PROCESS_INFORMATION 1380 { 1381 ULONG SessionId; 1382 ULONG SizeOfBuf; 1383 PVOID Buffer; // Same format as in SystemProcessInformation 1384 } SYSTEM_SESSION_PROCESS_INFORMATION, *PSYSTEM_SESSION_PROCESS_INFORMATION; 1385 1386 // FIXME: Class 54 1387 1388 // Class 55 1389 #define MAXIMUM_NUMA_NODES 16 1390 typedef struct _SYSTEM_NUMA_INFORMATION 1391 { 1392 ULONG HighestNodeNumber; 1393 ULONG Reserved; 1394 union 1395 { 1396 ULONGLONG ActiveProcessorsAffinityMask[MAXIMUM_NUMA_NODES]; 1397 ULONGLONG AvailableMemory[MAXIMUM_NUMA_NODES]; 1398 }; 1399 } SYSTEM_NUMA_INFORMATION, *PSYSTEM_NUMA_INFORMATION; 1400 1401 // FIXME: Class 56-63 1402 1403 // Class 64 1404 typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX 1405 { 1406 PVOID Object; 1407 ULONG_PTR UniqueProcessId; 1408 ULONG_PTR HandleValue; 1409 ULONG GrantedAccess; 1410 USHORT CreatorBackTraceIndex; 1411 USHORT ObjectTypeIndex; 1412 ULONG HandleAttributes; 1413 ULONG Reserved; 1414 } SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX, *PSYSTEM_HANDLE_TABLE_ENTRY_INFO_EX; 1415 1416 typedef struct _SYSTEM_HANDLE_INFORMATION_EX 1417 { 1418 ULONG_PTR Count; 1419 ULONG_PTR Reserved; 1420 SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX Handle[1]; 1421 } SYSTEM_HANDLE_INFORMATION_EX, *PSYSTEM_HANDLE_INFORMATION_EX; 1422 1423 // FIXME: Class 65-97 1424 1425 // 1426 // Hotpatch flags 1427 // 1428 #define RTL_HOTPATCH_SUPPORTED_FLAG 0x01 1429 #define RTL_HOTPATCH_SWAP_OBJECT_NAMES 0x08 << 24 1430 #define RTL_HOTPATCH_SYNC_RENAME_FILES 0x10 << 24 1431 #define RTL_HOTPATCH_PATCH_USER_MODE 0x20 << 24 1432 #define RTL_HOTPATCH_REMAP_SYSTEM_DLL 0x40 << 24 1433 #define RTL_HOTPATCH_PATCH_KERNEL_MODE 0x80 << 24 1434 1435 1436 // Class 69 1437 typedef struct _SYSTEM_HOTPATCH_CODE_INFORMATION 1438 { 1439 ULONG Flags; 1440 ULONG InfoSize; 1441 union 1442 { 1443 struct 1444 { 1445 ULONG Foo; 1446 } CodeInfo; 1447 struct 1448 { 1449 USHORT NameOffset; 1450 USHORT NameLength; 1451 } KernelInfo; 1452 struct 1453 { 1454 USHORT NameOffset; 1455 USHORT NameLength; 1456 USHORT TargetNameOffset; 1457 USHORT TargetNameLength; 1458 UCHAR PatchingFinished; 1459 } UserModeInfo; 1460 struct 1461 { 1462 USHORT NameOffset; 1463 USHORT NameLength; 1464 USHORT TargetNameOffset; 1465 USHORT TargetNameLength; 1466 UCHAR PatchingFinished; 1467 NTSTATUS ReturnCode; 1468 HANDLE TargetProcess; 1469 } InjectionInfo; 1470 struct 1471 { 1472 HANDLE FileHandle1; 1473 PIO_STATUS_BLOCK IoStatusBlock1; 1474 PVOID RenameInformation1; 1475 PVOID RenameInformationLength1; 1476 HANDLE FileHandle2; 1477 PIO_STATUS_BLOCK IoStatusBlock2; 1478 PVOID RenameInformation2; 1479 PVOID RenameInformationLength2; 1480 } RenameInfo; 1481 struct 1482 { 1483 HANDLE ParentDirectory; 1484 HANDLE ObjectHandle1; 1485 HANDLE ObjectHandle2; 1486 } AtomicSwap; 1487 }; 1488 } SYSTEM_HOTPATCH_CODE_INFORMATION, *PSYSTEM_HOTPATCH_CODE_INFORMATION; 1489 1490 // 1491 // Class 75 1492 // 1493 #ifdef NTOS_MODE_USER 1494 typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER 1495 { 1496 ULONG ProviderSignature; 1497 BOOLEAN Register; 1498 PFNFTH FirmwareTableHandler; 1499 PVOID DriverObject; 1500 } SYSTEM_FIRMWARE_TABLE_HANDLER, *PSYSTEM_FIRMWARE_TABLE_HANDLER; 1501 1502 // 1503 // Class 76 1504 // 1505 typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION 1506 { 1507 ULONG ProviderSignature; 1508 SYSTEM_FIRMWARE_TABLE_ACTION Action; 1509 ULONG TableID; 1510 ULONG TableBufferLength; 1511 UCHAR TableBuffer[1]; 1512 } SYSTEM_FIRMWARE_TABLE_INFORMATION, *PSYSTEM_FIRMWARE_TABLE_INFORMATION; 1513 1514 // 1515 // Class 81 1516 // 1517 typedef struct _SYSTEM_MEMORY_LIST_INFORMATION 1518 { 1519 SIZE_T ZeroPageCount; 1520 SIZE_T FreePageCount; 1521 SIZE_T ModifiedPageCount; 1522 SIZE_T ModifiedNoWritePageCount; 1523 SIZE_T BadPageCount; 1524 SIZE_T PageCountByPriority[8]; 1525 SIZE_T RepurposedPagesByPriority[8]; 1526 SIZE_T ModifiedPageCountPageFile; 1527 } SYSTEM_MEMORY_LIST_INFORMATION, *PSYSTEM_MEMORY_LIST_INFORMATION; 1528 1529 #endif // !NTOS_MODE_USER 1530 1531 #ifdef __cplusplus 1532 }; // extern "C" 1533 #endif 1534 1535 #endif // !_EXTYPES_H 1536