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 (1i64 << (XSTATE_LEGACY_FLOATING_POINT))
2027 #define XSTATE_MASK_LEGACY_SSE (1i64 << (XSTATE_LEGACY_SSE))
2028 #define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
2029 #define XSTATE_MASK_GSSE (1i64 << (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 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
3333 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
3334 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
3337 #elif defined(_M_IA64)
3339 #elif defined(_M_PPC)
3342 #elif defined(_M_MIPS)
3344 #elif defined(_M_ARM)
3346 #define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
3348 #error Unknown Architecture
3351 /******************************************************************************
3352 * Executive Functions *
3353 ******************************************************************************/
3355 static __inline PVOID
3357 IN PZONE_HEADER Zone
)
3359 PVOID Result
= (PVOID
)Zone
->FreeList
.Next
;
3360 if (Zone
->FreeList
.Next
)
3361 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
3365 static __inline PVOID
3367 IN PZONE_HEADER Zone
,
3370 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
3371 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
3372 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
3377 * ExInterlockedAllocateFromZone(
3378 * IN PZONE_HEADER Zone,
3379 * IN PKSPIN_LOCK Lock)
3381 #define ExInterlockedAllocateFromZone(Zone, Lock) \
3382 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
3385 * ExInterlockedFreeToZone(
3386 * IN PZONE_HEADER Zone,
3388 * IN PKSPIN_LOCK Lock);
3390 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
3391 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
3396 * IN PZONE_HEADER Zone)
3398 #define ExIsFullZone(Zone) \
3399 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
3402 * ExIsObjectInFirstZoneSegment(
3403 * IN PZONE_HEADER Zone,
3406 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
3407 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
3408 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
3409 (Zone)->TotalSegmentSize)) )
3411 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
3412 #define ExAcquireResourceShared ExAcquireResourceSharedLite
3413 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
3414 #define ExDeleteResource ExDeleteResourceLite
3415 #define ExInitializeResource ExInitializeResourceLite
3416 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
3417 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
3418 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
3419 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
3422 #define RESULT_ZERO 0
3423 #define RESULT_NEGATIVE 1
3424 #define RESULT_POSITIVE 2
3427 typedef enum _INTERLOCKED_RESULT
{
3428 ResultNegative
= RESULT_NEGATIVE
,
3429 ResultZero
= RESULT_ZERO
,
3430 ResultPositive
= RESULT_POSITIVE
3431 } INTERLOCKED_RESULT
;
3438 Exfi386InterlockedIncrementLong(
3439 _Inout_ _Interlocked_operand_ LONG
volatile *Addend
);
3444 Exfi386InterlockedDecrementLong(
3445 _Inout_ _Interlocked_operand_ PLONG Addend
);
3450 Exfi386InterlockedExchangeUlong(
3451 _Inout_ _Interlocked_operand_ PULONG Target
,
3457 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3462 _Inout_ PZONE_HEADER Zone
,
3463 _Inout_ PVOID Segment
,
3464 _In_ ULONG SegmentSize
);
3470 _Out_ PZONE_HEADER Zone
,
3471 _In_ ULONG BlockSize
,
3472 _Inout_ PVOID InitialSegment
,
3473 _In_ ULONG InitialSegmentSize
);
3475 _IRQL_requires_max_(DISPATCH_LEVEL
)
3479 ExInterlockedExtendZone(
3480 _Inout_ PZONE_HEADER Zone
,
3481 _Inout_ PVOID Segment
,
3482 _In_ ULONG SegmentSize
,
3483 _Inout_
_Requires_lock_not_held_(*_Curr_
) PKSPIN_LOCK Lock
);
3485 _IRQL_requires_max_(PASSIVE_LEVEL
)
3492 _IRQL_requires_max_(PASSIVE_LEVEL
)
3497 ExRaiseAccessViolation(VOID
);
3499 _IRQL_requires_max_(PASSIVE_LEVEL
)
3504 ExRaiseDatatypeMisalignment(VOID
);
3506 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3509 /* Hardware Abstraction Layer Functions */
3511 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3513 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
3517 #else /* USE_DMA_MACROS ... */
3519 //DECLSPEC_DEPRECATED_DDK
3523 IoFreeAdapterChannel(
3524 _In_ PADAPTER_OBJECT AdapterObject
);
3526 //DECLSPEC_DEPRECATED_DDK
3530 IoFlushAdapterBuffers(
3531 _In_ PADAPTER_OBJECT AdapterObject
,
3533 _In_ PVOID MapRegisterBase
,
3534 _In_ PVOID CurrentVa
,
3536 _In_ BOOLEAN WriteToDevice
);
3538 //DECLSPEC_DEPRECATED_DDK
3543 _In_ PADAPTER_OBJECT AdapterObject
,
3544 _In_ PVOID MapRegisterBase
,
3545 _In_ ULONG NumberOfMapRegisters
);
3547 //DECLSPEC_DEPRECATED_DDK
3551 HalAllocateCommonBuffer(
3552 _In_ PADAPTER_OBJECT AdapterObject
,
3554 _Out_ PPHYSICAL_ADDRESS LogicalAddress
,
3555 _In_ BOOLEAN CacheEnabled
);
3557 //DECLSPEC_DEPRECATED_DDK
3561 HalFreeCommonBuffer(
3562 _In_ PADAPTER_OBJECT AdapterObject
,
3564 _In_ PHYSICAL_ADDRESS LogicalAddress
,
3565 _In_ PVOID VirtualAddress
,
3566 _In_ BOOLEAN CacheEnabled
);
3568 //DECLSPEC_DEPRECATED_DDK
3573 _In_ PADAPTER_OBJECT AdapterObject
);
3578 HalAllocateAdapterChannel(
3579 _In_ PADAPTER_OBJECT AdapterObject
,
3580 _In_ PWAIT_CONTEXT_BLOCK Wcb
,
3581 _In_ ULONG NumberOfMapRegisters
,
3582 _In_ PDRIVER_CONTROL ExecutionRoutine
);
3584 #endif /* USE_DMA_MACROS ... */
3586 #if !defined(NO_LEGACY_DRIVERS)
3590 HalAssignSlotResources(
3591 _In_ PUNICODE_STRING RegistryPath
,
3592 _In_opt_ PUNICODE_STRING DriverClassName
,
3593 _In_ PDRIVER_OBJECT DriverObject
,
3594 _In_ PDEVICE_OBJECT DeviceObject
,
3595 _In_ INTERFACE_TYPE BusType
,
3596 _In_ ULONG BusNumber
,
3597 _In_ ULONG SlotNumber
,
3598 _Inout_ PCM_RESOURCE_LIST
*AllocatedResources
);
3600 _IRQL_requires_max_(PASSIVE_LEVEL
)
3604 HalGetInterruptVector(
3605 _In_ INTERFACE_TYPE InterfaceType
,
3606 _In_ ULONG BusNumber
,
3607 _In_ ULONG BusInterruptLevel
,
3608 _In_ ULONG BusInterruptVector
,
3610 _Out_ PKAFFINITY Affinity
);
3616 _In_ BUS_DATA_TYPE BusDataType
,
3617 _In_ ULONG BusNumber
,
3618 _In_ ULONG SlotNumber
,
3619 _In_reads_bytes_(Length
) PVOID Buffer
,
3626 _In_ BUS_DATA_TYPE BusDataType
,
3627 _In_ ULONG BusNumber
,
3628 _In_ ULONG SlotNumber
,
3629 _Out_writes_bytes_(Length
) PVOID Buffer
,
3636 _In_ ULONG Frequency
);
3637 #endif /* !defined(NO_LEGACY_DRIVERS) */
3639 _IRQL_requires_max_(PASSIVE_LEVEL
)
3644 _In_ PDEVICE_DESCRIPTION DeviceDescription
,
3645 _Out_ PULONG NumberOfMapRegisters
);
3650 _In_ PADAPTER_OBJECT DmaAdapter
);
3655 HalAcquireDisplayOwnership(
3656 _In_ PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
3661 HalGetBusDataByOffset(
3662 _In_ BUS_DATA_TYPE BusDataType
,
3663 _In_ ULONG BusNumber
,
3664 _In_ ULONG SlotNumber
,
3665 _Out_writes_bytes_(Length
) PVOID Buffer
,
3672 HalSetBusDataByOffset(
3673 _In_ BUS_DATA_TYPE BusDataType
,
3674 _In_ ULONG BusNumber
,
3675 _In_ ULONG SlotNumber
,
3676 _In_reads_bytes_(Length
) PVOID Buffer
,
3683 HalTranslateBusAddress(
3684 _In_ INTERFACE_TYPE InterfaceType
,
3685 _In_ ULONG BusNumber
,
3686 _In_ PHYSICAL_ADDRESS BusAddress
,
3687 _Inout_ PULONG AddressSpace
,
3688 _Out_ PPHYSICAL_ADDRESS TranslatedAddress
);
3693 HalAllocateCrashDumpRegisters(
3694 _In_ PADAPTER_OBJECT AdapterObject
,
3695 _Inout_ PULONG NumberOfMapRegisters
);
3699 HalGetScatterGatherList(
3700 _In_ PADAPTER_OBJECT DmaAdapter
,
3701 _In_ PDEVICE_OBJECT DeviceObject
,
3703 _In_ PVOID CurrentVa
,
3705 _In_ PDRIVER_LIST_CONTROL ExecutionRoutine
,
3707 _In_ BOOLEAN WriteToDevice
);
3711 HalPutScatterGatherList(
3712 _In_ PADAPTER_OBJECT DmaAdapter
,
3713 _In_ PSCATTER_GATHER_LIST ScatterGather
,
3714 _In_ BOOLEAN WriteToDevice
);
3716 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3718 #if (NTDDI_VERSION >= NTDDI_WINXP)
3719 _IRQL_requires_max_(PASSIVE_LEVEL
)
3724 _In_ PDEVICE_OBJECT DeviceObject
,
3725 _In_ ULONG SectorSize
,
3726 _In_ ULONG MBRTypeIdentifier
,
3727 _Out_ PVOID
*Buffer
);
3728 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
3730 #if (NTDDI_VERSION >= NTDDI_WIN7)
3734 HalAllocateHardwareCounters(
3735 _In_reads_(GroupCount
) PGROUP_AFFINITY GroupAffinty
,
3736 _In_ ULONG GroupCount
,
3737 _In_ PPHYSICAL_COUNTER_RESOURCE_LIST ResourceList
,
3738 _Out_ PHANDLE CounterSetHandle
);
3742 HalFreeHardwareCounters(
3743 _In_ HANDLE CounterSetHandle
);
3745 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
3748 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3752 HalGetDmaAlignmentRequirement(VOID
);
3754 #endif /* defined(_IA64_) */
3756 #if defined(_M_IX86) || defined(_M_AMD64)
3757 #define HalGetDmaAlignmentRequirement() 1L
3760 #if (NTDDI_VERSION >= NTDDI_WIN7)
3762 typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR
*PWHEA_ERROR_SOURCE_DESCRIPTOR
;
3763 typedef struct _WHEA_ERROR_RECORD
*PWHEA_ERROR_RECORD
;
3769 _In_ PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource
,
3770 _In_ PWHEA_ERROR_RECORD ErrorRecord
);
3774 typedef struct _WHEA_ERROR_RECORD
*PWHEA_ERROR_RECORD
;
3780 _In_ PWHEA_ERROR_RECORD ErrorRecord
);
3782 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
3784 /******************************************************************************
3785 * I/O Manager Functions *
3786 ******************************************************************************/
3789 * VOID IoAssignArcName(
3790 * IN PUNICODE_STRING ArcName,
3791 * IN PUNICODE_STRING DeviceName);
3793 #define IoAssignArcName(_ArcName, _DeviceName) ( \
3794 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
3798 * IoDeassignArcName(
3799 * IN PUNICODE_STRING ArcName)
3801 #define IoDeassignArcName IoDeleteSymbolicLink
3806 IoInitializeDriverCreateContext(
3807 PIO_DRIVER_CREATE_CONTEXT DriverContext
)
3809 RtlZeroMemory(DriverContext
, sizeof(IO_DRIVER_CREATE_CONTEXT
));
3810 DriverContext
->Size
= sizeof(IO_DRIVER_CREATE_CONTEXT
);
3813 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3815 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
3816 _IRQL_requires_max_(DISPATCH_LEVEL
)
3817 _IRQL_requires_min_(DISPATCH_LEVEL
)
3821 IoAllocateAdapterChannel(
3822 _In_ PADAPTER_OBJECT AdapterObject
,
3823 _In_ PDEVICE_OBJECT DeviceObject
,
3824 _In_ ULONG NumberOfMapRegisters
,
3825 _In_ PDRIVER_CONTROL ExecutionRoutine
,
3826 _In_ PVOID Context
);
3829 #if !defined(DMA_MACROS_DEFINED)
3830 //DECLSPEC_DEPRECATED_DDK
3835 _In_ PADAPTER_OBJECT AdapterObject
,
3837 _In_ PVOID MapRegisterBase
,
3838 _In_ PVOID CurrentVa
,
3839 _Inout_ PULONG Length
,
3840 _In_ BOOLEAN WriteToDevice
);
3843 _IRQL_requires_max_(DISPATCH_LEVEL
)
3844 _IRQL_requires_min_(DISPATCH_LEVEL
)
3848 IoAllocateController(
3849 _In_ PCONTROLLER_OBJECT ControllerObject
,
3850 _In_ PDEVICE_OBJECT DeviceObject
,
3851 _In_ PDRIVER_CONTROL ExecutionRoutine
,
3852 _In_opt_ PVOID Context
);
3854 _IRQL_requires_max_(PASSIVE_LEVEL
)
3861 _IRQL_requires_max_(PASSIVE_LEVEL
)
3866 _In_ PCONTROLLER_OBJECT ControllerObject
);
3868 _IRQL_requires_max_(DISPATCH_LEVEL
)
3869 _IRQL_requires_min_(DISPATCH_LEVEL
)
3874 _In_ PCONTROLLER_OBJECT ControllerObject
);
3876 _IRQL_requires_max_(PASSIVE_LEVEL
)
3878 PCONFIGURATION_INFORMATION
3880 IoGetConfigurationInformation(VOID
);
3882 _IRQL_requires_max_(PASSIVE_LEVEL
)
3886 IoGetDeviceToVerify(
3887 _In_ PETHREAD Thread
);
3893 _In_ PDEVICE_OBJECT DeviceObject
,
3894 _In_ PFILE_OBJECT FileObject
);
3896 _IRQL_requires_max_(PASSIVE_LEVEL
)
3900 IoGetFileObjectGenericMapping(VOID
);
3902 _IRQL_requires_max_(DISPATCH_LEVEL
)
3906 IoMakeAssociatedIrp(
3908 _In_ CCHAR StackSize
);
3913 IoQueryDeviceDescription(
3914 _In_opt_ PINTERFACE_TYPE BusType
,
3915 _In_opt_ PULONG BusNumber
,
3916 _In_opt_ PCONFIGURATION_TYPE ControllerType
,
3917 _In_opt_ PULONG ControllerNumber
,
3918 _In_opt_ PCONFIGURATION_TYPE PeripheralType
,
3919 _In_opt_ PULONG PeripheralNumber
,
3920 _In_ PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
3921 _Inout_opt_ PVOID Context
);
3923 _IRQL_requires_max_(APC_LEVEL
)
3930 _In_ PDEVICE_OBJECT RealDeviceObject
);
3932 _IRQL_requires_max_(APC_LEVEL
)
3936 IoRaiseInformationalHardError(
3937 _In_ NTSTATUS ErrorStatus
,
3938 _In_opt_ PUNICODE_STRING String
,
3939 _In_opt_ PKTHREAD Thread
);
3941 _IRQL_requires_max_(PASSIVE_LEVEL
)
3945 IoRegisterBootDriverReinitialization(
3946 _In_ PDRIVER_OBJECT DriverObject
,
3947 _In_ PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
3948 _In_opt_ PVOID Context
);
3950 _IRQL_requires_max_(PASSIVE_LEVEL
)
3954 IoRegisterDriverReinitialization(
3955 _In_ PDRIVER_OBJECT DriverObject
,
3956 _In_ PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
3957 _In_opt_ PVOID Context
);
3962 IoAttachDeviceByPointer(
3963 _In_ PDEVICE_OBJECT SourceDevice
,
3964 _In_ PDEVICE_OBJECT TargetDevice
);
3966 _IRQL_requires_max_(PASSIVE_LEVEL
)
3967 _Must_inspect_result_
3971 IoReportDetectedDevice(
3972 _In_ PDRIVER_OBJECT DriverObject
,
3973 _In_ INTERFACE_TYPE LegacyBusType
,
3974 _In_ ULONG BusNumber
,
3975 _In_ ULONG SlotNumber
,
3976 _In_opt_ PCM_RESOURCE_LIST ResourceList
,
3977 _In_opt_ PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements
,
3978 _In_ BOOLEAN ResourceAssigned
,
3979 _Inout_ PDEVICE_OBJECT
*DeviceObject
);
3984 IoReportResourceForDetection(
3985 _In_ PDRIVER_OBJECT DriverObject
,
3986 _In_reads_bytes_opt_(DriverListSize
) PCM_RESOURCE_LIST DriverList
,
3987 _In_opt_ ULONG DriverListSize
,
3988 _In_opt_ PDEVICE_OBJECT DeviceObject
,
3989 _In_reads_bytes_opt_(DeviceListSize
) PCM_RESOURCE_LIST DeviceList
,
3990 _In_opt_ ULONG DeviceListSize
,
3991 _Out_ PBOOLEAN ConflictDetected
);
3996 IoReportResourceUsage(
3997 _In_opt_ PUNICODE_STRING DriverClassName
,
3998 _In_ PDRIVER_OBJECT DriverObject
,
3999 _In_reads_bytes_opt_(DriverListSize
) PCM_RESOURCE_LIST DriverList
,
4000 _In_opt_ ULONG DriverListSize
,
4001 _In_opt_ PDEVICE_OBJECT DeviceObject
,
4002 _In_reads_bytes_opt_(DeviceListSize
) PCM_RESOURCE_LIST DeviceList
,
4003 _In_opt_ ULONG DeviceListSize
,
4004 _In_ BOOLEAN OverrideConflict
,
4005 _Out_ PBOOLEAN ConflictDetected
);
4007 _IRQL_requires_max_(DISPATCH_LEVEL
)
4011 IoSetHardErrorOrVerifyDevice(
4013 _In_ PDEVICE_OBJECT DeviceObject
);
4019 _In_ PUNICODE_STRING RegistryPath
,
4020 _In_opt_ PUNICODE_STRING DriverClassName
,
4021 _In_ PDRIVER_OBJECT DriverObject
,
4022 _In_opt_ PDEVICE_OBJECT DeviceObject
,
4023 _In_opt_ PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources
,
4024 _Inout_ PCM_RESOURCE_LIST
*AllocatedResources
);
4026 _IRQL_requires_max_(DISPATCH_LEVEL
)
4030 IoSetThreadHardErrorMode(
4031 _In_ BOOLEAN EnableHardErrors
);
4034 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4036 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
4041 IoIsFileOriginRemote(
4042 _In_ PFILE_OBJECT FileObject
);
4048 _In_ PFILE_OBJECT FileObject
,
4049 _In_ BOOLEAN Remote
);
4051 #endif /* (NTDDI_VERSION >= NTDDI_WIN2KSP3) */
4053 #if (NTDDI_VERSION >= NTDDI_WINXP)
4055 _IRQL_requires_max_(PASSIVE_LEVEL
)
4059 IoReadPartitionTable(
4060 _In_ PDEVICE_OBJECT DeviceObject
,
4061 _In_ ULONG SectorSize
,
4062 _In_ BOOLEAN ReturnRecognizedPartitions
,
4063 _Out_
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
4065 _IRQL_requires_max_(PASSIVE_LEVEL
)
4069 IoSetPartitionInformation(
4070 _In_ PDEVICE_OBJECT DeviceObject
,
4071 _In_ ULONG SectorSize
,
4072 _In_ ULONG PartitionNumber
,
4073 _In_ ULONG PartitionType
);
4075 _IRQL_requires_max_(PASSIVE_LEVEL
)
4079 IoWritePartitionTable(
4080 _In_ PDEVICE_OBJECT DeviceObject
,
4081 _In_ ULONG SectorSize
,
4082 _In_ ULONG SectorsPerTrack
,
4083 _In_ ULONG NumberOfHeads
,
4084 _In_
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
4090 _In_ PDEVICE_OBJECT DeviceObject
,
4091 _In_opt_
struct _CREATE_DISK
* Disk
);
4096 IoReadDiskSignature(
4097 _In_ PDEVICE_OBJECT DeviceObject
,
4098 _In_ ULONG BytesPerSector
,
4099 _Out_ PDISK_SIGNATURE Signature
);
4101 _IRQL_requires_max_(PASSIVE_LEVEL
)
4105 IoReadPartitionTableEx(
4106 _In_ PDEVICE_OBJECT DeviceObject
,
4107 _Out_
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
4109 _IRQL_requires_max_(PASSIVE_LEVEL
)
4113 IoSetPartitionInformationEx(
4114 _In_ PDEVICE_OBJECT DeviceObject
,
4115 _In_ ULONG PartitionNumber
,
4116 _In_
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
4121 IoSetSystemPartition(
4122 _In_ PUNICODE_STRING VolumeNameString
);
4127 IoVerifyPartitionTable(
4128 _In_ PDEVICE_OBJECT DeviceObject
,
4129 _In_ BOOLEAN FixErrors
);
4134 IoVolumeDeviceToDosName(
4135 _In_ PVOID VolumeDeviceObject
,
4136 _Out_
_When_(return==0,
4137 _At_(DosName
->Buffer
, __drv_allocatesMem(Mem
)))
4138 PUNICODE_STRING DosName
);
4140 _IRQL_requires_max_(PASSIVE_LEVEL
)
4144 IoWritePartitionTableEx(
4145 _In_ PDEVICE_OBJECT DeviceObject
,
4146 _In_reads_(_Inexpressible_(FIELD_OFFSET(DRIVE_LAYOUT_INFORMATION_EX
, PartitionEntry
[0])))
4147 struct _DRIVE_LAYOUT_INFORMATION_EX
*DriveLayout
);
4152 IoCreateFileSpecifyDeviceObjectHint(
4153 _Out_ PHANDLE FileHandle
,
4154 _In_ ACCESS_MASK DesiredAccess
,
4155 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
4156 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
4157 _In_opt_ PLARGE_INTEGER AllocationSize
,
4158 _In_ ULONG FileAttributes
,
4159 _In_ ULONG ShareAccess
,
4160 _In_ ULONG Disposition
,
4161 _In_ ULONG CreateOptions
,
4162 _In_opt_ PVOID EaBuffer
,
4163 _In_ ULONG EaLength
,
4164 _In_ CREATE_FILE_TYPE CreateFileType
,
4165 _In_opt_ PVOID InternalParameters
,
4167 _In_opt_ PVOID DeviceObject
);
4172 IoAttachDeviceToDeviceStackSafe(
4173 _In_ PDEVICE_OBJECT SourceDevice
,
4174 _In_ PDEVICE_OBJECT TargetDevice
,
4175 _Outptr_ PDEVICE_OBJECT
*AttachedToDeviceObject
);
4178 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4180 #if (NTDDI_VERSION >= NTDDI_WS03)
4184 IoGetPagingIoPriority(
4187 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
4188 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
4192 IoTranslateBusAddress(
4193 _In_ INTERFACE_TYPE InterfaceType
,
4194 _In_ ULONG BusNumber
,
4195 _In_ PHYSICAL_ADDRESS BusAddress
,
4196 _Inout_ PULONG AddressSpace
,
4197 _Out_ PPHYSICAL_ADDRESS TranslatedAddress
);
4198 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
4200 #if (NTDDI_VERSION >= NTDDI_VISTA)
4204 IoUpdateDiskGeometry(
4205 _In_ PDEVICE_OBJECT DeviceObject
,
4206 _In_
struct _DISK_GEOMETRY_EX
* OldDiskGeometry
,
4207 _In_
struct _DISK_GEOMETRY_EX
* NewDiskGeometry
);
4209 PTXN_PARAMETER_BLOCK
4211 IoGetTransactionParameterBlock(
4212 _In_ PFILE_OBJECT FileObject
);
4218 _Out_ PHANDLE FileHandle
,
4219 _In_ ACCESS_MASK DesiredAccess
,
4220 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
4221 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
4222 _In_opt_ PLARGE_INTEGER AllocationSize
,
4223 _In_ ULONG FileAttributes
,
4224 _In_ ULONG ShareAccess
,
4225 _In_ ULONG Disposition
,
4226 _In_ ULONG CreateOptions
,
4227 _In_opt_ PVOID EaBuffer
,
4228 _In_ ULONG EaLength
,
4229 _In_ CREATE_FILE_TYPE CreateFileType
,
4230 _In_opt_ PVOID InternalParameters
,
4232 _In_opt_ PIO_DRIVER_CREATE_CONTEXT DriverContext
);
4236 IoSetIrpExtraCreateParameter(
4238 _In_
struct _ECP_LIST
*ExtraCreateParameter
);
4242 IoClearIrpExtraCreateParameter(
4247 IoGetIrpExtraCreateParameter(
4249 _Outptr_result_maybenull_
struct _ECP_LIST
**ExtraCreateParameter
);
4253 IoIsFileObjectIgnoringSharing(
4254 _In_ PFILE_OBJECT FileObject
);
4256 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4258 #if (NTDDI_VERSION >= NTDDI_WIN7)
4262 IoSetFileObjectIgnoreSharing(
4263 _In_ PFILE_OBJECT FileObject
);
4265 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4267 /******************************************************************************
4268 * Kernel Debugger Functions *
4269 ******************************************************************************/
4275 _Out_writes_bytes_(MaximumResponseLength
) PCH Response
,
4276 _In_ ULONG MaximumResponseLength
);
4278 /******************************************************************************
4279 * Kernel Functions *
4280 ******************************************************************************/
4282 _IRQL_requires_min_(PASSIVE_LEVEL
)
4283 _IRQL_requires_max_(DISPATCH_LEVEL
)
4287 KeInvalidateRangeAllCaches(
4288 _In_ PVOID BaseAddress
,
4291 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4298 _In_ KDPC_IMPORTANCE Importance
);
4300 _IRQL_requires_max_(DISPATCH_LEVEL
)
4305 _Inout_ PRKEVENT Event
,
4306 _In_ KPRIORITY Increment
,
4309 _IRQL_requires_min_(PASSIVE_LEVEL
)
4310 _IRQL_requires_max_(DISPATCH_LEVEL
)
4314 KeSetBasePriorityThread(
4315 _Inout_ PRKTHREAD Thread
,
4316 _In_ LONG Increment
);
4318 _Acquires_lock_(_Global_critical_region_
)
4319 _IRQL_requires_max_(APC_LEVEL
)
4323 KeEnterCriticalRegion(VOID
);
4325 _Releases_lock_(_Global_critical_region_
)
4326 _IRQL_requires_max_(APC_LEVEL
)
4330 KeLeaveCriticalRegion(VOID
);
4337 _In_ ULONG BugCheckCode
);
4338 #if defined(SINGLE_GROUP_LEGACY_API)
4344 KeSetTargetProcessorDpc(
4351 KeQueryActiveProcessors(VOID
);
4352 #endif /* defined(SINGLE_GROUP_LEGACY_API) */
4355 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4357 #if (NTDDI_VERSION >= NTDDI_WINXP)
4359 _IRQL_requires_min_(PASSIVE_LEVEL
)
4360 _IRQL_requires_max_(DISPATCH_LEVEL
)
4364 KeAreApcsDisabled(VOID
);
4366 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4368 #if (NTDDI_VERSION >= NTDDI_WS03)
4374 KeInvalidateAllCaches(VOID
);
4375 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
4376 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
4378 _Must_inspect_result_
4379 _IRQL_requires_max_(APC_LEVEL
)
4383 KeExpandKernelStackAndCallout(
4384 _In_ PEXPAND_STACK_CALLOUT Callout
,
4385 _In_opt_ PVOID Parameter
,
4388 _Acquires_lock_(_Global_critical_region_
)
4389 _IRQL_requires_max_(APC_LEVEL
)
4393 KeEnterGuardedRegion(VOID
);
4395 _Releases_lock_(_Global_critical_region_
)
4396 _IRQL_requires_max_(APC_LEVEL
)
4400 KeLeaveGuardedRegion(VOID
);
4401 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
4403 #if (NTDDI_VERSION >= NTDDI_VISTA)
4404 #if defined(SINGLE_GROUP_LEGACY_API)
4409 KeQueryActiveProcessorCount(
4410 _Out_opt_ PKAFFINITY ActiveProcessors
);
4415 KeQueryMaximumProcessorCount(VOID
);
4416 #endif /* SINGLE_GROUP_LEGACY_API */
4418 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4420 #if (NTDDI_VERSION >= NTDDI_WIN7)
4425 KeQueryActiveProcessorCountEx(
4426 _In_ USHORT GroupNumber
);
4431 KeQueryMaximumProcessorCountEx(
4432 _In_ USHORT GroupNumber
);
4437 KeQueryActiveGroupCount(VOID
);
4442 KeQueryMaximumGroupCount(VOID
);
4447 KeQueryGroupAffinity(
4448 _In_ USHORT GroupNumber
);
4453 KeGetCurrentProcessorNumberEx(
4454 _Out_opt_ PPROCESSOR_NUMBER ProcNumber
);
4459 KeQueryNodeActiveAffinity(
4460 _In_ USHORT NodeNumber
,
4461 _Out_opt_ PGROUP_AFFINITY Affinity
,
4462 _Out_opt_ PUSHORT Count
);
4467 KeQueryNodeMaximumProcessorCount(
4468 _In_ USHORT NodeNumber
);
4473 KeQueryHighestNodeNumber(VOID
);
4478 KeGetCurrentNodeNumber(VOID
);
4480 _IRQL_requires_max_(DISPATCH_LEVEL
)
4484 KeQueryLogicalProcessorRelationship(
4485 _In_opt_ PPROCESSOR_NUMBER ProcessorNumber
,
4486 _In_ LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
4487 _Out_writes_bytes_opt_(*Length
) PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information
,
4488 _Inout_ PULONG Length
);
4490 _IRQL_requires_max_(APC_LEVEL
)
4494 KeSetHardwareCounterConfiguration(
4495 _In_reads_(Count
) PHARDWARE_COUNTER CounterArray
,
4498 _IRQL_requires_max_(APC_LEVEL
)
4502 KeQueryHardwareCounterConfiguration(
4503 _Out_writes_to_(MaximumCount
, *Count
) PHARDWARE_COUNTER CounterArray
,
4504 _In_ ULONG MaximumCount
,
4505 _Out_ PULONG Count
);
4506 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4507 /******************************************************************************
4508 * Memory manager Functions *
4509 ******************************************************************************/
4511 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4513 _IRQL_requires_max_ (PASSIVE_LEVEL
)
4515 PPHYSICAL_MEMORY_RANGE
4517 MmGetPhysicalMemoryRanges(VOID
);
4522 MmGetPhysicalAddress(
4523 _In_ PVOID BaseAddress
);
4528 MmIsNonPagedSystemAddressValid(
4529 _In_ PVOID VirtualAddress
);
4531 _Must_inspect_result_
4532 _IRQL_requires_max_(APC_LEVEL
)
4533 _Out_writes_bytes_opt_(NumberOfBytes
)
4537 MmAllocateNonCachedMemory(
4538 _In_ SIZE_T NumberOfBytes
);
4540 _IRQL_requires_max_(APC_LEVEL
)
4544 MmFreeNonCachedMemory(
4545 _In_reads_bytes_(NumberOfBytes
) PVOID BaseAddress
,
4546 _In_ SIZE_T NumberOfBytes
);
4551 MmGetVirtualForPhysical(
4552 _In_ PHYSICAL_ADDRESS PhysicalAddress
);
4554 _Must_inspect_result_
4555 _IRQL_requires_max_(APC_LEVEL
)
4559 MmMapUserAddressesToPage(
4560 _In_reads_bytes_(NumberOfBytes
) PVOID BaseAddress
,
4561 _In_ SIZE_T NumberOfBytes
,
4562 _In_ PVOID PageAddress
);
4564 _Must_inspect_result_
4565 _IRQL_requires_max_(APC_LEVEL
)
4566 _Out_writes_bytes_opt_(NumberOfBytes
)
4571 _In_ PHYSICAL_ADDRESS PhysicalAddress
,
4572 _In_ SIZE_T NumberOfBytes
,
4573 _In_ MEMORY_CACHING_TYPE CacheType
);
4575 _Must_inspect_result_
4576 _IRQL_requires_max_(APC_LEVEL
)
4580 MmMapViewInSessionSpace(
4582 _Outptr_result_bytebuffer_(*ViewSize
) PVOID
*MappedBase
,
4583 _Inout_ PSIZE_T ViewSize
);
4585 _Must_inspect_result_
4586 _IRQL_requires_max_(APC_LEVEL
)
4590 MmMapViewInSystemSpace(
4592 _Outptr_result_bytebuffer_(*ViewSize
) PVOID
*MappedBase
,
4593 _Inout_ PSIZE_T ViewSize
);
4595 _IRQL_requires_max_(DISPATCH_LEVEL
)
4600 _In_ PVOID VirtualAddress
);
4605 MmIsThisAnNtAsSystem(VOID
);
4607 _IRQL_requires_max_(APC_LEVEL
)
4611 MmLockPagableSectionByHandle(
4612 _In_ PVOID ImageSectionHandle
);
4614 _IRQL_requires_max_(APC_LEVEL
)
4618 MmUnmapViewInSessionSpace(
4619 _In_ PVOID MappedBase
);
4621 _IRQL_requires_max_(APC_LEVEL
)
4625 MmUnmapViewInSystemSpace(
4626 _In_ PVOID MappedBase
);
4628 _IRQL_requires_max_(APC_LEVEL
)
4632 MmUnsecureVirtualMemory(
4633 _In_ HANDLE SecureHandle
);
4635 _IRQL_requires_max_ (PASSIVE_LEVEL
)
4639 MmRemovePhysicalMemory(
4640 _In_ PPHYSICAL_ADDRESS StartAddress
,
4641 _Inout_ PLARGE_INTEGER NumberOfBytes
);
4643 _Must_inspect_result_
4644 _IRQL_requires_max_(APC_LEVEL
)
4648 MmSecureVirtualMemory(
4649 __in_data_source(USER_MODE
) _In_reads_bytes_ (Size
) PVOID Address
,
4650 _In_
__in_data_source(USER_MODE
) SIZE_T Size
,
4651 _In_ ULONG ProbeMode
);
4653 _IRQL_requires_max_(APC_LEVEL
)
4657 MmUnmapVideoDisplay(
4658 _In_reads_bytes_(NumberOfBytes
) PVOID BaseAddress
,
4659 _In_ SIZE_T NumberOfBytes
);
4661 _IRQL_requires_max_ (PASSIVE_LEVEL
)
4665 MmAddPhysicalMemory(
4666 _In_ PPHYSICAL_ADDRESS StartAddress
,
4667 _Inout_ PLARGE_INTEGER NumberOfBytes
);
4669 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4673 #if (NTDDI_VERSION >= NTDDI_WS03)
4675 _Must_inspect_result_
4676 _IRQL_requires_max_(PASSIVE_LEVEL
)
4680 MmCreateMirror(VOID
);
4681 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
4683 #if (NTDDI_VERSION >= NTDDI_VISTA)
4684 _Must_inspect_result_
4685 _IRQL_requires_max_(APC_LEVEL
)
4688 MmRotatePhysicalView(
4689 _In_ PVOID VirtualAddress
,
4690 _Inout_ PSIZE_T NumberOfBytes
,
4691 _In_opt_ PMDLX NewMdl
,
4692 _In_ MM_ROTATE_DIRECTION Direction
,
4693 _In_ PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction
,
4694 _In_opt_ PVOID Context
);
4695 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4697 /******************************************************************************
4698 * Process Manager Functions *
4699 ******************************************************************************/
4706 _Out_ PHANDLE ProcessHandle
,
4707 _In_ ACCESS_MASK DesiredAccess
,
4708 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
4709 _In_opt_ PCLIENT_ID ClientId
);
4715 NtQueryInformationProcess(
4716 _In_ HANDLE ProcessHandle
,
4717 _In_ PROCESSINFOCLASS ProcessInformationClass
,
4718 _Out_ PVOID ProcessInformation
,
4719 _In_ ULONG ProcessInformationLength
,
4720 _Out_opt_ PULONG ReturnLength
);
4722 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4725 _IRQL_requires_max_(PASSIVE_LEVEL
)
4729 PsSetCreateProcessNotifyRoutine(
4730 _In_ PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
4731 _In_ BOOLEAN Remove
);
4733 _IRQL_requires_max_(PASSIVE_LEVEL
)
4737 PsSetCreateThreadNotifyRoutine(
4738 _In_ PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4740 _IRQL_requires_max_(PASSIVE_LEVEL
)
4744 PsSetLoadImageNotifyRoutine(
4745 _In_ PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4750 PsGetCurrentProcessId(VOID
);
4752 _IRQL_requires_max_(DISPATCH_LEVEL
)
4756 PsGetCurrentThreadId(VOID
);
4762 OUT PULONG MajorVersion OPTIONAL
,
4763 OUT PULONG MinorVersion OPTIONAL
,
4764 OUT PULONG BuildNumber OPTIONAL
,
4765 OUT PUNICODE_STRING CSDVersion OPTIONAL
);
4766 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4767 #if (NTDDI_VERSION >= NTDDI_WINXP)
4769 _IRQL_requires_max_(DISPATCH_LEVEL
)
4774 _In_ PEPROCESS Process
);
4776 _IRQL_requires_max_(DISPATCH_LEVEL
)
4781 _In_ PETHREAD Thread
);
4786 PsRemoveCreateThreadNotifyRoutine(
4787 _In_ PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4789 _IRQL_requires_max_(PASSIVE_LEVEL
)
4793 PsRemoveLoadImageNotifyRoutine(
4794 _In_ PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4796 _IRQL_requires_max_(DISPATCH_LEVEL
)
4800 PsGetProcessCreateTimeQuadPart(
4801 _In_ PEPROCESS Process
);
4802 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4804 #if (NTDDI_VERSION >= NTDDI_WS03)
4808 PsGetThreadProcessId(
4809 IN PETHREAD Thread
);
4810 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
4812 #if (NTDDI_VERSION >= NTDDI_VISTA)
4817 PsSetCurrentThreadPrefetching(
4818 IN BOOLEAN Prefetching
);
4823 PsIsCurrentThreadPrefetching(VOID
);
4825 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4827 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
4831 PsSetCreateProcessNotifyRoutineEx(
4832 IN PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine
,
4834 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
4835 /******************************************************************************
4836 * Runtime Library Functions *
4837 ******************************************************************************/
4840 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4843 #ifndef RTL_USE_AVL_TABLES
4848 RtlInitializeGenericTable(
4849 _Out_ PRTL_GENERIC_TABLE Table
,
4850 _In_ PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
,
4851 _In_ PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
,
4852 _In_ PRTL_GENERIC_FREE_ROUTINE FreeRoutine
,
4853 _In_opt_ PVOID TableContext
);
4858 RtlInsertElementGenericTable(
4859 _In_ PRTL_GENERIC_TABLE Table
,
4860 _In_reads_bytes_(BufferSize
) PVOID Buffer
,
4861 _In_ CLONG BufferSize
,
4862 _Out_opt_ PBOOLEAN NewElement
);
4867 RtlInsertElementGenericTableFull(
4868 _In_ PRTL_GENERIC_TABLE Table
,
4869 _In_reads_bytes_(BufferSize
) PVOID Buffer
,
4870 _In_ CLONG BufferSize
,
4871 _Out_opt_ PBOOLEAN NewElement
,
4872 _In_ PVOID NodeOrParent
,
4873 _In_ TABLE_SEARCH_RESULT SearchResult
);
4878 RtlDeleteElementGenericTable(
4879 _In_ PRTL_GENERIC_TABLE Table
,
4882 _Must_inspect_result_
4886 RtlLookupElementGenericTable(
4887 _In_ PRTL_GENERIC_TABLE Table
,
4893 RtlLookupElementGenericTableFull(
4894 _In_ PRTL_GENERIC_TABLE Table
,
4896 _Out_ PVOID
*NodeOrParent
,
4897 _Out_ TABLE_SEARCH_RESULT
*SearchResult
);
4899 _Must_inspect_result_
4903 RtlEnumerateGenericTable(
4904 _In_ PRTL_GENERIC_TABLE Table
,
4905 _In_ BOOLEAN Restart
);
4907 _Must_inspect_result_
4911 RtlEnumerateGenericTableWithoutSplaying(
4912 _In_ PRTL_GENERIC_TABLE Table
,
4913 _Inout_ PVOID
*RestartKey
);
4915 _Must_inspect_result_
4919 RtlGetElementGenericTable(
4920 _In_ PRTL_GENERIC_TABLE Table
,
4926 RtlNumberGenericTableElements(
4927 _In_ PRTL_GENERIC_TABLE Table
);
4929 _Must_inspect_result_
4933 RtlIsGenericTableEmpty(
4934 _In_ PRTL_GENERIC_TABLE Table
);
4936 #endif /* !RTL_USE_AVL_TABLES */
4938 #define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT 8
4944 _Inout_ PRTL_SPLAY_LINKS Links
);
4950 _In_ PRTL_SPLAY_LINKS Links
);
4956 _In_ PRTL_SPLAY_LINKS Links
,
4957 _Inout_ PRTL_SPLAY_LINKS
*Root
);
4959 _Must_inspect_result_
4963 RtlSubtreeSuccessor(
4964 _In_ PRTL_SPLAY_LINKS Links
);
4966 _Must_inspect_result_
4970 RtlSubtreePredecessor(
4971 _In_ PRTL_SPLAY_LINKS Links
);
4973 _Must_inspect_result_
4978 _In_ PRTL_SPLAY_LINKS Links
);
4980 _Must_inspect_result_
4985 _In_ PRTL_SPLAY_LINKS Links
);
4987 _IRQL_requires_max_(PASSIVE_LEVEL
)
4988 _Must_inspect_result_
4992 RtlPrefixUnicodeString(
4993 _In_ PCUNICODE_STRING String1
,
4994 _In_ PCUNICODE_STRING String2
,
4995 _In_ BOOLEAN CaseInSensitive
);
4997 _IRQL_requires_max_(PASSIVE_LEVEL
)
5002 _Inout_ PSTRING DestinationString
,
5003 _In_
const STRING
*SourceString
);
5005 _IRQL_requires_max_(PASSIVE_LEVEL
)
5006 _When_(AllocateDestinationString
, _Must_inspect_result_
)
5010 RtlUpcaseUnicodeString(
5011 _When_(AllocateDestinationString
, _Out_
_At_(DestinationString
->Buffer
, __drv_allocatesMem(Mem
)))
5012 _When_(!AllocateDestinationString
, _Inout_
)
5013 PUNICODE_STRING DestinationString
,
5014 _In_ PCUNICODE_STRING SourceString
,
5015 _In_ BOOLEAN AllocateDestinationString
);
5017 _IRQL_requires_max_(APC_LEVEL
)
5022 _Inout_ PACCESS_MASK AccessMask
,
5023 _In_ PGENERIC_MAPPING GenericMapping
);
5025 _IRQL_requires_max_(PASSIVE_LEVEL
)
5029 RtlVolumeDeviceToDosName(
5030 _In_ PVOID VolumeDeviceObject
,
5031 _Out_ PUNICODE_STRING DosName
);
5033 _IRQL_requires_max_(PASSIVE_LEVEL
)
5034 _Must_inspect_result_
5039 _In_
const STRING
*String1
,
5040 _In_
const STRING
*String2
,
5041 _In_ BOOLEAN CaseInSensitive
);
5047 _Out_ PSTRING DestinationString
,
5048 _In_opt_
const STRING
*SourceString
);
5050 _IRQL_requires_max_(PASSIVE_LEVEL
)
5051 _Must_inspect_result_
5056 _In_
const STRING
*String1
,
5057 _In_
const STRING
*String2
,
5058 _In_ BOOLEAN CaseInSensitive
);
5060 _IRQL_requires_max_(PASSIVE_LEVEL
)
5066 _In_opt_ ULONG Base
,
5067 _Out_ PULONG Value
);
5069 _IRQL_requires_max_(PASSIVE_LEVEL
)
5074 _In_ CHAR Character
);
5080 _Out_writes_(Count
- (Flags
>> RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT
))
5086 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5089 #if (NTDDI_VERSION >= NTDDI_WINXP)
5096 RtlInitializeGenericTableAvl(
5097 _Out_ PRTL_AVL_TABLE Table
,
5098 _In_ PRTL_AVL_COMPARE_ROUTINE CompareRoutine
,
5099 _In_opt_ PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
,
5100 _In_opt_ PRTL_AVL_FREE_ROUTINE FreeRoutine
,
5101 _In_opt_ PVOID TableContext
);
5106 RtlInsertElementGenericTableAvl(
5107 _In_ PRTL_AVL_TABLE Table
,
5108 _In_reads_bytes_(BufferSize
) PVOID Buffer
,
5109 _In_ CLONG BufferSize
,
5110 _Out_opt_ PBOOLEAN NewElement
);
5115 RtlInsertElementGenericTableFullAvl(
5116 _In_ PRTL_AVL_TABLE Table
,
5117 _In_reads_bytes_(BufferSize
) PVOID Buffer
,
5118 _In_ CLONG BufferSize
,
5119 _Out_opt_ PBOOLEAN NewElement
,
5120 _In_ PVOID NodeOrParent
,
5121 _In_ TABLE_SEARCH_RESULT SearchResult
);
5126 RtlDeleteElementGenericTableAvl(
5127 _In_ PRTL_AVL_TABLE Table
,
5130 _Must_inspect_result_
5134 RtlLookupElementGenericTableAvl(
5135 _In_ PRTL_AVL_TABLE Table
,
5141 RtlLookupElementGenericTableFullAvl(
5142 _In_ PRTL_AVL_TABLE Table
,
5144 _Out_ PVOID
*NodeOrParent
,
5145 _Out_ TABLE_SEARCH_RESULT
*SearchResult
);
5147 _Must_inspect_result_
5151 RtlEnumerateGenericTableAvl(
5152 _In_ PRTL_AVL_TABLE Table
,
5153 _In_ BOOLEAN Restart
);
5155 _Must_inspect_result_
5159 RtlEnumerateGenericTableWithoutSplayingAvl(
5160 _In_ PRTL_AVL_TABLE Table
,
5161 _Inout_ PVOID
*RestartKey
);
5163 _Must_inspect_result_
5167 RtlLookupFirstMatchingElementGenericTableAvl(
5168 _In_ PRTL_AVL_TABLE Table
,
5170 _Out_ PVOID
*RestartKey
);
5172 _Must_inspect_result_
5176 RtlEnumerateGenericTableLikeADirectory(
5177 _In_ PRTL_AVL_TABLE Table
,
5178 _In_opt_ PRTL_AVL_MATCH_FUNCTION MatchFunction
,
5179 _In_opt_ PVOID MatchData
,
5180 _In_ ULONG NextFlag
,
5181 _Inout_ PVOID
*RestartKey
,
5182 _Inout_ PULONG DeleteCount
,
5185 _Must_inspect_result_
5189 RtlGetElementGenericTableAvl(
5190 _In_ PRTL_AVL_TABLE Table
,
5196 RtlNumberGenericTableElementsAvl(
5197 _In_ PRTL_AVL_TABLE Table
);
5199 _Must_inspect_result_
5203 RtlIsGenericTableEmptyAvl(
5204 _In_ PRTL_AVL_TABLE Table
);
5207 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5210 #if (NTDDI_VERSION >= NTDDI_VISTA)
5213 _IRQL_requires_max_(APC_LEVEL
)
5217 RtlRunOnceInitialize(
5218 _Out_ PRTL_RUN_ONCE RunOnce
);
5220 _IRQL_requires_max_(APC_LEVEL
)
5221 _Maybe_raises_SEH_exception_
5225 RtlRunOnceExecuteOnce(
5226 _Inout_ PRTL_RUN_ONCE RunOnce
,
5227 _In_ __inner_callback PRTL_RUN_ONCE_INIT_FN InitFn
,
5228 _Inout_opt_ PVOID Parameter
,
5229 _Outptr_opt_result_maybenull_ PVOID
*Context
);
5231 _IRQL_requires_max_(APC_LEVEL
)
5232 _Must_inspect_result_
5236 RtlRunOnceBeginInitialize(
5237 _Inout_ PRTL_RUN_ONCE RunOnce
,
5239 _Outptr_opt_result_maybenull_ PVOID
*Context
);
5241 _IRQL_requires_max_(APC_LEVEL
)
5246 _Inout_ PRTL_RUN_ONCE RunOnce
,
5248 _In_opt_ PVOID Context
);
5254 _In_ ULONG OSMajorVersion
,
5255 _In_ ULONG OSMinorVersion
,
5256 _In_ ULONG SpMajorVersion
,
5257 _In_ ULONG SpMinorVersion
,
5258 _Out_ PULONG ReturnedProductType
);
5261 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
5263 #if (NTDDI_VERSION >= NTDDI_WIN7)
5266 _Must_inspect_result_
5271 _Inout_
_When_(NULL
== *HashTable
, __drv_allocatesMem(Mem
))
5272 PRTL_DYNAMIC_HASH_TABLE
*HashTable
,
5274 _In_ _Reserved_ ULONG Flags
);
5280 _In_
_When_((HashTable
->Flags
& RTL_HASH_ALLOCATED_HEADER
), __drv_freesMem(Mem
) _Post_invalid_
)
5281 PRTL_DYNAMIC_HASH_TABLE HashTable
);
5286 RtlInsertEntryHashTable(
5287 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
,
5288 _In_ __drv_aliasesMem PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry
,
5289 _In_ ULONG_PTR Signature
,
5290 _Inout_opt_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
);
5295 RtlRemoveEntryHashTable(
5296 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
,
5297 _In_ PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry
,
5298 _Inout_opt_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
);
5300 _Must_inspect_result_
5302 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5304 RtlLookupEntryHashTable(
5305 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
,
5306 _In_ ULONG_PTR Signature
,
5307 _Out_opt_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
);
5309 _Must_inspect_result_
5311 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5313 RtlGetNextEntryHashTable(
5314 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
,
5315 _In_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
);
5320 RtlInitEnumerationHashTable(
5321 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
,
5322 _Out_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5324 _Must_inspect_result_
5326 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5328 RtlEnumerateEntryHashTable(
5329 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
,
5330 _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5335 RtlEndEnumerationHashTable(
5336 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
,
5337 _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5342 RtlInitWeakEnumerationHashTable(
5343 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
,
5344 _Out_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5346 _Must_inspect_result_
5348 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5350 RtlWeaklyEnumerateEntryHashTable(
5351 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
,
5352 _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5357 RtlEndWeakEnumerationHashTable(
5358 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
,
5359 _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5365 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
);
5370 RtlContractHashTable(
5371 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
);
5374 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5377 #if defined(_AMD64_) || defined(_IA64_)
5381 //DECLSPEC_DEPRECATED_DDK_WINXP
5385 RtlLargeIntegerDivide(
5386 _In_ LARGE_INTEGER Dividend
,
5387 _In_ LARGE_INTEGER Divisor
,
5388 _Out_opt_ PLARGE_INTEGER Remainder
)
5391 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
5393 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
5399 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5403 RtlLargeIntegerDivide(
5404 _In_ LARGE_INTEGER Dividend
,
5405 _In_ LARGE_INTEGER Divisor
,
5406 _Out_opt_ PLARGE_INTEGER Remainder
);
5410 #endif /* defined(_AMD64_) || defined(_IA64_) */
5414 #ifdef RTL_USE_AVL_TABLES
5416 #define RtlInitializeGenericTable RtlInitializeGenericTableAvl
5417 #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
5418 #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
5419 #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
5420 #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
5421 #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
5422 #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
5423 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
5424 #define RtlGetElementGenericTable RtlGetElementGenericTableAvl
5425 #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
5426 #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
5428 #endif /* RTL_USE_AVL_TABLES */
5430 #define RtlInitializeSplayLinks(Links) { \
5431 PRTL_SPLAY_LINKS _SplayLinks; \
5432 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
5433 _SplayLinks->Parent = _SplayLinks; \
5434 _SplayLinks->LeftChild = NULL; \
5435 _SplayLinks->RightChild = NULL; \
5438 #define RtlIsLeftChild(Links) \
5439 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
5441 #define RtlIsRightChild(Links) \
5442 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
5444 #define RtlRightChild(Links) \
5445 ((PRTL_SPLAY_LINKS)(Links))->RightChild
5447 #define RtlIsRoot(Links) \
5448 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
5450 #define RtlLeftChild(Links) \
5451 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
5453 #define RtlParent(Links) \
5454 ((PRTL_SPLAY_LINKS)(Links))->Parent
5456 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
5458 PRTL_SPLAY_LINKS _SplayParent; \
5459 PRTL_SPLAY_LINKS _SplayChild; \
5460 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
5461 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
5462 _SplayParent->LeftChild = _SplayChild; \
5463 _SplayChild->Parent = _SplayParent; \
5466 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
5468 PRTL_SPLAY_LINKS _SplayParent; \
5469 PRTL_SPLAY_LINKS _SplayChild; \
5470 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
5471 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
5472 _SplayParent->RightChild = _SplayChild; \
5473 _SplayChild->Parent = _SplayParent; \
5476 #if !defined(MIDL_PASS)
5481 RtlConvertLongToLuid(
5487 Temp
.QuadPart
= Val
;
5488 Luid
.LowPart
= Temp
.u
.LowPart
;
5489 Luid
.HighPart
= Temp
.u
.HighPart
;
5496 RtlConvertUlongToLuid(
5506 #endif /* !defined(MIDL_PASS) */
5508 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
5509 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
5510 *CallersAddress = (PVOID)_ReturnAddress(); \
5511 *CallersCaller = NULL;
5513 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5517 RtlGetCallersAddress(
5518 _Out_ PVOID
*CallersAddress
,
5519 _Out_ PVOID
*CallersCaller
);
5523 #if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
5525 #if (NTDDI_VERSION >= NTDDI_WIN7)
5530 RtlInitHashTableContext(
5531 _Inout_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
)
5533 Context
->ChainHead
= NULL
;
5534 Context
->PrevLinkage
= NULL
;
5540 RtlInitHashTableContextFromEnumerator(
5541 _Inout_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
,
5542 _In_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
)
5544 Context
->ChainHead
= Enumerator
->ChainHead
;
5545 Context
->PrevLinkage
= Enumerator
->HashEntry
.Linkage
.Blink
;
5551 RtlReleaseHashTableContext(
5552 _Inout_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
)
5554 UNREFERENCED_PARAMETER(Context
);
5561 RtlTotalBucketsHashTable(
5562 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
)
5564 return HashTable
->TableSize
;
5570 RtlNonEmptyBucketsHashTable(
5571 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
)
5573 return HashTable
->NonEmptyBuckets
;
5579 RtlEmptyBucketsHashTable(
5580 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
)
5582 return HashTable
->TableSize
- HashTable
->NonEmptyBuckets
;
5588 RtlTotalEntriesHashTable(
5589 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
)
5591 return HashTable
->NumEntries
;
5597 RtlActiveEnumeratorsHashTable(
5598 _In_ PRTL_DYNAMIC_HASH_TABLE HashTable
)
5600 return HashTable
->NumEnumerators
;
5603 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5605 #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
5607 /******************************************************************************
5608 * Security Manager Functions *
5609 ******************************************************************************/
5611 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5613 _IRQL_requires_max_(PASSIVE_LEVEL
)
5617 SeSinglePrivilegeCheck(
5618 _In_ LUID PrivilegeValue
,
5619 _In_ KPROCESSOR_MODE PreviousMode
);
5621 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5624 /******************************************************************************
5626 ******************************************************************************/
5629 _IRQL_requires_max_(PASSIVE_LEVEL
)
5633 ZwAllocateLocallyUniqueId(
5636 _IRQL_requires_max_(PASSIVE_LEVEL
)
5641 _In_opt_ HANDLE ProcessHandle
,
5642 _In_ NTSTATUS ExitStatus
);
5644 _IRQL_requires_max_(PASSIVE_LEVEL
)
5649 _Out_ PHANDLE ProcessHandle
,
5650 _In_ ACCESS_MASK DesiredAccess
,
5651 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
5652 _In_opt_ PCLIENT_ID ClientId
);
5654 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5656 _IRQL_requires_max_(PASSIVE_LEVEL
)
5660 _In_ HANDLE TimerHandle
,
5661 _Out_opt_ PBOOLEAN CurrentState
);
5663 _IRQL_requires_max_(PASSIVE_LEVEL
)
5664 _When_(return == 0, __drv_allocatesMem(TimerObject
))
5668 _Out_ PHANDLE TimerHandle
,
5669 _In_ ACCESS_MASK DesiredAccess
,
5670 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
5671 _In_ TIMER_TYPE TimerType
);
5673 _IRQL_requires_max_(PASSIVE_LEVEL
)
5677 _Out_ PHANDLE TimerHandle
,
5678 _In_ ACCESS_MASK DesiredAccess
,
5679 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
5681 _IRQL_requires_max_(PASSIVE_LEVEL
)
5685 ZwSetInformationThread(
5686 _In_ HANDLE ThreadHandle
,
5687 _In_ THREADINFOCLASS ThreadInformationClass
,
5688 _In_reads_bytes_(ThreadInformationLength
) PVOID ThreadInformation
,
5689 _In_ ULONG ThreadInformationLength
);
5691 _IRQL_requires_max_(PASSIVE_LEVEL
)
5695 _In_ HANDLE TimerHandle
,
5696 _In_ PLARGE_INTEGER DueTime
,
5697 _In_opt_ PTIMER_APC_ROUTINE TimerApcRoutine
,
5698 _In_opt_ PVOID TimerContext
,
5699 _In_ BOOLEAN ResumeTimer
,
5700 _In_opt_ LONG Period
,
5701 _Out_opt_ PBOOLEAN PreviousState
);
5703 _IRQL_requires_max_(PASSIVE_LEVEL
)
5708 _In_ PUNICODE_STRING String
);
5710 _IRQL_requires_max_(PASSIVE_LEVEL
)
5715 _In_ POWER_INFORMATION_LEVEL PowerInformationLevel
,
5716 _In_reads_bytes_opt_(InputBufferLength
) PVOID InputBuffer
,
5717 _In_ ULONG InputBufferLength
,
5718 _Out_writes_bytes_opt_(OutputBufferLength
) PVOID OutputBuffer
,
5719 _In_ ULONG OutputBufferLength
);
5721 _IRQL_requires_max_(PASSIVE_LEVEL
)
5725 ZwQueryVolumeInformationFile(
5726 _In_ HANDLE FileHandle
,
5727 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
5728 _Out_writes_bytes_(Length
) PVOID FsInformation
,
5730 _In_ FS_INFORMATION_CLASS FsInformationClass
);
5732 _IRQL_requires_max_(PASSIVE_LEVEL
)
5736 ZwDeviceIoControlFile(
5737 _In_ HANDLE FileHandle
,
5738 _In_opt_ HANDLE Event
,
5739 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
5740 _In_opt_ PVOID ApcContext
,
5741 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
5742 _In_ ULONG IoControlCode
,
5743 _In_reads_bytes_opt_(InputBufferLength
) PVOID InputBuffer
,
5744 _In_ ULONG InputBufferLength
,
5745 _Out_writes_bytes_opt_(OutputBufferLength
) PVOID OutputBuffer
,
5746 _In_ ULONG OutputBufferLength
);
5748 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5751 #if (NTDDI_VERSION >= NTDDI_WIN7)
5753 _IRQL_requires_max_(PASSIVE_LEVEL
)
5757 _In_ HANDLE TimerHandle
,
5758 _In_ TIMER_SET_INFORMATION_CLASS TimerSetInformationClass
,
5759 _Inout_updates_bytes_opt_(TimerSetInformationLength
) PVOID TimerSetInformation
,
5760 _In_ ULONG TimerSetInformationLength
);
5761 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5767 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
5768 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
5769 (TypeBitMask), (ComparisonType)))
5771 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5775 VerSetConditionMask(
5776 IN ULONGLONG ConditionMask
,
5778 IN UCHAR Condition
);
5781 typedef struct _KERNEL_USER_TIMES
{
5782 LARGE_INTEGER CreateTime
;
5783 LARGE_INTEGER ExitTime
;
5784 LARGE_INTEGER KernelTime
;
5785 LARGE_INTEGER UserTime
;
5786 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
5788 /* NtXxx Functions */
5790 typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION
{
5791 SystemFirmwareTable_Enumerate
,
5792 SystemFirmwareTable_Get
5793 } SYSTEM_FIRMWARE_TABLE_ACTION
;
5795 typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION
{
5796 ULONG ProviderSignature
;
5797 SYSTEM_FIRMWARE_TABLE_ACTION Action
;
5799 ULONG TableBufferLength
;
5800 UCHAR TableBuffer
[ANYSIZE_ARRAY
];
5801 } SYSTEM_FIRMWARE_TABLE_INFORMATION
, *PSYSTEM_FIRMWARE_TABLE_INFORMATION
;
5805 _Inout_ PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo
);
5807 typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER
{
5808 ULONG ProviderSignature
;
5810 PFNFTH FirmwareTableHandler
;
5812 } SYSTEM_FIRMWARE_TABLE_HANDLER
, *PSYSTEM_FIRMWARE_TABLE_HANDLER
;
5815 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
5816 _In_ PVOID Context
);
5818 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
5819 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
5820 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
5821 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
5823 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
5824 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
5825 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
5826 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
5827 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
5829 #define SHARED_GLOBAL_FLAGS_ERROR_PORT_V 0x0
5830 #define SHARED_GLOBAL_FLAGS_ERROR_PORT (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V)
5832 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1
5833 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V)
5835 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V 0x2
5836 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V)
5838 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V 0x3
5839 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED \
5840 (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V)
5842 #define SHARED_GLOBAL_FLAGS_SPARE_V 0x4
5843 #define SHARED_GLOBAL_FLAGS_SPARE \
5844 (1UL << SHARED_GLOBAL_FLAGS_SPARE_V)
5846 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V 0x5
5847 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED \
5848 (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V)
5850 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V 0x6
5851 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED \
5852 (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V)
5854 #define EX_INIT_BITS(Flags, Bit) \
5855 *((Flags)) |= (Bit) // Safe to use before concurrently accessible
5857 #define EX_TEST_SET_BIT(Flags, Bit) \
5858 InterlockedBitTestAndSet ((PLONG)(Flags), (Bit))
5860 #define EX_TEST_CLEAR_BIT(Flags, Bit) \
5861 InterlockedBitTestAndReset ((PLONG)(Flags), (Bit))
5863 #define PCCARD_MAP_ERROR 0x01
5864 #define PCCARD_DEVICE_PCI 0x10
5866 #define PCCARD_SCAN_DISABLED 0x01
5867 #define PCCARD_MAP_ZERO 0x02
5868 #define PCCARD_NO_TIMER 0x03
5869 #define PCCARD_NO_PIC 0x04
5870 #define PCCARD_NO_LEGACY_BASE 0x05
5871 #define PCCARD_DUP_LEGACY_BASE 0x06
5872 #define PCCARD_NO_CONTROLLERS 0x07
5874 #define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2))
5876 /* Filesystem runtime library routines */
5878 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5879 _Must_inspect_result_
5883 FsRtlIsTotalDeviceFailure(
5884 _In_ NTSTATUS Status
);