1/* 2 * ntddk.h 3 * 4 * Windows NT Device Driver Kit 5 * 6 * This file is part of the ReactOS DDK package. 7 * 8 * Contributors: 9 * Amine Khaldi 10 * Timo Kreuzer (timo.kreuzer@reactos.org) 11 * 12 * THIS SOFTWARE IS NOT COPYRIGHTED 13 * 14 * This source code is offered for use in the public domain. You may 15 * use, modify or distribute it freely. 16 * 17 * This code is distributed in the hope that it will be useful but 18 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 19 * DISCLAIMED. This includes but is not limited to warranties of 20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 21 * 22 */ 23 24#pragma once 25 26#define _NTDDK_ 27 28#if !defined(_NTHAL_) && !defined(_NTIFS_) 29#define _NTDDK_INCLUDED_ 30#define _DDK_DRIVER_ 31#endif 32 33/* Dependencies */ 34 35#define NT_INCLUDED 36#define _CTYPE_DISABLE_MACROS 37 38#include <wdm.h> 39#include <excpt.h> 40#include <ntdef.h> 41#include <ntstatus.h> 42#include <mce.h> 43#include <bugcodes.h> 44#include <ntiologc.h> 45 46#include <stdarg.h> // FIXME 47#include <basetyps.h> // FIXME 48 49 50#ifdef __cplusplus 51extern "C" { 52#endif 53 54/* GUID and UUID */ 55#ifndef _NTLSA_IFS_ 56#ifndef _NTLSA_AUDIT_ 57#define _NTLSA_AUDIT_ 58 59#ifndef GUID_DEFINED 60#include <guiddef.h> 61#endif 62 63#endif /* _NTLSA_AUDIT_ */ 64#endif /* _NTLSA_IFS_ */ 65 66typedef GUID UUID; 67 68struct _LOADER_PARAMETER_BLOCK; 69struct _CREATE_DISK; 70struct _DRIVE_LAYOUT_INFORMATION_EX; 71struct _SET_PARTITION_INFORMATION_EX; 72struct _DISK_GEOMETRY_EX; 73 74typedef struct _BUS_HANDLER *PBUS_HANDLER; 75typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT; 76#if defined(_NTHAL_INCLUDED_) 77typedef struct _KAFFINITY_EX *PKAFFINITY_EX; 78#endif 79typedef struct _PEB *PPEB; 80 81#ifndef _NTIMAGE_ 82 83typedef struct _IMAGE_NT_HEADERS *PIMAGE_NT_HEADERS32; 84typedef struct _IMAGE_NT_HEADERS64 *PIMAGE_NT_HEADERS64; 85 86#ifdef _WIN64 87typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS; 88#else 89typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS; 90#endif 91 92#endif /* _NTIMAGE_ */ 93 94/****************************************************************************** 95 * Executive Types * 96 ******************************************************************************/ 97typedef struct _ZONE_SEGMENT_HEADER { 98 SINGLE_LIST_ENTRY SegmentList; 99 PVOID Reserved; 100} ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER; 101 102typedef struct _ZONE_HEADER { 103 SINGLE_LIST_ENTRY FreeList; 104 SINGLE_LIST_ENTRY SegmentList; 105 ULONG BlockSize; 106 ULONG TotalSegmentSize; 107} ZONE_HEADER, *PZONE_HEADER; 108 109#define PROTECTED_POOL 0x80000000 110 111/****************************************************************************** 112 * I/O Manager Types * 113 ******************************************************************************/ 114 115/* DEVICE_OBJECT.Flags */ 116#define DO_DEVICE_HAS_NAME 0x00000040 117#define DO_SYSTEM_BOOT_PARTITION 0x00000100 118#define DO_LONG_TERM_REQUESTS 0x00000200 119#define DO_NEVER_LAST_DEVICE 0x00000400 120#define DO_LOW_PRIORITY_FILESYSTEM 0x00010000 121#define DO_SUPPORTS_TRANSACTIONS 0x00040000 122#define DO_FORCE_NEITHER_IO 0x00080000 123#define DO_VOLUME_DEVICE_OBJECT 0x00100000 124#define DO_SYSTEM_SYSTEM_PARTITION 0x00200000 125#define DO_SYSTEM_CRITICAL_PARTITION 0x00400000 126#define DO_DISALLOW_EXECUTE 0x00800000 127 128#ifndef _ARC_DDK_ 129#define _ARC_DDK_ 130typedef enum _CONFIGURATION_TYPE { 131 ArcSystem, 132 CentralProcessor, 133 FloatingPointProcessor, 134 PrimaryIcache, 135 PrimaryDcache, 136 SecondaryIcache, 137 SecondaryDcache, 138 SecondaryCache, 139 EisaAdapter, 140 TcAdapter, 141 ScsiAdapter, 142 DtiAdapter, 143 MultiFunctionAdapter, 144 DiskController, 145 TapeController, 146 CdromController, 147 WormController, 148 SerialController, 149 NetworkController, 150 DisplayController, 151 ParallelController, 152 PointerController, 153 KeyboardController, 154 AudioController, 155 OtherController, 156 DiskPeripheral, 157 FloppyDiskPeripheral, 158 TapePeripheral, 159 ModemPeripheral, 160 MonitorPeripheral, 161 PrinterPeripheral, 162 PointerPeripheral, 163 KeyboardPeripheral, 164 TerminalPeripheral, 165 OtherPeripheral, 166 LinePeripheral, 167 NetworkPeripheral, 168 SystemMemory, 169 DockingInformation, 170 RealModeIrqRoutingTable, 171 RealModePCIEnumeration, 172 MaximumType 173} CONFIGURATION_TYPE, *PCONFIGURATION_TYPE; 174#endif /* !_ARC_DDK_ */ 175 176/* 177** IRP function codes 178*/ 179 180#define IRP_MN_QUERY_DIRECTORY 0x01 181#define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02 182 183#define IRP_MN_USER_FS_REQUEST 0x00 184#define IRP_MN_MOUNT_VOLUME 0x01 185#define IRP_MN_VERIFY_VOLUME 0x02 186#define IRP_MN_LOAD_FILE_SYSTEM 0x03 187#define IRP_MN_TRACK_LINK 0x04 188#define IRP_MN_KERNEL_CALL 0x04 189 190#define IRP_MN_LOCK 0x01 191#define IRP_MN_UNLOCK_SINGLE 0x02 192#define IRP_MN_UNLOCK_ALL 0x03 193#define IRP_MN_UNLOCK_ALL_BY_KEY 0x04 194 195#define IRP_MN_FLUSH_AND_PURGE 0x01 196 197#define IRP_MN_NORMAL 0x00 198#define IRP_MN_DPC 0x01 199#define IRP_MN_MDL 0x02 200#define IRP_MN_COMPLETE 0x04 201#define IRP_MN_COMPRESSED 0x08 202 203#define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC) 204#define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL) 205#define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC) 206 207#define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18 208 209#define IO_CHECK_CREATE_PARAMETERS 0x0200 210#define IO_ATTACH_DEVICE 0x0400 211#define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800 212 213typedef NTSTATUS 214(NTAPI *PIO_QUERY_DEVICE_ROUTINE)( 215 IN PVOID Context, 216 IN PUNICODE_STRING PathName, 217 IN INTERFACE_TYPE BusType, 218 IN ULONG BusNumber, 219 IN PKEY_VALUE_FULL_INFORMATION *BusInformation, 220 IN CONFIGURATION_TYPE ControllerType, 221 IN ULONG ControllerNumber, 222 IN PKEY_VALUE_FULL_INFORMATION *ControllerInformation, 223 IN CONFIGURATION_TYPE PeripheralType, 224 IN ULONG PeripheralNumber, 225 IN PKEY_VALUE_FULL_INFORMATION *PeripheralInformation); 226 227typedef enum _IO_QUERY_DEVICE_DATA_FORMAT { 228 IoQueryDeviceIdentifier = 0, 229 IoQueryDeviceConfigurationData, 230 IoQueryDeviceComponentInformation, 231 IoQueryDeviceMaxData 232} IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT; 233 234typedef VOID 235(NTAPI *PDRIVER_REINITIALIZE)( 236 IN struct _DRIVER_OBJECT *DriverObject, 237 IN PVOID Context OPTIONAL, 238 IN ULONG Count); 239 240typedef struct _CONTROLLER_OBJECT { 241 CSHORT Type; 242 CSHORT Size; 243 PVOID ControllerExtension; 244 KDEVICE_QUEUE DeviceWaitQueue; 245 ULONG Spare1; 246 LARGE_INTEGER Spare2; 247} CONTROLLER_OBJECT, *PCONTROLLER_OBJECT; 248 249#define DRVO_REINIT_REGISTERED 0x00000008 250#define DRVO_INITIALIZED 0x00000010 251#define DRVO_BOOTREINIT_REGISTERED 0x00000020 252#define DRVO_LEGACY_RESOURCES 0x00000040 253 254typedef struct _CONFIGURATION_INFORMATION { 255 ULONG DiskCount; 256 ULONG FloppyCount; 257 ULONG CdRomCount; 258 ULONG TapeCount; 259 ULONG ScsiPortCount; 260 ULONG SerialCount; 261 ULONG ParallelCount; 262 BOOLEAN AtDiskPrimaryAddressClaimed; 263 BOOLEAN AtDiskSecondaryAddressClaimed; 264 ULONG Version; 265 ULONG MediumChangerCount; 266} CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION; 267 268typedef struct _DISK_SIGNATURE { 269 ULONG PartitionStyle; 270 _ANONYMOUS_UNION union { 271 struct { 272 ULONG Signature; 273 ULONG CheckSum; 274 } Mbr; 275 struct { 276 GUID DiskId; 277 } Gpt; 278 } DUMMYUNIONNAME; 279} DISK_SIGNATURE, *PDISK_SIGNATURE; 280 281typedef struct _TXN_PARAMETER_BLOCK { 282 USHORT Length; 283 USHORT TxFsContext; 284 PVOID TransactionObject; 285} TXN_PARAMETER_BLOCK, *PTXN_PARAMETER_BLOCK; 286 287#define TXF_MINIVERSION_DEFAULT_VIEW (0xFFFE) 288 289typedef struct _IO_DRIVER_CREATE_CONTEXT { 290 CSHORT Size; 291 struct _ECP_LIST *ExtraCreateParameter; 292 PVOID DeviceObjectHint; 293 PTXN_PARAMETER_BLOCK TxnParameters; 294} IO_DRIVER_CREATE_CONTEXT, *PIO_DRIVER_CREATE_CONTEXT; 295 296typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD { 297 USHORT Size; 298 USHORT Version; 299 PVOID Context; 300 PINTERFACE_REFERENCE InterfaceReference; 301 PINTERFACE_DEREFERENCE InterfaceDereference; 302 PGET_SET_DEVICE_DATA SetBusData; 303 PGET_SET_DEVICE_DATA GetBusData; 304 UCHAR CapabilityID; 305} AGP_TARGET_BUS_INTERFACE_STANDARD, *PAGP_TARGET_BUS_INTERFACE_STANDARD; 306 307typedef NTSTATUS 308(NTAPI *PGET_LOCATION_STRING)( 309 IN OUT PVOID Context OPTIONAL, 310 OUT PWCHAR *LocationStrings); 311 312typedef struct _PNP_LOCATION_INTERFACE { 313 USHORT Size; 314 USHORT Version; 315 PVOID Context; 316 PINTERFACE_REFERENCE InterfaceReference; 317 PINTERFACE_DEREFERENCE InterfaceDereference; 318 PGET_LOCATION_STRING GetLocationString; 319} PNP_LOCATION_INTERFACE, *PPNP_LOCATION_INTERFACE; 320 321typedef enum _ARBITER_ACTION { 322 ArbiterActionTestAllocation, 323 ArbiterActionRetestAllocation, 324 ArbiterActionCommitAllocation, 325 ArbiterActionRollbackAllocation, 326 ArbiterActionQueryAllocatedResources, 327 ArbiterActionWriteReservedResources, 328 ArbiterActionQueryConflict, 329 ArbiterActionQueryArbitrate, 330 ArbiterActionAddReserved, 331 ArbiterActionBootAllocation 332} ARBITER_ACTION, *PARBITER_ACTION; 333 334typedef struct _ARBITER_CONFLICT_INFO { 335 PDEVICE_OBJECT OwningObject; 336 ULONGLONG Start; 337 ULONGLONG End; 338} ARBITER_CONFLICT_INFO, *PARBITER_CONFLICT_INFO; 339 340typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS { 341 IN OUT PLIST_ENTRY ArbitrationList; 342 IN ULONG AllocateFromCount; 343 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom; 344} ARBITER_TEST_ALLOCATION_PARAMETERS, *PARBITER_TEST_ALLOCATION_PARAMETERS; 345 346typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS { 347 IN OUT PLIST_ENTRY ArbitrationList; 348 IN ULONG AllocateFromCount; 349 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom; 350} ARBITER_RETEST_ALLOCATION_PARAMETERS, *PARBITER_RETEST_ALLOCATION_PARAMETERS; 351 352typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS { 353 IN OUT PLIST_ENTRY ArbitrationList; 354} ARBITER_BOOT_ALLOCATION_PARAMETERS, *PARBITER_BOOT_ALLOCATION_PARAMETERS; 355 356typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS { 357 OUT PCM_PARTIAL_RESOURCE_LIST *AllocatedResources; 358} ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS; 359 360typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS { 361 IN PDEVICE_OBJECT PhysicalDeviceObject; 362 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource; 363 OUT PULONG ConflictCount; 364 OUT PARBITER_CONFLICT_INFO *Conflicts; 365} ARBITER_QUERY_CONFLICT_PARAMETERS, *PARBITER_QUERY_CONFLICT_PARAMETERS; 366 367typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS { 368 IN PLIST_ENTRY ArbitrationList; 369} ARBITER_QUERY_ARBITRATE_PARAMETERS, *PARBITER_QUERY_ARBITRATE_PARAMETERS; 370 371typedef struct _ARBITER_ADD_RESERVED_PARAMETERS { 372 IN PDEVICE_OBJECT ReserveDevice; 373} ARBITER_ADD_RESERVED_PARAMETERS, *PARBITER_ADD_RESERVED_PARAMETERS; 374 375typedef struct _ARBITER_PARAMETERS { 376 union { 377 ARBITER_TEST_ALLOCATION_PARAMETERS TestAllocation; 378 ARBITER_RETEST_ALLOCATION_PARAMETERS RetestAllocation; 379 ARBITER_BOOT_ALLOCATION_PARAMETERS BootAllocation; 380 ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS QueryAllocatedResources; 381 ARBITER_QUERY_CONFLICT_PARAMETERS QueryConflict; 382 ARBITER_QUERY_ARBITRATE_PARAMETERS QueryArbitrate; 383 ARBITER_ADD_RESERVED_PARAMETERS AddReserved; 384 } Parameters; 385} ARBITER_PARAMETERS, *PARBITER_PARAMETERS; 386 387typedef enum _ARBITER_REQUEST_SOURCE { 388 ArbiterRequestUndefined = -1, 389 ArbiterRequestLegacyReported, 390 ArbiterRequestHalReported, 391 ArbiterRequestLegacyAssigned, 392 ArbiterRequestPnpDetected, 393 ArbiterRequestPnpEnumerated 394} ARBITER_REQUEST_SOURCE; 395 396typedef enum _ARBITER_RESULT { 397 ArbiterResultUndefined = -1, 398 ArbiterResultSuccess, 399 ArbiterResultExternalConflict, 400 ArbiterResultNullRequest 401} ARBITER_RESULT; 402 403#define ARBITER_FLAG_BOOT_CONFIG 0x00000001 404 405typedef struct _ARBITER_LIST_ENTRY { 406 LIST_ENTRY ListEntry; 407 ULONG AlternativeCount; 408 PIO_RESOURCE_DESCRIPTOR Alternatives; 409 PDEVICE_OBJECT PhysicalDeviceObject; 410 ARBITER_REQUEST_SOURCE RequestSource; 411 ULONG Flags; 412 LONG_PTR WorkSpace; 413 INTERFACE_TYPE InterfaceType; 414 ULONG SlotNumber; 415 ULONG BusNumber; 416 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment; 417 PIO_RESOURCE_DESCRIPTOR SelectedAlternative; 418 ARBITER_RESULT Result; 419} ARBITER_LIST_ENTRY, *PARBITER_LIST_ENTRY; 420 421typedef NTSTATUS 422(NTAPI *PARBITER_HANDLER)( 423 IN OUT PVOID Context, 424 IN ARBITER_ACTION Action, 425 IN OUT PARBITER_PARAMETERS Parameters); 426 427#define ARBITER_PARTIAL 0x00000001 428 429typedef struct _ARBITER_INTERFACE { 430 USHORT Size; 431 USHORT Version; 432 PVOID Context; 433 PINTERFACE_REFERENCE InterfaceReference; 434 PINTERFACE_DEREFERENCE InterfaceDereference; 435 PARBITER_HANDLER ArbiterHandler; 436 ULONG Flags; 437} ARBITER_INTERFACE, *PARBITER_INTERFACE; 438 439typedef enum _RESOURCE_TRANSLATION_DIRECTION { 440 TranslateChildToParent, 441 TranslateParentToChild 442} RESOURCE_TRANSLATION_DIRECTION; 443 444typedef NTSTATUS 445(NTAPI *PTRANSLATE_RESOURCE_HANDLER)( 446 IN OUT PVOID Context OPTIONAL, 447 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source, 448 IN RESOURCE_TRANSLATION_DIRECTION Direction, 449 IN ULONG AlternativesCount OPTIONAL, 450 IN IO_RESOURCE_DESCRIPTOR Alternatives[], 451 IN PDEVICE_OBJECT PhysicalDeviceObject, 452 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target); 453 454typedef NTSTATUS 455(NTAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)( 456 IN OUT PVOID Context OPTIONAL, 457 IN PIO_RESOURCE_DESCRIPTOR Source, 458 IN PDEVICE_OBJECT PhysicalDeviceObject, 459 OUT PULONG TargetCount, 460 OUT PIO_RESOURCE_DESCRIPTOR *Target); 461 462typedef struct _TRANSLATOR_INTERFACE { 463 USHORT Size; 464 USHORT Version; 465 PVOID Context; 466 PINTERFACE_REFERENCE InterfaceReference; 467 PINTERFACE_DEREFERENCE InterfaceDereference; 468 PTRANSLATE_RESOURCE_HANDLER TranslateResources; 469 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements; 470} TRANSLATOR_INTERFACE, *PTRANSLATOR_INTERFACE; 471 472typedef struct _PCI_AGP_CAPABILITY { 473 PCI_CAPABILITIES_HEADER Header; 474 USHORT Minor:4; 475 USHORT Major:4; 476 USHORT Rsvd1:8; 477 struct _PCI_AGP_STATUS { 478 ULONG Rate:3; 479 ULONG Agp3Mode:1; 480 ULONG FastWrite:1; 481 ULONG FourGB:1; 482 ULONG HostTransDisable:1; 483 ULONG Gart64:1; 484 ULONG ITA_Coherent:1; 485 ULONG SideBandAddressing:1; 486 ULONG CalibrationCycle:3; 487 ULONG AsyncRequestSize:3; 488 ULONG Rsvd1:1; 489 ULONG Isoch:1; 490 ULONG Rsvd2:6; 491 ULONG RequestQueueDepthMaximum:8; 492 } AGPStatus; 493 struct _PCI_AGP_COMMAND { 494 ULONG Rate:3; 495 ULONG Rsvd1:1; 496 ULONG FastWriteEnable:1; 497 ULONG FourGBEnable:1; 498 ULONG Rsvd2:1; 499 ULONG Gart64:1; 500 ULONG AGPEnable:1; 501 ULONG SBAEnable:1; 502 ULONG CalibrationCycle:3; 503 ULONG AsyncReqSize:3; 504 ULONG Rsvd3:8; 505 ULONG RequestQueueDepth:8; 506 } AGPCommand; 507} PCI_AGP_CAPABILITY, *PPCI_AGP_CAPABILITY; 508 509typedef enum _EXTENDED_AGP_REGISTER { 510 IsochStatus, 511 AgpControl, 512 ApertureSize, 513 AperturePageSize, 514 GartLow, 515 GartHigh, 516 IsochCommand 517} EXTENDED_AGP_REGISTER, *PEXTENDED_AGP_REGISTER; 518 519typedef struct _PCI_AGP_ISOCH_STATUS { 520 ULONG ErrorCode:2; 521 ULONG Rsvd1:1; 522 ULONG Isoch_L:3; 523 ULONG Isoch_Y:2; 524 ULONG Isoch_N:8; 525 ULONG Rsvd2:16; 526} PCI_AGP_ISOCH_STATUS, *PPCI_AGP_ISOCH_STATUS; 527 528typedef struct _PCI_AGP_CONTROL { 529 ULONG Rsvd1:7; 530 ULONG GTLB_Enable:1; 531 ULONG AP_Enable:1; 532 ULONG CAL_Disable:1; 533 ULONG Rsvd2:22; 534} PCI_AGP_CONTROL, *PPCI_AGP_CONTROL; 535 536typedef struct _PCI_AGP_APERTURE_PAGE_SIZE { 537 USHORT PageSizeMask:11; 538 USHORT Rsvd1:1; 539 USHORT PageSizeSelect:4; 540} PCI_AGP_APERTURE_PAGE_SIZE, *PPCI_AGP_APERTURE_PAGE_SIZE; 541 542typedef struct _PCI_AGP_ISOCH_COMMAND { 543 USHORT Rsvd1:6; 544 USHORT Isoch_Y:2; 545 USHORT Isoch_N:8; 546} PCI_AGP_ISOCH_COMMAND, *PPCI_AGP_ISOCH_COMMAND; 547 548typedef struct PCI_AGP_EXTENDED_CAPABILITY { 549 PCI_AGP_ISOCH_STATUS IsochStatus; 550 PCI_AGP_CONTROL AgpControl; 551 USHORT ApertureSize; 552 PCI_AGP_APERTURE_PAGE_SIZE AperturePageSize; 553 ULONG GartLow; 554 ULONG GartHigh; 555 PCI_AGP_ISOCH_COMMAND IsochCommand; 556} PCI_AGP_EXTENDED_CAPABILITY, *PPCI_AGP_EXTENDED_CAPABILITY; 557 558#define PCI_AGP_RATE_1X 0x1 559#define PCI_AGP_RATE_2X 0x2 560#define PCI_AGP_RATE_4X 0x4 561 562#define PCIX_MODE_CONVENTIONAL_PCI 0x0 563#define PCIX_MODE1_66MHZ 0x1 564#define PCIX_MODE1_100MHZ 0x2 565#define PCIX_MODE1_133MHZ 0x3 566#define PCIX_MODE2_266_66MHZ 0x9 567#define PCIX_MODE2_266_100MHZ 0xA 568#define PCIX_MODE2_266_133MHZ 0xB 569#define PCIX_MODE2_533_66MHZ 0xD 570#define PCIX_MODE2_533_100MHZ 0xE 571#define PCIX_MODE2_533_133MHZ 0xF 572 573#define PCIX_VERSION_MODE1_ONLY 0x0 574#define PCIX_VERSION_MODE2_ECC 0x1 575#define PCIX_VERSION_DUAL_MODE_ECC 0x2 576 577typedef struct _PCIX_BRIDGE_CAPABILITY { 578 PCI_CAPABILITIES_HEADER Header; 579 union { 580 _ANONYMOUS_STRUCT struct { 581 USHORT Bus64Bit:1; 582 USHORT Bus133MHzCapable:1; 583 USHORT SplitCompletionDiscarded:1; 584 USHORT UnexpectedSplitCompletion:1; 585 USHORT SplitCompletionOverrun:1; 586 USHORT SplitRequestDelayed:1; 587 USHORT BusModeFrequency:4; 588 USHORT Rsvd:2; 589 USHORT Version:2; 590 USHORT Bus266MHzCapable:1; 591 USHORT Bus533MHzCapable:1; 592 } DUMMYSTRUCTNAME; 593 USHORT AsUSHORT; 594 } SecondaryStatus; 595 union { 596 _ANONYMOUS_STRUCT struct { 597 ULONG FunctionNumber:3; 598 ULONG DeviceNumber:5; 599 ULONG BusNumber:8; 600 ULONG Device64Bit:1; 601 ULONG Device133MHzCapable:1; 602 ULONG SplitCompletionDiscarded:1; 603 ULONG UnexpectedSplitCompletion:1; 604 ULONG SplitCompletionOverrun:1; 605 ULONG SplitRequestDelayed:1; 606 ULONG Rsvd:7; 607 ULONG DIMCapable:1; 608 ULONG Device266MHzCapable:1; 609 ULONG Device533MHzCapable:1; 610 } DUMMYSTRUCTNAME; 611 ULONG AsULONG; 612 } BridgeStatus; 613 USHORT UpstreamSplitTransactionCapacity; 614 USHORT UpstreamSplitTransactionLimit; 615 USHORT DownstreamSplitTransactionCapacity; 616 USHORT DownstreamSplitTransactionLimit; 617 union { 618 _ANONYMOUS_STRUCT struct { 619 ULONG SelectSecondaryRegisters:1; 620 ULONG ErrorPresentInOtherBank:1; 621 ULONG AdditionalCorrectableError:1; 622 ULONG AdditionalUncorrectableError:1; 623 ULONG ErrorPhase:3; 624 ULONG ErrorCorrected:1; 625 ULONG Syndrome:8; 626 ULONG ErrorFirstCommand:4; 627 ULONG ErrorSecondCommand:4; 628 ULONG ErrorUpperAttributes:4; 629 ULONG ControlUpdateEnable:1; 630 ULONG Rsvd:1; 631 ULONG DisableSingleBitCorrection:1; 632 ULONG EccMode:1; 633 } DUMMYSTRUCTNAME; 634 ULONG AsULONG; 635 } EccControlStatus; 636 ULONG EccFirstAddress; 637 ULONG EccSecondAddress; 638 ULONG EccAttribute; 639} PCIX_BRIDGE_CAPABILITY, *PPCIX_BRIDGE_CAPABILITY; 640 641typedef struct _PCI_SUBSYSTEM_IDS_CAPABILITY { 642 PCI_CAPABILITIES_HEADER Header; 643 USHORT Reserved; 644 USHORT SubVendorID; 645 USHORT SubSystemID; 646} PCI_SUBSYSTEM_IDS_CAPABILITY, *PPCI_SUBSYSTEM_IDS_CAPABILITY; 647 648#define OSC_FIRMWARE_FAILURE 0x02 649#define OSC_UNRECOGNIZED_UUID 0x04 650#define OSC_UNRECOGNIZED_REVISION 0x08 651#define OSC_CAPABILITIES_MASKED 0x10 652 653#define PCI_ROOT_BUS_OSC_METHOD_CAPABILITY_REVISION 0x01 654 655typedef struct _PCI_ROOT_BUS_OSC_SUPPORT_FIELD { 656 union { 657 _ANONYMOUS_STRUCT struct { 658 ULONG ExtendedConfigOpRegions:1; 659 ULONG ActiveStatePowerManagement:1; 660 ULONG ClockPowerManagement:1; 661 ULONG SegmentGroups:1; 662 ULONG MessageSignaledInterrupts:1; 663 ULONG WindowsHardwareErrorArchitecture:1; 664 ULONG Reserved:26; 665 } DUMMYSTRUCTNAME; 666 ULONG AsULONG; 667 } u; 668} PCI_ROOT_BUS_OSC_SUPPORT_FIELD, *PPCI_ROOT_BUS_OSC_SUPPORT_FIELD; 669 670typedef struct _PCI_ROOT_BUS_OSC_CONTROL_FIELD { 671 union { 672 _ANONYMOUS_STRUCT struct { 673 ULONG ExpressNativeHotPlug:1; 674 ULONG ShpcNativeHotPlug:1; 675 ULONG ExpressNativePME:1; 676 ULONG ExpressAdvancedErrorReporting:1; 677 ULONG ExpressCapabilityStructure:1; 678 ULONG Reserved:27; 679 } DUMMYSTRUCTNAME; 680 ULONG AsULONG; 681 } u; 682} PCI_ROOT_BUS_OSC_CONTROL_FIELD, *PPCI_ROOT_BUS_OSC_CONTROL_FIELD; 683 684typedef enum _PCI_HARDWARE_INTERFACE { 685 PciConventional, 686 PciXMode1, 687 PciXMode2, 688 PciExpress 689} PCI_HARDWARE_INTERFACE, *PPCI_HARDWARE_INTERFACE; 690 691typedef enum { 692 BusWidth32Bits, 693 BusWidth64Bits 694} PCI_BUS_WIDTH; 695 696typedef struct _PCI_ROOT_BUS_HARDWARE_CAPABILITY { 697 PCI_HARDWARE_INTERFACE SecondaryInterface; 698 _ANONYMOUS_STRUCT struct { 699 BOOLEAN BusCapabilitiesFound; 700 ULONG CurrentSpeedAndMode; 701 ULONG SupportedSpeedsAndModes; 702 BOOLEAN DeviceIDMessagingCapable; 703 PCI_BUS_WIDTH SecondaryBusWidth; 704 } DUMMYSTRUCTNAME; 705 PCI_ROOT_BUS_OSC_SUPPORT_FIELD OscFeatureSupport; 706 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlRequest; 707 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlGranted; 708} PCI_ROOT_BUS_HARDWARE_CAPABILITY, *PPCI_ROOT_BUS_HARDWARE_CAPABILITY; 709 710typedef union _PCI_EXPRESS_CAPABILITIES_REGISTER { 711 _ANONYMOUS_STRUCT struct { 712 USHORT CapabilityVersion:4; 713 USHORT DeviceType:4; 714 USHORT SlotImplemented:1; 715 USHORT InterruptMessageNumber:5; 716 USHORT Rsvd:2; 717 } DUMMYSTRUCTNAME; 718 USHORT AsUSHORT; 719} PCI_EXPRESS_CAPABILITIES_REGISTER, *PPCI_EXPRESS_CAPABILITIES_REGISTER; 720 721typedef union _PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER { 722 _ANONYMOUS_STRUCT struct { 723 ULONG MaxPayloadSizeSupported:3; 724 ULONG PhantomFunctionsSupported:2; 725 ULONG ExtendedTagSupported:1; 726 ULONG L0sAcceptableLatency:3; 727 ULONG L1AcceptableLatency:3; 728 ULONG Undefined:3; 729 ULONG RoleBasedErrorReporting:1; 730 ULONG Rsvd1:2; 731 ULONG CapturedSlotPowerLimit:8; 732 ULONG CapturedSlotPowerLimitScale:2; 733 ULONG Rsvd2:4; 734 } DUMMYSTRUCTNAME; 735 ULONG AsULONG; 736} PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER, *PPCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER; 737 738#define PCI_EXPRESS_AER_DEVICE_CONTROL_MASK 0x07; 739 740typedef union _PCI_EXPRESS_DEVICE_CONTROL_REGISTER { 741 _ANONYMOUS_STRUCT struct { 742 USHORT CorrectableErrorEnable:1; 743 USHORT NonFatalErrorEnable:1; 744 USHORT FatalErrorEnable:1; 745 USHORT UnsupportedRequestErrorEnable:1; 746 USHORT EnableRelaxedOrder:1; 747 USHORT MaxPayloadSize:3; 748 USHORT ExtendedTagEnable:1; 749 USHORT PhantomFunctionsEnable:1; 750 USHORT AuxPowerEnable:1; 751 USHORT NoSnoopEnable:1; 752 USHORT MaxReadRequestSize:3; 753 USHORT BridgeConfigRetryEnable:1; 754 } DUMMYSTRUCTNAME; 755 USHORT AsUSHORT; 756} PCI_EXPRESS_DEVICE_CONTROL_REGISTER, *PPCI_EXPRESS_DEVICE_CONTROL_REGISTER; 757 758#define PCI_EXPRESS_AER_DEVICE_STATUS_MASK 0x0F; 759 760typedef union _PCI_EXPRESS_DEVICE_STATUS_REGISTER { 761 _ANONYMOUS_STRUCT struct { 762 USHORT CorrectableErrorDetected:1; 763 USHORT NonFatalErrorDetected:1; 764 USHORT FatalErrorDetected:1; 765 USHORT UnsupportedRequestDetected:1; 766 USHORT AuxPowerDetected:1; 767 USHORT TransactionsPending:1; 768 USHORT Rsvd:10; 769 } DUMMYSTRUCTNAME; 770 USHORT AsUSHORT; 771} PCI_EXPRESS_DEVICE_STATUS_REGISTER, *PPCI_EXPRESS_DEVICE_STATUS_REGISTER; 772 773typedef union _PCI_EXPRESS_LINK_CAPABILITIES_REGISTER { 774 _ANONYMOUS_STRUCT struct { 775 ULONG MaximumLinkSpeed:4; 776 ULONG MaximumLinkWidth:6; 777 ULONG ActiveStatePMSupport:2; 778 ULONG L0sExitLatency:3; 779 ULONG L1ExitLatency:3; 780 ULONG ClockPowerManagement:1; 781 ULONG SurpriseDownErrorReportingCapable:1; 782 ULONG DataLinkLayerActiveReportingCapable:1; 783 ULONG Rsvd:3; 784 ULONG PortNumber:8; 785 } DUMMYSTRUCTNAME; 786 ULONG AsULONG; 787} PCI_EXPRESS_LINK_CAPABILITIES_REGISTER, *PPCI_EXPRESS_LINK_CAPABILITIES_REGISTER; 788 789typedef union _PCI_EXPRESS_LINK_CONTROL_REGISTER { 790 _ANONYMOUS_STRUCT struct { 791 USHORT ActiveStatePMControl:2; 792 USHORT Rsvd1:1; 793 USHORT ReadCompletionBoundary:1; 794 USHORT LinkDisable:1; 795 USHORT RetrainLink:1; 796 USHORT CommonClockConfig:1; 797 USHORT ExtendedSynch:1; 798 USHORT EnableClockPowerManagement:1; 799 USHORT Rsvd2:7; 800 } DUMMYSTRUCTNAME; 801 USHORT AsUSHORT; 802} PCI_EXPRESS_LINK_CONTROL_REGISTER, *PPCI_EXPRESS_LINK_CONTROL_REGISTER; 803 804typedef union _PCI_EXPRESS_LINK_STATUS_REGISTER { 805 _ANONYMOUS_STRUCT struct { 806 USHORT LinkSpeed:4; 807 USHORT LinkWidth:6; 808 USHORT Undefined:1; 809 USHORT LinkTraining:1; 810 USHORT SlotClockConfig:1; 811 USHORT DataLinkLayerActive:1; 812 USHORT Rsvd:2; 813 } DUMMYSTRUCTNAME; 814 USHORT AsUSHORT; 815} PCI_EXPRESS_LINK_STATUS_REGISTER, *PPCI_EXPRESS_LINK_STATUS_REGISTER; 816 817typedef union _PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER { 818 _ANONYMOUS_STRUCT struct { 819 ULONG AttentionButtonPresent:1; 820 ULONG PowerControllerPresent:1; 821 ULONG MRLSensorPresent:1; 822 ULONG AttentionIndicatorPresent:1; 823 ULONG PowerIndicatorPresent:1; 824 ULONG HotPlugSurprise:1; 825 ULONG HotPlugCapable:1; 826 ULONG SlotPowerLimit:8; 827 ULONG SlotPowerLimitScale:2; 828 ULONG ElectromechanicalLockPresent:1; 829 ULONG NoCommandCompletedSupport:1; 830 ULONG PhysicalSlotNumber:13; 831 } DUMMYSTRUCTNAME; 832 ULONG AsULONG; 833} PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER, *PPCI_EXPRESS_SLOT_CAPABILITIES_REGISTER; 834 835typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER { 836 _ANONYMOUS_STRUCT struct { 837 USHORT AttentionButtonEnable:1; 838 USHORT PowerFaultDetectEnable:1; 839 USHORT MRLSensorEnable:1; 840 USHORT PresenceDetectEnable:1; 841 USHORT CommandCompletedEnable:1; 842 USHORT HotPlugInterruptEnable:1; 843 USHORT AttentionIndicatorControl:2; 844 USHORT PowerIndicatorControl:2; 845 USHORT PowerControllerControl:1; 846 USHORT ElectromechanicalLockControl:1; 847 USHORT DataLinkStateChangeEnable:1; 848 USHORT Rsvd:3; 849 } DUMMYSTRUCTNAME; 850 USHORT AsUSHORT; 851} PCI_EXPRESS_SLOT_CONTROL_REGISTER, *PPCI_EXPRESS_SLOT_CONTROL_REGISTER; 852 853typedef union _PCI_EXPRESS_SLOT_STATUS_REGISTER { 854 _ANONYMOUS_STRUCT struct { 855 USHORT AttentionButtonPressed:1; 856 USHORT PowerFaultDetected:1; 857 USHORT MRLSensorChanged:1; 858 USHORT PresenceDetectChanged:1; 859 USHORT CommandCompleted:1; 860 USHORT MRLSensorState:1; 861 USHORT PresenceDetectState:1; 862 USHORT ElectromechanicalLockEngaged:1; 863 USHORT DataLinkStateChanged:1; 864 USHORT Rsvd:7; 865 } DUMMYSTRUCTNAME; 866 USHORT AsUSHORT; 867} PCI_EXPRESS_SLOT_STATUS_REGISTER, *PPCI_EXPRESS_SLOT_STATUS_REGISTER; 868 869typedef union _PCI_EXPRESS_ROOT_CONTROL_REGISTER { 870 _ANONYMOUS_STRUCT struct { 871 USHORT CorrectableSerrEnable:1; 872 USHORT NonFatalSerrEnable:1; 873 USHORT FatalSerrEnable:1; 874 USHORT PMEInterruptEnable:1; 875 USHORT CRSSoftwareVisibilityEnable:1; 876 USHORT Rsvd:11; 877 } DUMMYSTRUCTNAME; 878 USHORT AsUSHORT; 879} PCI_EXPRESS_ROOT_CONTROL_REGISTER, *PPCI_EXPRESS_ROOT_CONTROL_REGISTER; 880 881typedef union _PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER { 882 _ANONYMOUS_STRUCT struct { 883 USHORT CRSSoftwareVisibility:1; 884 USHORT Rsvd:15; 885 } DUMMYSTRUCTNAME; 886 USHORT AsUSHORT; 887} PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER, *PPCI_EXPRESS_ROOT_CAPABILITIES_REGISTER; 888 889typedef union _PCI_EXPRESS_ROOT_STATUS_REGISTER { 890 _ANONYMOUS_STRUCT struct { 891 ULONG PMERequestorId:16; 892 ULONG PMEStatus:1; 893 ULONG PMEPending:1; 894 ULONG Rsvd:14; 895 } DUMMYSTRUCTNAME; 896 ULONG AsULONG; 897} PCI_EXPRESS_ROOT_STATUS_REGISTER, *PPCI_EXPRESS_ROOT_STATUS_REGISTER; 898 899typedef struct _PCI_EXPRESS_CAPABILITY { 900 PCI_CAPABILITIES_HEADER Header; 901 PCI_EXPRESS_CAPABILITIES_REGISTER ExpressCapabilities; 902 PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER DeviceCapabilities; 903 PCI_EXPRESS_DEVICE_CONTROL_REGISTER DeviceControl; 904 PCI_EXPRESS_DEVICE_STATUS_REGISTER DeviceStatus; 905 PCI_EXPRESS_LINK_CAPABILITIES_REGISTER LinkCapabilities; 906 PCI_EXPRESS_LINK_CONTROL_REGISTER LinkControl; 907 PCI_EXPRESS_LINK_STATUS_REGISTER LinkStatus; 908 PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER SlotCapabilities; 909 PCI_EXPRESS_SLOT_CONTROL_REGISTER SlotControl; 910 PCI_EXPRESS_SLOT_STATUS_REGISTER SlotStatus; 911 PCI_EXPRESS_ROOT_CONTROL_REGISTER RootControl; 912 PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER RootCapabilities; 913 PCI_EXPRESS_ROOT_STATUS_REGISTER RootStatus; 914} PCI_EXPRESS_CAPABILITY, *PPCI_EXPRESS_CAPABILITY; 915 916typedef enum { 917 MRLClosed = 0, 918 MRLOpen 919} PCI_EXPRESS_MRL_STATE; 920 921typedef enum { 922 SlotEmpty = 0, 923 CardPresent 924} PCI_EXPRESS_CARD_PRESENCE; 925 926typedef enum { 927 IndicatorOn = 1, 928 IndicatorBlink, 929 IndicatorOff 930} PCI_EXPRESS_INDICATOR_STATE; 931 932typedef enum { 933 PowerOn = 0, 934 PowerOff 935} PCI_EXPRESS_POWER_STATE; 936 937typedef enum { 938 L0sEntrySupport = 1, 939 L0sAndL1EntrySupport = 3 940} PCI_EXPRESS_ASPM_SUPPORT; 941 942typedef enum { 943 L0sAndL1EntryDisabled, 944 L0sEntryEnabled, 945 L1EntryEnabled, 946 L0sAndL1EntryEnabled 947} PCI_EXPRESS_ASPM_CONTROL; 948 949typedef enum { 950 L0s_Below64ns = 0, 951 L0s_64ns_128ns, 952 L0s_128ns_256ns, 953 L0s_256ns_512ns, 954 L0s_512ns_1us, 955 L0s_1us_2us, 956 L0s_2us_4us, 957 L0s_Above4us 958} PCI_EXPRESS_L0s_EXIT_LATENCY; 959 960typedef enum { 961 L1_Below1us = 0, 962 L1_1us_2us, 963 L1_2us_4us, 964 L1_4us_8us, 965 L1_8us_16us, 966 L1_16us_32us, 967 L1_32us_64us, 968 L1_Above64us 969} PCI_EXPRESS_L1_EXIT_LATENCY; 970 971typedef enum { 972 PciExpressEndpoint = 0, 973 PciExpressLegacyEndpoint, 974 PciExpressRootPort = 4, 975 PciExpressUpstreamSwitchPort, 976 PciExpressDownstreamSwitchPort, 977 PciExpressToPciXBridge, 978 PciXToExpressBridge, 979 PciExpressRootComplexIntegratedEndpoint, 980 PciExpressRootComplexEventCollector 981} PCI_EXPRESS_DEVICE_TYPE; 982 983typedef enum { 984 MaxPayload128Bytes = 0, 985 MaxPayload256Bytes, 986 MaxPayload512Bytes, 987 MaxPayload1024Bytes, 988 MaxPayload2048Bytes, 989 MaxPayload4096Bytes 990} PCI_EXPRESS_MAX_PAYLOAD_SIZE; 991 992typedef union _PCI_EXPRESS_PME_REQUESTOR_ID { 993 _ANONYMOUS_STRUCT struct { 994 USHORT FunctionNumber:3; 995 USHORT DeviceNumber:5; 996 USHORT BusNumber:8; 997 } DUMMYSTRUCTNAME; 998 USHORT AsUSHORT; 999} PCI_EXPRESS_PME_REQUESTOR_ID, *PPCI_EXPRESS_PME_REQUESTOR_ID; 1000 1001typedef enum _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE { 1002 ResourceTypeSingle = 0, 1003 ResourceTypeRange, 1004 ResourceTypeExtendedCounterConfiguration, 1005 ResourceTypeOverflow, 1006 ResourceTypeMax 1007} PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE; 1008 1009typedef struct _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR { 1010 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE Type; 1011 ULONG Flags; 1012 union { 1013 ULONG CounterIndex; 1014 ULONG ExtendedRegisterAddress; 1015 struct { 1016 ULONG Begin; 1017 ULONG End; 1018 } Range; 1019 } u; 1020} PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR, *PPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR; 1021 1022typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST { 1023 ULONG Count; 1024 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors[ANYSIZE_ARRAY]; 1025} PHYSICAL_COUNTER_RESOURCE_LIST, *PPHYSICAL_COUNTER_RESOURCE_LIST; 1026 1027typedef VOID 1028(NTAPI *PciPin2Line)( 1029 IN struct _BUS_HANDLER *BusHandler, 1030 IN struct _BUS_HANDLER *RootHandler, 1031 IN PCI_SLOT_NUMBER SlotNumber, 1032 IN PPCI_COMMON_CONFIG PciData); 1033 1034typedef VOID 1035(NTAPI *PciLine2Pin)( 1036 IN struct _BUS_HANDLER *BusHandler, 1037 IN struct _BUS_HANDLER *RootHandler, 1038 IN PCI_SLOT_NUMBER SlotNumber, 1039 IN PPCI_COMMON_CONFIG PciNewData, 1040 IN PPCI_COMMON_CONFIG PciOldData); 1041 1042typedef VOID 1043(NTAPI *PciReadWriteConfig)( 1044 IN struct _BUS_HANDLER *BusHandler, 1045 IN PCI_SLOT_NUMBER Slot, 1046 IN PVOID Buffer, 1047 IN ULONG Offset, 1048 IN ULONG Length); 1049 1050#define PCI_DATA_TAG ' ICP' 1051#define PCI_DATA_VERSION 1 1052 1053typedef struct _PCIBUSDATA { 1054 ULONG Tag; 1055 ULONG Version; 1056 PciReadWriteConfig ReadConfig; 1057 PciReadWriteConfig WriteConfig; 1058 PciPin2Line Pin2Line; 1059 PciLine2Pin Line2Pin; 1060 PCI_SLOT_NUMBER ParentSlot; 1061 PVOID Reserved[4]; 1062} PCIBUSDATA, *PPCIBUSDATA; 1063 1064#ifndef _PCIINTRF_X_ 1065#define _PCIINTRF_X_ 1066 1067typedef ULONG 1068(NTAPI *PCI_READ_WRITE_CONFIG)( 1069 IN PVOID Context, 1070 IN ULONG BusOffset, 1071 IN ULONG Slot, 1072 IN PVOID Buffer, 1073 IN ULONG Offset, 1074 IN ULONG Length); 1075 1076typedef VOID 1077(NTAPI *PCI_PIN_TO_LINE)( 1078 IN PVOID Context, 1079 IN PPCI_COMMON_CONFIG PciData); 1080 1081typedef VOID 1082(NTAPI *PCI_LINE_TO_PIN)( 1083 IN PVOID Context, 1084 IN PPCI_COMMON_CONFIG PciNewData, 1085 IN PPCI_COMMON_CONFIG PciOldData); 1086 1087typedef VOID 1088(NTAPI *PCI_ROOT_BUS_CAPABILITY)( 1089 IN PVOID Context, 1090 OUT PPCI_ROOT_BUS_HARDWARE_CAPABILITY HardwareCapability); 1091 1092typedef VOID 1093(NTAPI *PCI_EXPRESS_WAKE_CONTROL)( 1094 IN PVOID Context, 1095 IN BOOLEAN EnableWake); 1096 1097typedef struct _PCI_BUS_INTERFACE_STANDARD { 1098 USHORT Size; 1099 USHORT Version; 1100 PVOID Context; 1101 PINTERFACE_REFERENCE InterfaceReference; 1102 PINTERFACE_DEREFERENCE InterfaceDereference; 1103 PCI_READ_WRITE_CONFIG ReadConfig; 1104 PCI_READ_WRITE_CONFIG WriteConfig; 1105 PCI_PIN_TO_LINE PinToLine; 1106 PCI_LINE_TO_PIN LineToPin; 1107 PCI_ROOT_BUS_CAPABILITY RootBusCapability; 1108 PCI_EXPRESS_WAKE_CONTROL ExpressWakeControl; 1109} PCI_BUS_INTERFACE_STANDARD, *PPCI_BUS_INTERFACE_STANDARD; 1110 1111#define PCI_BUS_INTERFACE_STANDARD_VERSION 1 1112 1113#endif /* _PCIINTRF_X_ */ 1114 1115#if (NTDDI_VERSION >= NTDDI_WIN7) 1116 1117#define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX 0x00004000 1118#define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX 0x00008000 1119#define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \ 1120 (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \ 1121 FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX) 1122 1123#define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200 1124#define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300 1125#define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300 1126 1127#else 1128 1129#define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 0x00000200 1130#define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 0x00000300 1131#define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 0x00000300 1132 1133#define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 1134#define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 1135#define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 1136 1137#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 1138 1139#define FILE_CHARACTERISTICS_PROPAGATED (FILE_REMOVABLE_MEDIA | \ 1140 FILE_READ_ONLY_DEVICE | \ 1141 FILE_FLOPPY_DISKETTE | \ 1142 FILE_WRITE_ONCE_MEDIA | \ 1143 FILE_DEVICE_SECURE_OPEN) 1144 1145typedef struct _FILE_ALIGNMENT_INFORMATION { 1146 ULONG AlignmentRequirement; 1147} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION; 1148 1149typedef struct _FILE_NAME_INFORMATION { 1150 ULONG FileNameLength; 1151 WCHAR FileName[1]; 1152} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; 1153 1154 1155typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION { 1156 ULONG FileAttributes; 1157 ULONG ReparseTag; 1158} FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION; 1159 1160typedef struct _FILE_DISPOSITION_INFORMATION { 1161 BOOLEAN DeleteFile; 1162} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; 1163 1164typedef struct _FILE_END_OF_FILE_INFORMATION { 1165 LARGE_INTEGER EndOfFile; 1166} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION; 1167 1168typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION { 1169 LARGE_INTEGER ValidDataLength; 1170} FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION; 1171 1172typedef struct _FILE_FS_LABEL_INFORMATION { 1173 ULONG VolumeLabelLength; 1174 WCHAR VolumeLabel[1]; 1175} FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION; 1176 1177typedef struct _FILE_FS_VOLUME_INFORMATION { 1178 LARGE_INTEGER VolumeCreationTime; 1179 ULONG VolumeSerialNumber; 1180 ULONG VolumeLabelLength; 1181 BOOLEAN SupportsObjects; 1182 WCHAR VolumeLabel[1]; 1183} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION; 1184 1185typedef struct _FILE_FS_SIZE_INFORMATION { 1186 LARGE_INTEGER TotalAllocationUnits; 1187 LARGE_INTEGER AvailableAllocationUnits; 1188 ULONG SectorsPerAllocationUnit; 1189 ULONG BytesPerSector; 1190} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION; 1191 1192typedef struct _FILE_FS_FULL_SIZE_INFORMATION { 1193 LARGE_INTEGER TotalAllocationUnits; 1194 LARGE_INTEGER CallerAvailableAllocationUnits; 1195 LARGE_INTEGER ActualAvailableAllocationUnits; 1196 ULONG SectorsPerAllocationUnit; 1197 ULONG BytesPerSector; 1198} FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION; 1199 1200typedef struct _FILE_FS_OBJECTID_INFORMATION { 1201 UCHAR ObjectId[16]; 1202 UCHAR ExtendedInfo[48]; 1203} FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION; 1204 1205typedef union _FILE_SEGMENT_ELEMENT { 1206 PVOID64 Buffer; 1207 ULONGLONG Alignment; 1208}FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT; 1209 1210#define IOCTL_AVIO_ALLOCATE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 1211#define IOCTL_AVIO_FREE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 1212#define IOCTL_AVIO_MODIFY_STREAM CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 1213 1214typedef enum _BUS_DATA_TYPE { 1215 ConfigurationSpaceUndefined = -1, 1216 Cmos, 1217 EisaConfiguration, 1218 Pos, 1219 CbusConfiguration, 1220 PCIConfiguration, 1221 VMEConfiguration, 1222 NuBusConfiguration, 1223 PCMCIAConfiguration, 1224 MPIConfiguration, 1225 MPSAConfiguration, 1226 PNPISAConfiguration, 1227 SgiInternalConfiguration, 1228 MaximumBusDataType 1229} BUS_DATA_TYPE, *PBUS_DATA_TYPE; 1230 1231/* Some Server 2003 DDK definitions */ 1232#define PCI_INT_ROUTE_INTRF_STANDARD_VER 1 1233 1234typedef NTSTATUS 1235(NTAPI *PLEGACY_DEVICE_DETECTION_HANDLER)( 1236 IN PVOID Context, 1237 IN INTERFACE_TYPE LegacyBusType, 1238 IN ULONG BusNumber, 1239 IN ULONG SlotNumber, 1240 OUT PDEVICE_OBJECT *PhysicalDeviceObject); 1241 1242typedef struct _ROUTING_TOKEN { 1243 PVOID LinkNode; 1244 ULONG StaticVector; 1245 UCHAR Flags; 1246} ROUTING_TOKEN, *PROUTING_TOKEN; 1247 1248typedef NTSTATUS 1249(NTAPI *PGET_INTERRUPT_ROUTING)( 1250 IN PDEVICE_OBJECT Pdo, 1251 OUT ULONG *Bus, 1252 OUT ULONG *PciSlot, 1253 OUT UCHAR *InterruptLine, 1254 OUT UCHAR *InterruptPin, 1255 OUT UCHAR *ClassCode, 1256 OUT UCHAR *SubClassCode, 1257 OUT PDEVICE_OBJECT *ParentPdo, 1258 OUT ROUTING_TOKEN *RoutingToken, 1259 OUT UCHAR *Flags); 1260 1261typedef NTSTATUS 1262(NTAPI *PSET_INTERRUPT_ROUTING_TOKEN)( 1263 IN PDEVICE_OBJECT Pdo, 1264 IN PROUTING_TOKEN RoutingToken); 1265 1266typedef VOID 1267(NTAPI *PUPDATE_INTERRUPT_LINE)( 1268 IN PDEVICE_OBJECT Pdo, 1269 IN UCHAR LineRegister); 1270 1271typedef struct _INT_ROUTE_INTERFACE_STANDARD { 1272 USHORT Size; 1273 USHORT Version; 1274 PVOID Context; 1275 PINTERFACE_REFERENCE InterfaceReference; 1276 PINTERFACE_DEREFERENCE InterfaceDereference; 1277 PGET_INTERRUPT_ROUTING GetInterruptRouting; 1278 PSET_INTERRUPT_ROUTING_TOKEN SetInterruptRoutingToken; 1279 PUPDATE_INTERRUPT_LINE UpdateInterruptLine; 1280} INT_ROUTE_INTERFACE_STANDARD, *PINT_ROUTE_INTERFACE_STANDARD; 1281 1282typedef struct _LEGACY_DEVICE_DETECTION_INTERFACE { 1283 USHORT Size; 1284 USHORT Version; 1285 PVOID Context; 1286 PINTERFACE_REFERENCE InterfaceReference; 1287 PINTERFACE_DEREFERENCE InterfaceDereference; 1288 PLEGACY_DEVICE_DETECTION_HANDLER LegacyDeviceDetection; 1289} LEGACY_DEVICE_DETECTION_INTERFACE, *PLEGACY_DEVICE_DETECTION_INTERFACE; 1290 1291/* FIXME : These definitions don't exist in public headers */ 1292 1293#define PCI_CB_INTRF_VERSION 1 1294#define PCI_PME_INTRF_STANDARD_VER 1 1295#define PNP_LOCATION_INTERFACE_VERSION 1 1296 1297DEFINE_GUID(GUID_PCI_CARDBUS_INTERFACE_PRIVATE, 0xcca82f31, 0x54d6, 0x11d1, 0x82, 0x24, 0x00, 0xa0, 0xc9, 0x32, 0x43, 0x85); 1298DEFINE_GUID(GUID_PCI_PME_INTERFACE, 0xaac7e6ac, 0xbb0b, 0x11d2, 0xb4, 0x84, 0x00, 0xc0, 0x4f, 0x72, 0xde, 0x8b); 1299 1300typedef NTSTATUS 1301(NTAPI *PCARDBUSADD)( 1302 IN PDEVICE_OBJECT DeviceObject, 1303 IN OUT PVOID *DeviceContext); 1304 1305typedef NTSTATUS 1306(NTAPI *PCARDBUSDELETE)( 1307 IN PVOID DeviceContext); 1308 1309typedef NTSTATUS 1310(NTAPI *PCARDBUSPCIDISPATCH)( 1311 IN PVOID DeviceContext, 1312 IN PIRP Irp); 1313 1314typedef VOID 1315(NTAPI *PPME_SET_PME_ENABLE)( 1316 IN PDEVICE_OBJECT Pdo, 1317 IN BOOLEAN PmeEnable); 1318 1319typedef VOID 1320(NTAPI *PPME_CLEAR_PME_STATUS)( 1321 IN PDEVICE_OBJECT Pdo); 1322 1323typedef VOID 1324(NTAPI *PPME_GET_INFORMATION)( 1325 IN PDEVICE_OBJECT Pdo, 1326 OUT PBOOLEAN PmeCapable, 1327 OUT PBOOLEAN PmeStatus, 1328 OUT PBOOLEAN PmeEnable); 1329 1330typedef struct _PCI_CARDBUS_INTERFACE_PRIVATE { 1331 USHORT Size; 1332 USHORT Version; 1333 PVOID Context; 1334 PINTERFACE_REFERENCE InterfaceReference; 1335 PINTERFACE_DEREFERENCE InterfaceDereference; 1336 PDRIVER_OBJECT DriverObject; 1337 PCARDBUSADD AddCardBus; 1338 PCARDBUSDELETE DeleteCardBus; 1339 PCARDBUSPCIDISPATCH DispatchPnp; 1340} PCI_CARDBUS_INTERFACE_PRIVATE, *PPCI_CARDBUS_INTERFACE_PRIVATE; 1341 1342typedef struct _PCI_PME_INTERFACE { 1343 USHORT Size; 1344 USHORT Version; 1345 PVOID Context; 1346 PINTERFACE_REFERENCE InterfaceReference; 1347 PINTERFACE_DEREFERENCE InterfaceDereference; 1348 PPME_GET_INFORMATION GetPmeInformation; 1349 PPME_CLEAR_PME_STATUS ClearPmeStatus; 1350 PPME_SET_PME_ENABLE UpdateEnable; 1351} PCI_PME_INTERFACE, *PPCI_PME_INTERFACE; 1352 1353/* Hardware Abstraction Layer Types */ 1354 1355typedef BOOLEAN 1356(NTAPI *PHAL_RESET_DISPLAY_PARAMETERS)( 1357 IN ULONG Columns, 1358 IN ULONG Rows); 1359 1360typedef PBUS_HANDLER 1361(FASTCALL *pHalHandlerForBus)( 1362 IN INTERFACE_TYPE InterfaceType, 1363 IN ULONG BusNumber); 1364 1365typedef VOID 1366(FASTCALL *pHalReferenceBusHandler)( 1367 IN PBUS_HANDLER BusHandler); 1368 1369typedef enum _HAL_QUERY_INFORMATION_CLASS { 1370 HalInstalledBusInformation, 1371 HalProfileSourceInformation, 1372 HalInformationClassUnused1, 1373 HalPowerInformation, 1374 HalProcessorSpeedInformation, 1375 HalCallbackInformation, 1376 HalMapRegisterInformation, 1377 HalMcaLogInformation, 1378 HalFrameBufferCachingInformation, 1379 HalDisplayBiosInformation, 1380 HalProcessorFeatureInformation, 1381 HalNumaTopologyInterface, 1382 HalErrorInformation, 1383 HalCmcLogInformation, 1384 HalCpeLogInformation, 1385 HalQueryMcaInterface, 1386 HalQueryAMLIIllegalIOPortAddresses, 1387 HalQueryMaxHotPlugMemoryAddress, 1388 HalPartitionIpiInterface, 1389 HalPlatformInformation, 1390 HalQueryProfileSourceList, 1391 HalInitLogInformation, 1392 HalFrequencyInformation, 1393 HalProcessorBrandString, 1394 HalHypervisorInformation, 1395 HalPlatformTimerInformation, 1396 HalAcpiAuditInformation 1397} HAL_QUERY_INFORMATION_CLASS, *PHAL_QUERY_INFORMATION_CLASS; 1398 1399typedef enum _HAL_SET_INFORMATION_CLASS { 1400 HalProfileSourceInterval, 1401 HalProfileSourceInterruptHandler, 1402 HalMcaRegisterDriver, 1403 HalKernelErrorHandler, 1404 HalCmcRegisterDriver, 1405 HalCpeRegisterDriver, 1406 HalMcaLog, 1407 HalCmcLog, 1408 HalCpeLog, 1409 HalGenerateCmcInterrupt, 1410 HalProfileSourceTimerHandler, 1411 HalEnlightenment, 1412 HalProfileDpgoSourceInterruptHandler 1413} HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS; 1414 1415typedef NTSTATUS 1416(NTAPI *pHalQuerySystemInformation)( 1417 IN HAL_QUERY_INFORMATION_CLASS InformationClass, 1418 IN ULONG BufferSize, 1419 IN OUT PVOID Buffer, 1420 OUT PULONG ReturnedLength); 1421 1422typedef NTSTATUS 1423(NTAPI *pHalSetSystemInformation)( 1424 IN HAL_SET_INFORMATION_CLASS InformationClass, 1425 IN ULONG BufferSize, 1426 IN PVOID Buffer); 1427 1428typedef VOID 1429(FASTCALL *pHalExamineMBR)( 1430 IN PDEVICE_OBJECT DeviceObject, 1431 IN ULONG SectorSize, 1432 IN ULONG MBRTypeIdentifier, 1433 OUT PVOID *Buffer); 1434 1435typedef NTSTATUS 1436(FASTCALL *pHalIoReadPartitionTable)( 1437 IN PDEVICE_OBJECT DeviceObject, 1438 IN ULONG SectorSize, 1439 IN BOOLEAN ReturnRecognizedPartitions, 1440 OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer); 1441 1442typedef NTSTATUS 1443(FASTCALL *pHalIoSetPartitionInformation)( 1444 IN PDEVICE_OBJECT DeviceObject, 1445 IN ULONG SectorSize, 1446 IN ULONG PartitionNumber, 1447 IN ULONG PartitionType); 1448 1449typedef NTSTATUS 1450(FASTCALL *pHalIoWritePartitionTable)( 1451 IN PDEVICE_OBJECT DeviceObject, 1452 IN ULONG SectorSize, 1453 IN ULONG SectorsPerTrack, 1454 IN ULONG NumberOfHeads, 1455 IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer); 1456 1457typedef NTSTATUS 1458(NTAPI *pHalQueryBusSlots)( 1459 IN PBUS_HANDLER BusHandler, 1460 IN ULONG BufferSize, 1461 OUT PULONG SlotNumbers, 1462 OUT PULONG ReturnedLength); 1463 1464typedef NTSTATUS 1465(NTAPI *pHalInitPnpDriver)( 1466 VOID); 1467 1468typedef struct _PM_DISPATCH_TABLE { 1469 ULONG Signature; 1470 ULONG Version; 1471 PVOID Function[1]; 1472} PM_DISPATCH_TABLE, *PPM_DISPATCH_TABLE; 1473 1474typedef NTSTATUS 1475(NTAPI *pHalInitPowerManagement)( 1476 IN PPM_DISPATCH_TABLE PmDriverDispatchTable, 1477 OUT PPM_DISPATCH_TABLE *PmHalDispatchTable); 1478 1479typedef struct _DMA_ADAPTER* 1480(NTAPI *pHalGetDmaAdapter)( 1481 IN PVOID Context, 1482 IN struct _DEVICE_DESCRIPTION *DeviceDescriptor, 1483 OUT PULONG NumberOfMapRegisters); 1484 1485typedef NTSTATUS 1486(NTAPI *pHalGetInterruptTranslator)( 1487 IN INTERFACE_TYPE ParentInterfaceType, 1488 IN ULONG ParentBusNumber, 1489 IN INTERFACE_TYPE BridgeInterfaceType, 1490 IN USHORT Size, 1491 IN USHORT Version, 1492 OUT PTRANSLATOR_INTERFACE Translator, 1493 OUT PULONG BridgeBusNumber); 1494 1495typedef NTSTATUS 1496(NTAPI *pHalStartMirroring)( 1497 VOID); 1498 1499typedef NTSTATUS 1500(NTAPI *pHalEndMirroring)( 1501 IN ULONG PassNumber); 1502 1503typedef NTSTATUS 1504(NTAPI *pHalMirrorPhysicalMemory)( 1505 IN PHYSICAL_ADDRESS PhysicalAddress, 1506 IN LARGE_INTEGER NumberOfBytes); 1507 1508typedef NTSTATUS 1509(NTAPI *pHalMirrorVerify)( 1510 IN PHYSICAL_ADDRESS PhysicalAddress, 1511 IN LARGE_INTEGER NumberOfBytes); 1512 1513typedef BOOLEAN 1514(NTAPI *pHalTranslateBusAddress)( 1515 IN INTERFACE_TYPE InterfaceType, 1516 IN ULONG BusNumber, 1517 IN PHYSICAL_ADDRESS BusAddress, 1518 IN OUT PULONG AddressSpace, 1519 OUT PPHYSICAL_ADDRESS TranslatedAddress); 1520 1521typedef NTSTATUS 1522(NTAPI *pHalAssignSlotResources)( 1523 IN PUNICODE_STRING RegistryPath, 1524 IN PUNICODE_STRING DriverClassName OPTIONAL, 1525 IN PDRIVER_OBJECT DriverObject, 1526 IN PDEVICE_OBJECT DeviceObject, 1527 IN INTERFACE_TYPE BusType, 1528 IN ULONG BusNumber, 1529 IN ULONG SlotNumber, 1530 IN OUT PCM_RESOURCE_LIST *AllocatedResources); 1531 1532typedef VOID 1533(NTAPI *pHalHaltSystem)( 1534 VOID); 1535 1536typedef BOOLEAN 1537(NTAPI *pHalResetDisplay)( 1538 VOID); 1539 1540typedef struct _MAP_REGISTER_ENTRY { 1541 PVOID MapRegister; 1542 BOOLEAN WriteToDevice; 1543} MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY; 1544 1545typedef UCHAR 1546(NTAPI *pHalVectorToIDTEntry)( 1547 ULONG Vector); 1548 1549typedef BOOLEAN 1550(NTAPI *pHalFindBusAddressTranslation)( 1551 IN PHYSICAL_ADDRESS BusAddress, 1552 IN OUT PULONG AddressSpace, 1553 OUT PPHYSICAL_ADDRESS TranslatedAddress, 1554 IN OUT PULONG_PTR Context, 1555 IN BOOLEAN NextBus); 1556 1557typedef VOID 1558(NTAPI *pHalEndOfBoot)( 1559 VOID); 1560 1561typedef PVOID 1562(NTAPI *pHalGetAcpiTable)( 1563 IN ULONG Signature, 1564 IN PCSTR OemId OPTIONAL, 1565 IN PCSTR OemTableId OPTIONAL); 1566 1567#if defined(_IA64_) 1568typedef NTSTATUS 1569(*pHalGetErrorCapList)( 1570 IN OUT PULONG CapsListLength, 1571 IN OUT PUCHAR ErrorCapList); 1572 1573typedef NTSTATUS 1574(*pHalInjectError)( 1575 IN ULONG BufferLength, 1576 IN PUCHAR Buffer); 1577#endif 1578 1579typedef VOID 1580(NTAPI *PCI_ERROR_HANDLER_CALLBACK)( 1581 VOID); 1582 1583typedef VOID 1584(NTAPI *pHalSetPciErrorHandlerCallback)( 1585 IN PCI_ERROR_HANDLER_CALLBACK Callback); 1586 1587#if 1 /* Not present in WDK 7600 */ 1588typedef VOID 1589(FASTCALL *pHalIoAssignDriveLetters)( 1590 IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock, 1591 IN PSTRING NtDeviceName, 1592 OUT PUCHAR NtSystemPath, 1593 OUT PSTRING NtSystemPathString); 1594#endif 1595 1596typedef struct { 1597 ULONG Version; 1598 pHalQuerySystemInformation HalQuerySystemInformation; 1599 pHalSetSystemInformation HalSetSystemInformation; 1600 pHalQueryBusSlots HalQueryBusSlots; 1601 ULONG Spare1; 1602 pHalExamineMBR HalExamineMBR; 1603#if 1 /* Not present in WDK 7600 */ 1604 pHalIoAssignDriveLetters HalIoAssignDriveLetters; 1605#endif 1606 pHalIoReadPartitionTable HalIoReadPartitionTable; 1607 pHalIoSetPartitionInformation HalIoSetPartitionInformation; 1608 pHalIoWritePartitionTable HalIoWritePartitionTable; 1609 pHalHandlerForBus HalReferenceHandlerForBus; 1610 pHalReferenceBusHandler HalReferenceBusHandler; 1611 pHalReferenceBusHandler HalDereferenceBusHandler; 1612 pHalInitPnpDriver HalInitPnpDriver; 1613 pHalInitPowerManagement HalInitPowerManagement; 1614 pHalGetDmaAdapter HalGetDmaAdapter; 1615 pHalGetInterruptTranslator HalGetInterruptTranslator; 1616 pHalStartMirroring HalStartMirroring; 1617 pHalEndMirroring HalEndMirroring; 1618 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory; 1619 pHalEndOfBoot HalEndOfBoot; 1620 pHalMirrorVerify HalMirrorVerify; 1621 pHalGetAcpiTable HalGetCachedAcpiTable; 1622 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback; 1623#if defined(_IA64_) 1624 pHalGetErrorCapList HalGetErrorCapList; 1625 pHalInjectError HalInjectError; 1626#endif 1627} HAL_DISPATCH, *PHAL_DISPATCH; 1628 1629/* GCC/MSVC and WDK compatible declaration */ 1630extern NTKERNELAPI HAL_DISPATCH HalDispatchTable; 1631 1632#if defined(_NTOSKRNL_) || defined(_BLDR_) 1633#define HALDISPATCH (&HalDispatchTable) 1634#else 1635/* This is a WDK compatibility definition */ 1636#define HalDispatchTable (&HalDispatchTable) 1637#define HALDISPATCH HalDispatchTable 1638#endif 1639 1640#define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */ 1641#define HalDispatchTableVersion HALDISPATCH->Version 1642#define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation 1643#define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation 1644#define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots 1645#define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus 1646#define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler 1647#define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler 1648#define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver 1649#define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement 1650#define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter 1651#define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator 1652#define HalStartMirroring HALDISPATCH->HalStartMirroring 1653#define HalEndMirroring HALDISPATCH->HalEndMirroring 1654#define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory 1655#define HalEndOfBoot HALDISPATCH->HalEndOfBoot 1656#define HalMirrorVerify HALDISPATCH->HalMirrorVerify 1657#define HalGetCachedAcpiTable HALDISPATCH->HalGetCachedAcpiTable 1658#define HalSetPciErrorHandlerCallback HALDISPATCH->HalSetPciErrorHandlerCallback 1659#if defined(_IA64_) 1660#define HalGetErrorCapList HALDISPATCH->HalGetErrorCapList 1661#define HalInjectError HALDISPATCH->HalInjectError 1662#endif 1663 1664typedef struct _HAL_BUS_INFORMATION { 1665 INTERFACE_TYPE BusType; 1666 BUS_DATA_TYPE ConfigurationType; 1667 ULONG BusNumber; 1668 ULONG Reserved; 1669} HAL_BUS_INFORMATION, *PHAL_BUS_INFORMATION; 1670 1671typedef struct _HAL_PROFILE_SOURCE_INFORMATION { 1672 KPROFILE_SOURCE Source; 1673 BOOLEAN Supported; 1674 ULONG Interval; 1675} HAL_PROFILE_SOURCE_INFORMATION, *PHAL_PROFILE_SOURCE_INFORMATION; 1676 1677typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX { 1678 KPROFILE_SOURCE Source; 1679 BOOLEAN Supported; 1680 ULONG_PTR Interval; 1681 ULONG_PTR DefInterval; 1682 ULONG_PTR MaxInterval; 1683 ULONG_PTR MinInterval; 1684} HAL_PROFILE_SOURCE_INFORMATION_EX, *PHAL_PROFILE_SOURCE_INFORMATION_EX; 1685 1686typedef struct _HAL_PROFILE_SOURCE_INTERVAL { 1687 KPROFILE_SOURCE Source; 1688 ULONG_PTR Interval; 1689} HAL_PROFILE_SOURCE_INTERVAL, *PHAL_PROFILE_SOURCE_INTERVAL; 1690 1691typedef struct _HAL_PROFILE_SOURCE_LIST { 1692 KPROFILE_SOURCE Source; 1693 PWSTR Description; 1694} HAL_PROFILE_SOURCE_LIST, *PHAL_PROFILE_SOURCE_LIST; 1695 1696typedef enum _HAL_DISPLAY_BIOS_INFORMATION { 1697 HalDisplayInt10Bios, 1698 HalDisplayEmulatedBios, 1699 HalDisplayNoBios 1700} HAL_DISPLAY_BIOS_INFORMATION, *PHAL_DISPLAY_BIOS_INFORMATION; 1701 1702typedef struct _HAL_POWER_INFORMATION { 1703 ULONG TBD; 1704} HAL_POWER_INFORMATION, *PHAL_POWER_INFORMATION; 1705 1706typedef struct _HAL_PROCESSOR_SPEED_INFO { 1707 ULONG ProcessorSpeed; 1708} HAL_PROCESSOR_SPEED_INFORMATION, *PHAL_PROCESSOR_SPEED_INFORMATION; 1709 1710typedef struct _HAL_CALLBACKS { 1711 PCALLBACK_OBJECT SetSystemInformation; 1712 PCALLBACK_OBJECT BusCheck; 1713} HAL_CALLBACKS, *PHAL_CALLBACKS; 1714 1715typedef struct _HAL_PROCESSOR_FEATURE { 1716 ULONG UsableFeatureBits; 1717} HAL_PROCESSOR_FEATURE; 1718 1719typedef NTSTATUS 1720(NTAPI *PHALIOREADWRITEHANDLER)( 1721 IN BOOLEAN fRead, 1722 IN ULONG dwAddr, 1723 IN ULONG dwSize, 1724 IN OUT PULONG pdwData); 1725 1726typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST { 1727 ULONG BadAddrBegin; 1728 ULONG BadAddrSize; 1729 ULONG OSVersionTrigger; 1730 PHALIOREADWRITEHANDLER IOHandler; 1731} HAL_AMLI_BAD_IO_ADDRESS_LIST, *PHAL_AMLI_BAD_IO_ADDRESS_LIST; 1732 1733#if defined(_X86_) || defined(_IA64_) || defined(_AMD64_) 1734 1735typedef VOID 1736(NTAPI *PHALMCAINTERFACELOCK)( 1737 VOID); 1738 1739typedef VOID 1740(NTAPI *PHALMCAINTERFACEUNLOCK)( 1741 VOID); 1742 1743typedef NTSTATUS 1744(NTAPI *PHALMCAINTERFACEREADREGISTER)( 1745 IN UCHAR BankNumber, 1746 IN OUT PVOID Exception); 1747 1748typedef struct _HAL_MCA_INTERFACE { 1749 PHALMCAINTERFACELOCK Lock; 1750 PHALMCAINTERFACEUNLOCK Unlock; 1751 PHALMCAINTERFACEREADREGISTER ReadRegister; 1752} HAL_MCA_INTERFACE; 1753 1754typedef enum { 1755 ApicDestinationModePhysical = 1, 1756 ApicDestinationModeLogicalFlat, 1757 ApicDestinationModeLogicalClustered, 1758 ApicDestinationModeUnknown 1759} HAL_APIC_DESTINATION_MODE, *PHAL_APIC_DESTINATION_MODE; 1760 1761#if defined(_AMD64_) 1762 1763struct _KTRAP_FRAME; 1764struct _KEXCEPTION_FRAME; 1765 1766typedef ERROR_SEVERITY 1767(NTAPI *PDRIVER_EXCPTN_CALLBACK)( 1768 IN PVOID Context, 1769 IN struct _KTRAP_FRAME *TrapFrame, 1770 IN struct _KEXCEPTION_FRAME *ExceptionFrame, 1771 IN PMCA_EXCEPTION Exception); 1772 1773#endif 1774 1775#if defined(_X86_) || defined(_IA64_) 1776typedef 1777#if defined(_IA64_) 1778ERROR_SEVERITY 1779#else 1780VOID 1781#endif 1782(NTAPI *PDRIVER_EXCPTN_CALLBACK)( 1783 IN PVOID Context, 1784 IN PMCA_EXCEPTION BankLog); 1785#endif 1786 1787typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK; 1788 1789typedef struct _MCA_DRIVER_INFO { 1790 PDRIVER_MCA_EXCEPTION_CALLBACK ExceptionCallback; 1791 PKDEFERRED_ROUTINE DpcCallback; 1792 PVOID DeviceContext; 1793} MCA_DRIVER_INFO, *PMCA_DRIVER_INFO; 1794 1795typedef struct _HAL_ERROR_INFO { 1796 ULONG Version; 1797 ULONG InitMaxSize; 1798 ULONG McaMaxSize; 1799 ULONG McaPreviousEventsCount; 1800 ULONG McaCorrectedEventsCount; 1801 ULONG McaKernelDeliveryFails; 1802 ULONG McaDriverDpcQueueFails; 1803 ULONG McaReserved; 1804 ULONG CmcMaxSize; 1805 ULONG CmcPollingInterval; 1806 ULONG CmcInterruptsCount; 1807 ULONG CmcKernelDeliveryFails; 1808 ULONG CmcDriverDpcQueueFails; 1809 ULONG CmcGetStateFails; 1810 ULONG CmcClearStateFails; 1811 ULONG CmcReserved; 1812 ULONGLONG CmcLogId; 1813 ULONG CpeMaxSize; 1814 ULONG CpePollingInterval; 1815 ULONG CpeInterruptsCount; 1816 ULONG CpeKernelDeliveryFails; 1817 ULONG CpeDriverDpcQueueFails; 1818 ULONG CpeGetStateFails; 1819 ULONG CpeClearStateFails; 1820 ULONG CpeInterruptSources; 1821 ULONGLONG CpeLogId; 1822 ULONGLONG KernelReserved[4]; 1823} HAL_ERROR_INFO, *PHAL_ERROR_INFO; 1824 1825#define HAL_MCE_INTERRUPTS_BASED ((ULONG)-1) 1826#define HAL_MCE_DISABLED ((ULONG)0) 1827 1828#define HAL_CMC_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED 1829#define HAL_CMC_DISABLED HAL_MCE_DISABLED 1830 1831#define HAL_CPE_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED 1832#define HAL_CPE_DISABLED HAL_MCE_DISABLED 1833 1834#define HAL_MCA_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED 1835#define HAL_MCA_DISABLED HAL_MCE_DISABLED 1836 1837typedef VOID 1838(NTAPI *PDRIVER_CMC_EXCEPTION_CALLBACK)( 1839 IN PVOID Context, 1840 IN PCMC_EXCEPTION CmcLog); 1841 1842typedef VOID 1843(NTAPI *PDRIVER_CPE_EXCEPTION_CALLBACK)( 1844 IN PVOID Context, 1845 IN PCPE_EXCEPTION CmcLog); 1846 1847typedef struct _CMC_DRIVER_INFO { 1848 PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback; 1849 PKDEFERRED_ROUTINE DpcCallback; 1850 PVOID DeviceContext; 1851} CMC_DRIVER_INFO, *PCMC_DRIVER_INFO; 1852 1853typedef struct _CPE_DRIVER_INFO { 1854 PDRIVER_CPE_EXCEPTION_CALLBACK ExceptionCallback; 1855 PKDEFERRED_ROUTINE DpcCallback; 1856 PVOID DeviceContext; 1857} CPE_DRIVER_INFO, *PCPE_DRIVER_INFO; 1858 1859#endif // defined(_X86_) || defined(_IA64_) || defined(_AMD64_) 1860 1861#if defined(_IA64_) 1862 1863typedef NTSTATUS 1864(*HALSENDCROSSPARTITIONIPI)( 1865 IN USHORT ProcessorID, 1866 IN UCHAR HardwareVector); 1867 1868typedef NTSTATUS 1869(*HALRESERVECROSSPARTITIONINTERRUPTVECTOR)( 1870 OUT PULONG Vector, 1871 OUT PKIRQL Irql, 1872 IN OUT PGROUP_AFFINITY Affinity, 1873 OUT PUCHAR HardwareVector); 1874 1875typedef VOID 1876(*HALFREECROSSPARTITIONINTERRUPTVECTOR)( 1877 IN ULONG Vector, 1878 IN PGROUP_AFFINITY Affinity); 1879 1880typedef struct _HAL_CROSS_PARTITION_IPI_INTERFACE { 1881 HALSENDCROSSPARTITIONIPI HalSendCrossPartitionIpi; 1882 HALRESERVECROSSPARTITIONINTERRUPTVECTOR HalReserveCrossPartitionInterruptVector; 1883 HALFREECROSSPARTITIONINTERRUPTVECTOR HalFreeCrossPartitionInterruptVector; 1884} HAL_CROSS_PARTITION_IPI_INTERFACE; 1885 1886#define HAL_CROSS_PARTITION_IPI_INTERFACE_MINIMUM_SIZE \ 1887 FIELD_OFFSET(HAL_CROSS_PARTITION_IPI_INTERFACE, \ 1888 HalFreeCrossPartitionInterruptVector) 1889 1890#endif /* defined(_IA64_) */ 1891 1892typedef struct _HAL_PLATFORM_INFORMATION { 1893 ULONG PlatformFlags; 1894} HAL_PLATFORM_INFORMATION, *PHAL_PLATFORM_INFORMATION; 1895 1896#define HAL_PLATFORM_DISABLE_WRITE_COMBINING 0x01L 1897#define HAL_PLATFORM_DISABLE_PTCG 0x04L 1898#define HAL_PLATFORM_DISABLE_UC_MAIN_MEMORY 0x08L 1899#define HAL_PLATFORM_ENABLE_WRITE_COMBINING_MMIO 0x10L 1900#define HAL_PLATFORM_ACPI_TABLES_CACHED 0x20L 1901 1902/****************************************************************************** 1903 * Kernel Types * 1904 ******************************************************************************/ 1905 1906#define NX_SUPPORT_POLICY_ALWAYSOFF 0 1907#define NX_SUPPORT_POLICY_ALWAYSON 1 1908#define NX_SUPPORT_POLICY_OPTIN 2 1909#define NX_SUPPORT_POLICY_OPTOUT 3 1910 1911typedef VOID 1912(NTAPI *PEXPAND_STACK_CALLOUT)( 1913 IN PVOID Parameter OPTIONAL); 1914 1915typedef VOID 1916(NTAPI *PTIMER_APC_ROUTINE)( 1917 IN PVOID TimerContext, 1918 IN ULONG TimerLowValue, 1919 IN LONG TimerHighValue); 1920 1921typedef enum _TIMER_SET_INFORMATION_CLASS { 1922 TimerSetCoalescableTimer, 1923 MaxTimerInfoClass 1924} TIMER_SET_INFORMATION_CLASS; 1925 1926#if (NTDDI_VERSION >= NTDDI_WIN7) 1927typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO { 1928 IN LARGE_INTEGER DueTime; 1929 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL; 1930 IN PVOID TimerContext OPTIONAL; 1931 IN struct _COUNTED_REASON_CONTEXT *WakeContext OPTIONAL; 1932 IN ULONG Period OPTIONAL; 1933 IN ULONG TolerableDelay; 1934 OUT PBOOLEAN PreviousState OPTIONAL; 1935} TIMER_SET_COALESCABLE_TIMER_INFO, *PTIMER_SET_COALESCABLE_TIMER_INFO; 1936#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 1937 1938#define XSTATE_LEGACY_FLOATING_POINT 0 1939#define XSTATE_LEGACY_SSE 1 1940#define XSTATE_GSSE 2 1941 1942#define XSTATE_MASK_LEGACY_FLOATING_POINT (1i64 << (XSTATE_LEGACY_FLOATING_POINT)) 1943#define XSTATE_MASK_LEGACY_SSE (1i64 << (XSTATE_LEGACY_SSE)) 1944#define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE) 1945#define XSTATE_MASK_GSSE (1i64 << (XSTATE_GSSE)) 1946 1947#define MAXIMUM_XSTATE_FEATURES 64 1948 1949typedef struct _XSTATE_FEATURE { 1950 ULONG Offset; 1951 ULONG Size; 1952} XSTATE_FEATURE, *PXSTATE_FEATURE; 1953 1954typedef struct _XSTATE_CONFIGURATION { 1955 ULONG64 EnabledFeatures; 1956 ULONG Size; 1957 ULONG OptimizedSave:1; 1958 XSTATE_FEATURE Features[MAXIMUM_XSTATE_FEATURES]; 1959} XSTATE_CONFIGURATION, *PXSTATE_CONFIGURATION; 1960 1961#define MAX_WOW64_SHARED_ENTRIES 16 1962 1963typedef struct _KUSER_SHARED_DATA { 1964 ULONG TickCountLowDeprecated; 1965 ULONG TickCountMultiplier; 1966 volatile KSYSTEM_TIME InterruptTime; 1967 volatile KSYSTEM_TIME SystemTime; 1968 volatile KSYSTEM_TIME TimeZoneBias; 1969 USHORT ImageNumberLow; 1970 USHORT ImageNumberHigh; 1971 WCHAR NtSystemRoot[260]; 1972 ULONG MaxStackTraceDepth; 1973 ULONG CryptoExponent; 1974 ULONG TimeZoneId; 1975 ULONG LargePageMinimum; 1976 ULONG Reserved2[7]; 1977 NT_PRODUCT_TYPE NtProductType; 1978 BOOLEAN ProductTypeIsValid; 1979 ULONG NtMajorVersion; 1980 ULONG NtMinorVersion; 1981 BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX]; 1982 ULONG Reserved1; 1983 ULONG Reserved3; 1984 volatile ULONG TimeSlip; 1985 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture; 1986 ULONG AltArchitecturePad[1]; 1987 LARGE_INTEGER SystemExpirationDate; 1988 ULONG SuiteMask; 1989 BOOLEAN KdDebuggerEnabled; 1990#if (NTDDI_VERSION >= NTDDI_WINXPSP2) 1991 UCHAR NXSupportPolicy; 1992#endif 1993 volatile ULONG ActiveConsoleId; 1994 volatile ULONG DismountCount; 1995 ULONG ComPlusPackage; 1996 ULONG LastSystemRITEventTickCount; 1997 ULONG NumberOfPhysicalPages; 1998 BOOLEAN SafeBootMode; 1999#if (NTDDI_VERSION >= NTDDI_WIN7) 2000 _ANONYMOUS_UNION union { 2001 UCHAR TscQpcData; 2002 _ANONYMOUS_STRUCT struct { 2003 UCHAR TscQpcEnabled:1; 2004 UCHAR TscQpcSpareFlag:1; 2005 UCHAR TscQpcShift:6; 2006 } DUMMYSTRUCTNAME; 2007 } DUMMYUNIONNAME; 2008 UCHAR TscQpcPad[2]; 2009#endif 2010#if (NTDDI_VERSION >= NTDDI_VISTA) 2011 _ANONYMOUS_UNION union { 2012 ULONG SharedDataFlags; 2013 _ANONYMOUS_STRUCT struct { 2014 ULONG DbgErrorPortPresent:1; 2015 ULONG DbgElevationEnabled:1; 2016 ULONG DbgVirtEnabled:1; 2017 ULONG DbgInstallerDetectEnabled:1; 2018 ULONG DbgSystemDllRelocated:1; 2019 ULONG DbgDynProcessorEnabled:1; 2020 ULONG DbgSEHValidationEnabled:1; 2021 ULONG SpareBits:25; 2022 } DUMMYSTRUCTNAME2; 2023 } DUMMYUNIONNAME2; 2024#else 2025 ULONG TraceLogging; 2026#endif 2027 ULONG DataFlagsPad[1]; 2028 ULONGLONG TestRetInstruction; 2029 ULONG SystemCall; 2030 ULONG SystemCallReturn; 2031 ULONGLONG SystemCallPad[3]; 2032 _ANONYMOUS_UNION union { 2033 volatile KSYSTEM_TIME TickCount; 2034 volatile ULONG64 TickCountQuad; 2035 _ANONYMOUS_STRUCT struct { 2036 ULONG ReservedTickCountOverlay[3]; 2037 ULONG TickCountPad[1]; 2038 } DUMMYSTRUCTNAME; 2039 } DUMMYUNIONNAME3; 2040 ULONG Cookie; 2041 ULONG CookiePad[1]; 2042#if (NTDDI_VERSION >= NTDDI_WS03) 2043 LONGLONG ConsoleSessionForegroundProcessId; 2044 ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES]; 2045#endif 2046#if (NTDDI_VERSION >= NTDDI_VISTA) 2047#if (NTDDI_VERSION >= NTDDI_WIN7) 2048 USHORT UserModeGlobalLogger[16]; 2049#else 2050 USHORT UserModeGlobalLogger[8]; 2051 ULONG HeapTracingPid[2]; 2052 ULONG CritSecTracingPid[2]; 2053#endif 2054 ULONG ImageFileExecutionOptions; 2055#if (NTDDI_VERSION >= NTDDI_VISTASP1) 2056 ULONG LangGenerationCount; 2057#else 2058 /* 4 bytes padding */ 2059#endif 2060 ULONGLONG Reserved5; 2061 volatile ULONG64 InterruptTimeBias; 2062#endif 2063#if (NTDDI_VERSION >= NTDDI_WIN7) 2064 volatile ULONG64 TscQpcBias; 2065 volatile ULONG ActiveProcessorCount; 2066 volatile USHORT ActiveGroupCount; 2067 USHORT Reserved4; 2068 volatile ULONG AitSamplingValue; 2069 volatile ULONG AppCompatFlag; 2070 ULONGLONG SystemDllNativeRelocation; 2071 ULONG SystemDllWowRelocation; 2072 ULONG XStatePad[1]; 2073 XSTATE_CONFIGURATION XState; 2074#endif 2075} KUSER_SHARED_DATA, *PKUSER_SHARED_DATA; 2076 2077#if (NTDDI_VERSION >= NTDDI_VISTA) 2078extern NTSYSAPI volatile CCHAR KeNumberProcessors; 2079#elif (NTDDI_VERSION >= NTDDI_WINXP) 2080extern NTSYSAPI CCHAR KeNumberProcessors; 2081#else 2082extern PCCHAR KeNumberProcessors; 2083#endif 2084 2085 2086/****************************************************************************** 2087 * Kernel Debugger Types * 2088 ******************************************************************************/ 2089typedef struct _DEBUG_DEVICE_ADDRESS { 2090 UCHAR Type; 2091 BOOLEAN Valid; 2092 UCHAR Reserved[2]; 2093 PUCHAR TranslatedAddress; 2094 ULONG Length; 2095} DEBUG_DEVICE_ADDRESS, *PDEBUG_DEVICE_ADDRESS; 2096 2097typedef struct _DEBUG_MEMORY_REQUIREMENTS { 2098 PHYSICAL_ADDRESS Start; 2099 PHYSICAL_ADDRESS MaxEnd; 2100 PVOID VirtualAddress; 2101 ULONG Length; 2102 BOOLEAN Cached; 2103 BOOLEAN Aligned; 2104} DEBUG_MEMORY_REQUIREMENTS, *PDEBUG_MEMORY_REQUIREMENTS; 2105 2106typedef struct _DEBUG_DEVICE_DESCRIPTOR { 2107 ULONG Bus; 2108 ULONG Slot; 2109 USHORT Segment; 2110 USHORT VendorID; 2111 USHORT DeviceID; 2112 UCHAR BaseClass; 2113 UCHAR SubClass; 2114 UCHAR ProgIf; 2115 BOOLEAN Initialized; 2116 BOOLEAN Configured; 2117 DEBUG_DEVICE_ADDRESS BaseAddress[6]; 2118 DEBUG_MEMORY_REQUIREMENTS Memory; 2119} DEBUG_DEVICE_DESCRIPTOR, *PDEBUG_DEVICE_DESCRIPTOR; 2120 2121typedef NTSTATUS 2122(NTAPI *pKdSetupPciDeviceForDebugging)( 2123 IN PVOID LoaderBlock OPTIONAL, 2124 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice); 2125 2126typedef NTSTATUS 2127(NTAPI *pKdReleasePciDeviceForDebugging)( 2128 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice); 2129 2130typedef PVOID 2131(NTAPI *pKdGetAcpiTablePhase0)( 2132 IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock, 2133 IN ULONG Signature); 2134 2135typedef VOID 2136(NTAPI *pKdCheckPowerButton)( 2137 VOID); 2138 2139#if (NTDDI_VERSION >= NTDDI_VISTA) 2140typedef PVOID 2141(NTAPI *pKdMapPhysicalMemory64)( 2142 IN PHYSICAL_ADDRESS PhysicalAddress, 2143 IN ULONG NumberPages, 2144 IN BOOLEAN FlushCurrentTLB); 2145 2146typedef VOID 2147(NTAPI *pKdUnmapVirtualAddress)( 2148 IN PVOID VirtualAddress, 2149 IN ULONG NumberPages, 2150 IN BOOLEAN FlushCurrentTLB); 2151#else 2152typedef PVOID 2153(NTAPI *pKdMapPhysicalMemory64)( 2154 IN PHYSICAL_ADDRESS PhysicalAddress, 2155 IN ULONG NumberPages); 2156 2157typedef VOID 2158(NTAPI *pKdUnmapVirtualAddress)( 2159 IN PVOID VirtualAddress, 2160 IN ULONG NumberPages); 2161#endif 2162 2163typedef ULONG 2164(NTAPI *pKdGetPciDataByOffset)( 2165 IN ULONG BusNumber, 2166 IN ULONG SlotNumber, 2167 OUT PVOID Buffer, 2168 IN ULONG Offset, 2169 IN ULONG Length); 2170 2171typedef ULONG 2172(NTAPI *pKdSetPciDataByOffset)( 2173 IN ULONG BusNumber, 2174 IN ULONG SlotNumber, 2175 IN PVOID Buffer, 2176 IN ULONG Offset, 2177 IN ULONG Length); 2178/****************************************************************************** 2179 * Memory manager Types * 2180 ******************************************************************************/ 2181 2182typedef struct _PHYSICAL_MEMORY_RANGE { 2183 PHYSICAL_ADDRESS BaseAddress; 2184 LARGE_INTEGER NumberOfBytes; 2185} PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE; 2186 2187typedef NTSTATUS 2188(NTAPI *PMM_ROTATE_COPY_CALLBACK_FUNCTION)( 2189 IN PMDL DestinationMdl, 2190 IN PMDL SourceMdl, 2191 IN PVOID Context); 2192 2193typedef enum _MM_ROTATE_DIRECTION { 2194 MmToFrameBuffer, 2195 MmToFrameBufferNoCopy, 2196 MmToRegularMemory, 2197 MmToRegularMemoryNoCopy, 2198 MmMaximumRotateDirection 2199} MM_ROTATE_DIRECTION, *PMM_ROTATE_DIRECTION; 2200 2201 2202/****************************************************************************** 2203 * Process Manager Types * 2204 ******************************************************************************/ 2205 2206#define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001 2207#define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002 2208#define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004 2209#define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008 2210#define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010 2211 2212typedef struct _QUOTA_LIMITS { 2213 SIZE_T PagedPoolLimit; 2214 SIZE_T NonPagedPoolLimit; 2215 SIZE_T MinimumWorkingSetSize; 2216 SIZE_T MaximumWorkingSetSize; 2217 SIZE_T PagefileLimit; 2218 LARGE_INTEGER TimeLimit; 2219} QUOTA_LIMITS, *PQUOTA_LIMITS; 2220 2221typedef union _RATE_QUOTA_LIMIT { 2222 ULONG RateData; 2223 _ANONYMOUS_STRUCT struct { 2224 ULONG RatePercent:7; 2225 ULONG Reserved0:25; 2226 } DUMMYSTRUCTNAME; 2227} RATE_QUOTA_LIMIT, *PRATE_QUOTA_LIMIT; 2228 2229typedef struct _QUOTA_LIMITS_EX { 2230 SIZE_T PagedPoolLimit; 2231 SIZE_T NonPagedPoolLimit; 2232 SIZE_T MinimumWorkingSetSize; 2233 SIZE_T MaximumWorkingSetSize; 2234 SIZE_T PagefileLimit; 2235 LARGE_INTEGER TimeLimit; 2236 SIZE_T WorkingSetLimit; 2237 SIZE_T Reserved2; 2238 SIZE_T Reserved3; 2239 SIZE_T Reserved4; 2240 ULONG Flags; 2241 RATE_QUOTA_LIMIT CpuRateLimit; 2242} QUOTA_LIMITS_EX, *PQUOTA_LIMITS_EX; 2243 2244typedef struct _IO_COUNTERS { 2245 ULONGLONG ReadOperationCount; 2246 ULONGLONG WriteOperationCount; 2247 ULONGLONG OtherOperationCount; 2248 ULONGLONG ReadTransferCount; 2249 ULONGLONG WriteTransferCount; 2250 ULONGLONG OtherTransferCount; 2251} IO_COUNTERS, *PIO_COUNTERS; 2252 2253typedef struct _VM_COUNTERS { 2254 SIZE_T PeakVirtualSize; 2255 SIZE_T VirtualSize; 2256 ULONG PageFaultCount; 2257 SIZE_T PeakWorkingSetSize; 2258 SIZE_T WorkingSetSize; 2259 SIZE_T QuotaPeakPagedPoolUsage; 2260 SIZE_T QuotaPagedPoolUsage; 2261 SIZE_T QuotaPeakNonPagedPoolUsage; 2262 SIZE_T QuotaNonPagedPoolUsage; 2263 SIZE_T PagefileUsage; 2264 SIZE_T PeakPagefileUsage; 2265} VM_COUNTERS, *PVM_COUNTERS; 2266 2267typedef struct _VM_COUNTERS_EX { 2268 SIZE_T PeakVirtualSize; 2269 SIZE_T VirtualSize; 2270 ULONG PageFaultCount; 2271 SIZE_T PeakWorkingSetSize; 2272 SIZE_T WorkingSetSize; 2273 SIZE_T QuotaPeakPagedPoolUsage; 2274 SIZE_T QuotaPagedPoolUsage; 2275 SIZE_T QuotaPeakNonPagedPoolUsage; 2276 SIZE_T QuotaNonPagedPoolUsage; 2277 SIZE_T PagefileUsage; 2278 SIZE_T PeakPagefileUsage; 2279 SIZE_T PrivateUsage; 2280} VM_COUNTERS_EX, *PVM_COUNTERS_EX; 2281 2282#define MAX_HW_COUNTERS 16 2283#define THREAD_PROFILING_FLAG_DISPATCH 0x00000001 2284 2285typedef enum _HARDWARE_COUNTER_TYPE { 2286 PMCCounter, 2287 MaxHardwareCounterType 2288} HARDWARE_COUNTER_TYPE, *PHARDWARE_COUNTER_TYPE; 2289 2290typedef struct _HARDWARE_COUNTER { 2291 HARDWARE_COUNTER_TYPE Type; 2292 ULONG Reserved; 2293 ULONG64 Index; 2294} HARDWARE_COUNTER, *PHARDWARE_COUNTER; 2295 2296typedef struct _POOLED_USAGE_AND_LIMITS { 2297 SIZE_T PeakPagedPoolUsage; 2298 SIZE_T PagedPoolUsage; 2299 SIZE_T PagedPoolLimit; 2300 SIZE_T PeakNonPagedPoolUsage; 2301 SIZE_T NonPagedPoolUsage; 2302 SIZE_T NonPagedPoolLimit; 2303 SIZE_T PeakPagefileUsage; 2304 SIZE_T PagefileUsage; 2305 SIZE_T PagefileLimit; 2306} POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS; 2307 2308typedef struct _PROCESS_ACCESS_TOKEN { 2309 HANDLE Token; 2310 HANDLE Thread; 2311} PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN; 2312 2313#define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS 0x00000003UL 2314#define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1)) 2315 2316typedef struct _PROCESS_EXCEPTION_PORT { 2317 IN HANDLE ExceptionPortHandle; 2318 IN OUT ULONG StateFlags; 2319} PROCESS_EXCEPTION_PORT, *PPROCESS_EXCEPTION_PORT; 2320 2321typedef VOID 2322(NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE)( 2323 IN HANDLE ParentId, 2324 IN HANDLE ProcessId, 2325 IN BOOLEAN Create); 2326 2327typedef struct _PS_CREATE_NOTIFY_INFO { 2328 IN SIZE_T Size; 2329 _ANONYMOUS_UNION union { 2330 IN ULONG Flags; 2331 _ANONYMOUS_STRUCT struct { 2332 IN ULONG FileOpenNameAvailable:1; 2333 IN ULONG Reserved:31; 2334 } DUMMYSTRUCTNAME; 2335 } DUMMYUNIONNAME; 2336 IN HANDLE ParentProcessId; 2337 IN CLIENT_ID CreatingThreadId; 2338 IN OUT struct _FILE_OBJECT *FileObject; 2339 IN PCUNICODE_STRING ImageFileName; 2340 IN PCUNICODE_STRING CommandLine OPTIONAL; 2341 IN OUT NTSTATUS CreationStatus; 2342} PS_CREATE_NOTIFY_INFO, *PPS_CREATE_NOTIFY_INFO; 2343 2344typedef VOID 2345(NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE_EX)( 2346 IN OUT PEPROCESS Process, 2347 IN HANDLE ProcessId, 2348 IN PPS_CREATE_NOTIFY_INFO CreateInfo OPTIONAL); 2349 2350typedef VOID 2351(NTAPI *PCREATE_THREAD_NOTIFY_ROUTINE)( 2352 IN HANDLE ProcessId, 2353 IN HANDLE ThreadId, 2354 IN BOOLEAN Create); 2355 2356#define IMAGE_ADDRESSING_MODE_32BIT 3 2357 2358typedef struct _IMAGE_INFO { 2359 _ANONYMOUS_UNION union { 2360 ULONG Properties; 2361 _ANONYMOUS_STRUCT struct { 2362 ULONG ImageAddressingMode:8; 2363 ULONG SystemModeImage:1; 2364 ULONG ImageMappedToAllPids:1; 2365 ULONG ExtendedInfoPresent:1; 2366 ULONG Reserved:21; 2367 } DUMMYSTRUCTNAME; 2368 } DUMMYUNIONNAME; 2369 PVOID ImageBase; 2370 ULONG ImageSelector; 2371 SIZE_T ImageSize; 2372 ULONG ImageSectionNumber; 2373} IMAGE_INFO, *PIMAGE_INFO; 2374 2375typedef struct _IMAGE_INFO_EX { 2376 SIZE_T Size; 2377 IMAGE_INFO ImageInfo; 2378 struct _FILE_OBJECT *FileObject; 2379} IMAGE_INFO_EX, *PIMAGE_INFO_EX; 2380 2381typedef VOID 2382(NTAPI *PLOAD_IMAGE_NOTIFY_ROUTINE)( 2383 IN PUNICODE_STRING FullImageName, 2384 IN HANDLE ProcessId, 2385 IN PIMAGE_INFO ImageInfo); 2386 2387#define THREAD_CSWITCH_PMU_DISABLE FALSE 2388#define THREAD_CSWITCH_PMU_ENABLE TRUE 2389 2390#define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001 2391 2392#define PROCESS_HANDLE_TRACING_MAX_STACKS 16 2393 2394typedef struct _NT_TIB { 2395 struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList; 2396 PVOID StackBase; 2397 PVOID StackLimit; 2398 PVOID SubSystemTib; 2399 _ANONYMOUS_UNION union { 2400 PVOID FiberData; 2401 ULONG Version; 2402 } DUMMYUNIONNAME; 2403 PVOID ArbitraryUserPointer; 2404 struct _NT_TIB *Self; 2405} NT_TIB, *PNT_TIB; 2406 2407typedef struct _NT_TIB32 { 2408 ULONG ExceptionList; 2409 ULONG StackBase; 2410 ULONG StackLimit; 2411 ULONG SubSystemTib; 2412 _ANONYMOUS_UNION union { 2413 ULONG FiberData; 2414 ULONG Version; 2415 } DUMMYUNIONNAME; 2416 ULONG ArbitraryUserPointer; 2417 ULONG Self; 2418} NT_TIB32,*PNT_TIB32; 2419 2420typedef struct _NT_TIB64 { 2421 ULONG64 ExceptionList; 2422 ULONG64 StackBase; 2423 ULONG64 StackLimit; 2424 ULONG64 SubSystemTib; 2425 _ANONYMOUS_UNION union { 2426 ULONG64 FiberData; 2427 ULONG Version; 2428 } DUMMYUNIONNAME; 2429 ULONG64 ArbitraryUserPointer; 2430 ULONG64 Self; 2431} NT_TIB64,*PNT_TIB64; 2432 2433typedef enum _PROCESSINFOCLASS { 2434 ProcessBasicInformation, 2435 ProcessQuotaLimits, 2436 ProcessIoCounters, 2437 ProcessVmCounters, 2438 ProcessTimes, 2439 ProcessBasePriority, 2440 ProcessRaisePriority, 2441 ProcessDebugPort, 2442 ProcessExceptionPort, 2443 ProcessAccessToken, 2444 ProcessLdtInformation, 2445 ProcessLdtSize, 2446 ProcessDefaultHardErrorMode, 2447 ProcessIoPortHandlers, 2448 ProcessPooledUsageAndLimits, 2449 ProcessWorkingSetWatch, 2450 ProcessUserModeIOPL, 2451 ProcessEnableAlignmentFaultFixup, 2452 ProcessPriorityClass, 2453 ProcessWx86Information, 2454 ProcessHandleCount, 2455 ProcessAffinityMask, 2456 ProcessPriorityBoost, 2457 ProcessDeviceMap, 2458 ProcessSessionInformation, 2459 ProcessForegroundInformation, 2460 ProcessWow64Information, 2461 ProcessImageFileName, 2462 ProcessLUIDDeviceMapsEnabled, 2463 ProcessBreakOnTermination, 2464 ProcessDebugObjectHandle, 2465 ProcessDebugFlags, 2466 ProcessHandleTracing, 2467 ProcessIoPriority, 2468 ProcessExecuteFlags, 2469 ProcessTlsInformation, 2470 ProcessCookie, 2471 ProcessImageInformation, 2472 ProcessCycleTime, 2473 ProcessPagePriority, 2474 ProcessInstrumentationCallback, 2475 ProcessThreadStackAllocation, 2476 ProcessWorkingSetWatchEx, 2477 ProcessImageFileNameWin32, 2478 ProcessImageFileMapping, 2479 ProcessAffinityUpdateMode, 2480 ProcessMemoryAllocationMode, 2481 ProcessGroupInformation, 2482 ProcessTokenVirtualizationEnabled, 2483 ProcessConsoleHostProcess, 2484 ProcessWindowInformation, 2485 MaxProcessInfoClass 2486} PROCESSINFOCLASS; 2487 2488typedef enum _THREADINFOCLASS { 2489 ThreadBasicInformation, 2490 ThreadTimes, 2491 ThreadPriority, 2492 ThreadBasePriority, 2493 ThreadAffinityMask, 2494 ThreadImpersonationToken, 2495 ThreadDescriptorTableEntry, 2496 ThreadEnableAlignmentFaultFixup, 2497 ThreadEventPair_Reusable, 2498 ThreadQuerySetWin32StartAddress, 2499 ThreadZeroTlsCell, 2500 ThreadPerformanceCount, 2501 ThreadAmILastThread, 2502 ThreadIdealProcessor, 2503 ThreadPriorityBoost, 2504 ThreadSetTlsArrayAddress, 2505 ThreadIsIoPending, 2506 ThreadHideFromDebugger, 2507 ThreadBreakOnTermination, 2508 ThreadSwitchLegacyState, 2509 ThreadIsTerminated, 2510 ThreadLastSystemCall, 2511 ThreadIoPriority, 2512 ThreadCycleTime, 2513 ThreadPagePriority, 2514 ThreadActualBasePriority, 2515 ThreadTebInformation, 2516 ThreadCSwitchMon, 2517 ThreadCSwitchPmu, 2518 ThreadWow64Context, 2519 ThreadGroupInformation, 2520 ThreadUmsInformation, 2521 ThreadCounterProfiling, 2522 ThreadIdealProcessorEx, 2523 MaxThreadInfoClass 2524} THREADINFOCLASS; 2525 2526typedef struct _PAGE_PRIORITY_INFORMATION { 2527 ULONG PagePriority; 2528} PAGE_PRIORITY_INFORMATION, *PPAGE_PRIORITY_INFORMATION; 2529 2530typedef struct _PROCESS_WS_WATCH_INFORMATION { 2531 PVOID FaultingPc; 2532 PVOID FaultingVa; 2533} PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION; 2534 2535typedef struct _PROCESS_BASIC_INFORMATION { 2536 NTSTATUS ExitStatus; 2537 struct _PEB *PebBaseAddress; 2538 ULONG_PTR AffinityMask; 2539 KPRIORITY BasePriority; 2540 ULONG_PTR UniqueProcessId; 2541 ULONG_PTR InheritedFromUniqueProcessId; 2542} PROCESS_BASIC_INFORMATION,*PPROCESS_BASIC_INFORMATION; 2543 2544typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION { 2545 SIZE_T Size; 2546 PROCESS_BASIC_INFORMATION BasicInfo; 2547 _ANONYMOUS_UNION union { 2548 ULONG Flags; 2549 _ANONYMOUS_STRUCT struct { 2550 ULONG IsProtectedProcess:1; 2551 ULONG IsWow64Process:1; 2552 ULONG IsProcessDeleting:1; 2553 ULONG IsCrossSessionCreate:1; 2554 ULONG SpareBits:28; 2555 } DUMMYSTRUCTNAME; 2556 } DUMMYUNIONNAME; 2557} PROCESS_EXTENDED_BASIC_INFORMATION, *PPROCESS_EXTENDED_BASIC_INFORMATION; 2558 2559typedef struct _PROCESS_DEVICEMAP_INFORMATION { 2560 _ANONYMOUS_UNION union { 2561 struct { 2562 HANDLE DirectoryHandle; 2563 } Set; 2564 struct { 2565 ULONG DriveMap; 2566 UCHAR DriveType[32]; 2567 } Query; 2568 } DUMMYUNIONNAME; 2569} PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION; 2570 2571typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX { 2572 _ANONYMOUS_UNION union { 2573 struct { 2574 HANDLE DirectoryHandle; 2575 } Set; 2576 struct { 2577 ULONG DriveMap; 2578 UCHAR DriveType[32]; 2579 } Query; 2580 } DUMMYUNIONNAME; 2581 ULONG Flags; 2582} PROCESS_DEVICEMAP_INFORMATION_EX, *PPROCESS_DEVICEMAP_INFORMATION_EX; 2583 2584typedef struct _PROCESS_SESSION_INFORMATION { 2585 ULONG SessionId; 2586} PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION; 2587 2588typedef struct _PROCESS_HANDLE_TRACING_ENABLE { 2589 ULONG Flags; 2590} PROCESS_HANDLE_TRACING_ENABLE, *PPROCESS_HANDLE_TRACING_ENABLE; 2591 2592typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX { 2593 ULONG Flags; 2594 ULONG TotalSlots; 2595} PROCESS_HANDLE_TRACING_ENABLE_EX, *PPROCESS_HANDLE_TRACING_ENABLE_EX; 2596 2597typedef struct _PROCESS_HANDLE_TRACING_ENTRY { 2598 HANDLE Handle; 2599 CLIENT_ID ClientId; 2600 ULONG Type; 2601 PVOID Stacks[PROCESS_HANDLE_TRACING_MAX_STACKS]; 2602} PROCESS_HANDLE_TRACING_ENTRY, *PPROCESS_HANDLE_TRACING_ENTRY; 2603 2604typedef struct _PROCESS_HANDLE_TRACING_QUERY { 2605 HANDLE Handle; 2606 ULONG TotalTraces; 2607 PROCESS_HANDLE_TRACING_ENTRY HandleTrace[1]; 2608} PROCESS_HANDLE_TRACING_QUERY, *PPROCESS_HANDLE_TRACING_QUERY; 2609 2610extern NTKERNELAPI PEPROCESS PsInitialSystemProcess; 2611 2612 2613/****************************************************************************** 2614 * Runtime Library Types * 2615 ******************************************************************************/ 2616 2617#ifndef _RTL_RUN_ONCE_DEF 2618#define _RTL_RUN_ONCE_DEF 2619 2620#define RTL_RUN_ONCE_INIT {0} 2621 2622#define RTL_RUN_ONCE_CHECK_ONLY 0x00000001UL 2623#define RTL_RUN_ONCE_ASYNC 0x00000002UL 2624#define RTL_RUN_ONCE_INIT_FAILED 0x00000004UL 2625 2626#define RTL_RUN_ONCE_CTX_RESERVED_BITS 2 2627 2628#define RTL_HASH_ALLOCATED_HEADER 0x00000001 2629 2630#define RTL_HASH_RESERVED_SIGNATURE 0 2631 2632/* RtlVerifyVersionInfo() ComparisonType */ 2633 2634#define VER_EQUAL 1 2635#define VER_GREATER 2 2636#define VER_GREATER_EQUAL 3 2637#define VER_LESS 4 2638#define VER_LESS_EQUAL 5 2639#define VER_AND 6 2640#define VER_OR 7 2641 2642#define VER_CONDITION_MASK 7 2643#define VER_NUM_BITS_PER_CONDITION_MASK 3 2644 2645/* RtlVerifyVersionInfo() TypeMask */ 2646 2647#define VER_MINORVERSION 0x0000001 2648#define VER_MAJORVERSION 0x0000002 2649#define VER_BUILDNUMBER 0x0000004 2650#define VER_PLATFORMID 0x0000008 2651#define VER_SERVICEPACKMINOR 0x0000010 2652#define VER_SERVICEPACKMAJOR 0x0000020 2653#define VER_SUITENAME 0x0000040 2654#define VER_PRODUCT_TYPE 0x0000080 2655 2656#define VER_NT_WORKSTATION 0x0000001 2657#define VER_NT_DOMAIN_CONTROLLER 0x0000002 2658#define VER_NT_SERVER 0x0000003 2659 2660#define VER_PLATFORM_WIN32s 0 2661#define VER_PLATFORM_WIN32_WINDOWS 1 2662#define VER_PLATFORM_WIN32_NT 2 2663 2664typedef union _RTL_RUN_ONCE { 2665 PVOID Ptr; 2666} RTL_RUN_ONCE, *PRTL_RUN_ONCE; 2667 2668typedef ULONG /* LOGICAL */ 2669(NTAPI *PRTL_RUN_ONCE_INIT_FN) ( 2670 IN OUT PRTL_RUN_ONCE RunOnce, 2671 IN OUT PVOID Parameter OPTIONAL, 2672 IN OUT PVOID *Context OPTIONAL); 2673 2674#endif /* _RTL_RUN_ONCE_DEF */ 2675 2676typedef enum _TABLE_SEARCH_RESULT { 2677 TableEmptyTree, 2678 TableFoundNode, 2679 TableInsertAsLeft, 2680 TableInsertAsRight 2681} TABLE_SEARCH_RESULT; 2682 2683typedef enum _RTL_GENERIC_COMPARE_RESULTS { 2684 GenericLessThan, 2685 GenericGreaterThan, 2686 GenericEqual 2687} RTL_GENERIC_COMPARE_RESULTS; 2688 2689// Forwarder 2690struct _RTL_AVL_TABLE; 2691 2692typedef RTL_GENERIC_COMPARE_RESULTS 2693(NTAPI *PRTL_AVL_COMPARE_ROUTINE) ( 2694 IN struct _RTL_AVL_TABLE *Table, 2695 IN PVOID FirstStruct, 2696 IN PVOID SecondStruct); 2697 2698typedef PVOID 2699(NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) ( 2700 IN struct _RTL_AVL_TABLE *Table, 2701 IN CLONG ByteSize); 2702 2703typedef VOID 2704(NTAPI *PRTL_AVL_FREE_ROUTINE) ( 2705 IN struct _RTL_AVL_TABLE *Table, 2706 IN PVOID Buffer); 2707 2708typedef NTSTATUS 2709(NTAPI *PRTL_AVL_MATCH_FUNCTION) ( 2710 IN struct _RTL_AVL_TABLE *Table, 2711 IN PVOID UserData, 2712 IN PVOID MatchData); 2713 2714typedef struct _RTL_BALANCED_LINKS { 2715 struct _RTL_BALANCED_LINKS *Parent; 2716 struct _RTL_BALANCED_LINKS *LeftChild; 2717 struct _RTL_BALANCED_LINKS *RightChild; 2718 CHAR Balance; 2719 UCHAR Reserved[3]; 2720} RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS; 2721 2722typedef struct _RTL_AVL_TABLE { 2723 RTL_BALANCED_LINKS BalancedRoot; 2724 PVOID OrderedPointer; 2725 ULONG WhichOrderedElement; 2726 ULONG NumberGenericTableElements; 2727 ULONG DepthOfTree; 2728 PRTL_BALANCED_LINKS RestartKey; 2729 ULONG DeleteCount; 2730 PRTL_AVL_COMPARE_ROUTINE CompareRoutine; 2731 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine; 2732 PRTL_AVL_FREE_ROUTINE FreeRoutine; 2733 PVOID TableContext; 2734} RTL_AVL_TABLE, *PRTL_AVL_TABLE; 2735 2736#ifndef RTL_USE_AVL_TABLES 2737 2738struct _RTL_GENERIC_TABLE; 2739 2740typedef RTL_GENERIC_COMPARE_RESULTS 2741(NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) ( 2742 IN struct _RTL_GENERIC_TABLE *Table, 2743 IN PVOID FirstStruct, 2744 IN PVOID SecondStruct); 2745 2746typedef PVOID 2747(NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) ( 2748 IN struct _RTL_GENERIC_TABLE *Table, 2749 IN CLONG ByteSize); 2750 2751typedef VOID 2752(NTAPI *PRTL_GENERIC_FREE_ROUTINE) ( 2753 IN struct _RTL_GENERIC_TABLE *Table, 2754 IN PVOID Buffer); 2755 2756typedef struct _RTL_SPLAY_LINKS { 2757 struct _RTL_SPLAY_LINKS *Parent; 2758 struct _RTL_SPLAY_LINKS *LeftChild; 2759 struct _RTL_SPLAY_LINKS *RightChild; 2760} RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS; 2761 2762typedef struct _RTL_GENERIC_TABLE { 2763 PRTL_SPLAY_LINKS TableRoot; 2764 LIST_ENTRY InsertOrderList; 2765 PLIST_ENTRY OrderedPointer; 2766 ULONG WhichOrderedElement; 2767 ULONG NumberGenericTableElements; 2768 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine; 2769 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine; 2770 PRTL_GENERIC_FREE_ROUTINE FreeRoutine; 2771 PVOID TableContext; 2772} RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE; 2773 2774#endif /* !RTL_USE_AVL_TABLES */ 2775 2776#ifdef RTL_USE_AVL_TABLES 2777 2778#undef PRTL_GENERIC_COMPARE_ROUTINE 2779#undef RTL_GENERIC_COMPARE_ROUTINE 2780#undef PRTL_GENERIC_ALLOCATE_ROUTINE 2781#undef RTL_GENERIC_ALLOCATE_ROUTINE 2782#undef PRTL_GENERIC_FREE_ROUTINE 2783#undef RTL_GENERIC_FREE_ROUTINE 2784#undef RTL_GENERIC_TABLE 2785#undef PRTL_GENERIC_TABLE 2786 2787#define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE 2788#define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE 2789#define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE 2790#define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE 2791#define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE 2792#define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE 2793#define RTL_GENERIC_TABLE RTL_AVL_TABLE 2794#define PRTL_GENERIC_TABLE PRTL_AVL_TABLE 2795 2796#endif /* RTL_USE_AVL_TABLES */ 2797 2798typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY { 2799 LIST_ENTRY Linkage; 2800 ULONG_PTR Signature; 2801} RTL_DYNAMIC_HASH_TABLE_ENTRY, *PRTL_DYNAMIC_HASH_TABLE_ENTRY; 2802 2803typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT { 2804 PLIST_ENTRY ChainHead; 2805 PLIST_ENTRY PrevLinkage; 2806 ULONG_PTR Signature; 2807} RTL_DYNAMIC_HASH_TABLE_CONTEXT, *PRTL_DYNAMIC_HASH_TABLE_CONTEXT; 2808 2809typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR { 2810 RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry; 2811 PLIST_ENTRY ChainHead; 2812 ULONG BucketIndex; 2813} RTL_DYNAMIC_HASH_TABLE_ENUMERATOR, *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR; 2814 2815typedef struct _RTL_DYNAMIC_HASH_TABLE { 2816 ULONG Flags; 2817 ULONG Shift; 2818 ULONG TableSize; 2819 ULONG Pivot; 2820 ULONG DivisorMask; 2821 ULONG NumEntries; 2822 ULONG NonEmptyBuckets; 2823 ULONG NumEnumerators; 2824 PVOID Directory; 2825} RTL_DYNAMIC_HASH_TABLE, *PRTL_DYNAMIC_HASH_TABLE; 2826 2827typedef struct _OSVERSIONINFOA { 2828 ULONG dwOSVersionInfoSize; 2829 ULONG dwMajorVersion; 2830 ULONG dwMinorVersion; 2831 ULONG dwBuildNumber; 2832 ULONG dwPlatformId; 2833 CHAR szCSDVersion[128]; 2834} OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA; 2835 2836typedef struct _OSVERSIONINFOW { 2837 ULONG dwOSVersionInfoSize; 2838 ULONG dwMajorVersion; 2839 ULONG dwMinorVersion; 2840 ULONG dwBuildNumber; 2841 ULONG dwPlatformId; 2842 WCHAR szCSDVersion[128]; 2843} OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW; 2844 2845typedef struct _OSVERSIONINFOEXA { 2846 ULONG dwOSVersionInfoSize; 2847 ULONG dwMajorVersion; 2848 ULONG dwMinorVersion; 2849 ULONG dwBuildNumber; 2850 ULONG dwPlatformId; 2851 CHAR szCSDVersion[128]; 2852 USHORT wServicePackMajor; 2853 USHORT wServicePackMinor; 2854 USHORT wSuiteMask; 2855 UCHAR wProductType; 2856 UCHAR wReserved; 2857} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA; 2858 2859typedef struct _OSVERSIONINFOEXW { 2860 ULONG dwOSVersionInfoSize; 2861 ULONG dwMajorVersion; 2862 ULONG dwMinorVersion; 2863 ULONG dwBuildNumber; 2864 ULONG dwPlatformId; 2865 WCHAR szCSDVersion[128]; 2866 USHORT wServicePackMajor; 2867 USHORT wServicePackMinor; 2868 USHORT wSuiteMask; 2869 UCHAR wProductType; 2870 UCHAR wReserved; 2871} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW; 2872 2873#ifdef UNICODE 2874typedef OSVERSIONINFOEXW OSVERSIONINFOEX; 2875typedef POSVERSIONINFOEXW POSVERSIONINFOEX; 2876typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX; 2877typedef OSVERSIONINFOW OSVERSIONINFO; 2878typedef POSVERSIONINFOW POSVERSIONINFO; 2879typedef LPOSVERSIONINFOW LPOSVERSIONINFO; 2880#else 2881typedef OSVERSIONINFOEXA OSVERSIONINFOEX; 2882typedef POSVERSIONINFOEXA POSVERSIONINFOEX; 2883typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX; 2884typedef OSVERSIONINFOA OSVERSIONINFO; 2885typedef POSVERSIONINFOA POSVERSIONINFO; 2886typedef LPOSVERSIONINFOA LPOSVERSIONINFO; 2887#endif /* UNICODE */ 2888 2889#define HASH_ENTRY_KEY(x) ((x)->Signature) 2890 2891/****************************************************************************** 2892 * Security Manager Types * 2893 ******************************************************************************/ 2894#define SE_UNSOLICITED_INPUT_PRIVILEGE 6 2895 2896typedef enum _WELL_KNOWN_SID_TYPE { 2897 WinNullSid = 0, 2898 WinWorldSid = 1, 2899 WinLocalSid = 2, 2900 WinCreatorOwnerSid = 3, 2901 WinCreatorGroupSid = 4, 2902 WinCreatorOwnerServerSid = 5, 2903 WinCreatorGroupServerSid = 6, 2904 WinNtAuthoritySid = 7, 2905 WinDialupSid = 8, 2906 WinNetworkSid = 9, 2907 WinBatchSid = 10, 2908 WinInteractiveSid = 11, 2909 WinServiceSid = 12, 2910 WinAnonymousSid = 13, 2911 WinProxySid = 14, 2912 WinEnterpriseControllersSid = 15, 2913 WinSelfSid = 16, 2914 WinAuthenticatedUserSid = 17, 2915 WinRestrictedCodeSid = 18, 2916 WinTerminalServerSid = 19, 2917 WinRemoteLogonIdSid = 20, 2918 WinLogonIdsSid = 21, 2919 WinLocalSystemSid = 22, 2920 WinLocalServiceSid = 23, 2921 WinNetworkServiceSid = 24, 2922 WinBuiltinDomainSid = 25, 2923 WinBuiltinAdministratorsSid = 26, 2924 WinBuiltinUsersSid = 27, 2925 WinBuiltinGuestsSid = 28, 2926 WinBuiltinPowerUsersSid = 29, 2927 WinBuiltinAccountOperatorsSid = 30, 2928 WinBuiltinSystemOperatorsSid = 31, 2929 WinBuiltinPrintOperatorsSid = 32, 2930 WinBuiltinBackupOperatorsSid = 33, 2931 WinBuiltinReplicatorSid = 34, 2932 WinBuiltinPreWindows2000CompatibleAccessSid = 35, 2933 WinBuiltinRemoteDesktopUsersSid = 36, 2934 WinBuiltinNetworkConfigurationOperatorsSid = 37, 2935 WinAccountAdministratorSid = 38, 2936 WinAccountGuestSid = 39, 2937 WinAccountKrbtgtSid = 40, 2938 WinAccountDomainAdminsSid = 41, 2939 WinAccountDomainUsersSid = 42, 2940 WinAccountDomainGuestsSid = 43, 2941 WinAccountComputersSid = 44, 2942 WinAccountControllersSid = 45, 2943 WinAccountCertAdminsSid = 46, 2944 WinAccountSchemaAdminsSid = 47, 2945 WinAccountEnterpriseAdminsSid = 48, 2946 WinAccountPolicyAdminsSid = 49, 2947 WinAccountRasAndIasServersSid = 50, 2948 WinNTLMAuthenticationSid = 51, 2949 WinDigestAuthenticationSid = 52, 2950 WinSChannelAuthenticationSid = 53, 2951 WinThisOrganizationSid = 54, 2952 WinOtherOrganizationSid = 55, 2953 WinBuiltinIncomingForestTrustBuildersSid = 56, 2954 WinBuiltinPerfMonitoringUsersSid = 57, 2955 WinBuiltinPerfLoggingUsersSid = 58, 2956 WinBuiltinAuthorizationAccessSid = 59, 2957 WinBuiltinTerminalServerLicenseServersSid = 60, 2958 WinBuiltinDCOMUsersSid = 61, 2959 WinBuiltinIUsersSid = 62, 2960 WinIUserSid = 63, 2961 WinBuiltinCryptoOperatorsSid = 64, 2962 WinUntrustedLabelSid = 65, 2963 WinLowLabelSid = 66, 2964 WinMediumLabelSid = 67, 2965 WinHighLabelSid = 68, 2966 WinSystemLabelSid = 69, 2967 WinWriteRestrictedCodeSid = 70, 2968 WinCreatorOwnerRightsSid = 71, 2969 WinCacheablePrincipalsGroupSid = 72, 2970 WinNonCacheablePrincipalsGroupSid = 73, 2971 WinEnterpriseReadonlyControllersSid = 74, 2972 WinAccountReadonlyControllersSid = 75, 2973 WinBuiltinEventLogReadersGroup = 76, 2974 WinNewEnterpriseReadonlyControllersSid = 77, 2975 WinBuiltinCertSvcDComAccessGroup = 78, 2976 WinMediumPlusLabelSid = 79, 2977 WinLocalLogonSid = 80, 2978 WinConsoleLogonSid = 81, 2979 WinThisOrganizationCertificateSid = 82, 2980} WELL_KNOWN_SID_TYPE; 2981 2982#if defined(_M_IX86) 2983 2984#define PAUSE_PROCESSOR YieldProcessor(); 2985 2986#define KERNEL_STACK_SIZE 12288 2987#define KERNEL_LARGE_STACK_SIZE 61440 2988#define KERNEL_LARGE_STACK_COMMIT 12288 2989 2990#define SIZE_OF_80387_REGISTERS 80 2991 2992#if !defined(RC_INVOKED) 2993 2994#define CONTEXT_i386 0x10000 2995#define CONTEXT_i486 0x10000 2996#define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L) 2997#define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L) 2998#define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L) 2999#define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L) 3000#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L) 3001#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L) 3002 3003#define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS) 3004#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \ 3005 CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \ 3006 CONTEXT_EXTENDED_REGISTERS) 3007 3008#define CONTEXT_XSTATE (CONTEXT_i386 | 0x00000040L) 3009 3010#endif /* !defined(RC_INVOKED) */ 3011 3012typedef struct _FLOATING_SAVE_AREA { 3013 ULONG ControlWord; 3014 ULONG StatusWord; 3015 ULONG TagWord; 3016 ULONG ErrorOffset; 3017 ULONG ErrorSelector; 3018 ULONG DataOffset; 3019 ULONG DataSelector; 3020 UCHAR RegisterArea[SIZE_OF_80387_REGISTERS]; 3021 ULONG Cr0NpxState; 3022} FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA; 3023 3024#include "pshpack4.h" 3025typedef struct _CONTEXT { 3026 ULONG ContextFlags; 3027 ULONG Dr0; 3028 ULONG Dr1; 3029 ULONG Dr2; 3030 ULONG Dr3; 3031 ULONG Dr6; 3032 ULONG Dr7; 3033 FLOATING_SAVE_AREA FloatSave; 3034 ULONG SegGs; 3035 ULONG SegFs; 3036 ULONG SegEs; 3037 ULONG SegDs; 3038 ULONG Edi; 3039 ULONG Esi; 3040 ULONG Ebx; 3041 ULONG Edx; 3042 ULONG Ecx; 3043 ULONG Eax; 3044 ULONG Ebp; 3045 ULONG Eip; 3046 ULONG SegCs; 3047 ULONG EFlags; 3048 ULONG Esp; 3049 ULONG SegSs; 3050 UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION]; 3051} CONTEXT; 3052#include "poppack.h" 3053 3054#define KeGetPcr() PCR 3055 3056#define PCR_MINOR_VERSION 1 3057#define PCR_MAJOR_VERSION 1 3058 3059typedef struct _KPCR { 3060 union { 3061 NT_TIB NtTib; 3062 struct { 3063 struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList; 3064 PVOID Used_StackBase; 3065 PVOID Spare2; 3066 PVOID TssCopy; 3067 ULONG ContextSwitches; 3068 KAFFINITY SetMemberCopy; 3069 PVOID Used_Self; 3070 }; 3071 }; 3072 struct _KPCR *SelfPcr; 3073 struct _KPRCB *Prcb; 3074 KIRQL Irql; 3075 ULONG IRR; 3076 ULONG IrrActive; 3077 ULONG IDR; 3078 PVOID KdVersionBlock; 3079 struct _KIDTENTRY *IDT; 3080 struct _KGDTENTRY *GDT; 3081 struct _KTSS *TSS; 3082 USHORT MajorVersion; 3083 USHORT MinorVersion; 3084 KAFFINITY SetMember; 3085 ULONG StallScaleFactor; 3086 UCHAR SpareUnused; 3087 UCHAR Number; 3088 UCHAR Spare0; 3089 UCHAR SecondLevelCacheAssociativity; 3090 ULONG VdmAlert; 3091 ULONG KernelReserved[14]; 3092 ULONG SecondLevelCacheSize; 3093 ULONG HalReserved[16]; 3094} KPCR, *PKPCR; 3095 3096FORCEINLINE 3097ULONG 3098KeGetCurrentProcessorNumber(VOID) 3099{ 3100 return (ULONG)__readfsbyte(FIELD_OFFSET(KPCR, Number)); 3101} 3102 3103 3104extern NTKERNELAPI PVOID MmHighestUserAddress; 3105extern NTKERNELAPI PVOID MmSystemRangeStart; 3106extern NTKERNELAPI ULONG MmUserProbeAddress; 3107 3108#define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress 3109#define MM_SYSTEM_RANGE_START MmSystemRangeStart 3110#if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_) 3111#define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_ 3112extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_; 3113#else 3114#define MM_USER_PROBE_ADDRESS MmUserProbeAddress 3115#endif 3116#define MM_LOWEST_USER_ADDRESS (PVOID)0x10000 3117#define MM_KSEG0_BASE MM_SYSTEM_RANGE_START 3118#define MM_SYSTEM_SPACE_END 0xFFFFFFFF 3119#if !defined (_X86PAE_) 3120#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000 3121#else 3122#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000 3123#endif 3124 3125#elif defined(_M_AMD64) 3126 3127#define PAUSE_PROCESSOR YieldProcessor(); 3128 3129#define KERNEL_STACK_SIZE 0x6000 3130#define KERNEL_LARGE_STACK_SIZE 0x12000 3131#define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE 3132 3133#define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000 3134 3135#define EXCEPTION_READ_FAULT 0 3136#define EXCEPTION_WRITE_FAULT 1 3137#define EXCEPTION_EXECUTE_FAULT 8 3138 3139#if !defined(RC_INVOKED) 3140 3141#define CONTEXT_AMD64 0x100000 3142 3143#define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L) 3144#define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L) 3145#define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L) 3146#define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L) 3147#define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L) 3148 3149#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT) 3150#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS) 3151 3152#define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L) 3153 3154#define CONTEXT_EXCEPTION_ACTIVE 0x8000000 3155#define CONTEXT_SERVICE_ACTIVE 0x10000000 3156#define CONTEXT_EXCEPTION_REQUEST 0x40000000 3157#define CONTEXT_EXCEPTION_REPORTING 0x80000000 3158 3159#endif /* !defined(RC_INVOKED) */ 3160 3161#define INITIAL_MXCSR 0x1f80 3162#define INITIAL_FPCSR 0x027f 3163 3164typedef struct DECLSPEC_ALIGN(16) _CONTEXT { 3165 ULONG64 P1Home; 3166 ULONG64 P2Home; 3167 ULONG64 P3Home; 3168 ULONG64 P4Home; 3169 ULONG64 P5Home; 3170 ULONG64 P6Home; 3171 ULONG ContextFlags; 3172 ULONG MxCsr; 3173 USHORT SegCs; 3174 USHORT SegDs; 3175 USHORT SegEs; 3176 USHORT SegFs; 3177 USHORT SegGs; 3178 USHORT SegSs; 3179 ULONG EFlags; 3180 ULONG64 Dr0; 3181 ULONG64 Dr1; 3182 ULONG64 Dr2; 3183 ULONG64 Dr3; 3184 ULONG64 Dr6; 3185 ULONG64 Dr7; 3186 ULONG64 Rax; 3187 ULONG64 Rcx; 3188 ULONG64 Rdx; 3189 ULONG64 Rbx; 3190 ULONG64 Rsp; 3191 ULONG64 Rbp; 3192 ULONG64 Rsi; 3193 ULONG64 Rdi; 3194 ULONG64 R8; 3195 ULONG64 R9; 3196 ULONG64 R10; 3197 ULONG64 R11; 3198 ULONG64 R12; 3199 ULONG64 R13; 3200 ULONG64 R14; 3201 ULONG64 R15; 3202 ULONG64 Rip; 3203 _ANONYMOUS_UNION union { 3204 XMM_SAVE_AREA32 FltSave; 3205 _ANONYMOUS_STRUCT struct { 3206 M128A Header[2]; 3207 M128A Legacy[8]; 3208 M128A Xmm0; 3209 M128A Xmm1; 3210 M128A Xmm2; 3211 M128A Xmm3; 3212 M128A Xmm4; 3213 M128A Xmm5; 3214 M128A Xmm6; 3215 M128A Xmm7; 3216 M128A Xmm8; 3217 M128A Xmm9; 3218 M128A Xmm10; 3219 M128A Xmm11; 3220 M128A Xmm12; 3221 M128A Xmm13; 3222 M128A Xmm14; 3223 M128A Xmm15; 3224 } DUMMYSTRUCTNAME; 3225 } DUMMYUNIONNAME; 3226 M128A VectorRegister[26]; 3227 ULONG64 VectorControl; 3228 ULONG64 DebugControl; 3229 ULONG64 LastBranchToRip; 3230 ULONG64 LastBranchFromRip; 3231 ULONG64 LastExceptionToRip; 3232 ULONG64 LastExceptionFromRip; 3233} CONTEXT; 3234 3235#define PCR_MINOR_VERSION 1 3236#define PCR_MAJOR_VERSION 1 3237 3238typedef struct _KPCR { 3239 _ANONYMOUS_UNION union { 3240 NT_TIB NtTib; 3241 _ANONYMOUS_STRUCT struct { 3242 union _KGDTENTRY64 *GdtBase; 3243 struct _KTSS64 *TssBase; 3244 ULONG64 UserRsp; 3245 struct _KPCR *Self; 3246 struct _KPRCB *CurrentPrcb; 3247 PKSPIN_LOCK_QUEUE LockArray; 3248 PVOID Used_Self; 3249 }; 3250 }; 3251 union _KIDTENTRY64 *IdtBase; 3252 ULONG64 Unused[2]; 3253 KIRQL Irql; 3254 UCHAR SecondLevelCacheAssociativity; 3255 UCHAR ObsoleteNumber; 3256 UCHAR Fill0; 3257 ULONG Unused0[3]; 3258 USHORT MajorVersion; 3259 USHORT MinorVersion; 3260 ULONG StallScaleFactor; 3261 PVOID Unused1[3]; 3262 ULONG KernelReserved[15]; 3263 ULONG SecondLevelCacheSize; 3264 ULONG HalReserved[16]; 3265 ULONG Unused2; 3266 PVOID KdVersionBlock; 3267 PVOID Unused3; 3268 ULONG PcrAlign1[24]; 3269} KPCR, *PKPCR; 3270 3271FORCEINLINE 3272PKPCR 3273KeGetPcr(VOID) 3274{ 3275 return (PKPCR)__readgsqword(FIELD_OFFSET(KPCR, Self)); 3276} 3277 3278FORCEINLINE 3279ULONG 3280KeGetCurrentProcessorNumber(VOID) 3281{ 3282 return (ULONG)__readgsword(0x184); 3283} 3284 3285 3286#define PTI_SHIFT 12L 3287#define PDI_SHIFT 21L 3288#define PPI_SHIFT 30L 3289#define PXI_SHIFT 39L 3290#define PTE_PER_PAGE 512 3291#define PDE_PER_PAGE 512 3292#define PPE_PER_PAGE 512 3293#define PXE_PER_PAGE 512 3294#define PTI_MASK_AMD64 (PTE_PER_PAGE - 1) 3295#define PDI_MASK_AMD64 (PDE_PER_PAGE - 1) 3296#define PPI_MASK (PPE_PER_PAGE - 1) 3297#define PXI_MASK (PXE_PER_PAGE - 1) 3298 3299#define PXE_BASE 0xFFFFF6FB7DBED000ULL 3300#define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL 3301#define PPE_BASE 0xFFFFF6FB7DA00000ULL 3302#define PDE_BASE 0xFFFFF6FB40000000ULL 3303#define PTE_BASE 0xFFFFF68000000000ULL 3304#define PXE_TOP 0xFFFFF6FB7DBEDFFFULL 3305#define PPE_TOP 0xFFFFF6FB7DBFFFFFULL 3306#define PDE_TOP 0xFFFFF6FB7FFFFFFFULL 3307#define PTE_TOP 0xFFFFF6FFFFFFFFFFULL 3308 3309extern NTKERNELAPI PVOID MmHighestUserAddress; 3310extern NTKERNELAPI PVOID MmSystemRangeStart; 3311extern NTKERNELAPI ULONG64 MmUserProbeAddress; 3312 3313#define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress 3314#define MM_SYSTEM_RANGE_START MmSystemRangeStart 3315#define MM_USER_PROBE_ADDRESS MmUserProbeAddress 3316#define MM_LOWEST_USER_ADDRESS (PVOID)0x10000 3317#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL 3318 3319 3320#elif defined(_M_IA64) 3321 3322#elif defined(_M_PPC) 3323 3324 3325#elif defined(_M_MIPS) 3326 3327#elif defined(_M_ARM) 3328#else 3329#error Unknown Architecture 3330#endif 3331 3332/****************************************************************************** 3333 * Executive Functions * 3334 ******************************************************************************/ 3335 3336static __inline PVOID 3337ExAllocateFromZone( 3338 IN PZONE_HEADER Zone) 3339{ 3340 PVOID Result = (PVOID)Zone->FreeList.Next; 3341 if (Zone->FreeList.Next) 3342 Zone->FreeList.Next = Zone->FreeList.Next->Next; 3343 return Result; 3344} 3345 3346static __inline PVOID 3347ExFreeToZone( 3348 IN PZONE_HEADER Zone, 3349 IN PVOID Block) 3350{ 3351 ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next; 3352 Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block); 3353 return ((PSINGLE_LIST_ENTRY) Block)->Next; 3354} 3355 3356/* 3357 * PVOID 3358 * ExInterlockedAllocateFromZone( 3359 * IN PZONE_HEADER Zone, 3360 * IN PKSPIN_LOCK Lock) 3361 */ 3362#define ExInterlockedAllocateFromZone(Zone, Lock) \ 3363 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock)) 3364 3365/* PVOID 3366 * ExInterlockedFreeToZone( 3367 * IN PZONE_HEADER Zone, 3368 * IN PVOID Block, 3369 * IN PKSPIN_LOCK Lock); 3370 */ 3371#define ExInterlockedFreeToZone(Zone, Block, Lock) \ 3372 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock) 3373 3374/* 3375 * BOOLEAN 3376 * ExIsFullZone( 3377 * IN PZONE_HEADER Zone) 3378 */ 3379#define ExIsFullZone(Zone) \ 3380 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL) 3381 3382/* BOOLEAN 3383 * ExIsObjectInFirstZoneSegment( 3384 * IN PZONE_HEADER Zone, 3385 * IN PVOID Object); 3386 */ 3387#define ExIsObjectInFirstZoneSegment(Zone,Object) \ 3388 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \ 3389 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \ 3390 (Zone)->TotalSegmentSize)) ) 3391 3392#define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite 3393#define ExAcquireResourceShared ExAcquireResourceSharedLite 3394#define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite 3395#define ExDeleteResource ExDeleteResourceLite 3396#define ExInitializeResource ExInitializeResourceLite 3397#define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite 3398#define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite 3399#define ExIsResourceAcquired ExIsResourceAcquiredSharedLite 3400#define ExReleaseResourceForThread ExReleaseResourceForThreadLite 3401 3402#ifndef _M_IX86 3403#define RESULT_ZERO 0 3404#define RESULT_NEGATIVE 1 3405#define RESULT_POSITIVE 2 3406#endif 3407 3408typedef enum _INTERLOCKED_RESULT { 3409 ResultNegative = RESULT_NEGATIVE, 3410 ResultZero = RESULT_ZERO, 3411 ResultPositive = RESULT_POSITIVE 3412} INTERLOCKED_RESULT; 3413 3414#ifdef _X86_ 3415 3416NTKERNELAPI 3417INTERLOCKED_RESULT 3418FASTCALL 3419Exfi386InterlockedIncrementLong( 3420 IN OUT LONG volatile *Addend); 3421 3422NTKERNELAPI 3423INTERLOCKED_RESULT 3424FASTCALL 3425Exfi386InterlockedDecrementLong( 3426 IN PLONG Addend); 3427 3428NTKERNELAPI 3429ULONG 3430FASTCALL 3431Exfi386InterlockedExchangeUlong( 3432 IN PULONG Target, 3433 IN ULONG Value); 3434 3435#endif 3436 3437 3438#if (NTDDI_VERSION >= NTDDI_WIN2K) 3439NTKERNELAPI 3440NTSTATUS 3441NTAPI 3442ExExtendZone( 3443 IN OUT PZONE_HEADER Zone, 3444 IN OUT PVOID Segment, 3445 IN ULONG SegmentSize); 3446 3447NTKERNELAPI 3448NTSTATUS 3449NTAPI 3450ExInitializeZone( 3451 OUT PZONE_HEADER Zone, 3452 IN ULONG BlockSize, 3453 IN OUT PVOID InitialSegment, 3454 IN ULONG InitialSegmentSize); 3455 3456NTKERNELAPI 3457NTSTATUS 3458NTAPI 3459ExInterlockedExtendZone( 3460 IN OUT PZONE_HEADER Zone, 3461 IN OUT PVOID Segment, 3462 IN ULONG SegmentSize, 3463 IN OUT PKSPIN_LOCK Lock); 3464 3465NTKERNELAPI 3466NTSTATUS 3467NTAPI 3468ExUuidCreate( 3469 OUT UUID *Uuid); 3470 3471NTKERNELAPI 3472DECLSPEC_NORETURN 3473VOID 3474NTAPI 3475ExRaiseAccessViolation(VOID); 3476 3477NTKERNELAPI 3478DECLSPEC_NORETURN 3479VOID 3480NTAPI 3481ExRaiseDatatypeMisalignment(VOID); 3482 3483#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 3484 3485 3486/* Hardware Abstraction Layer Functions */ 3487 3488#if (NTDDI_VERSION >= NTDDI_WIN2K) 3489 3490#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) 3491 3492/* Nothing here */ 3493 3494#else /* USE_DMA_MACROS ... */ 3495 3496//DECLSPEC_DEPRECATED_DDK 3497NTHALAPI 3498VOID 3499NTAPI 3500IoFreeAdapterChannel( 3501 IN PADAPTER_OBJECT AdapterObject); 3502 3503//DECLSPEC_DEPRECATED_DDK 3504NTHALAPI 3505BOOLEAN 3506NTAPI 3507IoFlushAdapterBuffers( 3508 IN PADAPTER_OBJECT AdapterObject, 3509 IN PMDL Mdl, 3510 IN PVOID MapRegisterBase, 3511 IN PVOID CurrentVa, 3512 IN ULONG Length, 3513 IN BOOLEAN WriteToDevice); 3514 3515//DECLSPEC_DEPRECATED_DDK 3516NTHALAPI 3517VOID 3518NTAPI 3519IoFreeMapRegisters( 3520 IN PADAPTER_OBJECT AdapterObject, 3521 IN PVOID MapRegisterBase, 3522 IN ULONG NumberOfMapRegisters); 3523 3524//DECLSPEC_DEPRECATED_DDK 3525NTHALAPI 3526PVOID 3527NTAPI 3528HalAllocateCommonBuffer( 3529 IN PADAPTER_OBJECT AdapterObject, 3530 IN ULONG Length, 3531 OUT PPHYSICAL_ADDRESS LogicalAddress, 3532 IN BOOLEAN CacheEnabled); 3533 3534//DECLSPEC_DEPRECATED_DDK 3535NTHALAPI 3536VOID 3537NTAPI 3538HalFreeCommonBuffer( 3539 IN PADAPTER_OBJECT AdapterObject, 3540 IN ULONG Length, 3541 IN PHYSICAL_ADDRESS LogicalAddress, 3542 IN PVOID VirtualAddress, 3543 IN BOOLEAN CacheEnabled); 3544 3545//DECLSPEC_DEPRECATED_DDK 3546NTHALAPI 3547ULONG 3548NTAPI 3549HalReadDmaCounter( 3550 IN PADAPTER_OBJECT AdapterObject); 3551 3552NTHALAPI 3553NTSTATUS 3554NTAPI 3555HalAllocateAdapterChannel( 3556 IN PADAPTER_OBJECT AdapterObject, 3557 IN PWAIT_CONTEXT_BLOCK Wcb, 3558 IN ULONG NumberOfMapRegisters, 3559 IN PDRIVER_CONTROL ExecutionRoutine); 3560 3561#endif /* USE_DMA_MACROS ... */ 3562 3563#if !defined(NO_LEGACY_DRIVERS) 3564NTHALAPI 3565NTSTATUS 3566NTAPI 3567HalAssignSlotResources( 3568 IN PUNICODE_STRING RegistryPath, 3569 IN PUNICODE_STRING DriverClassName, 3570 IN PDRIVER_OBJECT DriverObject, 3571 IN PDEVICE_OBJECT DeviceObject, 3572 IN INTERFACE_TYPE BusType, 3573 IN ULONG BusNumber, 3574 IN ULONG SlotNumber, 3575 IN OUT PCM_RESOURCE_LIST *AllocatedResources); 3576 3577NTHALAPI 3578ULONG 3579NTAPI 3580HalGetInterruptVector( 3581 IN INTERFACE_TYPE InterfaceType, 3582 IN ULONG BusNumber, 3583 IN ULONG BusInterruptLevel, 3584 IN ULONG BusInterruptVector, 3585 OUT PKIRQL Irql, 3586 OUT PKAFFINITY Affinity); 3587 3588NTHALAPI 3589ULONG 3590NTAPI 3591HalSetBusData( 3592 IN BUS_DATA_TYPE BusDataType, 3593 IN ULONG BusNumber, 3594 IN ULONG SlotNumber, 3595 IN PVOID Buffer, 3596 IN ULONG Length); 3597 3598NTHALAPI 3599ULONG 3600NTAPI 3601HalGetBusData( 3602 IN BUS_DATA_TYPE BusDataType, 3603 IN ULONG BusNumber, 3604 IN ULONG SlotNumber, 3605 OUT PVOID Buffer, 3606 IN ULONG Length); 3607 3608NTHALAPI 3609BOOLEAN 3610NTAPI 3611HalMakeBeep( 3612 IN ULONG Frequency); 3613#endif /* !defined(NO_LEGACY_DRIVERS) */ 3614 3615NTHALAPI 3616PADAPTER_OBJECT 3617NTAPI 3618HalGetAdapter( 3619 IN PDEVICE_DESCRIPTION DeviceDescription, 3620 OUT PULONG NumberOfMapRegisters); 3621 3622VOID 3623NTAPI 3624HalPutDmaAdapter( 3625 IN PADAPTER_OBJECT DmaAdapter); 3626 3627NTHALAPI 3628VOID 3629NTAPI 3630HalAcquireDisplayOwnership( 3631 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters); 3632 3633NTHALAPI 3634ULONG 3635NTAPI 3636HalGetBusDataByOffset( 3637 IN BUS_DATA_TYPE BusDataType, 3638 IN ULONG BusNumber, 3639 IN ULONG SlotNumber, 3640 OUT PVOID Buffer, 3641 IN ULONG Offset, 3642 IN ULONG Length); 3643 3644NTHALAPI 3645ULONG 3646NTAPI 3647HalSetBusDataByOffset( 3648 IN BUS_DATA_TYPE BusDataType, 3649 IN ULONG BusNumber, 3650 IN ULONG SlotNumber, 3651 IN PVOID Buffer, 3652 IN ULONG Offset, 3653 IN ULONG Length); 3654 3655NTHALAPI 3656BOOLEAN 3657NTAPI 3658HalTranslateBusAddress( 3659 IN INTERFACE_TYPE InterfaceType, 3660 IN ULONG BusNumber, 3661 IN PHYSICAL_ADDRESS BusAddress, 3662 IN OUT PULONG AddressSpace, 3663 OUT PPHYSICAL_ADDRESS TranslatedAddress); 3664 3665NTHALAPI 3666PVOID 3667NTAPI 3668HalAllocateCrashDumpRegisters( 3669 IN PADAPTER_OBJECT AdapterObject, 3670 IN OUT PULONG NumberOfMapRegisters); 3671 3672NTSTATUS 3673NTAPI 3674HalGetScatterGatherList( 3675 IN PADAPTER_OBJECT DmaAdapter, 3676 IN PDEVICE_OBJECT DeviceObject, 3677 IN PMDL Mdl, 3678 IN PVOID CurrentVa, 3679 IN ULONG Length, 3680 IN PDRIVER_LIST_CONTROL ExecutionRoutine, 3681 IN PVOID Context, 3682 IN BOOLEAN WriteToDevice); 3683 3684VOID 3685NTAPI 3686HalPutScatterGatherList( 3687 IN PADAPTER_OBJECT DmaAdapter, 3688 IN PSCATTER_GATHER_LIST ScatterGather, 3689 IN BOOLEAN WriteToDevice); 3690 3691#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 3692 3693#if (NTDDI_VERSION >= NTDDI_WINXP) 3694NTKERNELAPI 3695VOID 3696FASTCALL 3697HalExamineMBR( 3698 IN PDEVICE_OBJECT DeviceObject, 3699 IN ULONG SectorSize, 3700 IN ULONG MBRTypeIdentifier, 3701 OUT PVOID *Buffer); 3702#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 3703 3704#if (NTDDI_VERSION >= NTDDI_WIN7) 3705 3706NTSTATUS 3707NTAPI 3708HalAllocateHardwareCounters( 3709 IN PGROUP_AFFINITY GroupAffinty, 3710 IN ULONG GroupCount, 3711 IN PPHYSICAL_COUNTER_RESOURCE_LIST ResourceList, 3712 OUT PHANDLE CounterSetHandle); 3713 3714NTSTATUS 3715NTAPI 3716HalFreeHardwareCounters( 3717 IN HANDLE CounterSetHandle); 3718 3719#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 3720 3721#if defined(_IA64_) 3722#if (NTDDI_VERSION >= NTDDI_WIN2K) 3723NTHALAPI 3724ULONG 3725NTAPI 3726HalGetDmaAlignmentRequirement(VOID); 3727#endif 3728#endif /* defined(_IA64_) */ 3729 3730#if defined(_M_IX86) || defined(_M_AMD64) 3731#define HalGetDmaAlignmentRequirement() 1L 3732#endif 3733 3734#if (NTDDI_VERSION >= NTDDI_WIN7) 3735 3736typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR *PWHEA_ERROR_SOURCE_DESCRIPTOR; 3737typedef struct _WHEA_ERROR_RECORD *PWHEA_ERROR_RECORD; 3738 3739NTHALAPI 3740VOID 3741NTAPI 3742HalBugCheckSystem( 3743 IN PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource, 3744 IN PWHEA_ERROR_RECORD ErrorRecord); 3745 3746#else 3747 3748typedef struct _WHEA_ERROR_RECORD *PWHEA_ERROR_RECORD; 3749 3750NTHALAPI 3751VOID 3752NTAPI 3753HalBugCheckSystem( 3754 IN PWHEA_ERROR_RECORD ErrorRecord); 3755 3756#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 3757 3758/****************************************************************************** 3759 * I/O Manager Functions * 3760 ******************************************************************************/ 3761 3762/* 3763 * VOID IoAssignArcName( 3764 * IN PUNICODE_STRING ArcName, 3765 * IN PUNICODE_STRING DeviceName); 3766 */ 3767#define IoAssignArcName(_ArcName, _DeviceName) ( \ 3768 IoCreateSymbolicLink((_ArcName), (_DeviceName))) 3769 3770/* 3771 * VOID 3772 * IoDeassignArcName( 3773 * IN PUNICODE_STRING ArcName) 3774 */ 3775#define IoDeassignArcName IoDeleteSymbolicLink 3776 3777FORCEINLINE 3778VOID 3779NTAPI 3780IoInitializeDriverCreateContext( 3781 PIO_DRIVER_CREATE_CONTEXT DriverContext) 3782{ 3783 RtlZeroMemory(DriverContext, sizeof(IO_DRIVER_CREATE_CONTEXT)); 3784 DriverContext->Size = sizeof(IO_DRIVER_CREATE_CONTEXT); 3785} 3786 3787#if (NTDDI_VERSION >= NTDDI_WIN2K) 3788 3789#if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)) 3790NTKERNELAPI 3791NTSTATUS 3792NTAPI 3793IoAllocateAdapterChannel( 3794 IN PADAPTER_OBJECT AdapterObject, 3795 IN PDEVICE_OBJECT DeviceObject, 3796 IN ULONG NumberOfMapRegisters, 3797 IN PDRIVER_CONTROL ExecutionRoutine, 3798 IN PVOID Context); 3799#endif 3800 3801#if !defined(DMA_MACROS_DEFINED) 3802//DECLSPEC_DEPRECATED_DDK 3803NTHALAPI 3804PHYSICAL_ADDRESS 3805NTAPI 3806IoMapTransfer( 3807 IN PADAPTER_OBJECT AdapterObject, 3808 IN PMDL Mdl, 3809 IN PVOID MapRegisterBase, 3810 IN PVOID CurrentVa, 3811 IN OUT PULONG Length, 3812 IN BOOLEAN WriteToDevice); 3813#endif 3814 3815NTKERNELAPI 3816VOID 3817NTAPI 3818IoAllocateController( 3819 IN PCONTROLLER_OBJECT ControllerObject, 3820 IN PDEVICE_OBJECT DeviceObject, 3821 IN PDRIVER_CONTROL ExecutionRoutine, 3822 IN PVOID Context OPTIONAL); 3823 3824NTKERNELAPI 3825PCONTROLLER_OBJECT 3826NTAPI 3827IoCreateController( 3828 IN ULONG Size); 3829 3830NTKERNELAPI 3831VOID 3832NTAPI 3833IoDeleteController( 3834 IN PCONTROLLER_OBJECT ControllerObject); 3835 3836NTKERNELAPI 3837VOID 3838NTAPI 3839IoFreeController( 3840 IN PCONTROLLER_OBJECT ControllerObject); 3841 3842NTKERNELAPI 3843PCONFIGURATION_INFORMATION 3844NTAPI 3845IoGetConfigurationInformation(VOID); 3846 3847NTKERNELAPI 3848PDEVICE_OBJECT 3849NTAPI 3850IoGetDeviceToVerify( 3851 IN PETHREAD Thread); 3852 3853NTKERNELAPI 3854VOID 3855NTAPI 3856IoCancelFileOpen( 3857 IN PDEVICE_OBJECT DeviceObject, 3858 IN PFILE_OBJECT FileObject); 3859 3860NTKERNELAPI 3861PGENERIC_MAPPING 3862NTAPI 3863IoGetFileObjectGenericMapping(VOID); 3864 3865NTKERNELAPI 3866PIRP 3867NTAPI 3868IoMakeAssociatedIrp( 3869 IN PIRP Irp, 3870 IN CCHAR StackSize); 3871 3872NTKERNELAPI 3873NTSTATUS 3874NTAPI 3875IoQueryDeviceDescription( 3876 IN PINTERFACE_TYPE BusType OPTIONAL, 3877 IN PULONG BusNumber OPTIONAL, 3878 IN PCONFIGURATION_TYPE ControllerType OPTIONAL, 3879 IN PULONG ControllerNumber OPTIONAL, 3880 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL, 3881 IN PULONG PeripheralNumber OPTIONAL, 3882 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine, 3883 IN OUT PVOID Context OPTIONAL); 3884 3885NTKERNELAPI 3886VOID 3887NTAPI 3888IoRaiseHardError( 3889 IN PIRP Irp, 3890 IN PVPB Vpb OPTIONAL, 3891 IN PDEVICE_OBJECT RealDeviceObject); 3892 3893NTKERNELAPI 3894BOOLEAN 3895NTAPI 3896IoRaiseInformationalHardError( 3897 IN NTSTATUS ErrorStatus, 3898 IN PUNICODE_STRING String OPTIONAL, 3899 IN PKTHREAD Thread OPTIONAL); 3900 3901NTKERNELAPI 3902VOID 3903NTAPI 3904IoRegisterBootDriverReinitialization( 3905 IN PDRIVER_OBJECT DriverObject, 3906 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine, 3907 IN PVOID Context OPTIONAL); 3908 3909NTKERNELAPI 3910VOID 3911NTAPI 3912IoRegisterDriverReinitialization( 3913 IN PDRIVER_OBJECT DriverObject, 3914 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine, 3915 IN PVOID Context OPTIONAL); 3916 3917NTKERNELAPI 3918NTSTATUS 3919NTAPI 3920IoAttachDeviceByPointer( 3921 IN PDEVICE_OBJECT SourceDevice, 3922 IN PDEVICE_OBJECT TargetDevice); 3923 3924NTKERNELAPI 3925NTSTATUS 3926NTAPI 3927IoReportDetectedDevice( 3928 IN PDRIVER_OBJECT DriverObject, 3929 IN INTERFACE_TYPE LegacyBusType, 3930 IN ULONG BusNumber, 3931 IN ULONG SlotNumber, 3932 IN PCM_RESOURCE_LIST ResourceList OPTIONAL, 3933 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL, 3934 IN BOOLEAN ResourceAssigned, 3935 IN OUT PDEVICE_OBJECT *DeviceObject OPTIONAL); 3936 3937NTKERNELAPI 3938NTSTATUS 3939NTAPI 3940IoReportResourceForDetection( 3941 IN PDRIVER_OBJECT DriverObject, 3942 IN PCM_RESOURCE_LIST DriverList OPTIONAL, 3943 IN ULONG DriverListSize OPTIONAL, 3944 IN PDEVICE_OBJECT DeviceObject OPTIONAL, 3945 IN PCM_RESOURCE_LIST DeviceList OPTIONAL, 3946 IN ULONG DeviceListSize OPTIONAL, 3947 OUT PBOOLEAN ConflictDetected); 3948 3949NTKERNELAPI 3950NTSTATUS 3951NTAPI 3952IoReportResourceUsage( 3953 IN PUNICODE_STRING DriverClassName OPTIONAL, 3954 IN PDRIVER_OBJECT DriverObject, 3955 IN PCM_RESOURCE_LIST DriverList OPTIONAL, 3956 IN ULONG DriverListSize OPTIONAL, 3957 IN PDEVICE_OBJECT DeviceObject, 3958 IN PCM_RESOURCE_LIST DeviceList OPTIONAL, 3959 IN ULONG DeviceListSize OPTIONAL, 3960 IN BOOLEAN OverrideConflict, 3961 OUT PBOOLEAN ConflictDetected); 3962 3963NTKERNELAPI 3964VOID 3965NTAPI 3966IoSetHardErrorOrVerifyDevice( 3967 IN PIRP Irp, 3968 IN PDEVICE_OBJECT DeviceObject); 3969 3970NTKERNELAPI 3971NTSTATUS 3972NTAPI 3973IoAssignResources( 3974 IN PUNICODE_STRING RegistryPath, 3975 IN PUNICODE_STRING DriverClassName OPTIONAL, 3976 IN PDRIVER_OBJECT DriverObject, 3977 IN PDEVICE_OBJECT DeviceObject OPTIONAL, 3978 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL, 3979 IN OUT PCM_RESOURCE_LIST *AllocatedResources); 3980 3981NTKERNELAPI 3982BOOLEAN 3983NTAPI 3984IoSetThreadHardErrorMode( 3985 IN BOOLEAN EnableHardErrors); 3986 3987 3988#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 3989 3990#if (NTDDI_VERSION >= NTDDI_WIN2KSP3) 3991 3992NTKERNELAPI 3993BOOLEAN 3994NTAPI 3995IoIsFileOriginRemote( 3996 IN PFILE_OBJECT FileObject); 3997 3998NTKERNELAPI 3999NTSTATUS 4000NTAPI 4001IoSetFileOrigin( 4002 IN PFILE_OBJECT FileObject, 4003 IN BOOLEAN Remote); 4004 4005#endif /* (NTDDI_VERSION >= NTDDI_WIN2KSP3) */ 4006 4007#if (NTDDI_VERSION >= NTDDI_WINXP) 4008 4009NTKERNELAPI 4010NTSTATUS 4011FASTCALL 4012IoReadPartitionTable( 4013 IN PDEVICE_OBJECT DeviceObject, 4014 IN ULONG SectorSize, 4015 IN BOOLEAN ReturnRecognizedPartitions, 4016 OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer); 4017 4018NTKERNELAPI 4019NTSTATUS 4020FASTCALL 4021IoSetPartitionInformation( 4022 IN PDEVICE_OBJECT DeviceObject, 4023 IN ULONG SectorSize, 4024 IN ULONG PartitionNumber, 4025 IN ULONG PartitionType); 4026 4027NTKERNELAPI 4028NTSTATUS 4029FASTCALL 4030IoWritePartitionTable( 4031 IN PDEVICE_OBJECT DeviceObject, 4032 IN ULONG SectorSize, 4033 IN ULONG SectorsPerTrack, 4034 IN ULONG NumberOfHeads, 4035 IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer); 4036 4037NTKERNELAPI 4038NTSTATUS 4039NTAPI 4040IoCreateDisk( 4041 IN PDEVICE_OBJECT DeviceObject, 4042 IN struct _CREATE_DISK* Disk OPTIONAL); 4043 4044NTKERNELAPI 4045NTSTATUS 4046NTAPI 4047IoReadDiskSignature( 4048 IN PDEVICE_OBJECT DeviceObject, 4049 IN ULONG BytesPerSector, 4050 OUT PDISK_SIGNATURE Signature); 4051 4052NTKERNELAPI 4053NTSTATUS 4054NTAPI 4055IoReadPartitionTableEx( 4056 IN PDEVICE_OBJECT DeviceObject, 4057 OUT struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer); 4058 4059NTKERNELAPI 4060NTSTATUS 4061NTAPI 4062IoSetPartitionInformationEx( 4063 IN PDEVICE_OBJECT DeviceObject, 4064 IN ULONG PartitionNumber, 4065 IN struct _SET_PARTITION_INFORMATION_EX *PartitionInfo); 4066 4067NTKERNELAPI 4068NTSTATUS 4069NTAPI 4070IoSetSystemPartition( 4071 IN PUNICODE_STRING VolumeNameString); 4072 4073NTKERNELAPI 4074NTSTATUS 4075NTAPI 4076IoVerifyPartitionTable( 4077 IN PDEVICE_OBJECT DeviceObject, 4078 IN BOOLEAN FixErrors); 4079 4080NTKERNELAPI 4081NTSTATUS 4082NTAPI 4083IoVolumeDeviceToDosName( 4084 IN PVOID VolumeDeviceObject, 4085 OUT PUNICODE_STRING DosName); 4086 4087NTKERNELAPI 4088NTSTATUS 4089NTAPI 4090IoWritePartitionTableEx( 4091 IN PDEVICE_OBJECT DeviceObject, 4092 IN struct _DRIVE_LAYOUT_INFORMATION_EX *DriveLayout); 4093 4094NTKERNELAPI 4095NTSTATUS 4096NTAPI 4097IoCreateFileSpecifyDeviceObjectHint( 4098 OUT PHANDLE FileHandle, 4099 IN ACCESS_MASK DesiredAccess, 4100 IN POBJECT_ATTRIBUTES ObjectAttributes, 4101 OUT PIO_STATUS_BLOCK IoStatusBlock, 4102 IN PLARGE_INTEGER AllocationSize OPTIONAL, 4103 IN ULONG FileAttributes, 4104 IN ULONG ShareAccess, 4105 IN ULONG Disposition, 4106 IN ULONG CreateOptions, 4107 IN PVOID EaBuffer OPTIONAL, 4108 IN ULONG EaLength, 4109 IN CREATE_FILE_TYPE CreateFileType, 4110 IN PVOID InternalParameters OPTIONAL, 4111 IN ULONG Options, 4112 IN PVOID DeviceObject OPTIONAL); 4113 4114NTKERNELAPI 4115NTSTATUS 4116NTAPI 4117IoAttachDeviceToDeviceStackSafe( 4118 IN PDEVICE_OBJECT SourceDevice, 4119 IN PDEVICE_OBJECT TargetDevice, 4120 OUT PDEVICE_OBJECT *AttachedToDeviceObject); 4121 4122 4123#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 4124 4125#if (NTDDI_VERSION >= NTDDI_WS03) 4126NTKERNELAPI 4127IO_PAGING_PRIORITY 4128FASTCALL 4129IoGetPagingIoPriority( 4130 IN PIRP Irp); 4131 4132#endif /* (NTDDI_VERSION >= NTDDI_WS03) */ 4133#if (NTDDI_VERSION >= NTDDI_WS03SP1) 4134 4135BOOLEAN 4136NTAPI 4137IoTranslateBusAddress( 4138 IN INTERFACE_TYPE InterfaceType, 4139 IN ULONG BusNumber, 4140 IN PHYSICAL_ADDRESS BusAddress, 4141 IN OUT PULONG AddressSpace, 4142 OUT PPHYSICAL_ADDRESS TranslatedAddress); 4143#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ 4144 4145#if (NTDDI_VERSION >= NTDDI_VISTA) 4146NTKERNELAPI 4147NTSTATUS 4148NTAPI 4149IoUpdateDiskGeometry( 4150 IN PDEVICE_OBJECT DeviceObject, 4151 IN struct _DISK_GEOMETRY_EX* OldDiskGeometry, 4152 IN struct _DISK_GEOMETRY_EX* NewDiskGeometry); 4153 4154PTXN_PARAMETER_BLOCK 4155NTAPI 4156IoGetTransactionParameterBlock( 4157 IN PFILE_OBJECT FileObject); 4158 4159NTKERNELAPI 4160NTSTATUS 4161NTAPI 4162IoCreateFileEx( 4163 OUT PHANDLE FileHandle, 4164 IN ACCESS_MASK DesiredAccess, 4165 IN POBJECT_ATTRIBUTES ObjectAttributes, 4166 OUT PIO_STATUS_BLOCK IoStatusBlock, 4167 IN PLARGE_INTEGER AllocationSize OPTIONAL, 4168 IN ULONG FileAttributes, 4169 IN ULONG ShareAccess, 4170 IN ULONG Disposition, 4171 IN ULONG CreateOptions, 4172 IN PVOID EaBuffer OPTIONAL, 4173 IN ULONG EaLength, 4174 IN CREATE_FILE_TYPE CreateFileType, 4175 IN PVOID InternalParameters OPTIONAL, 4176 IN ULONG Options, 4177 IN PIO_DRIVER_CREATE_CONTEXT DriverContext OPTIONAL); 4178 4179NTSTATUS 4180NTAPI 4181IoSetIrpExtraCreateParameter( 4182 IN OUT PIRP Irp, 4183 IN struct _ECP_LIST *ExtraCreateParameter); 4184 4185VOID 4186NTAPI 4187IoClearIrpExtraCreateParameter( 4188 IN OUT PIRP Irp); 4189 4190NTSTATUS 4191NTAPI 4192IoGetIrpExtraCreateParameter( 4193 IN PIRP Irp, 4194 OUT struct _ECP_LIST **ExtraCreateParameter OPTIONAL); 4195 4196BOOLEAN 4197NTAPI 4198IoIsFileObjectIgnoringSharing( 4199 IN PFILE_OBJECT FileObject); 4200 4201#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 4202 4203#if (NTDDI_VERSION >= NTDDI_WIN7) 4204 4205NTSTATUS 4206NTAPI 4207IoSetFileObjectIgnoreSharing( 4208 IN PFILE_OBJECT FileObject); 4209 4210#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 4211 4212/****************************************************************************** 4213 * Kernel Debugger Functions * 4214 ******************************************************************************/ 4215NTSYSAPI 4216ULONG 4217NTAPI 4218DbgPrompt( 4219 IN PCCH Prompt, 4220 OUT PCH Response, 4221 IN ULONG MaximumResponseLength); 4222 4223/****************************************************************************** 4224 * Kernel Functions * 4225 ******************************************************************************/ 4226 4227NTKERNELAPI 4228VOID 4229FASTCALL 4230KeInvalidateRangeAllCaches( 4231 IN PVOID BaseAddress, 4232 IN ULONG Length); 4233 4234#if (NTDDI_VERSION >= NTDDI_WIN2K) 4235 4236NTKERNELAPI 4237VOID 4238NTAPI 4239KeSetImportanceDpc( 4240 IN OUT PRKDPC Dpc, 4241 IN KDPC_IMPORTANCE Importance); 4242 4243NTKERNELAPI 4244LONG 4245NTAPI 4246KePulseEvent( 4247 IN OUT PRKEVENT Event, 4248 IN KPRIORITY Increment, 4249 IN BOOLEAN Wait); 4250 4251NTKERNELAPI 4252LONG 4253NTAPI 4254KeSetBasePriorityThread( 4255 IN OUT PRKTHREAD Thread, 4256 IN LONG Increment); 4257 4258NTKERNELAPI 4259VOID 4260NTAPI 4261KeEnterCriticalRegion(VOID); 4262 4263NTKERNELAPI 4264VOID 4265NTAPI 4266KeLeaveCriticalRegion(VOID); 4267 4268NTKERNELAPI 4269DECLSPEC_NORETURN 4270VOID 4271NTAPI 4272KeBugCheck( 4273 IN ULONG BugCheckCode); 4274#if defined(SINGLE_GROUP_LEGACY_API) 4275 4276 4277NTKERNELAPI 4278VOID 4279NTAPI 4280KeSetTargetProcessorDpc( 4281 IN OUT PRKDPC Dpc, 4282 IN CCHAR Number); 4283 4284NTKERNELAPI 4285KAFFINITY 4286NTAPI 4287KeQueryActiveProcessors(VOID); 4288#endif /* defined(SINGLE_GROUP_LEGACY_API) */ 4289 4290 4291#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 4292 4293#if (NTDDI_VERSION >= NTDDI_WINXP) 4294 4295NTKERNELAPI 4296BOOLEAN 4297NTAPI 4298KeAreApcsDisabled(VOID); 4299 4300#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 4301 4302#if (NTDDI_VERSION >= NTDDI_WS03) 4303 4304 4305NTKERNELAPI 4306BOOLEAN 4307NTAPI 4308KeInvalidateAllCaches(VOID); 4309#endif /* (NTDDI_VERSION >= NTDDI_WS03) */ 4310#if (NTDDI_VERSION >= NTDDI_WS03SP1) 4311 4312NTKERNELAPI 4313NTSTATUS 4314NTAPI 4315KeExpandKernelStackAndCallout( 4316 IN PEXPAND_STACK_CALLOUT Callout, 4317 IN PVOID Parameter OPTIONAL, 4318 IN SIZE_T Size); 4319 4320NTKERNELAPI 4321VOID 4322NTAPI 4323KeEnterGuardedRegion(VOID); 4324 4325NTKERNELAPI 4326VOID 4327NTAPI 4328KeLeaveGuardedRegion(VOID); 4329#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ 4330 4331#if (NTDDI_VERSION >= NTDDI_VISTA) 4332#if defined(SINGLE_GROUP_LEGACY_API) 4333 4334NTKERNELAPI 4335ULONG 4336NTAPI 4337KeQueryActiveProcessorCount( 4338 OUT PKAFFINITY ActiveProcessors OPTIONAL); 4339 4340NTKERNELAPI 4341ULONG 4342NTAPI 4343KeQueryMaximumProcessorCount(VOID); 4344#endif /* SINGLE_GROUP_LEGACY_API */ 4345 4346#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 4347 4348#if (NTDDI_VERSION >= NTDDI_WIN7) 4349 4350NTKERNELAPI 4351ULONG 4352NTAPI 4353KeQueryActiveProcessorCountEx( 4354 IN USHORT GroupNumber); 4355 4356NTKERNELAPI 4357ULONG 4358NTAPI 4359KeQueryMaximumProcessorCountEx( 4360 IN USHORT GroupNumber); 4361 4362NTKERNELAPI 4363USHORT 4364NTAPI 4365KeQueryActiveGroupCount(VOID); 4366 4367NTKERNELAPI 4368USHORT 4369NTAPI 4370KeQueryMaximumGroupCount(VOID); 4371 4372NTKERNELAPI 4373KAFFINITY 4374NTAPI 4375KeQueryGroupAffinity( 4376 IN USHORT GroupNumber); 4377 4378NTKERNELAPI 4379ULONG 4380NTAPI 4381KeGetCurrentProcessorNumberEx( 4382 OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL); 4383 4384NTKERNELAPI 4385VOID 4386NTAPI 4387KeQueryNodeActiveAffinity( 4388 IN USHORT NodeNumber, 4389 OUT PGROUP_AFFINITY Affinity OPTIONAL, 4390 OUT PUSHORT Count OPTIONAL); 4391 4392NTKERNELAPI 4393USHORT 4394NTAPI 4395KeQueryNodeMaximumProcessorCount( 4396 IN USHORT NodeNumber); 4397 4398NTKERNELAPI 4399USHORT 4400NTAPI 4401KeQueryHighestNodeNumber(VOID); 4402 4403NTKERNELAPI 4404USHORT 4405NTAPI 4406KeGetCurrentNodeNumber(VOID); 4407 4408NTKERNELAPI 4409NTSTATUS 4410NTAPI 4411KeQueryLogicalProcessorRelationship( 4412 IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL, 4413 IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType, 4414 OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL, 4415 IN OUT PULONG Length); 4416 4417NTKERNELAPI 4418NTSTATUS 4419NTAPI 4420KeSetHardwareCounterConfiguration( 4421 IN PHARDWARE_COUNTER CounterArray, 4422 IN ULONG Count); 4423 4424NTKERNELAPI 4425NTSTATUS 4426NTAPI 4427KeQueryHardwareCounterConfiguration( 4428 OUT PHARDWARE_COUNTER CounterArray, 4429 IN ULONG MaximumCount, 4430 OUT PULONG Count); 4431#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 4432 4433/****************************************************************************** 4434 * Memory manager Functions * 4435 ******************************************************************************/ 4436 4437#if (NTDDI_VERSION >= NTDDI_WIN2K) 4438 4439NTKERNELAPI 4440PPHYSICAL_MEMORY_RANGE 4441NTAPI 4442MmGetPhysicalMemoryRanges(VOID); 4443 4444NTKERNELAPI 4445PHYSICAL_ADDRESS 4446NTAPI 4447MmGetPhysicalAddress( 4448 IN PVOID BaseAddress); 4449 4450NTKERNELAPI 4451BOOLEAN 4452NTAPI 4453MmIsNonPagedSystemAddressValid( 4454 IN PVOID VirtualAddress); 4455 4456NTKERNELAPI 4457PVOID 4458NTAPI 4459MmAllocateNonCachedMemory( 4460 IN SIZE_T NumberOfBytes); 4461 4462NTKERNELAPI 4463VOID 4464NTAPI 4465MmFreeNonCachedMemory( 4466 IN PVOID BaseAddress, 4467 IN SIZE_T NumberOfBytes); 4468 4469NTKERNELAPI 4470PVOID 4471NTAPI 4472MmGetVirtualForPhysical( 4473 IN PHYSICAL_ADDRESS PhysicalAddress); 4474 4475NTKERNELAPI 4476NTSTATUS 4477NTAPI 4478MmMapUserAddressesToPage( 4479 IN PVOID BaseAddress, 4480 IN SIZE_T NumberOfBytes, 4481 IN PVOID PageAddress); 4482 4483NTKERNELAPI 4484PVOID 4485NTAPI 4486MmMapVideoDisplay( 4487 IN PHYSICAL_ADDRESS PhysicalAddress, 4488 IN SIZE_T NumberOfBytes, 4489 IN MEMORY_CACHING_TYPE CacheType); 4490 4491NTKERNELAPI 4492NTSTATUS 4493NTAPI 4494MmMapViewInSessionSpace( 4495 IN PVOID Section, 4496 OUT PVOID *MappedBase, 4497 IN OUT PSIZE_T ViewSize); 4498 4499NTKERNELAPI 4500NTSTATUS 4501NTAPI 4502MmMapViewInSystemSpace( 4503 IN PVOID Section, 4504 OUT PVOID *MappedBase, 4505 IN OUT PSIZE_T ViewSize); 4506 4507NTKERNELAPI 4508BOOLEAN 4509NTAPI 4510MmIsAddressValid( 4511 IN PVOID VirtualAddress); 4512 4513NTKERNELAPI 4514BOOLEAN 4515NTAPI 4516MmIsThisAnNtAsSystem(VOID); 4517 4518NTKERNELAPI 4519VOID 4520NTAPI 4521MmLockPagableSectionByHandle( 4522 IN PVOID ImageSectionHandle); 4523 4524NTKERNELAPI 4525NTSTATUS 4526NTAPI 4527MmUnmapViewInSessionSpace( 4528 IN PVOID MappedBase); 4529 4530NTKERNELAPI 4531NTSTATUS 4532NTAPI 4533MmUnmapViewInSystemSpace( 4534 IN PVOID MappedBase); 4535 4536NTKERNELAPI 4537VOID 4538NTAPI 4539MmUnsecureVirtualMemory( 4540 IN HANDLE SecureHandle); 4541 4542NTKERNELAPI 4543NTSTATUS 4544NTAPI 4545MmRemovePhysicalMemory( 4546 IN PPHYSICAL_ADDRESS StartAddress, 4547 IN OUT PLARGE_INTEGER NumberOfBytes); 4548 4549NTKERNELAPI 4550HANDLE 4551NTAPI 4552MmSecureVirtualMemory( 4553 IN PVOID Address, 4554 IN SIZE_T Size, 4555 IN ULONG ProbeMode); 4556 4557NTKERNELAPI 4558VOID 4559NTAPI 4560MmUnmapVideoDisplay( 4561 IN PVOID BaseAddress, 4562 IN SIZE_T NumberOfBytes); 4563 4564NTKERNELAPI 4565NTSTATUS 4566NTAPI 4567MmAddPhysicalMemory( 4568 IN PPHYSICAL_ADDRESS StartAddress, 4569 IN OUT PLARGE_INTEGER NumberOfBytes); 4570 4571NTKERNELAPI 4572PVOID 4573NTAPI 4574MmAllocateContiguousMemory( 4575 IN SIZE_T NumberOfBytes, 4576 IN PHYSICAL_ADDRESS HighestAcceptableAddress); 4577 4578NTKERNELAPI 4579PVOID 4580NTAPI 4581MmAllocateContiguousMemorySpecifyCache( 4582 IN SIZE_T NumberOfBytes, 4583 IN PHYSICAL_ADDRESS LowestAcceptableAddress, 4584 IN PHYSICAL_ADDRESS HighestAcceptableAddress, 4585 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL, 4586 IN MEMORY_CACHING_TYPE CacheType); 4587 4588NTKERNELAPI 4589PVOID 4590NTAPI 4591MmAllocateContiguousMemorySpecifyCacheNode( 4592 IN SIZE_T NumberOfBytes, 4593 IN PHYSICAL_ADDRESS LowestAcceptableAddress, 4594 IN PHYSICAL_ADDRESS HighestAcceptableAddress, 4595 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL, 4596 IN MEMORY_CACHING_TYPE CacheType, 4597 IN NODE_REQUIREMENT PreferredNode); 4598 4599NTKERNELAPI 4600VOID 4601NTAPI 4602MmFreeContiguousMemory( 4603 IN PVOID BaseAddress); 4604 4605NTKERNELAPI 4606VOID 4607NTAPI 4608MmFreeContiguousMemorySpecifyCache( 4609 IN PVOID BaseAddress, 4610 IN SIZE_T NumberOfBytes, 4611 IN MEMORY_CACHING_TYPE CacheType); 4612 4613#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 4614 4615 4616 4617#if (NTDDI_VERSION >= NTDDI_WS03) 4618 4619NTKERNELAPI 4620NTSTATUS 4621NTAPI 4622MmCreateMirror(VOID); 4623#endif /* (NTDDI_VERSION >= NTDDI_WS03) */ 4624 4625#if (NTDDI_VERSION >= NTDDI_VISTA) 4626NTSTATUS 4627NTAPI 4628MmRotatePhysicalView( 4629 IN PVOID VirtualAddress, 4630 IN OUT PSIZE_T NumberOfBytes, 4631 IN PMDLX NewMdl OPTIONAL, 4632 IN MM_ROTATE_DIRECTION Direction, 4633 IN PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction, 4634 IN PVOID Context OPTIONAL); 4635#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 4636 4637/****************************************************************************** 4638 * Process Manager Functions * 4639 ******************************************************************************/ 4640 4641NTSYSCALLAPI 4642NTSTATUS 4643NTAPI 4644NtOpenProcess( 4645 OUT PHANDLE ProcessHandle, 4646 IN ACCESS_MASK DesiredAccess, 4647 IN POBJECT_ATTRIBUTES ObjectAttributes, 4648 IN PCLIENT_ID ClientId OPTIONAL); 4649 4650NTSYSCALLAPI 4651NTSTATUS 4652NTAPI 4653NtQueryInformationProcess( 4654 IN HANDLE ProcessHandle, 4655 IN PROCESSINFOCLASS ProcessInformationClass, 4656 OUT PVOID ProcessInformation OPTIONAL, 4657 IN ULONG ProcessInformationLength, 4658 OUT PULONG ReturnLength OPTIONAL); 4659 4660#if (NTDDI_VERSION >= NTDDI_WIN2K) 4661 4662 4663NTKERNELAPI 4664NTSTATUS 4665NTAPI 4666PsSetCreateProcessNotifyRoutine( 4667 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine, 4668 IN BOOLEAN Remove); 4669 4670NTKERNELAPI 4671NTSTATUS 4672NTAPI 4673PsSetCreateThreadNotifyRoutine( 4674 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine); 4675 4676NTKERNELAPI 4677NTSTATUS 4678NTAPI 4679PsSetLoadImageNotifyRoutine( 4680 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); 4681 4682NTKERNELAPI 4683HANDLE 4684NTAPI 4685PsGetCurrentProcessId(VOID); 4686 4687NTKERNELAPI 4688HANDLE 4689NTAPI 4690PsGetCurrentThreadId(VOID); 4691 4692NTKERNELAPI 4693BOOLEAN 4694NTAPI 4695PsGetVersion( 4696 OUT PULONG MajorVersion OPTIONAL, 4697 OUT PULONG MinorVersion OPTIONAL, 4698 OUT PULONG BuildNumber OPTIONAL, 4699 OUT PUNICODE_STRING CSDVersion OPTIONAL); 4700#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 4701#if (NTDDI_VERSION >= NTDDI_WINXP) 4702 4703NTKERNELAPI 4704HANDLE 4705NTAPI 4706PsGetProcessId( 4707 IN PEPROCESS Process); 4708 4709NTKERNELAPI 4710HANDLE 4711NTAPI 4712PsGetThreadId( 4713 IN PETHREAD Thread); 4714 4715NTKERNELAPI 4716NTSTATUS 4717NTAPI 4718PsRemoveCreateThreadNotifyRoutine( 4719 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine); 4720 4721NTKERNELAPI 4722NTSTATUS 4723NTAPI 4724PsRemoveLoadImageNotifyRoutine( 4725 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); 4726 4727NTKERNELAPI 4728LONGLONG 4729NTAPI 4730PsGetProcessCreateTimeQuadPart( 4731 IN PEPROCESS Process); 4732#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 4733 4734#if (NTDDI_VERSION >= NTDDI_WS03) 4735NTKERNELAPI 4736HANDLE 4737NTAPI 4738PsGetThreadProcessId( 4739 IN PETHREAD Thread); 4740#endif /* (NTDDI_VERSION >= NTDDI_WS03) */ 4741 4742#if (NTDDI_VERSION >= NTDDI_VISTA) 4743 4744NTKERNELAPI 4745BOOLEAN 4746NTAPI 4747PsSetCurrentThreadPrefetching( 4748 IN BOOLEAN Prefetching); 4749 4750NTKERNELAPI 4751BOOLEAN 4752NTAPI 4753PsIsCurrentThreadPrefetching(VOID); 4754 4755#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 4756 4757#if (NTDDI_VERSION >= NTDDI_VISTASP1) 4758NTKERNELAPI 4759NTSTATUS 4760NTAPI 4761PsSetCreateProcessNotifyRoutineEx( 4762 IN PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine, 4763 IN BOOLEAN Remove); 4764#endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */ 4765 4766 4767/****************************************************************************** 4768 * Runtime Library Functions * 4769 ******************************************************************************/ 4770 4771 4772#if (NTDDI_VERSION >= NTDDI_WIN2K) 4773 4774 4775#ifndef RTL_USE_AVL_TABLES 4776 4777NTSYSAPI 4778VOID 4779NTAPI 4780RtlInitializeGenericTable( 4781 OUT PRTL_GENERIC_TABLE Table, 4782 IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine, 4783 IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine, 4784 IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine, 4785 IN PVOID TableContext OPTIONAL); 4786 4787NTSYSAPI 4788PVOID 4789NTAPI 4790RtlInsertElementGenericTable( 4791 IN PRTL_GENERIC_TABLE Table, 4792 IN PVOID Buffer, 4793 IN CLONG BufferSize, 4794 OUT PBOOLEAN NewElement OPTIONAL); 4795 4796NTSYSAPI 4797PVOID 4798NTAPI 4799RtlInsertElementGenericTableFull( 4800 IN PRTL_GENERIC_TABLE Table, 4801 IN PVOID Buffer, 4802 IN CLONG BufferSize, 4803 OUT PBOOLEAN NewElement OPTIONAL, 4804 IN PVOID NodeOrParent, 4805 IN TABLE_SEARCH_RESULT SearchResult); 4806 4807NTSYSAPI 4808BOOLEAN 4809NTAPI 4810RtlDeleteElementGenericTable( 4811 IN PRTL_GENERIC_TABLE Table, 4812 IN PVOID Buffer); 4813 4814NTSYSAPI 4815PVOID 4816NTAPI 4817RtlLookupElementGenericTable( 4818 IN PRTL_GENERIC_TABLE Table, 4819 IN PVOID Buffer); 4820 4821NTSYSAPI 4822PVOID 4823NTAPI 4824RtlLookupElementGenericTableFull( 4825 IN PRTL_GENERIC_TABLE Table, 4826 IN PVOID Buffer, 4827 OUT PVOID *NodeOrParent, 4828 OUT TABLE_SEARCH_RESULT *SearchResult); 4829 4830NTSYSAPI 4831PVOID 4832NTAPI 4833RtlEnumerateGenericTable( 4834 IN PRTL_GENERIC_TABLE Table, 4835 IN BOOLEAN Restart); 4836 4837NTSYSAPI 4838PVOID 4839NTAPI 4840RtlEnumerateGenericTableWithoutSplaying( 4841 IN PRTL_GENERIC_TABLE Table, 4842 IN OUT PVOID *RestartKey); 4843 4844NTSYSAPI 4845PVOID 4846NTAPI 4847RtlGetElementGenericTable( 4848 IN PRTL_GENERIC_TABLE Table, 4849 IN ULONG I); 4850 4851NTSYSAPI 4852ULONG 4853NTAPI 4854RtlNumberGenericTableElements( 4855 IN PRTL_GENERIC_TABLE Table); 4856 4857NTSYSAPI 4858BOOLEAN 4859NTAPI 4860RtlIsGenericTableEmpty( 4861 IN PRTL_GENERIC_TABLE Table); 4862 4863#endif /* !RTL_USE_AVL_TABLES */ 4864 4865#define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT 8 4866 4867NTSYSAPI 4868PRTL_SPLAY_LINKS 4869NTAPI 4870RtlSplay( 4871 IN OUT PRTL_SPLAY_LINKS Links); 4872 4873NTSYSAPI 4874PRTL_SPLAY_LINKS 4875NTAPI 4876RtlDelete( 4877 IN PRTL_SPLAY_LINKS Links); 4878 4879NTSYSAPI 4880VOID 4881NTAPI 4882RtlDeleteNoSplay( 4883 IN PRTL_SPLAY_LINKS Links, 4884 IN OUT PRTL_SPLAY_LINKS *Root); 4885 4886NTSYSAPI 4887PRTL_SPLAY_LINKS 4888NTAPI 4889RtlSubtreeSuccessor( 4890 IN PRTL_SPLAY_LINKS Links); 4891 4892NTSYSAPI 4893PRTL_SPLAY_LINKS 4894NTAPI 4895RtlSubtreePredecessor( 4896 IN PRTL_SPLAY_LINKS Links); 4897 4898NTSYSAPI 4899PRTL_SPLAY_LINKS 4900NTAPI 4901RtlRealSuccessor( 4902 IN PRTL_SPLAY_LINKS Links); 4903 4904NTSYSAPI 4905PRTL_SPLAY_LINKS 4906NTAPI 4907RtlRealPredecessor( 4908 IN PRTL_SPLAY_LINKS Links); 4909 4910NTSYSAPI 4911BOOLEAN 4912NTAPI 4913RtlPrefixUnicodeString( 4914 IN PCUNICODE_STRING String1, 4915 IN PCUNICODE_STRING String2, 4916 IN BOOLEAN CaseInSensitive); 4917 4918NTSYSAPI 4919VOID 4920NTAPI 4921RtlUpperString( 4922 IN OUT PSTRING DestinationString, 4923 IN const PSTRING SourceString); 4924 4925NTSYSAPI 4926NTSTATUS 4927NTAPI 4928RtlUpcaseUnicodeString( 4929 IN OUT PUNICODE_STRING DestinationString, 4930 IN PCUNICODE_STRING SourceString, 4931 IN BOOLEAN AllocateDestinationString); 4932 4933NTSYSAPI 4934VOID 4935NTAPI 4936RtlMapGenericMask( 4937 IN OUT PACCESS_MASK AccessMask, 4938 IN PGENERIC_MAPPING GenericMapping); 4939 4940NTSYSAPI 4941NTSTATUS 4942NTAPI 4943RtlVolumeDeviceToDosName( 4944 IN PVOID VolumeDeviceObject, 4945 OUT PUNICODE_STRING DosName); 4946 4947NTSYSAPI 4948NTSTATUS 4949NTAPI 4950RtlGetVersion( 4951 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation); 4952 4953NTSYSAPI 4954NTSTATUS 4955NTAPI 4956RtlVerifyVersionInfo( 4957 IN PRTL_OSVERSIONINFOEXW VersionInfo, 4958 IN ULONG TypeMask, 4959 IN ULONGLONG ConditionMask); 4960 4961NTSYSAPI 4962LONG 4963NTAPI 4964RtlCompareString( 4965 IN const PSTRING String1, 4966 IN const PSTRING String2, 4967 IN BOOLEAN CaseInSensitive); 4968 4969NTSYSAPI 4970VOID 4971NTAPI 4972RtlCopyString( 4973 OUT PSTRING DestinationString, 4974 IN const PSTRING SourceString OPTIONAL); 4975 4976NTSYSAPI 4977BOOLEAN 4978NTAPI 4979RtlEqualString( 4980 IN const PSTRING String1, 4981 IN const PSTRING String2, 4982 IN BOOLEAN CaseInSensitive); 4983 4984NTSYSAPI 4985NTSTATUS 4986NTAPI 4987RtlCharToInteger( 4988 IN PCSZ String, 4989 IN ULONG Base OPTIONAL, 4990 OUT PULONG Value); 4991 4992NTSYSAPI 4993CHAR 4994NTAPI 4995RtlUpperChar( 4996 IN CHAR Character); 4997 4998NTSYSAPI 4999ULONG 5000NTAPI 5001RtlWalkFrameChain( 5002 OUT PVOID *Callers, 5003 IN ULONG Count, 5004 IN ULONG Flags); 5005 5006 5007#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 5008 5009 5010#if (NTDDI_VERSION >= NTDDI_WINXP) 5011 5012 5013 5014NTSYSAPI 5015VOID 5016NTAPI 5017RtlInitializeGenericTableAvl( 5018 OUT PRTL_AVL_TABLE Table, 5019 IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine, 5020 IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine, 5021 IN PRTL_AVL_FREE_ROUTINE FreeRoutine, 5022 IN PVOID TableContext OPTIONAL); 5023 5024NTSYSAPI 5025PVOID 5026NTAPI 5027RtlInsertElementGenericTableAvl( 5028 IN PRTL_AVL_TABLE Table, 5029 IN PVOID Buffer, 5030 IN CLONG BufferSize, 5031 OUT PBOOLEAN NewElement OPTIONAL); 5032 5033NTSYSAPI 5034PVOID 5035NTAPI 5036RtlInsertElementGenericTableFullAvl( 5037 IN PRTL_AVL_TABLE Table, 5038 IN PVOID Buffer, 5039 IN CLONG BufferSize, 5040 OUT PBOOLEAN NewElement OPTIONAL, 5041 IN PVOID NodeOrParent, 5042 IN TABLE_SEARCH_RESULT SearchResult); 5043 5044NTSYSAPI 5045BOOLEAN 5046NTAPI 5047RtlDeleteElementGenericTableAvl( 5048 IN PRTL_AVL_TABLE Table, 5049 IN PVOID Buffer); 5050 5051NTSYSAPI 5052PVOID 5053NTAPI 5054RtlLookupElementGenericTableAvl( 5055 IN PRTL_AVL_TABLE Table, 5056 IN PVOID Buffer); 5057 5058NTSYSAPI 5059PVOID 5060NTAPI 5061RtlLookupElementGenericTableFullAvl( 5062 IN PRTL_AVL_TABLE Table, 5063 IN PVOID Buffer, 5064 OUT PVOID *NodeOrParent, 5065 OUT TABLE_SEARCH_RESULT *SearchResult); 5066 5067NTSYSAPI 5068PVOID 5069NTAPI 5070RtlEnumerateGenericTableAvl( 5071 IN PRTL_AVL_TABLE Table, 5072 IN BOOLEAN Restart); 5073 5074NTSYSAPI 5075PVOID 5076NTAPI 5077RtlEnumerateGenericTableWithoutSplayingAvl( 5078 IN PRTL_AVL_TABLE Table, 5079 IN OUT PVOID *RestartKey); 5080 5081NTSYSAPI 5082PVOID 5083NTAPI 5084RtlLookupFirstMatchingElementGenericTableAvl( 5085 IN PRTL_AVL_TABLE Table, 5086 IN PVOID Buffer, 5087 OUT PVOID *RestartKey); 5088 5089NTSYSAPI 5090PVOID 5091NTAPI 5092RtlEnumerateGenericTableLikeADirectory( 5093 IN PRTL_AVL_TABLE Table, 5094 IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL, 5095 IN PVOID MatchData OPTIONAL, 5096 IN ULONG NextFlag, 5097 IN OUT PVOID *RestartKey, 5098 IN OUT PULONG DeleteCount, 5099 IN PVOID Buffer); 5100 5101NTSYSAPI 5102PVOID 5103NTAPI 5104RtlGetElementGenericTableAvl( 5105 IN PRTL_AVL_TABLE Table, 5106 IN ULONG I); 5107 5108NTSYSAPI 5109ULONG 5110NTAPI 5111RtlNumberGenericTableElementsAvl( 5112 IN PRTL_AVL_TABLE Table); 5113 5114NTSYSAPI 5115BOOLEAN 5116NTAPI 5117RtlIsGenericTableEmptyAvl( 5118 IN PRTL_AVL_TABLE Table); 5119 5120 5121#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 5122 5123 5124#if (NTDDI_VERSION >= NTDDI_VISTA) 5125 5126 5127NTSYSAPI 5128VOID 5129NTAPI 5130RtlRunOnceInitialize( 5131 OUT PRTL_RUN_ONCE RunOnce); 5132 5133NTSYSAPI 5134NTSTATUS 5135NTAPI 5136RtlRunOnceExecuteOnce( 5137 IN OUT PRTL_RUN_ONCE RunOnce, 5138 IN PRTL_RUN_ONCE_INIT_FN InitFn, 5139 IN OUT PVOID Parameter OPTIONAL, 5140 OUT PVOID *Context OPTIONAL); 5141 5142NTSYSAPI 5143NTSTATUS 5144NTAPI 5145RtlRunOnceBeginInitialize( 5146 IN OUT PRTL_RUN_ONCE RunOnce, 5147 IN ULONG Flags, 5148 OUT PVOID *Context OPTIONAL); 5149 5150NTSYSAPI 5151NTSTATUS 5152NTAPI 5153RtlRunOnceComplete( 5154 IN OUT PRTL_RUN_ONCE RunOnce, 5155 IN ULONG Flags, 5156 IN PVOID Context OPTIONAL); 5157 5158NTSYSAPI 5159BOOLEAN 5160NTAPI 5161RtlGetProductInfo( 5162 IN ULONG OSMajorVersion, 5163 IN ULONG OSMinorVersion, 5164 IN ULONG SpMajorVersion, 5165 IN ULONG SpMinorVersion, 5166 OUT PULONG ReturnedProductType); 5167 5168 5169#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 5170 5171#if (NTDDI_VERSION >= NTDDI_WIN7) 5172 5173 5174NTSYSAPI 5175BOOLEAN 5176NTAPI 5177RtlCreateHashTable( 5178 IN OUT PRTL_DYNAMIC_HASH_TABLE *HashTable OPTIONAL, 5179 IN ULONG Shift, 5180 IN ULONG Flags); 5181 5182NTSYSAPI 5183VOID 5184NTAPI 5185RtlDeleteHashTable( 5186 IN PRTL_DYNAMIC_HASH_TABLE HashTable); 5187 5188NTSYSAPI 5189BOOLEAN 5190NTAPI 5191RtlInsertEntryHashTable( 5192 IN PRTL_DYNAMIC_HASH_TABLE HashTable, 5193 IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry, 5194 IN ULONG_PTR Signature, 5195 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL); 5196 5197NTSYSAPI 5198BOOLEAN 5199NTAPI 5200RtlRemoveEntryHashTable( 5201 IN PRTL_DYNAMIC_HASH_TABLE HashTable, 5202 IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry, 5203 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL); 5204 5205NTSYSAPI 5206PRTL_DYNAMIC_HASH_TABLE_ENTRY 5207NTAPI 5208RtlLookupEntryHashTable( 5209 IN PRTL_DYNAMIC_HASH_TABLE HashTable, 5210 IN ULONG_PTR Signature, 5211 OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL); 5212 5213NTSYSAPI 5214PRTL_DYNAMIC_HASH_TABLE_ENTRY 5215NTAPI 5216RtlGetNextEntryHashTable( 5217 IN PRTL_DYNAMIC_HASH_TABLE HashTable, 5218 IN PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context); 5219 5220NTSYSAPI 5221BOOLEAN 5222NTAPI 5223RtlInitEnumerationHashTable( 5224 IN PRTL_DYNAMIC_HASH_TABLE HashTable, 5225 OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); 5226 5227NTSYSAPI 5228PRTL_DYNAMIC_HASH_TABLE_ENTRY 5229NTAPI 5230RtlEnumerateEntryHashTable( 5231 IN PRTL_DYNAMIC_HASH_TABLE HashTable, 5232 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); 5233 5234NTSYSAPI 5235VOID 5236NTAPI 5237RtlEndEnumerationHashTable( 5238 IN PRTL_DYNAMIC_HASH_TABLE HashTable, 5239 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); 5240 5241NTSYSAPI 5242BOOLEAN 5243NTAPI 5244RtlInitWeakEnumerationHashTable( 5245 IN PRTL_DYNAMIC_HASH_TABLE HashTable, 5246 OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); 5247 5248NTSYSAPI 5249PRTL_DYNAMIC_HASH_TABLE_ENTRY 5250NTAPI 5251RtlWeaklyEnumerateEntryHashTable( 5252 IN PRTL_DYNAMIC_HASH_TABLE HashTable, 5253 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); 5254 5255NTSYSAPI 5256VOID 5257NTAPI 5258RtlEndWeakEnumerationHashTable( 5259 IN PRTL_DYNAMIC_HASH_TABLE HashTable, 5260 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); 5261 5262NTSYSAPI 5263BOOLEAN 5264NTAPI 5265RtlExpandHashTable( 5266 IN PRTL_DYNAMIC_HASH_TABLE HashTable); 5267 5268NTSYSAPI 5269BOOLEAN 5270NTAPI 5271RtlContractHashTable( 5272 IN PRTL_DYNAMIC_HASH_TABLE HashTable); 5273 5274 5275#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 5276 5277 5278#if defined(_AMD64_) || defined(_IA64_) 5279 5280 5281 5282//DECLSPEC_DEPRECATED_DDK_WINXP 5283FORCEINLINE 5284LARGE_INTEGER 5285NTAPI_INLINE 5286RtlLargeIntegerDivide( 5287 IN LARGE_INTEGER Dividend, 5288 IN LARGE_INTEGER Divisor, 5289 OUT PLARGE_INTEGER Remainder OPTIONAL) 5290{ 5291 LARGE_INTEGER ret; 5292 ret.QuadPart = Dividend.QuadPart / Divisor.QuadPart; 5293 if (Remainder) 5294 Remainder->QuadPart = Dividend.QuadPart % Divisor.QuadPart; 5295 return ret; 5296} 5297 5298#else 5299 5300#if (NTDDI_VERSION >= NTDDI_WIN2K) 5301NTSYSAPI 5302LARGE_INTEGER 5303NTAPI 5304RtlLargeIntegerDivide( 5305 IN LARGE_INTEGER Dividend, 5306 IN LARGE_INTEGER Divisor, 5307 OUT PLARGE_INTEGER Remainder OPTIONAL); 5308#endif 5309 5310 5311#endif /* defined(_AMD64_) || defined(_IA64_) */ 5312 5313 5314 5315#ifdef RTL_USE_AVL_TABLES 5316 5317#define RtlInitializeGenericTable RtlInitializeGenericTableAvl 5318#define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl 5319#define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl 5320#define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl 5321#define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl 5322#define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl 5323#define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl 5324#define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl 5325#define RtlGetElementGenericTable RtlGetElementGenericTableAvl 5326#define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl 5327#define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl 5328 5329#endif /* RTL_USE_AVL_TABLES */ 5330 5331#define RtlInitializeSplayLinks(Links) { \ 5332 PRTL_SPLAY_LINKS _SplayLinks; \ 5333 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \ 5334 _SplayLinks->Parent = _SplayLinks; \ 5335 _SplayLinks->LeftChild = NULL; \ 5336 _SplayLinks->RightChild = NULL; \ 5337} 5338 5339#define RtlIsLeftChild(Links) \ 5340 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links)) 5341 5342#define RtlIsRightChild(Links) \ 5343 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links)) 5344 5345#define RtlRightChild(Links) \ 5346 ((PRTL_SPLAY_LINKS)(Links))->RightChild 5347 5348#define RtlIsRoot(Links) \ 5349 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links)) 5350 5351#define RtlLeftChild(Links) \ 5352 ((PRTL_SPLAY_LINKS)(Links))->LeftChild 5353 5354#define RtlParent(Links) \ 5355 ((PRTL_SPLAY_LINKS)(Links))->Parent 5356 5357#define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \ 5358 { \ 5359 PRTL_SPLAY_LINKS _SplayParent; \ 5360 PRTL_SPLAY_LINKS _SplayChild; \ 5361 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \ 5362 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \ 5363 _SplayParent->LeftChild = _SplayChild; \ 5364 _SplayChild->Parent = _SplayParent; \ 5365 } 5366 5367#define RtlInsertAsRightChild(ParentLinks,ChildLinks) \ 5368 { \ 5369 PRTL_SPLAY_LINKS _SplayParent; \ 5370 PRTL_SPLAY_LINKS _SplayChild; \ 5371 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \ 5372 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \ 5373 _SplayParent->RightChild = _SplayChild; \ 5374 _SplayChild->Parent = _SplayParent; \ 5375 } 5376 5377#if !defined(MIDL_PASS) 5378 5379FORCEINLINE 5380LUID 5381NTAPI_INLINE 5382RtlConvertLongToLuid( 5383 IN LONG Val) 5384{ 5385 LUID Luid; 5386 LARGE_INTEGER Temp; 5387 5388 Temp.QuadPart = Val; 5389 Luid.LowPart = Temp.u.LowPart; 5390 Luid.HighPart = Temp.u.HighPart; 5391 return Luid; 5392} 5393 5394FORCEINLINE 5395LUID 5396NTAPI_INLINE 5397RtlConvertUlongToLuid( 5398 IN ULONG Val) 5399{ 5400 LUID Luid; 5401 5402 Luid.LowPart = Val; 5403 Luid.HighPart = 0; 5404 return Luid; 5405} 5406 5407#endif /* !defined(MIDL_PASS) */ 5408 5409#if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_) 5410#define RtlGetCallersAddress(CallersAddress, CallersCaller) \ 5411 *CallersAddress = (PVOID)_ReturnAddress(); \ 5412 *CallersCaller = NULL; 5413#else 5414#if (NTDDI_VERSION >= NTDDI_WIN2K) 5415NTSYSAPI 5416VOID 5417NTAPI 5418RtlGetCallersAddress( 5419 OUT PVOID *CallersAddress, 5420 OUT PVOID *CallersCaller); 5421#endif 5422#endif 5423 5424#if !defined(MIDL_PASS) && !defined(SORTPP_PASS) 5425 5426#if (NTDDI_VERSION >= NTDDI_WIN7) 5427 5428FORCEINLINE 5429VOID 5430NTAPI 5431RtlInitHashTableContext( 5432 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context) 5433{ 5434 Context->ChainHead = NULL; 5435 Context->PrevLinkage = NULL; 5436} 5437 5438FORCEINLINE 5439VOID 5440NTAPI 5441RtlInitHashTableContextFromEnumerator( 5442 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context, 5443 IN PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator) 5444{ 5445 Context->ChainHead = Enumerator->ChainHead; 5446 Context->PrevLinkage = Enumerator->HashEntry.Linkage.Blink; 5447} 5448 5449FORCEINLINE 5450VOID 5451NTAPI 5452RtlReleaseHashTableContext( 5453 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context) 5454{ 5455 UNREFERENCED_PARAMETER(Context); 5456 return; 5457} 5458 5459FORCEINLINE 5460ULONG 5461NTAPI 5462RtlTotalBucketsHashTable( 5463 IN PRTL_DYNAMIC_HASH_TABLE HashTable) 5464{ 5465 return HashTable->TableSize; 5466} 5467 5468FORCEINLINE 5469ULONG 5470NTAPI 5471RtlNonEmptyBucketsHashTable( 5472 IN PRTL_DYNAMIC_HASH_TABLE HashTable) 5473{ 5474 return HashTable->NonEmptyBuckets; 5475} 5476 5477FORCEINLINE 5478ULONG 5479NTAPI 5480RtlEmptyBucketsHashTable( 5481 IN PRTL_DYNAMIC_HASH_TABLE HashTable) 5482{ 5483 return HashTable->TableSize - HashTable->NonEmptyBuckets; 5484} 5485 5486FORCEINLINE 5487ULONG 5488NTAPI 5489RtlTotalEntriesHashTable( 5490 IN PRTL_DYNAMIC_HASH_TABLE HashTable) 5491{ 5492 return HashTable->NumEntries; 5493} 5494 5495FORCEINLINE 5496ULONG 5497NTAPI 5498RtlActiveEnumeratorsHashTable( 5499 IN PRTL_DYNAMIC_HASH_TABLE HashTable) 5500{ 5501 return HashTable->NumEnumerators; 5502} 5503 5504#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 5505 5506#endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */ 5507 5508/****************************************************************************** 5509 * Security Manager Functions * 5510 ******************************************************************************/ 5511 5512#if (NTDDI_VERSION >= NTDDI_WIN2K) 5513 5514NTKERNELAPI 5515BOOLEAN 5516NTAPI 5517SeSinglePrivilegeCheck( 5518 IN LUID PrivilegeValue, 5519 IN KPROCESSOR_MODE PreviousMode); 5520 5521#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 5522 5523 5524/****************************************************************************** 5525 * ZwXxx Functions * 5526 ******************************************************************************/ 5527 5528 5529NTSYSAPI 5530NTSTATUS 5531NTAPI 5532ZwAllocateLocallyUniqueId( 5533 OUT PLUID Luid); 5534 5535NTSYSAPI 5536NTSTATUS 5537NTAPI 5538ZwTerminateProcess( 5539 IN HANDLE ProcessHandle OPTIONAL, 5540 IN NTSTATUS ExitStatus); 5541 5542NTSYSAPI 5543NTSTATUS 5544NTAPI 5545ZwOpenProcess( 5546 OUT PHANDLE ProcessHandle, 5547 IN ACCESS_MASK DesiredAccess, 5548 IN POBJECT_ATTRIBUTES ObjectAttributes, 5549 IN PCLIENT_ID ClientId OPTIONAL); 5550 5551#if (NTDDI_VERSION >= NTDDI_WIN2K) 5552 5553NTSTATUS 5554NTAPI 5555ZwCancelTimer( 5556 IN HANDLE TimerHandle, 5557 OUT PBOOLEAN CurrentState OPTIONAL); 5558 5559NTSTATUS 5560NTAPI 5561ZwCreateTimer( 5562 OUT PHANDLE TimerHandle, 5563 IN ACCESS_MASK DesiredAccess, 5564 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, 5565 IN TIMER_TYPE TimerType); 5566 5567NTSTATUS 5568NTAPI 5569ZwOpenTimer( 5570 OUT PHANDLE TimerHandle, 5571 IN ACCESS_MASK DesiredAccess, 5572 IN POBJECT_ATTRIBUTES ObjectAttributes); 5573 5574NTSYSAPI 5575NTSTATUS 5576NTAPI 5577ZwSetInformationThread( 5578 IN HANDLE ThreadHandle, 5579 IN THREADINFOCLASS ThreadInformationClass, 5580 IN PVOID ThreadInformation, 5581 IN ULONG ThreadInformationLength); 5582 5583NTSTATUS 5584NTAPI 5585ZwSetTimer( 5586 IN HANDLE TimerHandle, 5587 IN PLARGE_INTEGER DueTime, 5588 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL, 5589 IN PVOID TimerContext OPTIONAL, 5590 IN BOOLEAN ResumeTimer, 5591 IN LONG Period OPTIONAL, 5592 OUT PBOOLEAN PreviousState OPTIONAL); 5593 5594NTSYSAPI 5595NTSTATUS 5596NTAPI 5597ZwDisplayString( 5598 IN PUNICODE_STRING String); 5599 5600NTSYSAPI 5601NTSTATUS 5602NTAPI 5603ZwPowerInformation( 5604 IN POWER_INFORMATION_LEVEL PowerInformationLevel, 5605 IN PVOID InputBuffer OPTIONAL, 5606 IN ULONG InputBufferLength, 5607 OUT PVOID OutputBuffer OPTIONAL, 5608 IN ULONG OutputBufferLength); 5609 5610NTSYSAPI 5611NTSTATUS 5612NTAPI 5613ZwQueryVolumeInformationFile( 5614 IN HANDLE FileHandle, 5615 OUT PIO_STATUS_BLOCK IoStatusBlock, 5616 OUT PVOID FsInformation, 5617 IN ULONG Length, 5618 IN FS_INFORMATION_CLASS FsInformationClass); 5619 5620NTSYSAPI 5621NTSTATUS 5622NTAPI 5623ZwDeviceIoControlFile( 5624 IN HANDLE FileHandle, 5625 IN HANDLE Event OPTIONAL, 5626 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, 5627 IN PVOID ApcContext OPTIONAL, 5628 OUT PIO_STATUS_BLOCK IoStatusBlock, 5629 IN ULONG IoControlCode, 5630 IN PVOID InputBuffer OPTIONAL, 5631 IN ULONG InputBufferLength, 5632 OUT PVOID OutputBuffer OPTIONAL, 5633 IN ULONG OutputBufferLength); 5634 5635#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 5636 5637 5638#if (NTDDI_VERSION >= NTDDI_WIN7) 5639 5640NTSTATUS 5641NTAPI 5642ZwSetTimerEx( 5643 IN HANDLE TimerHandle, 5644 IN TIMER_SET_INFORMATION_CLASS TimerSetInformationClass, 5645 IN OUT PVOID TimerSetInformation, 5646 IN ULONG TimerSetInformationLength); 5647#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 5648 5649 5650 5651/* UNSORTED */ 5652 5653#define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \ 5654 ((ConditionMask) = VerSetConditionMask((ConditionMask), \ 5655 (TypeBitMask), (ComparisonType))) 5656 5657#if (NTDDI_VERSION >= NTDDI_WIN2K) 5658NTSYSAPI 5659ULONGLONG 5660NTAPI 5661VerSetConditionMask( 5662 IN ULONGLONG ConditionMask, 5663 IN ULONG TypeMask, 5664 IN UCHAR Condition); 5665#endif 5666 5667typedef struct _KERNEL_USER_TIMES { 5668 LARGE_INTEGER CreateTime; 5669 LARGE_INTEGER ExitTime; 5670 LARGE_INTEGER KernelTime; 5671 LARGE_INTEGER UserTime; 5672} KERNEL_USER_TIMES, *PKERNEL_USER_TIMES; 5673 5674/* NtXxx Functions */ 5675 5676typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION { 5677 SystemFirmwareTable_Enumerate, 5678 SystemFirmwareTable_Get 5679} SYSTEM_FIRMWARE_TABLE_ACTION; 5680 5681typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION { 5682 ULONG ProviderSignature; 5683 SYSTEM_FIRMWARE_TABLE_ACTION Action; 5684 ULONG TableID; 5685 ULONG TableBufferLength; 5686 UCHAR TableBuffer[ANYSIZE_ARRAY]; 5687} SYSTEM_FIRMWARE_TABLE_INFORMATION, *PSYSTEM_FIRMWARE_TABLE_INFORMATION; 5688 5689typedef NTSTATUS 5690(__cdecl *PFNFTH)( 5691 IN OUT PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo); 5692 5693typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER { 5694 ULONG ProviderSignature; 5695 BOOLEAN Register; 5696 PFNFTH FirmwareTableHandler; 5697 PVOID DriverObject; 5698} SYSTEM_FIRMWARE_TABLE_HANDLER, *PSYSTEM_FIRMWARE_TABLE_HANDLER; 5699 5700typedef ULONG_PTR 5701(NTAPI *PDRIVER_VERIFIER_THUNK_ROUTINE)( 5702 IN PVOID Context); 5703 5704typedef struct _DRIVER_VERIFIER_THUNK_PAIRS { 5705 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine; 5706 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine; 5707} DRIVER_VERIFIER_THUNK_PAIRS, *PDRIVER_VERIFIER_THUNK_PAIRS; 5708 5709#define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001 5710#define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002 5711#define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004 5712#define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008 5713#define DRIVER_VERIFIER_IO_CHECKING 0x0010 5714 5715#define SHARED_GLOBAL_FLAGS_ERROR_PORT_V 0x0 5716#define SHARED_GLOBAL_FLAGS_ERROR_PORT (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V) 5717 5718#define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1 5719#define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V) 5720 5721#define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V 0x2 5722#define SHARED_GLOBAL_FLAGS_VIRT_ENABLED (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V) 5723 5724#define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V 0x3 5725#define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED \ 5726 (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V) 5727 5728#define SHARED_GLOBAL_FLAGS_SPARE_V 0x4 5729#define SHARED_GLOBAL_FLAGS_SPARE \ 5730 (1UL << SHARED_GLOBAL_FLAGS_SPARE_V) 5731 5732#define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V 0x5 5733#define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED \ 5734 (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V) 5735 5736#define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V 0x6 5737#define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED \ 5738 (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V) 5739 5740#define EX_INIT_BITS(Flags, Bit) \ 5741 *((Flags)) |= (Bit) // Safe to use before concurrently accessible 5742 5743#define EX_TEST_SET_BIT(Flags, Bit) \ 5744 InterlockedBitTestAndSet ((PLONG)(Flags), (Bit)) 5745 5746#define EX_TEST_CLEAR_BIT(Flags, Bit) \ 5747 InterlockedBitTestAndReset ((PLONG)(Flags), (Bit)) 5748 5749#define PCCARD_MAP_ERROR 0x01 5750#define PCCARD_DEVICE_PCI 0x10 5751 5752#define PCCARD_SCAN_DISABLED 0x01 5753#define PCCARD_MAP_ZERO 0x02 5754#define PCCARD_NO_TIMER 0x03 5755#define PCCARD_NO_PIC 0x04 5756#define PCCARD_NO_LEGACY_BASE 0x05 5757#define PCCARD_DUP_LEGACY_BASE 0x06 5758#define PCCARD_NO_CONTROLLERS 0x07 5759 5760#define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2)) 5761 5762/* Filesystem runtime library routines */ 5763 5764#if (NTDDI_VERSION >= NTDDI_WIN2K) 5765NTKERNELAPI 5766BOOLEAN 5767NTAPI 5768FsRtlIsTotalDeviceFailure( 5769 IN NTSTATUS Status); 5770#endif 5771 5772#ifdef __cplusplus 5773} 5774#endif 5775