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
49 #include <stdarg.h> // FIXME
50 #include <basetyps.h> // FIXME
66 #endif /* _NTLSA_AUDIT_ */
67 #endif /* _NTLSA_IFS_ */
71 struct _LOADER_PARAMETER_BLOCK
;
73 struct _DRIVE_LAYOUT_INFORMATION_EX
;
74 struct _SET_PARTITION_INFORMATION_EX
;
76 typedef struct _BUS_HANDLER
*PBUS_HANDLER
;
77 typedef struct _DEVICE_HANDLER_OBJECT
*PDEVICE_HANDLER_OBJECT
;
78 #if defined(_NTHAL_INCLUDED_)
79 typedef struct _KAFFINITY_EX
*PKAFFINITY_EX
;
81 typedef struct _PEB
*PPEB
;
85 typedef struct _IMAGE_NT_HEADERS
*PIMAGE_NT_HEADERS32
;
86 typedef struct _IMAGE_NT_HEADERS64
*PIMAGE_NT_HEADERS64
;
89 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS
;
91 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS
;
94 #endif /* _NTIMAGE_ */
96 /******************************************************************************
98 ******************************************************************************/
100 typedef struct _ZONE_SEGMENT_HEADER
{
101 SINGLE_LIST_ENTRY SegmentList
;
103 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
105 typedef struct _ZONE_HEADER
{
106 SINGLE_LIST_ENTRY FreeList
;
107 SINGLE_LIST_ENTRY SegmentList
;
109 ULONG TotalSegmentSize
;
110 } ZONE_HEADER
, *PZONE_HEADER
;
112 #define PROTECTED_POOL 0x80000000
115 /******************************************************************************
116 * I/O Manager Types *
117 ******************************************************************************/
119 /* DEVICE_OBJECT.Flags */
120 #define DO_DEVICE_HAS_NAME 0x00000040
121 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
122 #define DO_LONG_TERM_REQUESTS 0x00000200
123 #define DO_NEVER_LAST_DEVICE 0x00000400
124 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
125 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
126 #define DO_FORCE_NEITHER_IO 0x00080000
127 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
128 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
129 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
130 #define DO_DISALLOW_EXECUTE 0x00800000
134 typedef enum _CONFIGURATION_TYPE
{
137 FloatingPointProcessor
,
147 MultiFunctionAdapter
,
161 FloppyDiskPeripheral
,
174 RealModeIrqRoutingTable
,
175 RealModePCIEnumeration
,
177 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
178 #endif /* !_ARC_DDK_ */
181 ** IRP function codes
184 #define IRP_MN_QUERY_DIRECTORY 0x01
185 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
187 #define IRP_MN_USER_FS_REQUEST 0x00
188 #define IRP_MN_MOUNT_VOLUME 0x01
189 #define IRP_MN_VERIFY_VOLUME 0x02
190 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
191 #define IRP_MN_TRACK_LINK 0x04
192 #define IRP_MN_KERNEL_CALL 0x04
194 #define IRP_MN_LOCK 0x01
195 #define IRP_MN_UNLOCK_SINGLE 0x02
196 #define IRP_MN_UNLOCK_ALL 0x03
197 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
199 #define IRP_MN_FLUSH_AND_PURGE 0x01
201 #define IRP_MN_NORMAL 0x00
202 #define IRP_MN_DPC 0x01
203 #define IRP_MN_MDL 0x02
204 #define IRP_MN_COMPLETE 0x04
205 #define IRP_MN_COMPRESSED 0x08
207 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
208 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
209 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
211 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
213 #define IO_CHECK_CREATE_PARAMETERS 0x0200
214 #define IO_ATTACH_DEVICE 0x0400
215 #define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800
219 (NTAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
221 IN PUNICODE_STRING PathName
,
222 IN INTERFACE_TYPE BusType
,
224 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
225 IN CONFIGURATION_TYPE ControllerType
,
226 IN ULONG ControllerNumber
,
227 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
228 IN CONFIGURATION_TYPE PeripheralType
,
229 IN ULONG PeripheralNumber
,
230 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
232 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
233 IoQueryDeviceIdentifier
= 0,
234 IoQueryDeviceConfigurationData
,
235 IoQueryDeviceComponentInformation
,
237 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
240 (NTAPI
*PDRIVER_REINITIALIZE
)(
241 IN
struct _DRIVER_OBJECT
*DriverObject
,
242 IN PVOID Context OPTIONAL
,
245 typedef struct _CONTROLLER_OBJECT
{
248 PVOID ControllerExtension
;
249 KDEVICE_QUEUE DeviceWaitQueue
;
251 LARGE_INTEGER Spare2
;
252 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
254 #define DRVO_REINIT_REGISTERED 0x00000008
255 #define DRVO_INITIALIZED 0x00000010
256 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
257 #define DRVO_LEGACY_RESOURCES 0x00000040
259 typedef struct _CONFIGURATION_INFORMATION
{
267 BOOLEAN AtDiskPrimaryAddressClaimed
;
268 BOOLEAN AtDiskSecondaryAddressClaimed
;
270 ULONG MediumChangerCount
;
271 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
273 typedef struct _DISK_SIGNATURE
{
274 ULONG PartitionStyle
;
275 _ANONYMOUS_UNION
union {
284 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
286 typedef struct _TXN_PARAMETER_BLOCK
{
289 PVOID TransactionObject
;
290 } TXN_PARAMETER_BLOCK
, *PTXN_PARAMETER_BLOCK
;
292 #define TXF_MINIVERSION_DEFAULT_VIEW (0xFFFE)
294 typedef struct _IO_DRIVER_CREATE_CONTEXT
{
296 struct _ECP_LIST
*ExtraCreateParameter
;
297 PVOID DeviceObjectHint
;
298 PTXN_PARAMETER_BLOCK TxnParameters
;
299 } IO_DRIVER_CREATE_CONTEXT
, *PIO_DRIVER_CREATE_CONTEXT
;
301 typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD
{
305 PINTERFACE_REFERENCE InterfaceReference
;
306 PINTERFACE_DEREFERENCE InterfaceDereference
;
307 PGET_SET_DEVICE_DATA SetBusData
;
308 PGET_SET_DEVICE_DATA GetBusData
;
310 } AGP_TARGET_BUS_INTERFACE_STANDARD
, *PAGP_TARGET_BUS_INTERFACE_STANDARD
;
313 (NTAPI
*PGET_LOCATION_STRING
)(
314 IN OUT PVOID Context OPTIONAL
,
315 OUT PWCHAR
*LocationStrings
);
317 typedef struct _PNP_LOCATION_INTERFACE
{
321 PINTERFACE_REFERENCE InterfaceReference
;
322 PINTERFACE_DEREFERENCE InterfaceDereference
;
323 PGET_LOCATION_STRING GetLocationString
;
324 } PNP_LOCATION_INTERFACE
, *PPNP_LOCATION_INTERFACE
;
326 typedef enum _ARBITER_ACTION
{
327 ArbiterActionTestAllocation
,
328 ArbiterActionRetestAllocation
,
329 ArbiterActionCommitAllocation
,
330 ArbiterActionRollbackAllocation
,
331 ArbiterActionQueryAllocatedResources
,
332 ArbiterActionWriteReservedResources
,
333 ArbiterActionQueryConflict
,
334 ArbiterActionQueryArbitrate
,
335 ArbiterActionAddReserved
,
336 ArbiterActionBootAllocation
337 } ARBITER_ACTION
, *PARBITER_ACTION
;
339 typedef struct _ARBITER_CONFLICT_INFO
{
340 PDEVICE_OBJECT OwningObject
;
343 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
345 typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS
{
346 IN OUT PLIST_ENTRY ArbitrationList
;
347 IN ULONG AllocateFromCount
;
348 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
349 } ARBITER_TEST_ALLOCATION_PARAMETERS
, *PARBITER_TEST_ALLOCATION_PARAMETERS
;
351 typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS
{
352 IN OUT PLIST_ENTRY ArbitrationList
;
353 IN ULONG AllocateFromCount
;
354 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
355 } ARBITER_RETEST_ALLOCATION_PARAMETERS
, *PARBITER_RETEST_ALLOCATION_PARAMETERS
;
357 typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS
{
358 IN OUT PLIST_ENTRY ArbitrationList
;
359 } ARBITER_BOOT_ALLOCATION_PARAMETERS
, *PARBITER_BOOT_ALLOCATION_PARAMETERS
;
361 typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
{
362 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
363 } ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
;
365 typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS
{
366 IN PDEVICE_OBJECT PhysicalDeviceObject
;
367 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
368 OUT PULONG ConflictCount
;
369 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
370 } ARBITER_QUERY_CONFLICT_PARAMETERS
, *PARBITER_QUERY_CONFLICT_PARAMETERS
;
372 typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS
{
373 IN PLIST_ENTRY ArbitrationList
;
374 } ARBITER_QUERY_ARBITRATE_PARAMETERS
, *PARBITER_QUERY_ARBITRATE_PARAMETERS
;
376 typedef struct _ARBITER_ADD_RESERVED_PARAMETERS
{
377 IN PDEVICE_OBJECT ReserveDevice
;
378 } ARBITER_ADD_RESERVED_PARAMETERS
, *PARBITER_ADD_RESERVED_PARAMETERS
;
380 typedef struct _ARBITER_PARAMETERS
{
382 ARBITER_TEST_ALLOCATION_PARAMETERS TestAllocation
;
383 ARBITER_RETEST_ALLOCATION_PARAMETERS RetestAllocation
;
384 ARBITER_BOOT_ALLOCATION_PARAMETERS BootAllocation
;
385 ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS QueryAllocatedResources
;
386 ARBITER_QUERY_CONFLICT_PARAMETERS QueryConflict
;
387 ARBITER_QUERY_ARBITRATE_PARAMETERS QueryArbitrate
;
388 ARBITER_ADD_RESERVED_PARAMETERS AddReserved
;
390 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
392 typedef enum _ARBITER_REQUEST_SOURCE
{
393 ArbiterRequestUndefined
= -1,
394 ArbiterRequestLegacyReported
,
395 ArbiterRequestHalReported
,
396 ArbiterRequestLegacyAssigned
,
397 ArbiterRequestPnpDetected
,
398 ArbiterRequestPnpEnumerated
399 } ARBITER_REQUEST_SOURCE
;
401 typedef enum _ARBITER_RESULT
{
402 ArbiterResultUndefined
= -1,
403 ArbiterResultSuccess
,
404 ArbiterResultExternalConflict
,
405 ArbiterResultNullRequest
408 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
410 typedef struct _ARBITER_LIST_ENTRY
{
411 LIST_ENTRY ListEntry
;
412 ULONG AlternativeCount
;
413 PIO_RESOURCE_DESCRIPTOR Alternatives
;
414 PDEVICE_OBJECT PhysicalDeviceObject
;
415 ARBITER_REQUEST_SOURCE RequestSource
;
418 INTERFACE_TYPE InterfaceType
;
421 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
422 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
423 ARBITER_RESULT Result
;
424 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
427 (NTAPI
*PARBITER_HANDLER
)(
428 IN OUT PVOID Context
,
429 IN ARBITER_ACTION Action
,
430 IN OUT PARBITER_PARAMETERS Parameters
);
432 #define ARBITER_PARTIAL 0x00000001
434 typedef struct _ARBITER_INTERFACE
{
438 PINTERFACE_REFERENCE InterfaceReference
;
439 PINTERFACE_DEREFERENCE InterfaceDereference
;
440 PARBITER_HANDLER ArbiterHandler
;
442 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
444 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
445 TranslateChildToParent
,
446 TranslateParentToChild
447 } RESOURCE_TRANSLATION_DIRECTION
;
450 (NTAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
451 IN OUT PVOID Context OPTIONAL
,
452 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
453 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
454 IN ULONG AlternativesCount OPTIONAL
,
455 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
456 IN PDEVICE_OBJECT PhysicalDeviceObject
,
457 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
460 (NTAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
461 IN OUT PVOID Context OPTIONAL
,
462 IN PIO_RESOURCE_DESCRIPTOR Source
,
463 IN PDEVICE_OBJECT PhysicalDeviceObject
,
464 OUT PULONG TargetCount
,
465 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
467 typedef struct _TRANSLATOR_INTERFACE
{
471 PINTERFACE_REFERENCE InterfaceReference
;
472 PINTERFACE_DEREFERENCE InterfaceDereference
;
473 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
474 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
475 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
477 #if 0 // Someone (testbot? RosBE for linux?) doesn't like too many types it seems...
479 typedef struct _PCI_AGP_CAPABILITY
{
480 PCI_CAPABILITIES_HEADER Header
;
484 struct _PCI_AGP_STATUS
{
489 ULONG HostTransDisable
:1;
491 ULONG ITA_Coherent
:1;
492 ULONG SideBandAddressing
:1;
493 ULONG CalibrationCycle
:3;
494 ULONG AsyncRequestSize
:3;
498 ULONG RequestQueueDepthMaximum
:8;
500 struct _PCI_AGP_COMMAND
{
503 ULONG FastWriteEnable
:1;
504 ULONG FourGBEnable
:1;
509 ULONG CalibrationCycle
:3;
510 ULONG AsyncReqSize
:3;
512 ULONG RequestQueueDepth
:8;
514 } PCI_AGP_CAPABILITY
, *PPCI_AGP_CAPABILITY
;
516 typedef enum _EXTENDED_AGP_REGISTER
{
524 } EXTENDED_AGP_REGISTER
, *PEXTENDED_AGP_REGISTER
;
526 typedef struct _PCI_AGP_ISOCH_STATUS
{
533 } PCI_AGP_ISOCH_STATUS
, *PPCI_AGP_ISOCH_STATUS
;
535 typedef struct _PCI_AGP_CONTROL
{
541 } PCI_AGP_CONTROL
, *PPCI_AGP_CONTROL
;
543 typedef struct _PCI_AGP_APERTURE_PAGE_SIZE
{
544 USHORT PageSizeMask
:11;
546 USHORT PageSizeSelect
:4;
547 } PCI_AGP_APERTURE_PAGE_SIZE
, *PPCI_AGP_APERTURE_PAGE_SIZE
;
549 typedef struct _PCI_AGP_ISOCH_COMMAND
{
553 } PCI_AGP_ISOCH_COMMAND
, *PPCI_AGP_ISOCH_COMMAND
;
555 typedef struct PCI_AGP_EXTENDED_CAPABILITY
{
556 PCI_AGP_ISOCH_STATUS IsochStatus
;
557 PCI_AGP_CONTROL AgpControl
;
559 PCI_AGP_APERTURE_PAGE_SIZE AperturePageSize
;
562 PCI_AGP_ISOCH_COMMAND IsochCommand
;
563 } PCI_AGP_EXTENDED_CAPABILITY
, *PPCI_AGP_EXTENDED_CAPABILITY
;
565 #define PCI_AGP_RATE_1X 0x1
566 #define PCI_AGP_RATE_2X 0x2
567 #define PCI_AGP_RATE_4X 0x4
569 #define PCIX_MODE_CONVENTIONAL_PCI 0x0
570 #define PCIX_MODE1_66MHZ 0x1
571 #define PCIX_MODE1_100MHZ 0x2
572 #define PCIX_MODE1_133MHZ 0x3
573 #define PCIX_MODE2_266_66MHZ 0x9
574 #define PCIX_MODE2_266_100MHZ 0xA
575 #define PCIX_MODE2_266_133MHZ 0xB
576 #define PCIX_MODE2_533_66MHZ 0xD
577 #define PCIX_MODE2_533_100MHZ 0xE
578 #define PCIX_MODE2_533_133MHZ 0xF
580 #define PCIX_VERSION_MODE1_ONLY 0x0
581 #define PCIX_VERSION_MODE2_ECC 0x1
582 #define PCIX_VERSION_DUAL_MODE_ECC 0x2
584 typedef struct _PCIX_BRIDGE_CAPABILITY
{
585 PCI_CAPABILITIES_HEADER Header
;
589 USHORT Bus133MHzCapable
:1;
590 USHORT SplitCompletionDiscarded
:1;
591 USHORT UnexpectedSplitCompletion
:1;
592 USHORT SplitCompletionOverrun
:1;
593 USHORT SplitRequestDelayed
:1;
594 USHORT BusModeFrequency
:4;
597 USHORT Bus266MHzCapable
:1;
598 USHORT Bus533MHzCapable
:1;
604 ULONG FunctionNumber
:3;
605 ULONG DeviceNumber
:5;
608 ULONG Device133MHzCapable
:1;
609 ULONG SplitCompletionDiscarded
:1;
610 ULONG UnexpectedSplitCompletion
:1;
611 ULONG SplitCompletionOverrun
:1;
612 ULONG SplitRequestDelayed
:1;
615 ULONG Device266MHzCapable
:1;
616 ULONG Device533MHzCapable
:1;
620 USHORT UpstreamSplitTransactionCapacity
;
621 USHORT UpstreamSplitTransactionLimit
;
622 USHORT DownstreamSplitTransactionCapacity
;
623 USHORT DownstreamSplitTransactionLimit
;
626 ULONG SelectSecondaryRegisters
:1;
627 ULONG ErrorPresentInOtherBank
:1;
628 ULONG AdditionalCorrectableError
:1;
629 ULONG AdditionalUncorrectableError
:1;
631 ULONG ErrorCorrected
:1;
633 ULONG ErrorFirstCommand
:4;
634 ULONG ErrorSecondCommand
:4;
635 ULONG ErrorUpperAttributes
:4;
636 ULONG ControlUpdateEnable
:1;
638 ULONG DisableSingleBitCorrection
:1;
643 ULONG EccFirstAddress
;
644 ULONG EccSecondAddress
;
646 } PCIX_BRIDGE_CAPABILITY
, *PPCIX_BRIDGE_CAPABILITY
;
648 typedef struct _PCI_SUBSYSTEM_IDS_CAPABILITY
{
649 PCI_CAPABILITIES_HEADER Header
;
653 } PCI_SUBSYSTEM_IDS_CAPABILITY
, *PPCI_SUBSYSTEM_IDS_CAPABILITY
;
655 #define OSC_FIRMWARE_FAILURE 0x02
656 #define OSC_UNRECOGNIZED_UUID 0x04
657 #define OSC_UNRECOGNIZED_REVISION 0x08
658 #define OSC_CAPABILITIES_MASKED 0x10
660 #define PCI_ROOT_BUS_OSC_METHOD_CAPABILITY_REVISION 0x01
662 typedef struct _PCI_ROOT_BUS_OSC_SUPPORT_FIELD
{
665 ULONG ExtendedConfigOpRegions
:1;
666 ULONG ActiveStatePowerManagement
:1;
667 ULONG ClockPowerManagement
:1;
668 ULONG SegmentGroups
:1;
669 ULONG MessageSignaledInterrupts
:1;
670 ULONG WindowsHardwareErrorArchitecture
:1;
675 } PCI_ROOT_BUS_OSC_SUPPORT_FIELD
, *PPCI_ROOT_BUS_OSC_SUPPORT_FIELD
;
677 typedef struct _PCI_ROOT_BUS_OSC_CONTROL_FIELD
{
680 ULONG ExpressNativeHotPlug
:1;
681 ULONG ShpcNativeHotPlug
:1;
682 ULONG ExpressNativePME
:1;
683 ULONG ExpressAdvancedErrorReporting
:1;
684 ULONG ExpressCapabilityStructure
:1;
689 } PCI_ROOT_BUS_OSC_CONTROL_FIELD
, *PPCI_ROOT_BUS_OSC_CONTROL_FIELD
;
691 typedef enum _PCI_HARDWARE_INTERFACE
{
696 } PCI_HARDWARE_INTERFACE
, *PPCI_HARDWARE_INTERFACE
;
703 typedef struct _PCI_ROOT_BUS_HARDWARE_CAPABILITY
{
704 PCI_HARDWARE_INTERFACE SecondaryInterface
;
706 BOOLEAN BusCapabilitiesFound
;
707 ULONG CurrentSpeedAndMode
;
708 ULONG SupportedSpeedsAndModes
;
709 BOOLEAN DeviceIDMessagingCapable
;
710 PCI_BUS_WIDTH SecondaryBusWidth
;
712 PCI_ROOT_BUS_OSC_SUPPORT_FIELD OscFeatureSupport
;
713 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlRequest
;
714 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlGranted
;
715 } PCI_ROOT_BUS_HARDWARE_CAPABILITY
, *PPCI_ROOT_BUS_HARDWARE_CAPABILITY
;
717 typedef union _PCI_EXPRESS_CAPABILITIES_REGISTER
{
719 USHORT CapabilityVersion
:4;
721 USHORT SlotImplemented
:1;
722 USHORT InterruptMessageNumber
:5;
726 } PCI_EXPRESS_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_CAPABILITIES_REGISTER
;
728 typedef union _PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
{
730 ULONG MaxPayloadSizeSupported
:3;
731 ULONG PhantomFunctionsSupported
:2;
732 ULONG ExtendedTagSupported
:1;
733 ULONG L0sAcceptableLatency
:3;
734 ULONG L1AcceptableLatency
:3;
736 ULONG RoleBasedErrorReporting
:1;
738 ULONG CapturedSlotPowerLimit
:8;
739 ULONG CapturedSlotPowerLimitScale
:2;
743 } PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
;
745 #define PCI_EXPRESS_AER_DEVICE_CONTROL_MASK 0x07;
747 typedef union _PCI_EXPRESS_DEVICE_CONTROL_REGISTER
{
749 USHORT CorrectableErrorEnable
:1;
750 USHORT NonFatalErrorEnable
:1;
751 USHORT FatalErrorEnable
:1;
752 USHORT UnsupportedRequestErrorEnable
:1;
753 USHORT EnableRelaxedOrder
:1;
754 USHORT MaxPayloadSize
:3;
755 USHORT ExtendedTagEnable
:1;
756 USHORT PhantomFunctionsEnable
:1;
757 USHORT AuxPowerEnable
:1;
758 USHORT NoSnoopEnable
:1;
759 USHORT MaxReadRequestSize
:3;
760 USHORT BridgeConfigRetryEnable
:1;
763 } PCI_EXPRESS_DEVICE_CONTROL_REGISTER
, *PPCI_EXPRESS_DEVICE_CONTROL_REGISTER
;
765 #define PCI_EXPRESS_AER_DEVICE_STATUS_MASK 0x0F;
767 typedef union _PCI_EXPRESS_DEVICE_STATUS_REGISTER
{
769 USHORT CorrectableErrorDetected
:1;
770 USHORT NonFatalErrorDetected
:1;
771 USHORT FatalErrorDetected
:1;
772 USHORT UnsupportedRequestDetected
:1;
773 USHORT AuxPowerDetected
:1;
774 USHORT TransactionsPending
:1;
778 } PCI_EXPRESS_DEVICE_STATUS_REGISTER
, *PPCI_EXPRESS_DEVICE_STATUS_REGISTER
;
780 typedef union _PCI_EXPRESS_LINK_CAPABILITIES_REGISTER
{
782 ULONG MaximumLinkSpeed
:4;
783 ULONG MaximumLinkWidth
:6;
784 ULONG ActiveStatePMSupport
:2;
785 ULONG L0sExitLatency
:3;
786 ULONG L1ExitLatency
:3;
787 ULONG ClockPowerManagement
:1;
788 ULONG SurpriseDownErrorReportingCapable
:1;
789 ULONG DataLinkLayerActiveReportingCapable
:1;
794 } PCI_EXPRESS_LINK_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_LINK_CAPABILITIES_REGISTER
;
796 typedef union _PCI_EXPRESS_LINK_CONTROL_REGISTER
{
798 USHORT ActiveStatePMControl
:2;
800 USHORT ReadCompletionBoundary
:1;
801 USHORT LinkDisable
:1;
802 USHORT RetrainLink
:1;
803 USHORT CommonClockConfig
:1;
804 USHORT ExtendedSynch
:1;
805 USHORT EnableClockPowerManagement
:1;
809 } PCI_EXPRESS_LINK_CONTROL_REGISTER
, *PPCI_EXPRESS_LINK_CONTROL_REGISTER
;
811 typedef union _PCI_EXPRESS_LINK_STATUS_REGISTER
{
816 USHORT LinkTraining
:1;
817 USHORT SlotClockConfig
:1;
818 USHORT DataLinkLayerActive
:1;
822 } PCI_EXPRESS_LINK_STATUS_REGISTER
, *PPCI_EXPRESS_LINK_STATUS_REGISTER
;
824 typedef union _PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
{
826 ULONG AttentionButtonPresent
:1;
827 ULONG PowerControllerPresent
:1;
828 ULONG MRLSensorPresent
:1;
829 ULONG AttentionIndicatorPresent
:1;
830 ULONG PowerIndicatorPresent
:1;
831 ULONG HotPlugSurprise
:1;
832 ULONG HotPlugCapable
:1;
833 ULONG SlotPowerLimit
:8;
834 ULONG SlotPowerLimitScale
:2;
835 ULONG ElectromechanicalLockPresent
:1;
836 ULONG NoCommandCompletedSupport
:1;
837 ULONG PhysicalSlotNumber
:13;
840 } PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
;
842 typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER
{
844 USHORT AttentionButtonEnable
:1;
845 USHORT PowerFaultDetectEnable
:1;
846 USHORT MRLSensorEnable
:1;
847 USHORT PresenceDetectEnable
:1;
848 USHORT CommandCompletedEnable
:1;
849 USHORT HotPlugInterruptEnable
:1;
850 USHORT AttentionIndicatorControl
:2;
851 USHORT PowerIndicatorControl
:2;
852 USHORT PowerControllerControl
:1;
853 USHORT ElectromechanicalLockControl
:1;
854 USHORT DataLinkStateChangeEnable
:1;
858 } PCI_EXPRESS_SLOT_CONTROL_REGISTER
, *PPCI_EXPRESS_SLOT_CONTROL_REGISTER
;
860 typedef union _PCI_EXPRESS_SLOT_STATUS_REGISTER
{
862 USHORT AttentionButtonPressed
:1;
863 USHORT PowerFaultDetected
:1;
864 USHORT MRLSensorChanged
:1;
865 USHORT PresenceDetectChanged
:1;
866 USHORT CommandCompleted
:1;
867 USHORT MRLSensorState
:1;
868 USHORT PresenceDetectState
:1;
869 USHORT ElectromechanicalLockEngaged
:1;
870 USHORT DataLinkStateChanged
:1;
874 } PCI_EXPRESS_SLOT_STATUS_REGISTER
, *PPCI_EXPRESS_SLOT_STATUS_REGISTER
;
876 typedef union _PCI_EXPRESS_ROOT_CONTROL_REGISTER
{
878 USHORT CorrectableSerrEnable
:1;
879 USHORT NonFatalSerrEnable
:1;
880 USHORT FatalSerrEnable
:1;
881 USHORT PMEInterruptEnable
:1;
882 USHORT CRSSoftwareVisibilityEnable
:1;
886 } PCI_EXPRESS_ROOT_CONTROL_REGISTER
, *PPCI_EXPRESS_ROOT_CONTROL_REGISTER
;
888 typedef union _PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
{
890 USHORT CRSSoftwareVisibility
:1;
894 } PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
;
896 typedef union _PCI_EXPRESS_ROOT_STATUS_REGISTER
{
898 ULONG PMERequestorId
:16;
904 } PCI_EXPRESS_ROOT_STATUS_REGISTER
, *PPCI_EXPRESS_ROOT_STATUS_REGISTER
;
906 typedef struct _PCI_EXPRESS_CAPABILITY
{
907 PCI_CAPABILITIES_HEADER Header
;
908 PCI_EXPRESS_CAPABILITIES_REGISTER ExpressCapabilities
;
909 PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER DeviceCapabilities
;
910 PCI_EXPRESS_DEVICE_CONTROL_REGISTER DeviceControl
;
911 PCI_EXPRESS_DEVICE_STATUS_REGISTER DeviceStatus
;
912 PCI_EXPRESS_LINK_CAPABILITIES_REGISTER LinkCapabilities
;
913 PCI_EXPRESS_LINK_CONTROL_REGISTER LinkControl
;
914 PCI_EXPRESS_LINK_STATUS_REGISTER LinkStatus
;
915 PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER SlotCapabilities
;
916 PCI_EXPRESS_SLOT_CONTROL_REGISTER SlotControl
;
917 PCI_EXPRESS_SLOT_STATUS_REGISTER SlotStatus
;
918 PCI_EXPRESS_ROOT_CONTROL_REGISTER RootControl
;
919 PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER RootCapabilities
;
920 PCI_EXPRESS_ROOT_STATUS_REGISTER RootStatus
;
921 } PCI_EXPRESS_CAPABILITY
, *PPCI_EXPRESS_CAPABILITY
;
926 } PCI_EXPRESS_MRL_STATE
;
931 } PCI_EXPRESS_CARD_PRESENCE
;
937 } PCI_EXPRESS_INDICATOR_STATE
;
942 } PCI_EXPRESS_POWER_STATE
;
946 L0sAndL1EntrySupport
= 3
947 } PCI_EXPRESS_ASPM_SUPPORT
;
950 L0sAndL1EntryDisabled
,
954 } PCI_EXPRESS_ASPM_CONTROL
;
965 } PCI_EXPRESS_L0s_EXIT_LATENCY
;
976 } PCI_EXPRESS_L1_EXIT_LATENCY
;
979 PciExpressEndpoint
= 0,
980 PciExpressLegacyEndpoint
,
981 PciExpressRootPort
= 4,
982 PciExpressUpstreamSwitchPort
,
983 PciExpressDownstreamSwitchPort
,
984 PciExpressToPciXBridge
,
986 PciExpressRootComplexIntegratedEndpoint
,
987 PciExpressRootComplexEventCollector
988 } PCI_EXPRESS_DEVICE_TYPE
;
991 MaxPayload128Bytes
= 0,
997 } PCI_EXPRESS_MAX_PAYLOAD_SIZE
;
999 typedef union _PCI_EXPRESS_PME_REQUESTOR_ID
{
1001 USHORT FunctionNumber
:3;
1002 USHORT DeviceNumber
:5;
1006 } PCI_EXPRESS_PME_REQUESTOR_ID
, *PPCI_EXPRESS_PME_REQUESTOR_ID
;
1010 #ifndef USE_DMA_MACROS
1011 #define USE_DMA_MACROS
1014 #ifndef NO_LEGACY_DRIVERS
1015 #define NO_LEGACY_DRIVERS
1018 #endif /* defined(_WIN64) */
1020 typedef enum _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE
{
1021 ResourceTypeSingle
= 0,
1023 ResourceTypeExtendedCounterConfiguration
,
1024 ResourceTypeOverflow
,
1026 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE
;
1028 typedef struct _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
{
1029 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE Type
;
1033 ULONG ExtendedRegisterAddress
;
1039 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
, *PPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
;
1041 typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST
{
1043 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors
[ANYSIZE_ARRAY
];
1044 } PHYSICAL_COUNTER_RESOURCE_LIST
, *PPHYSICAL_COUNTER_RESOURCE_LIST
;
1047 (NTAPI
*PciPin2Line
)(
1048 IN
struct _BUS_HANDLER
*BusHandler
,
1049 IN
struct _BUS_HANDLER
*RootHandler
,
1050 IN PCI_SLOT_NUMBER SlotNumber
,
1051 IN PPCI_COMMON_CONFIG PciData
);
1054 (NTAPI
*PciLine2Pin
)(
1055 IN
struct _BUS_HANDLER
*BusHandler
,
1056 IN
struct _BUS_HANDLER
*RootHandler
,
1057 IN PCI_SLOT_NUMBER SlotNumber
,
1058 IN PPCI_COMMON_CONFIG PciNewData
,
1059 IN PPCI_COMMON_CONFIG PciOldData
);
1062 (NTAPI
*PciReadWriteConfig
)(
1063 IN
struct _BUS_HANDLER
*BusHandler
,
1064 IN PCI_SLOT_NUMBER Slot
,
1069 #define PCI_DATA_TAG ' ICP'
1070 #define PCI_DATA_VERSION 1
1072 typedef struct _PCIBUSDATA
{
1075 PciReadWriteConfig ReadConfig
;
1076 PciReadWriteConfig WriteConfig
;
1077 PciPin2Line Pin2Line
;
1078 PciLine2Pin Line2Pin
;
1079 PCI_SLOT_NUMBER ParentSlot
;
1081 } PCIBUSDATA
, *PPCIBUSDATA
;
1083 #ifndef _PCIINTRF_X_
1084 #define _PCIINTRF_X_
1087 (NTAPI
*PCI_READ_WRITE_CONFIG
)(
1096 (NTAPI
*PCI_PIN_TO_LINE
)(
1098 IN PPCI_COMMON_CONFIG PciData
);
1101 (NTAPI
*PCI_LINE_TO_PIN
)(
1103 IN PPCI_COMMON_CONFIG PciNewData
,
1104 IN PPCI_COMMON_CONFIG PciOldData
);
1107 (NTAPI
*PCI_ROOT_BUS_CAPABILITY
)(
1109 OUT PPCI_ROOT_BUS_HARDWARE_CAPABILITY HardwareCapability
);
1112 (NTAPI
*PCI_EXPRESS_WAKE_CONTROL
)(
1114 IN BOOLEAN EnableWake
);
1116 typedef struct _PCI_BUS_INTERFACE_STANDARD
{
1120 PINTERFACE_REFERENCE InterfaceReference
;
1121 PINTERFACE_DEREFERENCE InterfaceDereference
;
1122 PCI_READ_WRITE_CONFIG ReadConfig
;
1123 PCI_READ_WRITE_CONFIG WriteConfig
;
1124 PCI_PIN_TO_LINE PinToLine
;
1125 PCI_LINE_TO_PIN LineToPin
;
1126 PCI_ROOT_BUS_CAPABILITY RootBusCapability
;
1127 PCI_EXPRESS_WAKE_CONTROL ExpressWakeControl
;
1128 } PCI_BUS_INTERFACE_STANDARD
, *PPCI_BUS_INTERFACE_STANDARD
;
1130 #define PCI_BUS_INTERFACE_STANDARD_VERSION 1
1132 #endif /* _PCIINTRF_X_ */
1134 #if (NTDDI_VERSION >= NTDDI_WIN7)
1136 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX 0x00004000
1137 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX 0x00008000
1138 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \
1139 (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \
1140 FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX)
1142 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200
1143 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300
1144 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300
1148 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 0x00000200
1149 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 0x00000300
1150 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 0x00000300
1152 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL
1153 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL
1154 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK
1156 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1160 #define FILE_CHARACTERISTICS_PROPAGATED ( FILE_REMOVABLE_MEDIA | \
1161 FILE_READ_ONLY_DEVICE | \
1162 FILE_FLOPPY_DISKETTE | \
1163 FILE_WRITE_ONCE_MEDIA | \
1164 FILE_DEVICE_SECURE_OPEN )
1166 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1167 ULONG AlignmentRequirement
;
1168 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1170 typedef struct _FILE_NAME_INFORMATION
{
1171 ULONG FileNameLength
;
1173 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1176 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1177 ULONG FileAttributes
;
1179 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1181 typedef struct _FILE_DISPOSITION_INFORMATION
{
1183 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1185 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1186 LARGE_INTEGER EndOfFile
;
1187 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1189 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1190 LARGE_INTEGER ValidDataLength
;
1191 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1193 typedef struct _FILE_FS_LABEL_INFORMATION
{
1194 ULONG VolumeLabelLength
;
1195 WCHAR VolumeLabel
[1];
1196 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
1198 typedef struct _FILE_FS_VOLUME_INFORMATION
{
1199 LARGE_INTEGER VolumeCreationTime
;
1200 ULONG VolumeSerialNumber
;
1201 ULONG VolumeLabelLength
;
1202 BOOLEAN SupportsObjects
;
1203 WCHAR VolumeLabel
[1];
1204 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
1206 typedef struct _FILE_FS_SIZE_INFORMATION
{
1207 LARGE_INTEGER TotalAllocationUnits
;
1208 LARGE_INTEGER AvailableAllocationUnits
;
1209 ULONG SectorsPerAllocationUnit
;
1210 ULONG BytesPerSector
;
1211 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
1213 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
{
1214 LARGE_INTEGER TotalAllocationUnits
;
1215 LARGE_INTEGER CallerAvailableAllocationUnits
;
1216 LARGE_INTEGER ActualAvailableAllocationUnits
;
1217 ULONG SectorsPerAllocationUnit
;
1218 ULONG BytesPerSector
;
1219 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
1221 typedef struct _FILE_FS_OBJECTID_INFORMATION
{
1223 UCHAR ExtendedInfo
[48];
1224 } FILE_FS_OBJECTID_INFORMATION
, *PFILE_FS_OBJECTID_INFORMATION
;
1226 typedef union _FILE_SEGMENT_ELEMENT
{
1228 ULONGLONG Alignment
;
1229 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1231 #define IOCTL_AVIO_ALLOCATE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1232 #define IOCTL_AVIO_FREE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1233 #define IOCTL_AVIO_MODIFY_STREAM CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1235 typedef enum _BUS_DATA_TYPE
{
1236 ConfigurationSpaceUndefined
= -1,
1244 PCMCIAConfiguration
,
1247 PNPISAConfiguration
,
1248 SgiInternalConfiguration
,
1250 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
1252 /* Hardware Abstraction Layer Types */
1255 (NTAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
1259 typedef PBUS_HANDLER
1260 (FASTCALL
*pHalHandlerForBus
)(
1261 IN INTERFACE_TYPE InterfaceType
,
1262 IN ULONG BusNumber
);
1265 (FASTCALL
*pHalReferenceBusHandler
)(
1266 IN PBUS_HANDLER BusHandler
);
1268 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
1269 HalInstalledBusInformation
,
1270 HalProfileSourceInformation
,
1271 HalInformationClassUnused1
,
1272 HalPowerInformation
,
1273 HalProcessorSpeedInformation
,
1274 HalCallbackInformation
,
1275 HalMapRegisterInformation
,
1276 HalMcaLogInformation
,
1277 HalFrameBufferCachingInformation
,
1278 HalDisplayBiosInformation
,
1279 HalProcessorFeatureInformation
,
1280 HalNumaTopologyInterface
,
1281 HalErrorInformation
,
1282 HalCmcLogInformation
,
1283 HalCpeLogInformation
,
1284 HalQueryMcaInterface
,
1285 HalQueryAMLIIllegalIOPortAddresses
,
1286 HalQueryMaxHotPlugMemoryAddress
,
1287 HalPartitionIpiInterface
,
1288 HalPlatformInformation
,
1289 HalQueryProfileSourceList
,
1290 HalInitLogInformation
,
1291 HalFrequencyInformation
,
1292 HalProcessorBrandString
,
1293 HalHypervisorInformation
,
1294 HalPlatformTimerInformation
,
1295 HalAcpiAuditInformation
1296 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
1298 typedef enum _HAL_SET_INFORMATION_CLASS
{
1299 HalProfileSourceInterval
,
1300 HalProfileSourceInterruptHandler
,
1301 HalMcaRegisterDriver
,
1302 HalKernelErrorHandler
,
1303 HalCmcRegisterDriver
,
1304 HalCpeRegisterDriver
,
1308 HalGenerateCmcInterrupt
,
1309 HalProfileSourceTimerHandler
,
1311 HalProfileDpgoSourceInterruptHandler
1312 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
1315 (NTAPI
*pHalQuerySystemInformation
)(
1316 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
1317 IN ULONG BufferSize
,
1318 IN OUT PVOID Buffer
,
1319 OUT PULONG ReturnedLength
);
1322 (NTAPI
*pHalSetSystemInformation
)(
1323 IN HAL_SET_INFORMATION_CLASS InformationClass
,
1324 IN ULONG BufferSize
,
1328 (FASTCALL
*pHalExamineMBR
)(
1329 IN PDEVICE_OBJECT DeviceObject
,
1330 IN ULONG SectorSize
,
1331 IN ULONG MBRTypeIdentifier
,
1335 (FASTCALL
*pHalIoReadPartitionTable
)(
1336 IN PDEVICE_OBJECT DeviceObject
,
1337 IN ULONG SectorSize
,
1338 IN BOOLEAN ReturnRecognizedPartitions
,
1339 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
1342 (FASTCALL
*pHalIoSetPartitionInformation
)(
1343 IN PDEVICE_OBJECT DeviceObject
,
1344 IN ULONG SectorSize
,
1345 IN ULONG PartitionNumber
,
1346 IN ULONG PartitionType
);
1349 (FASTCALL
*pHalIoWritePartitionTable
)(
1350 IN PDEVICE_OBJECT DeviceObject
,
1351 IN ULONG SectorSize
,
1352 IN ULONG SectorsPerTrack
,
1353 IN ULONG NumberOfHeads
,
1354 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
1357 (NTAPI
*pHalQueryBusSlots
)(
1358 IN PBUS_HANDLER BusHandler
,
1359 IN ULONG BufferSize
,
1360 OUT PULONG SlotNumbers
,
1361 OUT PULONG ReturnedLength
);
1364 (NTAPI
*pHalInitPnpDriver
)(
1367 typedef struct _PM_DISPATCH_TABLE
{
1371 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
1374 (NTAPI
*pHalInitPowerManagement
)(
1375 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
1376 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
1378 typedef struct _DMA_ADAPTER
*
1379 (NTAPI
*pHalGetDmaAdapter
)(
1381 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
1382 OUT PULONG NumberOfMapRegisters
);
1385 (NTAPI
*pHalGetInterruptTranslator
)(
1386 IN INTERFACE_TYPE ParentInterfaceType
,
1387 IN ULONG ParentBusNumber
,
1388 IN INTERFACE_TYPE BridgeInterfaceType
,
1391 OUT PTRANSLATOR_INTERFACE Translator
,
1392 OUT PULONG BridgeBusNumber
);
1395 (NTAPI
*pHalStartMirroring
)(
1399 (NTAPI
*pHalEndMirroring
)(
1400 IN ULONG PassNumber
);
1403 (NTAPI
*pHalMirrorPhysicalMemory
)(
1404 IN PHYSICAL_ADDRESS PhysicalAddress
,
1405 IN LARGE_INTEGER NumberOfBytes
);
1408 (NTAPI
*pHalMirrorVerify
)(
1409 IN PHYSICAL_ADDRESS PhysicalAddress
,
1410 IN LARGE_INTEGER NumberOfBytes
);
1413 (NTAPI
*pHalTranslateBusAddress
)(
1414 IN INTERFACE_TYPE InterfaceType
,
1416 IN PHYSICAL_ADDRESS BusAddress
,
1417 IN OUT PULONG AddressSpace
,
1418 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
1421 (NTAPI
*pHalAssignSlotResources
)(
1422 IN PUNICODE_STRING RegistryPath
,
1423 IN PUNICODE_STRING DriverClassName OPTIONAL
,
1424 IN PDRIVER_OBJECT DriverObject
,
1425 IN PDEVICE_OBJECT DeviceObject
,
1426 IN INTERFACE_TYPE BusType
,
1428 IN ULONG SlotNumber
,
1429 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
1432 (NTAPI
*pHalHaltSystem
)(
1436 (NTAPI
*pHalResetDisplay
)(
1439 typedef struct _MAP_REGISTER_ENTRY
{
1441 BOOLEAN WriteToDevice
;
1442 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
1445 (NTAPI
*pHalVectorToIDTEntry
)(
1449 (NTAPI
*pHalFindBusAddressTranslation
)(
1450 IN PHYSICAL_ADDRESS BusAddress
,
1451 IN OUT PULONG AddressSpace
,
1452 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
1453 IN OUT PULONG_PTR Context
,
1454 IN BOOLEAN NextBus
);
1457 (NTAPI
*pHalEndOfBoot
)(
1461 (NTAPI
*pHalGetAcpiTable
)(
1463 IN PCSTR OemId OPTIONAL
,
1464 IN PCSTR OemTableId OPTIONAL
);
1468 (*pHalGetErrorCapList
)(
1469 IN OUT PULONG CapsListLength
,
1470 IN OUT PUCHAR ErrorCapList
);
1474 IN ULONG BufferLength
,
1479 (NTAPI
*PCI_ERROR_HANDLER_CALLBACK
)(
1483 (NTAPI
*pHalSetPciErrorHandlerCallback
)(
1484 IN PCI_ERROR_HANDLER_CALLBACK Callback
);
1486 #if 1 /* Not present in WDK 7600 */
1488 (FASTCALL
*pHalIoAssignDriveLetters
)(
1489 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
1490 IN PSTRING NtDeviceName
,
1491 OUT PUCHAR NtSystemPath
,
1492 OUT PSTRING NtSystemPathString
);
1497 pHalQuerySystemInformation HalQuerySystemInformation
;
1498 pHalSetSystemInformation HalSetSystemInformation
;
1499 pHalQueryBusSlots HalQueryBusSlots
;
1501 pHalExamineMBR HalExamineMBR
;
1502 #if 1 /* Not present in WDK 7600 */
1503 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
1505 pHalIoReadPartitionTable HalIoReadPartitionTable
;
1506 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
1507 pHalIoWritePartitionTable HalIoWritePartitionTable
;
1508 pHalHandlerForBus HalReferenceHandlerForBus
;
1509 pHalReferenceBusHandler HalReferenceBusHandler
;
1510 pHalReferenceBusHandler HalDereferenceBusHandler
;
1511 pHalInitPnpDriver HalInitPnpDriver
;
1512 pHalInitPowerManagement HalInitPowerManagement
;
1513 pHalGetDmaAdapter HalGetDmaAdapter
;
1514 pHalGetInterruptTranslator HalGetInterruptTranslator
;
1515 pHalStartMirroring HalStartMirroring
;
1516 pHalEndMirroring HalEndMirroring
;
1517 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
1518 pHalEndOfBoot HalEndOfBoot
;
1519 pHalMirrorVerify HalMirrorVerify
;
1520 pHalGetAcpiTable HalGetCachedAcpiTable
;
1521 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback
;
1523 pHalGetErrorCapList HalGetErrorCapList
;
1524 pHalInjectError HalInjectError
;
1526 } HAL_DISPATCH
, *PHAL_DISPATCH
;
1528 /* GCC/MSVC and WDK compatible declaration */
1529 extern NTKERNELAPI HAL_DISPATCH HalDispatchTable
;
1531 #if defined(_NTOSKRNL_) || defined(_BLDR_)
1532 #define HALDISPATCH (&HalDispatchTable)
1534 /* This is a WDK compatibility definition */
1535 #define HalDispatchTable (&HalDispatchTable)
1536 #define HALDISPATCH HalDispatchTable
1539 #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
1540 #define HalDispatchTableVersion HALDISPATCH->Version
1541 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
1542 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
1543 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
1544 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
1545 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
1546 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
1547 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
1548 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
1549 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
1550 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
1551 #define HalStartMirroring HALDISPATCH->HalStartMirroring
1552 #define HalEndMirroring HALDISPATCH->HalEndMirroring
1553 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
1554 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
1555 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
1556 #define HalGetCachedAcpiTable HALDISPATCH->HalGetCachedAcpiTable
1557 #define HalSetPciErrorHandlerCallback HALDISPATCH->HalSetPciErrorHandlerCallback
1559 #define HalGetErrorCapList HALDISPATCH->HalGetErrorCapList
1560 #define HalInjectError HALDISPATCH->HalInjectError
1563 typedef struct _HAL_BUS_INFORMATION
{
1564 INTERFACE_TYPE BusType
;
1565 BUS_DATA_TYPE ConfigurationType
;
1568 } HAL_BUS_INFORMATION
, *PHAL_BUS_INFORMATION
;
1570 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
{
1571 KPROFILE_SOURCE Source
;
1574 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
1576 typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX
{
1577 KPROFILE_SOURCE Source
;
1580 ULONG_PTR DefInterval
;
1581 ULONG_PTR MaxInterval
;
1582 ULONG_PTR MinInterval
;
1583 } HAL_PROFILE_SOURCE_INFORMATION_EX
, *PHAL_PROFILE_SOURCE_INFORMATION_EX
;
1585 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
{
1586 KPROFILE_SOURCE Source
;
1588 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
1590 typedef struct _HAL_PROFILE_SOURCE_LIST
{
1591 KPROFILE_SOURCE Source
;
1593 } HAL_PROFILE_SOURCE_LIST
, *PHAL_PROFILE_SOURCE_LIST
;
1595 typedef enum _HAL_DISPLAY_BIOS_INFORMATION
{
1596 HalDisplayInt10Bios
,
1597 HalDisplayEmulatedBios
,
1599 } HAL_DISPLAY_BIOS_INFORMATION
, *PHAL_DISPLAY_BIOS_INFORMATION
;
1601 typedef struct _HAL_POWER_INFORMATION
{
1603 } HAL_POWER_INFORMATION
, *PHAL_POWER_INFORMATION
;
1605 typedef struct _HAL_PROCESSOR_SPEED_INFO
{
1606 ULONG ProcessorSpeed
;
1607 } HAL_PROCESSOR_SPEED_INFORMATION
, *PHAL_PROCESSOR_SPEED_INFORMATION
;
1609 typedef struct _HAL_CALLBACKS
{
1610 PCALLBACK_OBJECT SetSystemInformation
;
1611 PCALLBACK_OBJECT BusCheck
;
1612 } HAL_CALLBACKS
, *PHAL_CALLBACKS
;
1614 typedef struct _HAL_PROCESSOR_FEATURE
{
1615 ULONG UsableFeatureBits
;
1616 } HAL_PROCESSOR_FEATURE
;
1619 (NTAPI
*PHALIOREADWRITEHANDLER
)(
1623 IN OUT PULONG pdwData
);
1625 typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST
{
1628 ULONG OSVersionTrigger
;
1629 PHALIOREADWRITEHANDLER IOHandler
;
1630 } HAL_AMLI_BAD_IO_ADDRESS_LIST
, *PHAL_AMLI_BAD_IO_ADDRESS_LIST
;
1632 #if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
1635 (NTAPI
*PHALMCAINTERFACELOCK
)(
1639 (NTAPI
*PHALMCAINTERFACEUNLOCK
)(
1643 (NTAPI
*PHALMCAINTERFACEREADREGISTER
)(
1644 IN UCHAR BankNumber
,
1645 IN OUT PVOID Exception
);
1647 typedef struct _HAL_MCA_INTERFACE
{
1648 PHALMCAINTERFACELOCK Lock
;
1649 PHALMCAINTERFACEUNLOCK Unlock
;
1650 PHALMCAINTERFACEREADREGISTER ReadRegister
;
1651 } HAL_MCA_INTERFACE
;
1654 ApicDestinationModePhysical
= 1,
1655 ApicDestinationModeLogicalFlat
,
1656 ApicDestinationModeLogicalClustered
,
1657 ApicDestinationModeUnknown
1658 } HAL_APIC_DESTINATION_MODE
, *PHAL_APIC_DESTINATION_MODE
;
1660 #if defined(_AMD64_)
1662 struct _KTRAP_FRAME
;
1663 struct _KEXCEPTION_FRAME
;
1665 typedef ERROR_SEVERITY
1666 (NTAPI
*PDRIVER_EXCPTN_CALLBACK
)(
1668 IN
struct _KTRAP_FRAME
*TrapFrame
,
1669 IN
struct _KEXCEPTION_FRAME
*ExceptionFrame
,
1670 IN PMCA_EXCEPTION Exception
);
1674 #if defined(_X86_) || defined(_IA64_)
1681 (NTAPI
*PDRIVER_EXCPTN_CALLBACK
)(
1683 IN PMCA_EXCEPTION BankLog
);
1686 typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK
;
1688 typedef struct _MCA_DRIVER_INFO
{
1689 PDRIVER_MCA_EXCEPTION_CALLBACK ExceptionCallback
;
1690 PKDEFERRED_ROUTINE DpcCallback
;
1691 PVOID DeviceContext
;
1692 } MCA_DRIVER_INFO
, *PMCA_DRIVER_INFO
;
1694 typedef struct _HAL_ERROR_INFO
{
1698 ULONG McaPreviousEventsCount
;
1699 ULONG McaCorrectedEventsCount
;
1700 ULONG McaKernelDeliveryFails
;
1701 ULONG McaDriverDpcQueueFails
;
1704 ULONG CmcPollingInterval
;
1705 ULONG CmcInterruptsCount
;
1706 ULONG CmcKernelDeliveryFails
;
1707 ULONG CmcDriverDpcQueueFails
;
1708 ULONG CmcGetStateFails
;
1709 ULONG CmcClearStateFails
;
1713 ULONG CpePollingInterval
;
1714 ULONG CpeInterruptsCount
;
1715 ULONG CpeKernelDeliveryFails
;
1716 ULONG CpeDriverDpcQueueFails
;
1717 ULONG CpeGetStateFails
;
1718 ULONG CpeClearStateFails
;
1719 ULONG CpeInterruptSources
;
1721 ULONGLONG KernelReserved
[4];
1722 } HAL_ERROR_INFO
, *PHAL_ERROR_INFO
;
1724 #define HAL_MCE_INTERRUPTS_BASED ((ULONG)-1)
1725 #define HAL_MCE_DISABLED ((ULONG)0)
1727 #define HAL_CMC_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
1728 #define HAL_CMC_DISABLED HAL_MCE_DISABLED
1730 #define HAL_CPE_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
1731 #define HAL_CPE_DISABLED HAL_MCE_DISABLED
1733 #define HAL_MCA_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
1734 #define HAL_MCA_DISABLED HAL_MCE_DISABLED
1737 (NTAPI
*PDRIVER_CMC_EXCEPTION_CALLBACK
)(
1739 IN PCMC_EXCEPTION CmcLog
);
1742 (NTAPI
*PDRIVER_CPE_EXCEPTION_CALLBACK
)(
1744 IN PCPE_EXCEPTION CmcLog
);
1746 typedef struct _CMC_DRIVER_INFO
{
1747 PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback
;
1748 PKDEFERRED_ROUTINE DpcCallback
;
1749 PVOID DeviceContext
;
1750 } CMC_DRIVER_INFO
, *PCMC_DRIVER_INFO
;
1752 typedef struct _CPE_DRIVER_INFO
{
1753 PDRIVER_CPE_EXCEPTION_CALLBACK ExceptionCallback
;
1754 PKDEFERRED_ROUTINE DpcCallback
;
1755 PVOID DeviceContext
;
1756 } CPE_DRIVER_INFO
, *PCPE_DRIVER_INFO
;
1758 #endif // defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
1763 (*HALSENDCROSSPARTITIONIPI
)(
1764 IN USHORT ProcessorID
,
1765 IN UCHAR HardwareVector
);
1768 (*HALRESERVECROSSPARTITIONINTERRUPTVECTOR
)(
1771 IN OUT PGROUP_AFFINITY Affinity
,
1772 OUT PUCHAR HardwareVector
);
1775 (*HALFREECROSSPARTITIONINTERRUPTVECTOR
)(
1777 IN PGROUP_AFFINITY Affinity
);
1779 typedef struct _HAL_CROSS_PARTITION_IPI_INTERFACE
{
1780 HALSENDCROSSPARTITIONIPI HalSendCrossPartitionIpi
;
1781 HALRESERVECROSSPARTITIONINTERRUPTVECTOR HalReserveCrossPartitionInterruptVector
;
1782 HALFREECROSSPARTITIONINTERRUPTVECTOR HalFreeCrossPartitionInterruptVector
;
1783 } HAL_CROSS_PARTITION_IPI_INTERFACE
;
1785 #define HAL_CROSS_PARTITION_IPI_INTERFACE_MINIMUM_SIZE \
1786 FIELD_OFFSET(HAL_CROSS_PARTITION_IPI_INTERFACE, \
1787 HalFreeCrossPartitionInterruptVector)
1789 #endif /* defined(_IA64_) */
1791 typedef struct _HAL_PLATFORM_INFORMATION
{
1792 ULONG PlatformFlags
;
1793 } HAL_PLATFORM_INFORMATION
, *PHAL_PLATFORM_INFORMATION
;
1795 #define HAL_PLATFORM_DISABLE_WRITE_COMBINING 0x01L
1796 #define HAL_PLATFORM_DISABLE_PTCG 0x04L
1797 #define HAL_PLATFORM_DISABLE_UC_MAIN_MEMORY 0x08L
1798 #define HAL_PLATFORM_ENABLE_WRITE_COMBINING_MMIO 0x10L
1799 #define HAL_PLATFORM_ACPI_TABLES_CACHED 0x20L
1801 /******************************************************************************
1803 ******************************************************************************/
1805 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
1806 #define NX_SUPPORT_POLICY_ALWAYSON 1
1807 #define NX_SUPPORT_POLICY_OPTIN 2
1808 #define NX_SUPPORT_POLICY_OPTOUT 3
1811 (NTAPI
*PEXPAND_STACK_CALLOUT
)(
1812 IN PVOID Parameter OPTIONAL
);
1815 (NTAPI
*PTIMER_APC_ROUTINE
)(
1816 IN PVOID TimerContext
,
1817 IN ULONG TimerLowValue
,
1818 IN LONG TimerHighValue
);
1820 typedef enum _TIMER_SET_INFORMATION_CLASS
{
1821 TimerSetCoalescableTimer
,
1823 } TIMER_SET_INFORMATION_CLASS
;
1825 #if (NTDDI_VERSION >= NTDDI_WIN7)
1826 typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO
{
1827 IN LARGE_INTEGER DueTime
;
1828 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
;
1829 IN PVOID TimerContext OPTIONAL
;
1830 IN
struct _COUNTED_REASON_CONTEXT
*WakeContext OPTIONAL
;
1831 IN ULONG Period OPTIONAL
;
1832 IN ULONG TolerableDelay
;
1833 OUT PBOOLEAN PreviousState OPTIONAL
;
1834 } TIMER_SET_COALESCABLE_TIMER_INFO
, *PTIMER_SET_COALESCABLE_TIMER_INFO
;
1835 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1837 #define XSTATE_LEGACY_FLOATING_POINT 0
1838 #define XSTATE_LEGACY_SSE 1
1839 #define XSTATE_GSSE 2
1841 #define XSTATE_MASK_LEGACY_FLOATING_POINT (1i64 << (XSTATE_LEGACY_FLOATING_POINT))
1842 #define XSTATE_MASK_LEGACY_SSE (1i64 << (XSTATE_LEGACY_SSE))
1843 #define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
1844 #define XSTATE_MASK_GSSE (1i64 << (XSTATE_GSSE))
1846 #define MAXIMUM_XSTATE_FEATURES 64
1848 typedef struct _XSTATE_FEATURE
{
1851 } XSTATE_FEATURE
, *PXSTATE_FEATURE
;
1853 typedef struct _XSTATE_CONFIGURATION
{
1854 ULONG64 EnabledFeatures
;
1856 ULONG OptimizedSave
:1;
1857 XSTATE_FEATURE Features
[MAXIMUM_XSTATE_FEATURES
];
1858 } XSTATE_CONFIGURATION
, *PXSTATE_CONFIGURATION
;
1860 #define MAX_WOW64_SHARED_ENTRIES 16
1862 typedef struct _KUSER_SHARED_DATA
{
1863 ULONG TickCountLowDeprecated
;
1864 ULONG TickCountMultiplier
;
1865 volatile KSYSTEM_TIME InterruptTime
;
1866 volatile KSYSTEM_TIME SystemTime
;
1867 volatile KSYSTEM_TIME TimeZoneBias
;
1868 USHORT ImageNumberLow
;
1869 USHORT ImageNumberHigh
;
1870 WCHAR NtSystemRoot
[260];
1871 ULONG MaxStackTraceDepth
;
1872 ULONG CryptoExponent
;
1874 ULONG LargePageMinimum
;
1876 NT_PRODUCT_TYPE NtProductType
;
1877 BOOLEAN ProductTypeIsValid
;
1878 ULONG NtMajorVersion
;
1879 ULONG NtMinorVersion
;
1880 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
1883 volatile ULONG TimeSlip
;
1884 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
1885 ULONG AltArchitecturePad
[1];
1886 LARGE_INTEGER SystemExpirationDate
;
1888 BOOLEAN KdDebuggerEnabled
;
1889 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
1890 UCHAR NXSupportPolicy
;
1892 volatile ULONG ActiveConsoleId
;
1893 volatile ULONG DismountCount
;
1894 ULONG ComPlusPackage
;
1895 ULONG LastSystemRITEventTickCount
;
1896 ULONG NumberOfPhysicalPages
;
1897 BOOLEAN SafeBootMode
;
1898 #if (NTDDI_VERSION >= NTDDI_WIN7)
1902 UCHAR TscQpcEnabled
:1;
1903 UCHAR TscQpcSpareFlag
:1;
1904 UCHAR TscQpcShift
:6;
1909 #if (NTDDI_VERSION >= NTDDI_VISTA)
1911 ULONG SharedDataFlags
;
1913 ULONG DbgErrorPortPresent
:1;
1914 ULONG DbgElevationEnabled
:1;
1915 ULONG DbgVirtEnabled
:1;
1916 ULONG DbgInstallerDetectEnabled
:1;
1917 ULONG DbgSystemDllRelocated
:1;
1918 ULONG DbgDynProcessorEnabled
:1;
1919 ULONG DbgSEHValidationEnabled
:1;
1926 ULONG DataFlagsPad
[1];
1927 ULONGLONG TestRetInstruction
;
1929 ULONG SystemCallReturn
;
1930 ULONGLONG SystemCallPad
[3];
1931 _ANONYMOUS_UNION
union {
1932 volatile KSYSTEM_TIME TickCount
;
1933 volatile ULONG64 TickCountQuad
;
1934 _ANONYMOUS_STRUCT
struct {
1935 ULONG ReservedTickCountOverlay
[3];
1936 ULONG TickCountPad
[1];
1941 #if (NTDDI_VERSION >= NTDDI_WS03)
1942 LONGLONG ConsoleSessionForegroundProcessId
;
1943 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
1945 #if (NTDDI_VERSION >= NTDDI_VISTA)
1946 #if (NTDDI_VERSION >= NTDDI_WIN7)
1947 USHORT UserModeGlobalLogger
[16];
1949 USHORT UserModeGlobalLogger
[8];
1950 ULONG HeapTracingPid
[2];
1951 ULONG CritSecTracingPid
[2];
1953 ULONG ImageFileExecutionOptions
;
1954 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
1955 ULONG LangGenerationCount
;
1957 /* 4 bytes padding */
1959 ULONGLONG Reserved5
;
1960 volatile ULONG64 InterruptTimeBias
;
1962 #if (NTDDI_VERSION >= NTDDI_WIN7)
1963 volatile ULONG64 TscQpcBias
;
1964 volatile ULONG ActiveProcessorCount
;
1965 volatile USHORT ActiveGroupCount
;
1967 volatile ULONG AitSamplingValue
;
1968 volatile ULONG AppCompatFlag
;
1969 ULONGLONG SystemDllNativeRelocation
;
1970 ULONG SystemDllWowRelocation
;
1972 XSTATE_CONFIGURATION XState
;
1974 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
1976 #if (NTDDI_VERSION >= NTDDI_VISTA)
1977 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
1978 #elif (NTDDI_VERSION >= NTDDI_WINXP)
1979 extern NTSYSAPI CCHAR KeNumberProcessors
;
1981 extern PCCHAR KeNumberProcessors
;
1985 /******************************************************************************
1986 * Kernel Debugger Types *
1987 ******************************************************************************/
1988 typedef struct _DEBUG_DEVICE_ADDRESS
{
1992 PUCHAR TranslatedAddress
;
1994 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
1996 typedef struct _DEBUG_MEMORY_REQUIREMENTS
{
1997 PHYSICAL_ADDRESS Start
;
1998 PHYSICAL_ADDRESS MaxEnd
;
1999 PVOID VirtualAddress
;
2003 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
2005 typedef struct _DEBUG_DEVICE_DESCRIPTOR
{
2014 BOOLEAN Initialized
;
2016 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
2017 DEBUG_MEMORY_REQUIREMENTS Memory
;
2018 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
2021 (NTAPI
*pKdSetupPciDeviceForDebugging
)(
2022 IN PVOID LoaderBlock OPTIONAL
,
2023 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
2026 (NTAPI
*pKdReleasePciDeviceForDebugging
)(
2027 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
2030 (NTAPI
*pKdGetAcpiTablePhase0
)(
2031 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
2032 IN ULONG Signature
);
2035 (NTAPI
*pKdCheckPowerButton
)(
2038 #if (NTDDI_VERSION >= NTDDI_VISTA)
2040 (NTAPI
*pKdMapPhysicalMemory64
)(
2041 IN PHYSICAL_ADDRESS PhysicalAddress
,
2042 IN ULONG NumberPages
,
2043 IN BOOLEAN FlushCurrentTLB
);
2046 (NTAPI
*pKdUnmapVirtualAddress
)(
2047 IN PVOID VirtualAddress
,
2048 IN ULONG NumberPages
,
2049 IN BOOLEAN FlushCurrentTLB
);
2052 (NTAPI
*pKdMapPhysicalMemory64
)(
2053 IN PHYSICAL_ADDRESS PhysicalAddress
,
2054 IN ULONG NumberPages
);
2057 (NTAPI
*pKdUnmapVirtualAddress
)(
2058 IN PVOID VirtualAddress
,
2059 IN ULONG NumberPages
);
2063 (NTAPI
*pKdGetPciDataByOffset
)(
2065 IN ULONG SlotNumber
,
2071 (NTAPI
*pKdSetPciDataByOffset
)(
2073 IN ULONG SlotNumber
,
2077 /******************************************************************************
2078 * Memory manager Types *
2079 ******************************************************************************/
2081 typedef struct _PHYSICAL_MEMORY_RANGE
{
2082 PHYSICAL_ADDRESS BaseAddress
;
2083 LARGE_INTEGER NumberOfBytes
;
2084 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
2087 (NTAPI
*PMM_ROTATE_COPY_CALLBACK_FUNCTION
)(
2088 IN PMDL DestinationMdl
,
2092 typedef enum _MM_ROTATE_DIRECTION
{
2094 MmToFrameBufferNoCopy
,
2096 MmToRegularMemoryNoCopy
,
2097 MmMaximumRotateDirection
2098 } MM_ROTATE_DIRECTION
, *PMM_ROTATE_DIRECTION
;
2101 /******************************************************************************
2102 * Process Manager Types *
2103 ******************************************************************************/
2105 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
2106 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
2107 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
2108 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
2109 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
2111 typedef struct _QUOTA_LIMITS
{
2112 SIZE_T PagedPoolLimit
;
2113 SIZE_T NonPagedPoolLimit
;
2114 SIZE_T MinimumWorkingSetSize
;
2115 SIZE_T MaximumWorkingSetSize
;
2116 SIZE_T PagefileLimit
;
2117 LARGE_INTEGER TimeLimit
;
2118 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
2120 typedef union _RATE_QUOTA_LIMIT
{
2123 ULONG RatePercent
:7;
2126 } RATE_QUOTA_LIMIT
, *PRATE_QUOTA_LIMIT
;
2128 typedef struct _QUOTA_LIMITS_EX
{
2129 SIZE_T PagedPoolLimit
;
2130 SIZE_T NonPagedPoolLimit
;
2131 SIZE_T MinimumWorkingSetSize
;
2132 SIZE_T MaximumWorkingSetSize
;
2133 SIZE_T PagefileLimit
;
2134 LARGE_INTEGER TimeLimit
;
2135 SIZE_T WorkingSetLimit
;
2140 RATE_QUOTA_LIMIT CpuRateLimit
;
2141 } QUOTA_LIMITS_EX
, *PQUOTA_LIMITS_EX
;
2143 typedef struct _IO_COUNTERS
{
2144 ULONGLONG ReadOperationCount
;
2145 ULONGLONG WriteOperationCount
;
2146 ULONGLONG OtherOperationCount
;
2147 ULONGLONG ReadTransferCount
;
2148 ULONGLONG WriteTransferCount
;
2149 ULONGLONG OtherTransferCount
;
2150 } IO_COUNTERS
, *PIO_COUNTERS
;
2152 typedef struct _VM_COUNTERS
{
2153 SIZE_T PeakVirtualSize
;
2155 ULONG PageFaultCount
;
2156 SIZE_T PeakWorkingSetSize
;
2157 SIZE_T WorkingSetSize
;
2158 SIZE_T QuotaPeakPagedPoolUsage
;
2159 SIZE_T QuotaPagedPoolUsage
;
2160 SIZE_T QuotaPeakNonPagedPoolUsage
;
2161 SIZE_T QuotaNonPagedPoolUsage
;
2162 SIZE_T PagefileUsage
;
2163 SIZE_T PeakPagefileUsage
;
2164 } VM_COUNTERS
, *PVM_COUNTERS
;
2166 typedef struct _VM_COUNTERS_EX
{
2167 SIZE_T PeakVirtualSize
;
2169 ULONG PageFaultCount
;
2170 SIZE_T PeakWorkingSetSize
;
2171 SIZE_T WorkingSetSize
;
2172 SIZE_T QuotaPeakPagedPoolUsage
;
2173 SIZE_T QuotaPagedPoolUsage
;
2174 SIZE_T QuotaPeakNonPagedPoolUsage
;
2175 SIZE_T QuotaNonPagedPoolUsage
;
2176 SIZE_T PagefileUsage
;
2177 SIZE_T PeakPagefileUsage
;
2178 SIZE_T PrivateUsage
;
2179 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
2181 #define MAX_HW_COUNTERS 16
2182 #define THREAD_PROFILING_FLAG_DISPATCH 0x00000001
2184 typedef enum _HARDWARE_COUNTER_TYPE
{
2186 MaxHardwareCounterType
2187 } HARDWARE_COUNTER_TYPE
, *PHARDWARE_COUNTER_TYPE
;
2189 typedef struct _HARDWARE_COUNTER
{
2190 HARDWARE_COUNTER_TYPE Type
;
2193 } HARDWARE_COUNTER
, *PHARDWARE_COUNTER
;
2195 typedef struct _POOLED_USAGE_AND_LIMITS
{
2196 SIZE_T PeakPagedPoolUsage
;
2197 SIZE_T PagedPoolUsage
;
2198 SIZE_T PagedPoolLimit
;
2199 SIZE_T PeakNonPagedPoolUsage
;
2200 SIZE_T NonPagedPoolUsage
;
2201 SIZE_T NonPagedPoolLimit
;
2202 SIZE_T PeakPagefileUsage
;
2203 SIZE_T PagefileUsage
;
2204 SIZE_T PagefileLimit
;
2205 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
2207 typedef struct _PROCESS_ACCESS_TOKEN
{
2210 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
2212 #define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS 0x00000003UL
2213 #define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1))
2215 typedef struct _PROCESS_EXCEPTION_PORT
{
2216 IN HANDLE ExceptionPortHandle
;
2217 IN OUT ULONG StateFlags
;
2218 } PROCESS_EXCEPTION_PORT
, *PPROCESS_EXCEPTION_PORT
;
2221 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
2223 IN HANDLE ProcessId
,
2226 typedef struct _PS_CREATE_NOTIFY_INFO
{
2231 IN ULONG FileOpenNameAvailable
:1;
2232 IN ULONG Reserved
:31;
2235 IN HANDLE ParentProcessId
;
2236 IN CLIENT_ID CreatingThreadId
;
2237 IN OUT
struct _FILE_OBJECT
*FileObject
;
2238 IN PCUNICODE_STRING ImageFileName
;
2239 IN PCUNICODE_STRING CommandLine OPTIONAL
;
2240 IN OUT NTSTATUS CreationStatus
;
2241 } PS_CREATE_NOTIFY_INFO
, *PPS_CREATE_NOTIFY_INFO
;
2244 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE_EX
)(
2245 IN OUT PEPROCESS Process
,
2246 IN HANDLE ProcessId
,
2247 IN PPS_CREATE_NOTIFY_INFO CreateInfo OPTIONAL
);
2250 (NTAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
2251 IN HANDLE ProcessId
,
2255 #define IMAGE_ADDRESSING_MODE_32BIT 3
2257 typedef struct _IMAGE_INFO
{
2258 _ANONYMOUS_UNION
union {
2260 _ANONYMOUS_STRUCT
struct {
2261 ULONG ImageAddressingMode
:8;
2262 ULONG SystemModeImage
:1;
2263 ULONG ImageMappedToAllPids
:1;
2264 ULONG ExtendedInfoPresent
:1;
2269 ULONG ImageSelector
;
2271 ULONG ImageSectionNumber
;
2272 } IMAGE_INFO
, *PIMAGE_INFO
;
2274 typedef struct _IMAGE_INFO_EX
{
2276 IMAGE_INFO ImageInfo
;
2277 struct _FILE_OBJECT
*FileObject
;
2278 } IMAGE_INFO_EX
, *PIMAGE_INFO_EX
;
2281 (NTAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
2282 IN PUNICODE_STRING FullImageName
,
2283 IN HANDLE ProcessId
,
2284 IN PIMAGE_INFO ImageInfo
);
2286 #define THREAD_CSWITCH_PMU_DISABLE FALSE
2287 #define THREAD_CSWITCH_PMU_ENABLE TRUE
2289 #define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001
2291 #define PROCESS_HANDLE_TRACING_MAX_STACKS 16
2293 typedef struct _NT_TIB
{
2294 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
2298 _ANONYMOUS_UNION
union {
2302 PVOID ArbitraryUserPointer
;
2303 struct _NT_TIB
*Self
;
2306 typedef struct _NT_TIB32
{
2307 ULONG ExceptionList
;
2311 __GNU_EXTENSION
union {
2315 ULONG ArbitraryUserPointer
;
2317 } NT_TIB32
,*PNT_TIB32
;
2319 typedef struct _NT_TIB64
{
2320 ULONG64 ExceptionList
;
2323 ULONG64 SubSystemTib
;
2324 __GNU_EXTENSION
union {
2328 ULONG64 ArbitraryUserPointer
;
2330 } NT_TIB64
,*PNT_TIB64
;
2332 typedef enum _PROCESSINFOCLASS
{
2333 ProcessBasicInformation
,
2338 ProcessBasePriority
,
2339 ProcessRaisePriority
,
2341 ProcessExceptionPort
,
2343 ProcessLdtInformation
,
2345 ProcessDefaultHardErrorMode
,
2346 ProcessIoPortHandlers
,
2347 ProcessPooledUsageAndLimits
,
2348 ProcessWorkingSetWatch
,
2349 ProcessUserModeIOPL
,
2350 ProcessEnableAlignmentFaultFixup
,
2351 ProcessPriorityClass
,
2352 ProcessWx86Information
,
2354 ProcessAffinityMask
,
2355 ProcessPriorityBoost
,
2357 ProcessSessionInformation
,
2358 ProcessForegroundInformation
,
2359 ProcessWow64Information
,
2360 ProcessImageFileName
,
2361 ProcessLUIDDeviceMapsEnabled
,
2362 ProcessBreakOnTermination
,
2363 ProcessDebugObjectHandle
,
2365 ProcessHandleTracing
,
2367 ProcessExecuteFlags
,
2368 ProcessTlsInformation
,
2370 ProcessImageInformation
,
2372 ProcessPagePriority
,
2373 ProcessInstrumentationCallback
,
2374 ProcessThreadStackAllocation
,
2375 ProcessWorkingSetWatchEx
,
2376 ProcessImageFileNameWin32
,
2377 ProcessImageFileMapping
,
2378 ProcessAffinityUpdateMode
,
2379 ProcessMemoryAllocationMode
,
2380 ProcessGroupInformation
,
2381 ProcessTokenVirtualizationEnabled
,
2382 ProcessConsoleHostProcess
,
2383 ProcessWindowInformation
,
2387 typedef enum _THREADINFOCLASS
{
2388 ThreadBasicInformation
,
2393 ThreadImpersonationToken
,
2394 ThreadDescriptorTableEntry
,
2395 ThreadEnableAlignmentFaultFixup
,
2396 ThreadEventPair_Reusable
,
2397 ThreadQuerySetWin32StartAddress
,
2399 ThreadPerformanceCount
,
2400 ThreadAmILastThread
,
2401 ThreadIdealProcessor
,
2402 ThreadPriorityBoost
,
2403 ThreadSetTlsArrayAddress
,
2405 ThreadHideFromDebugger
,
2406 ThreadBreakOnTermination
,
2407 ThreadSwitchLegacyState
,
2409 ThreadLastSystemCall
,
2413 ThreadActualBasePriority
,
2414 ThreadTebInformation
,
2418 ThreadGroupInformation
,
2419 ThreadUmsInformation
,
2420 ThreadCounterProfiling
,
2421 ThreadIdealProcessorEx
,
2425 typedef struct _PAGE_PRIORITY_INFORMATION
{
2427 } PAGE_PRIORITY_INFORMATION
, *PPAGE_PRIORITY_INFORMATION
;
2429 typedef struct _PROCESS_WS_WATCH_INFORMATION
{
2432 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
2434 typedef struct _PROCESS_BASIC_INFORMATION
{
2435 NTSTATUS ExitStatus
;
2436 struct _PEB
*PebBaseAddress
;
2437 ULONG_PTR AffinityMask
;
2438 KPRIORITY BasePriority
;
2439 ULONG_PTR UniqueProcessId
;
2440 ULONG_PTR InheritedFromUniqueProcessId
;
2441 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
2443 typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION
{
2445 PROCESS_BASIC_INFORMATION BasicInfo
;
2449 ULONG IsProtectedProcess
:1;
2450 ULONG IsWow64Process
:1;
2451 ULONG IsProcessDeleting
:1;
2452 ULONG IsCrossSessionCreate
:1;
2456 } PROCESS_EXTENDED_BASIC_INFORMATION
, *PPROCESS_EXTENDED_BASIC_INFORMATION
;
2458 typedef struct _PROCESS_DEVICEMAP_INFORMATION
{
2459 __GNU_EXTENSION
union {
2461 HANDLE DirectoryHandle
;
2465 UCHAR DriveType
[32];
2468 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
2470 typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX
{
2473 HANDLE DirectoryHandle
;
2477 UCHAR DriveType
[32];
2481 } PROCESS_DEVICEMAP_INFORMATION_EX
, *PPROCESS_DEVICEMAP_INFORMATION_EX
;
2483 typedef struct _PROCESS_SESSION_INFORMATION
{
2485 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
2487 typedef struct _PROCESS_HANDLE_TRACING_ENABLE
{
2489 } PROCESS_HANDLE_TRACING_ENABLE
, *PPROCESS_HANDLE_TRACING_ENABLE
;
2491 typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX
{
2494 } PROCESS_HANDLE_TRACING_ENABLE_EX
, *PPROCESS_HANDLE_TRACING_ENABLE_EX
;
2496 typedef struct _PROCESS_HANDLE_TRACING_ENTRY
{
2500 PVOID Stacks
[PROCESS_HANDLE_TRACING_MAX_STACKS
];
2501 } PROCESS_HANDLE_TRACING_ENTRY
, *PPROCESS_HANDLE_TRACING_ENTRY
;
2503 typedef struct _PROCESS_HANDLE_TRACING_QUERY
{
2506 PROCESS_HANDLE_TRACING_ENTRY HandleTrace
[1];
2507 } PROCESS_HANDLE_TRACING_QUERY
, *PPROCESS_HANDLE_TRACING_QUERY
;
2509 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess
;
2512 /******************************************************************************
2513 * Runtime Library Types *
2514 ******************************************************************************/
2518 #ifndef _RTL_RUN_ONCE_DEF
2519 #define _RTL_RUN_ONCE_DEF
2521 #define RTL_RUN_ONCE_INIT {0}
2523 #define RTL_RUN_ONCE_CHECK_ONLY 0x00000001UL
2524 #define RTL_RUN_ONCE_ASYNC 0x00000002UL
2525 #define RTL_RUN_ONCE_INIT_FAILED 0x00000004UL
2527 #define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
2529 #define RTL_HASH_ALLOCATED_HEADER 0x00000001
2531 #define RTL_HASH_RESERVED_SIGNATURE 0
2533 /* RtlVerifyVersionInfo() ComparisonType */
2536 #define VER_GREATER 2
2537 #define VER_GREATER_EQUAL 3
2539 #define VER_LESS_EQUAL 5
2543 #define VER_CONDITION_MASK 7
2544 #define VER_NUM_BITS_PER_CONDITION_MASK 3
2546 /* RtlVerifyVersionInfo() TypeMask */
2548 #define VER_MINORVERSION 0x0000001
2549 #define VER_MAJORVERSION 0x0000002
2550 #define VER_BUILDNUMBER 0x0000004
2551 #define VER_PLATFORMID 0x0000008
2552 #define VER_SERVICEPACKMINOR 0x0000010
2553 #define VER_SERVICEPACKMAJOR 0x0000020
2554 #define VER_SUITENAME 0x0000040
2555 #define VER_PRODUCT_TYPE 0x0000080
2557 #define VER_NT_WORKSTATION 0x0000001
2558 #define VER_NT_DOMAIN_CONTROLLER 0x0000002
2559 #define VER_NT_SERVER 0x0000003
2561 #define VER_PLATFORM_WIN32s 0
2562 #define VER_PLATFORM_WIN32_WINDOWS 1
2563 #define VER_PLATFORM_WIN32_NT 2
2565 typedef union _RTL_RUN_ONCE
{
2567 } RTL_RUN_ONCE
, *PRTL_RUN_ONCE
;
2569 typedef ULONG
/* LOGICAL */
2570 (NTAPI
*PRTL_RUN_ONCE_INIT_FN
) (
2571 IN OUT PRTL_RUN_ONCE RunOnce
,
2572 IN OUT PVOID Parameter OPTIONAL
,
2573 IN OUT PVOID
*Context OPTIONAL
);
2575 #endif /* _RTL_RUN_ONCE_DEF */
2577 typedef enum _TABLE_SEARCH_RESULT
{
2582 } TABLE_SEARCH_RESULT
;
2584 typedef enum _RTL_GENERIC_COMPARE_RESULTS
{
2588 } RTL_GENERIC_COMPARE_RESULTS
;
2591 struct _RTL_AVL_TABLE
;
2593 typedef RTL_GENERIC_COMPARE_RESULTS
2594 (NTAPI
*PRTL_AVL_COMPARE_ROUTINE
) (
2595 IN
struct _RTL_AVL_TABLE
*Table
,
2596 IN PVOID FirstStruct
,
2597 IN PVOID SecondStruct
);
2600 (NTAPI
*PRTL_AVL_ALLOCATE_ROUTINE
) (
2601 IN
struct _RTL_AVL_TABLE
*Table
,
2605 (NTAPI
*PRTL_AVL_FREE_ROUTINE
) (
2606 IN
struct _RTL_AVL_TABLE
*Table
,
2610 (NTAPI
*PRTL_AVL_MATCH_FUNCTION
) (
2611 IN
struct _RTL_AVL_TABLE
*Table
,
2613 IN PVOID MatchData
);
2615 typedef struct _RTL_BALANCED_LINKS
{
2616 struct _RTL_BALANCED_LINKS
*Parent
;
2617 struct _RTL_BALANCED_LINKS
*LeftChild
;
2618 struct _RTL_BALANCED_LINKS
*RightChild
;
2621 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
2623 typedef struct _RTL_AVL_TABLE
{
2624 RTL_BALANCED_LINKS BalancedRoot
;
2625 PVOID OrderedPointer
;
2626 ULONG WhichOrderedElement
;
2627 ULONG NumberGenericTableElements
;
2629 PRTL_BALANCED_LINKS RestartKey
;
2631 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
2632 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
2633 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
2635 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
2637 #ifndef RTL_USE_AVL_TABLES
2639 struct _RTL_GENERIC_TABLE
;
2641 typedef RTL_GENERIC_COMPARE_RESULTS
2642 (NTAPI
*PRTL_GENERIC_COMPARE_ROUTINE
) (
2643 IN
struct _RTL_GENERIC_TABLE
*Table
,
2644 IN PVOID FirstStruct
,
2645 IN PVOID SecondStruct
);
2648 (NTAPI
*PRTL_GENERIC_ALLOCATE_ROUTINE
) (
2649 IN
struct _RTL_GENERIC_TABLE
*Table
,
2653 (NTAPI
*PRTL_GENERIC_FREE_ROUTINE
) (
2654 IN
struct _RTL_GENERIC_TABLE
*Table
,
2657 typedef struct _RTL_SPLAY_LINKS
{
2658 struct _RTL_SPLAY_LINKS
*Parent
;
2659 struct _RTL_SPLAY_LINKS
*LeftChild
;
2660 struct _RTL_SPLAY_LINKS
*RightChild
;
2661 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
2663 typedef struct _RTL_GENERIC_TABLE
{
2664 PRTL_SPLAY_LINKS TableRoot
;
2665 LIST_ENTRY InsertOrderList
;
2666 PLIST_ENTRY OrderedPointer
;
2667 ULONG WhichOrderedElement
;
2668 ULONG NumberGenericTableElements
;
2669 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
2670 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
2671 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
2673 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
2675 #endif /* !RTL_USE_AVL_TABLES */
2677 #ifdef RTL_USE_AVL_TABLES
2679 #undef PRTL_GENERIC_COMPARE_ROUTINE
2680 #undef RTL_GENERIC_COMPARE_ROUTINE
2681 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
2682 #undef RTL_GENERIC_ALLOCATE_ROUTINE
2683 #undef PRTL_GENERIC_FREE_ROUTINE
2684 #undef RTL_GENERIC_FREE_ROUTINE
2685 #undef RTL_GENERIC_TABLE
2686 #undef PRTL_GENERIC_TABLE
2688 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
2689 #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
2690 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
2691 #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
2692 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
2693 #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
2694 #define RTL_GENERIC_TABLE RTL_AVL_TABLE
2695 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
2697 #endif /* RTL_USE_AVL_TABLES */
2699 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY
{
2701 ULONG_PTR Signature
;
2702 } RTL_DYNAMIC_HASH_TABLE_ENTRY
, *PRTL_DYNAMIC_HASH_TABLE_ENTRY
;
2704 typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT
{
2705 PLIST_ENTRY ChainHead
;
2706 PLIST_ENTRY PrevLinkage
;
2707 ULONG_PTR Signature
;
2708 } RTL_DYNAMIC_HASH_TABLE_CONTEXT
, *PRTL_DYNAMIC_HASH_TABLE_CONTEXT
;
2710 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR
{
2711 RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry
;
2712 PLIST_ENTRY ChainHead
;
2714 } RTL_DYNAMIC_HASH_TABLE_ENUMERATOR
, *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR
;
2716 typedef struct _RTL_DYNAMIC_HASH_TABLE
{
2723 ULONG NonEmptyBuckets
;
2724 ULONG NumEnumerators
;
2726 } RTL_DYNAMIC_HASH_TABLE
, *PRTL_DYNAMIC_HASH_TABLE
;
2728 typedef struct _OSVERSIONINFOA
{
2729 ULONG dwOSVersionInfoSize
;
2730 ULONG dwMajorVersion
;
2731 ULONG dwMinorVersion
;
2732 ULONG dwBuildNumber
;
2734 CHAR szCSDVersion
[128];
2735 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
2737 typedef struct _OSVERSIONINFOW
{
2738 ULONG dwOSVersionInfoSize
;
2739 ULONG dwMajorVersion
;
2740 ULONG dwMinorVersion
;
2741 ULONG dwBuildNumber
;
2743 WCHAR szCSDVersion
[128];
2744 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
2746 typedef struct _OSVERSIONINFOEXA
{
2747 ULONG dwOSVersionInfoSize
;
2748 ULONG dwMajorVersion
;
2749 ULONG dwMinorVersion
;
2750 ULONG dwBuildNumber
;
2752 CHAR szCSDVersion
[128];
2753 USHORT wServicePackMajor
;
2754 USHORT wServicePackMinor
;
2758 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
2760 typedef struct _OSVERSIONINFOEXW
{
2761 ULONG dwOSVersionInfoSize
;
2762 ULONG dwMajorVersion
;
2763 ULONG dwMinorVersion
;
2764 ULONG dwBuildNumber
;
2766 WCHAR szCSDVersion
[128];
2767 USHORT wServicePackMajor
;
2768 USHORT wServicePackMinor
;
2772 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
2775 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
2776 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
2777 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
2778 typedef OSVERSIONINFOW OSVERSIONINFO
;
2779 typedef POSVERSIONINFOW POSVERSIONINFO
;
2780 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
2782 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
2783 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
2784 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
2785 typedef OSVERSIONINFOA OSVERSIONINFO
;
2786 typedef POSVERSIONINFOA POSVERSIONINFO
;
2787 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
2788 #endif /* UNICODE */
2790 #define HASH_ENTRY_KEY(x) ((x)->Signature)
2792 /******************************************************************************
2793 * Security Manager Types *
2794 ******************************************************************************/
2795 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
2797 typedef enum _WELL_KNOWN_SID_TYPE
{
2801 WinCreatorOwnerSid
= 3,
2802 WinCreatorGroupSid
= 4,
2803 WinCreatorOwnerServerSid
= 5,
2804 WinCreatorGroupServerSid
= 6,
2805 WinNtAuthoritySid
= 7,
2809 WinInteractiveSid
= 11,
2811 WinAnonymousSid
= 13,
2813 WinEnterpriseControllersSid
= 15,
2815 WinAuthenticatedUserSid
= 17,
2816 WinRestrictedCodeSid
= 18,
2817 WinTerminalServerSid
= 19,
2818 WinRemoteLogonIdSid
= 20,
2819 WinLogonIdsSid
= 21,
2820 WinLocalSystemSid
= 22,
2821 WinLocalServiceSid
= 23,
2822 WinNetworkServiceSid
= 24,
2823 WinBuiltinDomainSid
= 25,
2824 WinBuiltinAdministratorsSid
= 26,
2825 WinBuiltinUsersSid
= 27,
2826 WinBuiltinGuestsSid
= 28,
2827 WinBuiltinPowerUsersSid
= 29,
2828 WinBuiltinAccountOperatorsSid
= 30,
2829 WinBuiltinSystemOperatorsSid
= 31,
2830 WinBuiltinPrintOperatorsSid
= 32,
2831 WinBuiltinBackupOperatorsSid
= 33,
2832 WinBuiltinReplicatorSid
= 34,
2833 WinBuiltinPreWindows2000CompatibleAccessSid
= 35,
2834 WinBuiltinRemoteDesktopUsersSid
= 36,
2835 WinBuiltinNetworkConfigurationOperatorsSid
= 37,
2836 WinAccountAdministratorSid
= 38,
2837 WinAccountGuestSid
= 39,
2838 WinAccountKrbtgtSid
= 40,
2839 WinAccountDomainAdminsSid
= 41,
2840 WinAccountDomainUsersSid
= 42,
2841 WinAccountDomainGuestsSid
= 43,
2842 WinAccountComputersSid
= 44,
2843 WinAccountControllersSid
= 45,
2844 WinAccountCertAdminsSid
= 46,
2845 WinAccountSchemaAdminsSid
= 47,
2846 WinAccountEnterpriseAdminsSid
= 48,
2847 WinAccountPolicyAdminsSid
= 49,
2848 WinAccountRasAndIasServersSid
= 50,
2849 WinNTLMAuthenticationSid
= 51,
2850 WinDigestAuthenticationSid
= 52,
2851 WinSChannelAuthenticationSid
= 53,
2852 WinThisOrganizationSid
= 54,
2853 WinOtherOrganizationSid
= 55,
2854 WinBuiltinIncomingForestTrustBuildersSid
= 56,
2855 WinBuiltinPerfMonitoringUsersSid
= 57,
2856 WinBuiltinPerfLoggingUsersSid
= 58,
2857 WinBuiltinAuthorizationAccessSid
= 59,
2858 WinBuiltinTerminalServerLicenseServersSid
= 60,
2859 WinBuiltinDCOMUsersSid
= 61,
2860 WinBuiltinIUsersSid
= 62,
2862 WinBuiltinCryptoOperatorsSid
= 64,
2863 WinUntrustedLabelSid
= 65,
2864 WinLowLabelSid
= 66,
2865 WinMediumLabelSid
= 67,
2866 WinHighLabelSid
= 68,
2867 WinSystemLabelSid
= 69,
2868 WinWriteRestrictedCodeSid
= 70,
2869 WinCreatorOwnerRightsSid
= 71,
2870 WinCacheablePrincipalsGroupSid
= 72,
2871 WinNonCacheablePrincipalsGroupSid
= 73,
2872 WinEnterpriseReadonlyControllersSid
= 74,
2873 WinAccountReadonlyControllersSid
= 75,
2874 WinBuiltinEventLogReadersGroup
= 76,
2875 WinNewEnterpriseReadonlyControllersSid
= 77,
2876 WinBuiltinCertSvcDComAccessGroup
= 78,
2877 WinMediumPlusLabelSid
= 79,
2878 WinLocalLogonSid
= 80,
2879 WinConsoleLogonSid
= 81,
2880 WinThisOrganizationCertificateSid
= 82,
2881 } WELL_KNOWN_SID_TYPE
;
2885 #if defined(_M_IX86)
2887 #define PAUSE_PROCESSOR YieldProcessor();
2889 #define KERNEL_STACK_SIZE 12288
2890 #define KERNEL_LARGE_STACK_SIZE 61440
2891 #define KERNEL_LARGE_STACK_COMMIT 12288
2893 #define SIZE_OF_80387_REGISTERS 80
2895 #if !defined(RC_INVOKED)
2897 #define CONTEXT_i386 0x10000
2898 #define CONTEXT_i486 0x10000
2899 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
2900 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
2901 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
2902 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
2903 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
2904 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
2906 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
2907 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
2908 CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \
2909 CONTEXT_EXTENDED_REGISTERS)
2911 #define CONTEXT_XSTATE (CONTEXT_i386 | 0x00000040L)
2913 #endif /* !defined(RC_INVOKED) */
2915 typedef struct _FLOATING_SAVE_AREA
{
2920 ULONG ErrorSelector
;
2923 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
2925 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
2927 #include "pshpack4.h"
2928 typedef struct _CONTEXT
{
2936 FLOATING_SAVE_AREA FloatSave
;
2953 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
2955 #include "poppack.h"
2957 #define KeGetPcr() PCR
2959 #define PCR_MINOR_VERSION 1
2960 #define PCR_MAJOR_VERSION 1
2962 typedef struct _KPCR
{
2966 struct _EXCEPTION_REGISTRATION_RECORD
*Used_ExceptionList
;
2967 PVOID Used_StackBase
;
2970 ULONG ContextSwitches
;
2971 KAFFINITY SetMemberCopy
;
2975 struct _KPCR
*SelfPcr
;
2976 struct _KPRCB
*Prcb
;
2981 PVOID KdVersionBlock
;
2982 struct _KIDTENTRY
*IDT
;
2983 struct _KGDTENTRY
*GDT
;
2985 USHORT MajorVersion
;
2986 USHORT MinorVersion
;
2987 KAFFINITY SetMember
;
2988 ULONG StallScaleFactor
;
2992 UCHAR SecondLevelCacheAssociativity
;
2994 ULONG KernelReserved
[14];
2995 ULONG SecondLevelCacheSize
;
2996 ULONG HalReserved
[16];
3001 KeGetCurrentProcessorNumber(VOID
)
3003 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
3011 extern NTKERNELAPI PVOID MmHighestUserAddress
;
3012 extern NTKERNELAPI PVOID MmSystemRangeStart
;
3013 extern NTKERNELAPI ULONG MmUserProbeAddress
;
3015 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
3016 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
3017 #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
3018 #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
3019 extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_
;
3021 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
3023 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
3024 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
3025 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
3026 #if !defined (_X86PAE_)
3027 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
3029 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
3032 #elif defined(_M_AMD64)
3034 #define PAUSE_PROCESSOR YieldProcessor();
3036 #define KERNEL_STACK_SIZE 0x6000
3037 #define KERNEL_LARGE_STACK_SIZE 0x12000
3038 #define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE
3040 #define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000
3042 #define EXCEPTION_READ_FAULT 0
3043 #define EXCEPTION_WRITE_FAULT 1
3044 #define EXCEPTION_EXECUTE_FAULT 8
3046 #if !defined(RC_INVOKED)
3048 #define CONTEXT_AMD64 0x100000
3050 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
3051 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
3052 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
3053 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
3054 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
3056 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
3057 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
3059 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
3061 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
3062 #define CONTEXT_SERVICE_ACTIVE 0x10000000
3063 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
3064 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
3066 #endif /* !defined(RC_INVOKED) */
3068 #define INITIAL_MXCSR 0x1f80
3069 #define INITIAL_FPCSR 0x027f
3071 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
3111 XMM_SAVE_AREA32 FltSave
;
3133 M128A VectorRegister
[26];
3134 ULONG64 VectorControl
;
3135 ULONG64 DebugControl
;
3136 ULONG64 LastBranchToRip
;
3137 ULONG64 LastBranchFromRip
;
3138 ULONG64 LastExceptionToRip
;
3139 ULONG64 LastExceptionFromRip
;
3142 #define PCR_MINOR_VERSION 1
3143 #define PCR_MAJOR_VERSION 1
3145 typedef struct _KPCR
3147 _ANONYMOUS_UNION
union
3150 _ANONYMOUS_STRUCT
struct
3152 union _KGDTENTRY64
*GdtBase
;
3153 struct _KTSS64
*TssBase
;
3156 struct _KPRCB
*CurrentPrcb
;
3157 PKSPIN_LOCK_QUEUE LockArray
;
3161 union _KIDTENTRY64
*IdtBase
;
3164 UCHAR SecondLevelCacheAssociativity
;
3165 UCHAR ObsoleteNumber
;
3168 USHORT MajorVersion
;
3169 USHORT MinorVersion
;
3170 ULONG StallScaleFactor
;
3172 ULONG KernelReserved
[15];
3173 ULONG SecondLevelCacheSize
;
3174 ULONG HalReserved
[16];
3176 PVOID KdVersionBlock
;
3178 ULONG PcrAlign1
[24];
3185 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
3190 KeGetCurrentProcessorNumber(VOID
)
3192 return (ULONG
)__readgsword(0x184);
3196 #define PTI_SHIFT 12L
3197 #define PDI_SHIFT 21L
3198 #define PPI_SHIFT 30L
3199 #define PXI_SHIFT 39L
3200 #define PTE_PER_PAGE 512
3201 #define PDE_PER_PAGE 512
3202 #define PPE_PER_PAGE 512
3203 #define PXE_PER_PAGE 512
3204 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
3205 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
3206 #define PPI_MASK (PPE_PER_PAGE - 1)
3207 #define PXI_MASK (PXE_PER_PAGE - 1)
3209 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
3210 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
3211 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
3212 #define PDE_BASE 0xFFFFF6FB40000000ULL
3213 #define PTE_BASE 0xFFFFF68000000000ULL
3214 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
3215 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
3216 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
3217 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
3219 extern NTKERNELAPI PVOID MmHighestUserAddress
;
3220 extern NTKERNELAPI PVOID MmSystemRangeStart
;
3221 extern NTKERNELAPI ULONG64 MmUserProbeAddress
;
3223 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
3224 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
3225 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
3226 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
3227 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
3230 #elif defined(_M_IA64)
3232 #elif defined(_M_PPC)
3235 #elif defined(_M_MIPS)
3237 #elif defined(_M_ARM)
3239 #error Unknown Architecture
3242 /******************************************************************************
3243 * Executive Functions *
3244 ******************************************************************************/
3245 static __inline PVOID
3247 IN PZONE_HEADER Zone
)
3249 if (Zone
->FreeList
.Next
)
3250 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
3251 return (PVOID
) Zone
->FreeList
.Next
;
3254 static __inline PVOID
3256 IN PZONE_HEADER Zone
,
3259 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
3260 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
3261 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
3266 * ExInterlockedAllocateFromZone(
3267 * IN PZONE_HEADER Zone,
3268 * IN PKSPIN_LOCK Lock)
3270 #define ExInterlockedAllocateFromZone(Zone, Lock) \
3271 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
3274 * ExInterlockedFreeToZone(
3275 * IN PZONE_HEADER Zone,
3277 * IN PKSPIN_LOCK Lock);
3279 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
3280 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
3285 * IN PZONE_HEADER Zone)
3287 #define ExIsFullZone(Zone) \
3288 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
3291 * ExIsObjectInFirstZoneSegment(
3292 * IN PZONE_HEADER Zone,
3295 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
3296 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
3297 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
3298 (Zone)->TotalSegmentSize)) )
3300 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
3301 #define ExAcquireResourceShared ExAcquireResourceSharedLite
3302 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
3303 #define ExDeleteResource ExDeleteResourceLite
3304 #define ExInitializeResource ExInitializeResourceLite
3305 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
3306 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
3307 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
3308 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
3312 typedef enum _INTERLOCKED_RESULT
{
3313 ResultNegative
= RESULT_NEGATIVE
,
3314 ResultZero
= RESULT_ZERO
,
3315 ResultPositive
= RESULT_POSITIVE
3316 } INTERLOCKED_RESULT
;
3321 Exfi386InterlockedIncrementLong(
3322 IN OUT LONG
volatile *Addend
);
3327 Exfi386InterlockedDecrementLong(
3333 Exfi386InterlockedExchangeUlong(
3340 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3345 IN OUT PZONE_HEADER Zone
,
3346 IN OUT PVOID Segment
,
3347 IN ULONG SegmentSize
);
3353 OUT PZONE_HEADER Zone
,
3355 IN OUT PVOID InitialSegment
,
3356 IN ULONG InitialSegmentSize
);
3361 ExInterlockedExtendZone(
3362 IN OUT PZONE_HEADER Zone
,
3363 IN OUT PVOID Segment
,
3364 IN ULONG SegmentSize
,
3365 IN OUT PKSPIN_LOCK Lock
);
3377 ExRaiseAccessViolation(VOID
);
3383 ExRaiseDatatypeMisalignment(VOID
);
3386 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3389 /* Hardware Abstraction Layer Functions */
3391 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3393 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
3397 #else /* USE_DMA_MACROS ... */
3399 //DECLSPEC_DEPRECATED_DDK
3403 IoFreeAdapterChannel(
3404 IN PADAPTER_OBJECT AdapterObject
);
3406 //DECLSPEC_DEPRECATED_DDK
3410 IoFlushAdapterBuffers(
3411 IN PADAPTER_OBJECT AdapterObject
,
3413 IN PVOID MapRegisterBase
,
3416 IN BOOLEAN WriteToDevice
);
3418 //DECLSPEC_DEPRECATED_DDK
3423 IN PADAPTER_OBJECT AdapterObject
,
3424 IN PVOID MapRegisterBase
,
3425 IN ULONG NumberOfMapRegisters
);
3427 //DECLSPEC_DEPRECATED_DDK
3431 HalAllocateCommonBuffer(
3432 IN PADAPTER_OBJECT AdapterObject
,
3434 OUT PPHYSICAL_ADDRESS LogicalAddress
,
3435 IN BOOLEAN CacheEnabled
);
3437 //DECLSPEC_DEPRECATED_DDK
3441 HalFreeCommonBuffer(
3442 IN PADAPTER_OBJECT AdapterObject
,
3444 IN PHYSICAL_ADDRESS LogicalAddress
,
3445 IN PVOID VirtualAddress
,
3446 IN BOOLEAN CacheEnabled
);
3448 //DECLSPEC_DEPRECATED_DDK
3453 IN PADAPTER_OBJECT AdapterObject
);
3458 HalAllocateAdapterChannel(
3459 IN PADAPTER_OBJECT AdapterObject
,
3460 IN PWAIT_CONTEXT_BLOCK Wcb
,
3461 IN ULONG NumberOfMapRegisters
,
3462 IN PDRIVER_CONTROL ExecutionRoutine
);
3464 #endif /* USE_DMA_MACROS ... */
3466 #if !defined(NO_LEGACY_DRIVERS)
3470 HalAssignSlotResources(
3471 IN PUNICODE_STRING RegistryPath
,
3472 IN PUNICODE_STRING DriverClassName
,
3473 IN PDRIVER_OBJECT DriverObject
,
3474 IN PDEVICE_OBJECT DeviceObject
,
3475 IN INTERFACE_TYPE BusType
,
3477 IN ULONG SlotNumber
,
3478 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
3483 HalGetInterruptVector(
3484 IN INTERFACE_TYPE InterfaceType
,
3486 IN ULONG BusInterruptLevel
,
3487 IN ULONG BusInterruptVector
,
3489 OUT PKAFFINITY Affinity
);
3495 IN BUS_DATA_TYPE BusDataType
,
3497 IN ULONG SlotNumber
,
3505 IN BUS_DATA_TYPE BusDataType
,
3507 IN ULONG SlotNumber
,
3515 IN ULONG Frequency
);
3516 #endif /* !defined(NO_LEGACY_DRIVERS) */
3522 IN PDEVICE_DESCRIPTION DeviceDescription
,
3523 OUT PULONG NumberOfMapRegisters
);
3528 IN PADAPTER_OBJECT DmaAdapter
);
3533 HalAcquireDisplayOwnership(
3534 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
3539 HalGetBusDataByOffset(
3540 IN BUS_DATA_TYPE BusDataType
,
3542 IN ULONG SlotNumber
,
3550 HalSetBusDataByOffset(
3551 IN BUS_DATA_TYPE BusDataType
,
3553 IN ULONG SlotNumber
,
3561 HalTranslateBusAddress(
3562 IN INTERFACE_TYPE InterfaceType
,
3564 IN PHYSICAL_ADDRESS BusAddress
,
3565 IN OUT PULONG AddressSpace
,
3566 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
3571 HalAllocateCrashDumpRegisters(
3572 IN PADAPTER_OBJECT AdapterObject
,
3573 IN OUT PULONG NumberOfMapRegisters
);
3577 HalGetScatterGatherList(
3578 IN PADAPTER_OBJECT DmaAdapter
,
3579 IN PDEVICE_OBJECT DeviceObject
,
3583 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
3585 IN BOOLEAN WriteToDevice
);
3589 HalPutScatterGatherList(
3590 IN PADAPTER_OBJECT DmaAdapter
,
3591 IN PSCATTER_GATHER_LIST ScatterGather
,
3592 IN BOOLEAN WriteToDevice
);
3594 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3596 #if (NTDDI_VERSION >= NTDDI_WINXP)
3601 IN PDEVICE_OBJECT DeviceObject
,
3602 IN ULONG SectorSize
,
3603 IN ULONG MBRTypeIdentifier
,
3605 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
3607 #if (NTDDI_VERSION >= NTDDI_WIN7)
3611 HalAllocateHardwareCounters(
3612 IN PGROUP_AFFINITY GroupAffinty
,
3613 IN ULONG GroupCount
,
3614 IN PPHYSICAL_COUNTER_RESOURCE_LIST ResourceList
,
3615 OUT PHANDLE CounterSetHandle
);
3619 HalFreeHardwareCounters(
3620 IN HANDLE CounterSetHandle
);
3622 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
3625 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3629 HalGetDmaAlignmentRequirement(VOID
);
3631 #endif /* defined(_IA64_) */
3633 #if defined(_M_IX86) || defined(_M_AMD64)
3634 #define HalGetDmaAlignmentRequirement() 1L
3637 #if (NTDDI_VERSION >= NTDDI_WIN7)
3639 typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR
*PWHEA_ERROR_SOURCE_DESCRIPTOR
;
3640 typedef struct _WHEA_ERROR_RECORD
*PWHEA_ERROR_RECORD
;
3646 IN PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource
,
3647 IN PWHEA_ERROR_RECORD ErrorRecord
);
3651 typedef struct _WHEA_ERROR_RECORD
*PWHEA_ERROR_RECORD
;
3657 IN PWHEA_ERROR_RECORD ErrorRecord
);
3659 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
3662 /******************************************************************************
3663 * I/O Manager Functions *
3664 ******************************************************************************/
3666 * VOID IoAssignArcName(
3667 * IN PUNICODE_STRING ArcName,
3668 * IN PUNICODE_STRING DeviceName);
3670 #define IoAssignArcName(_ArcName, _DeviceName) ( \
3671 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
3675 * IoDeassignArcName(
3676 * IN PUNICODE_STRING ArcName)
3678 #define IoDeassignArcName IoDeleteSymbolicLink
3683 IoInitializeDriverCreateContext(
3684 PIO_DRIVER_CREATE_CONTEXT DriverContext
)
3686 RtlZeroMemory(DriverContext
, sizeof(IO_DRIVER_CREATE_CONTEXT
));
3687 DriverContext
->Size
= sizeof(IO_DRIVER_CREATE_CONTEXT
);
3692 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3693 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
3697 IoAllocateAdapterChannel(
3698 IN PADAPTER_OBJECT AdapterObject
,
3699 IN PDEVICE_OBJECT DeviceObject
,
3700 IN ULONG NumberOfMapRegisters
,
3701 IN PDRIVER_CONTROL ExecutionRoutine
,
3705 #if !defined(DMA_MACROS_DEFINED)
3706 //DECLSPEC_DEPRECATED_DDK
3711 IN PADAPTER_OBJECT AdapterObject
,
3713 IN PVOID MapRegisterBase
,
3715 IN OUT PULONG Length
,
3716 IN BOOLEAN WriteToDevice
);
3722 IoAllocateController(
3723 IN PCONTROLLER_OBJECT ControllerObject
,
3724 IN PDEVICE_OBJECT DeviceObject
,
3725 IN PDRIVER_CONTROL ExecutionRoutine
,
3726 IN PVOID Context OPTIONAL
);
3738 IN PCONTROLLER_OBJECT ControllerObject
);
3744 IN PCONTROLLER_OBJECT ControllerObject
);
3747 PCONFIGURATION_INFORMATION
3749 IoGetConfigurationInformation(VOID
);
3754 IoGetDeviceToVerify(
3755 IN PETHREAD Thread
);
3761 IN PDEVICE_OBJECT DeviceObject
,
3762 IN PFILE_OBJECT FileObject
);
3767 IoGetFileObjectGenericMapping(VOID
);
3772 IoMakeAssociatedIrp(
3774 IN CCHAR StackSize
);
3779 IoQueryDeviceDescription(
3780 IN PINTERFACE_TYPE BusType OPTIONAL
,
3781 IN PULONG BusNumber OPTIONAL
,
3782 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
3783 IN PULONG ControllerNumber OPTIONAL
,
3784 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
3785 IN PULONG PeripheralNumber OPTIONAL
,
3786 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
3787 IN OUT PVOID Context OPTIONAL
);
3794 IN PVPB Vpb OPTIONAL
,
3795 IN PDEVICE_OBJECT RealDeviceObject
);
3800 IoRaiseInformationalHardError(
3801 IN NTSTATUS ErrorStatus
,
3802 IN PUNICODE_STRING String OPTIONAL
,
3803 IN PKTHREAD Thread OPTIONAL
);
3808 IoRegisterBootDriverReinitialization(
3809 IN PDRIVER_OBJECT DriverObject
,
3810 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
3811 IN PVOID Context OPTIONAL
);
3816 IoRegisterDriverReinitialization(
3817 IN PDRIVER_OBJECT DriverObject
,
3818 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
3819 IN PVOID Context OPTIONAL
);
3824 IoAttachDeviceByPointer(
3825 IN PDEVICE_OBJECT SourceDevice
,
3826 IN PDEVICE_OBJECT TargetDevice
);
3831 IoReportDetectedDevice(
3832 IN PDRIVER_OBJECT DriverObject
,
3833 IN INTERFACE_TYPE LegacyBusType
,
3835 IN ULONG SlotNumber
,
3836 IN PCM_RESOURCE_LIST ResourceList OPTIONAL
,
3837 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
3838 IN BOOLEAN ResourceAssigned
,
3839 IN OUT PDEVICE_OBJECT
*DeviceObject OPTIONAL
);
3844 IoReportResourceForDetection(
3845 IN PDRIVER_OBJECT DriverObject
,
3846 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
3847 IN ULONG DriverListSize OPTIONAL
,
3848 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
3849 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
3850 IN ULONG DeviceListSize OPTIONAL
,
3851 OUT PBOOLEAN ConflictDetected
);
3856 IoReportResourceUsage(
3857 IN PUNICODE_STRING DriverClassName OPTIONAL
,
3858 IN PDRIVER_OBJECT DriverObject
,
3859 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
3860 IN ULONG DriverListSize OPTIONAL
,
3861 IN PDEVICE_OBJECT DeviceObject
,
3862 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
3863 IN ULONG DeviceListSize OPTIONAL
,
3864 IN BOOLEAN OverrideConflict
,
3865 OUT PBOOLEAN ConflictDetected
);
3870 IoSetHardErrorOrVerifyDevice(
3872 IN PDEVICE_OBJECT DeviceObject
);
3878 IN PUNICODE_STRING RegistryPath
,
3879 IN PUNICODE_STRING DriverClassName OPTIONAL
,
3880 IN PDRIVER_OBJECT DriverObject
,
3881 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
3882 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL
,
3883 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
3888 IoSetThreadHardErrorMode(
3889 IN BOOLEAN EnableHardErrors
);
3891 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3893 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
3898 IoIsFileOriginRemote(
3899 IN PFILE_OBJECT FileObject
);
3905 IN PFILE_OBJECT FileObject
,
3908 #endif /* (NTDDI_VERSION >= NTDDI_WIN2KSP3) */
3910 #if (NTDDI_VERSION >= NTDDI_WINXP)
3914 IoReadPartitionTable(
3915 IN PDEVICE_OBJECT DeviceObject
,
3916 IN ULONG SectorSize
,
3917 IN BOOLEAN ReturnRecognizedPartitions
,
3918 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
3923 IoSetPartitionInformation(
3924 IN PDEVICE_OBJECT DeviceObject
,
3925 IN ULONG SectorSize
,
3926 IN ULONG PartitionNumber
,
3927 IN ULONG PartitionType
);
3932 IoWritePartitionTable(
3933 IN PDEVICE_OBJECT DeviceObject
,
3934 IN ULONG SectorSize
,
3935 IN ULONG SectorsPerTrack
,
3936 IN ULONG NumberOfHeads
,
3937 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
3943 IN PDEVICE_OBJECT DeviceObject
,
3944 IN
struct _CREATE_DISK
* Disk OPTIONAL
);
3949 IoReadDiskSignature(
3950 IN PDEVICE_OBJECT DeviceObject
,
3951 IN ULONG BytesPerSector
,
3952 OUT PDISK_SIGNATURE Signature
);
3957 IoReadPartitionTableEx(
3958 IN PDEVICE_OBJECT DeviceObject
,
3959 OUT
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
3964 IoSetPartitionInformationEx(
3965 IN PDEVICE_OBJECT DeviceObject
,
3966 IN ULONG PartitionNumber
,
3967 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
3972 IoSetSystemPartition(
3973 IN PUNICODE_STRING VolumeNameString
);
3978 IoVerifyPartitionTable(
3979 IN PDEVICE_OBJECT DeviceObject
,
3980 IN BOOLEAN FixErrors
);
3985 IoVolumeDeviceToDosName(
3986 IN PVOID VolumeDeviceObject
,
3987 OUT PUNICODE_STRING DosName
);
3992 IoWritePartitionTableEx(
3993 IN PDEVICE_OBJECT DeviceObject
,
3994 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*DriveLayout
);
3999 IoCreateFileSpecifyDeviceObjectHint(
4000 OUT PHANDLE FileHandle
,
4001 IN ACCESS_MASK DesiredAccess
,
4002 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4003 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4004 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
4005 IN ULONG FileAttributes
,
4006 IN ULONG ShareAccess
,
4007 IN ULONG Disposition
,
4008 IN ULONG CreateOptions
,
4009 IN PVOID EaBuffer OPTIONAL
,
4011 IN CREATE_FILE_TYPE CreateFileType
,
4012 IN PVOID InternalParameters OPTIONAL
,
4014 IN PVOID DeviceObject OPTIONAL
);
4019 IoAttachDeviceToDeviceStackSafe(
4020 IN PDEVICE_OBJECT SourceDevice
,
4021 IN PDEVICE_OBJECT TargetDevice
,
4022 OUT PDEVICE_OBJECT
*AttachedToDeviceObject
);
4024 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4027 #if (NTDDI_VERSION >= NTDDI_WS03)
4031 IoGetPagingIoPriority(
4034 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
4036 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
4039 IoTranslateBusAddress(
4040 IN INTERFACE_TYPE InterfaceType
,
4042 IN PHYSICAL_ADDRESS BusAddress
,
4043 IN OUT PULONG AddressSpace
,
4044 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
4047 #if (NTDDI_VERSION >= NTDDI_VISTA)
4051 IoUpdateDiskGeometry(
4052 IN PDEVICE_OBJECT DeviceObject
,
4053 IN
struct _DISK_GEOMETRY_EX
* OldDiskGeometry
,
4054 IN
struct _DISK_GEOMETRY_EX
* NewDiskGeometry
);
4056 PTXN_PARAMETER_BLOCK
4058 IoGetTransactionParameterBlock(
4059 IN PFILE_OBJECT FileObject
);
4065 OUT PHANDLE FileHandle
,
4066 IN ACCESS_MASK DesiredAccess
,
4067 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4068 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4069 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
4070 IN ULONG FileAttributes
,
4071 IN ULONG ShareAccess
,
4072 IN ULONG Disposition
,
4073 IN ULONG CreateOptions
,
4074 IN PVOID EaBuffer OPTIONAL
,
4076 IN CREATE_FILE_TYPE CreateFileType
,
4077 IN PVOID InternalParameters OPTIONAL
,
4079 IN PIO_DRIVER_CREATE_CONTEXT DriverContext OPTIONAL
);
4083 IoSetIrpExtraCreateParameter(
4085 IN
struct _ECP_LIST
*ExtraCreateParameter
);
4089 IoClearIrpExtraCreateParameter(
4094 IoGetIrpExtraCreateParameter(
4096 OUT
struct _ECP_LIST
**ExtraCreateParameter OPTIONAL
);
4100 IoIsFileObjectIgnoringSharing(
4101 IN PFILE_OBJECT FileObject
);
4104 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4107 #if (NTDDI_VERSION >= NTDDI_WIN7)
4110 IoSetFileObjectIgnoreSharing(
4111 IN PFILE_OBJECT FileObject
);
4114 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4117 /******************************************************************************
4118 * Kernel Debugger Functions *
4119 ******************************************************************************/
4126 IN ULONG MaximumResponseLength
);
4128 /******************************************************************************
4129 * Kernel Functions *
4130 ******************************************************************************/
4134 KeInvalidateRangeAllCaches(
4135 IN PVOID BaseAddress
,
4139 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4146 IN KDPC_IMPORTANCE Importance
);
4152 IN OUT PRKEVENT Event
,
4153 IN KPRIORITY Increment
,
4159 KeSetBasePriorityThread(
4160 IN OUT PRKTHREAD Thread
,
4166 KeEnterCriticalRegion(VOID
);
4171 KeLeaveCriticalRegion(VOID
);
4178 IN ULONG BugCheckCode
);
4181 #if defined(SINGLE_GROUP_LEGACY_API)
4187 KeSetTargetProcessorDpc(
4194 KeQueryActiveProcessors(VOID
);
4196 #endif /* defined(SINGLE_GROUP_LEGACY_API) */
4199 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4201 #if (NTDDI_VERSION >= NTDDI_WINXP)
4205 KeAreApcsDisabled(VOID
);
4208 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4211 #if (NTDDI_VERSION >= NTDDI_WS03)
4217 KeInvalidateAllCaches(VOID
);
4219 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
4221 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
4226 KeExpandKernelStackAndCallout(
4227 IN PEXPAND_STACK_CALLOUT Callout
,
4228 IN PVOID Parameter OPTIONAL
,
4234 KeEnterGuardedRegion(VOID
);
4239 KeLeaveGuardedRegion(VOID
);
4242 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
4244 #if (NTDDI_VERSION >= NTDDI_VISTA)
4247 #if defined(SINGLE_GROUP_LEGACY_API)
4251 KeQueryActiveProcessorCount(
4252 OUT PKAFFINITY ActiveProcessors OPTIONAL
);
4257 KeQueryMaximumProcessorCount(VOID
);
4259 #endif /* SINGLE_GROUP_LEGACY_API */
4261 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4264 #if (NTDDI_VERSION >= NTDDI_WIN7)
4269 KeQueryActiveProcessorCountEx(
4270 IN USHORT GroupNumber
);
4275 KeQueryMaximumProcessorCountEx(
4276 IN USHORT GroupNumber
);
4281 KeQueryActiveGroupCount(VOID
);
4286 KeQueryMaximumGroupCount(VOID
);
4291 KeQueryGroupAffinity(
4292 IN USHORT GroupNumber
);
4297 KeGetCurrentProcessorNumberEx(
4298 OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL
);
4303 KeQueryNodeActiveAffinity(
4304 IN USHORT NodeNumber
,
4305 OUT PGROUP_AFFINITY Affinity OPTIONAL
,
4306 OUT PUSHORT Count OPTIONAL
);
4311 KeQueryNodeMaximumProcessorCount(
4312 IN USHORT NodeNumber
);
4317 KeQueryHighestNodeNumber(VOID
);
4322 KeGetCurrentNodeNumber(VOID
);
4327 KeQueryLogicalProcessorRelationship(
4328 IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL
,
4329 IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
4330 OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL
,
4331 IN OUT PULONG Length
);
4336 KeSetHardwareCounterConfiguration(
4337 IN PHARDWARE_COUNTER CounterArray
,
4343 KeQueryHardwareCounterConfiguration(
4344 OUT PHARDWARE_COUNTER CounterArray
,
4345 IN ULONG MaximumCount
,
4349 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4352 /******************************************************************************
4353 * Memory manager Functions *
4354 ******************************************************************************/
4356 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4358 PPHYSICAL_MEMORY_RANGE
4360 MmGetPhysicalMemoryRanges(VOID
);
4365 MmGetPhysicalAddress(
4366 IN PVOID BaseAddress
);
4371 MmIsNonPagedSystemAddressValid(
4372 IN PVOID VirtualAddress
);
4377 MmAllocateNonCachedMemory(
4378 IN SIZE_T NumberOfBytes
);
4383 MmFreeNonCachedMemory(
4384 IN PVOID BaseAddress
,
4385 IN SIZE_T NumberOfBytes
);
4390 MmGetVirtualForPhysical(
4391 IN PHYSICAL_ADDRESS PhysicalAddress
);
4396 MmMapUserAddressesToPage(
4397 IN PVOID BaseAddress
,
4398 IN SIZE_T NumberOfBytes
,
4399 IN PVOID PageAddress
);
4405 IN PHYSICAL_ADDRESS PhysicalAddress
,
4406 IN SIZE_T NumberOfBytes
,
4407 IN MEMORY_CACHING_TYPE CacheType
);
4412 MmMapViewInSessionSpace(
4414 OUT PVOID
*MappedBase
,
4415 IN OUT PSIZE_T ViewSize
);
4420 MmMapViewInSystemSpace(
4422 OUT PVOID
*MappedBase
,
4423 IN OUT PSIZE_T ViewSize
);
4429 IN PVOID VirtualAddress
);
4434 MmIsThisAnNtAsSystem(VOID
);
4439 MmLockPagableSectionByHandle(
4440 IN PVOID ImageSectionHandle
);
4445 MmUnmapViewInSessionSpace(
4446 IN PVOID MappedBase
);
4451 MmUnmapViewInSystemSpace(
4452 IN PVOID MappedBase
);
4457 MmUnsecureVirtualMemory(
4458 IN HANDLE SecureHandle
);
4463 MmRemovePhysicalMemory(
4464 IN PPHYSICAL_ADDRESS StartAddress
,
4465 IN OUT PLARGE_INTEGER NumberOfBytes
);
4470 MmSecureVirtualMemory(
4473 IN ULONG ProbeMode
);
4478 MmUnmapVideoDisplay(
4479 IN PVOID BaseAddress
,
4480 IN SIZE_T NumberOfBytes
);
4485 MmAddPhysicalMemory(
4486 IN PPHYSICAL_ADDRESS StartAddress
,
4487 IN OUT PLARGE_INTEGER NumberOfBytes
);
4492 MmAllocateContiguousMemory(
4493 IN SIZE_T NumberOfBytes
,
4494 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
4499 MmAllocateContiguousMemorySpecifyCache(
4500 IN SIZE_T NumberOfBytes
,
4501 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
4502 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
4503 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
4504 IN MEMORY_CACHING_TYPE CacheType
);
4509 MmAllocateContiguousMemorySpecifyCacheNode(
4510 IN SIZE_T NumberOfBytes
,
4511 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
4512 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
4513 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
4514 IN MEMORY_CACHING_TYPE CacheType
,
4515 IN NODE_REQUIREMENT PreferredNode
);
4520 MmFreeContiguousMemory(
4521 IN PVOID BaseAddress
);
4526 MmFreeContiguousMemorySpecifyCache(
4527 IN PVOID BaseAddress
,
4528 IN SIZE_T NumberOfBytes
,
4529 IN MEMORY_CACHING_TYPE CacheType
);
4532 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4534 #if (NTDDI_VERSION >= NTDDI_WINXP)
4541 IN ULONG NumberOfBytes
);
4546 MmAllocateMappingAddress(
4547 IN SIZE_T NumberOfBytes
,
4553 MmFreeMappingAddress(
4554 IN PVOID BaseAddress
,
4560 MmIsVerifierEnabled(
4561 OUT PULONG VerifierFlags
);
4566 MmMapLockedPagesWithReservedMapping(
4567 IN PVOID MappingAddress
,
4569 IN PMDL MemoryDescriptorList
,
4570 IN MEMORY_CACHING_TYPE CacheType
);
4575 MmProtectMdlSystemAddress(
4576 IN PMDL MemoryDescriptorList
,
4577 IN ULONG NewProtect
);
4582 MmUnmapReservedMapping(
4583 IN PVOID BaseAddress
,
4585 IN PMDL MemoryDescriptorList
);
4590 MmAddVerifierThunks(
4591 IN PVOID ThunkBuffer
,
4592 IN ULONG ThunkBufferSize
);
4594 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4596 #if (NTDDI_VERSION >= NTDDI_WS03)
4600 MmCreateMirror(VOID
);
4604 #if (NTDDI_VERSION >= NTDDI_VISTA)
4607 MmRotatePhysicalView(
4608 IN PVOID VirtualAddress
,
4609 IN OUT PSIZE_T NumberOfBytes
,
4610 IN PMDLX NewMdl OPTIONAL
,
4611 IN MM_ROTATE_DIRECTION Direction
,
4612 IN PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction
,
4613 IN PVOID Context OPTIONAL
);
4617 /******************************************************************************
4618 * Process Manager Functions *
4619 ******************************************************************************/
4625 OUT PHANDLE ProcessHandle
,
4626 IN ACCESS_MASK DesiredAccess
,
4627 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4628 IN PCLIENT_ID ClientId OPTIONAL
);
4633 NtQueryInformationProcess(
4634 IN HANDLE ProcessHandle
,
4635 IN PROCESSINFOCLASS ProcessInformationClass
,
4636 OUT PVOID ProcessInformation OPTIONAL
,
4637 IN ULONG ProcessInformationLength
,
4638 OUT PULONG ReturnLength OPTIONAL
);
4640 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4646 PsSetCreateProcessNotifyRoutine(
4647 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
4653 PsSetCreateThreadNotifyRoutine(
4654 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4659 PsSetLoadImageNotifyRoutine(
4660 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4665 PsGetCurrentProcessId(VOID
);
4670 PsGetCurrentThreadId(VOID
);
4676 OUT PULONG MajorVersion OPTIONAL
,
4677 OUT PULONG MinorVersion OPTIONAL
,
4678 OUT PULONG BuildNumber OPTIONAL
,
4679 OUT PUNICODE_STRING CSDVersion OPTIONAL
);
4681 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4683 #if (NTDDI_VERSION >= NTDDI_WINXP)
4689 IN PEPROCESS Process
);
4695 IN PETHREAD Thread
);
4700 PsRemoveCreateThreadNotifyRoutine(
4701 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4706 PsRemoveLoadImageNotifyRoutine(
4707 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4712 PsGetProcessCreateTimeQuadPart(
4713 IN PEPROCESS Process
);
4715 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4717 #if (NTDDI_VERSION >= NTDDI_WS03)
4721 PsGetThreadProcessId(
4722 IN PETHREAD Thread
);
4723 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
4725 #if (NTDDI_VERSION >= NTDDI_VISTA)
4730 PsSetCurrentThreadPrefetching(
4731 IN BOOLEAN Prefetching
);
4736 PsIsCurrentThreadPrefetching(VOID
);
4738 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4740 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
4744 PsSetCreateProcessNotifyRoutineEx(
4745 IN PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine
,
4747 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
4748 /******************************************************************************
4749 * Runtime Library Functions *
4750 ******************************************************************************/
4752 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4756 #ifndef RTL_USE_AVL_TABLES
4761 RtlInitializeGenericTable(
4762 OUT PRTL_GENERIC_TABLE Table
,
4763 IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
,
4764 IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
,
4765 IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine
,
4766 IN PVOID TableContext OPTIONAL
);
4771 RtlInsertElementGenericTable(
4772 IN PRTL_GENERIC_TABLE Table
,
4774 IN CLONG BufferSize
,
4775 OUT PBOOLEAN NewElement OPTIONAL
);
4780 RtlInsertElementGenericTableFull(
4781 IN PRTL_GENERIC_TABLE Table
,
4783 IN CLONG BufferSize
,
4784 OUT PBOOLEAN NewElement OPTIONAL
,
4785 IN PVOID NodeOrParent
,
4786 IN TABLE_SEARCH_RESULT SearchResult
);
4791 RtlDeleteElementGenericTable(
4792 IN PRTL_GENERIC_TABLE Table
,
4798 RtlLookupElementGenericTable(
4799 IN PRTL_GENERIC_TABLE Table
,
4805 RtlLookupElementGenericTableFull(
4806 IN PRTL_GENERIC_TABLE Table
,
4808 OUT PVOID
*NodeOrParent
,
4809 OUT TABLE_SEARCH_RESULT
*SearchResult
);
4814 RtlEnumerateGenericTable(
4815 IN PRTL_GENERIC_TABLE Table
,
4816 IN BOOLEAN Restart
);
4821 RtlEnumerateGenericTableWithoutSplaying(
4822 IN PRTL_GENERIC_TABLE Table
,
4823 IN OUT PVOID
*RestartKey
);
4828 RtlGetElementGenericTable(
4829 IN PRTL_GENERIC_TABLE Table
,
4835 RtlNumberGenericTableElements(
4836 IN PRTL_GENERIC_TABLE Table
);
4841 RtlIsGenericTableEmpty(
4842 IN PRTL_GENERIC_TABLE Table
);
4844 #endif /* !RTL_USE_AVL_TABLES */
4846 #define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT 8
4852 IN OUT PRTL_SPLAY_LINKS Links
);
4858 IN PRTL_SPLAY_LINKS Links
);
4864 IN PRTL_SPLAY_LINKS Links
,
4865 IN OUT PRTL_SPLAY_LINKS
*Root
);
4870 RtlSubtreeSuccessor(
4871 IN PRTL_SPLAY_LINKS Links
);
4876 RtlSubtreePredecessor(
4877 IN PRTL_SPLAY_LINKS Links
);
4883 IN PRTL_SPLAY_LINKS Links
);
4889 IN PRTL_SPLAY_LINKS Links
);
4894 RtlPrefixUnicodeString(
4895 IN PCUNICODE_STRING String1
,
4896 IN PCUNICODE_STRING String2
,
4897 IN BOOLEAN CaseInSensitive
);
4903 IN OUT PSTRING DestinationString
,
4904 IN
const PSTRING SourceString
);
4909 RtlUpcaseUnicodeString(
4910 IN OUT PUNICODE_STRING DestinationString
,
4911 IN PCUNICODE_STRING SourceString
,
4912 IN BOOLEAN AllocateDestinationString
);
4918 IN OUT PACCESS_MASK AccessMask
,
4919 IN PGENERIC_MAPPING GenericMapping
);
4924 RtlVolumeDeviceToDosName(
4925 IN PVOID VolumeDeviceObject
,
4926 OUT PUNICODE_STRING DosName
);
4932 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
4937 RtlVerifyVersionInfo(
4938 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
4940 IN ULONGLONG ConditionMask
);
4946 IN
const PSTRING String1
,
4947 IN
const PSTRING String2
,
4948 IN BOOLEAN CaseInSensitive
);
4954 OUT PSTRING DestinationString
,
4955 IN
const PSTRING SourceString OPTIONAL
);
4961 IN
const PSTRING String1
,
4962 IN
const PSTRING String2
,
4963 IN BOOLEAN CaseInSensitive
);
4970 IN ULONG Base OPTIONAL
,
4989 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4992 #if (NTDDI_VERSION >= NTDDI_WINXP)
4998 RtlInitializeGenericTableAvl(
4999 OUT PRTL_AVL_TABLE Table
,
5000 IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine
,
5001 IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
,
5002 IN PRTL_AVL_FREE_ROUTINE FreeRoutine
,
5003 IN PVOID TableContext OPTIONAL
);
5008 RtlInsertElementGenericTableAvl(
5009 IN PRTL_AVL_TABLE Table
,
5011 IN CLONG BufferSize
,
5012 OUT PBOOLEAN NewElement OPTIONAL
);
5017 RtlInsertElementGenericTableFullAvl(
5018 IN PRTL_AVL_TABLE Table
,
5020 IN CLONG BufferSize
,
5021 OUT PBOOLEAN NewElement OPTIONAL
,
5022 IN PVOID NodeOrParent
,
5023 IN TABLE_SEARCH_RESULT SearchResult
);
5028 RtlDeleteElementGenericTableAvl(
5029 IN PRTL_AVL_TABLE Table
,
5035 RtlLookupElementGenericTableAvl(
5036 IN PRTL_AVL_TABLE Table
,
5042 RtlLookupElementGenericTableFullAvl(
5043 IN PRTL_AVL_TABLE Table
,
5045 OUT PVOID
*NodeOrParent
,
5046 OUT TABLE_SEARCH_RESULT
*SearchResult
);
5051 RtlEnumerateGenericTableAvl(
5052 IN PRTL_AVL_TABLE Table
,
5053 IN BOOLEAN Restart
);
5058 RtlEnumerateGenericTableWithoutSplayingAvl(
5059 IN PRTL_AVL_TABLE Table
,
5060 IN OUT PVOID
*RestartKey
);
5065 RtlLookupFirstMatchingElementGenericTableAvl(
5066 IN PRTL_AVL_TABLE Table
,
5068 OUT PVOID
*RestartKey
);
5073 RtlEnumerateGenericTableLikeADirectory(
5074 IN PRTL_AVL_TABLE Table
,
5075 IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL
,
5076 IN PVOID MatchData OPTIONAL
,
5078 IN OUT PVOID
*RestartKey
,
5079 IN OUT PULONG DeleteCount
,
5085 RtlGetElementGenericTableAvl(
5086 IN PRTL_AVL_TABLE Table
,
5092 RtlNumberGenericTableElementsAvl(
5093 IN PRTL_AVL_TABLE Table
);
5098 RtlIsGenericTableEmptyAvl(
5099 IN PRTL_AVL_TABLE Table
);
5103 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5105 #if (NTDDI_VERSION >= NTDDI_VISTA)
5111 RtlRunOnceInitialize(
5112 OUT PRTL_RUN_ONCE RunOnce
);
5117 RtlRunOnceExecuteOnce(
5118 IN OUT PRTL_RUN_ONCE RunOnce
,
5119 IN PRTL_RUN_ONCE_INIT_FN InitFn
,
5120 IN OUT PVOID Parameter OPTIONAL
,
5121 OUT PVOID
*Context OPTIONAL
);
5126 RtlRunOnceBeginInitialize(
5127 IN OUT PRTL_RUN_ONCE RunOnce
,
5129 OUT PVOID
*Context OPTIONAL
);
5135 IN OUT PRTL_RUN_ONCE RunOnce
,
5137 IN PVOID Context OPTIONAL
);
5143 IN ULONG OSMajorVersion
,
5144 IN ULONG OSMinorVersion
,
5145 IN ULONG SpMajorVersion
,
5146 IN ULONG SpMinorVersion
,
5147 OUT PULONG ReturnedProductType
);
5151 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
5153 #if (NTDDI_VERSION >= NTDDI_WIN7)
5160 IN OUT PRTL_DYNAMIC_HASH_TABLE
*HashTable OPTIONAL
,
5168 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
5173 RtlInsertEntryHashTable(
5174 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5175 IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry
,
5176 IN ULONG_PTR Signature
,
5177 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
5182 RtlRemoveEntryHashTable(
5183 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5184 IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry
,
5185 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
5188 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5190 RtlLookupEntryHashTable(
5191 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5192 IN ULONG_PTR Signature
,
5193 OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
5196 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5198 RtlGetNextEntryHashTable(
5199 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5200 IN PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
);
5205 RtlInitEnumerationHashTable(
5206 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5207 OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5210 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5212 RtlEnumerateEntryHashTable(
5213 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5214 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5219 RtlEndEnumerationHashTable(
5220 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5221 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5226 RtlInitWeakEnumerationHashTable(
5227 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5228 OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5231 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5233 RtlWeaklyEnumerateEntryHashTable(
5234 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5235 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5240 RtlEndWeakEnumerationHashTable(
5241 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5242 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5248 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
5253 RtlContractHashTable(
5254 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
5258 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5261 #if defined(_AMD64_) || defined(_IA64_)
5265 //DECLSPEC_DEPRECATED_DDK_WINXP
5269 RtlLargeIntegerDivide(
5270 IN LARGE_INTEGER Dividend
,
5271 IN LARGE_INTEGER Divisor
,
5272 OUT PLARGE_INTEGER Remainder OPTIONAL
)
5275 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
5277 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
5283 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5287 RtlLargeIntegerDivide(
5288 IN LARGE_INTEGER Dividend
,
5289 IN LARGE_INTEGER Divisor
,
5290 OUT PLARGE_INTEGER Remainder OPTIONAL
);
5294 #endif /* defined(_AMD64_) || defined(_IA64_) */
5298 #ifdef RTL_USE_AVL_TABLES
5300 #define RtlInitializeGenericTable RtlInitializeGenericTableAvl
5301 #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
5302 #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
5303 #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
5304 #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
5305 #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
5306 #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
5307 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
5308 #define RtlGetElementGenericTable RtlGetElementGenericTableAvl
5309 #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
5310 #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
5312 #endif /* RTL_USE_AVL_TABLES */
5314 #define RtlInitializeSplayLinks(Links) { \
5315 PRTL_SPLAY_LINKS _SplayLinks; \
5316 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
5317 _SplayLinks->Parent = _SplayLinks; \
5318 _SplayLinks->LeftChild = NULL; \
5319 _SplayLinks->RightChild = NULL; \
5322 #define RtlIsLeftChild(Links) \
5323 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
5325 #define RtlIsRightChild(Links) \
5326 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
5328 #define RtlRightChild(Links) \
5329 ((PRTL_SPLAY_LINKS)(Links))->RightChild
5331 #define RtlIsRoot(Links) \
5332 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
5334 #define RtlLeftChild(Links) \
5335 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
5337 #define RtlParent(Links) \
5338 ((PRTL_SPLAY_LINKS)(Links))->Parent
5340 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
5342 PRTL_SPLAY_LINKS _SplayParent; \
5343 PRTL_SPLAY_LINKS _SplayChild; \
5344 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
5345 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
5346 _SplayParent->LeftChild = _SplayChild; \
5347 _SplayChild->Parent = _SplayParent; \
5350 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
5352 PRTL_SPLAY_LINKS _SplayParent; \
5353 PRTL_SPLAY_LINKS _SplayChild; \
5354 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
5355 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
5356 _SplayParent->RightChild = _SplayChild; \
5357 _SplayChild->Parent = _SplayParent; \
5360 #if !defined(MIDL_PASS)
5365 RtlConvertLongToLuid(
5371 Temp
.QuadPart
= Val
;
5372 Luid
.LowPart
= Temp
.u
.LowPart
;
5373 Luid
.HighPart
= Temp
.u
.HighPart
;
5380 RtlConvertUlongToLuid(
5390 #endif /* !defined(MIDL_PASS) */
5392 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
5393 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
5394 *CallersAddress = (PVOID)_ReturnAddress(); \
5395 *CallersCaller = NULL;
5397 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5401 RtlGetCallersAddress(
5402 OUT PVOID
*CallersAddress
,
5403 OUT PVOID
*CallersCaller
);
5407 #if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
5409 #if (NTDDI_VERSION >= NTDDI_WIN7)
5414 RtlInitHashTableContext(
5415 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
)
5417 Context
->ChainHead
= NULL
;
5418 Context
->PrevLinkage
= NULL
;
5424 RtlInitHashTableContextFromEnumerator(
5425 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
,
5426 IN PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
)
5428 Context
->ChainHead
= Enumerator
->ChainHead
;
5429 Context
->PrevLinkage
= Enumerator
->HashEntry
.Linkage
.Blink
;
5435 RtlReleaseHashTableContext(
5436 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
)
5438 UNREFERENCED_PARAMETER(Context
);
5445 RtlTotalBucketsHashTable(
5446 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
5448 return HashTable
->TableSize
;
5454 RtlNonEmptyBucketsHashTable(
5455 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
5457 return HashTable
->NonEmptyBuckets
;
5463 RtlEmptyBucketsHashTable(
5464 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
5466 return HashTable
->TableSize
- HashTable
->NonEmptyBuckets
;
5472 RtlTotalEntriesHashTable(
5473 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
5475 return HashTable
->NumEntries
;
5481 RtlActiveEnumeratorsHashTable(
5482 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
5484 return HashTable
->NumEnumerators
;
5487 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5489 #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
5491 /******************************************************************************
5492 * Security Manager Functions *
5493 ******************************************************************************/
5495 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5499 SeSinglePrivilegeCheck(
5500 IN LUID PrivilegeValue
,
5501 IN KPROCESSOR_MODE PreviousMode
);
5504 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5506 /******************************************************************************
5508 ******************************************************************************/
5515 ZwAllocateLocallyUniqueId(
5522 IN HANDLE ProcessHandle OPTIONAL
,
5523 IN NTSTATUS ExitStatus
);
5529 OUT PHANDLE ProcessHandle
,
5530 IN ACCESS_MASK DesiredAccess
,
5531 IN POBJECT_ATTRIBUTES ObjectAttributes
,
5532 IN PCLIENT_ID ClientId OPTIONAL
);
5535 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5541 IN HANDLE TimerHandle
,
5542 OUT PBOOLEAN CurrentState OPTIONAL
);
5547 OUT PHANDLE TimerHandle
,
5548 IN ACCESS_MASK DesiredAccess
,
5549 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
5550 IN TIMER_TYPE TimerType
);
5555 OUT PHANDLE TimerHandle
,
5556 IN ACCESS_MASK DesiredAccess
,
5557 IN POBJECT_ATTRIBUTES ObjectAttributes
);
5562 ZwSetInformationThread(
5563 IN HANDLE ThreadHandle
,
5564 IN THREADINFOCLASS ThreadInformationClass
,
5565 IN PVOID ThreadInformation
,
5566 IN ULONG ThreadInformationLength
);
5571 IN HANDLE TimerHandle
,
5572 IN PLARGE_INTEGER DueTime
,
5573 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
5574 IN PVOID TimerContext OPTIONAL
,
5575 IN BOOLEAN ResumeTimer
,
5576 IN LONG Period OPTIONAL
,
5577 OUT PBOOLEAN PreviousState OPTIONAL
);
5583 IN PUNICODE_STRING String
);
5589 IN POWER_INFORMATION_LEVEL PowerInformationLevel
,
5590 IN PVOID InputBuffer OPTIONAL
,
5591 IN ULONG InputBufferLength
,
5592 OUT PVOID OutputBuffer OPTIONAL
,
5593 IN ULONG OutputBufferLength
);
5598 ZwQueryVolumeInformationFile(
5599 IN HANDLE FileHandle
,
5600 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5601 OUT PVOID FsInformation
,
5603 IN FS_INFORMATION_CLASS FsInformationClass
);
5608 ZwDeviceIoControlFile(
5609 IN HANDLE FileHandle
,
5610 IN HANDLE Event OPTIONAL
,
5611 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
5612 IN PVOID ApcContext OPTIONAL
,
5613 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5614 IN ULONG IoControlCode
,
5615 IN PVOID InputBuffer OPTIONAL
,
5616 IN ULONG InputBufferLength
,
5617 OUT PVOID OutputBuffer OPTIONAL
,
5618 IN ULONG OutputBufferLength
);
5622 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5625 #if (NTDDI_VERSION >= NTDDI_WIN7)
5630 IN HANDLE TimerHandle
,
5631 IN TIMER_SET_INFORMATION_CLASS TimerSetInformationClass
,
5632 IN OUT PVOID TimerSetInformation
,
5633 IN ULONG TimerSetInformationLength
);
5636 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5642 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
5643 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
5644 (TypeBitMask), (ComparisonType)))
5646 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5650 VerSetConditionMask(
5651 IN ULONGLONG ConditionMask
,
5653 IN UCHAR Condition
);
5656 typedef struct _KERNEL_USER_TIMES
{
5657 LARGE_INTEGER CreateTime
;
5658 LARGE_INTEGER ExitTime
;
5659 LARGE_INTEGER KernelTime
;
5660 LARGE_INTEGER UserTime
;
5661 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
5663 /* NtXxx Functions */
5665 typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION
{
5666 SystemFirmwareTable_Enumerate
,
5667 SystemFirmwareTable_Get
5668 } SYSTEM_FIRMWARE_TABLE_ACTION
;
5670 typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION
{
5671 ULONG ProviderSignature
;
5672 SYSTEM_FIRMWARE_TABLE_ACTION Action
;
5674 ULONG TableBufferLength
;
5675 UCHAR TableBuffer
[ANYSIZE_ARRAY
];
5676 } SYSTEM_FIRMWARE_TABLE_INFORMATION
, *PSYSTEM_FIRMWARE_TABLE_INFORMATION
;
5680 IN OUT PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo
);
5682 typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER
{
5683 ULONG ProviderSignature
;
5685 PFNFTH FirmwareTableHandler
;
5687 } SYSTEM_FIRMWARE_TABLE_HANDLER
, *PSYSTEM_FIRMWARE_TABLE_HANDLER
;
5690 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
5693 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
5694 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
5695 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
5696 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
5698 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
5699 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
5700 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
5701 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
5702 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
5704 #define SHARED_GLOBAL_FLAGS_ERROR_PORT_V 0x0
5705 #define SHARED_GLOBAL_FLAGS_ERROR_PORT (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V)
5707 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1
5708 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V)
5710 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V 0x2
5711 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V)
5713 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V 0x3
5714 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED \
5715 (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V)
5717 #define SHARED_GLOBAL_FLAGS_SPARE_V 0x4
5718 #define SHARED_GLOBAL_FLAGS_SPARE \
5719 (1UL << SHARED_GLOBAL_FLAGS_SPARE_V)
5721 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V 0x5
5722 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED \
5723 (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V)
5725 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V 0x6
5726 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED \
5727 (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V)
5729 #define EX_INIT_BITS(Flags, Bit) \
5730 *((Flags)) |= (Bit) // Safe to use before concurrently accessible
5732 #define EX_TEST_SET_BIT(Flags, Bit) \
5733 InterlockedBitTestAndSet ((PLONG)(Flags), (Bit))
5735 #define EX_TEST_CLEAR_BIT(Flags, Bit) \
5736 InterlockedBitTestAndReset ((PLONG)(Flags), (Bit))
5738 #define PCCARD_MAP_ERROR 0x01
5739 #define PCCARD_DEVICE_PCI 0x10
5741 #define PCCARD_SCAN_DISABLED 0x01
5742 #define PCCARD_MAP_ZERO 0x02
5743 #define PCCARD_NO_TIMER 0x03
5744 #define PCCARD_NO_PIC 0x04
5745 #define PCCARD_NO_LEGACY_BASE 0x05
5746 #define PCCARD_DUP_LEGACY_BASE 0x06
5747 #define PCCARD_NO_CONTROLLERS 0x07
5749 #define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2))
5751 /* Filesystem runtime library routines */
5753 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5757 FsRtlIsTotalDeviceFailure(
5758 IN NTSTATUS Status
);
5761 /* FIXME : These definitions below doesn't belong to NTDDK */