4 * Windows NT Device Driver Kit
6 * This file is part of the ReactOS DDK package.
10 * Timo Kreuzer (timo.kreuzer@reactos.org)
12 * THIS SOFTWARE IS NOT COPYRIGHTED
14 * This source code is offered for use in the public domain. You may
15 * use, modify or distribute it freely.
17 * This code is distributed in the hope that it will be useful but
18 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
19 * DISCLAIMED. This includes but is not limited to warranties of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
28 #if !defined(_NTHAL_) && !defined(_NTIFS_)
29 #define _NTDDK_INCLUDED_
36 #define _CTYPE_DISABLE_MACROS
46 #include <stdarg.h> // FIXME
47 #include <basetyps.h> // FIXME
63 #endif /* _NTLSA_AUDIT_ */
64 #endif /* _NTLSA_IFS_ */
68 struct _LOADER_PARAMETER_BLOCK
;
70 struct _DRIVE_LAYOUT_INFORMATION_EX
;
71 struct _SET_PARTITION_INFORMATION_EX
;
73 typedef struct _BUS_HANDLER
*PBUS_HANDLER
;
74 typedef struct _DEVICE_HANDLER_OBJECT
*PDEVICE_HANDLER_OBJECT
;
75 #if defined(_NTHAL_INCLUDED_)
76 typedef struct _KAFFINITY_EX
*PKAFFINITY_EX
;
78 typedef struct _PEB
*PPEB
;
82 typedef struct _IMAGE_NT_HEADERS
*PIMAGE_NT_HEADERS32
;
83 typedef struct _IMAGE_NT_HEADERS64
*PIMAGE_NT_HEADERS64
;
86 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS
;
88 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS
;
91 #endif /* _NTIMAGE_ */
93 /******************************************************************************
95 ******************************************************************************/
97 typedef struct _ZONE_SEGMENT_HEADER
{
98 SINGLE_LIST_ENTRY SegmentList
;
100 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
102 typedef struct _ZONE_HEADER
{
103 SINGLE_LIST_ENTRY FreeList
;
104 SINGLE_LIST_ENTRY SegmentList
;
106 ULONG TotalSegmentSize
;
107 } ZONE_HEADER
, *PZONE_HEADER
;
109 #define PROTECTED_POOL 0x80000000
111 /******************************************************************************
112 * I/O Manager Types *
113 ******************************************************************************/
115 /* DEVICE_OBJECT.Flags */
116 #define DO_DEVICE_HAS_NAME 0x00000040
117 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
118 #define DO_LONG_TERM_REQUESTS 0x00000200
119 #define DO_NEVER_LAST_DEVICE 0x00000400
120 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
121 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
122 #define DO_FORCE_NEITHER_IO 0x00080000
123 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
124 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
125 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
126 #define DO_DISALLOW_EXECUTE 0x00800000
130 typedef enum _CONFIGURATION_TYPE
{
133 FloatingPointProcessor
,
143 MultiFunctionAdapter
,
157 FloppyDiskPeripheral
,
170 RealModeIrqRoutingTable
,
171 RealModePCIEnumeration
,
173 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
174 #endif /* !_ARC_DDK_ */
177 ** IRP function codes
180 #define IRP_MN_QUERY_DIRECTORY 0x01
181 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
183 #define IRP_MN_USER_FS_REQUEST 0x00
184 #define IRP_MN_MOUNT_VOLUME 0x01
185 #define IRP_MN_VERIFY_VOLUME 0x02
186 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
187 #define IRP_MN_TRACK_LINK 0x04
188 #define IRP_MN_KERNEL_CALL 0x04
190 #define IRP_MN_LOCK 0x01
191 #define IRP_MN_UNLOCK_SINGLE 0x02
192 #define IRP_MN_UNLOCK_ALL 0x03
193 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
195 #define IRP_MN_FLUSH_AND_PURGE 0x01
197 #define IRP_MN_NORMAL 0x00
198 #define IRP_MN_DPC 0x01
199 #define IRP_MN_MDL 0x02
200 #define IRP_MN_COMPLETE 0x04
201 #define IRP_MN_COMPRESSED 0x08
203 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
204 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
205 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
207 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
209 #define IO_CHECK_CREATE_PARAMETERS 0x0200
210 #define IO_ATTACH_DEVICE 0x0400
211 #define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800
215 (NTAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
217 IN PUNICODE_STRING PathName
,
218 IN INTERFACE_TYPE BusType
,
220 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
221 IN CONFIGURATION_TYPE ControllerType
,
222 IN ULONG ControllerNumber
,
223 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
224 IN CONFIGURATION_TYPE PeripheralType
,
225 IN ULONG PeripheralNumber
,
226 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
228 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
229 IoQueryDeviceIdentifier
= 0,
230 IoQueryDeviceConfigurationData
,
231 IoQueryDeviceComponentInformation
,
233 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
236 (NTAPI
*PDRIVER_REINITIALIZE
)(
237 IN
struct _DRIVER_OBJECT
*DriverObject
,
238 IN PVOID Context OPTIONAL
,
241 typedef struct _CONTROLLER_OBJECT
{
244 PVOID ControllerExtension
;
245 KDEVICE_QUEUE DeviceWaitQueue
;
247 LARGE_INTEGER Spare2
;
248 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
250 #define DRVO_REINIT_REGISTERED 0x00000008
251 #define DRVO_INITIALIZED 0x00000010
252 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
253 #define DRVO_LEGACY_RESOURCES 0x00000040
255 typedef struct _CONFIGURATION_INFORMATION
{
263 BOOLEAN AtDiskPrimaryAddressClaimed
;
264 BOOLEAN AtDiskSecondaryAddressClaimed
;
266 ULONG MediumChangerCount
;
267 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
269 typedef struct _DISK_SIGNATURE
{
270 ULONG PartitionStyle
;
271 _ANONYMOUS_UNION
union {
280 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
282 typedef struct _TXN_PARAMETER_BLOCK
{
285 PVOID TransactionObject
;
286 } TXN_PARAMETER_BLOCK
, *PTXN_PARAMETER_BLOCK
;
288 #define TXF_MINIVERSION_DEFAULT_VIEW (0xFFFE)
290 typedef struct _IO_DRIVER_CREATE_CONTEXT
{
292 struct _ECP_LIST
*ExtraCreateParameter
;
293 PVOID DeviceObjectHint
;
294 PTXN_PARAMETER_BLOCK TxnParameters
;
295 } IO_DRIVER_CREATE_CONTEXT
, *PIO_DRIVER_CREATE_CONTEXT
;
297 typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD
{
301 PINTERFACE_REFERENCE InterfaceReference
;
302 PINTERFACE_DEREFERENCE InterfaceDereference
;
303 PGET_SET_DEVICE_DATA SetBusData
;
304 PGET_SET_DEVICE_DATA GetBusData
;
306 } AGP_TARGET_BUS_INTERFACE_STANDARD
, *PAGP_TARGET_BUS_INTERFACE_STANDARD
;
309 (NTAPI
*PGET_LOCATION_STRING
)(
310 IN OUT PVOID Context OPTIONAL
,
311 OUT PWCHAR
*LocationStrings
);
313 typedef struct _PNP_LOCATION_INTERFACE
{
317 PINTERFACE_REFERENCE InterfaceReference
;
318 PINTERFACE_DEREFERENCE InterfaceDereference
;
319 PGET_LOCATION_STRING GetLocationString
;
320 } PNP_LOCATION_INTERFACE
, *PPNP_LOCATION_INTERFACE
;
322 typedef enum _ARBITER_ACTION
{
323 ArbiterActionTestAllocation
,
324 ArbiterActionRetestAllocation
,
325 ArbiterActionCommitAllocation
,
326 ArbiterActionRollbackAllocation
,
327 ArbiterActionQueryAllocatedResources
,
328 ArbiterActionWriteReservedResources
,
329 ArbiterActionQueryConflict
,
330 ArbiterActionQueryArbitrate
,
331 ArbiterActionAddReserved
,
332 ArbiterActionBootAllocation
333 } ARBITER_ACTION
, *PARBITER_ACTION
;
335 typedef struct _ARBITER_CONFLICT_INFO
{
336 PDEVICE_OBJECT OwningObject
;
339 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
341 typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS
{
342 IN OUT PLIST_ENTRY ArbitrationList
;
343 IN ULONG AllocateFromCount
;
344 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
345 } ARBITER_TEST_ALLOCATION_PARAMETERS
, *PARBITER_TEST_ALLOCATION_PARAMETERS
;
347 typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS
{
348 IN OUT PLIST_ENTRY ArbitrationList
;
349 IN ULONG AllocateFromCount
;
350 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
351 } ARBITER_RETEST_ALLOCATION_PARAMETERS
, *PARBITER_RETEST_ALLOCATION_PARAMETERS
;
353 typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS
{
354 IN OUT PLIST_ENTRY ArbitrationList
;
355 } ARBITER_BOOT_ALLOCATION_PARAMETERS
, *PARBITER_BOOT_ALLOCATION_PARAMETERS
;
357 typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
{
358 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
359 } ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
;
361 typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS
{
362 IN PDEVICE_OBJECT PhysicalDeviceObject
;
363 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
364 OUT PULONG ConflictCount
;
365 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
366 } ARBITER_QUERY_CONFLICT_PARAMETERS
, *PARBITER_QUERY_CONFLICT_PARAMETERS
;
368 typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS
{
369 IN PLIST_ENTRY ArbitrationList
;
370 } ARBITER_QUERY_ARBITRATE_PARAMETERS
, *PARBITER_QUERY_ARBITRATE_PARAMETERS
;
372 typedef struct _ARBITER_ADD_RESERVED_PARAMETERS
{
373 IN PDEVICE_OBJECT ReserveDevice
;
374 } ARBITER_ADD_RESERVED_PARAMETERS
, *PARBITER_ADD_RESERVED_PARAMETERS
;
376 typedef struct _ARBITER_PARAMETERS
{
378 ARBITER_TEST_ALLOCATION_PARAMETERS TestAllocation
;
379 ARBITER_RETEST_ALLOCATION_PARAMETERS RetestAllocation
;
380 ARBITER_BOOT_ALLOCATION_PARAMETERS BootAllocation
;
381 ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS QueryAllocatedResources
;
382 ARBITER_QUERY_CONFLICT_PARAMETERS QueryConflict
;
383 ARBITER_QUERY_ARBITRATE_PARAMETERS QueryArbitrate
;
384 ARBITER_ADD_RESERVED_PARAMETERS AddReserved
;
386 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
388 typedef enum _ARBITER_REQUEST_SOURCE
{
389 ArbiterRequestUndefined
= -1,
390 ArbiterRequestLegacyReported
,
391 ArbiterRequestHalReported
,
392 ArbiterRequestLegacyAssigned
,
393 ArbiterRequestPnpDetected
,
394 ArbiterRequestPnpEnumerated
395 } ARBITER_REQUEST_SOURCE
;
397 typedef enum _ARBITER_RESULT
{
398 ArbiterResultUndefined
= -1,
399 ArbiterResultSuccess
,
400 ArbiterResultExternalConflict
,
401 ArbiterResultNullRequest
404 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
406 typedef struct _ARBITER_LIST_ENTRY
{
407 LIST_ENTRY ListEntry
;
408 ULONG AlternativeCount
;
409 PIO_RESOURCE_DESCRIPTOR Alternatives
;
410 PDEVICE_OBJECT PhysicalDeviceObject
;
411 ARBITER_REQUEST_SOURCE RequestSource
;
414 INTERFACE_TYPE InterfaceType
;
417 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
418 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
419 ARBITER_RESULT Result
;
420 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
423 (NTAPI
*PARBITER_HANDLER
)(
424 IN OUT PVOID Context
,
425 IN ARBITER_ACTION Action
,
426 IN OUT PARBITER_PARAMETERS Parameters
);
428 #define ARBITER_PARTIAL 0x00000001
430 typedef struct _ARBITER_INTERFACE
{
434 PINTERFACE_REFERENCE InterfaceReference
;
435 PINTERFACE_DEREFERENCE InterfaceDereference
;
436 PARBITER_HANDLER ArbiterHandler
;
438 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
440 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
441 TranslateChildToParent
,
442 TranslateParentToChild
443 } RESOURCE_TRANSLATION_DIRECTION
;
446 (NTAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
447 IN OUT PVOID Context OPTIONAL
,
448 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
449 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
450 IN ULONG AlternativesCount OPTIONAL
,
451 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
452 IN PDEVICE_OBJECT PhysicalDeviceObject
,
453 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
456 (NTAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
457 IN OUT PVOID Context OPTIONAL
,
458 IN PIO_RESOURCE_DESCRIPTOR Source
,
459 IN PDEVICE_OBJECT PhysicalDeviceObject
,
460 OUT PULONG TargetCount
,
461 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
463 typedef struct _TRANSLATOR_INTERFACE
{
467 PINTERFACE_REFERENCE InterfaceReference
;
468 PINTERFACE_DEREFERENCE InterfaceDereference
;
469 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
470 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
471 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
473 typedef struct _PCI_AGP_CAPABILITY
{
474 PCI_CAPABILITIES_HEADER Header
;
478 struct _PCI_AGP_STATUS
{
483 ULONG HostTransDisable
:1;
485 ULONG ITA_Coherent
:1;
486 ULONG SideBandAddressing
:1;
487 ULONG CalibrationCycle
:3;
488 ULONG AsyncRequestSize
:3;
492 ULONG RequestQueueDepthMaximum
:8;
494 struct _PCI_AGP_COMMAND
{
497 ULONG FastWriteEnable
:1;
498 ULONG FourGBEnable
:1;
503 ULONG CalibrationCycle
:3;
504 ULONG AsyncReqSize
:3;
506 ULONG RequestQueueDepth
:8;
508 } PCI_AGP_CAPABILITY
, *PPCI_AGP_CAPABILITY
;
510 typedef enum _EXTENDED_AGP_REGISTER
{
518 } EXTENDED_AGP_REGISTER
, *PEXTENDED_AGP_REGISTER
;
520 typedef struct _PCI_AGP_ISOCH_STATUS
{
527 } PCI_AGP_ISOCH_STATUS
, *PPCI_AGP_ISOCH_STATUS
;
529 typedef struct _PCI_AGP_CONTROL
{
535 } PCI_AGP_CONTROL
, *PPCI_AGP_CONTROL
;
537 typedef struct _PCI_AGP_APERTURE_PAGE_SIZE
{
538 USHORT PageSizeMask
:11;
540 USHORT PageSizeSelect
:4;
541 } PCI_AGP_APERTURE_PAGE_SIZE
, *PPCI_AGP_APERTURE_PAGE_SIZE
;
543 typedef struct _PCI_AGP_ISOCH_COMMAND
{
547 } PCI_AGP_ISOCH_COMMAND
, *PPCI_AGP_ISOCH_COMMAND
;
549 typedef struct PCI_AGP_EXTENDED_CAPABILITY
{
550 PCI_AGP_ISOCH_STATUS IsochStatus
;
551 PCI_AGP_CONTROL AgpControl
;
553 PCI_AGP_APERTURE_PAGE_SIZE AperturePageSize
;
556 PCI_AGP_ISOCH_COMMAND IsochCommand
;
557 } PCI_AGP_EXTENDED_CAPABILITY
, *PPCI_AGP_EXTENDED_CAPABILITY
;
559 #define PCI_AGP_RATE_1X 0x1
560 #define PCI_AGP_RATE_2X 0x2
561 #define PCI_AGP_RATE_4X 0x4
563 #define PCIX_MODE_CONVENTIONAL_PCI 0x0
564 #define PCIX_MODE1_66MHZ 0x1
565 #define PCIX_MODE1_100MHZ 0x2
566 #define PCIX_MODE1_133MHZ 0x3
567 #define PCIX_MODE2_266_66MHZ 0x9
568 #define PCIX_MODE2_266_100MHZ 0xA
569 #define PCIX_MODE2_266_133MHZ 0xB
570 #define PCIX_MODE2_533_66MHZ 0xD
571 #define PCIX_MODE2_533_100MHZ 0xE
572 #define PCIX_MODE2_533_133MHZ 0xF
574 #define PCIX_VERSION_MODE1_ONLY 0x0
575 #define PCIX_VERSION_MODE2_ECC 0x1
576 #define PCIX_VERSION_DUAL_MODE_ECC 0x2
578 typedef struct _PCIX_BRIDGE_CAPABILITY
{
579 PCI_CAPABILITIES_HEADER Header
;
583 USHORT Bus133MHzCapable
:1;
584 USHORT SplitCompletionDiscarded
:1;
585 USHORT UnexpectedSplitCompletion
:1;
586 USHORT SplitCompletionOverrun
:1;
587 USHORT SplitRequestDelayed
:1;
588 USHORT BusModeFrequency
:4;
591 USHORT Bus266MHzCapable
:1;
592 USHORT Bus533MHzCapable
:1;
598 ULONG FunctionNumber
:3;
599 ULONG DeviceNumber
:5;
602 ULONG Device133MHzCapable
:1;
603 ULONG SplitCompletionDiscarded
:1;
604 ULONG UnexpectedSplitCompletion
:1;
605 ULONG SplitCompletionOverrun
:1;
606 ULONG SplitRequestDelayed
:1;
609 ULONG Device266MHzCapable
:1;
610 ULONG Device533MHzCapable
:1;
614 USHORT UpstreamSplitTransactionCapacity
;
615 USHORT UpstreamSplitTransactionLimit
;
616 USHORT DownstreamSplitTransactionCapacity
;
617 USHORT DownstreamSplitTransactionLimit
;
620 ULONG SelectSecondaryRegisters
:1;
621 ULONG ErrorPresentInOtherBank
:1;
622 ULONG AdditionalCorrectableError
:1;
623 ULONG AdditionalUncorrectableError
:1;
625 ULONG ErrorCorrected
:1;
627 ULONG ErrorFirstCommand
:4;
628 ULONG ErrorSecondCommand
:4;
629 ULONG ErrorUpperAttributes
:4;
630 ULONG ControlUpdateEnable
:1;
632 ULONG DisableSingleBitCorrection
:1;
637 ULONG EccFirstAddress
;
638 ULONG EccSecondAddress
;
640 } PCIX_BRIDGE_CAPABILITY
, *PPCIX_BRIDGE_CAPABILITY
;
642 typedef struct _PCI_SUBSYSTEM_IDS_CAPABILITY
{
643 PCI_CAPABILITIES_HEADER Header
;
647 } PCI_SUBSYSTEM_IDS_CAPABILITY
, *PPCI_SUBSYSTEM_IDS_CAPABILITY
;
649 #define OSC_FIRMWARE_FAILURE 0x02
650 #define OSC_UNRECOGNIZED_UUID 0x04
651 #define OSC_UNRECOGNIZED_REVISION 0x08
652 #define OSC_CAPABILITIES_MASKED 0x10
654 #define PCI_ROOT_BUS_OSC_METHOD_CAPABILITY_REVISION 0x01
656 typedef struct _PCI_ROOT_BUS_OSC_SUPPORT_FIELD
{
659 ULONG ExtendedConfigOpRegions
:1;
660 ULONG ActiveStatePowerManagement
:1;
661 ULONG ClockPowerManagement
:1;
662 ULONG SegmentGroups
:1;
663 ULONG MessageSignaledInterrupts
:1;
664 ULONG WindowsHardwareErrorArchitecture
:1;
669 } PCI_ROOT_BUS_OSC_SUPPORT_FIELD
, *PPCI_ROOT_BUS_OSC_SUPPORT_FIELD
;
671 typedef struct _PCI_ROOT_BUS_OSC_CONTROL_FIELD
{
674 ULONG ExpressNativeHotPlug
:1;
675 ULONG ShpcNativeHotPlug
:1;
676 ULONG ExpressNativePME
:1;
677 ULONG ExpressAdvancedErrorReporting
:1;
678 ULONG ExpressCapabilityStructure
:1;
683 } PCI_ROOT_BUS_OSC_CONTROL_FIELD
, *PPCI_ROOT_BUS_OSC_CONTROL_FIELD
;
685 typedef enum _PCI_HARDWARE_INTERFACE
{
690 } PCI_HARDWARE_INTERFACE
, *PPCI_HARDWARE_INTERFACE
;
697 typedef struct _PCI_ROOT_BUS_HARDWARE_CAPABILITY
{
698 PCI_HARDWARE_INTERFACE SecondaryInterface
;
700 BOOLEAN BusCapabilitiesFound
;
701 ULONG CurrentSpeedAndMode
;
702 ULONG SupportedSpeedsAndModes
;
703 BOOLEAN DeviceIDMessagingCapable
;
704 PCI_BUS_WIDTH SecondaryBusWidth
;
706 PCI_ROOT_BUS_OSC_SUPPORT_FIELD OscFeatureSupport
;
707 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlRequest
;
708 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlGranted
;
709 } PCI_ROOT_BUS_HARDWARE_CAPABILITY
, *PPCI_ROOT_BUS_HARDWARE_CAPABILITY
;
711 typedef union _PCI_EXPRESS_CAPABILITIES_REGISTER
{
713 USHORT CapabilityVersion
:4;
715 USHORT SlotImplemented
:1;
716 USHORT InterruptMessageNumber
:5;
720 } PCI_EXPRESS_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_CAPABILITIES_REGISTER
;
722 typedef union _PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
{
724 ULONG MaxPayloadSizeSupported
:3;
725 ULONG PhantomFunctionsSupported
:2;
726 ULONG ExtendedTagSupported
:1;
727 ULONG L0sAcceptableLatency
:3;
728 ULONG L1AcceptableLatency
:3;
730 ULONG RoleBasedErrorReporting
:1;
732 ULONG CapturedSlotPowerLimit
:8;
733 ULONG CapturedSlotPowerLimitScale
:2;
737 } PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
;
739 #define PCI_EXPRESS_AER_DEVICE_CONTROL_MASK 0x07;
741 typedef union _PCI_EXPRESS_DEVICE_CONTROL_REGISTER
{
743 USHORT CorrectableErrorEnable
:1;
744 USHORT NonFatalErrorEnable
:1;
745 USHORT FatalErrorEnable
:1;
746 USHORT UnsupportedRequestErrorEnable
:1;
747 USHORT EnableRelaxedOrder
:1;
748 USHORT MaxPayloadSize
:3;
749 USHORT ExtendedTagEnable
:1;
750 USHORT PhantomFunctionsEnable
:1;
751 USHORT AuxPowerEnable
:1;
752 USHORT NoSnoopEnable
:1;
753 USHORT MaxReadRequestSize
:3;
754 USHORT BridgeConfigRetryEnable
:1;
757 } PCI_EXPRESS_DEVICE_CONTROL_REGISTER
, *PPCI_EXPRESS_DEVICE_CONTROL_REGISTER
;
759 #define PCI_EXPRESS_AER_DEVICE_STATUS_MASK 0x0F;
761 typedef union _PCI_EXPRESS_DEVICE_STATUS_REGISTER
{
763 USHORT CorrectableErrorDetected
:1;
764 USHORT NonFatalErrorDetected
:1;
765 USHORT FatalErrorDetected
:1;
766 USHORT UnsupportedRequestDetected
:1;
767 USHORT AuxPowerDetected
:1;
768 USHORT TransactionsPending
:1;
772 } PCI_EXPRESS_DEVICE_STATUS_REGISTER
, *PPCI_EXPRESS_DEVICE_STATUS_REGISTER
;
774 typedef union _PCI_EXPRESS_LINK_CAPABILITIES_REGISTER
{
776 ULONG MaximumLinkSpeed
:4;
777 ULONG MaximumLinkWidth
:6;
778 ULONG ActiveStatePMSupport
:2;
779 ULONG L0sExitLatency
:3;
780 ULONG L1ExitLatency
:3;
781 ULONG ClockPowerManagement
:1;
782 ULONG SurpriseDownErrorReportingCapable
:1;
783 ULONG DataLinkLayerActiveReportingCapable
:1;
788 } PCI_EXPRESS_LINK_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_LINK_CAPABILITIES_REGISTER
;
790 typedef union _PCI_EXPRESS_LINK_CONTROL_REGISTER
{
792 USHORT ActiveStatePMControl
:2;
794 USHORT ReadCompletionBoundary
:1;
795 USHORT LinkDisable
:1;
796 USHORT RetrainLink
:1;
797 USHORT CommonClockConfig
:1;
798 USHORT ExtendedSynch
:1;
799 USHORT EnableClockPowerManagement
:1;
803 } PCI_EXPRESS_LINK_CONTROL_REGISTER
, *PPCI_EXPRESS_LINK_CONTROL_REGISTER
;
805 typedef union _PCI_EXPRESS_LINK_STATUS_REGISTER
{
810 USHORT LinkTraining
:1;
811 USHORT SlotClockConfig
:1;
812 USHORT DataLinkLayerActive
:1;
816 } PCI_EXPRESS_LINK_STATUS_REGISTER
, *PPCI_EXPRESS_LINK_STATUS_REGISTER
;
818 typedef union _PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
{
820 ULONG AttentionButtonPresent
:1;
821 ULONG PowerControllerPresent
:1;
822 ULONG MRLSensorPresent
:1;
823 ULONG AttentionIndicatorPresent
:1;
824 ULONG PowerIndicatorPresent
:1;
825 ULONG HotPlugSurprise
:1;
826 ULONG HotPlugCapable
:1;
827 ULONG SlotPowerLimit
:8;
828 ULONG SlotPowerLimitScale
:2;
829 ULONG ElectromechanicalLockPresent
:1;
830 ULONG NoCommandCompletedSupport
:1;
831 ULONG PhysicalSlotNumber
:13;
834 } PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
;
836 typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER
{
838 USHORT AttentionButtonEnable
:1;
839 USHORT PowerFaultDetectEnable
:1;
840 USHORT MRLSensorEnable
:1;
841 USHORT PresenceDetectEnable
:1;
842 USHORT CommandCompletedEnable
:1;
843 USHORT HotPlugInterruptEnable
:1;
844 USHORT AttentionIndicatorControl
:2;
845 USHORT PowerIndicatorControl
:2;
846 USHORT PowerControllerControl
:1;
847 USHORT ElectromechanicalLockControl
:1;
848 USHORT DataLinkStateChangeEnable
:1;
852 } PCI_EXPRESS_SLOT_CONTROL_REGISTER
, *PPCI_EXPRESS_SLOT_CONTROL_REGISTER
;
854 typedef union _PCI_EXPRESS_SLOT_STATUS_REGISTER
{
856 USHORT AttentionButtonPressed
:1;
857 USHORT PowerFaultDetected
:1;
858 USHORT MRLSensorChanged
:1;
859 USHORT PresenceDetectChanged
:1;
860 USHORT CommandCompleted
:1;
861 USHORT MRLSensorState
:1;
862 USHORT PresenceDetectState
:1;
863 USHORT ElectromechanicalLockEngaged
:1;
864 USHORT DataLinkStateChanged
:1;
868 } PCI_EXPRESS_SLOT_STATUS_REGISTER
, *PPCI_EXPRESS_SLOT_STATUS_REGISTER
;
870 typedef union _PCI_EXPRESS_ROOT_CONTROL_REGISTER
{
872 USHORT CorrectableSerrEnable
:1;
873 USHORT NonFatalSerrEnable
:1;
874 USHORT FatalSerrEnable
:1;
875 USHORT PMEInterruptEnable
:1;
876 USHORT CRSSoftwareVisibilityEnable
:1;
880 } PCI_EXPRESS_ROOT_CONTROL_REGISTER
, *PPCI_EXPRESS_ROOT_CONTROL_REGISTER
;
882 typedef union _PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
{
884 USHORT CRSSoftwareVisibility
:1;
888 } PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
;
890 typedef union _PCI_EXPRESS_ROOT_STATUS_REGISTER
{
892 ULONG PMERequestorId
:16;
898 } PCI_EXPRESS_ROOT_STATUS_REGISTER
, *PPCI_EXPRESS_ROOT_STATUS_REGISTER
;
900 typedef struct _PCI_EXPRESS_CAPABILITY
{
901 PCI_CAPABILITIES_HEADER Header
;
902 PCI_EXPRESS_CAPABILITIES_REGISTER ExpressCapabilities
;
903 PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER DeviceCapabilities
;
904 PCI_EXPRESS_DEVICE_CONTROL_REGISTER DeviceControl
;
905 PCI_EXPRESS_DEVICE_STATUS_REGISTER DeviceStatus
;
906 PCI_EXPRESS_LINK_CAPABILITIES_REGISTER LinkCapabilities
;
907 PCI_EXPRESS_LINK_CONTROL_REGISTER LinkControl
;
908 PCI_EXPRESS_LINK_STATUS_REGISTER LinkStatus
;
909 PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER SlotCapabilities
;
910 PCI_EXPRESS_SLOT_CONTROL_REGISTER SlotControl
;
911 PCI_EXPRESS_SLOT_STATUS_REGISTER SlotStatus
;
912 PCI_EXPRESS_ROOT_CONTROL_REGISTER RootControl
;
913 PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER RootCapabilities
;
914 PCI_EXPRESS_ROOT_STATUS_REGISTER RootStatus
;
915 } PCI_EXPRESS_CAPABILITY
, *PPCI_EXPRESS_CAPABILITY
;
920 } PCI_EXPRESS_MRL_STATE
;
925 } PCI_EXPRESS_CARD_PRESENCE
;
931 } PCI_EXPRESS_INDICATOR_STATE
;
936 } PCI_EXPRESS_POWER_STATE
;
940 L0sAndL1EntrySupport
= 3
941 } PCI_EXPRESS_ASPM_SUPPORT
;
944 L0sAndL1EntryDisabled
,
948 } PCI_EXPRESS_ASPM_CONTROL
;
959 } PCI_EXPRESS_L0s_EXIT_LATENCY
;
970 } PCI_EXPRESS_L1_EXIT_LATENCY
;
973 PciExpressEndpoint
= 0,
974 PciExpressLegacyEndpoint
,
975 PciExpressRootPort
= 4,
976 PciExpressUpstreamSwitchPort
,
977 PciExpressDownstreamSwitchPort
,
978 PciExpressToPciXBridge
,
980 PciExpressRootComplexIntegratedEndpoint
,
981 PciExpressRootComplexEventCollector
982 } PCI_EXPRESS_DEVICE_TYPE
;
985 MaxPayload128Bytes
= 0,
991 } PCI_EXPRESS_MAX_PAYLOAD_SIZE
;
993 typedef union _PCI_EXPRESS_PME_REQUESTOR_ID
{
995 USHORT FunctionNumber
:3;
996 USHORT DeviceNumber
:5;
1000 } PCI_EXPRESS_PME_REQUESTOR_ID
, *PPCI_EXPRESS_PME_REQUESTOR_ID
;
1004 #ifndef USE_DMA_MACROS
1005 #define USE_DMA_MACROS
1008 #ifndef NO_LEGACY_DRIVERS
1009 #define NO_LEGACY_DRIVERS
1012 #endif /* defined(_WIN64) */
1014 typedef enum _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE
{
1015 ResourceTypeSingle
= 0,
1017 ResourceTypeExtendedCounterConfiguration
,
1018 ResourceTypeOverflow
,
1020 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE
;
1022 typedef struct _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
{
1023 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE Type
;
1027 ULONG ExtendedRegisterAddress
;
1033 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
, *PPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
;
1035 typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST
{
1037 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors
[ANYSIZE_ARRAY
];
1038 } PHYSICAL_COUNTER_RESOURCE_LIST
, *PPHYSICAL_COUNTER_RESOURCE_LIST
;
1041 (NTAPI
*PciPin2Line
)(
1042 IN
struct _BUS_HANDLER
*BusHandler
,
1043 IN
struct _BUS_HANDLER
*RootHandler
,
1044 IN PCI_SLOT_NUMBER SlotNumber
,
1045 IN PPCI_COMMON_CONFIG PciData
);
1048 (NTAPI
*PciLine2Pin
)(
1049 IN
struct _BUS_HANDLER
*BusHandler
,
1050 IN
struct _BUS_HANDLER
*RootHandler
,
1051 IN PCI_SLOT_NUMBER SlotNumber
,
1052 IN PPCI_COMMON_CONFIG PciNewData
,
1053 IN PPCI_COMMON_CONFIG PciOldData
);
1056 (NTAPI
*PciReadWriteConfig
)(
1057 IN
struct _BUS_HANDLER
*BusHandler
,
1058 IN PCI_SLOT_NUMBER Slot
,
1063 #define PCI_DATA_TAG ' ICP'
1064 #define PCI_DATA_VERSION 1
1066 typedef struct _PCIBUSDATA
{
1069 PciReadWriteConfig ReadConfig
;
1070 PciReadWriteConfig WriteConfig
;
1071 PciPin2Line Pin2Line
;
1072 PciLine2Pin Line2Pin
;
1073 PCI_SLOT_NUMBER ParentSlot
;
1075 } PCIBUSDATA
, *PPCIBUSDATA
;
1077 #ifndef _PCIINTRF_X_
1078 #define _PCIINTRF_X_
1081 (NTAPI
*PCI_READ_WRITE_CONFIG
)(
1090 (NTAPI
*PCI_PIN_TO_LINE
)(
1092 IN PPCI_COMMON_CONFIG PciData
);
1095 (NTAPI
*PCI_LINE_TO_PIN
)(
1097 IN PPCI_COMMON_CONFIG PciNewData
,
1098 IN PPCI_COMMON_CONFIG PciOldData
);
1101 (NTAPI
*PCI_ROOT_BUS_CAPABILITY
)(
1103 OUT PPCI_ROOT_BUS_HARDWARE_CAPABILITY HardwareCapability
);
1106 (NTAPI
*PCI_EXPRESS_WAKE_CONTROL
)(
1108 IN BOOLEAN EnableWake
);
1110 typedef struct _PCI_BUS_INTERFACE_STANDARD
{
1114 PINTERFACE_REFERENCE InterfaceReference
;
1115 PINTERFACE_DEREFERENCE InterfaceDereference
;
1116 PCI_READ_WRITE_CONFIG ReadConfig
;
1117 PCI_READ_WRITE_CONFIG WriteConfig
;
1118 PCI_PIN_TO_LINE PinToLine
;
1119 PCI_LINE_TO_PIN LineToPin
;
1120 PCI_ROOT_BUS_CAPABILITY RootBusCapability
;
1121 PCI_EXPRESS_WAKE_CONTROL ExpressWakeControl
;
1122 } PCI_BUS_INTERFACE_STANDARD
, *PPCI_BUS_INTERFACE_STANDARD
;
1124 #define PCI_BUS_INTERFACE_STANDARD_VERSION 1
1126 #endif /* _PCIINTRF_X_ */
1128 #if (NTDDI_VERSION >= NTDDI_WIN7)
1130 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX 0x00004000
1131 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX 0x00008000
1132 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \
1133 (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \
1134 FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX)
1136 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200
1137 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300
1138 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300
1142 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 0x00000200
1143 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 0x00000300
1144 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 0x00000300
1146 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL
1147 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL
1148 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK
1150 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1152 #define FILE_CHARACTERISTICS_PROPAGATED ( FILE_REMOVABLE_MEDIA | \
1153 FILE_READ_ONLY_DEVICE | \
1154 FILE_FLOPPY_DISKETTE | \
1155 FILE_WRITE_ONCE_MEDIA | \
1156 FILE_DEVICE_SECURE_OPEN )
1158 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1159 ULONG AlignmentRequirement
;
1160 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1162 typedef struct _FILE_NAME_INFORMATION
{
1163 ULONG FileNameLength
;
1165 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1168 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1169 ULONG FileAttributes
;
1171 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1173 typedef struct _FILE_DISPOSITION_INFORMATION
{
1175 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1177 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1178 LARGE_INTEGER EndOfFile
;
1179 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1181 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1182 LARGE_INTEGER ValidDataLength
;
1183 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1185 typedef struct _FILE_FS_LABEL_INFORMATION
{
1186 ULONG VolumeLabelLength
;
1187 WCHAR VolumeLabel
[1];
1188 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
1190 typedef struct _FILE_FS_VOLUME_INFORMATION
{
1191 LARGE_INTEGER VolumeCreationTime
;
1192 ULONG VolumeSerialNumber
;
1193 ULONG VolumeLabelLength
;
1194 BOOLEAN SupportsObjects
;
1195 WCHAR VolumeLabel
[1];
1196 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
1198 typedef struct _FILE_FS_SIZE_INFORMATION
{
1199 LARGE_INTEGER TotalAllocationUnits
;
1200 LARGE_INTEGER AvailableAllocationUnits
;
1201 ULONG SectorsPerAllocationUnit
;
1202 ULONG BytesPerSector
;
1203 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
1205 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
{
1206 LARGE_INTEGER TotalAllocationUnits
;
1207 LARGE_INTEGER CallerAvailableAllocationUnits
;
1208 LARGE_INTEGER ActualAvailableAllocationUnits
;
1209 ULONG SectorsPerAllocationUnit
;
1210 ULONG BytesPerSector
;
1211 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
1213 typedef struct _FILE_FS_OBJECTID_INFORMATION
{
1215 UCHAR ExtendedInfo
[48];
1216 } FILE_FS_OBJECTID_INFORMATION
, *PFILE_FS_OBJECTID_INFORMATION
;
1218 typedef union _FILE_SEGMENT_ELEMENT
{
1220 ULONGLONG Alignment
;
1221 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1223 #define IOCTL_AVIO_ALLOCATE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1224 #define IOCTL_AVIO_FREE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1225 #define IOCTL_AVIO_MODIFY_STREAM CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1227 typedef enum _BUS_DATA_TYPE
{
1228 ConfigurationSpaceUndefined
= -1,
1236 PCMCIAConfiguration
,
1239 PNPISAConfiguration
,
1240 SgiInternalConfiguration
,
1242 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
1244 /* Hardware Abstraction Layer Types */
1247 (NTAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
1251 typedef PBUS_HANDLER
1252 (FASTCALL
*pHalHandlerForBus
)(
1253 IN INTERFACE_TYPE InterfaceType
,
1254 IN ULONG BusNumber
);
1257 (FASTCALL
*pHalReferenceBusHandler
)(
1258 IN PBUS_HANDLER BusHandler
);
1260 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
1261 HalInstalledBusInformation
,
1262 HalProfileSourceInformation
,
1263 HalInformationClassUnused1
,
1264 HalPowerInformation
,
1265 HalProcessorSpeedInformation
,
1266 HalCallbackInformation
,
1267 HalMapRegisterInformation
,
1268 HalMcaLogInformation
,
1269 HalFrameBufferCachingInformation
,
1270 HalDisplayBiosInformation
,
1271 HalProcessorFeatureInformation
,
1272 HalNumaTopologyInterface
,
1273 HalErrorInformation
,
1274 HalCmcLogInformation
,
1275 HalCpeLogInformation
,
1276 HalQueryMcaInterface
,
1277 HalQueryAMLIIllegalIOPortAddresses
,
1278 HalQueryMaxHotPlugMemoryAddress
,
1279 HalPartitionIpiInterface
,
1280 HalPlatformInformation
,
1281 HalQueryProfileSourceList
,
1282 HalInitLogInformation
,
1283 HalFrequencyInformation
,
1284 HalProcessorBrandString
,
1285 HalHypervisorInformation
,
1286 HalPlatformTimerInformation
,
1287 HalAcpiAuditInformation
1288 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
1290 typedef enum _HAL_SET_INFORMATION_CLASS
{
1291 HalProfileSourceInterval
,
1292 HalProfileSourceInterruptHandler
,
1293 HalMcaRegisterDriver
,
1294 HalKernelErrorHandler
,
1295 HalCmcRegisterDriver
,
1296 HalCpeRegisterDriver
,
1300 HalGenerateCmcInterrupt
,
1301 HalProfileSourceTimerHandler
,
1303 HalProfileDpgoSourceInterruptHandler
1304 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
1307 (NTAPI
*pHalQuerySystemInformation
)(
1308 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
1309 IN ULONG BufferSize
,
1310 IN OUT PVOID Buffer
,
1311 OUT PULONG ReturnedLength
);
1314 (NTAPI
*pHalSetSystemInformation
)(
1315 IN HAL_SET_INFORMATION_CLASS InformationClass
,
1316 IN ULONG BufferSize
,
1320 (FASTCALL
*pHalExamineMBR
)(
1321 IN PDEVICE_OBJECT DeviceObject
,
1322 IN ULONG SectorSize
,
1323 IN ULONG MBRTypeIdentifier
,
1327 (FASTCALL
*pHalIoReadPartitionTable
)(
1328 IN PDEVICE_OBJECT DeviceObject
,
1329 IN ULONG SectorSize
,
1330 IN BOOLEAN ReturnRecognizedPartitions
,
1331 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
1334 (FASTCALL
*pHalIoSetPartitionInformation
)(
1335 IN PDEVICE_OBJECT DeviceObject
,
1336 IN ULONG SectorSize
,
1337 IN ULONG PartitionNumber
,
1338 IN ULONG PartitionType
);
1341 (FASTCALL
*pHalIoWritePartitionTable
)(
1342 IN PDEVICE_OBJECT DeviceObject
,
1343 IN ULONG SectorSize
,
1344 IN ULONG SectorsPerTrack
,
1345 IN ULONG NumberOfHeads
,
1346 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
1349 (NTAPI
*pHalQueryBusSlots
)(
1350 IN PBUS_HANDLER BusHandler
,
1351 IN ULONG BufferSize
,
1352 OUT PULONG SlotNumbers
,
1353 OUT PULONG ReturnedLength
);
1356 (NTAPI
*pHalInitPnpDriver
)(
1359 typedef struct _PM_DISPATCH_TABLE
{
1363 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
1366 (NTAPI
*pHalInitPowerManagement
)(
1367 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
1368 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
1370 typedef struct _DMA_ADAPTER
*
1371 (NTAPI
*pHalGetDmaAdapter
)(
1373 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
1374 OUT PULONG NumberOfMapRegisters
);
1377 (NTAPI
*pHalGetInterruptTranslator
)(
1378 IN INTERFACE_TYPE ParentInterfaceType
,
1379 IN ULONG ParentBusNumber
,
1380 IN INTERFACE_TYPE BridgeInterfaceType
,
1383 OUT PTRANSLATOR_INTERFACE Translator
,
1384 OUT PULONG BridgeBusNumber
);
1387 (NTAPI
*pHalStartMirroring
)(
1391 (NTAPI
*pHalEndMirroring
)(
1392 IN ULONG PassNumber
);
1395 (NTAPI
*pHalMirrorPhysicalMemory
)(
1396 IN PHYSICAL_ADDRESS PhysicalAddress
,
1397 IN LARGE_INTEGER NumberOfBytes
);
1400 (NTAPI
*pHalMirrorVerify
)(
1401 IN PHYSICAL_ADDRESS PhysicalAddress
,
1402 IN LARGE_INTEGER NumberOfBytes
);
1405 (NTAPI
*pHalTranslateBusAddress
)(
1406 IN INTERFACE_TYPE InterfaceType
,
1408 IN PHYSICAL_ADDRESS BusAddress
,
1409 IN OUT PULONG AddressSpace
,
1410 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
1413 (NTAPI
*pHalAssignSlotResources
)(
1414 IN PUNICODE_STRING RegistryPath
,
1415 IN PUNICODE_STRING DriverClassName OPTIONAL
,
1416 IN PDRIVER_OBJECT DriverObject
,
1417 IN PDEVICE_OBJECT DeviceObject
,
1418 IN INTERFACE_TYPE BusType
,
1420 IN ULONG SlotNumber
,
1421 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
1424 (NTAPI
*pHalHaltSystem
)(
1428 (NTAPI
*pHalResetDisplay
)(
1431 typedef struct _MAP_REGISTER_ENTRY
{
1433 BOOLEAN WriteToDevice
;
1434 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
1437 (NTAPI
*pHalVectorToIDTEntry
)(
1441 (NTAPI
*pHalFindBusAddressTranslation
)(
1442 IN PHYSICAL_ADDRESS BusAddress
,
1443 IN OUT PULONG AddressSpace
,
1444 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
1445 IN OUT PULONG_PTR Context
,
1446 IN BOOLEAN NextBus
);
1449 (NTAPI
*pHalEndOfBoot
)(
1453 (NTAPI
*pHalGetAcpiTable
)(
1455 IN PCSTR OemId OPTIONAL
,
1456 IN PCSTR OemTableId OPTIONAL
);
1460 (*pHalGetErrorCapList
)(
1461 IN OUT PULONG CapsListLength
,
1462 IN OUT PUCHAR ErrorCapList
);
1466 IN ULONG BufferLength
,
1471 (NTAPI
*PCI_ERROR_HANDLER_CALLBACK
)(
1475 (NTAPI
*pHalSetPciErrorHandlerCallback
)(
1476 IN PCI_ERROR_HANDLER_CALLBACK Callback
);
1478 #if 1 /* Not present in WDK 7600 */
1480 (FASTCALL
*pHalIoAssignDriveLetters
)(
1481 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
1482 IN PSTRING NtDeviceName
,
1483 OUT PUCHAR NtSystemPath
,
1484 OUT PSTRING NtSystemPathString
);
1489 pHalQuerySystemInformation HalQuerySystemInformation
;
1490 pHalSetSystemInformation HalSetSystemInformation
;
1491 pHalQueryBusSlots HalQueryBusSlots
;
1493 pHalExamineMBR HalExamineMBR
;
1494 #if 1 /* Not present in WDK 7600 */
1495 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
1497 pHalIoReadPartitionTable HalIoReadPartitionTable
;
1498 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
1499 pHalIoWritePartitionTable HalIoWritePartitionTable
;
1500 pHalHandlerForBus HalReferenceHandlerForBus
;
1501 pHalReferenceBusHandler HalReferenceBusHandler
;
1502 pHalReferenceBusHandler HalDereferenceBusHandler
;
1503 pHalInitPnpDriver HalInitPnpDriver
;
1504 pHalInitPowerManagement HalInitPowerManagement
;
1505 pHalGetDmaAdapter HalGetDmaAdapter
;
1506 pHalGetInterruptTranslator HalGetInterruptTranslator
;
1507 pHalStartMirroring HalStartMirroring
;
1508 pHalEndMirroring HalEndMirroring
;
1509 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
1510 pHalEndOfBoot HalEndOfBoot
;
1511 pHalMirrorVerify HalMirrorVerify
;
1512 pHalGetAcpiTable HalGetCachedAcpiTable
;
1513 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback
;
1515 pHalGetErrorCapList HalGetErrorCapList
;
1516 pHalInjectError HalInjectError
;
1518 } HAL_DISPATCH
, *PHAL_DISPATCH
;
1520 /* GCC/MSVC and WDK compatible declaration */
1521 extern NTKERNELAPI HAL_DISPATCH HalDispatchTable
;
1523 #if defined(_NTOSKRNL_) || defined(_BLDR_)
1524 #define HALDISPATCH (&HalDispatchTable)
1526 /* This is a WDK compatibility definition */
1527 #define HalDispatchTable (&HalDispatchTable)
1528 #define HALDISPATCH HalDispatchTable
1531 #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
1532 #define HalDispatchTableVersion HALDISPATCH->Version
1533 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
1534 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
1535 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
1536 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
1537 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
1538 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
1539 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
1540 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
1541 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
1542 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
1543 #define HalStartMirroring HALDISPATCH->HalStartMirroring
1544 #define HalEndMirroring HALDISPATCH->HalEndMirroring
1545 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
1546 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
1547 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
1548 #define HalGetCachedAcpiTable HALDISPATCH->HalGetCachedAcpiTable
1549 #define HalSetPciErrorHandlerCallback HALDISPATCH->HalSetPciErrorHandlerCallback
1551 #define HalGetErrorCapList HALDISPATCH->HalGetErrorCapList
1552 #define HalInjectError HALDISPATCH->HalInjectError
1555 typedef struct _HAL_BUS_INFORMATION
{
1556 INTERFACE_TYPE BusType
;
1557 BUS_DATA_TYPE ConfigurationType
;
1560 } HAL_BUS_INFORMATION
, *PHAL_BUS_INFORMATION
;
1562 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
{
1563 KPROFILE_SOURCE Source
;
1566 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
1568 typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX
{
1569 KPROFILE_SOURCE Source
;
1572 ULONG_PTR DefInterval
;
1573 ULONG_PTR MaxInterval
;
1574 ULONG_PTR MinInterval
;
1575 } HAL_PROFILE_SOURCE_INFORMATION_EX
, *PHAL_PROFILE_SOURCE_INFORMATION_EX
;
1577 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
{
1578 KPROFILE_SOURCE Source
;
1580 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
1582 typedef struct _HAL_PROFILE_SOURCE_LIST
{
1583 KPROFILE_SOURCE Source
;
1585 } HAL_PROFILE_SOURCE_LIST
, *PHAL_PROFILE_SOURCE_LIST
;
1587 typedef enum _HAL_DISPLAY_BIOS_INFORMATION
{
1588 HalDisplayInt10Bios
,
1589 HalDisplayEmulatedBios
,
1591 } HAL_DISPLAY_BIOS_INFORMATION
, *PHAL_DISPLAY_BIOS_INFORMATION
;
1593 typedef struct _HAL_POWER_INFORMATION
{
1595 } HAL_POWER_INFORMATION
, *PHAL_POWER_INFORMATION
;
1597 typedef struct _HAL_PROCESSOR_SPEED_INFO
{
1598 ULONG ProcessorSpeed
;
1599 } HAL_PROCESSOR_SPEED_INFORMATION
, *PHAL_PROCESSOR_SPEED_INFORMATION
;
1601 typedef struct _HAL_CALLBACKS
{
1602 PCALLBACK_OBJECT SetSystemInformation
;
1603 PCALLBACK_OBJECT BusCheck
;
1604 } HAL_CALLBACKS
, *PHAL_CALLBACKS
;
1606 typedef struct _HAL_PROCESSOR_FEATURE
{
1607 ULONG UsableFeatureBits
;
1608 } HAL_PROCESSOR_FEATURE
;
1611 (NTAPI
*PHALIOREADWRITEHANDLER
)(
1615 IN OUT PULONG pdwData
);
1617 typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST
{
1620 ULONG OSVersionTrigger
;
1621 PHALIOREADWRITEHANDLER IOHandler
;
1622 } HAL_AMLI_BAD_IO_ADDRESS_LIST
, *PHAL_AMLI_BAD_IO_ADDRESS_LIST
;
1624 #if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
1627 (NTAPI
*PHALMCAINTERFACELOCK
)(
1631 (NTAPI
*PHALMCAINTERFACEUNLOCK
)(
1635 (NTAPI
*PHALMCAINTERFACEREADREGISTER
)(
1636 IN UCHAR BankNumber
,
1637 IN OUT PVOID Exception
);
1639 typedef struct _HAL_MCA_INTERFACE
{
1640 PHALMCAINTERFACELOCK Lock
;
1641 PHALMCAINTERFACEUNLOCK Unlock
;
1642 PHALMCAINTERFACEREADREGISTER ReadRegister
;
1643 } HAL_MCA_INTERFACE
;
1646 ApicDestinationModePhysical
= 1,
1647 ApicDestinationModeLogicalFlat
,
1648 ApicDestinationModeLogicalClustered
,
1649 ApicDestinationModeUnknown
1650 } HAL_APIC_DESTINATION_MODE
, *PHAL_APIC_DESTINATION_MODE
;
1652 #if defined(_AMD64_)
1654 struct _KTRAP_FRAME
;
1655 struct _KEXCEPTION_FRAME
;
1657 typedef ERROR_SEVERITY
1658 (NTAPI
*PDRIVER_EXCPTN_CALLBACK
)(
1660 IN
struct _KTRAP_FRAME
*TrapFrame
,
1661 IN
struct _KEXCEPTION_FRAME
*ExceptionFrame
,
1662 IN PMCA_EXCEPTION Exception
);
1666 #if defined(_X86_) || defined(_IA64_)
1673 (NTAPI
*PDRIVER_EXCPTN_CALLBACK
)(
1675 IN PMCA_EXCEPTION BankLog
);
1678 typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK
;
1680 typedef struct _MCA_DRIVER_INFO
{
1681 PDRIVER_MCA_EXCEPTION_CALLBACK ExceptionCallback
;
1682 PKDEFERRED_ROUTINE DpcCallback
;
1683 PVOID DeviceContext
;
1684 } MCA_DRIVER_INFO
, *PMCA_DRIVER_INFO
;
1686 typedef struct _HAL_ERROR_INFO
{
1690 ULONG McaPreviousEventsCount
;
1691 ULONG McaCorrectedEventsCount
;
1692 ULONG McaKernelDeliveryFails
;
1693 ULONG McaDriverDpcQueueFails
;
1696 ULONG CmcPollingInterval
;
1697 ULONG CmcInterruptsCount
;
1698 ULONG CmcKernelDeliveryFails
;
1699 ULONG CmcDriverDpcQueueFails
;
1700 ULONG CmcGetStateFails
;
1701 ULONG CmcClearStateFails
;
1705 ULONG CpePollingInterval
;
1706 ULONG CpeInterruptsCount
;
1707 ULONG CpeKernelDeliveryFails
;
1708 ULONG CpeDriverDpcQueueFails
;
1709 ULONG CpeGetStateFails
;
1710 ULONG CpeClearStateFails
;
1711 ULONG CpeInterruptSources
;
1713 ULONGLONG KernelReserved
[4];
1714 } HAL_ERROR_INFO
, *PHAL_ERROR_INFO
;
1716 #define HAL_MCE_INTERRUPTS_BASED ((ULONG)-1)
1717 #define HAL_MCE_DISABLED ((ULONG)0)
1719 #define HAL_CMC_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
1720 #define HAL_CMC_DISABLED HAL_MCE_DISABLED
1722 #define HAL_CPE_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
1723 #define HAL_CPE_DISABLED HAL_MCE_DISABLED
1725 #define HAL_MCA_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
1726 #define HAL_MCA_DISABLED HAL_MCE_DISABLED
1729 (NTAPI
*PDRIVER_CMC_EXCEPTION_CALLBACK
)(
1731 IN PCMC_EXCEPTION CmcLog
);
1734 (NTAPI
*PDRIVER_CPE_EXCEPTION_CALLBACK
)(
1736 IN PCPE_EXCEPTION CmcLog
);
1738 typedef struct _CMC_DRIVER_INFO
{
1739 PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback
;
1740 PKDEFERRED_ROUTINE DpcCallback
;
1741 PVOID DeviceContext
;
1742 } CMC_DRIVER_INFO
, *PCMC_DRIVER_INFO
;
1744 typedef struct _CPE_DRIVER_INFO
{
1745 PDRIVER_CPE_EXCEPTION_CALLBACK ExceptionCallback
;
1746 PKDEFERRED_ROUTINE DpcCallback
;
1747 PVOID DeviceContext
;
1748 } CPE_DRIVER_INFO
, *PCPE_DRIVER_INFO
;
1750 #endif // defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
1755 (*HALSENDCROSSPARTITIONIPI
)(
1756 IN USHORT ProcessorID
,
1757 IN UCHAR HardwareVector
);
1760 (*HALRESERVECROSSPARTITIONINTERRUPTVECTOR
)(
1763 IN OUT PGROUP_AFFINITY Affinity
,
1764 OUT PUCHAR HardwareVector
);
1767 (*HALFREECROSSPARTITIONINTERRUPTVECTOR
)(
1769 IN PGROUP_AFFINITY Affinity
);
1771 typedef struct _HAL_CROSS_PARTITION_IPI_INTERFACE
{
1772 HALSENDCROSSPARTITIONIPI HalSendCrossPartitionIpi
;
1773 HALRESERVECROSSPARTITIONINTERRUPTVECTOR HalReserveCrossPartitionInterruptVector
;
1774 HALFREECROSSPARTITIONINTERRUPTVECTOR HalFreeCrossPartitionInterruptVector
;
1775 } HAL_CROSS_PARTITION_IPI_INTERFACE
;
1777 #define HAL_CROSS_PARTITION_IPI_INTERFACE_MINIMUM_SIZE \
1778 FIELD_OFFSET(HAL_CROSS_PARTITION_IPI_INTERFACE, \
1779 HalFreeCrossPartitionInterruptVector)
1781 #endif /* defined(_IA64_) */
1783 typedef struct _HAL_PLATFORM_INFORMATION
{
1784 ULONG PlatformFlags
;
1785 } HAL_PLATFORM_INFORMATION
, *PHAL_PLATFORM_INFORMATION
;
1787 #define HAL_PLATFORM_DISABLE_WRITE_COMBINING 0x01L
1788 #define HAL_PLATFORM_DISABLE_PTCG 0x04L
1789 #define HAL_PLATFORM_DISABLE_UC_MAIN_MEMORY 0x08L
1790 #define HAL_PLATFORM_ENABLE_WRITE_COMBINING_MMIO 0x10L
1791 #define HAL_PLATFORM_ACPI_TABLES_CACHED 0x20L
1793 /******************************************************************************
1795 ******************************************************************************/
1797 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
1798 #define NX_SUPPORT_POLICY_ALWAYSON 1
1799 #define NX_SUPPORT_POLICY_OPTIN 2
1800 #define NX_SUPPORT_POLICY_OPTOUT 3
1803 (NTAPI
*PEXPAND_STACK_CALLOUT
)(
1804 IN PVOID Parameter OPTIONAL
);
1807 (NTAPI
*PTIMER_APC_ROUTINE
)(
1808 IN PVOID TimerContext
,
1809 IN ULONG TimerLowValue
,
1810 IN LONG TimerHighValue
);
1812 typedef enum _TIMER_SET_INFORMATION_CLASS
{
1813 TimerSetCoalescableTimer
,
1815 } TIMER_SET_INFORMATION_CLASS
;
1817 #if (NTDDI_VERSION >= NTDDI_WIN7)
1818 typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO
{
1819 IN LARGE_INTEGER DueTime
;
1820 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
;
1821 IN PVOID TimerContext OPTIONAL
;
1822 IN
struct _COUNTED_REASON_CONTEXT
*WakeContext OPTIONAL
;
1823 IN ULONG Period OPTIONAL
;
1824 IN ULONG TolerableDelay
;
1825 OUT PBOOLEAN PreviousState OPTIONAL
;
1826 } TIMER_SET_COALESCABLE_TIMER_INFO
, *PTIMER_SET_COALESCABLE_TIMER_INFO
;
1827 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1829 #define XSTATE_LEGACY_FLOATING_POINT 0
1830 #define XSTATE_LEGACY_SSE 1
1831 #define XSTATE_GSSE 2
1833 #define XSTATE_MASK_LEGACY_FLOATING_POINT (1i64 << (XSTATE_LEGACY_FLOATING_POINT))
1834 #define XSTATE_MASK_LEGACY_SSE (1i64 << (XSTATE_LEGACY_SSE))
1835 #define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
1836 #define XSTATE_MASK_GSSE (1i64 << (XSTATE_GSSE))
1838 #define MAXIMUM_XSTATE_FEATURES 64
1840 typedef struct _XSTATE_FEATURE
{
1843 } XSTATE_FEATURE
, *PXSTATE_FEATURE
;
1845 typedef struct _XSTATE_CONFIGURATION
{
1846 ULONG64 EnabledFeatures
;
1848 ULONG OptimizedSave
:1;
1849 XSTATE_FEATURE Features
[MAXIMUM_XSTATE_FEATURES
];
1850 } XSTATE_CONFIGURATION
, *PXSTATE_CONFIGURATION
;
1852 #define MAX_WOW64_SHARED_ENTRIES 16
1854 typedef struct _KUSER_SHARED_DATA
{
1855 ULONG TickCountLowDeprecated
;
1856 ULONG TickCountMultiplier
;
1857 volatile KSYSTEM_TIME InterruptTime
;
1858 volatile KSYSTEM_TIME SystemTime
;
1859 volatile KSYSTEM_TIME TimeZoneBias
;
1860 USHORT ImageNumberLow
;
1861 USHORT ImageNumberHigh
;
1862 WCHAR NtSystemRoot
[260];
1863 ULONG MaxStackTraceDepth
;
1864 ULONG CryptoExponent
;
1866 ULONG LargePageMinimum
;
1868 NT_PRODUCT_TYPE NtProductType
;
1869 BOOLEAN ProductTypeIsValid
;
1870 ULONG NtMajorVersion
;
1871 ULONG NtMinorVersion
;
1872 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
1875 volatile ULONG TimeSlip
;
1876 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
1877 ULONG AltArchitecturePad
[1];
1878 LARGE_INTEGER SystemExpirationDate
;
1880 BOOLEAN KdDebuggerEnabled
;
1881 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
1882 UCHAR NXSupportPolicy
;
1884 volatile ULONG ActiveConsoleId
;
1885 volatile ULONG DismountCount
;
1886 ULONG ComPlusPackage
;
1887 ULONG LastSystemRITEventTickCount
;
1888 ULONG NumberOfPhysicalPages
;
1889 BOOLEAN SafeBootMode
;
1890 #if (NTDDI_VERSION >= NTDDI_WIN7)
1894 UCHAR TscQpcEnabled
:1;
1895 UCHAR TscQpcSpareFlag
:1;
1896 UCHAR TscQpcShift
:6;
1901 #if (NTDDI_VERSION >= NTDDI_VISTA)
1903 ULONG SharedDataFlags
;
1905 ULONG DbgErrorPortPresent
:1;
1906 ULONG DbgElevationEnabled
:1;
1907 ULONG DbgVirtEnabled
:1;
1908 ULONG DbgInstallerDetectEnabled
:1;
1909 ULONG DbgSystemDllRelocated
:1;
1910 ULONG DbgDynProcessorEnabled
:1;
1911 ULONG DbgSEHValidationEnabled
:1;
1918 ULONG DataFlagsPad
[1];
1919 ULONGLONG TestRetInstruction
;
1921 ULONG SystemCallReturn
;
1922 ULONGLONG SystemCallPad
[3];
1923 _ANONYMOUS_UNION
union {
1924 volatile KSYSTEM_TIME TickCount
;
1925 volatile ULONG64 TickCountQuad
;
1926 _ANONYMOUS_STRUCT
struct {
1927 ULONG ReservedTickCountOverlay
[3];
1928 ULONG TickCountPad
[1];
1933 #if (NTDDI_VERSION >= NTDDI_WS03)
1934 LONGLONG ConsoleSessionForegroundProcessId
;
1935 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
1937 #if (NTDDI_VERSION >= NTDDI_VISTA)
1938 #if (NTDDI_VERSION >= NTDDI_WIN7)
1939 USHORT UserModeGlobalLogger
[16];
1941 USHORT UserModeGlobalLogger
[8];
1942 ULONG HeapTracingPid
[2];
1943 ULONG CritSecTracingPid
[2];
1945 ULONG ImageFileExecutionOptions
;
1946 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
1947 ULONG LangGenerationCount
;
1949 /* 4 bytes padding */
1951 ULONGLONG Reserved5
;
1952 volatile ULONG64 InterruptTimeBias
;
1954 #if (NTDDI_VERSION >= NTDDI_WIN7)
1955 volatile ULONG64 TscQpcBias
;
1956 volatile ULONG ActiveProcessorCount
;
1957 volatile USHORT ActiveGroupCount
;
1959 volatile ULONG AitSamplingValue
;
1960 volatile ULONG AppCompatFlag
;
1961 ULONGLONG SystemDllNativeRelocation
;
1962 ULONG SystemDllWowRelocation
;
1964 XSTATE_CONFIGURATION XState
;
1966 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
1968 #if (NTDDI_VERSION >= NTDDI_VISTA)
1969 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
1970 #elif (NTDDI_VERSION >= NTDDI_WINXP)
1971 extern NTSYSAPI CCHAR KeNumberProcessors
;
1973 extern PCCHAR KeNumberProcessors
;
1977 /******************************************************************************
1978 * Kernel Debugger Types *
1979 ******************************************************************************/
1980 typedef struct _DEBUG_DEVICE_ADDRESS
{
1984 PUCHAR TranslatedAddress
;
1986 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
1988 typedef struct _DEBUG_MEMORY_REQUIREMENTS
{
1989 PHYSICAL_ADDRESS Start
;
1990 PHYSICAL_ADDRESS MaxEnd
;
1991 PVOID VirtualAddress
;
1995 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
1997 typedef struct _DEBUG_DEVICE_DESCRIPTOR
{
2006 BOOLEAN Initialized
;
2008 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
2009 DEBUG_MEMORY_REQUIREMENTS Memory
;
2010 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
2013 (NTAPI
*pKdSetupPciDeviceForDebugging
)(
2014 IN PVOID LoaderBlock OPTIONAL
,
2015 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
2018 (NTAPI
*pKdReleasePciDeviceForDebugging
)(
2019 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
2022 (NTAPI
*pKdGetAcpiTablePhase0
)(
2023 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
2024 IN ULONG Signature
);
2027 (NTAPI
*pKdCheckPowerButton
)(
2030 #if (NTDDI_VERSION >= NTDDI_VISTA)
2032 (NTAPI
*pKdMapPhysicalMemory64
)(
2033 IN PHYSICAL_ADDRESS PhysicalAddress
,
2034 IN ULONG NumberPages
,
2035 IN BOOLEAN FlushCurrentTLB
);
2038 (NTAPI
*pKdUnmapVirtualAddress
)(
2039 IN PVOID VirtualAddress
,
2040 IN ULONG NumberPages
,
2041 IN BOOLEAN FlushCurrentTLB
);
2044 (NTAPI
*pKdMapPhysicalMemory64
)(
2045 IN PHYSICAL_ADDRESS PhysicalAddress
,
2046 IN ULONG NumberPages
);
2049 (NTAPI
*pKdUnmapVirtualAddress
)(
2050 IN PVOID VirtualAddress
,
2051 IN ULONG NumberPages
);
2055 (NTAPI
*pKdGetPciDataByOffset
)(
2057 IN ULONG SlotNumber
,
2063 (NTAPI
*pKdSetPciDataByOffset
)(
2065 IN ULONG SlotNumber
,
2069 /******************************************************************************
2070 * Memory manager Types *
2071 ******************************************************************************/
2073 typedef struct _PHYSICAL_MEMORY_RANGE
{
2074 PHYSICAL_ADDRESS BaseAddress
;
2075 LARGE_INTEGER NumberOfBytes
;
2076 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
2079 (NTAPI
*PMM_ROTATE_COPY_CALLBACK_FUNCTION
)(
2080 IN PMDL DestinationMdl
,
2084 typedef enum _MM_ROTATE_DIRECTION
{
2086 MmToFrameBufferNoCopy
,
2088 MmToRegularMemoryNoCopy
,
2089 MmMaximumRotateDirection
2090 } MM_ROTATE_DIRECTION
, *PMM_ROTATE_DIRECTION
;
2093 /******************************************************************************
2094 * Process Manager Types *
2095 ******************************************************************************/
2097 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
2098 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
2099 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
2100 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
2101 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
2103 typedef struct _QUOTA_LIMITS
{
2104 SIZE_T PagedPoolLimit
;
2105 SIZE_T NonPagedPoolLimit
;
2106 SIZE_T MinimumWorkingSetSize
;
2107 SIZE_T MaximumWorkingSetSize
;
2108 SIZE_T PagefileLimit
;
2109 LARGE_INTEGER TimeLimit
;
2110 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
2112 typedef union _RATE_QUOTA_LIMIT
{
2115 ULONG RatePercent
:7;
2118 } RATE_QUOTA_LIMIT
, *PRATE_QUOTA_LIMIT
;
2120 typedef struct _QUOTA_LIMITS_EX
{
2121 SIZE_T PagedPoolLimit
;
2122 SIZE_T NonPagedPoolLimit
;
2123 SIZE_T MinimumWorkingSetSize
;
2124 SIZE_T MaximumWorkingSetSize
;
2125 SIZE_T PagefileLimit
;
2126 LARGE_INTEGER TimeLimit
;
2127 SIZE_T WorkingSetLimit
;
2132 RATE_QUOTA_LIMIT CpuRateLimit
;
2133 } QUOTA_LIMITS_EX
, *PQUOTA_LIMITS_EX
;
2135 typedef struct _IO_COUNTERS
{
2136 ULONGLONG ReadOperationCount
;
2137 ULONGLONG WriteOperationCount
;
2138 ULONGLONG OtherOperationCount
;
2139 ULONGLONG ReadTransferCount
;
2140 ULONGLONG WriteTransferCount
;
2141 ULONGLONG OtherTransferCount
;
2142 } IO_COUNTERS
, *PIO_COUNTERS
;
2144 typedef struct _VM_COUNTERS
{
2145 SIZE_T PeakVirtualSize
;
2147 ULONG PageFaultCount
;
2148 SIZE_T PeakWorkingSetSize
;
2149 SIZE_T WorkingSetSize
;
2150 SIZE_T QuotaPeakPagedPoolUsage
;
2151 SIZE_T QuotaPagedPoolUsage
;
2152 SIZE_T QuotaPeakNonPagedPoolUsage
;
2153 SIZE_T QuotaNonPagedPoolUsage
;
2154 SIZE_T PagefileUsage
;
2155 SIZE_T PeakPagefileUsage
;
2156 } VM_COUNTERS
, *PVM_COUNTERS
;
2158 typedef struct _VM_COUNTERS_EX
{
2159 SIZE_T PeakVirtualSize
;
2161 ULONG PageFaultCount
;
2162 SIZE_T PeakWorkingSetSize
;
2163 SIZE_T WorkingSetSize
;
2164 SIZE_T QuotaPeakPagedPoolUsage
;
2165 SIZE_T QuotaPagedPoolUsage
;
2166 SIZE_T QuotaPeakNonPagedPoolUsage
;
2167 SIZE_T QuotaNonPagedPoolUsage
;
2168 SIZE_T PagefileUsage
;
2169 SIZE_T PeakPagefileUsage
;
2170 SIZE_T PrivateUsage
;
2171 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
2173 #define MAX_HW_COUNTERS 16
2174 #define THREAD_PROFILING_FLAG_DISPATCH 0x00000001
2176 typedef enum _HARDWARE_COUNTER_TYPE
{
2178 MaxHardwareCounterType
2179 } HARDWARE_COUNTER_TYPE
, *PHARDWARE_COUNTER_TYPE
;
2181 typedef struct _HARDWARE_COUNTER
{
2182 HARDWARE_COUNTER_TYPE Type
;
2185 } HARDWARE_COUNTER
, *PHARDWARE_COUNTER
;
2187 typedef struct _POOLED_USAGE_AND_LIMITS
{
2188 SIZE_T PeakPagedPoolUsage
;
2189 SIZE_T PagedPoolUsage
;
2190 SIZE_T PagedPoolLimit
;
2191 SIZE_T PeakNonPagedPoolUsage
;
2192 SIZE_T NonPagedPoolUsage
;
2193 SIZE_T NonPagedPoolLimit
;
2194 SIZE_T PeakPagefileUsage
;
2195 SIZE_T PagefileUsage
;
2196 SIZE_T PagefileLimit
;
2197 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
2199 typedef struct _PROCESS_ACCESS_TOKEN
{
2202 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
2204 #define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS 0x00000003UL
2205 #define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1))
2207 typedef struct _PROCESS_EXCEPTION_PORT
{
2208 IN HANDLE ExceptionPortHandle
;
2209 IN OUT ULONG StateFlags
;
2210 } PROCESS_EXCEPTION_PORT
, *PPROCESS_EXCEPTION_PORT
;
2213 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
2215 IN HANDLE ProcessId
,
2218 typedef struct _PS_CREATE_NOTIFY_INFO
{
2223 IN ULONG FileOpenNameAvailable
:1;
2224 IN ULONG Reserved
:31;
2227 IN HANDLE ParentProcessId
;
2228 IN CLIENT_ID CreatingThreadId
;
2229 IN OUT
struct _FILE_OBJECT
*FileObject
;
2230 IN PCUNICODE_STRING ImageFileName
;
2231 IN PCUNICODE_STRING CommandLine OPTIONAL
;
2232 IN OUT NTSTATUS CreationStatus
;
2233 } PS_CREATE_NOTIFY_INFO
, *PPS_CREATE_NOTIFY_INFO
;
2236 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE_EX
)(
2237 IN OUT PEPROCESS Process
,
2238 IN HANDLE ProcessId
,
2239 IN PPS_CREATE_NOTIFY_INFO CreateInfo OPTIONAL
);
2242 (NTAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
2243 IN HANDLE ProcessId
,
2247 #define IMAGE_ADDRESSING_MODE_32BIT 3
2249 typedef struct _IMAGE_INFO
{
2250 _ANONYMOUS_UNION
union {
2252 _ANONYMOUS_STRUCT
struct {
2253 ULONG ImageAddressingMode
:8;
2254 ULONG SystemModeImage
:1;
2255 ULONG ImageMappedToAllPids
:1;
2256 ULONG ExtendedInfoPresent
:1;
2261 ULONG ImageSelector
;
2263 ULONG ImageSectionNumber
;
2264 } IMAGE_INFO
, *PIMAGE_INFO
;
2266 typedef struct _IMAGE_INFO_EX
{
2268 IMAGE_INFO ImageInfo
;
2269 struct _FILE_OBJECT
*FileObject
;
2270 } IMAGE_INFO_EX
, *PIMAGE_INFO_EX
;
2273 (NTAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
2274 IN PUNICODE_STRING FullImageName
,
2275 IN HANDLE ProcessId
,
2276 IN PIMAGE_INFO ImageInfo
);
2278 #define THREAD_CSWITCH_PMU_DISABLE FALSE
2279 #define THREAD_CSWITCH_PMU_ENABLE TRUE
2281 #define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001
2283 #define PROCESS_HANDLE_TRACING_MAX_STACKS 16
2285 typedef struct _NT_TIB
{
2286 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
2290 _ANONYMOUS_UNION
union {
2294 PVOID ArbitraryUserPointer
;
2295 struct _NT_TIB
*Self
;
2298 typedef struct _NT_TIB32
{
2299 ULONG ExceptionList
;
2303 __GNU_EXTENSION
union {
2307 ULONG ArbitraryUserPointer
;
2309 } NT_TIB32
,*PNT_TIB32
;
2311 typedef struct _NT_TIB64
{
2312 ULONG64 ExceptionList
;
2315 ULONG64 SubSystemTib
;
2316 __GNU_EXTENSION
union {
2320 ULONG64 ArbitraryUserPointer
;
2322 } NT_TIB64
,*PNT_TIB64
;
2324 typedef enum _PROCESSINFOCLASS
{
2325 ProcessBasicInformation
,
2330 ProcessBasePriority
,
2331 ProcessRaisePriority
,
2333 ProcessExceptionPort
,
2335 ProcessLdtInformation
,
2337 ProcessDefaultHardErrorMode
,
2338 ProcessIoPortHandlers
,
2339 ProcessPooledUsageAndLimits
,
2340 ProcessWorkingSetWatch
,
2341 ProcessUserModeIOPL
,
2342 ProcessEnableAlignmentFaultFixup
,
2343 ProcessPriorityClass
,
2344 ProcessWx86Information
,
2346 ProcessAffinityMask
,
2347 ProcessPriorityBoost
,
2349 ProcessSessionInformation
,
2350 ProcessForegroundInformation
,
2351 ProcessWow64Information
,
2352 ProcessImageFileName
,
2353 ProcessLUIDDeviceMapsEnabled
,
2354 ProcessBreakOnTermination
,
2355 ProcessDebugObjectHandle
,
2357 ProcessHandleTracing
,
2359 ProcessExecuteFlags
,
2360 ProcessTlsInformation
,
2362 ProcessImageInformation
,
2364 ProcessPagePriority
,
2365 ProcessInstrumentationCallback
,
2366 ProcessThreadStackAllocation
,
2367 ProcessWorkingSetWatchEx
,
2368 ProcessImageFileNameWin32
,
2369 ProcessImageFileMapping
,
2370 ProcessAffinityUpdateMode
,
2371 ProcessMemoryAllocationMode
,
2372 ProcessGroupInformation
,
2373 ProcessTokenVirtualizationEnabled
,
2374 ProcessConsoleHostProcess
,
2375 ProcessWindowInformation
,
2379 typedef enum _THREADINFOCLASS
{
2380 ThreadBasicInformation
,
2385 ThreadImpersonationToken
,
2386 ThreadDescriptorTableEntry
,
2387 ThreadEnableAlignmentFaultFixup
,
2388 ThreadEventPair_Reusable
,
2389 ThreadQuerySetWin32StartAddress
,
2391 ThreadPerformanceCount
,
2392 ThreadAmILastThread
,
2393 ThreadIdealProcessor
,
2394 ThreadPriorityBoost
,
2395 ThreadSetTlsArrayAddress
,
2397 ThreadHideFromDebugger
,
2398 ThreadBreakOnTermination
,
2399 ThreadSwitchLegacyState
,
2401 ThreadLastSystemCall
,
2405 ThreadActualBasePriority
,
2406 ThreadTebInformation
,
2410 ThreadGroupInformation
,
2411 ThreadUmsInformation
,
2412 ThreadCounterProfiling
,
2413 ThreadIdealProcessorEx
,
2417 typedef struct _PAGE_PRIORITY_INFORMATION
{
2419 } PAGE_PRIORITY_INFORMATION
, *PPAGE_PRIORITY_INFORMATION
;
2421 typedef struct _PROCESS_WS_WATCH_INFORMATION
{
2424 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
2426 typedef struct _PROCESS_BASIC_INFORMATION
{
2427 NTSTATUS ExitStatus
;
2428 struct _PEB
*PebBaseAddress
;
2429 ULONG_PTR AffinityMask
;
2430 KPRIORITY BasePriority
;
2431 ULONG_PTR UniqueProcessId
;
2432 ULONG_PTR InheritedFromUniqueProcessId
;
2433 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
2435 typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION
{
2437 PROCESS_BASIC_INFORMATION BasicInfo
;
2441 ULONG IsProtectedProcess
:1;
2442 ULONG IsWow64Process
:1;
2443 ULONG IsProcessDeleting
:1;
2444 ULONG IsCrossSessionCreate
:1;
2448 } PROCESS_EXTENDED_BASIC_INFORMATION
, *PPROCESS_EXTENDED_BASIC_INFORMATION
;
2450 typedef struct _PROCESS_DEVICEMAP_INFORMATION
{
2451 __GNU_EXTENSION
union {
2453 HANDLE DirectoryHandle
;
2457 UCHAR DriveType
[32];
2460 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
2462 typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX
{
2465 HANDLE DirectoryHandle
;
2469 UCHAR DriveType
[32];
2473 } PROCESS_DEVICEMAP_INFORMATION_EX
, *PPROCESS_DEVICEMAP_INFORMATION_EX
;
2475 typedef struct _PROCESS_SESSION_INFORMATION
{
2477 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
2479 typedef struct _PROCESS_HANDLE_TRACING_ENABLE
{
2481 } PROCESS_HANDLE_TRACING_ENABLE
, *PPROCESS_HANDLE_TRACING_ENABLE
;
2483 typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX
{
2486 } PROCESS_HANDLE_TRACING_ENABLE_EX
, *PPROCESS_HANDLE_TRACING_ENABLE_EX
;
2488 typedef struct _PROCESS_HANDLE_TRACING_ENTRY
{
2492 PVOID Stacks
[PROCESS_HANDLE_TRACING_MAX_STACKS
];
2493 } PROCESS_HANDLE_TRACING_ENTRY
, *PPROCESS_HANDLE_TRACING_ENTRY
;
2495 typedef struct _PROCESS_HANDLE_TRACING_QUERY
{
2498 PROCESS_HANDLE_TRACING_ENTRY HandleTrace
[1];
2499 } PROCESS_HANDLE_TRACING_QUERY
, *PPROCESS_HANDLE_TRACING_QUERY
;
2501 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess
;
2504 /******************************************************************************
2505 * Runtime Library Types *
2506 ******************************************************************************/
2509 #ifndef _RTL_RUN_ONCE_DEF
2510 #define _RTL_RUN_ONCE_DEF
2512 #define RTL_RUN_ONCE_INIT {0}
2514 #define RTL_RUN_ONCE_CHECK_ONLY 0x00000001UL
2515 #define RTL_RUN_ONCE_ASYNC 0x00000002UL
2516 #define RTL_RUN_ONCE_INIT_FAILED 0x00000004UL
2518 #define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
2520 #define RTL_HASH_ALLOCATED_HEADER 0x00000001
2522 #define RTL_HASH_RESERVED_SIGNATURE 0
2524 /* RtlVerifyVersionInfo() ComparisonType */
2527 #define VER_GREATER 2
2528 #define VER_GREATER_EQUAL 3
2530 #define VER_LESS_EQUAL 5
2534 #define VER_CONDITION_MASK 7
2535 #define VER_NUM_BITS_PER_CONDITION_MASK 3
2537 /* RtlVerifyVersionInfo() TypeMask */
2539 #define VER_MINORVERSION 0x0000001
2540 #define VER_MAJORVERSION 0x0000002
2541 #define VER_BUILDNUMBER 0x0000004
2542 #define VER_PLATFORMID 0x0000008
2543 #define VER_SERVICEPACKMINOR 0x0000010
2544 #define VER_SERVICEPACKMAJOR 0x0000020
2545 #define VER_SUITENAME 0x0000040
2546 #define VER_PRODUCT_TYPE 0x0000080
2548 #define VER_NT_WORKSTATION 0x0000001
2549 #define VER_NT_DOMAIN_CONTROLLER 0x0000002
2550 #define VER_NT_SERVER 0x0000003
2552 #define VER_PLATFORM_WIN32s 0
2553 #define VER_PLATFORM_WIN32_WINDOWS 1
2554 #define VER_PLATFORM_WIN32_NT 2
2556 typedef union _RTL_RUN_ONCE
{
2558 } RTL_RUN_ONCE
, *PRTL_RUN_ONCE
;
2560 typedef ULONG
/* LOGICAL */
2561 (NTAPI
*PRTL_RUN_ONCE_INIT_FN
) (
2562 IN OUT PRTL_RUN_ONCE RunOnce
,
2563 IN OUT PVOID Parameter OPTIONAL
,
2564 IN OUT PVOID
*Context OPTIONAL
);
2566 #endif /* _RTL_RUN_ONCE_DEF */
2568 typedef enum _TABLE_SEARCH_RESULT
{
2573 } TABLE_SEARCH_RESULT
;
2575 typedef enum _RTL_GENERIC_COMPARE_RESULTS
{
2579 } RTL_GENERIC_COMPARE_RESULTS
;
2582 struct _RTL_AVL_TABLE
;
2584 typedef RTL_GENERIC_COMPARE_RESULTS
2585 (NTAPI
*PRTL_AVL_COMPARE_ROUTINE
) (
2586 IN
struct _RTL_AVL_TABLE
*Table
,
2587 IN PVOID FirstStruct
,
2588 IN PVOID SecondStruct
);
2591 (NTAPI
*PRTL_AVL_ALLOCATE_ROUTINE
) (
2592 IN
struct _RTL_AVL_TABLE
*Table
,
2596 (NTAPI
*PRTL_AVL_FREE_ROUTINE
) (
2597 IN
struct _RTL_AVL_TABLE
*Table
,
2601 (NTAPI
*PRTL_AVL_MATCH_FUNCTION
) (
2602 IN
struct _RTL_AVL_TABLE
*Table
,
2604 IN PVOID MatchData
);
2606 typedef struct _RTL_BALANCED_LINKS
{
2607 struct _RTL_BALANCED_LINKS
*Parent
;
2608 struct _RTL_BALANCED_LINKS
*LeftChild
;
2609 struct _RTL_BALANCED_LINKS
*RightChild
;
2612 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
2614 typedef struct _RTL_AVL_TABLE
{
2615 RTL_BALANCED_LINKS BalancedRoot
;
2616 PVOID OrderedPointer
;
2617 ULONG WhichOrderedElement
;
2618 ULONG NumberGenericTableElements
;
2620 PRTL_BALANCED_LINKS RestartKey
;
2622 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
2623 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
2624 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
2626 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
2628 #ifndef RTL_USE_AVL_TABLES
2630 struct _RTL_GENERIC_TABLE
;
2632 typedef RTL_GENERIC_COMPARE_RESULTS
2633 (NTAPI
*PRTL_GENERIC_COMPARE_ROUTINE
) (
2634 IN
struct _RTL_GENERIC_TABLE
*Table
,
2635 IN PVOID FirstStruct
,
2636 IN PVOID SecondStruct
);
2639 (NTAPI
*PRTL_GENERIC_ALLOCATE_ROUTINE
) (
2640 IN
struct _RTL_GENERIC_TABLE
*Table
,
2644 (NTAPI
*PRTL_GENERIC_FREE_ROUTINE
) (
2645 IN
struct _RTL_GENERIC_TABLE
*Table
,
2648 typedef struct _RTL_SPLAY_LINKS
{
2649 struct _RTL_SPLAY_LINKS
*Parent
;
2650 struct _RTL_SPLAY_LINKS
*LeftChild
;
2651 struct _RTL_SPLAY_LINKS
*RightChild
;
2652 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
2654 typedef struct _RTL_GENERIC_TABLE
{
2655 PRTL_SPLAY_LINKS TableRoot
;
2656 LIST_ENTRY InsertOrderList
;
2657 PLIST_ENTRY OrderedPointer
;
2658 ULONG WhichOrderedElement
;
2659 ULONG NumberGenericTableElements
;
2660 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
2661 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
2662 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
2664 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
2666 #endif /* !RTL_USE_AVL_TABLES */
2668 #ifdef RTL_USE_AVL_TABLES
2670 #undef PRTL_GENERIC_COMPARE_ROUTINE
2671 #undef RTL_GENERIC_COMPARE_ROUTINE
2672 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
2673 #undef RTL_GENERIC_ALLOCATE_ROUTINE
2674 #undef PRTL_GENERIC_FREE_ROUTINE
2675 #undef RTL_GENERIC_FREE_ROUTINE
2676 #undef RTL_GENERIC_TABLE
2677 #undef PRTL_GENERIC_TABLE
2679 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
2680 #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
2681 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
2682 #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
2683 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
2684 #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
2685 #define RTL_GENERIC_TABLE RTL_AVL_TABLE
2686 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
2688 #endif /* RTL_USE_AVL_TABLES */
2690 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY
{
2692 ULONG_PTR Signature
;
2693 } RTL_DYNAMIC_HASH_TABLE_ENTRY
, *PRTL_DYNAMIC_HASH_TABLE_ENTRY
;
2695 typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT
{
2696 PLIST_ENTRY ChainHead
;
2697 PLIST_ENTRY PrevLinkage
;
2698 ULONG_PTR Signature
;
2699 } RTL_DYNAMIC_HASH_TABLE_CONTEXT
, *PRTL_DYNAMIC_HASH_TABLE_CONTEXT
;
2701 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR
{
2702 RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry
;
2703 PLIST_ENTRY ChainHead
;
2705 } RTL_DYNAMIC_HASH_TABLE_ENUMERATOR
, *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR
;
2707 typedef struct _RTL_DYNAMIC_HASH_TABLE
{
2714 ULONG NonEmptyBuckets
;
2715 ULONG NumEnumerators
;
2717 } RTL_DYNAMIC_HASH_TABLE
, *PRTL_DYNAMIC_HASH_TABLE
;
2719 typedef struct _OSVERSIONINFOA
{
2720 ULONG dwOSVersionInfoSize
;
2721 ULONG dwMajorVersion
;
2722 ULONG dwMinorVersion
;
2723 ULONG dwBuildNumber
;
2725 CHAR szCSDVersion
[128];
2726 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
2728 typedef struct _OSVERSIONINFOW
{
2729 ULONG dwOSVersionInfoSize
;
2730 ULONG dwMajorVersion
;
2731 ULONG dwMinorVersion
;
2732 ULONG dwBuildNumber
;
2734 WCHAR szCSDVersion
[128];
2735 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
2737 typedef struct _OSVERSIONINFOEXA
{
2738 ULONG dwOSVersionInfoSize
;
2739 ULONG dwMajorVersion
;
2740 ULONG dwMinorVersion
;
2741 ULONG dwBuildNumber
;
2743 CHAR szCSDVersion
[128];
2744 USHORT wServicePackMajor
;
2745 USHORT wServicePackMinor
;
2749 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
2751 typedef struct _OSVERSIONINFOEXW
{
2752 ULONG dwOSVersionInfoSize
;
2753 ULONG dwMajorVersion
;
2754 ULONG dwMinorVersion
;
2755 ULONG dwBuildNumber
;
2757 WCHAR szCSDVersion
[128];
2758 USHORT wServicePackMajor
;
2759 USHORT wServicePackMinor
;
2763 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
2766 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
2767 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
2768 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
2769 typedef OSVERSIONINFOW OSVERSIONINFO
;
2770 typedef POSVERSIONINFOW POSVERSIONINFO
;
2771 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
2773 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
2774 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
2775 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
2776 typedef OSVERSIONINFOA OSVERSIONINFO
;
2777 typedef POSVERSIONINFOA POSVERSIONINFO
;
2778 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
2779 #endif /* UNICODE */
2781 #define HASH_ENTRY_KEY(x) ((x)->Signature)
2783 /******************************************************************************
2784 * Security Manager Types *
2785 ******************************************************************************/
2786 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
2788 typedef enum _WELL_KNOWN_SID_TYPE
{
2792 WinCreatorOwnerSid
= 3,
2793 WinCreatorGroupSid
= 4,
2794 WinCreatorOwnerServerSid
= 5,
2795 WinCreatorGroupServerSid
= 6,
2796 WinNtAuthoritySid
= 7,
2800 WinInteractiveSid
= 11,
2802 WinAnonymousSid
= 13,
2804 WinEnterpriseControllersSid
= 15,
2806 WinAuthenticatedUserSid
= 17,
2807 WinRestrictedCodeSid
= 18,
2808 WinTerminalServerSid
= 19,
2809 WinRemoteLogonIdSid
= 20,
2810 WinLogonIdsSid
= 21,
2811 WinLocalSystemSid
= 22,
2812 WinLocalServiceSid
= 23,
2813 WinNetworkServiceSid
= 24,
2814 WinBuiltinDomainSid
= 25,
2815 WinBuiltinAdministratorsSid
= 26,
2816 WinBuiltinUsersSid
= 27,
2817 WinBuiltinGuestsSid
= 28,
2818 WinBuiltinPowerUsersSid
= 29,
2819 WinBuiltinAccountOperatorsSid
= 30,
2820 WinBuiltinSystemOperatorsSid
= 31,
2821 WinBuiltinPrintOperatorsSid
= 32,
2822 WinBuiltinBackupOperatorsSid
= 33,
2823 WinBuiltinReplicatorSid
= 34,
2824 WinBuiltinPreWindows2000CompatibleAccessSid
= 35,
2825 WinBuiltinRemoteDesktopUsersSid
= 36,
2826 WinBuiltinNetworkConfigurationOperatorsSid
= 37,
2827 WinAccountAdministratorSid
= 38,
2828 WinAccountGuestSid
= 39,
2829 WinAccountKrbtgtSid
= 40,
2830 WinAccountDomainAdminsSid
= 41,
2831 WinAccountDomainUsersSid
= 42,
2832 WinAccountDomainGuestsSid
= 43,
2833 WinAccountComputersSid
= 44,
2834 WinAccountControllersSid
= 45,
2835 WinAccountCertAdminsSid
= 46,
2836 WinAccountSchemaAdminsSid
= 47,
2837 WinAccountEnterpriseAdminsSid
= 48,
2838 WinAccountPolicyAdminsSid
= 49,
2839 WinAccountRasAndIasServersSid
= 50,
2840 WinNTLMAuthenticationSid
= 51,
2841 WinDigestAuthenticationSid
= 52,
2842 WinSChannelAuthenticationSid
= 53,
2843 WinThisOrganizationSid
= 54,
2844 WinOtherOrganizationSid
= 55,
2845 WinBuiltinIncomingForestTrustBuildersSid
= 56,
2846 WinBuiltinPerfMonitoringUsersSid
= 57,
2847 WinBuiltinPerfLoggingUsersSid
= 58,
2848 WinBuiltinAuthorizationAccessSid
= 59,
2849 WinBuiltinTerminalServerLicenseServersSid
= 60,
2850 WinBuiltinDCOMUsersSid
= 61,
2851 WinBuiltinIUsersSid
= 62,
2853 WinBuiltinCryptoOperatorsSid
= 64,
2854 WinUntrustedLabelSid
= 65,
2855 WinLowLabelSid
= 66,
2856 WinMediumLabelSid
= 67,
2857 WinHighLabelSid
= 68,
2858 WinSystemLabelSid
= 69,
2859 WinWriteRestrictedCodeSid
= 70,
2860 WinCreatorOwnerRightsSid
= 71,
2861 WinCacheablePrincipalsGroupSid
= 72,
2862 WinNonCacheablePrincipalsGroupSid
= 73,
2863 WinEnterpriseReadonlyControllersSid
= 74,
2864 WinAccountReadonlyControllersSid
= 75,
2865 WinBuiltinEventLogReadersGroup
= 76,
2866 WinNewEnterpriseReadonlyControllersSid
= 77,
2867 WinBuiltinCertSvcDComAccessGroup
= 78,
2868 WinMediumPlusLabelSid
= 79,
2869 WinLocalLogonSid
= 80,
2870 WinConsoleLogonSid
= 81,
2871 WinThisOrganizationCertificateSid
= 82,
2872 } WELL_KNOWN_SID_TYPE
;
2874 #if defined(_M_IX86)
2876 #define PAUSE_PROCESSOR YieldProcessor();
2878 #define KERNEL_STACK_SIZE 12288
2879 #define KERNEL_LARGE_STACK_SIZE 61440
2880 #define KERNEL_LARGE_STACK_COMMIT 12288
2882 #define SIZE_OF_80387_REGISTERS 80
2884 #if !defined(RC_INVOKED)
2886 #define CONTEXT_i386 0x10000
2887 #define CONTEXT_i486 0x10000
2888 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
2889 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
2890 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
2891 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
2892 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
2893 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
2895 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
2896 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
2897 CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \
2898 CONTEXT_EXTENDED_REGISTERS)
2900 #define CONTEXT_XSTATE (CONTEXT_i386 | 0x00000040L)
2902 #endif /* !defined(RC_INVOKED) */
2904 typedef struct _FLOATING_SAVE_AREA
{
2909 ULONG ErrorSelector
;
2912 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
2914 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
2916 #include "pshpack4.h"
2917 typedef struct _CONTEXT
{
2925 FLOATING_SAVE_AREA FloatSave
;
2942 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
2944 #include "poppack.h"
2946 #define KeGetPcr() PCR
2948 #define PCR_MINOR_VERSION 1
2949 #define PCR_MAJOR_VERSION 1
2951 typedef struct _KPCR
{
2955 struct _EXCEPTION_REGISTRATION_RECORD
*Used_ExceptionList
;
2956 PVOID Used_StackBase
;
2959 ULONG ContextSwitches
;
2960 KAFFINITY SetMemberCopy
;
2964 struct _KPCR
*SelfPcr
;
2965 struct _KPRCB
*Prcb
;
2970 PVOID KdVersionBlock
;
2971 struct _KIDTENTRY
*IDT
;
2972 struct _KGDTENTRY
*GDT
;
2974 USHORT MajorVersion
;
2975 USHORT MinorVersion
;
2976 KAFFINITY SetMember
;
2977 ULONG StallScaleFactor
;
2981 UCHAR SecondLevelCacheAssociativity
;
2983 ULONG KernelReserved
[14];
2984 ULONG SecondLevelCacheSize
;
2985 ULONG HalReserved
[16];
2990 KeGetCurrentProcessorNumber(VOID
)
2992 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
3000 extern NTKERNELAPI PVOID MmHighestUserAddress
;
3001 extern NTKERNELAPI PVOID MmSystemRangeStart
;
3002 extern NTKERNELAPI ULONG MmUserProbeAddress
;
3004 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
3005 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
3006 #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
3007 #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
3008 extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_
;
3010 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
3012 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
3013 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
3014 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
3015 #if !defined (_X86PAE_)
3016 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
3018 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
3021 #elif defined(_M_AMD64)
3023 #define PAUSE_PROCESSOR YieldProcessor();
3025 #define KERNEL_STACK_SIZE 0x6000
3026 #define KERNEL_LARGE_STACK_SIZE 0x12000
3027 #define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE
3029 #define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000
3031 #define EXCEPTION_READ_FAULT 0
3032 #define EXCEPTION_WRITE_FAULT 1
3033 #define EXCEPTION_EXECUTE_FAULT 8
3035 #if !defined(RC_INVOKED)
3037 #define CONTEXT_AMD64 0x100000
3039 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
3040 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
3041 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
3042 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
3043 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
3045 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
3046 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
3048 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
3050 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
3051 #define CONTEXT_SERVICE_ACTIVE 0x10000000
3052 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
3053 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
3055 #endif /* !defined(RC_INVOKED) */
3057 #define INITIAL_MXCSR 0x1f80
3058 #define INITIAL_FPCSR 0x027f
3060 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
3100 XMM_SAVE_AREA32 FltSave
;
3122 M128A VectorRegister
[26];
3123 ULONG64 VectorControl
;
3124 ULONG64 DebugControl
;
3125 ULONG64 LastBranchToRip
;
3126 ULONG64 LastBranchFromRip
;
3127 ULONG64 LastExceptionToRip
;
3128 ULONG64 LastExceptionFromRip
;
3131 #define PCR_MINOR_VERSION 1
3132 #define PCR_MAJOR_VERSION 1
3134 typedef struct _KPCR
3136 _ANONYMOUS_UNION
union
3139 _ANONYMOUS_STRUCT
struct
3141 union _KGDTENTRY64
*GdtBase
;
3142 struct _KTSS64
*TssBase
;
3145 struct _KPRCB
*CurrentPrcb
;
3146 PKSPIN_LOCK_QUEUE LockArray
;
3150 union _KIDTENTRY64
*IdtBase
;
3153 UCHAR SecondLevelCacheAssociativity
;
3154 UCHAR ObsoleteNumber
;
3157 USHORT MajorVersion
;
3158 USHORT MinorVersion
;
3159 ULONG StallScaleFactor
;
3161 ULONG KernelReserved
[15];
3162 ULONG SecondLevelCacheSize
;
3163 ULONG HalReserved
[16];
3165 PVOID KdVersionBlock
;
3167 ULONG PcrAlign1
[24];
3174 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
3179 KeGetCurrentProcessorNumber(VOID
)
3181 return (ULONG
)__readgsword(0x184);
3185 #define PTI_SHIFT 12L
3186 #define PDI_SHIFT 21L
3187 #define PPI_SHIFT 30L
3188 #define PXI_SHIFT 39L
3189 #define PTE_PER_PAGE 512
3190 #define PDE_PER_PAGE 512
3191 #define PPE_PER_PAGE 512
3192 #define PXE_PER_PAGE 512
3193 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
3194 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
3195 #define PPI_MASK (PPE_PER_PAGE - 1)
3196 #define PXI_MASK (PXE_PER_PAGE - 1)
3198 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
3199 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
3200 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
3201 #define PDE_BASE 0xFFFFF6FB40000000ULL
3202 #define PTE_BASE 0xFFFFF68000000000ULL
3203 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
3204 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
3205 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
3206 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
3208 extern NTKERNELAPI PVOID MmHighestUserAddress
;
3209 extern NTKERNELAPI PVOID MmSystemRangeStart
;
3210 extern NTKERNELAPI ULONG64 MmUserProbeAddress
;
3212 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
3213 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
3214 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
3215 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
3216 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
3219 #elif defined(_M_IA64)
3221 #elif defined(_M_PPC)
3224 #elif defined(_M_MIPS)
3226 #elif defined(_M_ARM)
3228 #error Unknown Architecture
3231 /******************************************************************************
3232 * Executive Functions *
3233 ******************************************************************************/
3235 static __inline PVOID
3237 IN PZONE_HEADER Zone
)
3239 if (Zone
->FreeList
.Next
)
3240 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
3241 return (PVOID
) Zone
->FreeList
.Next
;
3244 static __inline PVOID
3246 IN PZONE_HEADER Zone
,
3249 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
3250 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
3251 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
3256 * ExInterlockedAllocateFromZone(
3257 * IN PZONE_HEADER Zone,
3258 * IN PKSPIN_LOCK Lock)
3260 #define ExInterlockedAllocateFromZone(Zone, Lock) \
3261 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
3264 * ExInterlockedFreeToZone(
3265 * IN PZONE_HEADER Zone,
3267 * IN PKSPIN_LOCK Lock);
3269 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
3270 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
3275 * IN PZONE_HEADER Zone)
3277 #define ExIsFullZone(Zone) \
3278 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
3281 * ExIsObjectInFirstZoneSegment(
3282 * IN PZONE_HEADER Zone,
3285 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
3286 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
3287 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
3288 (Zone)->TotalSegmentSize)) )
3290 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
3291 #define ExAcquireResourceShared ExAcquireResourceSharedLite
3292 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
3293 #define ExDeleteResource ExDeleteResourceLite
3294 #define ExInitializeResource ExInitializeResourceLite
3295 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
3296 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
3297 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
3298 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
3300 typedef enum _INTERLOCKED_RESULT
{
3301 ResultNegative
= RESULT_NEGATIVE
,
3302 ResultZero
= RESULT_ZERO
,
3303 ResultPositive
= RESULT_POSITIVE
3304 } INTERLOCKED_RESULT
;
3310 Exfi386InterlockedIncrementLong(
3311 IN OUT LONG
volatile *Addend
);
3316 Exfi386InterlockedDecrementLong(
3322 Exfi386InterlockedExchangeUlong(
3328 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3333 IN OUT PZONE_HEADER Zone
,
3334 IN OUT PVOID Segment
,
3335 IN ULONG SegmentSize
);
3341 OUT PZONE_HEADER Zone
,
3343 IN OUT PVOID InitialSegment
,
3344 IN ULONG InitialSegmentSize
);
3349 ExInterlockedExtendZone(
3350 IN OUT PZONE_HEADER Zone
,
3351 IN OUT PVOID Segment
,
3352 IN ULONG SegmentSize
,
3353 IN OUT PKSPIN_LOCK Lock
);
3365 ExRaiseAccessViolation(VOID
);
3371 ExRaiseDatatypeMisalignment(VOID
);
3373 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3376 /* Hardware Abstraction Layer Functions */
3378 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3380 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
3384 #else /* USE_DMA_MACROS ... */
3386 //DECLSPEC_DEPRECATED_DDK
3390 IoFreeAdapterChannel(
3391 IN PADAPTER_OBJECT AdapterObject
);
3393 //DECLSPEC_DEPRECATED_DDK
3397 IoFlushAdapterBuffers(
3398 IN PADAPTER_OBJECT AdapterObject
,
3400 IN PVOID MapRegisterBase
,
3403 IN BOOLEAN WriteToDevice
);
3405 //DECLSPEC_DEPRECATED_DDK
3410 IN PADAPTER_OBJECT AdapterObject
,
3411 IN PVOID MapRegisterBase
,
3412 IN ULONG NumberOfMapRegisters
);
3414 //DECLSPEC_DEPRECATED_DDK
3418 HalAllocateCommonBuffer(
3419 IN PADAPTER_OBJECT AdapterObject
,
3421 OUT PPHYSICAL_ADDRESS LogicalAddress
,
3422 IN BOOLEAN CacheEnabled
);
3424 //DECLSPEC_DEPRECATED_DDK
3428 HalFreeCommonBuffer(
3429 IN PADAPTER_OBJECT AdapterObject
,
3431 IN PHYSICAL_ADDRESS LogicalAddress
,
3432 IN PVOID VirtualAddress
,
3433 IN BOOLEAN CacheEnabled
);
3435 //DECLSPEC_DEPRECATED_DDK
3440 IN PADAPTER_OBJECT AdapterObject
);
3445 HalAllocateAdapterChannel(
3446 IN PADAPTER_OBJECT AdapterObject
,
3447 IN PWAIT_CONTEXT_BLOCK Wcb
,
3448 IN ULONG NumberOfMapRegisters
,
3449 IN PDRIVER_CONTROL ExecutionRoutine
);
3451 #endif /* USE_DMA_MACROS ... */
3453 #if !defined(NO_LEGACY_DRIVERS)
3457 HalAssignSlotResources(
3458 IN PUNICODE_STRING RegistryPath
,
3459 IN PUNICODE_STRING DriverClassName
,
3460 IN PDRIVER_OBJECT DriverObject
,
3461 IN PDEVICE_OBJECT DeviceObject
,
3462 IN INTERFACE_TYPE BusType
,
3464 IN ULONG SlotNumber
,
3465 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
3470 HalGetInterruptVector(
3471 IN INTERFACE_TYPE InterfaceType
,
3473 IN ULONG BusInterruptLevel
,
3474 IN ULONG BusInterruptVector
,
3476 OUT PKAFFINITY Affinity
);
3482 IN BUS_DATA_TYPE BusDataType
,
3484 IN ULONG SlotNumber
,
3492 IN BUS_DATA_TYPE BusDataType
,
3494 IN ULONG SlotNumber
,
3502 IN ULONG Frequency
);
3503 #endif /* !defined(NO_LEGACY_DRIVERS) */
3509 IN PDEVICE_DESCRIPTION DeviceDescription
,
3510 OUT PULONG NumberOfMapRegisters
);
3515 IN PADAPTER_OBJECT DmaAdapter
);
3520 HalAcquireDisplayOwnership(
3521 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
3526 HalGetBusDataByOffset(
3527 IN BUS_DATA_TYPE BusDataType
,
3529 IN ULONG SlotNumber
,
3537 HalSetBusDataByOffset(
3538 IN BUS_DATA_TYPE BusDataType
,
3540 IN ULONG SlotNumber
,
3548 HalTranslateBusAddress(
3549 IN INTERFACE_TYPE InterfaceType
,
3551 IN PHYSICAL_ADDRESS BusAddress
,
3552 IN OUT PULONG AddressSpace
,
3553 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
3558 HalAllocateCrashDumpRegisters(
3559 IN PADAPTER_OBJECT AdapterObject
,
3560 IN OUT PULONG NumberOfMapRegisters
);
3564 HalGetScatterGatherList(
3565 IN PADAPTER_OBJECT DmaAdapter
,
3566 IN PDEVICE_OBJECT DeviceObject
,
3570 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
3572 IN BOOLEAN WriteToDevice
);
3576 HalPutScatterGatherList(
3577 IN PADAPTER_OBJECT DmaAdapter
,
3578 IN PSCATTER_GATHER_LIST ScatterGather
,
3579 IN BOOLEAN WriteToDevice
);
3581 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3583 #if (NTDDI_VERSION >= NTDDI_WINXP)
3588 IN PDEVICE_OBJECT DeviceObject
,
3589 IN ULONG SectorSize
,
3590 IN ULONG MBRTypeIdentifier
,
3592 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
3594 #if (NTDDI_VERSION >= NTDDI_WIN7)
3598 HalAllocateHardwareCounters(
3599 IN PGROUP_AFFINITY GroupAffinty
,
3600 IN ULONG GroupCount
,
3601 IN PPHYSICAL_COUNTER_RESOURCE_LIST ResourceList
,
3602 OUT PHANDLE CounterSetHandle
);
3606 HalFreeHardwareCounters(
3607 IN HANDLE CounterSetHandle
);
3609 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
3612 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3616 HalGetDmaAlignmentRequirement(VOID
);
3618 #endif /* defined(_IA64_) */
3620 #if defined(_M_IX86) || defined(_M_AMD64)
3621 #define HalGetDmaAlignmentRequirement() 1L
3624 #if (NTDDI_VERSION >= NTDDI_WIN7)
3626 typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR
*PWHEA_ERROR_SOURCE_DESCRIPTOR
;
3627 typedef struct _WHEA_ERROR_RECORD
*PWHEA_ERROR_RECORD
;
3633 IN PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource
,
3634 IN PWHEA_ERROR_RECORD ErrorRecord
);
3638 typedef struct _WHEA_ERROR_RECORD
*PWHEA_ERROR_RECORD
;
3644 IN PWHEA_ERROR_RECORD ErrorRecord
);
3646 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
3648 /******************************************************************************
3649 * I/O Manager Functions *
3650 ******************************************************************************/
3653 * VOID IoAssignArcName(
3654 * IN PUNICODE_STRING ArcName,
3655 * IN PUNICODE_STRING DeviceName);
3657 #define IoAssignArcName(_ArcName, _DeviceName) ( \
3658 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
3662 * IoDeassignArcName(
3663 * IN PUNICODE_STRING ArcName)
3665 #define IoDeassignArcName IoDeleteSymbolicLink
3670 IoInitializeDriverCreateContext(
3671 PIO_DRIVER_CREATE_CONTEXT DriverContext
)
3673 RtlZeroMemory(DriverContext
, sizeof(IO_DRIVER_CREATE_CONTEXT
));
3674 DriverContext
->Size
= sizeof(IO_DRIVER_CREATE_CONTEXT
);
3677 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3679 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
3683 IoAllocateAdapterChannel(
3684 IN PADAPTER_OBJECT AdapterObject
,
3685 IN PDEVICE_OBJECT DeviceObject
,
3686 IN ULONG NumberOfMapRegisters
,
3687 IN PDRIVER_CONTROL ExecutionRoutine
,
3691 #if !defined(DMA_MACROS_DEFINED)
3692 //DECLSPEC_DEPRECATED_DDK
3697 IN PADAPTER_OBJECT AdapterObject
,
3699 IN PVOID MapRegisterBase
,
3701 IN OUT PULONG Length
,
3702 IN BOOLEAN WriteToDevice
);
3708 IoAllocateController(
3709 IN PCONTROLLER_OBJECT ControllerObject
,
3710 IN PDEVICE_OBJECT DeviceObject
,
3711 IN PDRIVER_CONTROL ExecutionRoutine
,
3712 IN PVOID Context OPTIONAL
);
3724 IN PCONTROLLER_OBJECT ControllerObject
);
3730 IN PCONTROLLER_OBJECT ControllerObject
);
3733 PCONFIGURATION_INFORMATION
3735 IoGetConfigurationInformation(VOID
);
3740 IoGetDeviceToVerify(
3741 IN PETHREAD Thread
);
3747 IN PDEVICE_OBJECT DeviceObject
,
3748 IN PFILE_OBJECT FileObject
);
3753 IoGetFileObjectGenericMapping(VOID
);
3758 IoMakeAssociatedIrp(
3760 IN CCHAR StackSize
);
3765 IoQueryDeviceDescription(
3766 IN PINTERFACE_TYPE BusType OPTIONAL
,
3767 IN PULONG BusNumber OPTIONAL
,
3768 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
3769 IN PULONG ControllerNumber OPTIONAL
,
3770 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
3771 IN PULONG PeripheralNumber OPTIONAL
,
3772 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
3773 IN OUT PVOID Context OPTIONAL
);
3780 IN PVPB Vpb OPTIONAL
,
3781 IN PDEVICE_OBJECT RealDeviceObject
);
3786 IoRaiseInformationalHardError(
3787 IN NTSTATUS ErrorStatus
,
3788 IN PUNICODE_STRING String OPTIONAL
,
3789 IN PKTHREAD Thread OPTIONAL
);
3794 IoRegisterBootDriverReinitialization(
3795 IN PDRIVER_OBJECT DriverObject
,
3796 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
3797 IN PVOID Context OPTIONAL
);
3802 IoRegisterDriverReinitialization(
3803 IN PDRIVER_OBJECT DriverObject
,
3804 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
3805 IN PVOID Context OPTIONAL
);
3810 IoAttachDeviceByPointer(
3811 IN PDEVICE_OBJECT SourceDevice
,
3812 IN PDEVICE_OBJECT TargetDevice
);
3817 IoReportDetectedDevice(
3818 IN PDRIVER_OBJECT DriverObject
,
3819 IN INTERFACE_TYPE LegacyBusType
,
3821 IN ULONG SlotNumber
,
3822 IN PCM_RESOURCE_LIST ResourceList OPTIONAL
,
3823 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
3824 IN BOOLEAN ResourceAssigned
,
3825 IN OUT PDEVICE_OBJECT
*DeviceObject OPTIONAL
);
3830 IoReportResourceForDetection(
3831 IN PDRIVER_OBJECT DriverObject
,
3832 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
3833 IN ULONG DriverListSize OPTIONAL
,
3834 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
3835 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
3836 IN ULONG DeviceListSize OPTIONAL
,
3837 OUT PBOOLEAN ConflictDetected
);
3842 IoReportResourceUsage(
3843 IN PUNICODE_STRING DriverClassName OPTIONAL
,
3844 IN PDRIVER_OBJECT DriverObject
,
3845 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
3846 IN ULONG DriverListSize OPTIONAL
,
3847 IN PDEVICE_OBJECT DeviceObject
,
3848 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
3849 IN ULONG DeviceListSize OPTIONAL
,
3850 IN BOOLEAN OverrideConflict
,
3851 OUT PBOOLEAN ConflictDetected
);
3856 IoSetHardErrorOrVerifyDevice(
3858 IN PDEVICE_OBJECT DeviceObject
);
3864 IN PUNICODE_STRING RegistryPath
,
3865 IN PUNICODE_STRING DriverClassName OPTIONAL
,
3866 IN PDRIVER_OBJECT DriverObject
,
3867 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
3868 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL
,
3869 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
3874 IoSetThreadHardErrorMode(
3875 IN BOOLEAN EnableHardErrors
);
3878 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3880 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
3885 IoIsFileOriginRemote(
3886 IN PFILE_OBJECT FileObject
);
3892 IN PFILE_OBJECT FileObject
,
3895 #endif /* (NTDDI_VERSION >= NTDDI_WIN2KSP3) */
3897 #if (NTDDI_VERSION >= NTDDI_WINXP)
3902 IoReadPartitionTable(
3903 IN PDEVICE_OBJECT DeviceObject
,
3904 IN ULONG SectorSize
,
3905 IN BOOLEAN ReturnRecognizedPartitions
,
3906 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
3911 IoSetPartitionInformation(
3912 IN PDEVICE_OBJECT DeviceObject
,
3913 IN ULONG SectorSize
,
3914 IN ULONG PartitionNumber
,
3915 IN ULONG PartitionType
);
3920 IoWritePartitionTable(
3921 IN PDEVICE_OBJECT DeviceObject
,
3922 IN ULONG SectorSize
,
3923 IN ULONG SectorsPerTrack
,
3924 IN ULONG NumberOfHeads
,
3925 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
3931 IN PDEVICE_OBJECT DeviceObject
,
3932 IN
struct _CREATE_DISK
* Disk OPTIONAL
);
3937 IoReadDiskSignature(
3938 IN PDEVICE_OBJECT DeviceObject
,
3939 IN ULONG BytesPerSector
,
3940 OUT PDISK_SIGNATURE Signature
);
3945 IoReadPartitionTableEx(
3946 IN PDEVICE_OBJECT DeviceObject
,
3947 OUT
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
3952 IoSetPartitionInformationEx(
3953 IN PDEVICE_OBJECT DeviceObject
,
3954 IN ULONG PartitionNumber
,
3955 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
3960 IoSetSystemPartition(
3961 IN PUNICODE_STRING VolumeNameString
);
3966 IoVerifyPartitionTable(
3967 IN PDEVICE_OBJECT DeviceObject
,
3968 IN BOOLEAN FixErrors
);
3973 IoVolumeDeviceToDosName(
3974 IN PVOID VolumeDeviceObject
,
3975 OUT PUNICODE_STRING DosName
);
3980 IoWritePartitionTableEx(
3981 IN PDEVICE_OBJECT DeviceObject
,
3982 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*DriveLayout
);
3987 IoCreateFileSpecifyDeviceObjectHint(
3988 OUT PHANDLE FileHandle
,
3989 IN ACCESS_MASK DesiredAccess
,
3990 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3991 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3992 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
3993 IN ULONG FileAttributes
,
3994 IN ULONG ShareAccess
,
3995 IN ULONG Disposition
,
3996 IN ULONG CreateOptions
,
3997 IN PVOID EaBuffer OPTIONAL
,
3999 IN CREATE_FILE_TYPE CreateFileType
,
4000 IN PVOID InternalParameters OPTIONAL
,
4002 IN PVOID DeviceObject OPTIONAL
);
4007 IoAttachDeviceToDeviceStackSafe(
4008 IN PDEVICE_OBJECT SourceDevice
,
4009 IN PDEVICE_OBJECT TargetDevice
,
4010 OUT PDEVICE_OBJECT
*AttachedToDeviceObject
);
4013 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4015 #if (NTDDI_VERSION >= NTDDI_WS03)
4019 IoGetPagingIoPriority(
4022 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
4023 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
4027 IoTranslateBusAddress(
4028 IN INTERFACE_TYPE InterfaceType
,
4030 IN PHYSICAL_ADDRESS BusAddress
,
4031 IN OUT PULONG AddressSpace
,
4032 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
4033 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
4035 #if (NTDDI_VERSION >= NTDDI_VISTA)
4039 IoUpdateDiskGeometry(
4040 IN PDEVICE_OBJECT DeviceObject
,
4041 IN
struct _DISK_GEOMETRY_EX
* OldDiskGeometry
,
4042 IN
struct _DISK_GEOMETRY_EX
* NewDiskGeometry
);
4044 PTXN_PARAMETER_BLOCK
4046 IoGetTransactionParameterBlock(
4047 IN PFILE_OBJECT FileObject
);
4053 OUT PHANDLE FileHandle
,
4054 IN ACCESS_MASK DesiredAccess
,
4055 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4056 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4057 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
4058 IN ULONG FileAttributes
,
4059 IN ULONG ShareAccess
,
4060 IN ULONG Disposition
,
4061 IN ULONG CreateOptions
,
4062 IN PVOID EaBuffer OPTIONAL
,
4064 IN CREATE_FILE_TYPE CreateFileType
,
4065 IN PVOID InternalParameters OPTIONAL
,
4067 IN PIO_DRIVER_CREATE_CONTEXT DriverContext OPTIONAL
);
4071 IoSetIrpExtraCreateParameter(
4073 IN
struct _ECP_LIST
*ExtraCreateParameter
);
4077 IoClearIrpExtraCreateParameter(
4082 IoGetIrpExtraCreateParameter(
4084 OUT
struct _ECP_LIST
**ExtraCreateParameter OPTIONAL
);
4088 IoIsFileObjectIgnoringSharing(
4089 IN PFILE_OBJECT FileObject
);
4091 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4093 #if (NTDDI_VERSION >= NTDDI_WIN7)
4097 IoSetFileObjectIgnoreSharing(
4098 IN PFILE_OBJECT FileObject
);
4100 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4102 /******************************************************************************
4103 * Kernel Debugger Functions *
4104 ******************************************************************************/
4111 IN ULONG MaximumResponseLength
);
4113 /******************************************************************************
4114 * Kernel Functions *
4115 ******************************************************************************/
4120 KeInvalidateRangeAllCaches(
4121 IN PVOID BaseAddress
,
4124 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4131 IN KDPC_IMPORTANCE Importance
);
4137 IN OUT PRKEVENT Event
,
4138 IN KPRIORITY Increment
,
4144 KeSetBasePriorityThread(
4145 IN OUT PRKTHREAD Thread
,
4151 KeEnterCriticalRegion(VOID
);
4156 KeLeaveCriticalRegion(VOID
);
4163 IN ULONG BugCheckCode
);
4164 #if defined(SINGLE_GROUP_LEGACY_API)
4170 KeSetTargetProcessorDpc(
4177 KeQueryActiveProcessors(VOID
);
4178 #endif /* defined(SINGLE_GROUP_LEGACY_API) */
4181 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4183 #if (NTDDI_VERSION >= NTDDI_WINXP)
4188 KeAreApcsDisabled(VOID
);
4190 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4192 #if (NTDDI_VERSION >= NTDDI_WS03)
4198 KeInvalidateAllCaches(VOID
);
4199 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
4200 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
4205 KeExpandKernelStackAndCallout(
4206 IN PEXPAND_STACK_CALLOUT Callout
,
4207 IN PVOID Parameter OPTIONAL
,
4213 KeEnterGuardedRegion(VOID
);
4218 KeLeaveGuardedRegion(VOID
);
4219 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
4221 #if (NTDDI_VERSION >= NTDDI_VISTA)
4222 #if defined(SINGLE_GROUP_LEGACY_API)
4227 KeQueryActiveProcessorCount(
4228 OUT PKAFFINITY ActiveProcessors OPTIONAL
);
4233 KeQueryMaximumProcessorCount(VOID
);
4234 #endif /* SINGLE_GROUP_LEGACY_API */
4236 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4238 #if (NTDDI_VERSION >= NTDDI_WIN7)
4243 KeQueryActiveProcessorCountEx(
4244 IN USHORT GroupNumber
);
4249 KeQueryMaximumProcessorCountEx(
4250 IN USHORT GroupNumber
);
4255 KeQueryActiveGroupCount(VOID
);
4260 KeQueryMaximumGroupCount(VOID
);
4265 KeQueryGroupAffinity(
4266 IN USHORT GroupNumber
);
4271 KeGetCurrentProcessorNumberEx(
4272 OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL
);
4277 KeQueryNodeActiveAffinity(
4278 IN USHORT NodeNumber
,
4279 OUT PGROUP_AFFINITY Affinity OPTIONAL
,
4280 OUT PUSHORT Count OPTIONAL
);
4285 KeQueryNodeMaximumProcessorCount(
4286 IN USHORT NodeNumber
);
4291 KeQueryHighestNodeNumber(VOID
);
4296 KeGetCurrentNodeNumber(VOID
);
4301 KeQueryLogicalProcessorRelationship(
4302 IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL
,
4303 IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
4304 OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL
,
4305 IN OUT PULONG Length
);
4310 KeSetHardwareCounterConfiguration(
4311 IN PHARDWARE_COUNTER CounterArray
,
4317 KeQueryHardwareCounterConfiguration(
4318 OUT PHARDWARE_COUNTER CounterArray
,
4319 IN ULONG MaximumCount
,
4321 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4323 /******************************************************************************
4324 * Memory manager Functions *
4325 ******************************************************************************/
4327 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4330 PPHYSICAL_MEMORY_RANGE
4332 MmGetPhysicalMemoryRanges(VOID
);
4337 MmGetPhysicalAddress(
4338 IN PVOID BaseAddress
);
4343 MmIsNonPagedSystemAddressValid(
4344 IN PVOID VirtualAddress
);
4349 MmAllocateNonCachedMemory(
4350 IN SIZE_T NumberOfBytes
);
4355 MmFreeNonCachedMemory(
4356 IN PVOID BaseAddress
,
4357 IN SIZE_T NumberOfBytes
);
4362 MmGetVirtualForPhysical(
4363 IN PHYSICAL_ADDRESS PhysicalAddress
);
4368 MmMapUserAddressesToPage(
4369 IN PVOID BaseAddress
,
4370 IN SIZE_T NumberOfBytes
,
4371 IN PVOID PageAddress
);
4377 IN PHYSICAL_ADDRESS PhysicalAddress
,
4378 IN SIZE_T NumberOfBytes
,
4379 IN MEMORY_CACHING_TYPE CacheType
);
4384 MmMapViewInSessionSpace(
4386 OUT PVOID
*MappedBase
,
4387 IN OUT PSIZE_T ViewSize
);
4392 MmMapViewInSystemSpace(
4394 OUT PVOID
*MappedBase
,
4395 IN OUT PSIZE_T ViewSize
);
4401 IN PVOID VirtualAddress
);
4406 MmIsThisAnNtAsSystem(VOID
);
4411 MmLockPagableSectionByHandle(
4412 IN PVOID ImageSectionHandle
);
4417 MmUnmapViewInSessionSpace(
4418 IN PVOID MappedBase
);
4423 MmUnmapViewInSystemSpace(
4424 IN PVOID MappedBase
);
4429 MmUnsecureVirtualMemory(
4430 IN HANDLE SecureHandle
);
4435 MmRemovePhysicalMemory(
4436 IN PPHYSICAL_ADDRESS StartAddress
,
4437 IN OUT PLARGE_INTEGER NumberOfBytes
);
4442 MmSecureVirtualMemory(
4445 IN ULONG ProbeMode
);
4450 MmUnmapVideoDisplay(
4451 IN PVOID BaseAddress
,
4452 IN SIZE_T NumberOfBytes
);
4457 MmAddPhysicalMemory(
4458 IN PPHYSICAL_ADDRESS StartAddress
,
4459 IN OUT PLARGE_INTEGER NumberOfBytes
);
4464 MmAllocateContiguousMemory(
4465 IN SIZE_T NumberOfBytes
,
4466 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
4471 MmAllocateContiguousMemorySpecifyCache(
4472 IN SIZE_T NumberOfBytes
,
4473 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
4474 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
4475 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
4476 IN MEMORY_CACHING_TYPE CacheType
);
4481 MmAllocateContiguousMemorySpecifyCacheNode(
4482 IN SIZE_T NumberOfBytes
,
4483 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
4484 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
4485 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
4486 IN MEMORY_CACHING_TYPE CacheType
,
4487 IN NODE_REQUIREMENT PreferredNode
);
4492 MmFreeContiguousMemory(
4493 IN PVOID BaseAddress
);
4498 MmFreeContiguousMemorySpecifyCache(
4499 IN PVOID BaseAddress
,
4500 IN SIZE_T NumberOfBytes
,
4501 IN MEMORY_CACHING_TYPE CacheType
);
4503 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4507 #if (NTDDI_VERSION >= NTDDI_WS03)
4512 MmCreateMirror(VOID
);
4513 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
4515 #if (NTDDI_VERSION >= NTDDI_VISTA)
4518 MmRotatePhysicalView(
4519 IN PVOID VirtualAddress
,
4520 IN OUT PSIZE_T NumberOfBytes
,
4521 IN PMDLX NewMdl OPTIONAL
,
4522 IN MM_ROTATE_DIRECTION Direction
,
4523 IN PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction
,
4524 IN PVOID Context OPTIONAL
);
4525 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4527 /******************************************************************************
4528 * Process Manager Functions *
4529 ******************************************************************************/
4535 OUT PHANDLE ProcessHandle
,
4536 IN ACCESS_MASK DesiredAccess
,
4537 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4538 IN PCLIENT_ID ClientId OPTIONAL
);
4543 NtQueryInformationProcess(
4544 IN HANDLE ProcessHandle
,
4545 IN PROCESSINFOCLASS ProcessInformationClass
,
4546 OUT PVOID ProcessInformation OPTIONAL
,
4547 IN ULONG ProcessInformationLength
,
4548 OUT PULONG ReturnLength OPTIONAL
);
4550 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4556 PsSetCreateProcessNotifyRoutine(
4557 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
4563 PsSetCreateThreadNotifyRoutine(
4564 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4569 PsSetLoadImageNotifyRoutine(
4570 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4575 PsGetCurrentProcessId(VOID
);
4580 PsGetCurrentThreadId(VOID
);
4586 OUT PULONG MajorVersion OPTIONAL
,
4587 OUT PULONG MinorVersion OPTIONAL
,
4588 OUT PULONG BuildNumber OPTIONAL
,
4589 OUT PUNICODE_STRING CSDVersion OPTIONAL
);
4590 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4591 #if (NTDDI_VERSION >= NTDDI_WINXP)
4597 IN PEPROCESS Process
);
4603 IN PETHREAD Thread
);
4608 PsRemoveCreateThreadNotifyRoutine(
4609 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4614 PsRemoveLoadImageNotifyRoutine(
4615 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4620 PsGetProcessCreateTimeQuadPart(
4621 IN PEPROCESS Process
);
4622 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4624 #if (NTDDI_VERSION >= NTDDI_WS03)
4628 PsGetThreadProcessId(
4629 IN PETHREAD Thread
);
4630 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
4632 #if (NTDDI_VERSION >= NTDDI_VISTA)
4637 PsSetCurrentThreadPrefetching(
4638 IN BOOLEAN Prefetching
);
4643 PsIsCurrentThreadPrefetching(VOID
);
4645 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4647 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
4651 PsSetCreateProcessNotifyRoutineEx(
4652 IN PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine
,
4654 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
4655 /******************************************************************************
4656 * Runtime Library Functions *
4657 ******************************************************************************/
4660 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4663 #ifndef RTL_USE_AVL_TABLES
4668 RtlInitializeGenericTable(
4669 OUT PRTL_GENERIC_TABLE Table
,
4670 IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
,
4671 IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
,
4672 IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine
,
4673 IN PVOID TableContext OPTIONAL
);
4678 RtlInsertElementGenericTable(
4679 IN PRTL_GENERIC_TABLE Table
,
4681 IN CLONG BufferSize
,
4682 OUT PBOOLEAN NewElement OPTIONAL
);
4687 RtlInsertElementGenericTableFull(
4688 IN PRTL_GENERIC_TABLE Table
,
4690 IN CLONG BufferSize
,
4691 OUT PBOOLEAN NewElement OPTIONAL
,
4692 IN PVOID NodeOrParent
,
4693 IN TABLE_SEARCH_RESULT SearchResult
);
4698 RtlDeleteElementGenericTable(
4699 IN PRTL_GENERIC_TABLE Table
,
4705 RtlLookupElementGenericTable(
4706 IN PRTL_GENERIC_TABLE Table
,
4712 RtlLookupElementGenericTableFull(
4713 IN PRTL_GENERIC_TABLE Table
,
4715 OUT PVOID
*NodeOrParent
,
4716 OUT TABLE_SEARCH_RESULT
*SearchResult
);
4721 RtlEnumerateGenericTable(
4722 IN PRTL_GENERIC_TABLE Table
,
4723 IN BOOLEAN Restart
);
4728 RtlEnumerateGenericTableWithoutSplaying(
4729 IN PRTL_GENERIC_TABLE Table
,
4730 IN OUT PVOID
*RestartKey
);
4735 RtlGetElementGenericTable(
4736 IN PRTL_GENERIC_TABLE Table
,
4742 RtlNumberGenericTableElements(
4743 IN PRTL_GENERIC_TABLE Table
);
4748 RtlIsGenericTableEmpty(
4749 IN PRTL_GENERIC_TABLE Table
);
4751 #endif /* !RTL_USE_AVL_TABLES */
4753 #define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT 8
4759 IN OUT PRTL_SPLAY_LINKS Links
);
4765 IN PRTL_SPLAY_LINKS Links
);
4771 IN PRTL_SPLAY_LINKS Links
,
4772 IN OUT PRTL_SPLAY_LINKS
*Root
);
4777 RtlSubtreeSuccessor(
4778 IN PRTL_SPLAY_LINKS Links
);
4783 RtlSubtreePredecessor(
4784 IN PRTL_SPLAY_LINKS Links
);
4790 IN PRTL_SPLAY_LINKS Links
);
4796 IN PRTL_SPLAY_LINKS Links
);
4801 RtlPrefixUnicodeString(
4802 IN PCUNICODE_STRING String1
,
4803 IN PCUNICODE_STRING String2
,
4804 IN BOOLEAN CaseInSensitive
);
4810 IN OUT PSTRING DestinationString
,
4811 IN
const PSTRING SourceString
);
4816 RtlUpcaseUnicodeString(
4817 IN OUT PUNICODE_STRING DestinationString
,
4818 IN PCUNICODE_STRING SourceString
,
4819 IN BOOLEAN AllocateDestinationString
);
4825 IN OUT PACCESS_MASK AccessMask
,
4826 IN PGENERIC_MAPPING GenericMapping
);
4831 RtlVolumeDeviceToDosName(
4832 IN PVOID VolumeDeviceObject
,
4833 OUT PUNICODE_STRING DosName
);
4839 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
4844 RtlVerifyVersionInfo(
4845 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
4847 IN ULONGLONG ConditionMask
);
4853 IN
const PSTRING String1
,
4854 IN
const PSTRING String2
,
4855 IN BOOLEAN CaseInSensitive
);
4861 OUT PSTRING DestinationString
,
4862 IN
const PSTRING SourceString OPTIONAL
);
4868 IN
const PSTRING String1
,
4869 IN
const PSTRING String2
,
4870 IN BOOLEAN CaseInSensitive
);
4877 IN ULONG Base OPTIONAL
,
4895 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4898 #if (NTDDI_VERSION >= NTDDI_WINXP)
4905 RtlInitializeGenericTableAvl(
4906 OUT PRTL_AVL_TABLE Table
,
4907 IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine
,
4908 IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
,
4909 IN PRTL_AVL_FREE_ROUTINE FreeRoutine
,
4910 IN PVOID TableContext OPTIONAL
);
4915 RtlInsertElementGenericTableAvl(
4916 IN PRTL_AVL_TABLE Table
,
4918 IN CLONG BufferSize
,
4919 OUT PBOOLEAN NewElement OPTIONAL
);
4924 RtlInsertElementGenericTableFullAvl(
4925 IN PRTL_AVL_TABLE Table
,
4927 IN CLONG BufferSize
,
4928 OUT PBOOLEAN NewElement OPTIONAL
,
4929 IN PVOID NodeOrParent
,
4930 IN TABLE_SEARCH_RESULT SearchResult
);
4935 RtlDeleteElementGenericTableAvl(
4936 IN PRTL_AVL_TABLE Table
,
4942 RtlLookupElementGenericTableAvl(
4943 IN PRTL_AVL_TABLE Table
,
4949 RtlLookupElementGenericTableFullAvl(
4950 IN PRTL_AVL_TABLE Table
,
4952 OUT PVOID
*NodeOrParent
,
4953 OUT TABLE_SEARCH_RESULT
*SearchResult
);
4958 RtlEnumerateGenericTableAvl(
4959 IN PRTL_AVL_TABLE Table
,
4960 IN BOOLEAN Restart
);
4965 RtlEnumerateGenericTableWithoutSplayingAvl(
4966 IN PRTL_AVL_TABLE Table
,
4967 IN OUT PVOID
*RestartKey
);
4972 RtlLookupFirstMatchingElementGenericTableAvl(
4973 IN PRTL_AVL_TABLE Table
,
4975 OUT PVOID
*RestartKey
);
4980 RtlEnumerateGenericTableLikeADirectory(
4981 IN PRTL_AVL_TABLE Table
,
4982 IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL
,
4983 IN PVOID MatchData OPTIONAL
,
4985 IN OUT PVOID
*RestartKey
,
4986 IN OUT PULONG DeleteCount
,
4992 RtlGetElementGenericTableAvl(
4993 IN PRTL_AVL_TABLE Table
,
4999 RtlNumberGenericTableElementsAvl(
5000 IN PRTL_AVL_TABLE Table
);
5005 RtlIsGenericTableEmptyAvl(
5006 IN PRTL_AVL_TABLE Table
);
5009 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5012 #if (NTDDI_VERSION >= NTDDI_VISTA)
5018 RtlRunOnceInitialize(
5019 OUT PRTL_RUN_ONCE RunOnce
);
5024 RtlRunOnceExecuteOnce(
5025 IN OUT PRTL_RUN_ONCE RunOnce
,
5026 IN PRTL_RUN_ONCE_INIT_FN InitFn
,
5027 IN OUT PVOID Parameter OPTIONAL
,
5028 OUT PVOID
*Context OPTIONAL
);
5033 RtlRunOnceBeginInitialize(
5034 IN OUT PRTL_RUN_ONCE RunOnce
,
5036 OUT PVOID
*Context OPTIONAL
);
5042 IN OUT PRTL_RUN_ONCE RunOnce
,
5044 IN PVOID Context OPTIONAL
);
5050 IN ULONG OSMajorVersion
,
5051 IN ULONG OSMinorVersion
,
5052 IN ULONG SpMajorVersion
,
5053 IN ULONG SpMinorVersion
,
5054 OUT PULONG ReturnedProductType
);
5057 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
5059 #if (NTDDI_VERSION >= NTDDI_WIN7)
5066 IN OUT PRTL_DYNAMIC_HASH_TABLE
*HashTable OPTIONAL
,
5074 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
5079 RtlInsertEntryHashTable(
5080 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5081 IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry
,
5082 IN ULONG_PTR Signature
,
5083 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
5088 RtlRemoveEntryHashTable(
5089 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5090 IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry
,
5091 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
5094 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5096 RtlLookupEntryHashTable(
5097 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5098 IN ULONG_PTR Signature
,
5099 OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
5102 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5104 RtlGetNextEntryHashTable(
5105 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5106 IN PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
);
5111 RtlInitEnumerationHashTable(
5112 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5113 OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5116 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5118 RtlEnumerateEntryHashTable(
5119 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5120 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5125 RtlEndEnumerationHashTable(
5126 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5127 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5132 RtlInitWeakEnumerationHashTable(
5133 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5134 OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5137 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5139 RtlWeaklyEnumerateEntryHashTable(
5140 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5141 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5146 RtlEndWeakEnumerationHashTable(
5147 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5148 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5154 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
5159 RtlContractHashTable(
5160 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
5163 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5166 #if defined(_AMD64_) || defined(_IA64_)
5170 //DECLSPEC_DEPRECATED_DDK_WINXP
5174 RtlLargeIntegerDivide(
5175 IN LARGE_INTEGER Dividend
,
5176 IN LARGE_INTEGER Divisor
,
5177 OUT PLARGE_INTEGER Remainder OPTIONAL
)
5180 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
5182 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
5188 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5192 RtlLargeIntegerDivide(
5193 IN LARGE_INTEGER Dividend
,
5194 IN LARGE_INTEGER Divisor
,
5195 OUT PLARGE_INTEGER Remainder OPTIONAL
);
5199 #endif /* defined(_AMD64_) || defined(_IA64_) */
5203 #ifdef RTL_USE_AVL_TABLES
5205 #define RtlInitializeGenericTable RtlInitializeGenericTableAvl
5206 #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
5207 #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
5208 #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
5209 #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
5210 #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
5211 #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
5212 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
5213 #define RtlGetElementGenericTable RtlGetElementGenericTableAvl
5214 #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
5215 #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
5217 #endif /* RTL_USE_AVL_TABLES */
5219 #define RtlInitializeSplayLinks(Links) { \
5220 PRTL_SPLAY_LINKS _SplayLinks; \
5221 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
5222 _SplayLinks->Parent = _SplayLinks; \
5223 _SplayLinks->LeftChild = NULL; \
5224 _SplayLinks->RightChild = NULL; \
5227 #define RtlIsLeftChild(Links) \
5228 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
5230 #define RtlIsRightChild(Links) \
5231 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
5233 #define RtlRightChild(Links) \
5234 ((PRTL_SPLAY_LINKS)(Links))->RightChild
5236 #define RtlIsRoot(Links) \
5237 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
5239 #define RtlLeftChild(Links) \
5240 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
5242 #define RtlParent(Links) \
5243 ((PRTL_SPLAY_LINKS)(Links))->Parent
5245 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
5247 PRTL_SPLAY_LINKS _SplayParent; \
5248 PRTL_SPLAY_LINKS _SplayChild; \
5249 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
5250 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
5251 _SplayParent->LeftChild = _SplayChild; \
5252 _SplayChild->Parent = _SplayParent; \
5255 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
5257 PRTL_SPLAY_LINKS _SplayParent; \
5258 PRTL_SPLAY_LINKS _SplayChild; \
5259 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
5260 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
5261 _SplayParent->RightChild = _SplayChild; \
5262 _SplayChild->Parent = _SplayParent; \
5265 #if !defined(MIDL_PASS)
5270 RtlConvertLongToLuid(
5276 Temp
.QuadPart
= Val
;
5277 Luid
.LowPart
= Temp
.u
.LowPart
;
5278 Luid
.HighPart
= Temp
.u
.HighPart
;
5285 RtlConvertUlongToLuid(
5295 #endif /* !defined(MIDL_PASS) */
5297 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
5298 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
5299 *CallersAddress = (PVOID)_ReturnAddress(); \
5300 *CallersCaller = NULL;
5302 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5306 RtlGetCallersAddress(
5307 OUT PVOID
*CallersAddress
,
5308 OUT PVOID
*CallersCaller
);
5312 #if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
5314 #if (NTDDI_VERSION >= NTDDI_WIN7)
5319 RtlInitHashTableContext(
5320 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
)
5322 Context
->ChainHead
= NULL
;
5323 Context
->PrevLinkage
= NULL
;
5329 RtlInitHashTableContextFromEnumerator(
5330 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
,
5331 IN PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
)
5333 Context
->ChainHead
= Enumerator
->ChainHead
;
5334 Context
->PrevLinkage
= Enumerator
->HashEntry
.Linkage
.Blink
;
5340 RtlReleaseHashTableContext(
5341 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
)
5343 UNREFERENCED_PARAMETER(Context
);
5350 RtlTotalBucketsHashTable(
5351 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
5353 return HashTable
->TableSize
;
5359 RtlNonEmptyBucketsHashTable(
5360 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
5362 return HashTable
->NonEmptyBuckets
;
5368 RtlEmptyBucketsHashTable(
5369 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
5371 return HashTable
->TableSize
- HashTable
->NonEmptyBuckets
;
5377 RtlTotalEntriesHashTable(
5378 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
5380 return HashTable
->NumEntries
;
5386 RtlActiveEnumeratorsHashTable(
5387 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
5389 return HashTable
->NumEnumerators
;
5392 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5394 #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
5396 /******************************************************************************
5397 * Security Manager Functions *
5398 ******************************************************************************/
5400 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5405 SeSinglePrivilegeCheck(
5406 IN LUID PrivilegeValue
,
5407 IN KPROCESSOR_MODE PreviousMode
);
5409 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5412 /******************************************************************************
5414 ******************************************************************************/
5420 ZwAllocateLocallyUniqueId(
5427 IN HANDLE ProcessHandle OPTIONAL
,
5428 IN NTSTATUS ExitStatus
);
5434 OUT PHANDLE ProcessHandle
,
5435 IN ACCESS_MASK DesiredAccess
,
5436 IN POBJECT_ATTRIBUTES ObjectAttributes
,
5437 IN PCLIENT_ID ClientId OPTIONAL
);
5439 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5444 IN HANDLE TimerHandle
,
5445 OUT PBOOLEAN CurrentState OPTIONAL
);
5450 OUT PHANDLE TimerHandle
,
5451 IN ACCESS_MASK DesiredAccess
,
5452 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
5453 IN TIMER_TYPE TimerType
);
5458 OUT PHANDLE TimerHandle
,
5459 IN ACCESS_MASK DesiredAccess
,
5460 IN POBJECT_ATTRIBUTES ObjectAttributes
);
5465 ZwSetInformationThread(
5466 IN HANDLE ThreadHandle
,
5467 IN THREADINFOCLASS ThreadInformationClass
,
5468 IN PVOID ThreadInformation
,
5469 IN ULONG ThreadInformationLength
);
5474 IN HANDLE TimerHandle
,
5475 IN PLARGE_INTEGER DueTime
,
5476 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
5477 IN PVOID TimerContext OPTIONAL
,
5478 IN BOOLEAN ResumeTimer
,
5479 IN LONG Period OPTIONAL
,
5480 OUT PBOOLEAN PreviousState OPTIONAL
);
5486 IN PUNICODE_STRING String
);
5492 IN POWER_INFORMATION_LEVEL PowerInformationLevel
,
5493 IN PVOID InputBuffer OPTIONAL
,
5494 IN ULONG InputBufferLength
,
5495 OUT PVOID OutputBuffer OPTIONAL
,
5496 IN ULONG OutputBufferLength
);
5501 ZwQueryVolumeInformationFile(
5502 IN HANDLE FileHandle
,
5503 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5504 OUT PVOID FsInformation
,
5506 IN FS_INFORMATION_CLASS FsInformationClass
);
5511 ZwDeviceIoControlFile(
5512 IN HANDLE FileHandle
,
5513 IN HANDLE Event OPTIONAL
,
5514 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
5515 IN PVOID ApcContext OPTIONAL
,
5516 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5517 IN ULONG IoControlCode
,
5518 IN PVOID InputBuffer OPTIONAL
,
5519 IN ULONG InputBufferLength
,
5520 OUT PVOID OutputBuffer OPTIONAL
,
5521 IN ULONG OutputBufferLength
);
5523 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5526 #if (NTDDI_VERSION >= NTDDI_WIN7)
5531 IN HANDLE TimerHandle
,
5532 IN TIMER_SET_INFORMATION_CLASS TimerSetInformationClass
,
5533 IN OUT PVOID TimerSetInformation
,
5534 IN ULONG TimerSetInformationLength
);
5535 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5541 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
5542 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
5543 (TypeBitMask), (ComparisonType)))
5545 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5549 VerSetConditionMask(
5550 IN ULONGLONG ConditionMask
,
5552 IN UCHAR Condition
);
5555 typedef struct _KERNEL_USER_TIMES
{
5556 LARGE_INTEGER CreateTime
;
5557 LARGE_INTEGER ExitTime
;
5558 LARGE_INTEGER KernelTime
;
5559 LARGE_INTEGER UserTime
;
5560 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
5562 /* NtXxx Functions */
5564 typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION
{
5565 SystemFirmwareTable_Enumerate
,
5566 SystemFirmwareTable_Get
5567 } SYSTEM_FIRMWARE_TABLE_ACTION
;
5569 typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION
{
5570 ULONG ProviderSignature
;
5571 SYSTEM_FIRMWARE_TABLE_ACTION Action
;
5573 ULONG TableBufferLength
;
5574 UCHAR TableBuffer
[ANYSIZE_ARRAY
];
5575 } SYSTEM_FIRMWARE_TABLE_INFORMATION
, *PSYSTEM_FIRMWARE_TABLE_INFORMATION
;
5579 IN OUT PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo
);
5581 typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER
{
5582 ULONG ProviderSignature
;
5584 PFNFTH FirmwareTableHandler
;
5586 } SYSTEM_FIRMWARE_TABLE_HANDLER
, *PSYSTEM_FIRMWARE_TABLE_HANDLER
;
5589 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
5592 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
5593 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
5594 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
5595 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
5597 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
5598 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
5599 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
5600 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
5601 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
5603 #define SHARED_GLOBAL_FLAGS_ERROR_PORT_V 0x0
5604 #define SHARED_GLOBAL_FLAGS_ERROR_PORT (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V)
5606 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1
5607 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V)
5609 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V 0x2
5610 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V)
5612 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V 0x3
5613 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED \
5614 (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V)
5616 #define SHARED_GLOBAL_FLAGS_SPARE_V 0x4
5617 #define SHARED_GLOBAL_FLAGS_SPARE \
5618 (1UL << SHARED_GLOBAL_FLAGS_SPARE_V)
5620 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V 0x5
5621 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED \
5622 (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V)
5624 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V 0x6
5625 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED \
5626 (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V)
5628 #define EX_INIT_BITS(Flags, Bit) \
5629 *((Flags)) |= (Bit) // Safe to use before concurrently accessible
5631 #define EX_TEST_SET_BIT(Flags, Bit) \
5632 InterlockedBitTestAndSet ((PLONG)(Flags), (Bit))
5634 #define EX_TEST_CLEAR_BIT(Flags, Bit) \
5635 InterlockedBitTestAndReset ((PLONG)(Flags), (Bit))
5637 #define PCCARD_MAP_ERROR 0x01
5638 #define PCCARD_DEVICE_PCI 0x10
5640 #define PCCARD_SCAN_DISABLED 0x01
5641 #define PCCARD_MAP_ZERO 0x02
5642 #define PCCARD_NO_TIMER 0x03
5643 #define PCCARD_NO_PIC 0x04
5644 #define PCCARD_NO_LEGACY_BASE 0x05
5645 #define PCCARD_DUP_LEGACY_BASE 0x06
5646 #define PCCARD_NO_CONTROLLERS 0x07
5648 #define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2))
5650 /* Filesystem runtime library routines */
5652 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5656 FsRtlIsTotalDeviceFailure(
5657 IN NTSTATUS Status
);
5660 /* FIXME : These definitions below doesn't belong to NTDDK */