4 * Windows NT Device Driver Kit
6 * This file is part of the ReactOS DDK package.
10 * Timo Kreuzer (timo.kreuzer@reactos.org)
12 * THIS SOFTWARE IS NOT COPYRIGHTED
14 * This source code is offered for use in the public domain. You may
15 * use, modify or distribute it freely.
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.
28 #if !defined(_NTHAL_) && !defined(_NTIFS_)
29 #define _NTDDK_INCLUDED_
36 #define _CTYPE_DISABLE_MACROS
46 #include <stdarg.h> // FIXME
47 #include <basetyps.h> // FIXME
63 #endif /* _NTLSA_AUDIT_ */
64 #endif /* _NTLSA_IFS_ */
68 struct _LOADER_PARAMETER_BLOCK
;
70 struct _DRIVE_LAYOUT_INFORMATION_EX
;
71 struct _SET_PARTITION_INFORMATION_EX
;
72 struct _DISK_GEOMETRY_EX
;
74 typedef struct _BUS_HANDLER
*PBUS_HANDLER
;
75 typedef struct _DEVICE_HANDLER_OBJECT
*PDEVICE_HANDLER_OBJECT
;
76 #if defined(_NTHAL_INCLUDED_)
77 typedef struct _KAFFINITY_EX
*PKAFFINITY_EX
;
79 typedef struct _PEB
*PPEB
;
83 typedef struct _IMAGE_NT_HEADERS
*PIMAGE_NT_HEADERS32
;
84 typedef struct _IMAGE_NT_HEADERS64
*PIMAGE_NT_HEADERS64
;
87 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS
;
89 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS
;
92 #endif /* _NTIMAGE_ */
94 /******************************************************************************
96 ******************************************************************************/
97 typedef struct _ZONE_SEGMENT_HEADER
{
98 SINGLE_LIST_ENTRY SegmentList
;
100 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
102 typedef struct _ZONE_HEADER
{
103 SINGLE_LIST_ENTRY FreeList
;
104 SINGLE_LIST_ENTRY SegmentList
;
106 ULONG TotalSegmentSize
;
107 } ZONE_HEADER
, *PZONE_HEADER
;
109 #define PROTECTED_POOL 0x80000000
111 /******************************************************************************
112 * Configuration Manager Types *
113 ******************************************************************************/
115 typedef struct _KEY_NAME_INFORMATION
{
118 } KEY_NAME_INFORMATION
, *PKEY_NAME_INFORMATION
;
120 typedef struct _KEY_CACHED_INFORMATION
{
121 LARGE_INTEGER LastWriteTime
;
126 ULONG MaxValueNameLen
;
127 ULONG MaxValueDataLen
;
129 } KEY_CACHED_INFORMATION
, *PKEY_CACHED_INFORMATION
;
131 typedef struct _KEY_VIRTUALIZATION_INFORMATION
{
132 ULONG VirtualizationCandidate
:1;
133 ULONG VirtualizationEnabled
:1;
134 ULONG VirtualTarget
:1;
135 ULONG VirtualStore
:1;
136 ULONG VirtualSource
:1;
138 } KEY_VIRTUALIZATION_INFORMATION
, *PKEY_VIRTUALIZATION_INFORMATION
;
140 #define CmResourceTypeMaximum 8
142 typedef struct _CM_PCCARD_DEVICE_DATA
{
148 ULONG LegacyBaseAddress
;
150 } CM_PCCARD_DEVICE_DATA
, *PCM_PCCARD_DEVICE_DATA
;
152 /******************************************************************************
153 * I/O Manager Types *
154 ******************************************************************************/
156 /* DEVICE_OBJECT.Flags */
157 #define DO_DEVICE_HAS_NAME 0x00000040
158 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
159 #define DO_LONG_TERM_REQUESTS 0x00000200
160 #define DO_NEVER_LAST_DEVICE 0x00000400
161 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
162 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
163 #define DO_FORCE_NEITHER_IO 0x00080000
164 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
165 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
166 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
167 #define DO_DISALLOW_EXECUTE 0x00800000
171 typedef enum _CONFIGURATION_TYPE
{
174 FloatingPointProcessor
,
184 MultiFunctionAdapter
,
198 FloppyDiskPeripheral
,
211 RealModeIrqRoutingTable
,
212 RealModePCIEnumeration
,
214 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
215 #endif /* !_ARC_DDK_ */
218 ** IRP function codes
221 #define IRP_MN_QUERY_DIRECTORY 0x01
222 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
224 #define IRP_MN_USER_FS_REQUEST 0x00
225 #define IRP_MN_MOUNT_VOLUME 0x01
226 #define IRP_MN_VERIFY_VOLUME 0x02
227 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
228 #define IRP_MN_TRACK_LINK 0x04
229 #define IRP_MN_KERNEL_CALL 0x04
231 #define IRP_MN_LOCK 0x01
232 #define IRP_MN_UNLOCK_SINGLE 0x02
233 #define IRP_MN_UNLOCK_ALL 0x03
234 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
236 #define IRP_MN_FLUSH_AND_PURGE 0x01
238 #define IRP_MN_NORMAL 0x00
239 #define IRP_MN_DPC 0x01
240 #define IRP_MN_MDL 0x02
241 #define IRP_MN_COMPLETE 0x04
242 #define IRP_MN_COMPRESSED 0x08
244 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
245 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
246 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
248 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
250 #define IO_CHECK_CREATE_PARAMETERS 0x0200
251 #define IO_ATTACH_DEVICE 0x0400
252 #define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800
255 (NTAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
257 _In_ PUNICODE_STRING PathName
,
258 _In_ INTERFACE_TYPE BusType
,
259 _In_ ULONG BusNumber
,
260 _In_ PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
261 _In_ CONFIGURATION_TYPE ControllerType
,
262 _In_ ULONG ControllerNumber
,
263 _In_ PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
264 _In_ CONFIGURATION_TYPE PeripheralType
,
265 _In_ ULONG PeripheralNumber
,
266 _In_ PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
268 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
269 IoQueryDeviceIdentifier
= 0,
270 IoQueryDeviceConfigurationData
,
271 IoQueryDeviceComponentInformation
,
273 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
276 (NTAPI
*PDRIVER_REINITIALIZE
)(
277 _In_
struct _DRIVER_OBJECT
*DriverObject
,
278 _In_opt_ PVOID Context
,
281 typedef struct _CONTROLLER_OBJECT
{
284 PVOID ControllerExtension
;
285 KDEVICE_QUEUE DeviceWaitQueue
;
287 LARGE_INTEGER Spare2
;
288 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
290 #define DRVO_REINIT_REGISTERED 0x00000008
291 #define DRVO_INITIALIZED 0x00000010
292 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
293 #define DRVO_LEGACY_RESOURCES 0x00000040
295 typedef struct _CONFIGURATION_INFORMATION
{
303 BOOLEAN AtDiskPrimaryAddressClaimed
;
304 BOOLEAN AtDiskSecondaryAddressClaimed
;
306 ULONG MediumChangerCount
;
307 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
309 typedef struct _DISK_SIGNATURE
{
310 ULONG PartitionStyle
;
311 _ANONYMOUS_UNION
union {
320 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
322 typedef struct _TXN_PARAMETER_BLOCK
{
325 PVOID TransactionObject
;
326 } TXN_PARAMETER_BLOCK
, *PTXN_PARAMETER_BLOCK
;
328 #define TXF_MINIVERSION_DEFAULT_VIEW (0xFFFE)
330 typedef struct _IO_DRIVER_CREATE_CONTEXT
{
332 struct _ECP_LIST
*ExtraCreateParameter
;
333 PVOID DeviceObjectHint
;
334 PTXN_PARAMETER_BLOCK TxnParameters
;
335 } IO_DRIVER_CREATE_CONTEXT
, *PIO_DRIVER_CREATE_CONTEXT
;
337 typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD
{
341 PINTERFACE_REFERENCE InterfaceReference
;
342 PINTERFACE_DEREFERENCE InterfaceDereference
;
343 PGET_SET_DEVICE_DATA SetBusData
;
344 PGET_SET_DEVICE_DATA GetBusData
;
346 } AGP_TARGET_BUS_INTERFACE_STANDARD
, *PAGP_TARGET_BUS_INTERFACE_STANDARD
;
348 _IRQL_requires_max_(PASSIVE_LEVEL
)
349 _Must_inspect_result_
351 (NTAPI
*PGET_LOCATION_STRING
)(
352 _Inout_opt_ PVOID Context
,
354 _At_(*LocationStrings
,
355 _When_(return == 0, __drv_allocatesMem(Mem
)))
356 PZZWSTR
*LocationStrings
);
358 typedef struct _PNP_LOCATION_INTERFACE
{
362 PINTERFACE_REFERENCE InterfaceReference
;
363 PINTERFACE_DEREFERENCE InterfaceDereference
;
364 PGET_LOCATION_STRING GetLocationString
;
365 } PNP_LOCATION_INTERFACE
, *PPNP_LOCATION_INTERFACE
;
367 typedef enum _ARBITER_ACTION
{
368 ArbiterActionTestAllocation
,
369 ArbiterActionRetestAllocation
,
370 ArbiterActionCommitAllocation
,
371 ArbiterActionRollbackAllocation
,
372 ArbiterActionQueryAllocatedResources
,
373 ArbiterActionWriteReservedResources
,
374 ArbiterActionQueryConflict
,
375 ArbiterActionQueryArbitrate
,
376 ArbiterActionAddReserved
,
377 ArbiterActionBootAllocation
378 } ARBITER_ACTION
, *PARBITER_ACTION
;
380 typedef struct _ARBITER_CONFLICT_INFO
{
381 PDEVICE_OBJECT OwningObject
;
384 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
386 typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS
{
387 _Inout_ PLIST_ENTRY ArbitrationList
;
388 _In_ ULONG AllocateFromCount
;
389 _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
390 } ARBITER_TEST_ALLOCATION_PARAMETERS
, *PARBITER_TEST_ALLOCATION_PARAMETERS
;
392 typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS
{
393 _Inout_ PLIST_ENTRY ArbitrationList
;
394 _In_ ULONG AllocateFromCount
;
395 _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
396 } ARBITER_RETEST_ALLOCATION_PARAMETERS
, *PARBITER_RETEST_ALLOCATION_PARAMETERS
;
398 typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS
{
399 _Inout_ PLIST_ENTRY ArbitrationList
;
400 } ARBITER_BOOT_ALLOCATION_PARAMETERS
, *PARBITER_BOOT_ALLOCATION_PARAMETERS
;
402 typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
{
403 _Out_ PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
404 } ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
;
406 typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS
{
407 _In_ PDEVICE_OBJECT PhysicalDeviceObject
;
408 _In_ PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
409 _Out_ PULONG ConflictCount
;
410 _Out_ PARBITER_CONFLICT_INFO
*Conflicts
;
411 } ARBITER_QUERY_CONFLICT_PARAMETERS
, *PARBITER_QUERY_CONFLICT_PARAMETERS
;
413 typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS
{
414 _In_ PLIST_ENTRY ArbitrationList
;
415 } ARBITER_QUERY_ARBITRATE_PARAMETERS
, *PARBITER_QUERY_ARBITRATE_PARAMETERS
;
417 typedef struct _ARBITER_ADD_RESERVED_PARAMETERS
{
418 _In_ PDEVICE_OBJECT ReserveDevice
;
419 } ARBITER_ADD_RESERVED_PARAMETERS
, *PARBITER_ADD_RESERVED_PARAMETERS
;
421 typedef struct _ARBITER_PARAMETERS
{
423 ARBITER_TEST_ALLOCATION_PARAMETERS TestAllocation
;
424 ARBITER_RETEST_ALLOCATION_PARAMETERS RetestAllocation
;
425 ARBITER_BOOT_ALLOCATION_PARAMETERS BootAllocation
;
426 ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS QueryAllocatedResources
;
427 ARBITER_QUERY_CONFLICT_PARAMETERS QueryConflict
;
428 ARBITER_QUERY_ARBITRATE_PARAMETERS QueryArbitrate
;
429 ARBITER_ADD_RESERVED_PARAMETERS AddReserved
;
431 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
433 typedef enum _ARBITER_REQUEST_SOURCE
{
434 ArbiterRequestUndefined
= -1,
435 ArbiterRequestLegacyReported
,
436 ArbiterRequestHalReported
,
437 ArbiterRequestLegacyAssigned
,
438 ArbiterRequestPnpDetected
,
439 ArbiterRequestPnpEnumerated
440 } ARBITER_REQUEST_SOURCE
;
442 typedef enum _ARBITER_RESULT
{
443 ArbiterResultUndefined
= -1,
444 ArbiterResultSuccess
,
445 ArbiterResultExternalConflict
,
446 ArbiterResultNullRequest
449 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
451 typedef struct _ARBITER_LIST_ENTRY
{
452 LIST_ENTRY ListEntry
;
453 ULONG AlternativeCount
;
454 PIO_RESOURCE_DESCRIPTOR Alternatives
;
455 PDEVICE_OBJECT PhysicalDeviceObject
;
456 ARBITER_REQUEST_SOURCE RequestSource
;
459 INTERFACE_TYPE InterfaceType
;
462 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
463 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
464 ARBITER_RESULT Result
;
465 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
468 (NTAPI
*PARBITER_HANDLER
)(
469 _Inout_opt_ PVOID Context
,
470 _In_ ARBITER_ACTION Action
,
471 _Inout_ PARBITER_PARAMETERS Parameters
);
473 #define ARBITER_PARTIAL 0x00000001
475 typedef struct _ARBITER_INTERFACE
{
479 PINTERFACE_REFERENCE InterfaceReference
;
480 PINTERFACE_DEREFERENCE InterfaceDereference
;
481 PARBITER_HANDLER ArbiterHandler
;
483 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
485 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
486 TranslateChildToParent
,
487 TranslateParentToChild
488 } RESOURCE_TRANSLATION_DIRECTION
;
491 (NTAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
492 _Inout_opt_ PVOID Context
,
493 _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
494 _In_ RESOURCE_TRANSLATION_DIRECTION Direction
,
495 _In_opt_ ULONG AlternativesCount
,
496 _In_reads_opt_(AlternativesCount
) IO_RESOURCE_DESCRIPTOR Alternatives
[],
497 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
498 _Out_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
501 (NTAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
502 _Inout_opt_ PVOID Context
,
503 _In_ PIO_RESOURCE_DESCRIPTOR Source
,
504 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
505 _Out_ PULONG TargetCount
,
506 _Out_writes_(*TargetCount
) PIO_RESOURCE_DESCRIPTOR
*Target
);
508 typedef struct _TRANSLATOR_INTERFACE
{
512 PINTERFACE_REFERENCE InterfaceReference
;
513 PINTERFACE_DEREFERENCE InterfaceDereference
;
514 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
515 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
516 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
518 typedef struct _PCI_AGP_CAPABILITY
{
519 PCI_CAPABILITIES_HEADER Header
;
523 struct _PCI_AGP_STATUS
{
528 ULONG HostTransDisable
:1;
530 ULONG ITA_Coherent
:1;
531 ULONG SideBandAddressing
:1;
532 ULONG CalibrationCycle
:3;
533 ULONG AsyncRequestSize
:3;
537 ULONG RequestQueueDepthMaximum
:8;
539 struct _PCI_AGP_COMMAND
{
542 ULONG FastWriteEnable
:1;
543 ULONG FourGBEnable
:1;
548 ULONG CalibrationCycle
:3;
549 ULONG AsyncReqSize
:3;
551 ULONG RequestQueueDepth
:8;
553 } PCI_AGP_CAPABILITY
, *PPCI_AGP_CAPABILITY
;
555 typedef enum _EXTENDED_AGP_REGISTER
{
563 } EXTENDED_AGP_REGISTER
, *PEXTENDED_AGP_REGISTER
;
565 typedef struct _PCI_AGP_ISOCH_STATUS
{
572 } PCI_AGP_ISOCH_STATUS
, *PPCI_AGP_ISOCH_STATUS
;
574 typedef struct _PCI_AGP_CONTROL
{
580 } PCI_AGP_CONTROL
, *PPCI_AGP_CONTROL
;
582 typedef struct _PCI_AGP_APERTURE_PAGE_SIZE
{
583 USHORT PageSizeMask
:11;
585 USHORT PageSizeSelect
:4;
586 } PCI_AGP_APERTURE_PAGE_SIZE
, *PPCI_AGP_APERTURE_PAGE_SIZE
;
588 typedef struct _PCI_AGP_ISOCH_COMMAND
{
592 } PCI_AGP_ISOCH_COMMAND
, *PPCI_AGP_ISOCH_COMMAND
;
594 typedef struct PCI_AGP_EXTENDED_CAPABILITY
{
595 PCI_AGP_ISOCH_STATUS IsochStatus
;
596 PCI_AGP_CONTROL AgpControl
;
598 PCI_AGP_APERTURE_PAGE_SIZE AperturePageSize
;
601 PCI_AGP_ISOCH_COMMAND IsochCommand
;
602 } PCI_AGP_EXTENDED_CAPABILITY
, *PPCI_AGP_EXTENDED_CAPABILITY
;
604 #define PCI_AGP_RATE_1X 0x1
605 #define PCI_AGP_RATE_2X 0x2
606 #define PCI_AGP_RATE_4X 0x4
608 #define PCIX_MODE_CONVENTIONAL_PCI 0x0
609 #define PCIX_MODE1_66MHZ 0x1
610 #define PCIX_MODE1_100MHZ 0x2
611 #define PCIX_MODE1_133MHZ 0x3
612 #define PCIX_MODE2_266_66MHZ 0x9
613 #define PCIX_MODE2_266_100MHZ 0xA
614 #define PCIX_MODE2_266_133MHZ 0xB
615 #define PCIX_MODE2_533_66MHZ 0xD
616 #define PCIX_MODE2_533_100MHZ 0xE
617 #define PCIX_MODE2_533_133MHZ 0xF
619 #define PCIX_VERSION_MODE1_ONLY 0x0
620 #define PCIX_VERSION_MODE2_ECC 0x1
621 #define PCIX_VERSION_DUAL_MODE_ECC 0x2
623 typedef struct _PCIX_BRIDGE_CAPABILITY
{
624 PCI_CAPABILITIES_HEADER Header
;
626 _ANONYMOUS_STRUCT
struct {
628 USHORT Bus133MHzCapable
:1;
629 USHORT SplitCompletionDiscarded
:1;
630 USHORT UnexpectedSplitCompletion
:1;
631 USHORT SplitCompletionOverrun
:1;
632 USHORT SplitRequestDelayed
:1;
633 USHORT BusModeFrequency
:4;
636 USHORT Bus266MHzCapable
:1;
637 USHORT Bus533MHzCapable
:1;
642 _ANONYMOUS_STRUCT
struct {
643 ULONG FunctionNumber
:3;
644 ULONG DeviceNumber
:5;
647 ULONG Device133MHzCapable
:1;
648 ULONG SplitCompletionDiscarded
:1;
649 ULONG UnexpectedSplitCompletion
:1;
650 ULONG SplitCompletionOverrun
:1;
651 ULONG SplitRequestDelayed
:1;
654 ULONG Device266MHzCapable
:1;
655 ULONG Device533MHzCapable
:1;
659 USHORT UpstreamSplitTransactionCapacity
;
660 USHORT UpstreamSplitTransactionLimit
;
661 USHORT DownstreamSplitTransactionCapacity
;
662 USHORT DownstreamSplitTransactionLimit
;
664 _ANONYMOUS_STRUCT
struct {
665 ULONG SelectSecondaryRegisters
:1;
666 ULONG ErrorPresentInOtherBank
:1;
667 ULONG AdditionalCorrectableError
:1;
668 ULONG AdditionalUncorrectableError
:1;
670 ULONG ErrorCorrected
:1;
672 ULONG ErrorFirstCommand
:4;
673 ULONG ErrorSecondCommand
:4;
674 ULONG ErrorUpperAttributes
:4;
675 ULONG ControlUpdateEnable
:1;
677 ULONG DisableSingleBitCorrection
:1;
682 ULONG EccFirstAddress
;
683 ULONG EccSecondAddress
;
685 } PCIX_BRIDGE_CAPABILITY
, *PPCIX_BRIDGE_CAPABILITY
;
687 typedef struct _PCI_SUBSYSTEM_IDS_CAPABILITY
{
688 PCI_CAPABILITIES_HEADER Header
;
692 } PCI_SUBSYSTEM_IDS_CAPABILITY
, *PPCI_SUBSYSTEM_IDS_CAPABILITY
;
694 #define OSC_FIRMWARE_FAILURE 0x02
695 #define OSC_UNRECOGNIZED_UUID 0x04
696 #define OSC_UNRECOGNIZED_REVISION 0x08
697 #define OSC_CAPABILITIES_MASKED 0x10
699 #define PCI_ROOT_BUS_OSC_METHOD_CAPABILITY_REVISION 0x01
701 typedef struct _PCI_ROOT_BUS_OSC_SUPPORT_FIELD
{
703 _ANONYMOUS_STRUCT
struct {
704 ULONG ExtendedConfigOpRegions
:1;
705 ULONG ActiveStatePowerManagement
:1;
706 ULONG ClockPowerManagement
:1;
707 ULONG SegmentGroups
:1;
708 ULONG MessageSignaledInterrupts
:1;
709 ULONG WindowsHardwareErrorArchitecture
:1;
714 } PCI_ROOT_BUS_OSC_SUPPORT_FIELD
, *PPCI_ROOT_BUS_OSC_SUPPORT_FIELD
;
716 typedef struct _PCI_ROOT_BUS_OSC_CONTROL_FIELD
{
718 _ANONYMOUS_STRUCT
struct {
719 ULONG ExpressNativeHotPlug
:1;
720 ULONG ShpcNativeHotPlug
:1;
721 ULONG ExpressNativePME
:1;
722 ULONG ExpressAdvancedErrorReporting
:1;
723 ULONG ExpressCapabilityStructure
:1;
728 } PCI_ROOT_BUS_OSC_CONTROL_FIELD
, *PPCI_ROOT_BUS_OSC_CONTROL_FIELD
;
730 typedef enum _PCI_HARDWARE_INTERFACE
{
735 } PCI_HARDWARE_INTERFACE
, *PPCI_HARDWARE_INTERFACE
;
742 typedef struct _PCI_ROOT_BUS_HARDWARE_CAPABILITY
{
743 PCI_HARDWARE_INTERFACE SecondaryInterface
;
744 _ANONYMOUS_STRUCT
struct {
745 BOOLEAN BusCapabilitiesFound
;
746 ULONG CurrentSpeedAndMode
;
747 ULONG SupportedSpeedsAndModes
;
748 BOOLEAN DeviceIDMessagingCapable
;
749 PCI_BUS_WIDTH SecondaryBusWidth
;
751 PCI_ROOT_BUS_OSC_SUPPORT_FIELD OscFeatureSupport
;
752 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlRequest
;
753 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlGranted
;
754 } PCI_ROOT_BUS_HARDWARE_CAPABILITY
, *PPCI_ROOT_BUS_HARDWARE_CAPABILITY
;
756 typedef union _PCI_EXPRESS_CAPABILITIES_REGISTER
{
757 _ANONYMOUS_STRUCT
struct {
758 USHORT CapabilityVersion
:4;
760 USHORT SlotImplemented
:1;
761 USHORT InterruptMessageNumber
:5;
765 } PCI_EXPRESS_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_CAPABILITIES_REGISTER
;
767 typedef union _PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
{
768 _ANONYMOUS_STRUCT
struct {
769 ULONG MaxPayloadSizeSupported
:3;
770 ULONG PhantomFunctionsSupported
:2;
771 ULONG ExtendedTagSupported
:1;
772 ULONG L0sAcceptableLatency
:3;
773 ULONG L1AcceptableLatency
:3;
775 ULONG RoleBasedErrorReporting
:1;
777 ULONG CapturedSlotPowerLimit
:8;
778 ULONG CapturedSlotPowerLimitScale
:2;
782 } PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
;
784 #define PCI_EXPRESS_AER_DEVICE_CONTROL_MASK 0x07;
786 typedef union _PCI_EXPRESS_DEVICE_CONTROL_REGISTER
{
787 _ANONYMOUS_STRUCT
struct {
788 USHORT CorrectableErrorEnable
:1;
789 USHORT NonFatalErrorEnable
:1;
790 USHORT FatalErrorEnable
:1;
791 USHORT UnsupportedRequestErrorEnable
:1;
792 USHORT EnableRelaxedOrder
:1;
793 USHORT MaxPayloadSize
:3;
794 USHORT ExtendedTagEnable
:1;
795 USHORT PhantomFunctionsEnable
:1;
796 USHORT AuxPowerEnable
:1;
797 USHORT NoSnoopEnable
:1;
798 USHORT MaxReadRequestSize
:3;
799 USHORT BridgeConfigRetryEnable
:1;
802 } PCI_EXPRESS_DEVICE_CONTROL_REGISTER
, *PPCI_EXPRESS_DEVICE_CONTROL_REGISTER
;
804 #define PCI_EXPRESS_AER_DEVICE_STATUS_MASK 0x0F;
806 typedef union _PCI_EXPRESS_DEVICE_STATUS_REGISTER
{
807 _ANONYMOUS_STRUCT
struct {
808 USHORT CorrectableErrorDetected
:1;
809 USHORT NonFatalErrorDetected
:1;
810 USHORT FatalErrorDetected
:1;
811 USHORT UnsupportedRequestDetected
:1;
812 USHORT AuxPowerDetected
:1;
813 USHORT TransactionsPending
:1;
817 } PCI_EXPRESS_DEVICE_STATUS_REGISTER
, *PPCI_EXPRESS_DEVICE_STATUS_REGISTER
;
819 typedef union _PCI_EXPRESS_LINK_CAPABILITIES_REGISTER
{
820 _ANONYMOUS_STRUCT
struct {
821 ULONG MaximumLinkSpeed
:4;
822 ULONG MaximumLinkWidth
:6;
823 ULONG ActiveStatePMSupport
:2;
824 ULONG L0sExitLatency
:3;
825 ULONG L1ExitLatency
:3;
826 ULONG ClockPowerManagement
:1;
827 ULONG SurpriseDownErrorReportingCapable
:1;
828 ULONG DataLinkLayerActiveReportingCapable
:1;
833 } PCI_EXPRESS_LINK_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_LINK_CAPABILITIES_REGISTER
;
835 typedef union _PCI_EXPRESS_LINK_CONTROL_REGISTER
{
836 _ANONYMOUS_STRUCT
struct {
837 USHORT ActiveStatePMControl
:2;
839 USHORT ReadCompletionBoundary
:1;
840 USHORT LinkDisable
:1;
841 USHORT RetrainLink
:1;
842 USHORT CommonClockConfig
:1;
843 USHORT ExtendedSynch
:1;
844 USHORT EnableClockPowerManagement
:1;
848 } PCI_EXPRESS_LINK_CONTROL_REGISTER
, *PPCI_EXPRESS_LINK_CONTROL_REGISTER
;
850 typedef union _PCI_EXPRESS_LINK_STATUS_REGISTER
{
851 _ANONYMOUS_STRUCT
struct {
855 USHORT LinkTraining
:1;
856 USHORT SlotClockConfig
:1;
857 USHORT DataLinkLayerActive
:1;
861 } PCI_EXPRESS_LINK_STATUS_REGISTER
, *PPCI_EXPRESS_LINK_STATUS_REGISTER
;
863 typedef union _PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
{
864 _ANONYMOUS_STRUCT
struct {
865 ULONG AttentionButtonPresent
:1;
866 ULONG PowerControllerPresent
:1;
867 ULONG MRLSensorPresent
:1;
868 ULONG AttentionIndicatorPresent
:1;
869 ULONG PowerIndicatorPresent
:1;
870 ULONG HotPlugSurprise
:1;
871 ULONG HotPlugCapable
:1;
872 ULONG SlotPowerLimit
:8;
873 ULONG SlotPowerLimitScale
:2;
874 ULONG ElectromechanicalLockPresent
:1;
875 ULONG NoCommandCompletedSupport
:1;
876 ULONG PhysicalSlotNumber
:13;
879 } PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
;
881 typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER
{
882 _ANONYMOUS_STRUCT
struct {
883 USHORT AttentionButtonEnable
:1;
884 USHORT PowerFaultDetectEnable
:1;
885 USHORT MRLSensorEnable
:1;
886 USHORT PresenceDetectEnable
:1;
887 USHORT CommandCompletedEnable
:1;
888 USHORT HotPlugInterruptEnable
:1;
889 USHORT AttentionIndicatorControl
:2;
890 USHORT PowerIndicatorControl
:2;
891 USHORT PowerControllerControl
:1;
892 USHORT ElectromechanicalLockControl
:1;
893 USHORT DataLinkStateChangeEnable
:1;
897 } PCI_EXPRESS_SLOT_CONTROL_REGISTER
, *PPCI_EXPRESS_SLOT_CONTROL_REGISTER
;
899 typedef union _PCI_EXPRESS_SLOT_STATUS_REGISTER
{
900 _ANONYMOUS_STRUCT
struct {
901 USHORT AttentionButtonPressed
:1;
902 USHORT PowerFaultDetected
:1;
903 USHORT MRLSensorChanged
:1;
904 USHORT PresenceDetectChanged
:1;
905 USHORT CommandCompleted
:1;
906 USHORT MRLSensorState
:1;
907 USHORT PresenceDetectState
:1;
908 USHORT ElectromechanicalLockEngaged
:1;
909 USHORT DataLinkStateChanged
:1;
913 } PCI_EXPRESS_SLOT_STATUS_REGISTER
, *PPCI_EXPRESS_SLOT_STATUS_REGISTER
;
915 typedef union _PCI_EXPRESS_ROOT_CONTROL_REGISTER
{
916 _ANONYMOUS_STRUCT
struct {
917 USHORT CorrectableSerrEnable
:1;
918 USHORT NonFatalSerrEnable
:1;
919 USHORT FatalSerrEnable
:1;
920 USHORT PMEInterruptEnable
:1;
921 USHORT CRSSoftwareVisibilityEnable
:1;
925 } PCI_EXPRESS_ROOT_CONTROL_REGISTER
, *PPCI_EXPRESS_ROOT_CONTROL_REGISTER
;
927 typedef union _PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
{
928 _ANONYMOUS_STRUCT
struct {
929 USHORT CRSSoftwareVisibility
:1;
933 } PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
;
935 typedef union _PCI_EXPRESS_ROOT_STATUS_REGISTER
{
936 _ANONYMOUS_STRUCT
struct {
937 ULONG PMERequestorId
:16;
943 } PCI_EXPRESS_ROOT_STATUS_REGISTER
, *PPCI_EXPRESS_ROOT_STATUS_REGISTER
;
945 typedef struct _PCI_EXPRESS_CAPABILITY
{
946 PCI_CAPABILITIES_HEADER Header
;
947 PCI_EXPRESS_CAPABILITIES_REGISTER ExpressCapabilities
;
948 PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER DeviceCapabilities
;
949 PCI_EXPRESS_DEVICE_CONTROL_REGISTER DeviceControl
;
950 PCI_EXPRESS_DEVICE_STATUS_REGISTER DeviceStatus
;
951 PCI_EXPRESS_LINK_CAPABILITIES_REGISTER LinkCapabilities
;
952 PCI_EXPRESS_LINK_CONTROL_REGISTER LinkControl
;
953 PCI_EXPRESS_LINK_STATUS_REGISTER LinkStatus
;
954 PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER SlotCapabilities
;
955 PCI_EXPRESS_SLOT_CONTROL_REGISTER SlotControl
;
956 PCI_EXPRESS_SLOT_STATUS_REGISTER SlotStatus
;
957 PCI_EXPRESS_ROOT_CONTROL_REGISTER RootControl
;
958 PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER RootCapabilities
;
959 PCI_EXPRESS_ROOT_STATUS_REGISTER RootStatus
;
960 } PCI_EXPRESS_CAPABILITY
, *PPCI_EXPRESS_CAPABILITY
;
965 } PCI_EXPRESS_MRL_STATE
;
970 } PCI_EXPRESS_CARD_PRESENCE
;
976 } PCI_EXPRESS_INDICATOR_STATE
;
981 } PCI_EXPRESS_POWER_STATE
;
985 L0sAndL1EntrySupport
= 3
986 } PCI_EXPRESS_ASPM_SUPPORT
;
989 L0sAndL1EntryDisabled
,
993 } PCI_EXPRESS_ASPM_CONTROL
;
1004 } PCI_EXPRESS_L0s_EXIT_LATENCY
;
1015 } PCI_EXPRESS_L1_EXIT_LATENCY
;
1018 PciExpressEndpoint
= 0,
1019 PciExpressLegacyEndpoint
,
1020 PciExpressRootPort
= 4,
1021 PciExpressUpstreamSwitchPort
,
1022 PciExpressDownstreamSwitchPort
,
1023 PciExpressToPciXBridge
,
1024 PciXToExpressBridge
,
1025 PciExpressRootComplexIntegratedEndpoint
,
1026 PciExpressRootComplexEventCollector
1027 } PCI_EXPRESS_DEVICE_TYPE
;
1030 MaxPayload128Bytes
= 0,
1033 MaxPayload1024Bytes
,
1034 MaxPayload2048Bytes
,
1036 } PCI_EXPRESS_MAX_PAYLOAD_SIZE
;
1038 typedef union _PCI_EXPRESS_PME_REQUESTOR_ID
{
1039 _ANONYMOUS_STRUCT
struct {
1040 USHORT FunctionNumber
:3;
1041 USHORT DeviceNumber
:5;
1045 } PCI_EXPRESS_PME_REQUESTOR_ID
, *PPCI_EXPRESS_PME_REQUESTOR_ID
;
1047 typedef enum _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE
{
1048 ResourceTypeSingle
= 0,
1050 ResourceTypeExtendedCounterConfiguration
,
1051 ResourceTypeOverflow
,
1053 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE
;
1055 typedef struct _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
{
1056 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE Type
;
1060 ULONG ExtendedRegisterAddress
;
1066 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
, *PPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
;
1068 typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST
{
1070 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors
[ANYSIZE_ARRAY
];
1071 } PHYSICAL_COUNTER_RESOURCE_LIST
, *PPHYSICAL_COUNTER_RESOURCE_LIST
;
1074 (NTAPI
*PciPin2Line
)(
1075 _In_
struct _BUS_HANDLER
*BusHandler
,
1076 _In_
struct _BUS_HANDLER
*RootHandler
,
1077 _In_ PCI_SLOT_NUMBER SlotNumber
,
1078 _In_ PPCI_COMMON_CONFIG PciData
);
1081 (NTAPI
*PciLine2Pin
)(
1082 _In_
struct _BUS_HANDLER
*BusHandler
,
1083 _In_
struct _BUS_HANDLER
*RootHandler
,
1084 _In_ PCI_SLOT_NUMBER SlotNumber
,
1085 _In_ PPCI_COMMON_CONFIG PciNewData
,
1086 _In_ PPCI_COMMON_CONFIG PciOldData
);
1089 (NTAPI
*PciReadWriteConfig
)(
1090 _In_
struct _BUS_HANDLER
*BusHandler
,
1091 _In_ PCI_SLOT_NUMBER Slot
,
1092 _In_reads_bytes_(Length
) PVOID Buffer
,
1096 #define PCI_DATA_TAG ' ICP'
1097 #define PCI_DATA_VERSION 1
1099 typedef struct _PCIBUSDATA
{
1102 PciReadWriteConfig ReadConfig
;
1103 PciReadWriteConfig WriteConfig
;
1104 PciPin2Line Pin2Line
;
1105 PciLine2Pin Line2Pin
;
1106 PCI_SLOT_NUMBER ParentSlot
;
1108 } PCIBUSDATA
, *PPCIBUSDATA
;
1110 #ifndef _PCIINTRF_X_
1111 #define _PCIINTRF_X_
1114 (NTAPI
*PCI_READ_WRITE_CONFIG
)(
1116 _In_ ULONG BusOffset
,
1118 _In_reads_bytes_(Length
) PVOID Buffer
,
1123 (NTAPI
*PCI_PIN_TO_LINE
)(
1125 _In_ PPCI_COMMON_CONFIG PciData
);
1128 (NTAPI
*PCI_LINE_TO_PIN
)(
1130 _In_ PPCI_COMMON_CONFIG PciNewData
,
1131 _In_ PPCI_COMMON_CONFIG PciOldData
);
1134 (NTAPI
*PCI_ROOT_BUS_CAPABILITY
)(
1136 _Out_ PPCI_ROOT_BUS_HARDWARE_CAPABILITY HardwareCapability
);
1139 (NTAPI
*PCI_EXPRESS_WAKE_CONTROL
)(
1141 _In_ BOOLEAN EnableWake
);
1143 typedef struct _PCI_BUS_INTERFACE_STANDARD
{
1147 PINTERFACE_REFERENCE InterfaceReference
;
1148 PINTERFACE_DEREFERENCE InterfaceDereference
;
1149 PCI_READ_WRITE_CONFIG ReadConfig
;
1150 PCI_READ_WRITE_CONFIG WriteConfig
;
1151 PCI_PIN_TO_LINE PinToLine
;
1152 PCI_LINE_TO_PIN LineToPin
;
1153 PCI_ROOT_BUS_CAPABILITY RootBusCapability
;
1154 PCI_EXPRESS_WAKE_CONTROL ExpressWakeControl
;
1155 } PCI_BUS_INTERFACE_STANDARD
, *PPCI_BUS_INTERFACE_STANDARD
;
1157 #define PCI_BUS_INTERFACE_STANDARD_VERSION 1
1159 #endif /* _PCIINTRF_X_ */
1161 #if (NTDDI_VERSION >= NTDDI_WIN7)
1163 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX 0x00004000
1164 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX 0x00008000
1165 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \
1166 (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \
1167 FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX)
1169 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200
1170 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300
1171 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300
1175 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 0x00000200
1176 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 0x00000300
1177 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 0x00000300
1179 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL
1180 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL
1181 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK
1183 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1185 #define FILE_CHARACTERISTICS_PROPAGATED (FILE_REMOVABLE_MEDIA | \
1186 FILE_READ_ONLY_DEVICE | \
1187 FILE_FLOPPY_DISKETTE | \
1188 FILE_WRITE_ONCE_MEDIA | \
1189 FILE_DEVICE_SECURE_OPEN)
1191 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1192 ULONG AlignmentRequirement
;
1193 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1195 typedef struct _FILE_NAME_INFORMATION
{
1196 ULONG FileNameLength
;
1198 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1201 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1202 ULONG FileAttributes
;
1204 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1206 typedef struct _FILE_DISPOSITION_INFORMATION
{
1208 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1210 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1211 LARGE_INTEGER EndOfFile
;
1212 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1214 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1215 LARGE_INTEGER ValidDataLength
;
1216 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1218 typedef struct _FILE_FS_LABEL_INFORMATION
{
1219 ULONG VolumeLabelLength
;
1220 WCHAR VolumeLabel
[1];
1221 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
1223 typedef struct _FILE_FS_VOLUME_INFORMATION
{
1224 LARGE_INTEGER VolumeCreationTime
;
1225 ULONG VolumeSerialNumber
;
1226 ULONG VolumeLabelLength
;
1227 BOOLEAN SupportsObjects
;
1228 WCHAR VolumeLabel
[1];
1229 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
1231 typedef struct _FILE_FS_SIZE_INFORMATION
{
1232 LARGE_INTEGER TotalAllocationUnits
;
1233 LARGE_INTEGER AvailableAllocationUnits
;
1234 ULONG SectorsPerAllocationUnit
;
1235 ULONG BytesPerSector
;
1236 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
1238 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
{
1239 LARGE_INTEGER TotalAllocationUnits
;
1240 LARGE_INTEGER CallerAvailableAllocationUnits
;
1241 LARGE_INTEGER ActualAvailableAllocationUnits
;
1242 ULONG SectorsPerAllocationUnit
;
1243 ULONG BytesPerSector
;
1244 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
1246 typedef struct _FILE_FS_OBJECTID_INFORMATION
{
1248 UCHAR ExtendedInfo
[48];
1249 } FILE_FS_OBJECTID_INFORMATION
, *PFILE_FS_OBJECTID_INFORMATION
;
1251 typedef union _FILE_SEGMENT_ELEMENT
{
1253 ULONGLONG Alignment
;
1254 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1256 #define IOCTL_AVIO_ALLOCATE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1257 #define IOCTL_AVIO_FREE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1258 #define IOCTL_AVIO_MODIFY_STREAM CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1260 typedef enum _BUS_DATA_TYPE
{
1261 ConfigurationSpaceUndefined
= -1,
1269 PCMCIAConfiguration
,
1272 PNPISAConfiguration
,
1273 SgiInternalConfiguration
,
1275 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
1277 /* Some Server 2003 DDK definitions */
1278 #define PCI_INT_ROUTE_INTRF_STANDARD_VER 1
1281 (NTAPI
*PLEGACY_DEVICE_DETECTION_HANDLER
)(
1283 IN INTERFACE_TYPE LegacyBusType
,
1285 IN ULONG SlotNumber
,
1286 OUT PDEVICE_OBJECT
*PhysicalDeviceObject
);
1288 typedef struct _ROUTING_TOKEN
{
1292 } ROUTING_TOKEN
, *PROUTING_TOKEN
;
1295 (NTAPI
*PGET_INTERRUPT_ROUTING
)(
1296 IN PDEVICE_OBJECT Pdo
,
1299 OUT UCHAR
*InterruptLine
,
1300 OUT UCHAR
*InterruptPin
,
1301 OUT UCHAR
*ClassCode
,
1302 OUT UCHAR
*SubClassCode
,
1303 OUT PDEVICE_OBJECT
*ParentPdo
,
1304 OUT ROUTING_TOKEN
*RoutingToken
,
1308 (NTAPI
*PSET_INTERRUPT_ROUTING_TOKEN
)(
1309 IN PDEVICE_OBJECT Pdo
,
1310 IN PROUTING_TOKEN RoutingToken
);
1313 (NTAPI
*PUPDATE_INTERRUPT_LINE
)(
1314 IN PDEVICE_OBJECT Pdo
,
1315 IN UCHAR LineRegister
);
1317 typedef struct _INT_ROUTE_INTERFACE_STANDARD
{
1321 PINTERFACE_REFERENCE InterfaceReference
;
1322 PINTERFACE_DEREFERENCE InterfaceDereference
;
1323 PGET_INTERRUPT_ROUTING GetInterruptRouting
;
1324 PSET_INTERRUPT_ROUTING_TOKEN SetInterruptRoutingToken
;
1325 PUPDATE_INTERRUPT_LINE UpdateInterruptLine
;
1326 } INT_ROUTE_INTERFACE_STANDARD
, *PINT_ROUTE_INTERFACE_STANDARD
;
1328 typedef struct _LEGACY_DEVICE_DETECTION_INTERFACE
{
1332 PINTERFACE_REFERENCE InterfaceReference
;
1333 PINTERFACE_DEREFERENCE InterfaceDereference
;
1334 PLEGACY_DEVICE_DETECTION_HANDLER LegacyDeviceDetection
;
1335 } LEGACY_DEVICE_DETECTION_INTERFACE
, *PLEGACY_DEVICE_DETECTION_INTERFACE
;
1337 /* FIXME : These definitions don't exist in public headers */
1339 #define PCI_CB_INTRF_VERSION 1
1340 #define PCI_PME_INTRF_STANDARD_VER 1
1341 #define PNP_LOCATION_INTERFACE_VERSION 1
1343 DEFINE_GUID(GUID_PCI_CARDBUS_INTERFACE_PRIVATE
, 0xcca82f31, 0x54d6, 0x11d1, 0x82, 0x24, 0x00, 0xa0, 0xc9, 0x32, 0x43, 0x85);
1344 DEFINE_GUID(GUID_PCI_PME_INTERFACE
, 0xaac7e6ac, 0xbb0b, 0x11d2, 0xb4, 0x84, 0x00, 0xc0, 0x4f, 0x72, 0xde, 0x8b);
1347 (NTAPI
*PCARDBUSADD
)(
1348 IN PDEVICE_OBJECT DeviceObject
,
1349 IN OUT PVOID
*DeviceContext
);
1352 (NTAPI
*PCARDBUSDELETE
)(
1353 IN PVOID DeviceContext
);
1356 (NTAPI
*PCARDBUSPCIDISPATCH
)(
1357 IN PVOID DeviceContext
,
1361 (NTAPI
*PPME_SET_PME_ENABLE
)(
1362 IN PDEVICE_OBJECT Pdo
,
1363 IN BOOLEAN PmeEnable
);
1366 (NTAPI
*PPME_CLEAR_PME_STATUS
)(
1367 IN PDEVICE_OBJECT Pdo
);
1370 (NTAPI
*PPME_GET_INFORMATION
)(
1371 IN PDEVICE_OBJECT Pdo
,
1372 OUT PBOOLEAN PmeCapable
,
1373 OUT PBOOLEAN PmeStatus
,
1374 OUT PBOOLEAN PmeEnable
);
1376 typedef struct _PCI_CARDBUS_INTERFACE_PRIVATE
{
1380 PINTERFACE_REFERENCE InterfaceReference
;
1381 PINTERFACE_DEREFERENCE InterfaceDereference
;
1382 PDRIVER_OBJECT DriverObject
;
1383 PCARDBUSADD AddCardBus
;
1384 PCARDBUSDELETE DeleteCardBus
;
1385 PCARDBUSPCIDISPATCH DispatchPnp
;
1386 } PCI_CARDBUS_INTERFACE_PRIVATE
, *PPCI_CARDBUS_INTERFACE_PRIVATE
;
1388 typedef struct _PCI_PME_INTERFACE
{
1392 PINTERFACE_REFERENCE InterfaceReference
;
1393 PINTERFACE_DEREFERENCE InterfaceDereference
;
1394 PPME_GET_INFORMATION GetPmeInformation
;
1395 PPME_CLEAR_PME_STATUS ClearPmeStatus
;
1396 PPME_SET_PME_ENABLE UpdateEnable
;
1397 } PCI_PME_INTERFACE
, *PPCI_PME_INTERFACE
;
1399 /* Hardware Abstraction Layer Types */
1402 (NTAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
1406 typedef PBUS_HANDLER
1407 (FASTCALL
*pHalHandlerForBus
)(
1408 _In_ INTERFACE_TYPE InterfaceType
,
1409 _In_ ULONG BusNumber
);
1412 (FASTCALL
*pHalReferenceBusHandler
)(
1413 _In_ PBUS_HANDLER BusHandler
);
1415 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
1416 HalInstalledBusInformation
,
1417 HalProfileSourceInformation
,
1418 HalInformationClassUnused1
,
1419 HalPowerInformation
,
1420 HalProcessorSpeedInformation
,
1421 HalCallbackInformation
,
1422 HalMapRegisterInformation
,
1423 HalMcaLogInformation
,
1424 HalFrameBufferCachingInformation
,
1425 HalDisplayBiosInformation
,
1426 HalProcessorFeatureInformation
,
1427 HalNumaTopologyInterface
,
1428 HalErrorInformation
,
1429 HalCmcLogInformation
,
1430 HalCpeLogInformation
,
1431 HalQueryMcaInterface
,
1432 HalQueryAMLIIllegalIOPortAddresses
,
1433 HalQueryMaxHotPlugMemoryAddress
,
1434 HalPartitionIpiInterface
,
1435 HalPlatformInformation
,
1436 HalQueryProfileSourceList
,
1437 HalInitLogInformation
,
1438 HalFrequencyInformation
,
1439 HalProcessorBrandString
,
1440 HalHypervisorInformation
,
1441 HalPlatformTimerInformation
,
1442 HalAcpiAuditInformation
1443 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
1445 typedef enum _HAL_SET_INFORMATION_CLASS
{
1446 HalProfileSourceInterval
,
1447 HalProfileSourceInterruptHandler
,
1448 HalMcaRegisterDriver
,
1449 HalKernelErrorHandler
,
1450 HalCmcRegisterDriver
,
1451 HalCpeRegisterDriver
,
1455 HalGenerateCmcInterrupt
,
1456 HalProfileSourceTimerHandler
,
1458 HalProfileDpgoSourceInterruptHandler
1459 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
1462 (NTAPI
*pHalQuerySystemInformation
)(
1463 _In_ HAL_QUERY_INFORMATION_CLASS InformationClass
,
1464 _In_ ULONG BufferSize
,
1465 _Inout_updates_bytes_to_(BufferSize
, *ReturnedLength
) PVOID Buffer
,
1466 _Out_ PULONG ReturnedLength
);
1469 (NTAPI
*pHalSetSystemInformation
)(
1470 _In_ HAL_SET_INFORMATION_CLASS InformationClass
,
1471 _In_ ULONG BufferSize
,
1475 (FASTCALL
*pHalExamineMBR
)(
1476 _In_ PDEVICE_OBJECT DeviceObject
,
1477 _In_ ULONG SectorSize
,
1478 _In_ ULONG MBRTypeIdentifier
,
1479 _Out_ PVOID
*Buffer
);
1482 (FASTCALL
*pHalIoReadPartitionTable
)(
1483 _In_ PDEVICE_OBJECT DeviceObject
,
1484 _In_ ULONG SectorSize
,
1485 _In_ BOOLEAN ReturnRecognizedPartitions
,
1486 _Out_
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
1489 (FASTCALL
*pHalIoSetPartitionInformation
)(
1490 _In_ PDEVICE_OBJECT DeviceObject
,
1491 _In_ ULONG SectorSize
,
1492 _In_ ULONG PartitionNumber
,
1493 _In_ ULONG PartitionType
);
1496 (FASTCALL
*pHalIoWritePartitionTable
)(
1497 _In_ PDEVICE_OBJECT DeviceObject
,
1498 _In_ ULONG SectorSize
,
1499 _In_ ULONG SectorsPerTrack
,
1500 _In_ ULONG NumberOfHeads
,
1501 _In_
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
1504 (NTAPI
*pHalQueryBusSlots
)(
1505 _In_ PBUS_HANDLER BusHandler
,
1506 _In_ ULONG BufferSize
,
1507 _Out_ PULONG SlotNumbers
,
1508 _Out_ PULONG ReturnedLength
);
1511 (NTAPI
*pHalInitPnpDriver
)(VOID
);
1513 typedef struct _PM_DISPATCH_TABLE
{
1517 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
1520 (NTAPI
*pHalInitPowerManagement
)(
1521 _In_ PPM_DISPATCH_TABLE PmDriverDispatchTable
,
1522 _Out_ PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
1524 typedef struct _DMA_ADAPTER
*
1525 (NTAPI
*pHalGetDmaAdapter
)(
1527 _In_
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
1528 _Out_ PULONG NumberOfMapRegisters
);
1531 (NTAPI
*pHalGetInterruptTranslator
)(
1532 _In_ INTERFACE_TYPE ParentInterfaceType
,
1533 _In_ ULONG ParentBusNumber
,
1534 _In_ INTERFACE_TYPE BridgeInterfaceType
,
1536 _In_ USHORT Version
,
1537 _Out_ PTRANSLATOR_INTERFACE Translator
,
1538 _Out_ PULONG BridgeBusNumber
);
1541 (NTAPI
*pHalStartMirroring
)(VOID
);
1544 (NTAPI
*pHalEndMirroring
)(
1545 _In_ ULONG PassNumber
);
1548 (NTAPI
*pHalMirrorPhysicalMemory
)(
1549 _In_ PHYSICAL_ADDRESS PhysicalAddress
,
1550 _In_ LARGE_INTEGER NumberOfBytes
);
1553 (NTAPI
*pHalMirrorVerify
)(
1554 _In_ PHYSICAL_ADDRESS PhysicalAddress
,
1555 _In_ LARGE_INTEGER NumberOfBytes
);
1558 (NTAPI
*pHalTranslateBusAddress
)(
1559 _In_ INTERFACE_TYPE InterfaceType
,
1560 _In_ ULONG BusNumber
,
1561 _In_ PHYSICAL_ADDRESS BusAddress
,
1562 _Inout_ PULONG AddressSpace
,
1563 _Out_ PPHYSICAL_ADDRESS TranslatedAddress
);
1566 (NTAPI
*pHalAssignSlotResources
)(
1567 _In_ PUNICODE_STRING RegistryPath
,
1568 _In_opt_ PUNICODE_STRING DriverClassName
,
1569 _In_ PDRIVER_OBJECT DriverObject
,
1570 _In_ PDEVICE_OBJECT DeviceObject
,
1571 _In_ INTERFACE_TYPE BusType
,
1572 _In_ ULONG BusNumber
,
1573 _In_ ULONG SlotNumber
,
1574 _Inout_ PCM_RESOURCE_LIST
*AllocatedResources
);
1577 (NTAPI
*pHalHaltSystem
)(VOID
);
1580 (NTAPI
*pHalResetDisplay
)(VOID
);
1582 typedef struct _MAP_REGISTER_ENTRY
{
1584 BOOLEAN WriteToDevice
;
1585 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
1588 (NTAPI
*pHalVectorToIDTEntry
)(
1592 (NTAPI
*pHalFindBusAddressTranslation
)(
1593 _In_ PHYSICAL_ADDRESS BusAddress
,
1594 _Inout_ PULONG AddressSpace
,
1595 _Out_ PPHYSICAL_ADDRESS TranslatedAddress
,
1596 _Inout_ PULONG_PTR Context
,
1597 _In_ BOOLEAN NextBus
);
1600 (NTAPI
*pHalEndOfBoot
)(VOID
);
1603 (NTAPI
*pHalGetAcpiTable
)(
1604 _In_ ULONG Signature
,
1605 _In_opt_ PCSTR OemId
,
1606 _In_opt_ PCSTR OemTableId
);
1610 (*pHalGetErrorCapList
)(
1611 _Inout_ PULONG CapsListLength
,
1612 _Inout_updates_bytes_(*CapsListLength
) PUCHAR ErrorCapList
);
1616 _In_ ULONG BufferLength
,
1617 _In_reads_bytes_(BufferLength
) PUCHAR Buffer
);
1621 (NTAPI
*PCI_ERROR_HANDLER_CALLBACK
)(VOID
);
1624 (NTAPI
*pHalSetPciErrorHandlerCallback
)(
1625 _In_ PCI_ERROR_HANDLER_CALLBACK Callback
);
1627 #if 1 /* Not present in WDK 7600 */
1629 (FASTCALL
*pHalIoAssignDriveLetters
)(
1630 _In_
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
1631 _In_ PSTRING NtDeviceName
,
1632 _Out_ PUCHAR NtSystemPath
,
1633 _Out_ PSTRING NtSystemPathString
);
1638 pHalQuerySystemInformation HalQuerySystemInformation
;
1639 pHalSetSystemInformation HalSetSystemInformation
;
1640 pHalQueryBusSlots HalQueryBusSlots
;
1642 pHalExamineMBR HalExamineMBR
;
1643 #if 1 /* Not present in WDK 7600 */
1644 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
1646 pHalIoReadPartitionTable HalIoReadPartitionTable
;
1647 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
1648 pHalIoWritePartitionTable HalIoWritePartitionTable
;
1649 pHalHandlerForBus HalReferenceHandlerForBus
;
1650 pHalReferenceBusHandler HalReferenceBusHandler
;
1651 pHalReferenceBusHandler HalDereferenceBusHandler
;
1652 pHalInitPnpDriver HalInitPnpDriver
;
1653 pHalInitPowerManagement HalInitPowerManagement
;
1654 pHalGetDmaAdapter HalGetDmaAdapter
;
1655 pHalGetInterruptTranslator HalGetInterruptTranslator
;
1656 pHalStartMirroring HalStartMirroring
;
1657 pHalEndMirroring HalEndMirroring
;
1658 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
1659 pHalEndOfBoot HalEndOfBoot
;
1660 pHalMirrorVerify HalMirrorVerify
;
1661 pHalGetAcpiTable HalGetCachedAcpiTable
;
1662 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback
;
1664 pHalGetErrorCapList HalGetErrorCapList
;
1665 pHalInjectError HalInjectError
;
1667 } HAL_DISPATCH
, *PHAL_DISPATCH
;
1670 extern HAL_DISPATCH HalDispatchTable
;
1671 #define HALDISPATCH (&HalDispatchTable)
1673 __CREATE_NTOS_DATA_IMPORT_ALIAS(HalDispatchTable
)
1674 extern PHAL_DISPATCH HalDispatchTable
;
1675 #define HALDISPATCH HalDispatchTable
1678 #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
1679 #define HalDispatchTableVersion HALDISPATCH->Version
1680 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
1681 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
1682 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
1683 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
1684 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
1685 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
1686 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
1687 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
1688 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
1689 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
1690 #define HalStartMirroring HALDISPATCH->HalStartMirroring
1691 #define HalEndMirroring HALDISPATCH->HalEndMirroring
1692 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
1693 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
1694 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
1695 #define HalGetCachedAcpiTable HALDISPATCH->HalGetCachedAcpiTable
1696 #define HalSetPciErrorHandlerCallback HALDISPATCH->HalSetPciErrorHandlerCallback
1698 #define HalGetErrorCapList HALDISPATCH->HalGetErrorCapList
1699 #define HalInjectError HALDISPATCH->HalInjectError
1702 typedef struct _HAL_BUS_INFORMATION
{
1703 INTERFACE_TYPE BusType
;
1704 BUS_DATA_TYPE ConfigurationType
;
1707 } HAL_BUS_INFORMATION
, *PHAL_BUS_INFORMATION
;
1709 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
{
1710 KPROFILE_SOURCE Source
;
1713 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
1715 typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX
{
1716 KPROFILE_SOURCE Source
;
1719 ULONG_PTR DefInterval
;
1720 ULONG_PTR MaxInterval
;
1721 ULONG_PTR MinInterval
;
1722 } HAL_PROFILE_SOURCE_INFORMATION_EX
, *PHAL_PROFILE_SOURCE_INFORMATION_EX
;
1724 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
{
1725 KPROFILE_SOURCE Source
;
1727 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
1729 typedef struct _HAL_PROFILE_SOURCE_LIST
{
1730 KPROFILE_SOURCE Source
;
1732 } HAL_PROFILE_SOURCE_LIST
, *PHAL_PROFILE_SOURCE_LIST
;
1734 typedef enum _HAL_DISPLAY_BIOS_INFORMATION
{
1735 HalDisplayInt10Bios
,
1736 HalDisplayEmulatedBios
,
1738 } HAL_DISPLAY_BIOS_INFORMATION
, *PHAL_DISPLAY_BIOS_INFORMATION
;
1740 typedef struct _HAL_POWER_INFORMATION
{
1742 } HAL_POWER_INFORMATION
, *PHAL_POWER_INFORMATION
;
1744 typedef struct _HAL_PROCESSOR_SPEED_INFO
{
1745 ULONG ProcessorSpeed
;
1746 } HAL_PROCESSOR_SPEED_INFORMATION
, *PHAL_PROCESSOR_SPEED_INFORMATION
;
1748 typedef struct _HAL_CALLBACKS
{
1749 PCALLBACK_OBJECT SetSystemInformation
;
1750 PCALLBACK_OBJECT BusCheck
;
1751 } HAL_CALLBACKS
, *PHAL_CALLBACKS
;
1753 typedef struct _HAL_PROCESSOR_FEATURE
{
1754 ULONG UsableFeatureBits
;
1755 } HAL_PROCESSOR_FEATURE
;
1758 (NTAPI
*PHALIOREADWRITEHANDLER
)(
1762 _Inout_ PULONG pdwData
);
1764 typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST
{
1767 ULONG OSVersionTrigger
;
1768 PHALIOREADWRITEHANDLER IOHandler
;
1769 } HAL_AMLI_BAD_IO_ADDRESS_LIST
, *PHAL_AMLI_BAD_IO_ADDRESS_LIST
;
1771 #if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
1774 (NTAPI
*PHALMCAINTERFACELOCK
)(VOID
);
1777 (NTAPI
*PHALMCAINTERFACEUNLOCK
)(VOID
);
1780 (NTAPI
*PHALMCAINTERFACEREADREGISTER
)(
1781 _In_ UCHAR BankNumber
,
1782 _Inout_ PVOID Exception
);
1784 typedef struct _HAL_MCA_INTERFACE
{
1785 PHALMCAINTERFACELOCK Lock
;
1786 PHALMCAINTERFACEUNLOCK Unlock
;
1787 PHALMCAINTERFACEREADREGISTER ReadRegister
;
1788 } HAL_MCA_INTERFACE
;
1791 ApicDestinationModePhysical
= 1,
1792 ApicDestinationModeLogicalFlat
,
1793 ApicDestinationModeLogicalClustered
,
1794 ApicDestinationModeUnknown
1795 } HAL_APIC_DESTINATION_MODE
, *PHAL_APIC_DESTINATION_MODE
;
1797 #if defined(_AMD64_)
1799 struct _KTRAP_FRAME
;
1800 struct _KEXCEPTION_FRAME
;
1802 typedef ERROR_SEVERITY
1803 (NTAPI
*PDRIVER_EXCPTN_CALLBACK
)(
1805 _In_
struct _KTRAP_FRAME
*TrapFrame
,
1806 _In_
struct _KEXCEPTION_FRAME
*ExceptionFrame
,
1807 _In_ PMCA_EXCEPTION Exception
);
1811 #if defined(_X86_) || defined(_IA64_)
1818 (NTAPI
*PDRIVER_EXCPTN_CALLBACK
)(
1820 _In_ PMCA_EXCEPTION BankLog
);
1823 typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK
;
1825 typedef struct _MCA_DRIVER_INFO
{
1826 PDRIVER_MCA_EXCEPTION_CALLBACK ExceptionCallback
;
1827 PKDEFERRED_ROUTINE DpcCallback
;
1828 PVOID DeviceContext
;
1829 } MCA_DRIVER_INFO
, *PMCA_DRIVER_INFO
;
1831 typedef struct _HAL_ERROR_INFO
{
1835 ULONG McaPreviousEventsCount
;
1836 ULONG McaCorrectedEventsCount
;
1837 ULONG McaKernelDeliveryFails
;
1838 ULONG McaDriverDpcQueueFails
;
1841 ULONG CmcPollingInterval
;
1842 ULONG CmcInterruptsCount
;
1843 ULONG CmcKernelDeliveryFails
;
1844 ULONG CmcDriverDpcQueueFails
;
1845 ULONG CmcGetStateFails
;
1846 ULONG CmcClearStateFails
;
1850 ULONG CpePollingInterval
;
1851 ULONG CpeInterruptsCount
;
1852 ULONG CpeKernelDeliveryFails
;
1853 ULONG CpeDriverDpcQueueFails
;
1854 ULONG CpeGetStateFails
;
1855 ULONG CpeClearStateFails
;
1856 ULONG CpeInterruptSources
;
1858 ULONGLONG KernelReserved
[4];
1859 } HAL_ERROR_INFO
, *PHAL_ERROR_INFO
;
1861 #define HAL_MCE_INTERRUPTS_BASED ((ULONG)-1)
1862 #define HAL_MCE_DISABLED ((ULONG)0)
1864 #define HAL_CMC_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
1865 #define HAL_CMC_DISABLED HAL_MCE_DISABLED
1867 #define HAL_CPE_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
1868 #define HAL_CPE_DISABLED HAL_MCE_DISABLED
1870 #define HAL_MCA_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
1871 #define HAL_MCA_DISABLED HAL_MCE_DISABLED
1874 (NTAPI
*PDRIVER_CMC_EXCEPTION_CALLBACK
)(
1876 _In_ PCMC_EXCEPTION CmcLog
);
1879 (NTAPI
*PDRIVER_CPE_EXCEPTION_CALLBACK
)(
1881 _In_ PCPE_EXCEPTION CmcLog
);
1883 typedef struct _CMC_DRIVER_INFO
{
1884 PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback
;
1885 PKDEFERRED_ROUTINE DpcCallback
;
1886 PVOID DeviceContext
;
1887 } CMC_DRIVER_INFO
, *PCMC_DRIVER_INFO
;
1889 typedef struct _CPE_DRIVER_INFO
{
1890 PDRIVER_CPE_EXCEPTION_CALLBACK ExceptionCallback
;
1891 PKDEFERRED_ROUTINE DpcCallback
;
1892 PVOID DeviceContext
;
1893 } CPE_DRIVER_INFO
, *PCPE_DRIVER_INFO
;
1895 #endif // defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
1900 (*HALSENDCROSSPARTITIONIPI
)(
1901 _In_ USHORT ProcessorID
,
1902 _In_ UCHAR HardwareVector
);
1905 (*HALRESERVECROSSPARTITIONINTERRUPTVECTOR
)(
1906 _Out_ PULONG Vector
,
1908 _Inout_ PGROUP_AFFINITY Affinity
,
1909 _Out_ PUCHAR HardwareVector
);
1912 (*HALFREECROSSPARTITIONINTERRUPTVECTOR
)(
1914 _In_ PGROUP_AFFINITY Affinity
);
1916 typedef struct _HAL_CROSS_PARTITION_IPI_INTERFACE
{
1917 HALSENDCROSSPARTITIONIPI HalSendCrossPartitionIpi
;
1918 HALRESERVECROSSPARTITIONINTERRUPTVECTOR HalReserveCrossPartitionInterruptVector
;
1919 HALFREECROSSPARTITIONINTERRUPTVECTOR HalFreeCrossPartitionInterruptVector
;
1920 } HAL_CROSS_PARTITION_IPI_INTERFACE
;
1922 #define HAL_CROSS_PARTITION_IPI_INTERFACE_MINIMUM_SIZE \
1923 FIELD_OFFSET(HAL_CROSS_PARTITION_IPI_INTERFACE, \
1924 HalFreeCrossPartitionInterruptVector)
1926 #endif /* defined(_IA64_) */
1928 typedef struct _HAL_PLATFORM_INFORMATION
{
1929 ULONG PlatformFlags
;
1930 } HAL_PLATFORM_INFORMATION
, *PHAL_PLATFORM_INFORMATION
;
1932 #define HAL_PLATFORM_DISABLE_WRITE_COMBINING 0x01L
1933 #define HAL_PLATFORM_DISABLE_PTCG 0x04L
1934 #define HAL_PLATFORM_DISABLE_UC_MAIN_MEMORY 0x08L
1935 #define HAL_PLATFORM_ENABLE_WRITE_COMBINING_MMIO 0x10L
1936 #define HAL_PLATFORM_ACPI_TABLES_CACHED 0x20L
1938 /******************************************************************************
1940 ******************************************************************************/
1942 typedef struct _EXCEPTION_REGISTRATION_RECORD
1944 struct _EXCEPTION_REGISTRATION_RECORD
*Next
;
1945 PEXCEPTION_ROUTINE Handler
;
1946 } EXCEPTION_REGISTRATION_RECORD
, *PEXCEPTION_REGISTRATION_RECORD
;
1948 typedef struct _NT_TIB
{
1949 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
1953 _ANONYMOUS_UNION
union {
1957 PVOID ArbitraryUserPointer
;
1958 struct _NT_TIB
*Self
;
1961 typedef struct _NT_TIB32
{
1962 ULONG ExceptionList
;
1966 _ANONYMOUS_UNION
union {
1970 ULONG ArbitraryUserPointer
;
1972 } NT_TIB32
,*PNT_TIB32
;
1974 typedef struct _NT_TIB64
{
1975 ULONG64 ExceptionList
;
1978 ULONG64 SubSystemTib
;
1979 _ANONYMOUS_UNION
union {
1983 ULONG64 ArbitraryUserPointer
;
1985 } NT_TIB64
,*PNT_TIB64
;
1987 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
1988 #define NX_SUPPORT_POLICY_ALWAYSON 1
1989 #define NX_SUPPORT_POLICY_OPTIN 2
1990 #define NX_SUPPORT_POLICY_OPTOUT 3
1992 _IRQL_requires_same_
1993 _Function_class_(EXPAND_STACK_CALLOUT
)
1995 (NTAPI EXPAND_STACK_CALLOUT
)(
1996 _In_opt_ PVOID Parameter
);
1997 typedef EXPAND_STACK_CALLOUT
*PEXPAND_STACK_CALLOUT
;
2000 (NTAPI
*PTIMER_APC_ROUTINE
)(
2001 _In_ PVOID TimerContext
,
2002 _In_ ULONG TimerLowValue
,
2003 _In_ LONG TimerHighValue
);
2005 typedef enum _TIMER_SET_INFORMATION_CLASS
{
2006 TimerSetCoalescableTimer
,
2008 } TIMER_SET_INFORMATION_CLASS
;
2010 #if (NTDDI_VERSION >= NTDDI_WIN7)
2011 typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO
{
2012 _In_ LARGE_INTEGER DueTime
;
2013 _In_opt_ PTIMER_APC_ROUTINE TimerApcRoutine
;
2014 _In_opt_ PVOID TimerContext
;
2015 _In_opt_
struct _COUNTED_REASON_CONTEXT
*WakeContext
;
2016 _In_opt_ ULONG Period
;
2017 _In_ ULONG TolerableDelay
;
2018 _Out_opt_ PBOOLEAN PreviousState
;
2019 } TIMER_SET_COALESCABLE_TIMER_INFO
, *PTIMER_SET_COALESCABLE_TIMER_INFO
;
2020 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
2022 #define XSTATE_LEGACY_FLOATING_POINT 0
2023 #define XSTATE_LEGACY_SSE 1
2024 #define XSTATE_GSSE 2
2026 #define XSTATE_MASK_LEGACY_FLOATING_POINT (1LL << (XSTATE_LEGACY_FLOATING_POINT))
2027 #define XSTATE_MASK_LEGACY_SSE (1LL << (XSTATE_LEGACY_SSE))
2028 #define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
2029 #define XSTATE_MASK_GSSE (1LL << (XSTATE_GSSE))
2031 #define MAXIMUM_XSTATE_FEATURES 64
2033 typedef struct _XSTATE_FEATURE
{
2036 } XSTATE_FEATURE
, *PXSTATE_FEATURE
;
2038 typedef struct _XSTATE_CONFIGURATION
{
2039 ULONG64 EnabledFeatures
;
2041 ULONG OptimizedSave
:1;
2042 XSTATE_FEATURE Features
[MAXIMUM_XSTATE_FEATURES
];
2043 } XSTATE_CONFIGURATION
, *PXSTATE_CONFIGURATION
;
2045 #define MAX_WOW64_SHARED_ENTRIES 16
2047 typedef struct _KUSER_SHARED_DATA
{
2048 ULONG TickCountLowDeprecated
;
2049 ULONG TickCountMultiplier
;
2050 volatile KSYSTEM_TIME InterruptTime
;
2051 volatile KSYSTEM_TIME SystemTime
;
2052 volatile KSYSTEM_TIME TimeZoneBias
;
2053 USHORT ImageNumberLow
;
2054 USHORT ImageNumberHigh
;
2055 WCHAR NtSystemRoot
[260];
2056 ULONG MaxStackTraceDepth
;
2057 ULONG CryptoExponent
;
2059 ULONG LargePageMinimum
;
2061 NT_PRODUCT_TYPE NtProductType
;
2062 BOOLEAN ProductTypeIsValid
;
2063 ULONG NtMajorVersion
;
2064 ULONG NtMinorVersion
;
2065 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
2068 volatile ULONG TimeSlip
;
2069 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
2070 ULONG AltArchitecturePad
[1];
2071 LARGE_INTEGER SystemExpirationDate
;
2073 BOOLEAN KdDebuggerEnabled
;
2074 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2075 UCHAR NXSupportPolicy
;
2077 volatile ULONG ActiveConsoleId
;
2078 volatile ULONG DismountCount
;
2079 ULONG ComPlusPackage
;
2080 ULONG LastSystemRITEventTickCount
;
2081 ULONG NumberOfPhysicalPages
;
2082 BOOLEAN SafeBootMode
;
2083 #if (NTDDI_VERSION >= NTDDI_WIN7)
2084 _ANONYMOUS_UNION
union {
2086 _ANONYMOUS_STRUCT
struct {
2087 UCHAR TscQpcEnabled
:1;
2088 UCHAR TscQpcSpareFlag
:1;
2089 UCHAR TscQpcShift
:6;
2094 #if (NTDDI_VERSION >= NTDDI_VISTA)
2095 _ANONYMOUS_UNION
union {
2096 ULONG SharedDataFlags
;
2097 _ANONYMOUS_STRUCT
struct {
2098 ULONG DbgErrorPortPresent
:1;
2099 ULONG DbgElevationEnabled
:1;
2100 ULONG DbgVirtEnabled
:1;
2101 ULONG DbgInstallerDetectEnabled
:1;
2102 ULONG DbgSystemDllRelocated
:1;
2103 ULONG DbgDynProcessorEnabled
:1;
2104 ULONG DbgSEHValidationEnabled
:1;
2111 ULONG DataFlagsPad
[1];
2112 ULONGLONG TestRetInstruction
;
2114 ULONG SystemCallReturn
;
2115 ULONGLONG SystemCallPad
[3];
2116 _ANONYMOUS_UNION
union {
2117 volatile KSYSTEM_TIME TickCount
;
2118 volatile ULONG64 TickCountQuad
;
2119 _ANONYMOUS_STRUCT
struct {
2120 ULONG ReservedTickCountOverlay
[3];
2121 ULONG TickCountPad
[1];
2126 #if (NTDDI_VERSION >= NTDDI_WS03)
2127 LONGLONG ConsoleSessionForegroundProcessId
;
2128 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
2130 #if (NTDDI_VERSION >= NTDDI_VISTA)
2131 #if (NTDDI_VERSION >= NTDDI_WIN7)
2132 USHORT UserModeGlobalLogger
[16];
2134 USHORT UserModeGlobalLogger
[8];
2135 ULONG HeapTracingPid
[2];
2136 ULONG CritSecTracingPid
[2];
2138 ULONG ImageFileExecutionOptions
;
2139 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
2140 ULONG LangGenerationCount
;
2142 /* 4 bytes padding */
2144 ULONGLONG Reserved5
;
2145 volatile ULONG64 InterruptTimeBias
;
2147 #if (NTDDI_VERSION >= NTDDI_WIN7)
2148 volatile ULONG64 TscQpcBias
;
2149 volatile ULONG ActiveProcessorCount
;
2150 volatile USHORT ActiveGroupCount
;
2152 volatile ULONG AitSamplingValue
;
2153 volatile ULONG AppCompatFlag
;
2154 ULONGLONG SystemDllNativeRelocation
;
2155 ULONG SystemDllWowRelocation
;
2157 XSTATE_CONFIGURATION XState
;
2159 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
2161 #if (NTDDI_VERSION >= NTDDI_VISTA)
2162 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
2163 #elif (NTDDI_VERSION >= NTDDI_WINXP)
2164 extern NTSYSAPI CCHAR KeNumberProcessors
;
2166 extern PCCHAR KeNumberProcessors
;
2170 /******************************************************************************
2171 * Kernel Debugger Types *
2172 ******************************************************************************/
2173 typedef struct _DEBUG_DEVICE_ADDRESS
{
2177 PUCHAR TranslatedAddress
;
2179 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
2181 typedef struct _DEBUG_MEMORY_REQUIREMENTS
{
2182 PHYSICAL_ADDRESS Start
;
2183 PHYSICAL_ADDRESS MaxEnd
;
2184 PVOID VirtualAddress
;
2188 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
2190 typedef struct _DEBUG_DEVICE_DESCRIPTOR
{
2199 BOOLEAN Initialized
;
2201 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
2202 DEBUG_MEMORY_REQUIREMENTS Memory
;
2203 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
2206 (NTAPI
*pKdSetupPciDeviceForDebugging
)(
2207 _In_opt_ PVOID LoaderBlock
,
2208 _Inout_ PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
2211 (NTAPI
*pKdReleasePciDeviceForDebugging
)(
2212 _Inout_ PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
2215 (NTAPI
*pKdGetAcpiTablePhase0
)(
2216 _In_
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
2217 _In_ ULONG Signature
);
2220 (NTAPI
*pKdCheckPowerButton
)(VOID
);
2222 #if (NTDDI_VERSION >= NTDDI_VISTA)
2224 (NTAPI
*pKdMapPhysicalMemory64
)(
2225 _In_ PHYSICAL_ADDRESS PhysicalAddress
,
2226 _In_ ULONG NumberPages
,
2227 _In_ BOOLEAN FlushCurrentTLB
);
2230 (NTAPI
*pKdUnmapVirtualAddress
)(
2231 _In_ PVOID VirtualAddress
,
2232 _In_ ULONG NumberPages
,
2233 _In_ BOOLEAN FlushCurrentTLB
);
2236 (NTAPI
*pKdMapPhysicalMemory64
)(
2237 _In_ PHYSICAL_ADDRESS PhysicalAddress
,
2238 _In_ ULONG NumberPages
);
2241 (NTAPI
*pKdUnmapVirtualAddress
)(
2242 _In_ PVOID VirtualAddress
,
2243 _In_ ULONG NumberPages
);
2247 (NTAPI
*pKdGetPciDataByOffset
)(
2248 _In_ ULONG BusNumber
,
2249 _In_ ULONG SlotNumber
,
2250 _Out_writes_bytes_(Length
) PVOID Buffer
,
2255 (NTAPI
*pKdSetPciDataByOffset
)(
2256 _In_ ULONG BusNumber
,
2257 _In_ ULONG SlotNumber
,
2258 _In_reads_bytes_(Length
) PVOID Buffer
,
2261 /******************************************************************************
2262 * Memory manager Types *
2263 ******************************************************************************/
2265 typedef struct _PHYSICAL_MEMORY_RANGE
{
2266 PHYSICAL_ADDRESS BaseAddress
;
2267 LARGE_INTEGER NumberOfBytes
;
2268 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
2271 (NTAPI
*PMM_ROTATE_COPY_CALLBACK_FUNCTION
)(
2272 _In_ PMDL DestinationMdl
,
2273 _In_ PMDL SourceMdl
,
2274 _In_ PVOID Context
);
2276 typedef enum _MM_ROTATE_DIRECTION
{
2278 MmToFrameBufferNoCopy
,
2280 MmToRegularMemoryNoCopy
,
2281 MmMaximumRotateDirection
2282 } MM_ROTATE_DIRECTION
, *PMM_ROTATE_DIRECTION
;
2285 /******************************************************************************
2286 * Process Manager Types *
2287 ******************************************************************************/
2289 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
2290 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
2291 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
2292 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
2293 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
2295 typedef struct _QUOTA_LIMITS
{
2296 SIZE_T PagedPoolLimit
;
2297 SIZE_T NonPagedPoolLimit
;
2298 SIZE_T MinimumWorkingSetSize
;
2299 SIZE_T MaximumWorkingSetSize
;
2300 SIZE_T PagefileLimit
;
2301 LARGE_INTEGER TimeLimit
;
2302 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
2304 typedef union _RATE_QUOTA_LIMIT
{
2306 _ANONYMOUS_STRUCT
struct {
2307 ULONG RatePercent
:7;
2310 } RATE_QUOTA_LIMIT
, *PRATE_QUOTA_LIMIT
;
2312 typedef struct _QUOTA_LIMITS_EX
{
2313 SIZE_T PagedPoolLimit
;
2314 SIZE_T NonPagedPoolLimit
;
2315 SIZE_T MinimumWorkingSetSize
;
2316 SIZE_T MaximumWorkingSetSize
;
2317 SIZE_T PagefileLimit
;
2318 LARGE_INTEGER TimeLimit
;
2319 SIZE_T WorkingSetLimit
;
2324 RATE_QUOTA_LIMIT CpuRateLimit
;
2325 } QUOTA_LIMITS_EX
, *PQUOTA_LIMITS_EX
;
2327 typedef struct _IO_COUNTERS
{
2328 ULONGLONG ReadOperationCount
;
2329 ULONGLONG WriteOperationCount
;
2330 ULONGLONG OtherOperationCount
;
2331 ULONGLONG ReadTransferCount
;
2332 ULONGLONG WriteTransferCount
;
2333 ULONGLONG OtherTransferCount
;
2334 } IO_COUNTERS
, *PIO_COUNTERS
;
2336 typedef struct _VM_COUNTERS
{
2337 SIZE_T PeakVirtualSize
;
2339 ULONG PageFaultCount
;
2340 SIZE_T PeakWorkingSetSize
;
2341 SIZE_T WorkingSetSize
;
2342 SIZE_T QuotaPeakPagedPoolUsage
;
2343 SIZE_T QuotaPagedPoolUsage
;
2344 SIZE_T QuotaPeakNonPagedPoolUsage
;
2345 SIZE_T QuotaNonPagedPoolUsage
;
2346 SIZE_T PagefileUsage
;
2347 SIZE_T PeakPagefileUsage
;
2348 } VM_COUNTERS
, *PVM_COUNTERS
;
2350 typedef struct _VM_COUNTERS_EX
{
2351 SIZE_T PeakVirtualSize
;
2353 ULONG PageFaultCount
;
2354 SIZE_T PeakWorkingSetSize
;
2355 SIZE_T WorkingSetSize
;
2356 SIZE_T QuotaPeakPagedPoolUsage
;
2357 SIZE_T QuotaPagedPoolUsage
;
2358 SIZE_T QuotaPeakNonPagedPoolUsage
;
2359 SIZE_T QuotaNonPagedPoolUsage
;
2360 SIZE_T PagefileUsage
;
2361 SIZE_T PeakPagefileUsage
;
2362 SIZE_T PrivateUsage
;
2363 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
2365 #define MAX_HW_COUNTERS 16
2366 #define THREAD_PROFILING_FLAG_DISPATCH 0x00000001
2368 typedef enum _HARDWARE_COUNTER_TYPE
{
2370 MaxHardwareCounterType
2371 } HARDWARE_COUNTER_TYPE
, *PHARDWARE_COUNTER_TYPE
;
2373 typedef struct _HARDWARE_COUNTER
{
2374 HARDWARE_COUNTER_TYPE Type
;
2377 } HARDWARE_COUNTER
, *PHARDWARE_COUNTER
;
2379 typedef struct _POOLED_USAGE_AND_LIMITS
{
2380 SIZE_T PeakPagedPoolUsage
;
2381 SIZE_T PagedPoolUsage
;
2382 SIZE_T PagedPoolLimit
;
2383 SIZE_T PeakNonPagedPoolUsage
;
2384 SIZE_T NonPagedPoolUsage
;
2385 SIZE_T NonPagedPoolLimit
;
2386 SIZE_T PeakPagefileUsage
;
2387 SIZE_T PagefileUsage
;
2388 SIZE_T PagefileLimit
;
2389 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
2391 typedef struct _PROCESS_ACCESS_TOKEN
{
2394 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
2396 #define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS 0x00000003UL
2397 #define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1))
2399 typedef struct _PROCESS_EXCEPTION_PORT
{
2400 _In_ HANDLE ExceptionPortHandle
;
2401 _Inout_ ULONG StateFlags
;
2402 } PROCESS_EXCEPTION_PORT
, *PPROCESS_EXCEPTION_PORT
;
2405 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
2406 _In_ HANDLE ParentId
,
2407 _In_ HANDLE ProcessId
,
2408 _In_ BOOLEAN Create
);
2410 typedef struct _PS_CREATE_NOTIFY_INFO
{
2412 _ANONYMOUS_UNION
union {
2414 _ANONYMOUS_STRUCT
struct {
2415 _In_ ULONG FileOpenNameAvailable
:1;
2416 _In_ ULONG Reserved
:31;
2419 _In_ HANDLE ParentProcessId
;
2420 _In_ CLIENT_ID CreatingThreadId
;
2421 _Inout_
struct _FILE_OBJECT
*FileObject
;
2422 _In_ PCUNICODE_STRING ImageFileName
;
2423 _In_opt_ PCUNICODE_STRING CommandLine
;
2424 _Inout_ NTSTATUS CreationStatus
;
2425 } PS_CREATE_NOTIFY_INFO
, *PPS_CREATE_NOTIFY_INFO
;
2428 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE_EX
)(
2429 _Inout_ PEPROCESS Process
,
2430 _In_ HANDLE ProcessId
,
2431 _Inout_opt_ PPS_CREATE_NOTIFY_INFO CreateInfo
);
2434 (NTAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
2435 _In_ HANDLE ProcessId
,
2436 _In_ HANDLE ThreadId
,
2437 _In_ BOOLEAN Create
);
2439 #define IMAGE_ADDRESSING_MODE_32BIT 3
2441 typedef struct _IMAGE_INFO
{
2442 _ANONYMOUS_UNION
union {
2444 _ANONYMOUS_STRUCT
struct {
2445 ULONG ImageAddressingMode
:8;
2446 ULONG SystemModeImage
:1;
2447 ULONG ImageMappedToAllPids
:1;
2448 ULONG ExtendedInfoPresent
:1;
2453 ULONG ImageSelector
;
2455 ULONG ImageSectionNumber
;
2456 } IMAGE_INFO
, *PIMAGE_INFO
;
2458 typedef struct _IMAGE_INFO_EX
{
2460 IMAGE_INFO ImageInfo
;
2461 struct _FILE_OBJECT
*FileObject
;
2462 } IMAGE_INFO_EX
, *PIMAGE_INFO_EX
;
2465 (NTAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
2466 _In_ PUNICODE_STRING FullImageName
,
2467 _In_ HANDLE ProcessId
,
2468 _In_ PIMAGE_INFO ImageInfo
);
2470 #define THREAD_CSWITCH_PMU_DISABLE FALSE
2471 #define THREAD_CSWITCH_PMU_ENABLE TRUE
2473 #define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001
2475 #define PROCESS_HANDLE_TRACING_MAX_STACKS 16
2477 typedef enum _PROCESSINFOCLASS
{
2478 ProcessBasicInformation
,
2483 ProcessBasePriority
,
2484 ProcessRaisePriority
,
2486 ProcessExceptionPort
,
2488 ProcessLdtInformation
,
2490 ProcessDefaultHardErrorMode
,
2491 ProcessIoPortHandlers
,
2492 ProcessPooledUsageAndLimits
,
2493 ProcessWorkingSetWatch
,
2494 ProcessUserModeIOPL
,
2495 ProcessEnableAlignmentFaultFixup
,
2496 ProcessPriorityClass
,
2497 ProcessWx86Information
,
2499 ProcessAffinityMask
,
2500 ProcessPriorityBoost
,
2502 ProcessSessionInformation
,
2503 ProcessForegroundInformation
,
2504 ProcessWow64Information
,
2505 ProcessImageFileName
,
2506 ProcessLUIDDeviceMapsEnabled
,
2507 ProcessBreakOnTermination
,
2508 ProcessDebugObjectHandle
,
2510 ProcessHandleTracing
,
2512 ProcessExecuteFlags
,
2513 ProcessTlsInformation
,
2515 ProcessImageInformation
,
2517 ProcessPagePriority
,
2518 ProcessInstrumentationCallback
,
2519 ProcessThreadStackAllocation
,
2520 ProcessWorkingSetWatchEx
,
2521 ProcessImageFileNameWin32
,
2522 ProcessImageFileMapping
,
2523 ProcessAffinityUpdateMode
,
2524 ProcessMemoryAllocationMode
,
2525 ProcessGroupInformation
,
2526 ProcessTokenVirtualizationEnabled
,
2527 ProcessConsoleHostProcess
,
2528 ProcessWindowInformation
,
2532 typedef enum _THREADINFOCLASS
{
2533 ThreadBasicInformation
,
2538 ThreadImpersonationToken
,
2539 ThreadDescriptorTableEntry
,
2540 ThreadEnableAlignmentFaultFixup
,
2541 ThreadEventPair_Reusable
,
2542 ThreadQuerySetWin32StartAddress
,
2544 ThreadPerformanceCount
,
2545 ThreadAmILastThread
,
2546 ThreadIdealProcessor
,
2547 ThreadPriorityBoost
,
2548 ThreadSetTlsArrayAddress
,
2550 ThreadHideFromDebugger
,
2551 ThreadBreakOnTermination
,
2552 ThreadSwitchLegacyState
,
2554 ThreadLastSystemCall
,
2558 ThreadActualBasePriority
,
2559 ThreadTebInformation
,
2563 ThreadGroupInformation
,
2564 ThreadUmsInformation
,
2565 ThreadCounterProfiling
,
2566 ThreadIdealProcessorEx
,
2570 typedef struct _PAGE_PRIORITY_INFORMATION
{
2572 } PAGE_PRIORITY_INFORMATION
, *PPAGE_PRIORITY_INFORMATION
;
2574 typedef struct _PROCESS_WS_WATCH_INFORMATION
{
2577 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
2579 typedef struct _PROCESS_BASIC_INFORMATION
{
2580 NTSTATUS ExitStatus
;
2581 struct _PEB
*PebBaseAddress
;
2582 ULONG_PTR AffinityMask
;
2583 KPRIORITY BasePriority
;
2584 ULONG_PTR UniqueProcessId
;
2585 ULONG_PTR InheritedFromUniqueProcessId
;
2586 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
2588 typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION
{
2590 PROCESS_BASIC_INFORMATION BasicInfo
;
2591 _ANONYMOUS_UNION
union {
2593 _ANONYMOUS_STRUCT
struct {
2594 ULONG IsProtectedProcess
:1;
2595 ULONG IsWow64Process
:1;
2596 ULONG IsProcessDeleting
:1;
2597 ULONG IsCrossSessionCreate
:1;
2601 } PROCESS_EXTENDED_BASIC_INFORMATION
, *PPROCESS_EXTENDED_BASIC_INFORMATION
;
2603 typedef struct _PROCESS_DEVICEMAP_INFORMATION
{
2604 _ANONYMOUS_UNION
union {
2606 HANDLE DirectoryHandle
;
2610 UCHAR DriveType
[32];
2613 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
2615 typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX
{
2616 _ANONYMOUS_UNION
union {
2618 HANDLE DirectoryHandle
;
2622 UCHAR DriveType
[32];
2626 } PROCESS_DEVICEMAP_INFORMATION_EX
, *PPROCESS_DEVICEMAP_INFORMATION_EX
;
2628 typedef struct _PROCESS_SESSION_INFORMATION
{
2630 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
2632 typedef struct _PROCESS_HANDLE_TRACING_ENABLE
{
2634 } PROCESS_HANDLE_TRACING_ENABLE
, *PPROCESS_HANDLE_TRACING_ENABLE
;
2636 typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX
{
2639 } PROCESS_HANDLE_TRACING_ENABLE_EX
, *PPROCESS_HANDLE_TRACING_ENABLE_EX
;
2641 typedef struct _PROCESS_HANDLE_TRACING_ENTRY
{
2645 PVOID Stacks
[PROCESS_HANDLE_TRACING_MAX_STACKS
];
2646 } PROCESS_HANDLE_TRACING_ENTRY
, *PPROCESS_HANDLE_TRACING_ENTRY
;
2648 typedef struct _PROCESS_HANDLE_TRACING_QUERY
{
2651 PROCESS_HANDLE_TRACING_ENTRY HandleTrace
[1];
2652 } PROCESS_HANDLE_TRACING_QUERY
, *PPROCESS_HANDLE_TRACING_QUERY
;
2654 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess
;
2657 /******************************************************************************
2658 * Runtime Library Types *
2659 ******************************************************************************/
2662 #ifndef _RTL_RUN_ONCE_DEF
2663 #define _RTL_RUN_ONCE_DEF
2665 #define RTL_RUN_ONCE_INIT {0}
2667 #define RTL_RUN_ONCE_CHECK_ONLY 0x00000001UL
2668 #define RTL_RUN_ONCE_ASYNC 0x00000002UL
2669 #define RTL_RUN_ONCE_INIT_FAILED 0x00000004UL
2671 #define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
2673 #define RTL_HASH_ALLOCATED_HEADER 0x00000001
2675 #define RTL_HASH_RESERVED_SIGNATURE 0
2677 /* RtlVerifyVersionInfo() ComparisonType */
2680 #define VER_GREATER 2
2681 #define VER_GREATER_EQUAL 3
2683 #define VER_LESS_EQUAL 5
2687 #define VER_CONDITION_MASK 7
2688 #define VER_NUM_BITS_PER_CONDITION_MASK 3
2690 /* RtlVerifyVersionInfo() TypeMask */
2692 #define VER_MINORVERSION 0x0000001
2693 #define VER_MAJORVERSION 0x0000002
2694 #define VER_BUILDNUMBER 0x0000004
2695 #define VER_PLATFORMID 0x0000008
2696 #define VER_SERVICEPACKMINOR 0x0000010
2697 #define VER_SERVICEPACKMAJOR 0x0000020
2698 #define VER_SUITENAME 0x0000040
2699 #define VER_PRODUCT_TYPE 0x0000080
2701 #define VER_NT_WORKSTATION 0x0000001
2702 #define VER_NT_DOMAIN_CONTROLLER 0x0000002
2703 #define VER_NT_SERVER 0x0000003
2705 #define VER_PLATFORM_WIN32s 0
2706 #define VER_PLATFORM_WIN32_WINDOWS 1
2707 #define VER_PLATFORM_WIN32_NT 2
2709 typedef union _RTL_RUN_ONCE
{
2711 } RTL_RUN_ONCE
, *PRTL_RUN_ONCE
;
2713 _Function_class_(RTL_RUN_ONCE_INIT_FN
)
2714 _IRQL_requires_same_
2715 typedef ULONG
/* LOGICAL */
2716 (NTAPI
*PRTL_RUN_ONCE_INIT_FN
) (
2717 _Inout_ PRTL_RUN_ONCE RunOnce
,
2718 _Inout_opt_ PVOID Parameter
,
2719 _Inout_opt_ PVOID
*Context
);
2721 #endif /* _RTL_RUN_ONCE_DEF */
2723 typedef enum _TABLE_SEARCH_RESULT
{
2728 } TABLE_SEARCH_RESULT
;
2730 typedef enum _RTL_GENERIC_COMPARE_RESULTS
{
2734 } RTL_GENERIC_COMPARE_RESULTS
;
2737 struct _RTL_AVL_TABLE
;
2739 _IRQL_requires_same_
2740 _Function_class_(RTL_AVL_COMPARE_ROUTINE
)
2741 typedef RTL_GENERIC_COMPARE_RESULTS
2742 (NTAPI RTL_AVL_COMPARE_ROUTINE
) (
2743 _In_
struct _RTL_AVL_TABLE
*Table
,
2744 _In_ PVOID FirstStruct
,
2745 _In_ PVOID SecondStruct
);
2746 typedef RTL_AVL_COMPARE_ROUTINE
*PRTL_AVL_COMPARE_ROUTINE
;
2748 _IRQL_requires_same_
2749 _Function_class_(RTL_AVL_ALLOCATE_ROUTINE
)
2750 __drv_allocatesMem(Mem
)
2752 (NTAPI RTL_AVL_ALLOCATE_ROUTINE
) (
2753 _In_
struct _RTL_AVL_TABLE
*Table
,
2754 _In_ CLONG ByteSize
);
2755 typedef RTL_AVL_ALLOCATE_ROUTINE
*PRTL_AVL_ALLOCATE_ROUTINE
;
2757 _IRQL_requires_same_
2758 _Function_class_(RTL_AVL_FREE_ROUTINE
)
2760 (NTAPI RTL_AVL_FREE_ROUTINE
) (
2761 _In_
struct _RTL_AVL_TABLE
*Table
,
2762 _In_
__drv_freesMem(Mem
) _Post_invalid_ PVOID Buffer
);
2763 typedef RTL_AVL_FREE_ROUTINE
*PRTL_AVL_FREE_ROUTINE
;
2765 _IRQL_requires_same_
2766 _Function_class_(RTL_AVL_MATCH_FUNCTION
)
2768 (NTAPI RTL_AVL_MATCH_FUNCTION
) (
2769 _In_
struct _RTL_AVL_TABLE
*Table
,
2770 _In_ PVOID UserData
,
2771 _In_ PVOID MatchData
);
2772 typedef RTL_AVL_MATCH_FUNCTION
*PRTL_AVL_MATCH_FUNCTION
;
2774 typedef struct _RTL_BALANCED_LINKS
{
2775 struct _RTL_BALANCED_LINKS
*Parent
;
2776 struct _RTL_BALANCED_LINKS
*LeftChild
;
2777 struct _RTL_BALANCED_LINKS
*RightChild
;
2780 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
2782 typedef struct _RTL_AVL_TABLE
{
2783 RTL_BALANCED_LINKS BalancedRoot
;
2784 PVOID OrderedPointer
;
2785 ULONG WhichOrderedElement
;
2786 ULONG NumberGenericTableElements
;
2788 PRTL_BALANCED_LINKS RestartKey
;
2790 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
2791 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
2792 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
2794 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
2796 typedef struct _RTL_SPLAY_LINKS
{
2797 struct _RTL_SPLAY_LINKS
*Parent
;
2798 struct _RTL_SPLAY_LINKS
*LeftChild
;
2799 struct _RTL_SPLAY_LINKS
*RightChild
;
2800 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
2802 #ifndef RTL_USE_AVL_TABLES
2804 struct _RTL_GENERIC_TABLE
;
2806 _IRQL_requires_same_
2807 _Function_class_(RTL_GENERIC_COMPARE_ROUTINE
)
2808 typedef RTL_GENERIC_COMPARE_RESULTS
2809 (NTAPI RTL_GENERIC_COMPARE_ROUTINE
) (
2810 _In_
struct _RTL_GENERIC_TABLE
*Table
,
2811 _In_ PVOID FirstStruct
,
2812 _In_ PVOID SecondStruct
);
2813 typedef RTL_GENERIC_COMPARE_ROUTINE
*PRTL_GENERIC_COMPARE_ROUTINE
;
2815 _IRQL_requires_same_
2816 _Function_class_(RTL_GENERIC_ALLOCATE_ROUTINE
)
2817 __drv_allocatesMem(Mem
)
2819 (NTAPI RTL_GENERIC_ALLOCATE_ROUTINE
) (
2820 _In_
struct _RTL_GENERIC_TABLE
*Table
,
2821 _In_ CLONG ByteSize
);
2822 typedef RTL_GENERIC_ALLOCATE_ROUTINE
*PRTL_GENERIC_ALLOCATE_ROUTINE
;
2824 _IRQL_requires_same_
2825 _Function_class_(RTL_GENERIC_FREE_ROUTINE
)
2827 (NTAPI RTL_GENERIC_FREE_ROUTINE
) (
2828 _In_
struct _RTL_GENERIC_TABLE
*Table
,
2829 _In_
__drv_freesMem(Mem
) _Post_invalid_ PVOID Buffer
);
2830 typedef RTL_GENERIC_FREE_ROUTINE
*PRTL_GENERIC_FREE_ROUTINE
;
2832 typedef struct _RTL_GENERIC_TABLE
{
2833 PRTL_SPLAY_LINKS TableRoot
;
2834 LIST_ENTRY InsertOrderList
;
2835 PLIST_ENTRY OrderedPointer
;
2836 ULONG WhichOrderedElement
;
2837 ULONG NumberGenericTableElements
;
2838 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
2839 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
2840 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
2842 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
2844 #endif /* !RTL_USE_AVL_TABLES */
2846 #ifdef RTL_USE_AVL_TABLES
2848 #undef RTL_GENERIC_COMPARE_ROUTINE
2849 #undef PRTL_GENERIC_COMPARE_ROUTINE
2850 #undef RTL_GENERIC_ALLOCATE_ROUTINE
2851 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
2852 #undef RTL_GENERIC_FREE_ROUTINE
2853 #undef PRTL_GENERIC_FREE_ROUTINE
2854 #undef RTL_GENERIC_TABLE
2855 #undef PRTL_GENERIC_TABLE
2857 #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
2858 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
2859 #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
2860 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
2861 #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
2862 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
2863 #define RTL_GENERIC_TABLE RTL_AVL_TABLE
2864 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
2866 #endif /* RTL_USE_AVL_TABLES */
2868 #define RTL_HASH_ALLOCATED_HEADER 0x00000001
2870 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY
{
2872 ULONG_PTR Signature
;
2873 } RTL_DYNAMIC_HASH_TABLE_ENTRY
, *PRTL_DYNAMIC_HASH_TABLE_ENTRY
;
2875 typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT
{
2876 PLIST_ENTRY ChainHead
;
2877 PLIST_ENTRY PrevLinkage
;
2878 ULONG_PTR Signature
;
2879 } RTL_DYNAMIC_HASH_TABLE_CONTEXT
, *PRTL_DYNAMIC_HASH_TABLE_CONTEXT
;
2881 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR
{
2882 RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry
;
2883 PLIST_ENTRY ChainHead
;
2885 } RTL_DYNAMIC_HASH_TABLE_ENUMERATOR
, *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR
;
2887 typedef struct _RTL_DYNAMIC_HASH_TABLE
{
2894 ULONG NonEmptyBuckets
;
2895 ULONG NumEnumerators
;
2897 } RTL_DYNAMIC_HASH_TABLE
, *PRTL_DYNAMIC_HASH_TABLE
;
2899 #define HASH_ENTRY_KEY(x) ((x)->Signature)
2901 /******************************************************************************
2902 * Security Manager Types *
2903 ******************************************************************************/
2904 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
2906 typedef enum _WELL_KNOWN_SID_TYPE
{
2910 WinCreatorOwnerSid
= 3,
2911 WinCreatorGroupSid
= 4,
2912 WinCreatorOwnerServerSid
= 5,
2913 WinCreatorGroupServerSid
= 6,
2914 WinNtAuthoritySid
= 7,
2918 WinInteractiveSid
= 11,
2920 WinAnonymousSid
= 13,
2922 WinEnterpriseControllersSid
= 15,
2924 WinAuthenticatedUserSid
= 17,
2925 WinRestrictedCodeSid
= 18,
2926 WinTerminalServerSid
= 19,
2927 WinRemoteLogonIdSid
= 20,
2928 WinLogonIdsSid
= 21,
2929 WinLocalSystemSid
= 22,
2930 WinLocalServiceSid
= 23,
2931 WinNetworkServiceSid
= 24,
2932 WinBuiltinDomainSid
= 25,
2933 WinBuiltinAdministratorsSid
= 26,
2934 WinBuiltinUsersSid
= 27,
2935 WinBuiltinGuestsSid
= 28,
2936 WinBuiltinPowerUsersSid
= 29,
2937 WinBuiltinAccountOperatorsSid
= 30,
2938 WinBuiltinSystemOperatorsSid
= 31,
2939 WinBuiltinPrintOperatorsSid
= 32,
2940 WinBuiltinBackupOperatorsSid
= 33,
2941 WinBuiltinReplicatorSid
= 34,
2942 WinBuiltinPreWindows2000CompatibleAccessSid
= 35,
2943 WinBuiltinRemoteDesktopUsersSid
= 36,
2944 WinBuiltinNetworkConfigurationOperatorsSid
= 37,
2945 WinAccountAdministratorSid
= 38,
2946 WinAccountGuestSid
= 39,
2947 WinAccountKrbtgtSid
= 40,
2948 WinAccountDomainAdminsSid
= 41,
2949 WinAccountDomainUsersSid
= 42,
2950 WinAccountDomainGuestsSid
= 43,
2951 WinAccountComputersSid
= 44,
2952 WinAccountControllersSid
= 45,
2953 WinAccountCertAdminsSid
= 46,
2954 WinAccountSchemaAdminsSid
= 47,
2955 WinAccountEnterpriseAdminsSid
= 48,
2956 WinAccountPolicyAdminsSid
= 49,
2957 WinAccountRasAndIasServersSid
= 50,
2958 WinNTLMAuthenticationSid
= 51,
2959 WinDigestAuthenticationSid
= 52,
2960 WinSChannelAuthenticationSid
= 53,
2961 WinThisOrganizationSid
= 54,
2962 WinOtherOrganizationSid
= 55,
2963 WinBuiltinIncomingForestTrustBuildersSid
= 56,
2964 WinBuiltinPerfMonitoringUsersSid
= 57,
2965 WinBuiltinPerfLoggingUsersSid
= 58,
2966 WinBuiltinAuthorizationAccessSid
= 59,
2967 WinBuiltinTerminalServerLicenseServersSid
= 60,
2968 WinBuiltinDCOMUsersSid
= 61,
2969 WinBuiltinIUsersSid
= 62,
2971 WinBuiltinCryptoOperatorsSid
= 64,
2972 WinUntrustedLabelSid
= 65,
2973 WinLowLabelSid
= 66,
2974 WinMediumLabelSid
= 67,
2975 WinHighLabelSid
= 68,
2976 WinSystemLabelSid
= 69,
2977 WinWriteRestrictedCodeSid
= 70,
2978 WinCreatorOwnerRightsSid
= 71,
2979 WinCacheablePrincipalsGroupSid
= 72,
2980 WinNonCacheablePrincipalsGroupSid
= 73,
2981 WinEnterpriseReadonlyControllersSid
= 74,
2982 WinAccountReadonlyControllersSid
= 75,
2983 WinBuiltinEventLogReadersGroup
= 76,
2984 WinNewEnterpriseReadonlyControllersSid
= 77,
2985 WinBuiltinCertSvcDComAccessGroup
= 78,
2986 WinMediumPlusLabelSid
= 79,
2987 WinLocalLogonSid
= 80,
2988 WinConsoleLogonSid
= 81,
2989 WinThisOrganizationCertificateSid
= 82,
2990 } WELL_KNOWN_SID_TYPE
;
2992 #if defined(_M_IX86)
2994 #define PAUSE_PROCESSOR YieldProcessor();
2996 #define KERNEL_STACK_SIZE 12288
2997 #define KERNEL_LARGE_STACK_SIZE 61440
2998 #define KERNEL_LARGE_STACK_COMMIT 12288
3000 #define SIZE_OF_80387_REGISTERS 80
3002 #if !defined(RC_INVOKED)
3004 #define CONTEXT_i386 0x10000
3005 #define CONTEXT_i486 0x10000
3006 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
3007 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
3008 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
3009 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
3010 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
3011 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
3013 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
3014 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
3015 CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \
3016 CONTEXT_EXTENDED_REGISTERS)
3018 #define CONTEXT_XSTATE (CONTEXT_i386 | 0x00000040L)
3020 #endif /* !defined(RC_INVOKED) */
3022 typedef struct _FLOATING_SAVE_AREA
{
3027 ULONG ErrorSelector
;
3030 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
3032 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
3034 #include "pshpack4.h"
3035 typedef struct _CONTEXT
{
3043 FLOATING_SAVE_AREA FloatSave
;
3060 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
3062 #include "poppack.h"
3064 #define KeGetPcr() PCR
3066 #define PCR_MINOR_VERSION 1
3067 #define PCR_MAJOR_VERSION 1
3069 typedef struct _KPCR
{
3073 struct _EXCEPTION_REGISTRATION_RECORD
*Used_ExceptionList
;
3074 PVOID Used_StackBase
;
3077 ULONG ContextSwitches
;
3078 KAFFINITY SetMemberCopy
;
3082 struct _KPCR
*SelfPcr
;
3083 struct _KPRCB
*Prcb
;
3088 PVOID KdVersionBlock
;
3089 struct _KIDTENTRY
*IDT
;
3090 struct _KGDTENTRY
*GDT
;
3092 USHORT MajorVersion
;
3093 USHORT MinorVersion
;
3094 KAFFINITY SetMember
;
3095 ULONG StallScaleFactor
;
3099 UCHAR SecondLevelCacheAssociativity
;
3101 ULONG KernelReserved
[14];
3102 ULONG SecondLevelCacheSize
;
3103 ULONG HalReserved
[16];
3108 KeGetCurrentProcessorNumber(VOID
)
3110 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
3118 extern NTKERNELAPI PVOID MmHighestUserAddress
;
3119 extern NTKERNELAPI PVOID MmSystemRangeStart
;
3120 extern NTKERNELAPI ULONG MmUserProbeAddress
;
3122 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
3123 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
3124 #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
3125 #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
3126 extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_
;
3128 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
3130 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
3131 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
3132 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
3133 #if !defined (_X86PAE_)
3134 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
3136 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
3139 #elif defined(_M_AMD64)
3141 #define PAUSE_PROCESSOR YieldProcessor();
3143 #define KERNEL_STACK_SIZE 0x6000
3144 #define KERNEL_LARGE_STACK_SIZE 0x12000
3145 #define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE
3147 #define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000
3149 #define EXCEPTION_READ_FAULT 0
3150 #define EXCEPTION_WRITE_FAULT 1
3151 #define EXCEPTION_EXECUTE_FAULT 8
3153 #if !defined(RC_INVOKED)
3155 #define CONTEXT_AMD64 0x100000
3157 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
3158 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
3159 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
3160 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
3161 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
3163 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
3164 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
3166 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
3168 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
3169 #define CONTEXT_SERVICE_ACTIVE 0x10000000
3170 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
3171 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
3173 #endif /* !defined(RC_INVOKED) */
3175 #define INITIAL_MXCSR 0x1f80
3176 #define INITIAL_FPCSR 0x027f
3178 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
3218 XMM_SAVE_AREA32 FltSave
;
3240 M128A VectorRegister
[26];
3241 ULONG64 VectorControl
;
3242 ULONG64 DebugControl
;
3243 ULONG64 LastBranchToRip
;
3244 ULONG64 LastBranchFromRip
;
3245 ULONG64 LastExceptionToRip
;
3246 ULONG64 LastExceptionFromRip
;
3249 #define PCR_MINOR_VERSION 1
3250 #define PCR_MAJOR_VERSION 1
3252 typedef struct _KPCR
3254 _ANONYMOUS_UNION
union
3257 _ANONYMOUS_STRUCT
struct
3259 union _KGDTENTRY64
*GdtBase
;
3260 struct _KTSS64
*TssBase
;
3263 struct _KPRCB
*CurrentPrcb
;
3264 PKSPIN_LOCK_QUEUE LockArray
;
3268 union _KIDTENTRY64
*IdtBase
;
3271 UCHAR SecondLevelCacheAssociativity
;
3272 UCHAR ObsoleteNumber
;
3275 USHORT MajorVersion
;
3276 USHORT MinorVersion
;
3277 ULONG StallScaleFactor
;
3279 ULONG KernelReserved
[15];
3280 ULONG SecondLevelCacheSize
;
3281 ULONG HalReserved
[16];
3283 PVOID KdVersionBlock
;
3285 ULONG PcrAlign1
[24];
3292 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
3297 KeGetCurrentProcessorNumber(VOID
)
3299 return (ULONG
)__readgsword(0x184);
3303 #define PTI_SHIFT 12L
3304 #define PDI_SHIFT 21L
3305 #define PPI_SHIFT 30L
3306 #define PXI_SHIFT 39L
3307 #define PTE_PER_PAGE 512
3308 #define PDE_PER_PAGE 512
3309 #define PPE_PER_PAGE 512
3310 #define PXE_PER_PAGE 512
3311 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
3312 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
3313 #define PPI_MASK (PPE_PER_PAGE - 1)
3314 #define PXI_MASK (PXE_PER_PAGE - 1)
3316 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
3317 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
3318 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
3319 #define PDE_BASE 0xFFFFF6FB40000000ULL
3320 #define PTE_BASE 0xFFFFF68000000000ULL
3321 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
3322 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
3323 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
3324 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
3326 extern NTKERNELAPI PVOID MmHighestUserAddress
;
3327 extern NTKERNELAPI PVOID MmSystemRangeStart
;
3328 extern NTKERNELAPI ULONG64 MmUserProbeAddress
;
3330 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
3331 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
3332 #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
3333 #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
3334 extern ULONG64 _LOCAL_COPY_USER_PROBE_ADDRESS_
;
3336 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
3338 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
3339 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
3341 #elif defined(_M_IA64)
3343 #elif defined(_M_PPC)
3346 #elif defined(_M_MIPS)
3348 #elif defined(_M_ARM)
3350 #define PAUSE_PROCESSOR __yield();
3352 #define KERNEL_STACK_SIZE 0x3000
3353 #define KERNEL_LARGE_STACK_SIZE 0xF000
3354 #define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE
3356 #define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000
3358 #define EXCEPTION_READ_FAULT 0
3359 #define EXCEPTION_WRITE_FAULT 1
3360 #define EXCEPTION_EXECUTE_FAULT 8
3362 /* The following flags control the contents of the CONTEXT structure. */
3363 #define CONTEXT_ARM 0x200000L
3364 #define CONTEXT_CONTROL (CONTEXT_ARM | 0x00000001L)
3365 #define CONTEXT_INTEGER (CONTEXT_ARM | 0x00000002L)
3366 #define CONTEXT_FLOATING_POINT (CONTEXT_ARM | 0x00000004L)
3367 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM | 0x00000008L)
3368 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
3370 typedef struct _NEON128
3374 } NEON128
, *PNEON128
;
3376 #define ARM_MAX_BREAKPOINTS 8
3377 #define ARM_MAX_WATCHPOINTS 1
3379 typedef struct _CONTEXT
3381 /* The flags values within this flag control the contents of
3384 If the context record is used as an input parameter, then
3385 for each portion of the context record controlled by a flag
3386 whose value is set, it is assumed that that portion of the
3387 context record contains valid context. If the context record
3388 is being used to modify a thread's context, then only that
3389 portion of the threads context will be modified.
3391 If the context record is used as an IN OUT parameter to capture
3392 the context of a thread, then only those portions of the thread's
3393 context corresponding to set flags will be returned.
3395 The context record is never used as an OUT only parameter. */
3398 /* This section is specified/returned if the ContextFlags word contains
3399 the flag CONTEXT_INTEGER. */
3419 /* Floating Point/NEON Registers */
3429 /* Debug registers */
3430 ULONG Bvr
[ARM_MAX_BREAKPOINTS
];
3431 ULONG Bcr
[ARM_MAX_BREAKPOINTS
];
3432 ULONG Wvr
[ARM_MAX_WATCHPOINTS
];
3433 ULONG Wcr
[ARM_MAX_WATCHPOINTS
];
3438 #define PCR_MINOR_VERSION 1
3439 #define PCR_MAJOR_VERSION 1
3441 typedef struct _KPCR
3443 _ANONYMOUS_UNION
union
3446 _ANONYMOUS_STRUCT
struct
3451 struct _KPRCB
*CurrentPrcb
;
3452 PKSPIN_LOCK_QUEUE LockArray
;
3457 UCHAR SecondLevelCacheAssociativity
;
3459 USHORT MajorVersion
;
3460 USHORT MinorVersion
;
3461 ULONG StallScaleFactor
;
3463 ULONG KernelReserved
[15];
3464 ULONG SecondLevelCacheSize
;
3465 _ANONYMOUS_UNION
union
3467 USHORT SoftwareInterruptPending
; // Software Interrupt Pending Flag
3470 UCHAR ApcInterrupt
; // 0x01 if APC int pending
3471 UCHAR DispatchInterrupt
; // 0x01 if dispatch int pending
3474 USHORT InterruptPad
;
3475 ULONG HalReserved
[32];
3476 PVOID KdVersionBlock
;
3481 #define CP15_PCR_RESERVED_MASK 0xFFF
3482 //#define KIPCR() ((ULONG_PTR)(_MoveFromCoprocessor(CP15_TPIDRPRW)) & ~CP15_PCR_RESERVED_MASK)
3489 return (PKPCR
)(_MoveFromCoprocessor(CP15_TPIDRPRW
) & ~CP15_PCR_RESERVED_MASK
);
3492 #if (NTDDI_VERSION < NTDDI_WIN7) || !defined(NT_PROCESSOR_GROUPS)
3495 KeGetCurrentProcessorNumber(
3499 return *((PUCHAR
)KeGetPcr() + 0x580);
3501 #endif /* (NTDDI_VERSION < NTDDI_WIN7) || !defined(NT_PROCESSOR_GROUPS) */
3504 #define PTI_SHIFT 12
3505 #define PDI_SHIFT 22
3507 #define PDE_BASE 0xC0300000
3508 #define PTE_BASE 0xC0000000
3509 #define PDE_TOP 0xC0300FFF
3510 #define PTE_TOP 0xC03FFFFF
3512 extern NTKERNELAPI PVOID MmHighestUserAddress
;
3513 extern NTKERNELAPI PVOID MmSystemRangeStart
;
3514 extern NTKERNELAPI ULONG MmUserProbeAddress
;
3516 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
3517 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
3518 #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
3519 #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
3520 extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_
;
3522 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
3524 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
3525 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
3526 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
3529 #error Unknown Architecture
3532 /******************************************************************************
3533 * Executive Functions *
3534 ******************************************************************************/
3536 static __inline PVOID
3538 IN PZONE_HEADER Zone
)
3540 PVOID Result
= (PVOID
)Zone
->FreeList
.Next
;
3541 if (Zone
->FreeList
.Next
)
3542 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
3546 static __inline PVOID
3548 IN PZONE_HEADER Zone
,
3551 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
3552 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
3553 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
3558 * ExInterlockedAllocateFromZone(
3559 * IN PZONE_HEADER Zone,
3560 * IN PKSPIN_LOCK Lock)
3562 #define ExInterlockedAllocateFromZone(Zone, Lock) \
3563 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
3566 * ExInterlockedFreeToZone(
3567 * IN PZONE_HEADER Zone,
3569 * IN PKSPIN_LOCK Lock);
3571 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
3572 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
3577 * IN PZONE_HEADER Zone)
3579 #define ExIsFullZone(Zone) \
3580 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
3583 * ExIsObjectInFirstZoneSegment(
3584 * IN PZONE_HEADER Zone,
3587 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
3588 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
3589 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
3590 (Zone)->TotalSegmentSize)) )
3592 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
3593 #define ExAcquireResourceShared ExAcquireResourceSharedLite
3594 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
3595 #define ExDeleteResource ExDeleteResourceLite
3596 #define ExInitializeResource ExInitializeResourceLite
3597 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
3598 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
3599 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
3600 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
3603 #define RESULT_ZERO 0
3604 #define RESULT_NEGATIVE 1
3605 #define RESULT_POSITIVE 2
3608 typedef enum _INTERLOCKED_RESULT
{
3609 ResultNegative
= RESULT_NEGATIVE
,
3610 ResultZero
= RESULT_ZERO
,
3611 ResultPositive
= RESULT_POSITIVE
3612 } INTERLOCKED_RESULT
;
3619 Exfi386InterlockedIncrementLong(
3620 _Inout_ _Interlocked_operand_ LONG
volatile *Addend
);
3625 Exfi386InterlockedDecrementLong(
3626 _Inout_ _Interlocked_operand_ PLONG Addend
);
3631 Exfi386InterlockedExchangeUlong(
3632 _Inout_ _Interlocked_operand_ PULONG Target
,
3638 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3643 _Inout_ PZONE_HEADER Zone
,
3644 _Inout_ PVOID Segment
,
3645 _In_ ULONG SegmentSize
);
3651 _Out_ PZONE_HEADER Zone
,
3652 _In_ ULONG BlockSize
,
3653 _Inout_ PVOID InitialSegment
,
3654 _In_ ULONG InitialSegmentSize
);
3656 _IRQL_requires_max_(DISPATCH_LEVEL
)
3660 ExInterlockedExtendZone(
3661 _Inout_ PZONE_HEADER Zone
,
3662 _Inout_ PVOID Segment
,
3663 _In_ ULONG SegmentSize
,
3664 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
3666 _IRQL_requires_max_(PASSIVE_LEVEL
)
3673 _IRQL_requires_max_(PASSIVE_LEVEL
)
3678 ExRaiseAccessViolation(VOID
);
3680 _IRQL_requires_max_(PASSIVE_LEVEL
)
3685 ExRaiseDatatypeMisalignment(VOID
);
3687 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3690 /* Hardware Abstraction Layer Functions */
3692 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3694 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
3698 #else /* USE_DMA_MACROS ... */
3700 //DECLSPEC_DEPRECATED_DDK
3704 IoFreeAdapterChannel(
3705 _In_ PADAPTER_OBJECT AdapterObject
);
3707 //DECLSPEC_DEPRECATED_DDK
3711 IoFlushAdapterBuffers(
3712 _In_ PADAPTER_OBJECT AdapterObject
,
3714 _In_ PVOID MapRegisterBase
,
3715 _In_ PVOID CurrentVa
,
3717 _In_ BOOLEAN WriteToDevice
);
3719 //DECLSPEC_DEPRECATED_DDK
3724 _In_ PADAPTER_OBJECT AdapterObject
,
3725 _In_ PVOID MapRegisterBase
,
3726 _In_ ULONG NumberOfMapRegisters
);
3728 //DECLSPEC_DEPRECATED_DDK
3732 HalAllocateCommonBuffer(
3733 _In_ PADAPTER_OBJECT AdapterObject
,
3735 _Out_ PPHYSICAL_ADDRESS LogicalAddress
,
3736 _In_ BOOLEAN CacheEnabled
);
3738 //DECLSPEC_DEPRECATED_DDK
3742 HalFreeCommonBuffer(
3743 _In_ PADAPTER_OBJECT AdapterObject
,
3745 _In_ PHYSICAL_ADDRESS LogicalAddress
,
3746 _In_ PVOID VirtualAddress
,
3747 _In_ BOOLEAN CacheEnabled
);
3749 //DECLSPEC_DEPRECATED_DDK
3754 _In_ PADAPTER_OBJECT AdapterObject
);
3759 HalAllocateAdapterChannel(
3760 _In_ PADAPTER_OBJECT AdapterObject
,
3761 _In_ PWAIT_CONTEXT_BLOCK Wcb
,
3762 _In_ ULONG NumberOfMapRegisters
,
3763 _In_ PDRIVER_CONTROL ExecutionRoutine
);
3765 #endif /* USE_DMA_MACROS ... */
3767 #if !defined(NO_LEGACY_DRIVERS)
3771 HalAssignSlotResources(
3772 _In_ PUNICODE_STRING RegistryPath
,
3773 _In_opt_ PUNICODE_STRING DriverClassName
,
3774 _In_ PDRIVER_OBJECT DriverObject
,
3775 _In_ PDEVICE_OBJECT DeviceObject
,
3776 _In_ INTERFACE_TYPE BusType
,
3777 _In_ ULONG BusNumber
,
3778 _In_ ULONG SlotNumber
,
3779 _Inout_ PCM_RESOURCE_LIST
*AllocatedResources
);
3781 _IRQL_requires_max_(PASSIVE_LEVEL
)
3785 HalGetInterruptVector(
3786 _In_ INTERFACE_TYPE InterfaceType
,
3787 _In_ ULONG BusNumber
,
3788 _In_ ULONG BusInterruptLevel
,
3789 _In_ ULONG BusInterruptVector
,
3791 _Out_ PKAFFINITY Affinity
);
3797 _In_ BUS_DATA_TYPE BusDataType
,
3798 _In_ ULONG BusNumber
,
3799 _In_ ULONG SlotNumber
,
3800 _In_reads_bytes_(Length
) PVOID Buffer
,
3807 _In_ BUS_DATA_TYPE BusDataType
,
3808 _In_ ULONG BusNumber
,
3809 _In_ ULONG SlotNumber
,
3810 _Out_writes_bytes_(Length
) PVOID Buffer
,
3817 _In_ ULONG Frequency
);
3818 #endif /* !defined(NO_LEGACY_DRIVERS) */
3820 _IRQL_requires_max_(PASSIVE_LEVEL
)
3825 _In_ PDEVICE_DESCRIPTION DeviceDescription
,
3826 _Out_ PULONG NumberOfMapRegisters
);
3831 _In_ PADAPTER_OBJECT DmaAdapter
);
3836 HalAcquireDisplayOwnership(
3837 _In_ PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
3842 HalGetBusDataByOffset(
3843 _In_ BUS_DATA_TYPE BusDataType
,
3844 _In_ ULONG BusNumber
,
3845 _In_ ULONG SlotNumber
,
3846 _Out_writes_bytes_(Length
) PVOID Buffer
,
3853 HalSetBusDataByOffset(
3854 _In_ BUS_DATA_TYPE BusDataType
,
3855 _In_ ULONG BusNumber
,
3856 _In_ ULONG SlotNumber
,
3857 _In_reads_bytes_(Length
) PVOID Buffer
,
3864 HalTranslateBusAddress(
3865 _In_ INTERFACE_TYPE InterfaceType
,
3866 _In_ ULONG BusNumber
,
3867 _In_ PHYSICAL_ADDRESS BusAddress
,
3868 _Inout_ PULONG AddressSpace
,
3869 _Out_ PPHYSICAL_ADDRESS TranslatedAddress
);
3874 HalAllocateCrashDumpRegisters(
3875 _In_ PADAPTER_OBJECT AdapterObject
,
3876 _Inout_ PULONG NumberOfMapRegisters
);
3880 HalGetScatterGatherList(
3881 _In_ PADAPTER_OBJECT DmaAdapter
,
3882 _In_ PDEVICE_OBJECT DeviceObject
,
3884 _In_ PVOID CurrentVa
,
3886 _In_ PDRIVER_LIST_CONTROL ExecutionRoutine
,
3888 _In_ BOOLEAN WriteToDevice
);
3892 HalPutScatterGatherList(
3893 _In_ PADAPTER_OBJECT DmaAdapter
,
3894 _In_ PSCATTER_GATHER_LIST ScatterGather
,
3895 _In_ BOOLEAN WriteToDevice
);
3897 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3899 #if (NTDDI_VERSION >= NTDDI_WINXP)
3900 _IRQL_requires_max_(PASSIVE_LEVEL
)
3905 _In_ PDEVICE_OBJECT DeviceObject
,
3906 _In_ ULONG SectorSize
,
3907 _In_ ULONG MBRTypeIdentifier
,
3908 _Out_ PVOID
*Buffer
);
3909 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
3911 #if (NTDDI_VERSION >= NTDDI_WIN7)
3915 HalAllocateHardwareCounters(
3916 _In_reads_(GroupCount
) PGROUP_AFFINITY GroupAffinty
,
3917 _In_ ULONG GroupCount
,
3918 _In_ PPHYSICAL_COUNTER_RESOURCE_LIST ResourceList
,
3919 _Out_ PHANDLE CounterSetHandle
);
3923 HalFreeHardwareCounters(
3924 _In_ HANDLE CounterSetHandle
);
3926 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
3929 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3933 HalGetDmaAlignmentRequirement(VOID
);
3935 #endif /* defined(_IA64_) */
3937 #if defined(_M_IX86) || defined(_M_AMD64)
3938 #define HalGetDmaAlignmentRequirement() 1L
3941 #if (NTDDI_VERSION >= NTDDI_WIN7)
3943 typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR
*PWHEA_ERROR_SOURCE_DESCRIPTOR
;
3944 typedef struct _WHEA_ERROR_RECORD
*PWHEA_ERROR_RECORD
;
3950 _In_ PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource
,
3951 _In_ PWHEA_ERROR_RECORD ErrorRecord
);
3955 typedef struct _WHEA_ERROR_RECORD
*PWHEA_ERROR_RECORD
;
3961 _In_ PWHEA_ERROR_RECORD ErrorRecord
);
3963 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
3965 /******************************************************************************
3966 * I/O Manager Functions *
3967 ******************************************************************************/
3970 * VOID IoAssignArcName(
3971 * IN PUNICODE_STRING ArcName,
3972 * IN PUNICODE_STRING DeviceName);
3974 #define IoAssignArcName(_ArcName, _DeviceName) ( \
3975 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
3979 * IoDeassignArcName(
3980 * IN PUNICODE_STRING ArcName)
3982 #define IoDeassignArcName IoDeleteSymbolicLink
3987 IoInitializeDriverCreateContext(
3988 PIO_DRIVER_CREATE_CONTEXT DriverContext
)
3990 RtlZeroMemory(DriverContext
, sizeof(IO_DRIVER_CREATE_CONTEXT
));
3991 DriverContext
->Size
= sizeof(IO_DRIVER_CREATE_CONTEXT
);
3994 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3996 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
3997 _IRQL_requires_max_(DISPATCH_LEVEL
)
3998 _IRQL_requires_min_(DISPATCH_LEVEL
)
4002 IoAllocateAdapterChannel(
4003 _In_ PADAPTER_OBJECT AdapterObject
,
4004 _In_ PDEVICE_OBJECT DeviceObject
,
4005 _In_ ULONG NumberOfMapRegisters
,
4006 _In_ PDRIVER_CONTROL ExecutionRoutine
,
4007 _In_ PVOID Context
);
4010 #if !defined(DMA_MACROS_DEFINED)
4011 //DECLSPEC_DEPRECATED_DDK
4016 _In_ PADAPTER_OBJECT AdapterObject
,
4018 _In_ PVOID MapRegisterBase
,
4019 _In_ PVOID CurrentVa
,
4020 _Inout_ PULONG Length
,
4021 _In_ BOOLEAN WriteToDevice
);
4024 _IRQL_requires_max_(DISPATCH_LEVEL
)
4025 _IRQL_requires_min_(DISPATCH_LEVEL
)
4029 IoAllocateController(
4030 _In_ PCONTROLLER_OBJECT ControllerObject
,
4031 _In_ PDEVICE_OBJECT DeviceObject
,
4032 _In_ PDRIVER_CONTROL ExecutionRoutine
,
4033 _In_opt_ PVOID Context
);
4035 _IRQL_requires_max_(PASSIVE_LEVEL
)
4042 _IRQL_requires_max_(PASSIVE_LEVEL
)
4047 _In_ PCONTROLLER_OBJECT ControllerObject
);
4049 _IRQL_requires_max_(DISPATCH_LEVEL
)
4050 _IRQL_requires_min_(DISPATCH_LEVEL
)
4055 _In_ PCONTROLLER_OBJECT ControllerObject
);
4057 _IRQL_requires_max_(PASSIVE_LEVEL
)
4059 PCONFIGURATION_INFORMATION
4061 IoGetConfigurationInformation(VOID
);
4063 _IRQL_requires_max_(PASSIVE_LEVEL
)
4067 IoGetDeviceToVerify(
4068 _In_ PETHREAD Thread
);
4074 _In_ PDEVICE_OBJECT DeviceObject
,
4075 _In_ PFILE_OBJECT FileObject
);
4077 _IRQL_requires_max_(PASSIVE_LEVEL
)
4081 IoGetFileObjectGenericMapping(VOID
);
4083 _IRQL_requires_max_(DISPATCH_LEVEL
)
4087 IoMakeAssociatedIrp(
4089 _In_ CCHAR StackSize
);
4094 IoQueryDeviceDescription(
4095 _In_opt_ PINTERFACE_TYPE BusType
,
4096 _In_opt_ PULONG BusNumber
,
4097 _In_opt_ PCONFIGURATION_TYPE ControllerType
,
4098 _In_opt_ PULONG ControllerNumber
,
4099 _In_opt_ PCONFIGURATION_TYPE PeripheralType
,
4100 _In_opt_ PULONG PeripheralNumber
,
4101 _In_ PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
4102 _Inout_opt_ PVOID Context
);
4104 _IRQL_requires_max_(APC_LEVEL
)
4111 _In_ PDEVICE_OBJECT RealDeviceObject
);
4113 _IRQL_requires_max_(APC_LEVEL
)
4117 IoRaiseInformationalHardError(
4118 _In_ NTSTATUS ErrorStatus
,
4119 _In_opt_ PUNICODE_STRING String
,
4120 _In_opt_ PKTHREAD Thread
);
4122 _IRQL_requires_max_(PASSIVE_LEVEL
)
4126 IoRegisterBootDriverReinitialization(
4127 _In_ PDRIVER_OBJECT DriverObject
,
4128 _In_ PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
4129 _In_opt_ PVOID Context
);
4131 _IRQL_requires_max_(PASSIVE_LEVEL
)
4135 IoRegisterDriverReinitialization(
4136 _In_ PDRIVER_OBJECT DriverObject
,
4137 _In_ PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
4138 _In_opt_ PVOID Context
);
4143 IoAttachDeviceByPointer(
4144 _In_ PDEVICE_OBJECT SourceDevice
,
4145 _In_ PDEVICE_OBJECT TargetDevice
);
4147 _IRQL_requires_max_(PASSIVE_LEVEL
)
4148 _Must_inspect_result_
4152 IoReportDetectedDevice(
4153 _In_ PDRIVER_OBJECT DriverObject
,
4154 _In_ INTERFACE_TYPE LegacyBusType
,
4155 _In_ ULONG BusNumber
,
4156 _In_ ULONG SlotNumber
,
4157 _In_opt_ PCM_RESOURCE_LIST ResourceList
,
4158 _In_opt_ PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements
,
4159 _In_ BOOLEAN ResourceAssigned
,
4160 _Inout_ PDEVICE_OBJECT
*DeviceObject
);
4165 IoReportResourceForDetection(
4166 _In_ PDRIVER_OBJECT DriverObject
,
4167 _In_reads_bytes_opt_(DriverListSize
) PCM_RESOURCE_LIST DriverList
,
4168 _In_opt_ ULONG DriverListSize
,
4169 _In_opt_ PDEVICE_OBJECT DeviceObject
,
4170 _In_reads_bytes_opt_(DeviceListSize
) PCM_RESOURCE_LIST DeviceList
,
4171 _In_opt_ ULONG DeviceListSize
,
4172 _Out_ PBOOLEAN ConflictDetected
);
4177 IoReportResourceUsage(
4178 _In_opt_ PUNICODE_STRING DriverClassName
,
4179 _In_ PDRIVER_OBJECT DriverObject
,
4180 _In_reads_bytes_opt_(DriverListSize
) PCM_RESOURCE_LIST DriverList
,
4181 _In_opt_ ULONG DriverListSize
,
4182 _In_opt_ PDEVICE_OBJECT DeviceObject
,
4183 _In_reads_bytes_opt_(DeviceListSize
) PCM_RESOURCE_LIST DeviceList
,
4184 _In_opt_ ULONG DeviceListSize
,
4185 _In_ BOOLEAN OverrideConflict
,
4186 _Out_ PBOOLEAN ConflictDetected
);
4188 _IRQL_requires_max_(DISPATCH_LEVEL
)
4192 IoSetHardErrorOrVerifyDevice(
4194 _In_ PDEVICE_OBJECT DeviceObject
);
4200 _In_ PUNICODE_STRING RegistryPath
,
4201 _In_opt_ PUNICODE_STRING DriverClassName
,
4202 _In_ PDRIVER_OBJECT DriverObject
,
4203 _In_opt_ PDEVICE_OBJECT DeviceObject
,
4204 _In_opt_ PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources
,
4205 _Inout_ PCM_RESOURCE_LIST
*AllocatedResources
);
4207 _IRQL_requires_max_(DISPATCH_LEVEL
)
4211 IoSetThreadHardErrorMode(
4212 _In_ BOOLEAN EnableHardErrors
);
4215 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4217 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
4222 IoIsFileOriginRemote(
4223 _In_ PFILE_OBJECT FileObject
);
4229 _In_ PFILE_OBJECT FileObject
,
4230 _In_ BOOLEAN Remote
);
4232 #endif /* (NTDDI_VERSION >= NTDDI_WIN2KSP3) */
4234 #if (NTDDI_VERSION >= NTDDI_WINXP)
4236 _IRQL_requires_max_(PASSIVE_LEVEL
)
4240 IoReadPartitionTable(
4241 _In_ PDEVICE_OBJECT DeviceObject
,
4242 _In_ ULONG SectorSize
,
4243 _In_ BOOLEAN ReturnRecognizedPartitions
,
4244 _Out_
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
4246 _IRQL_requires_max_(PASSIVE_LEVEL
)
4250 IoSetPartitionInformation(
4251 _In_ PDEVICE_OBJECT DeviceObject
,
4252 _In_ ULONG SectorSize
,
4253 _In_ ULONG PartitionNumber
,
4254 _In_ ULONG PartitionType
);
4256 _IRQL_requires_max_(PASSIVE_LEVEL
)
4260 IoWritePartitionTable(
4261 _In_ PDEVICE_OBJECT DeviceObject
,
4262 _In_ ULONG SectorSize
,
4263 _In_ ULONG SectorsPerTrack
,
4264 _In_ ULONG NumberOfHeads
,
4265 _In_
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
4271 _In_ PDEVICE_OBJECT DeviceObject
,
4272 _In_opt_
struct _CREATE_DISK
* Disk
);
4277 IoReadDiskSignature(
4278 _In_ PDEVICE_OBJECT DeviceObject
,
4279 _In_ ULONG BytesPerSector
,
4280 _Out_ PDISK_SIGNATURE Signature
);
4282 _IRQL_requires_max_(PASSIVE_LEVEL
)
4286 IoReadPartitionTableEx(
4287 _In_ PDEVICE_OBJECT DeviceObject
,
4288 _Out_
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
4290 _IRQL_requires_max_(PASSIVE_LEVEL
)
4294 IoSetPartitionInformationEx(
4295 _In_ PDEVICE_OBJECT DeviceObject
,
4296 _In_ ULONG PartitionNumber
,
4297 _In_
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
4302 IoSetSystemPartition(
4303 _In_ PUNICODE_STRING VolumeNameString
);
4308 IoVerifyPartitionTable(
4309 _In_ PDEVICE_OBJECT DeviceObject
,
4310 _In_ BOOLEAN FixErrors
);
4315 IoVolumeDeviceToDosName(
4316 _In_ PVOID VolumeDeviceObject
,
4317 _Out_
_When_(return==0,
4318 _At_(DosName
->Buffer
, __drv_allocatesMem(Mem
)))
4319 PUNICODE_STRING DosName
);
4321 _IRQL_requires_max_(PASSIVE_LEVEL
)
4325 IoWritePartitionTableEx(
4326 _In_ PDEVICE_OBJECT DeviceObject
,
4327 _In_reads_(_Inexpressible_(FIELD_OFFSET(DRIVE_LAYOUT_INFORMATION_EX
, PartitionEntry
[0])))
4328 struct _DRIVE_LAYOUT_INFORMATION_EX
*DriveLayout
);
4333 IoCreateFileSpecifyDeviceObjectHint(
4334 _Out_ PHANDLE FileHandle
,
4335 _In_ ACCESS_MASK DesiredAccess
,
4336 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
4337 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
4338 _In_opt_ PLARGE_INTEGER AllocationSize
,
4339 _In_ ULONG FileAttributes
,
4340 _In_ ULONG ShareAccess
,
4341 _In_ ULONG Disposition
,
4342 _In_ ULONG CreateOptions
,
4343 _In_opt_ PVOID EaBuffer
,
4344 _In_ ULONG EaLength
,
4345 _In_ CREATE_FILE_TYPE CreateFileType
,
4346 _In_opt_ PVOID InternalParameters
,
4348 _In_opt_ PVOID DeviceObject
);
4353 IoAttachDeviceToDeviceStackSafe(
4354 _In_ PDEVICE_OBJECT SourceDevice
,
4355 _In_ PDEVICE_OBJECT TargetDevice
,
4356 _Outptr_ PDEVICE_OBJECT
*AttachedToDeviceObject
);
4359 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4361 #if (NTDDI_VERSION >= NTDDI_WS03)
4365 IoGetPagingIoPriority(
4368 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
4369 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
4373 IoTranslateBusAddress(
4374 _In_ INTERFACE_TYPE InterfaceType
,
4375 _In_ ULONG BusNumber
,
4376 _In_ PHYSICAL_ADDRESS BusAddress
,
4377 _Inout_ PULONG AddressSpace
,
4378 _Out_ PPHYSICAL_ADDRESS TranslatedAddress
);
4379 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
4381 #if (NTDDI_VERSION >= NTDDI_VISTA)
4385 IoUpdateDiskGeometry(
4386 _In_ PDEVICE_OBJECT DeviceObject
,
4387 _In_
struct _DISK_GEOMETRY_EX
* OldDiskGeometry
,
4388 _In_
struct _DISK_GEOMETRY_EX
* NewDiskGeometry
);
4390 PTXN_PARAMETER_BLOCK
4392 IoGetTransactionParameterBlock(
4393 _In_ PFILE_OBJECT FileObject
);
4399 _Out_ PHANDLE FileHandle
,
4400 _In_ ACCESS_MASK DesiredAccess
,
4401 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
4402 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
4403 _In_opt_ PLARGE_INTEGER AllocationSize
,
4404 _In_ ULONG FileAttributes
,
4405 _In_ ULONG ShareAccess
,
4406 _In_ ULONG Disposition
,
4407 _In_ ULONG CreateOptions
,
4408 _In_opt_ PVOID EaBuffer
,
4409 _In_ ULONG EaLength
,
4410 _In_ CREATE_FILE_TYPE CreateFileType
,
4411 _In_opt_ PVOID InternalParameters
,
4413 _In_opt_ PIO_DRIVER_CREATE_CONTEXT DriverContext
);
4417 IoSetIrpExtraCreateParameter(
4419 _In_
struct _ECP_LIST
*ExtraCreateParameter
);
4423 IoClearIrpExtraCreateParameter(
4428 IoGetIrpExtraCreateParameter(
4430 _Outptr_result_maybenull_
struct _ECP_LIST
**ExtraCreateParameter
);
4434 IoIsFileObjectIgnoringSharing(
4435 _In_ PFILE_OBJECT FileObject
);
4437 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4439 #if (NTDDI_VERSION >= NTDDI_WIN7)
4443 IoSetFileObjectIgnoreSharing(
4444 _In_ PFILE_OBJECT FileObject
);
4446 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4448 /******************************************************************************
4449 * Kernel Debugger Functions *
4450 ******************************************************************************/
4456 _Out_writes_bytes_(MaximumResponseLength
) PCH Response
,
4457 _In_ ULONG MaximumResponseLength
);
4459 /******************************************************************************
4460 * Kernel Functions *
4461 ******************************************************************************/
4463 _IRQL_requires_min_(PASSIVE_LEVEL
)
4464 _IRQL_requires_max_(DISPATCH_LEVEL
)
4468 KeInvalidateRangeAllCaches(
4469 _In_ PVOID BaseAddress
,
4472 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4479 _In_ KDPC_IMPORTANCE Importance
);
4481 _IRQL_requires_max_(DISPATCH_LEVEL
)
4486 _Inout_ PRKEVENT Event
,
4487 _In_ KPRIORITY Increment
,
4490 _IRQL_requires_min_(PASSIVE_LEVEL
)
4491 _IRQL_requires_max_(DISPATCH_LEVEL
)
4495 KeSetBasePriorityThread(
4496 _Inout_ PRKTHREAD Thread
,
4497 _In_ LONG Increment
);
4499 _Acquires_lock_(_Global_critical_region_
)
4500 _IRQL_requires_max_(APC_LEVEL
)
4504 KeEnterCriticalRegion(VOID
);
4506 _Releases_lock_(_Global_critical_region_
)
4507 _IRQL_requires_max_(APC_LEVEL
)
4511 KeLeaveCriticalRegion(VOID
);
4518 _In_ ULONG BugCheckCode
);
4519 #if defined(SINGLE_GROUP_LEGACY_API)
4525 KeSetTargetProcessorDpc(
4532 KeQueryActiveProcessors(VOID
);
4533 #endif /* defined(SINGLE_GROUP_LEGACY_API) */
4536 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4538 #if (NTDDI_VERSION >= NTDDI_WINXP)
4540 _IRQL_requires_min_(PASSIVE_LEVEL
)
4541 _IRQL_requires_max_(DISPATCH_LEVEL
)
4545 KeAreApcsDisabled(VOID
);
4547 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4549 #if (NTDDI_VERSION >= NTDDI_WS03)
4555 KeInvalidateAllCaches(VOID
);
4556 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
4557 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
4559 _Must_inspect_result_
4560 _IRQL_requires_max_(APC_LEVEL
)
4564 KeExpandKernelStackAndCallout(
4565 _In_ PEXPAND_STACK_CALLOUT Callout
,
4566 _In_opt_ PVOID Parameter
,
4569 _Acquires_lock_(_Global_critical_region_
)
4570 _IRQL_requires_max_(APC_LEVEL
)
4574 KeEnterGuardedRegion(VOID
);
4576 _Releases_lock_(_Global_critical_region_
)
4577 _IRQL_requires_max_(APC_LEVEL
)
4581 KeLeaveGuardedRegion(VOID
);
4582 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
4584 #if (NTDDI_VERSION >= NTDDI_VISTA)
4585 #if defined(SINGLE_GROUP_LEGACY_API)
4590 KeQueryActiveProcessorCount(
4591 _Out_opt_ PKAFFINITY ActiveProcessors
);
4596 KeQueryMaximumProcessorCount(VOID
);
4597 #endif /* SINGLE_GROUP_LEGACY_API */
4599 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4601 #if (NTDDI_VERSION >= NTDDI_WIN7)
4606 KeQueryActiveProcessorCountEx(
4607 _In_ USHORT GroupNumber
);
4612 KeQueryMaximumProcessorCountEx(
4613 _In_ USHORT GroupNumber
);
4618 KeQueryActiveGroupCount(VOID
);
4623 KeQueryMaximumGroupCount(VOID
);
4628 KeQueryGroupAffinity(
4629 _In_ USHORT GroupNumber
);
4634 KeGetCurrentProcessorNumberEx(
4635 _Out_opt_ PPROCESSOR_NUMBER ProcNumber
);
4640 KeQueryNodeActiveAffinity(
4641 _In_ USHORT NodeNumber
,
4642 _Out_opt_ PGROUP_AFFINITY Affinity
,
4643 _Out_opt_ PUSHORT Count
);
4648 KeQueryNodeMaximumProcessorCount(
4649 _In_ USHORT NodeNumber
);
4654 KeQueryHighestNodeNumber(VOID
);
4659 KeGetCurrentNodeNumber(VOID
);
4661 _IRQL_requires_max_(DISPATCH_LEVEL
)
4665 KeQueryLogicalProcessorRelationship(
4666 _In_opt_ PPROCESSOR_NUMBER ProcessorNumber
,
4667 _In_ LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
4668 _Out_writes_bytes_opt_(*Length
) PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information
,
4669 _Inout_ PULONG Length
);
4671 _IRQL_requires_max_(APC_LEVEL
)
4675 KeSetHardwareCounterConfiguration(
4676 _In_reads_(Count
) PHARDWARE_COUNTER CounterArray
,
4679 _IRQL_requires_max_(APC_LEVEL
)
4683 KeQueryHardwareCounterConfiguration(
4684 _Out_writes_to_(MaximumCount
, *Count
) PHARDWARE_COUNTER CounterArray
,
4685 _In_ ULONG MaximumCount
,
4686 _Out_ PULONG Count
);
4687 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4688 /******************************************************************************
4689 * Memory manager Functions *
4690 ******************************************************************************/
4692 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4694 _IRQL_requires_max_ (PASSIVE_LEVEL
)
4696 PPHYSICAL_MEMORY_RANGE
4698 MmGetPhysicalMemoryRanges(VOID
);
4703 MmGetPhysicalAddress(
4704 _In_ PVOID BaseAddress
);
4709 MmIsNonPagedSystemAddressValid(
4710 _In_ PVOID VirtualAddress
);
4712 _Must_inspect_result_
4713 _IRQL_requires_max_(APC_LEVEL
)
4714 _Out_writes_bytes_opt_(NumberOfBytes
)
4718 MmAllocateNonCachedMemory(
4719 _In_ SIZE_T NumberOfBytes
);
4721 _IRQL_requires_max_(APC_LEVEL
)
4725 MmFreeNonCachedMemory(
4726 _In_reads_bytes_(NumberOfBytes
) PVOID BaseAddress
,
4727 _In_ SIZE_T NumberOfBytes
);
4732 MmGetVirtualForPhysical(
4733 _In_ PHYSICAL_ADDRESS PhysicalAddress
);
4735 _Must_inspect_result_
4736 _IRQL_requires_max_(APC_LEVEL
)
4740 MmMapUserAddressesToPage(
4741 _In_reads_bytes_(NumberOfBytes
) PVOID BaseAddress
,
4742 _In_ SIZE_T NumberOfBytes
,
4743 _In_ PVOID PageAddress
);
4745 _Must_inspect_result_
4746 _IRQL_requires_max_(APC_LEVEL
)
4747 _Out_writes_bytes_opt_(NumberOfBytes
)
4752 _In_ PHYSICAL_ADDRESS PhysicalAddress
,
4753 _In_ SIZE_T NumberOfBytes
,
4754 _In_ MEMORY_CACHING_TYPE CacheType
);
4756 _Must_inspect_result_
4757 _IRQL_requires_max_(APC_LEVEL
)
4761 MmMapViewInSessionSpace(
4763 _Outptr_result_bytebuffer_(*ViewSize
) PVOID
*MappedBase
,
4764 _Inout_ PSIZE_T ViewSize
);
4766 _Must_inspect_result_
4767 _IRQL_requires_max_(APC_LEVEL
)
4771 MmMapViewInSystemSpace(
4773 _Outptr_result_bytebuffer_(*ViewSize
) PVOID
*MappedBase
,
4774 _Inout_ PSIZE_T ViewSize
);
4776 _IRQL_requires_max_(DISPATCH_LEVEL
)
4781 _In_ PVOID VirtualAddress
);
4786 MmIsThisAnNtAsSystem(VOID
);
4788 _IRQL_requires_max_(APC_LEVEL
)
4792 MmLockPagableSectionByHandle(
4793 _In_ PVOID ImageSectionHandle
);
4795 _IRQL_requires_max_(APC_LEVEL
)
4799 MmUnmapViewInSessionSpace(
4800 _In_ PVOID MappedBase
);
4802 _IRQL_requires_max_(APC_LEVEL
)
4806 MmUnmapViewInSystemSpace(
4807 _In_ PVOID MappedBase
);
4809 _IRQL_requires_max_(APC_LEVEL
)
4813 MmUnsecureVirtualMemory(
4814 _In_ HANDLE SecureHandle
);
4816 _IRQL_requires_max_ (PASSIVE_LEVEL
)
4820 MmRemovePhysicalMemory(
4821 _In_ PPHYSICAL_ADDRESS StartAddress
,
4822 _Inout_ PLARGE_INTEGER NumberOfBytes
);
4824 _Must_inspect_result_
4825 _IRQL_requires_max_(APC_LEVEL
)
4829 MmSecureVirtualMemory(
4830 __in_data_source(USER_MODE
) _In_reads_bytes_ (Size
) PVOID Address
,
4831 _In_
__in_data_source(USER_MODE
) SIZE_T Size
,
4832 _In_ ULONG ProbeMode
);
4834 _IRQL_requires_max_(APC_LEVEL
)
4838 MmUnmapVideoDisplay(
4839 _In_reads_bytes_(NumberOfBytes
) PVOID BaseAddress
,
4840 _In_ SIZE_T NumberOfBytes
);
4842 _IRQL_requires_max_ (PASSIVE_LEVEL
)
4846 MmAddPhysicalMemory(
4847 _In_ PPHYSICAL_ADDRESS StartAddress
,
4848 _Inout_ PLARGE_INTEGER NumberOfBytes
);
4850 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4854 #if (NTDDI_VERSION >= NTDDI_WS03)
4856 _Must_inspect_result_
4857 _IRQL_requires_max_(PASSIVE_LEVEL
)
4861 MmCreateMirror(VOID
);
4862 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
4864 #if (NTDDI_VERSION >= NTDDI_VISTA)
4865 _Must_inspect_result_
4866 _IRQL_requires_max_(APC_LEVEL
)
4869 MmRotatePhysicalView(
4870 _In_ PVOID VirtualAddress
,
4871 _Inout_ PSIZE_T NumberOfBytes
,
4872 _In_opt_ PMDLX NewMdl
,
4873 _In_ MM_ROTATE_DIRECTION Direction
,
4874 _In_ PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction
,
4875 _In_opt_ PVOID Context
);
4876 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4878 /******************************************************************************
4879 * Process Manager Functions *
4880 ******************************************************************************/
4887 _Out_ PHANDLE ProcessHandle
,
4888 _In_ ACCESS_MASK DesiredAccess
,
4889 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
4890 _In_opt_ PCLIENT_ID ClientId
);
4896 NtQueryInformationProcess(
4897 _In_ HANDLE ProcessHandle
,
4898 _In_ PROCESSINFOCLASS ProcessInformationClass
,
4899 _Out_ PVOID ProcessInformation
,
4900 _In_ ULONG ProcessInformationLength
,
4901 _Out_opt_ PULONG ReturnLength
);
4903 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4906 _IRQL_requires_max_(PASSIVE_LEVEL
)
4910 PsSetCreateProcessNotifyRoutine(
4911 _In_ PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
4912 _In_ BOOLEAN Remove
);
4914 _IRQL_requires_max_(PASSIVE_LEVEL
)
4918 PsSetCreateThreadNotifyRoutine(
4919 _In_ PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4921 _IRQL_requires_max_(PASSIVE_LEVEL
)
4925 PsSetLoadImageNotifyRoutine(
4926 _In_ PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4931 PsGetCurrentProcessId(VOID
);
4933 _IRQL_requires_max_(DISPATCH_LEVEL
)
4937 PsGetCurrentThreadId(VOID
);
4943 OUT PULONG MajorVersion OPTIONAL
,
4944 OUT PULONG MinorVersion OPTIONAL
,
4945 OUT PULONG BuildNumber OPTIONAL
,
4946 OUT PUNICODE_STRING CSDVersion OPTIONAL
);
4947 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4948 #if (NTDDI_VERSION >= NTDDI_WINXP)
4950 _IRQL_requires_max_(DISPATCH_LEVEL
)
4955 _In_ PEPROCESS Process
);
4957 _IRQL_requires_max_(DISPATCH_LEVEL
)
4962 _In_ PETHREAD Thread
);
4967 PsRemoveCreateThreadNotifyRoutine(
4968 _In_ PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4970 _IRQL_requires_max_(PASSIVE_LEVEL
)
4974 PsRemoveLoadImageNotifyRoutine(
4975 _In_ PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4977 _IRQL_requires_max_(DISPATCH_LEVEL
)
4981 PsGetProcessCreateTimeQuadPart(
4982 _In_ PEPROCESS Process
);
4983 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4985 #if (NTDDI_VERSION >= NTDDI_WS03)
4989 PsGetThreadProcessId(
4990 IN PETHREAD Thread
);
4991 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
4993 #if (NTDDI_VERSION >= NTDDI_VISTA)
4998 PsSetCurrentThreadPrefetching(
4999 IN BOOLEAN Prefetching
);
5004 PsIsCurrentThreadPrefetching(VOID
);
5006 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
5008 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
5012 PsSetCreateProcessNotifyRoutineEx(
5013 IN PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine
,
5015 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
5016 /******************************************************************************
5017 * Runtime Library Functions *
5018 ******************************************************************************/
5021 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5024 #ifndef RTL_USE_AVL_TABLES
5029 RtlInitializeGenericTable(
5030 _Out_ PRTL_GENERIC_TABLE Table
,
5031 _In_ PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
,
5032 _In_ PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
,
5033 _In_ PRTL_GENERIC_FREE_ROUTINE FreeRoutine
,
5034 _In_opt_ PVOID TableContext
);
5039 RtlInsertElementGenericTable(
5040 _In_ PRTL_GENERIC_TABLE Table
,
5041 _In_reads_bytes_(BufferSize
) PVOID Buffer
,
5042 _In_ CLONG BufferSize
,
5043 _Out_opt_ PBOOLEAN NewElement
);
5048 RtlInsertElementGenericTableFull(
5049 _In_ PRTL_GENERIC_TABLE Table
,
5050 _In_reads_bytes_(BufferSize
) PVOID Buffer
,
5051 _In_ CLONG BufferSize
,
5052 _Out_opt_ PBOOLEAN NewElement
,
5053 _In_ PVOID NodeOrParent
,
5054 _In_ TABLE_SEARCH_RESULT SearchResult
);
5059 RtlDeleteElementGenericTable(
5060 _In_ PRTL_GENERIC_TABLE Table
,
5063 _Must_inspect_result_
5067 RtlLookupElementGenericTable(
5068 _In_ PRTL_GENERIC_TABLE Table
,
5074 RtlLookupElementGenericTableFull(
5075 _In_ PRTL_GENERIC_TABLE Table
,
5077 _Out_ PVOID
*NodeOrParent
,
5078 _Out_ TABLE_SEARCH_RESULT
*SearchResult
);
5080 _Must_inspect_result_
5084 RtlEnumerateGenericTable(
5085 _In_ PRTL_GENERIC_TABLE Table
,
5086 _In_ BOOLEAN Restart
);
5088 _Must_inspect_result_
5092 RtlEnumerateGenericTableWithoutSplaying(
5093 _In_ PRTL_GENERIC_TABLE Table
,
5094 _Inout_ PVOID
*RestartKey
);
5096 _Must_inspect_result_
5100 RtlGetElementGenericTable(
5101 _In_ PRTL_GENERIC_TABLE Table
,
5107 RtlNumberGenericTableElements(
5108 _In_ PRTL_GENERIC_TABLE Table
);
5110 _Must_inspect_result_
5114 RtlIsGenericTableEmpty(
5115 _In_ PRTL_GENERIC_TABLE Table
);
5117 #endif /* !RTL_USE_AVL_TABLES */
5119 #define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT 8
5125 _Inout_ PRTL_SPLAY_LINKS Links
);
5131 _In_ PRTL_SPLAY_LINKS Links
);
5137 _In_ PRTL_SPLAY_LINKS Links
,
5138 _Inout_ PRTL_SPLAY_LINKS
*Root
);
5140 _Must_inspect_result_
5144 RtlSubtreeSuccessor(
5145 _In_ PRTL_SPLAY_LINKS Links
);
5147 _Must_inspect_result_
5151 RtlSubtreePredecessor(
5152 _In_ PRTL_SPLAY_LINKS Links
);
5154 _Must_inspect_result_
5159 _In_ PRTL_SPLAY_LINKS Links
);
5161 _Must_inspect_result_
5166 _In_ PRTL_SPLAY_LINKS Links
);
5168 _IRQL_requires_max_(PASSIVE_LEVEL
)
5169 _Must_inspect_result_
5173 RtlPrefixUnicodeString(
5174 _In_ PCUNICODE_STRING String1
,
5175 _In_ PCUNICODE_STRING String2
,
5176 _In_ BOOLEAN CaseInSensitive
);
5178 _IRQL_requires_max_(PASSIVE_LEVEL
)
5183 _Inout_ PSTRING DestinationString
,
5184 _In_
const STRING
*SourceString
);
5186 _IRQL_requires_max_(PASSIVE_LEVEL
)
5187 _When_(AllocateDestinationString
, _Must_inspect_result_
)
5191 RtlUpcaseUnicodeString(
5192 _When_(AllocateDestinationString
, _Out_
_At_(DestinationString
->Buffer
, __drv_allocatesMem(Mem
)))
5193 _When_(!AllocateDestinationString
, _Inout_
)
5194 PUNICODE_STRING DestinationString
,
5195 _In_ PCUNICODE_STRING SourceString
,
5196 _In_ BOOLEAN AllocateDestinationString
);
5198 _IRQL_requires_max_(APC_LEVEL
)
5203 _Inout_ PACCESS_MASK AccessMask
,
5204 _In_ PGENERIC_MAPPING GenericMapping
);
5206 _IRQL_requires_max_(PASSIVE_LEVEL
)
5210 RtlVolumeDeviceToDosName(
5211 _In_ PVOID VolumeDeviceObject
,
5212 _Out_ PUNICODE_STRING DosName
);
5214 _IRQL_requires_max_(PASSIVE_LEVEL
)
5215 _Must_inspect_result_
5220 _In_
const STRING
*String1
,
5221 _In_
const STRING
*String2
,
5222 _In_ BOOLEAN CaseInSensitive
);
5228 _Out_ PSTRING DestinationString
,
5229 _In_opt_
const STRING
*SourceString
);
5231 _IRQL_requires_max_(PASSIVE_LEVEL
)
5232 _Must_inspect_result_
5237 _In_
const STRING
*String1
,
5238 _In_
const STRING
*String2
,
5239 _In_ BOOLEAN CaseInSensitive
);
5241 _IRQL_requires_max_(PASSIVE_LEVEL
)
5247 _In_opt_ ULONG Base
,
5248 _Out_ PULONG Value
);
5250 _IRQL_requires_max_(PASSIVE_LEVEL
)
5255 _In_ CHAR Character
);
5261 _Out_writes_(Count
- (Flags
>> RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT
))
5267 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5270 #if (NTDDI_VERSION >= NTDDI_WINXP)
5277 RtlInitializeGenericTableAvl(
5278 _Out_ PRTL_AVL_TABLE Table
,
5279 _In_ PRTL_AVL_COMPARE_ROUTINE CompareRoutine
,
5280 _In_opt_ PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
,
5281 _In_opt_ PRTL_AVL_FREE_ROUTINE FreeRoutine
,
5282 _In_opt_ PVOID TableContext
);
5287 RtlInsertElementGenericTableAvl(
5288 _In_ PRTL_AVL_TABLE Table
,
5289 _In_reads_bytes_(BufferSize
) PVOID Buffer
,
5290 _In_ CLONG BufferSize
,
5291 _Out_opt_ PBOOLEAN NewElement
);
5296 RtlInsertElementGenericTableFullAvl(
5297 _In_ PRTL_AVL_TABLE Table
,
5298 _In_reads_bytes_(BufferSize
) PVOID Buffer
,
5299 _In_ CLONG BufferSize
,
5300 _Out_opt_ PBOOLEAN NewElement
,
5301 _In_ PVOID NodeOrParent
,
5302 _In_ TABLE_SEARCH_RESULT SearchResult
);
5307 RtlDeleteElementGenericTableAvl(
5308 _In_ PRTL_AVL_TABLE Table
,
5311 _Must_inspect_result_
5315 RtlLookupElementGenericTableAvl(
5316 _In_ PRTL_AVL_TABLE Table
,
5322 RtlLookupElementGenericTableFullAvl(
5323 _In_ PRTL_AVL_TABLE Table
,
5325 _Out_ PVOID
*NodeOrParent
,
5326 _Out_ TABLE_SEARCH_RESULT
*SearchResult
);
5328 _Must_inspect_result_
5332 RtlEnumerateGenericTableAvl(
5333 _In_ PRTL_AVL_TABLE Table
,
5334 _In_ BOOLEAN Restart
);
5336 _Must_inspect_result_
5340 RtlEnumerateGenericTableWithoutSplayingAvl(
5341 _In_ PRTL_AVL_TABLE Table
,
5342 _Inout_ PVOID
*RestartKey
);
5344 _Must_inspect_result_
5348 RtlLookupFirstMatchingElementGenericTableAvl(
5349 _In_ PRTL_AVL_TABLE Table
,
5351 _Out_ PVOID
*RestartKey
);
5353 _Must_inspect_result_
5357 RtlEnumerateGenericTableLikeADirectory(
5358 _In_ PRTL_AVL_TABLE Table
,
5359 _In_opt_ PRTL_AVL_MATCH_FUNCTION MatchFunction
,
5360 _In_opt_ PVOID MatchData
,
5361 _In_ ULONG NextFlag
,
5362 _Inout_ PVOID
*RestartKey
,
5363 _Inout_ PULONG DeleteCount
,
5366 _Must_inspect_result_
5370 RtlGetElementGenericTableAvl(
5371 _In_ PRTL_AVL_TABLE Table
,
5377 RtlNumberGenericTableElementsAvl(
5378 _In_ PRTL_AVL_TABLE Table
);
5380 _Must_inspect_result_
5384 RtlIsGenericTableEmptyAvl(
5385 _In_ PRTL_AVL_TABLE Table
);
5388 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5391 #if (NTDDI_VERSION >= NTDDI_VISTA)
5394 _IRQL_requires_max_(APC_LEVEL
)
5398 RtlRunOnceInitialize(
5399 _Out_ PRTL_RUN_ONCE RunOnce
);
5401 _IRQL_requires_max_(APC_LEVEL
)
5402 _Maybe_raises_SEH_exception_
5406 RtlRunOnceExecuteOnce(
5407 _Inout_ PRTL_RUN_ONCE RunOnce
,
5408 _In_ __inner_callback PRTL_RUN_ONCE_INIT_FN InitFn
,
5409 _Inout_opt_ PVOID Parameter
,
5410 _Outptr_opt_result_maybenull_ PVOID
*Context
);
5412 _IRQL_requires_max_(APC_LEVEL
)
5413 _Must_inspect_result_
5417 RtlRunOnceBeginInitialize(
5418 _Inout_ PRTL_RUN_ONCE RunOnce
,
5420 _Outptr_opt_result_maybenull_ PVOID
*Context
);
5422 _IRQL_requires_max_(APC_LEVEL
)
5427 _Inout_ PRTL_RUN_ONCE RunOnce
,
5429 _In_opt_ PVOID Context
);
5435 _In_ ULONG OSMajorVersion
,
5436 _In_ ULONG OSMinorVersion
,
5437 _In_ ULONG SpMajorVersion
,
5438 _In_ ULONG SpMinorVersion
,
5439 _Out_ PULONG ReturnedProductType
);
5442 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
5444 #if (NTDDI_VERSION >= NTDDI_WIN7)
5447 _Must_inspect_result_
5452 _Inout_
_When_(NULL
== *HashTable
, __drv_allocatesMem(Mem
))
5453 PRTL_DYNAMIC_HASH_TABLE
*HashTable
,
5455 _In_ _Reserved_ ULONG Flags
);
5461 _In_
_When_((HashTable
->Flags
& RTL_HASH_ALLOCATED_HEADER
), __drv_freesMem(Mem
) _Post_invalid_
)
5462 PRTL_DYNAMIC_HASH_TABLE HashTable
);
5467 RtlInsertEntryHashTable(
5468 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
,
5469 _In_ __drv_aliasesMem PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry
,
5470 _In_ ULONG_PTR Signature
,
5471 _Inout_opt_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
);
5476 RtlRemoveEntryHashTable(
5477 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
,
5478 _In_ PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry
,
5479 _Inout_opt_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
);
5481 _Must_inspect_result_
5483 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5485 RtlLookupEntryHashTable(
5486 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
,
5487 _In_ ULONG_PTR Signature
,
5488 _Out_opt_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
);
5490 _Must_inspect_result_
5492 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5494 RtlGetNextEntryHashTable(
5495 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
,
5496 _In_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
);
5501 RtlInitEnumerationHashTable(
5502 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
,
5503 _Out_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5505 _Must_inspect_result_
5507 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5509 RtlEnumerateEntryHashTable(
5510 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
,
5511 _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5516 RtlEndEnumerationHashTable(
5517 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
,
5518 _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5523 RtlInitWeakEnumerationHashTable(
5524 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
,
5525 _Out_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5527 _Must_inspect_result_
5529 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5531 RtlWeaklyEnumerateEntryHashTable(
5532 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
,
5533 _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5538 RtlEndWeakEnumerationHashTable(
5539 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
,
5540 _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5546 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
);
5551 RtlContractHashTable(
5552 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
);
5555 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5558 #if defined(_AMD64_) || defined(_IA64_)
5562 //DECLSPEC_DEPRECATED_DDK_WINXP
5566 RtlLargeIntegerDivide(
5567 _In_ LARGE_INTEGER Dividend
,
5568 _In_ LARGE_INTEGER Divisor
,
5569 _Out_opt_ PLARGE_INTEGER Remainder
)
5572 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
5574 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
5580 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5584 RtlLargeIntegerDivide(
5585 _In_ LARGE_INTEGER Dividend
,
5586 _In_ LARGE_INTEGER Divisor
,
5587 _Out_opt_ PLARGE_INTEGER Remainder
);
5591 #endif /* defined(_AMD64_) || defined(_IA64_) */
5595 #ifdef RTL_USE_AVL_TABLES
5597 #define RtlInitializeGenericTable RtlInitializeGenericTableAvl
5598 #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
5599 #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
5600 #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
5601 #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
5602 #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
5603 #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
5604 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
5605 #define RtlGetElementGenericTable RtlGetElementGenericTableAvl
5606 #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
5607 #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
5609 #endif /* RTL_USE_AVL_TABLES */
5611 #define RtlInitializeSplayLinks(Links) { \
5612 PRTL_SPLAY_LINKS _SplayLinks; \
5613 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
5614 _SplayLinks->Parent = _SplayLinks; \
5615 _SplayLinks->LeftChild = NULL; \
5616 _SplayLinks->RightChild = NULL; \
5619 #define RtlIsLeftChild(Links) \
5620 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
5622 #define RtlIsRightChild(Links) \
5623 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
5625 #define RtlRightChild(Links) \
5626 ((PRTL_SPLAY_LINKS)(Links))->RightChild
5628 #define RtlIsRoot(Links) \
5629 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
5631 #define RtlLeftChild(Links) \
5632 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
5634 #define RtlParent(Links) \
5635 ((PRTL_SPLAY_LINKS)(Links))->Parent
5637 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
5639 PRTL_SPLAY_LINKS _SplayParent; \
5640 PRTL_SPLAY_LINKS _SplayChild; \
5641 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
5642 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
5643 _SplayParent->LeftChild = _SplayChild; \
5644 _SplayChild->Parent = _SplayParent; \
5647 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
5649 PRTL_SPLAY_LINKS _SplayParent; \
5650 PRTL_SPLAY_LINKS _SplayChild; \
5651 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
5652 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
5653 _SplayParent->RightChild = _SplayChild; \
5654 _SplayChild->Parent = _SplayParent; \
5657 #if !defined(MIDL_PASS)
5662 RtlConvertLongToLuid(
5668 Temp
.QuadPart
= Val
;
5669 Luid
.LowPart
= Temp
.u
.LowPart
;
5670 Luid
.HighPart
= Temp
.u
.HighPart
;
5677 RtlConvertUlongToLuid(
5687 #endif /* !defined(MIDL_PASS) */
5689 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
5690 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
5691 *CallersAddress = (PVOID)_ReturnAddress(); \
5692 *CallersCaller = NULL;
5694 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5698 RtlGetCallersAddress(
5699 _Out_ PVOID
*CallersAddress
,
5700 _Out_ PVOID
*CallersCaller
);
5704 #if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
5706 #if (NTDDI_VERSION >= NTDDI_WIN7)
5711 RtlInitHashTableContext(
5712 _Inout_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
)
5714 Context
->ChainHead
= NULL
;
5715 Context
->PrevLinkage
= NULL
;
5721 RtlInitHashTableContextFromEnumerator(
5722 _Inout_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
,
5723 _In_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
)
5725 Context
->ChainHead
= Enumerator
->ChainHead
;
5726 Context
->PrevLinkage
= Enumerator
->HashEntry
.Linkage
.Blink
;
5732 RtlReleaseHashTableContext(
5733 _Inout_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
)
5735 UNREFERENCED_PARAMETER(Context
);
5742 RtlTotalBucketsHashTable(
5743 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
)
5745 return HashTable
->TableSize
;
5751 RtlNonEmptyBucketsHashTable(
5752 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
)
5754 return HashTable
->NonEmptyBuckets
;
5760 RtlEmptyBucketsHashTable(
5761 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
)
5763 return HashTable
->TableSize
- HashTable
->NonEmptyBuckets
;
5769 RtlTotalEntriesHashTable(
5770 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
)
5772 return HashTable
->NumEntries
;
5778 RtlActiveEnumeratorsHashTable(
5779 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
)
5781 return HashTable
->NumEnumerators
;
5784 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5786 #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
5788 /******************************************************************************
5789 * Security Manager Functions *
5790 ******************************************************************************/
5792 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5794 _IRQL_requires_max_(PASSIVE_LEVEL
)
5798 SeSinglePrivilegeCheck(
5799 _In_ LUID PrivilegeValue
,
5800 _In_ KPROCESSOR_MODE PreviousMode
);
5802 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5805 /******************************************************************************
5807 ******************************************************************************/
5810 _IRQL_requires_max_(PASSIVE_LEVEL
)
5814 ZwAllocateLocallyUniqueId(
5817 _IRQL_requires_max_(PASSIVE_LEVEL
)
5822 _In_opt_ HANDLE ProcessHandle
,
5823 _In_ NTSTATUS ExitStatus
);
5825 _IRQL_requires_max_(PASSIVE_LEVEL
)
5830 _Out_ PHANDLE ProcessHandle
,
5831 _In_ ACCESS_MASK DesiredAccess
,
5832 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
5833 _In_opt_ PCLIENT_ID ClientId
);
5835 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5837 _IRQL_requires_max_(PASSIVE_LEVEL
)
5841 _In_ HANDLE TimerHandle
,
5842 _Out_opt_ PBOOLEAN CurrentState
);
5844 _IRQL_requires_max_(PASSIVE_LEVEL
)
5845 _When_(return == 0, __drv_allocatesMem(TimerObject
))
5849 _Out_ PHANDLE TimerHandle
,
5850 _In_ ACCESS_MASK DesiredAccess
,
5851 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
5852 _In_ TIMER_TYPE TimerType
);
5854 _IRQL_requires_max_(PASSIVE_LEVEL
)
5858 _Out_ PHANDLE TimerHandle
,
5859 _In_ ACCESS_MASK DesiredAccess
,
5860 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
5862 _IRQL_requires_max_(PASSIVE_LEVEL
)
5866 ZwSetInformationThread(
5867 _In_ HANDLE ThreadHandle
,
5868 _In_ THREADINFOCLASS ThreadInformationClass
,
5869 _In_reads_bytes_(ThreadInformationLength
) PVOID ThreadInformation
,
5870 _In_ ULONG ThreadInformationLength
);
5872 _IRQL_requires_max_(PASSIVE_LEVEL
)
5876 _In_ HANDLE TimerHandle
,
5877 _In_ PLARGE_INTEGER DueTime
,
5878 _In_opt_ PTIMER_APC_ROUTINE TimerApcRoutine
,
5879 _In_opt_ PVOID TimerContext
,
5880 _In_ BOOLEAN ResumeTimer
,
5881 _In_opt_ LONG Period
,
5882 _Out_opt_ PBOOLEAN PreviousState
);
5884 _IRQL_requires_max_(PASSIVE_LEVEL
)
5889 _In_ PUNICODE_STRING String
);
5891 _IRQL_requires_max_(PASSIVE_LEVEL
)
5896 _In_ POWER_INFORMATION_LEVEL PowerInformationLevel
,
5897 _In_reads_bytes_opt_(InputBufferLength
) PVOID InputBuffer
,
5898 _In_ ULONG InputBufferLength
,
5899 _Out_writes_bytes_opt_(OutputBufferLength
) PVOID OutputBuffer
,
5900 _In_ ULONG OutputBufferLength
);
5902 _IRQL_requires_max_(PASSIVE_LEVEL
)
5906 ZwQueryVolumeInformationFile(
5907 _In_ HANDLE FileHandle
,
5908 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
5909 _Out_writes_bytes_(Length
) PVOID FsInformation
,
5911 _In_ FS_INFORMATION_CLASS FsInformationClass
);
5913 _IRQL_requires_max_(PASSIVE_LEVEL
)
5917 ZwDeviceIoControlFile(
5918 _In_ HANDLE FileHandle
,
5919 _In_opt_ HANDLE Event
,
5920 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
5921 _In_opt_ PVOID ApcContext
,
5922 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
5923 _In_ ULONG IoControlCode
,
5924 _In_reads_bytes_opt_(InputBufferLength
) PVOID InputBuffer
,
5925 _In_ ULONG InputBufferLength
,
5926 _Out_writes_bytes_opt_(OutputBufferLength
) PVOID OutputBuffer
,
5927 _In_ ULONG OutputBufferLength
);
5929 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5932 #if (NTDDI_VERSION >= NTDDI_WIN7)
5934 _IRQL_requires_max_(PASSIVE_LEVEL
)
5938 _In_ HANDLE TimerHandle
,
5939 _In_ TIMER_SET_INFORMATION_CLASS TimerSetInformationClass
,
5940 _Inout_updates_bytes_opt_(TimerSetInformationLength
) PVOID TimerSetInformation
,
5941 _In_ ULONG TimerSetInformationLength
);
5942 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5948 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
5949 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
5950 (TypeBitMask), (ComparisonType)))
5952 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5956 VerSetConditionMask(
5957 IN ULONGLONG ConditionMask
,
5959 IN UCHAR Condition
);
5962 typedef struct _KERNEL_USER_TIMES
{
5963 LARGE_INTEGER CreateTime
;
5964 LARGE_INTEGER ExitTime
;
5965 LARGE_INTEGER KernelTime
;
5966 LARGE_INTEGER UserTime
;
5967 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
5969 /* NtXxx Functions */
5971 typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION
{
5972 SystemFirmwareTable_Enumerate
,
5973 SystemFirmwareTable_Get
5974 } SYSTEM_FIRMWARE_TABLE_ACTION
;
5976 typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION
{
5977 ULONG ProviderSignature
;
5978 SYSTEM_FIRMWARE_TABLE_ACTION Action
;
5980 ULONG TableBufferLength
;
5981 UCHAR TableBuffer
[ANYSIZE_ARRAY
];
5982 } SYSTEM_FIRMWARE_TABLE_INFORMATION
, *PSYSTEM_FIRMWARE_TABLE_INFORMATION
;
5986 _Inout_ PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo
);
5988 typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER
{
5989 ULONG ProviderSignature
;
5991 PFNFTH FirmwareTableHandler
;
5993 } SYSTEM_FIRMWARE_TABLE_HANDLER
, *PSYSTEM_FIRMWARE_TABLE_HANDLER
;
5996 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
5997 _In_ PVOID Context
);
5999 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
6000 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
6001 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
6002 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
6004 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
6005 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
6006 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
6007 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
6008 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
6010 #define SHARED_GLOBAL_FLAGS_ERROR_PORT_V 0x0
6011 #define SHARED_GLOBAL_FLAGS_ERROR_PORT (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V)
6013 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1
6014 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V)
6016 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V 0x2
6017 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V)
6019 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V 0x3
6020 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED \
6021 (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V)
6023 #define SHARED_GLOBAL_FLAGS_SPARE_V 0x4
6024 #define SHARED_GLOBAL_FLAGS_SPARE \
6025 (1UL << SHARED_GLOBAL_FLAGS_SPARE_V)
6027 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V 0x5
6028 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED \
6029 (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V)
6031 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V 0x6
6032 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED \
6033 (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V)
6035 #define EX_INIT_BITS(Flags, Bit) \
6036 *((Flags)) |= (Bit) // Safe to use before concurrently accessible
6038 #define EX_TEST_SET_BIT(Flags, Bit) \
6039 InterlockedBitTestAndSet ((PLONG)(Flags), (Bit))
6041 #define EX_TEST_CLEAR_BIT(Flags, Bit) \
6042 InterlockedBitTestAndReset ((PLONG)(Flags), (Bit))
6044 #define PCCARD_MAP_ERROR 0x01
6045 #define PCCARD_DEVICE_PCI 0x10
6047 #define PCCARD_SCAN_DISABLED 0x01
6048 #define PCCARD_MAP_ZERO 0x02
6049 #define PCCARD_NO_TIMER 0x03
6050 #define PCCARD_NO_PIC 0x04
6051 #define PCCARD_NO_LEGACY_BASE 0x05
6052 #define PCCARD_DUP_LEGACY_BASE 0x06
6053 #define PCCARD_NO_CONTROLLERS 0x07
6055 #define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2))
6057 /* Filesystem runtime library routines */
6059 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6060 _Must_inspect_result_
6064 FsRtlIsTotalDeviceFailure(
6065 _In_ NTSTATUS Status
);