4 * Windows NT Device Driver Kit
6 * This file is part of the ReactOS DDK package.
10 * Timo Kreuzer (timo.kreuzer@reactos.org)
12 * THIS SOFTWARE IS NOT COPYRIGHTED
14 * This source code is offered for use in the public domain. You may
15 * use, modify or distribute it freely.
17 * This code is distributed in the hope that it will be useful but
18 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
19 * DISCLAIMED. This includes but is not limited to warranties of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
28 #if !defined(_NTHAL_) && !defined(_NTIFS_)
29 #define _NTDDK_INCLUDED_
36 #define _CTYPE_DISABLE_MACROS
49 #include <stdarg.h> // FIXME
50 #include <basetyps.h> // FIXME
66 #endif /* _NTLSA_AUDIT_ */
67 #endif /* _NTLSA_IFS_ */
71 struct _LOADER_PARAMETER_BLOCK
;
73 struct _DRIVE_LAYOUT_INFORMATION_EX
;
74 struct _SET_PARTITION_INFORMATION_EX
;
76 typedef struct _BUS_HANDLER
*PBUS_HANDLER
;
77 typedef struct _DEVICE_HANDLER_OBJECT
*PDEVICE_HANDLER_OBJECT
;
78 #if defined(_NTHAL_INCLUDED_)
79 typedef struct _KAFFINITY_EX
*PKAFFINITY_EX
;
81 typedef struct _PEB
*PPEB
;
85 typedef struct _IMAGE_NT_HEADERS
*PIMAGE_NT_HEADERS32
;
86 typedef struct _IMAGE_NT_HEADERS64
*PIMAGE_NT_HEADERS64
;
89 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS
;
91 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS
;
94 #endif /* _NTIMAGE_ */
96 /******************************************************************************
98 ******************************************************************************/
100 typedef struct _ZONE_SEGMENT_HEADER
{
101 SINGLE_LIST_ENTRY SegmentList
;
103 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
105 typedef struct _ZONE_HEADER
{
106 SINGLE_LIST_ENTRY FreeList
;
107 SINGLE_LIST_ENTRY SegmentList
;
109 ULONG TotalSegmentSize
;
110 } ZONE_HEADER
, *PZONE_HEADER
;
112 #define PROTECTED_POOL 0x80000000
115 /******************************************************************************
116 * I/O Manager Types *
117 ******************************************************************************/
119 /* DEVICE_OBJECT.Flags */
120 #define DO_DEVICE_HAS_NAME 0x00000040
121 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
122 #define DO_LONG_TERM_REQUESTS 0x00000200
123 #define DO_NEVER_LAST_DEVICE 0x00000400
124 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
125 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
126 #define DO_FORCE_NEITHER_IO 0x00080000
127 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
128 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
129 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
130 #define DO_DISALLOW_EXECUTE 0x00800000
134 typedef enum _CONFIGURATION_TYPE
{
137 FloatingPointProcessor
,
147 MultiFunctionAdapter
,
161 FloppyDiskPeripheral
,
174 RealModeIrqRoutingTable
,
175 RealModePCIEnumeration
,
177 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
178 #endif /* !_ARC_DDK_ */
181 ** IRP function codes
184 #define IRP_MN_QUERY_DIRECTORY 0x01
185 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
187 #define IRP_MN_USER_FS_REQUEST 0x00
188 #define IRP_MN_MOUNT_VOLUME 0x01
189 #define IRP_MN_VERIFY_VOLUME 0x02
190 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
191 #define IRP_MN_TRACK_LINK 0x04
192 #define IRP_MN_KERNEL_CALL 0x04
194 #define IRP_MN_LOCK 0x01
195 #define IRP_MN_UNLOCK_SINGLE 0x02
196 #define IRP_MN_UNLOCK_ALL 0x03
197 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
199 #define IRP_MN_FLUSH_AND_PURGE 0x01
201 #define IRP_MN_NORMAL 0x00
202 #define IRP_MN_DPC 0x01
203 #define IRP_MN_MDL 0x02
204 #define IRP_MN_COMPLETE 0x04
205 #define IRP_MN_COMPRESSED 0x08
207 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
208 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
209 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
211 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
213 #define IO_CHECK_CREATE_PARAMETERS 0x0200
214 #define IO_ATTACH_DEVICE 0x0400
215 #define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800
219 (NTAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
221 IN PUNICODE_STRING PathName
,
222 IN INTERFACE_TYPE BusType
,
224 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
225 IN CONFIGURATION_TYPE ControllerType
,
226 IN ULONG ControllerNumber
,
227 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
228 IN CONFIGURATION_TYPE PeripheralType
,
229 IN ULONG PeripheralNumber
,
230 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
232 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
233 IoQueryDeviceIdentifier
= 0,
234 IoQueryDeviceConfigurationData
,
235 IoQueryDeviceComponentInformation
,
237 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
240 (NTAPI
*PDRIVER_REINITIALIZE
)(
241 IN
struct _DRIVER_OBJECT
*DriverObject
,
242 IN PVOID Context OPTIONAL
,
245 typedef struct _CONTROLLER_OBJECT
{
248 PVOID ControllerExtension
;
249 KDEVICE_QUEUE DeviceWaitQueue
;
251 LARGE_INTEGER Spare2
;
252 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
254 #define DRVO_REINIT_REGISTERED 0x00000008
255 #define DRVO_INITIALIZED 0x00000010
256 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
257 #define DRVO_LEGACY_RESOURCES 0x00000040
259 typedef struct _CONFIGURATION_INFORMATION
{
267 BOOLEAN AtDiskPrimaryAddressClaimed
;
268 BOOLEAN AtDiskSecondaryAddressClaimed
;
270 ULONG MediumChangerCount
;
271 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
273 typedef struct _DISK_SIGNATURE
{
274 ULONG PartitionStyle
;
275 _ANONYMOUS_UNION
union {
284 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
286 typedef struct _TXN_PARAMETER_BLOCK
{
289 PVOID TransactionObject
;
290 } TXN_PARAMETER_BLOCK
, *PTXN_PARAMETER_BLOCK
;
292 #define TXF_MINIVERSION_DEFAULT_VIEW (0xFFFE)
294 typedef struct _IO_DRIVER_CREATE_CONTEXT
{
296 struct _ECP_LIST
*ExtraCreateParameter
;
297 PVOID DeviceObjectHint
;
298 PTXN_PARAMETER_BLOCK TxnParameters
;
299 } IO_DRIVER_CREATE_CONTEXT
, *PIO_DRIVER_CREATE_CONTEXT
;
301 typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD
{
305 PINTERFACE_REFERENCE InterfaceReference
;
306 PINTERFACE_DEREFERENCE InterfaceDereference
;
307 PGET_SET_DEVICE_DATA SetBusData
;
308 PGET_SET_DEVICE_DATA GetBusData
;
310 } AGP_TARGET_BUS_INTERFACE_STANDARD
, *PAGP_TARGET_BUS_INTERFACE_STANDARD
;
313 (NTAPI
*PGET_LOCATION_STRING
)(
314 IN OUT PVOID Context OPTIONAL
,
315 OUT PWCHAR
*LocationStrings
);
317 typedef struct _PNP_LOCATION_INTERFACE
{
321 PINTERFACE_REFERENCE InterfaceReference
;
322 PINTERFACE_DEREFERENCE InterfaceDereference
;
323 PGET_LOCATION_STRING GetLocationString
;
324 } PNP_LOCATION_INTERFACE
, *PPNP_LOCATION_INTERFACE
;
326 typedef enum _ARBITER_ACTION
{
327 ArbiterActionTestAllocation
,
328 ArbiterActionRetestAllocation
,
329 ArbiterActionCommitAllocation
,
330 ArbiterActionRollbackAllocation
,
331 ArbiterActionQueryAllocatedResources
,
332 ArbiterActionWriteReservedResources
,
333 ArbiterActionQueryConflict
,
334 ArbiterActionQueryArbitrate
,
335 ArbiterActionAddReserved
,
336 ArbiterActionBootAllocation
337 } ARBITER_ACTION
, *PARBITER_ACTION
;
339 typedef struct _ARBITER_CONFLICT_INFO
{
340 PDEVICE_OBJECT OwningObject
;
343 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
345 typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS
{
346 IN OUT PLIST_ENTRY ArbitrationList
;
347 IN ULONG AllocateFromCount
;
348 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
349 } ARBITER_TEST_ALLOCATION_PARAMETERS
, *PARBITER_TEST_ALLOCATION_PARAMETERS
;
351 typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS
{
352 IN OUT PLIST_ENTRY ArbitrationList
;
353 IN ULONG AllocateFromCount
;
354 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
355 } ARBITER_RETEST_ALLOCATION_PARAMETERS
, *PARBITER_RETEST_ALLOCATION_PARAMETERS
;
357 typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS
{
358 IN OUT PLIST_ENTRY ArbitrationList
;
359 } ARBITER_BOOT_ALLOCATION_PARAMETERS
, *PARBITER_BOOT_ALLOCATION_PARAMETERS
;
361 typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
{
362 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
363 } ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
;
365 typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS
{
366 IN PDEVICE_OBJECT PhysicalDeviceObject
;
367 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
368 OUT PULONG ConflictCount
;
369 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
370 } ARBITER_QUERY_CONFLICT_PARAMETERS
, *PARBITER_QUERY_CONFLICT_PARAMETERS
;
372 typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS
{
373 IN PLIST_ENTRY ArbitrationList
;
374 } ARBITER_QUERY_ARBITRATE_PARAMETERS
, *PARBITER_QUERY_ARBITRATE_PARAMETERS
;
376 typedef struct _ARBITER_ADD_RESERVED_PARAMETERS
{
377 IN PDEVICE_OBJECT ReserveDevice
;
378 } ARBITER_ADD_RESERVED_PARAMETERS
, *PARBITER_ADD_RESERVED_PARAMETERS
;
380 typedef struct _ARBITER_PARAMETERS
{
382 ARBITER_TEST_ALLOCATION_PARAMETERS TestAllocation
;
383 ARBITER_RETEST_ALLOCATION_PARAMETERS RetestAllocation
;
384 ARBITER_BOOT_ALLOCATION_PARAMETERS BootAllocation
;
385 ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS QueryAllocatedResources
;
386 ARBITER_QUERY_CONFLICT_PARAMETERS QueryConflict
;
387 ARBITER_QUERY_ARBITRATE_PARAMETERS QueryArbitrate
;
388 ARBITER_ADD_RESERVED_PARAMETERS AddReserved
;
390 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
392 typedef enum _ARBITER_REQUEST_SOURCE
{
393 ArbiterRequestUndefined
= -1,
394 ArbiterRequestLegacyReported
,
395 ArbiterRequestHalReported
,
396 ArbiterRequestLegacyAssigned
,
397 ArbiterRequestPnpDetected
,
398 ArbiterRequestPnpEnumerated
399 } ARBITER_REQUEST_SOURCE
;
401 typedef enum _ARBITER_RESULT
{
402 ArbiterResultUndefined
= -1,
403 ArbiterResultSuccess
,
404 ArbiterResultExternalConflict
,
405 ArbiterResultNullRequest
408 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
410 typedef struct _ARBITER_LIST_ENTRY
{
411 LIST_ENTRY ListEntry
;
412 ULONG AlternativeCount
;
413 PIO_RESOURCE_DESCRIPTOR Alternatives
;
414 PDEVICE_OBJECT PhysicalDeviceObject
;
415 ARBITER_REQUEST_SOURCE RequestSource
;
418 INTERFACE_TYPE InterfaceType
;
421 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
422 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
423 ARBITER_RESULT Result
;
424 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
427 (NTAPI
*PARBITER_HANDLER
)(
428 IN OUT PVOID Context
,
429 IN ARBITER_ACTION Action
,
430 IN OUT PARBITER_PARAMETERS Parameters
);
432 #define ARBITER_PARTIAL 0x00000001
434 typedef struct _ARBITER_INTERFACE
{
438 PINTERFACE_REFERENCE InterfaceReference
;
439 PINTERFACE_DEREFERENCE InterfaceDereference
;
440 PARBITER_HANDLER ArbiterHandler
;
442 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
444 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
445 TranslateChildToParent
,
446 TranslateParentToChild
447 } RESOURCE_TRANSLATION_DIRECTION
;
450 (NTAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
451 IN OUT PVOID Context OPTIONAL
,
452 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
453 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
454 IN ULONG AlternativesCount OPTIONAL
,
455 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
456 IN PDEVICE_OBJECT PhysicalDeviceObject
,
457 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
460 (NTAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
461 IN OUT PVOID Context OPTIONAL
,
462 IN PIO_RESOURCE_DESCRIPTOR Source
,
463 IN PDEVICE_OBJECT PhysicalDeviceObject
,
464 OUT PULONG TargetCount
,
465 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
467 typedef struct _TRANSLATOR_INTERFACE
{
471 PINTERFACE_REFERENCE InterfaceReference
;
472 PINTERFACE_DEREFERENCE InterfaceDereference
;
473 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
474 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
475 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
477 typedef struct _PCI_AGP_CAPABILITY
{
478 PCI_CAPABILITIES_HEADER Header
;
482 struct _PCI_AGP_STATUS
{
487 ULONG HostTransDisable
:1;
489 ULONG ITA_Coherent
:1;
490 ULONG SideBandAddressing
:1;
491 ULONG CalibrationCycle
:3;
492 ULONG AsyncRequestSize
:3;
496 ULONG RequestQueueDepthMaximum
:8;
498 struct _PCI_AGP_COMMAND
{
501 ULONG FastWriteEnable
:1;
502 ULONG FourGBEnable
:1;
507 ULONG CalibrationCycle
:3;
508 ULONG AsyncReqSize
:3;
510 ULONG RequestQueueDepth
:8;
512 } PCI_AGP_CAPABILITY
, *PPCI_AGP_CAPABILITY
;
514 typedef enum _EXTENDED_AGP_REGISTER
{
522 } EXTENDED_AGP_REGISTER
, *PEXTENDED_AGP_REGISTER
;
524 typedef struct _PCI_AGP_ISOCH_STATUS
{
531 } PCI_AGP_ISOCH_STATUS
, *PPCI_AGP_ISOCH_STATUS
;
533 typedef struct _PCI_AGP_CONTROL
{
539 } PCI_AGP_CONTROL
, *PPCI_AGP_CONTROL
;
541 typedef struct _PCI_AGP_APERTURE_PAGE_SIZE
{
542 USHORT PageSizeMask
:11;
544 USHORT PageSizeSelect
:4;
545 } PCI_AGP_APERTURE_PAGE_SIZE
, *PPCI_AGP_APERTURE_PAGE_SIZE
;
547 typedef struct _PCI_AGP_ISOCH_COMMAND
{
551 } PCI_AGP_ISOCH_COMMAND
, *PPCI_AGP_ISOCH_COMMAND
;
553 typedef struct PCI_AGP_EXTENDED_CAPABILITY
{
554 PCI_AGP_ISOCH_STATUS IsochStatus
;
555 PCI_AGP_CONTROL AgpControl
;
557 PCI_AGP_APERTURE_PAGE_SIZE AperturePageSize
;
560 PCI_AGP_ISOCH_COMMAND IsochCommand
;
561 } PCI_AGP_EXTENDED_CAPABILITY
, *PPCI_AGP_EXTENDED_CAPABILITY
;
563 #define PCI_AGP_RATE_1X 0x1
564 #define PCI_AGP_RATE_2X 0x2
565 #define PCI_AGP_RATE_4X 0x4
567 #define PCIX_MODE_CONVENTIONAL_PCI 0x0
568 #define PCIX_MODE1_66MHZ 0x1
569 #define PCIX_MODE1_100MHZ 0x2
570 #define PCIX_MODE1_133MHZ 0x3
571 #define PCIX_MODE2_266_66MHZ 0x9
572 #define PCIX_MODE2_266_100MHZ 0xA
573 #define PCIX_MODE2_266_133MHZ 0xB
574 #define PCIX_MODE2_533_66MHZ 0xD
575 #define PCIX_MODE2_533_100MHZ 0xE
576 #define PCIX_MODE2_533_133MHZ 0xF
578 #define PCIX_VERSION_MODE1_ONLY 0x0
579 #define PCIX_VERSION_MODE2_ECC 0x1
580 #define PCIX_VERSION_DUAL_MODE_ECC 0x2
582 typedef struct _PCIX_BRIDGE_CAPABILITY
{
583 PCI_CAPABILITIES_HEADER Header
;
587 USHORT Bus133MHzCapable
:1;
588 USHORT SplitCompletionDiscarded
:1;
589 USHORT UnexpectedSplitCompletion
:1;
590 USHORT SplitCompletionOverrun
:1;
591 USHORT SplitRequestDelayed
:1;
592 USHORT BusModeFrequency
:4;
595 USHORT Bus266MHzCapable
:1;
596 USHORT Bus533MHzCapable
:1;
602 ULONG FunctionNumber
:3;
603 ULONG DeviceNumber
:5;
606 ULONG Device133MHzCapable
:1;
607 ULONG SplitCompletionDiscarded
:1;
608 ULONG UnexpectedSplitCompletion
:1;
609 ULONG SplitCompletionOverrun
:1;
610 ULONG SplitRequestDelayed
:1;
613 ULONG Device266MHzCapable
:1;
614 ULONG Device533MHzCapable
:1;
618 USHORT UpstreamSplitTransactionCapacity
;
619 USHORT UpstreamSplitTransactionLimit
;
620 USHORT DownstreamSplitTransactionCapacity
;
621 USHORT DownstreamSplitTransactionLimit
;
624 ULONG SelectSecondaryRegisters
:1;
625 ULONG ErrorPresentInOtherBank
:1;
626 ULONG AdditionalCorrectableError
:1;
627 ULONG AdditionalUncorrectableError
:1;
629 ULONG ErrorCorrected
:1;
631 ULONG ErrorFirstCommand
:4;
632 ULONG ErrorSecondCommand
:4;
633 ULONG ErrorUpperAttributes
:4;
634 ULONG ControlUpdateEnable
:1;
636 ULONG DisableSingleBitCorrection
:1;
641 ULONG EccFirstAddress
;
642 ULONG EccSecondAddress
;
644 } PCIX_BRIDGE_CAPABILITY
, *PPCIX_BRIDGE_CAPABILITY
;
646 typedef struct _PCI_SUBSYSTEM_IDS_CAPABILITY
{
647 PCI_CAPABILITIES_HEADER Header
;
651 } PCI_SUBSYSTEM_IDS_CAPABILITY
, *PPCI_SUBSYSTEM_IDS_CAPABILITY
;
653 #define OSC_FIRMWARE_FAILURE 0x02
654 #define OSC_UNRECOGNIZED_UUID 0x04
655 #define OSC_UNRECOGNIZED_REVISION 0x08
656 #define OSC_CAPABILITIES_MASKED 0x10
658 #define PCI_ROOT_BUS_OSC_METHOD_CAPABILITY_REVISION 0x01
660 typedef struct _PCI_ROOT_BUS_OSC_SUPPORT_FIELD
{
663 ULONG ExtendedConfigOpRegions
:1;
664 ULONG ActiveStatePowerManagement
:1;
665 ULONG ClockPowerManagement
:1;
666 ULONG SegmentGroups
:1;
667 ULONG MessageSignaledInterrupts
:1;
668 ULONG WindowsHardwareErrorArchitecture
:1;
673 } PCI_ROOT_BUS_OSC_SUPPORT_FIELD
, *PPCI_ROOT_BUS_OSC_SUPPORT_FIELD
;
675 typedef struct _PCI_ROOT_BUS_OSC_CONTROL_FIELD
{
678 ULONG ExpressNativeHotPlug
:1;
679 ULONG ShpcNativeHotPlug
:1;
680 ULONG ExpressNativePME
:1;
681 ULONG ExpressAdvancedErrorReporting
:1;
682 ULONG ExpressCapabilityStructure
:1;
687 } PCI_ROOT_BUS_OSC_CONTROL_FIELD
, *PPCI_ROOT_BUS_OSC_CONTROL_FIELD
;
689 typedef enum _PCI_HARDWARE_INTERFACE
{
694 } PCI_HARDWARE_INTERFACE
, *PPCI_HARDWARE_INTERFACE
;
701 typedef struct _PCI_ROOT_BUS_HARDWARE_CAPABILITY
{
702 PCI_HARDWARE_INTERFACE SecondaryInterface
;
704 BOOLEAN BusCapabilitiesFound
;
705 ULONG CurrentSpeedAndMode
;
706 ULONG SupportedSpeedsAndModes
;
707 BOOLEAN DeviceIDMessagingCapable
;
708 PCI_BUS_WIDTH SecondaryBusWidth
;
710 PCI_ROOT_BUS_OSC_SUPPORT_FIELD OscFeatureSupport
;
711 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlRequest
;
712 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlGranted
;
713 } PCI_ROOT_BUS_HARDWARE_CAPABILITY
, *PPCI_ROOT_BUS_HARDWARE_CAPABILITY
;
715 typedef union _PCI_EXPRESS_CAPABILITIES_REGISTER
{
717 USHORT CapabilityVersion
:4;
719 USHORT SlotImplemented
:1;
720 USHORT InterruptMessageNumber
:5;
724 } PCI_EXPRESS_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_CAPABILITIES_REGISTER
;
726 typedef union _PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
{
728 ULONG MaxPayloadSizeSupported
:3;
729 ULONG PhantomFunctionsSupported
:2;
730 ULONG ExtendedTagSupported
:1;
731 ULONG L0sAcceptableLatency
:3;
732 ULONG L1AcceptableLatency
:3;
734 ULONG RoleBasedErrorReporting
:1;
736 ULONG CapturedSlotPowerLimit
:8;
737 ULONG CapturedSlotPowerLimitScale
:2;
741 } PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
;
743 #define PCI_EXPRESS_AER_DEVICE_CONTROL_MASK 0x07;
745 typedef union _PCI_EXPRESS_DEVICE_CONTROL_REGISTER
{
747 USHORT CorrectableErrorEnable
:1;
748 USHORT NonFatalErrorEnable
:1;
749 USHORT FatalErrorEnable
:1;
750 USHORT UnsupportedRequestErrorEnable
:1;
751 USHORT EnableRelaxedOrder
:1;
752 USHORT MaxPayloadSize
:3;
753 USHORT ExtendedTagEnable
:1;
754 USHORT PhantomFunctionsEnable
:1;
755 USHORT AuxPowerEnable
:1;
756 USHORT NoSnoopEnable
:1;
757 USHORT MaxReadRequestSize
:3;
758 USHORT BridgeConfigRetryEnable
:1;
761 } PCI_EXPRESS_DEVICE_CONTROL_REGISTER
, *PPCI_EXPRESS_DEVICE_CONTROL_REGISTER
;
763 #define PCI_EXPRESS_AER_DEVICE_STATUS_MASK 0x0F;
765 typedef union _PCI_EXPRESS_DEVICE_STATUS_REGISTER
{
767 USHORT CorrectableErrorDetected
:1;
768 USHORT NonFatalErrorDetected
:1;
769 USHORT FatalErrorDetected
:1;
770 USHORT UnsupportedRequestDetected
:1;
771 USHORT AuxPowerDetected
:1;
772 USHORT TransactionsPending
:1;
776 } PCI_EXPRESS_DEVICE_STATUS_REGISTER
, *PPCI_EXPRESS_DEVICE_STATUS_REGISTER
;
778 typedef union _PCI_EXPRESS_LINK_CAPABILITIES_REGISTER
{
780 ULONG MaximumLinkSpeed
:4;
781 ULONG MaximumLinkWidth
:6;
782 ULONG ActiveStatePMSupport
:2;
783 ULONG L0sExitLatency
:3;
784 ULONG L1ExitLatency
:3;
785 ULONG ClockPowerManagement
:1;
786 ULONG SurpriseDownErrorReportingCapable
:1;
787 ULONG DataLinkLayerActiveReportingCapable
:1;
792 } PCI_EXPRESS_LINK_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_LINK_CAPABILITIES_REGISTER
;
794 typedef union _PCI_EXPRESS_LINK_CONTROL_REGISTER
{
796 USHORT ActiveStatePMControl
:2;
798 USHORT ReadCompletionBoundary
:1;
799 USHORT LinkDisable
:1;
800 USHORT RetrainLink
:1;
801 USHORT CommonClockConfig
:1;
802 USHORT ExtendedSynch
:1;
803 USHORT EnableClockPowerManagement
:1;
807 } PCI_EXPRESS_LINK_CONTROL_REGISTER
, *PPCI_EXPRESS_LINK_CONTROL_REGISTER
;
809 typedef union _PCI_EXPRESS_LINK_STATUS_REGISTER
{
814 USHORT LinkTraining
:1;
815 USHORT SlotClockConfig
:1;
816 USHORT DataLinkLayerActive
:1;
820 } PCI_EXPRESS_LINK_STATUS_REGISTER
, *PPCI_EXPRESS_LINK_STATUS_REGISTER
;
822 typedef union _PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
{
824 ULONG AttentionButtonPresent
:1;
825 ULONG PowerControllerPresent
:1;
826 ULONG MRLSensorPresent
:1;
827 ULONG AttentionIndicatorPresent
:1;
828 ULONG PowerIndicatorPresent
:1;
829 ULONG HotPlugSurprise
:1;
830 ULONG HotPlugCapable
:1;
831 ULONG SlotPowerLimit
:8;
832 ULONG SlotPowerLimitScale
:2;
833 ULONG ElectromechanicalLockPresent
:1;
834 ULONG NoCommandCompletedSupport
:1;
835 ULONG PhysicalSlotNumber
:13;
838 } PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
;
840 typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER
{
842 USHORT AttentionButtonEnable
:1;
843 USHORT PowerFaultDetectEnable
:1;
844 USHORT MRLSensorEnable
:1;
845 USHORT PresenceDetectEnable
:1;
846 USHORT CommandCompletedEnable
:1;
847 USHORT HotPlugInterruptEnable
:1;
848 USHORT AttentionIndicatorControl
:2;
849 USHORT PowerIndicatorControl
:2;
850 USHORT PowerControllerControl
:1;
851 USHORT ElectromechanicalLockControl
:1;
852 USHORT DataLinkStateChangeEnable
:1;
856 } PCI_EXPRESS_SLOT_CONTROL_REGISTER
, *PPCI_EXPRESS_SLOT_CONTROL_REGISTER
;
858 typedef union _PCI_EXPRESS_SLOT_STATUS_REGISTER
{
860 USHORT AttentionButtonPressed
:1;
861 USHORT PowerFaultDetected
:1;
862 USHORT MRLSensorChanged
:1;
863 USHORT PresenceDetectChanged
:1;
864 USHORT CommandCompleted
:1;
865 USHORT MRLSensorState
:1;
866 USHORT PresenceDetectState
:1;
867 USHORT ElectromechanicalLockEngaged
:1;
868 USHORT DataLinkStateChanged
:1;
872 } PCI_EXPRESS_SLOT_STATUS_REGISTER
, *PPCI_EXPRESS_SLOT_STATUS_REGISTER
;
874 typedef union _PCI_EXPRESS_ROOT_CONTROL_REGISTER
{
876 USHORT CorrectableSerrEnable
:1;
877 USHORT NonFatalSerrEnable
:1;
878 USHORT FatalSerrEnable
:1;
879 USHORT PMEInterruptEnable
:1;
880 USHORT CRSSoftwareVisibilityEnable
:1;
884 } PCI_EXPRESS_ROOT_CONTROL_REGISTER
, *PPCI_EXPRESS_ROOT_CONTROL_REGISTER
;
886 typedef union _PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
{
888 USHORT CRSSoftwareVisibility
:1;
892 } PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
;
894 typedef union _PCI_EXPRESS_ROOT_STATUS_REGISTER
{
896 ULONG PMERequestorId
:16;
902 } PCI_EXPRESS_ROOT_STATUS_REGISTER
, *PPCI_EXPRESS_ROOT_STATUS_REGISTER
;
904 typedef struct _PCI_EXPRESS_CAPABILITY
{
905 PCI_CAPABILITIES_HEADER Header
;
906 PCI_EXPRESS_CAPABILITIES_REGISTER ExpressCapabilities
;
907 PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER DeviceCapabilities
;
908 PCI_EXPRESS_DEVICE_CONTROL_REGISTER DeviceControl
;
909 PCI_EXPRESS_DEVICE_STATUS_REGISTER DeviceStatus
;
910 PCI_EXPRESS_LINK_CAPABILITIES_REGISTER LinkCapabilities
;
911 PCI_EXPRESS_LINK_CONTROL_REGISTER LinkControl
;
912 PCI_EXPRESS_LINK_STATUS_REGISTER LinkStatus
;
913 PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER SlotCapabilities
;
914 PCI_EXPRESS_SLOT_CONTROL_REGISTER SlotControl
;
915 PCI_EXPRESS_SLOT_STATUS_REGISTER SlotStatus
;
916 PCI_EXPRESS_ROOT_CONTROL_REGISTER RootControl
;
917 PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER RootCapabilities
;
918 PCI_EXPRESS_ROOT_STATUS_REGISTER RootStatus
;
919 } PCI_EXPRESS_CAPABILITY
, *PPCI_EXPRESS_CAPABILITY
;
924 } PCI_EXPRESS_MRL_STATE
;
929 } PCI_EXPRESS_CARD_PRESENCE
;
935 } PCI_EXPRESS_INDICATOR_STATE
;
940 } PCI_EXPRESS_POWER_STATE
;
944 L0sAndL1EntrySupport
= 3
945 } PCI_EXPRESS_ASPM_SUPPORT
;
948 L0sAndL1EntryDisabled
,
952 } PCI_EXPRESS_ASPM_CONTROL
;
963 } PCI_EXPRESS_L0s_EXIT_LATENCY
;
974 } PCI_EXPRESS_L1_EXIT_LATENCY
;
977 PciExpressEndpoint
= 0,
978 PciExpressLegacyEndpoint
,
979 PciExpressRootPort
= 4,
980 PciExpressUpstreamSwitchPort
,
981 PciExpressDownstreamSwitchPort
,
982 PciExpressToPciXBridge
,
984 PciExpressRootComplexIntegratedEndpoint
,
985 PciExpressRootComplexEventCollector
986 } PCI_EXPRESS_DEVICE_TYPE
;
989 MaxPayload128Bytes
= 0,
995 } PCI_EXPRESS_MAX_PAYLOAD_SIZE
;
997 typedef union _PCI_EXPRESS_PME_REQUESTOR_ID
{
999 USHORT FunctionNumber
:3;
1000 USHORT DeviceNumber
:5;
1004 } PCI_EXPRESS_PME_REQUESTOR_ID
, *PPCI_EXPRESS_PME_REQUESTOR_ID
;
1008 #ifndef USE_DMA_MACROS
1009 #define USE_DMA_MACROS
1012 #ifndef NO_LEGACY_DRIVERS
1013 #define NO_LEGACY_DRIVERS
1016 #endif /* defined(_WIN64) */
1018 typedef enum _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE
{
1019 ResourceTypeSingle
= 0,
1021 ResourceTypeExtendedCounterConfiguration
,
1022 ResourceTypeOverflow
,
1024 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE
;
1026 typedef struct _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
{
1027 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE Type
;
1031 ULONG ExtendedRegisterAddress
;
1037 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
, *PPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
;
1039 typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST
{
1041 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors
[ANYSIZE_ARRAY
];
1042 } PHYSICAL_COUNTER_RESOURCE_LIST
, *PPHYSICAL_COUNTER_RESOURCE_LIST
;
1045 (NTAPI
*PciPin2Line
)(
1046 IN
struct _BUS_HANDLER
*BusHandler
,
1047 IN
struct _BUS_HANDLER
*RootHandler
,
1048 IN PCI_SLOT_NUMBER SlotNumber
,
1049 IN PPCI_COMMON_CONFIG PciData
);
1052 (NTAPI
*PciLine2Pin
)(
1053 IN
struct _BUS_HANDLER
*BusHandler
,
1054 IN
struct _BUS_HANDLER
*RootHandler
,
1055 IN PCI_SLOT_NUMBER SlotNumber
,
1056 IN PPCI_COMMON_CONFIG PciNewData
,
1057 IN PPCI_COMMON_CONFIG PciOldData
);
1060 (NTAPI
*PciReadWriteConfig
)(
1061 IN
struct _BUS_HANDLER
*BusHandler
,
1062 IN PCI_SLOT_NUMBER Slot
,
1067 #define PCI_DATA_TAG ' ICP'
1068 #define PCI_DATA_VERSION 1
1070 typedef struct _PCIBUSDATA
{
1073 PciReadWriteConfig ReadConfig
;
1074 PciReadWriteConfig WriteConfig
;
1075 PciPin2Line Pin2Line
;
1076 PciLine2Pin Line2Pin
;
1077 PCI_SLOT_NUMBER ParentSlot
;
1079 } PCIBUSDATA
, *PPCIBUSDATA
;
1081 #ifndef _PCIINTRF_X_
1082 #define _PCIINTRF_X_
1085 (NTAPI
*PCI_READ_WRITE_CONFIG
)(
1094 (NTAPI
*PCI_PIN_TO_LINE
)(
1096 IN PPCI_COMMON_CONFIG PciData
);
1099 (NTAPI
*PCI_LINE_TO_PIN
)(
1101 IN PPCI_COMMON_CONFIG PciNewData
,
1102 IN PPCI_COMMON_CONFIG PciOldData
);
1105 (NTAPI
*PCI_ROOT_BUS_CAPABILITY
)(
1107 OUT PPCI_ROOT_BUS_HARDWARE_CAPABILITY HardwareCapability
);
1110 (NTAPI
*PCI_EXPRESS_WAKE_CONTROL
)(
1112 IN BOOLEAN EnableWake
);
1114 typedef struct _PCI_BUS_INTERFACE_STANDARD
{
1118 PINTERFACE_REFERENCE InterfaceReference
;
1119 PINTERFACE_DEREFERENCE InterfaceDereference
;
1120 PCI_READ_WRITE_CONFIG ReadConfig
;
1121 PCI_READ_WRITE_CONFIG WriteConfig
;
1122 PCI_PIN_TO_LINE PinToLine
;
1123 PCI_LINE_TO_PIN LineToPin
;
1124 PCI_ROOT_BUS_CAPABILITY RootBusCapability
;
1125 PCI_EXPRESS_WAKE_CONTROL ExpressWakeControl
;
1126 } PCI_BUS_INTERFACE_STANDARD
, *PPCI_BUS_INTERFACE_STANDARD
;
1128 #define PCI_BUS_INTERFACE_STANDARD_VERSION 1
1130 #endif /* _PCIINTRF_X_ */
1132 #if (NTDDI_VERSION >= NTDDI_WIN7)
1134 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX 0x00004000
1135 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX 0x00008000
1136 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \
1137 (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \
1138 FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX)
1140 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200
1141 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300
1142 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300
1146 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 0x00000200
1147 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 0x00000300
1148 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 0x00000300
1150 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL
1151 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL
1152 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK
1154 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1156 #define FILE_CHARACTERISTICS_PROPAGATED ( FILE_REMOVABLE_MEDIA | \
1157 FILE_READ_ONLY_DEVICE | \
1158 FILE_FLOPPY_DISKETTE | \
1159 FILE_WRITE_ONCE_MEDIA | \
1160 FILE_DEVICE_SECURE_OPEN )
1162 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1163 ULONG AlignmentRequirement
;
1164 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1166 typedef struct _FILE_NAME_INFORMATION
{
1167 ULONG FileNameLength
;
1169 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1172 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1173 ULONG FileAttributes
;
1175 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1177 typedef struct _FILE_DISPOSITION_INFORMATION
{
1179 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1181 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1182 LARGE_INTEGER EndOfFile
;
1183 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1185 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1186 LARGE_INTEGER ValidDataLength
;
1187 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1189 typedef struct _FILE_FS_LABEL_INFORMATION
{
1190 ULONG VolumeLabelLength
;
1191 WCHAR VolumeLabel
[1];
1192 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
1194 typedef struct _FILE_FS_VOLUME_INFORMATION
{
1195 LARGE_INTEGER VolumeCreationTime
;
1196 ULONG VolumeSerialNumber
;
1197 ULONG VolumeLabelLength
;
1198 BOOLEAN SupportsObjects
;
1199 WCHAR VolumeLabel
[1];
1200 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
1202 typedef struct _FILE_FS_SIZE_INFORMATION
{
1203 LARGE_INTEGER TotalAllocationUnits
;
1204 LARGE_INTEGER AvailableAllocationUnits
;
1205 ULONG SectorsPerAllocationUnit
;
1206 ULONG BytesPerSector
;
1207 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
1209 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
{
1210 LARGE_INTEGER TotalAllocationUnits
;
1211 LARGE_INTEGER CallerAvailableAllocationUnits
;
1212 LARGE_INTEGER ActualAvailableAllocationUnits
;
1213 ULONG SectorsPerAllocationUnit
;
1214 ULONG BytesPerSector
;
1215 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
1217 typedef struct _FILE_FS_OBJECTID_INFORMATION
{
1219 UCHAR ExtendedInfo
[48];
1220 } FILE_FS_OBJECTID_INFORMATION
, *PFILE_FS_OBJECTID_INFORMATION
;
1222 typedef union _FILE_SEGMENT_ELEMENT
{
1224 ULONGLONG Alignment
;
1225 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1227 #define IOCTL_AVIO_ALLOCATE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1228 #define IOCTL_AVIO_FREE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1229 #define IOCTL_AVIO_MODIFY_STREAM CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1231 typedef enum _BUS_DATA_TYPE
{
1232 ConfigurationSpaceUndefined
= -1,
1240 PCMCIAConfiguration
,
1243 PNPISAConfiguration
,
1244 SgiInternalConfiguration
,
1246 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
1248 /* Hardware Abstraction Layer Types */
1251 (NTAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
1255 typedef PBUS_HANDLER
1256 (FASTCALL
*pHalHandlerForBus
)(
1257 IN INTERFACE_TYPE InterfaceType
,
1258 IN ULONG BusNumber
);
1261 (FASTCALL
*pHalReferenceBusHandler
)(
1262 IN PBUS_HANDLER BusHandler
);
1264 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
1265 HalInstalledBusInformation
,
1266 HalProfileSourceInformation
,
1267 HalInformationClassUnused1
,
1268 HalPowerInformation
,
1269 HalProcessorSpeedInformation
,
1270 HalCallbackInformation
,
1271 HalMapRegisterInformation
,
1272 HalMcaLogInformation
,
1273 HalFrameBufferCachingInformation
,
1274 HalDisplayBiosInformation
,
1275 HalProcessorFeatureInformation
,
1276 HalNumaTopologyInterface
,
1277 HalErrorInformation
,
1278 HalCmcLogInformation
,
1279 HalCpeLogInformation
,
1280 HalQueryMcaInterface
,
1281 HalQueryAMLIIllegalIOPortAddresses
,
1282 HalQueryMaxHotPlugMemoryAddress
,
1283 HalPartitionIpiInterface
,
1284 HalPlatformInformation
,
1285 HalQueryProfileSourceList
,
1286 HalInitLogInformation
,
1287 HalFrequencyInformation
,
1288 HalProcessorBrandString
,
1289 HalHypervisorInformation
,
1290 HalPlatformTimerInformation
,
1291 HalAcpiAuditInformation
1292 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
1294 typedef enum _HAL_SET_INFORMATION_CLASS
{
1295 HalProfileSourceInterval
,
1296 HalProfileSourceInterruptHandler
,
1297 HalMcaRegisterDriver
,
1298 HalKernelErrorHandler
,
1299 HalCmcRegisterDriver
,
1300 HalCpeRegisterDriver
,
1304 HalGenerateCmcInterrupt
,
1305 HalProfileSourceTimerHandler
,
1307 HalProfileDpgoSourceInterruptHandler
1308 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
1311 (NTAPI
*pHalQuerySystemInformation
)(
1312 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
1313 IN ULONG BufferSize
,
1314 IN OUT PVOID Buffer
,
1315 OUT PULONG ReturnedLength
);
1318 (NTAPI
*pHalSetSystemInformation
)(
1319 IN HAL_SET_INFORMATION_CLASS InformationClass
,
1320 IN ULONG BufferSize
,
1324 (FASTCALL
*pHalExamineMBR
)(
1325 IN PDEVICE_OBJECT DeviceObject
,
1326 IN ULONG SectorSize
,
1327 IN ULONG MBRTypeIdentifier
,
1331 (FASTCALL
*pHalIoReadPartitionTable
)(
1332 IN PDEVICE_OBJECT DeviceObject
,
1333 IN ULONG SectorSize
,
1334 IN BOOLEAN ReturnRecognizedPartitions
,
1335 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
1338 (FASTCALL
*pHalIoSetPartitionInformation
)(
1339 IN PDEVICE_OBJECT DeviceObject
,
1340 IN ULONG SectorSize
,
1341 IN ULONG PartitionNumber
,
1342 IN ULONG PartitionType
);
1345 (FASTCALL
*pHalIoWritePartitionTable
)(
1346 IN PDEVICE_OBJECT DeviceObject
,
1347 IN ULONG SectorSize
,
1348 IN ULONG SectorsPerTrack
,
1349 IN ULONG NumberOfHeads
,
1350 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
1353 (NTAPI
*pHalQueryBusSlots
)(
1354 IN PBUS_HANDLER BusHandler
,
1355 IN ULONG BufferSize
,
1356 OUT PULONG SlotNumbers
,
1357 OUT PULONG ReturnedLength
);
1360 (NTAPI
*pHalInitPnpDriver
)(
1363 typedef struct _PM_DISPATCH_TABLE
{
1367 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
1370 (NTAPI
*pHalInitPowerManagement
)(
1371 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
1372 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
1374 typedef struct _DMA_ADAPTER
*
1375 (NTAPI
*pHalGetDmaAdapter
)(
1377 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
1378 OUT PULONG NumberOfMapRegisters
);
1381 (NTAPI
*pHalGetInterruptTranslator
)(
1382 IN INTERFACE_TYPE ParentInterfaceType
,
1383 IN ULONG ParentBusNumber
,
1384 IN INTERFACE_TYPE BridgeInterfaceType
,
1387 OUT PTRANSLATOR_INTERFACE Translator
,
1388 OUT PULONG BridgeBusNumber
);
1391 (NTAPI
*pHalStartMirroring
)(
1395 (NTAPI
*pHalEndMirroring
)(
1396 IN ULONG PassNumber
);
1399 (NTAPI
*pHalMirrorPhysicalMemory
)(
1400 IN PHYSICAL_ADDRESS PhysicalAddress
,
1401 IN LARGE_INTEGER NumberOfBytes
);
1404 (NTAPI
*pHalMirrorVerify
)(
1405 IN PHYSICAL_ADDRESS PhysicalAddress
,
1406 IN LARGE_INTEGER NumberOfBytes
);
1409 (NTAPI
*pHalTranslateBusAddress
)(
1410 IN INTERFACE_TYPE InterfaceType
,
1412 IN PHYSICAL_ADDRESS BusAddress
,
1413 IN OUT PULONG AddressSpace
,
1414 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
1417 (NTAPI
*pHalAssignSlotResources
)(
1418 IN PUNICODE_STRING RegistryPath
,
1419 IN PUNICODE_STRING DriverClassName OPTIONAL
,
1420 IN PDRIVER_OBJECT DriverObject
,
1421 IN PDEVICE_OBJECT DeviceObject
,
1422 IN INTERFACE_TYPE BusType
,
1424 IN ULONG SlotNumber
,
1425 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
1428 (NTAPI
*pHalHaltSystem
)(
1432 (NTAPI
*pHalResetDisplay
)(
1435 typedef struct _MAP_REGISTER_ENTRY
{
1437 BOOLEAN WriteToDevice
;
1438 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
1441 (NTAPI
*pHalVectorToIDTEntry
)(
1445 (NTAPI
*pHalFindBusAddressTranslation
)(
1446 IN PHYSICAL_ADDRESS BusAddress
,
1447 IN OUT PULONG AddressSpace
,
1448 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
1449 IN OUT PULONG_PTR Context
,
1450 IN BOOLEAN NextBus
);
1453 (NTAPI
*pHalEndOfBoot
)(
1457 (NTAPI
*pHalGetAcpiTable
)(
1459 IN PCSTR OemId OPTIONAL
,
1460 IN PCSTR OemTableId OPTIONAL
);
1464 (*pHalGetErrorCapList
)(
1465 IN OUT PULONG CapsListLength
,
1466 IN OUT PUCHAR ErrorCapList
);
1470 IN ULONG BufferLength
,
1475 (NTAPI
*PCI_ERROR_HANDLER_CALLBACK
)(
1479 (NTAPI
*pHalSetPciErrorHandlerCallback
)(
1480 IN PCI_ERROR_HANDLER_CALLBACK Callback
);
1482 #if 1 /* Not present in WDK 7600 */
1484 (FASTCALL
*pHalIoAssignDriveLetters
)(
1485 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
1486 IN PSTRING NtDeviceName
,
1487 OUT PUCHAR NtSystemPath
,
1488 OUT PSTRING NtSystemPathString
);
1493 pHalQuerySystemInformation HalQuerySystemInformation
;
1494 pHalSetSystemInformation HalSetSystemInformation
;
1495 pHalQueryBusSlots HalQueryBusSlots
;
1497 pHalExamineMBR HalExamineMBR
;
1498 #if 1 /* Not present in WDK 7600 */
1499 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
1501 pHalIoReadPartitionTable HalIoReadPartitionTable
;
1502 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
1503 pHalIoWritePartitionTable HalIoWritePartitionTable
;
1504 pHalHandlerForBus HalReferenceHandlerForBus
;
1505 pHalReferenceBusHandler HalReferenceBusHandler
;
1506 pHalReferenceBusHandler HalDereferenceBusHandler
;
1507 pHalInitPnpDriver HalInitPnpDriver
;
1508 pHalInitPowerManagement HalInitPowerManagement
;
1509 pHalGetDmaAdapter HalGetDmaAdapter
;
1510 pHalGetInterruptTranslator HalGetInterruptTranslator
;
1511 pHalStartMirroring HalStartMirroring
;
1512 pHalEndMirroring HalEndMirroring
;
1513 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
1514 pHalEndOfBoot HalEndOfBoot
;
1515 pHalMirrorVerify HalMirrorVerify
;
1516 pHalGetAcpiTable HalGetCachedAcpiTable
;
1517 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback
;
1519 pHalGetErrorCapList HalGetErrorCapList
;
1520 pHalInjectError HalInjectError
;
1522 } HAL_DISPATCH
, *PHAL_DISPATCH
;
1524 /* GCC/MSVC and WDK compatible declaration */
1525 extern NTKERNELAPI HAL_DISPATCH HalDispatchTable
;
1527 #if defined(_NTOSKRNL_) || defined(_BLDR_)
1528 #define HALDISPATCH (&HalDispatchTable)
1530 /* This is a WDK compatibility definition */
1531 #define HalDispatchTable (&HalDispatchTable)
1532 #define HALDISPATCH HalDispatchTable
1535 #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
1536 #define HalDispatchTableVersion HALDISPATCH->Version
1537 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
1538 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
1539 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
1540 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
1541 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
1542 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
1543 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
1544 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
1545 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
1546 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
1547 #define HalStartMirroring HALDISPATCH->HalStartMirroring
1548 #define HalEndMirroring HALDISPATCH->HalEndMirroring
1549 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
1550 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
1551 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
1552 #define HalGetCachedAcpiTable HALDISPATCH->HalGetCachedAcpiTable
1553 #define HalSetPciErrorHandlerCallback HALDISPATCH->HalSetPciErrorHandlerCallback
1555 #define HalGetErrorCapList HALDISPATCH->HalGetErrorCapList
1556 #define HalInjectError HALDISPATCH->HalInjectError
1559 typedef struct _HAL_BUS_INFORMATION
{
1560 INTERFACE_TYPE BusType
;
1561 BUS_DATA_TYPE ConfigurationType
;
1564 } HAL_BUS_INFORMATION
, *PHAL_BUS_INFORMATION
;
1566 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
{
1567 KPROFILE_SOURCE Source
;
1570 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
1572 typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX
{
1573 KPROFILE_SOURCE Source
;
1576 ULONG_PTR DefInterval
;
1577 ULONG_PTR MaxInterval
;
1578 ULONG_PTR MinInterval
;
1579 } HAL_PROFILE_SOURCE_INFORMATION_EX
, *PHAL_PROFILE_SOURCE_INFORMATION_EX
;
1581 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
{
1582 KPROFILE_SOURCE Source
;
1584 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
1586 typedef struct _HAL_PROFILE_SOURCE_LIST
{
1587 KPROFILE_SOURCE Source
;
1589 } HAL_PROFILE_SOURCE_LIST
, *PHAL_PROFILE_SOURCE_LIST
;
1591 typedef enum _HAL_DISPLAY_BIOS_INFORMATION
{
1592 HalDisplayInt10Bios
,
1593 HalDisplayEmulatedBios
,
1595 } HAL_DISPLAY_BIOS_INFORMATION
, *PHAL_DISPLAY_BIOS_INFORMATION
;
1597 typedef struct _HAL_POWER_INFORMATION
{
1599 } HAL_POWER_INFORMATION
, *PHAL_POWER_INFORMATION
;
1601 typedef struct _HAL_PROCESSOR_SPEED_INFO
{
1602 ULONG ProcessorSpeed
;
1603 } HAL_PROCESSOR_SPEED_INFORMATION
, *PHAL_PROCESSOR_SPEED_INFORMATION
;
1605 typedef struct _HAL_CALLBACKS
{
1606 PCALLBACK_OBJECT SetSystemInformation
;
1607 PCALLBACK_OBJECT BusCheck
;
1608 } HAL_CALLBACKS
, *PHAL_CALLBACKS
;
1610 typedef struct _HAL_PROCESSOR_FEATURE
{
1611 ULONG UsableFeatureBits
;
1612 } HAL_PROCESSOR_FEATURE
;
1615 (NTAPI
*PHALIOREADWRITEHANDLER
)(
1619 IN OUT PULONG pdwData
);
1621 typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST
{
1624 ULONG OSVersionTrigger
;
1625 PHALIOREADWRITEHANDLER IOHandler
;
1626 } HAL_AMLI_BAD_IO_ADDRESS_LIST
, *PHAL_AMLI_BAD_IO_ADDRESS_LIST
;
1628 #if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
1631 (NTAPI
*PHALMCAINTERFACELOCK
)(
1635 (NTAPI
*PHALMCAINTERFACEUNLOCK
)(
1639 (NTAPI
*PHALMCAINTERFACEREADREGISTER
)(
1640 IN UCHAR BankNumber
,
1641 IN OUT PVOID Exception
);
1643 typedef struct _HAL_MCA_INTERFACE
{
1644 PHALMCAINTERFACELOCK Lock
;
1645 PHALMCAINTERFACEUNLOCK Unlock
;
1646 PHALMCAINTERFACEREADREGISTER ReadRegister
;
1647 } HAL_MCA_INTERFACE
;
1650 ApicDestinationModePhysical
= 1,
1651 ApicDestinationModeLogicalFlat
,
1652 ApicDestinationModeLogicalClustered
,
1653 ApicDestinationModeUnknown
1654 } HAL_APIC_DESTINATION_MODE
, *PHAL_APIC_DESTINATION_MODE
;
1656 #if defined(_AMD64_)
1658 struct _KTRAP_FRAME
;
1659 struct _KEXCEPTION_FRAME
;
1661 typedef ERROR_SEVERITY
1662 (NTAPI
*PDRIVER_EXCPTN_CALLBACK
)(
1664 IN
struct _KTRAP_FRAME
*TrapFrame
,
1665 IN
struct _KEXCEPTION_FRAME
*ExceptionFrame
,
1666 IN PMCA_EXCEPTION Exception
);
1670 #if defined(_X86_) || defined(_IA64_)
1677 (NTAPI
*PDRIVER_EXCPTN_CALLBACK
)(
1679 IN PMCA_EXCEPTION BankLog
);
1682 typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK
;
1684 typedef struct _MCA_DRIVER_INFO
{
1685 PDRIVER_MCA_EXCEPTION_CALLBACK ExceptionCallback
;
1686 PKDEFERRED_ROUTINE DpcCallback
;
1687 PVOID DeviceContext
;
1688 } MCA_DRIVER_INFO
, *PMCA_DRIVER_INFO
;
1690 typedef struct _HAL_ERROR_INFO
{
1694 ULONG McaPreviousEventsCount
;
1695 ULONG McaCorrectedEventsCount
;
1696 ULONG McaKernelDeliveryFails
;
1697 ULONG McaDriverDpcQueueFails
;
1700 ULONG CmcPollingInterval
;
1701 ULONG CmcInterruptsCount
;
1702 ULONG CmcKernelDeliveryFails
;
1703 ULONG CmcDriverDpcQueueFails
;
1704 ULONG CmcGetStateFails
;
1705 ULONG CmcClearStateFails
;
1709 ULONG CpePollingInterval
;
1710 ULONG CpeInterruptsCount
;
1711 ULONG CpeKernelDeliveryFails
;
1712 ULONG CpeDriverDpcQueueFails
;
1713 ULONG CpeGetStateFails
;
1714 ULONG CpeClearStateFails
;
1715 ULONG CpeInterruptSources
;
1717 ULONGLONG KernelReserved
[4];
1718 } HAL_ERROR_INFO
, *PHAL_ERROR_INFO
;
1720 #define HAL_MCE_INTERRUPTS_BASED ((ULONG)-1)
1721 #define HAL_MCE_DISABLED ((ULONG)0)
1723 #define HAL_CMC_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
1724 #define HAL_CMC_DISABLED HAL_MCE_DISABLED
1726 #define HAL_CPE_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
1727 #define HAL_CPE_DISABLED HAL_MCE_DISABLED
1729 #define HAL_MCA_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
1730 #define HAL_MCA_DISABLED HAL_MCE_DISABLED
1733 (NTAPI
*PDRIVER_CMC_EXCEPTION_CALLBACK
)(
1735 IN PCMC_EXCEPTION CmcLog
);
1738 (NTAPI
*PDRIVER_CPE_EXCEPTION_CALLBACK
)(
1740 IN PCPE_EXCEPTION CmcLog
);
1742 typedef struct _CMC_DRIVER_INFO
{
1743 PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback
;
1744 PKDEFERRED_ROUTINE DpcCallback
;
1745 PVOID DeviceContext
;
1746 } CMC_DRIVER_INFO
, *PCMC_DRIVER_INFO
;
1748 typedef struct _CPE_DRIVER_INFO
{
1749 PDRIVER_CPE_EXCEPTION_CALLBACK ExceptionCallback
;
1750 PKDEFERRED_ROUTINE DpcCallback
;
1751 PVOID DeviceContext
;
1752 } CPE_DRIVER_INFO
, *PCPE_DRIVER_INFO
;
1754 #endif // defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
1759 (*HALSENDCROSSPARTITIONIPI
)(
1760 IN USHORT ProcessorID
,
1761 IN UCHAR HardwareVector
);
1764 (*HALRESERVECROSSPARTITIONINTERRUPTVECTOR
)(
1767 IN OUT PGROUP_AFFINITY Affinity
,
1768 OUT PUCHAR HardwareVector
);
1771 (*HALFREECROSSPARTITIONINTERRUPTVECTOR
)(
1773 IN PGROUP_AFFINITY Affinity
);
1775 typedef struct _HAL_CROSS_PARTITION_IPI_INTERFACE
{
1776 HALSENDCROSSPARTITIONIPI HalSendCrossPartitionIpi
;
1777 HALRESERVECROSSPARTITIONINTERRUPTVECTOR HalReserveCrossPartitionInterruptVector
;
1778 HALFREECROSSPARTITIONINTERRUPTVECTOR HalFreeCrossPartitionInterruptVector
;
1779 } HAL_CROSS_PARTITION_IPI_INTERFACE
;
1781 #define HAL_CROSS_PARTITION_IPI_INTERFACE_MINIMUM_SIZE \
1782 FIELD_OFFSET(HAL_CROSS_PARTITION_IPI_INTERFACE, \
1783 HalFreeCrossPartitionInterruptVector)
1785 #endif /* defined(_IA64_) */
1787 typedef struct _HAL_PLATFORM_INFORMATION
{
1788 ULONG PlatformFlags
;
1789 } HAL_PLATFORM_INFORMATION
, *PHAL_PLATFORM_INFORMATION
;
1791 #define HAL_PLATFORM_DISABLE_WRITE_COMBINING 0x01L
1792 #define HAL_PLATFORM_DISABLE_PTCG 0x04L
1793 #define HAL_PLATFORM_DISABLE_UC_MAIN_MEMORY 0x08L
1794 #define HAL_PLATFORM_ENABLE_WRITE_COMBINING_MMIO 0x10L
1795 #define HAL_PLATFORM_ACPI_TABLES_CACHED 0x20L
1797 /******************************************************************************
1799 ******************************************************************************/
1802 (NTAPI
*PEXPAND_STACK_CALLOUT
)(
1803 IN PVOID Parameter OPTIONAL
);
1806 (NTAPI
*PTIMER_APC_ROUTINE
)(
1807 IN PVOID TimerContext
,
1808 IN ULONG TimerLowValue
,
1809 IN LONG TimerHighValue
);
1811 typedef enum _TIMER_SET_INFORMATION_CLASS
{
1812 TimerSetCoalescableTimer
,
1814 } TIMER_SET_INFORMATION_CLASS
;
1816 #if (NTDDI_VERSION >= NTDDI_WIN7)
1817 typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO
{
1818 IN LARGE_INTEGER DueTime
;
1819 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
;
1820 IN PVOID TimerContext OPTIONAL
;
1821 IN
struct _COUNTED_REASON_CONTEXT
*WakeContext OPTIONAL
;
1822 IN ULONG Period OPTIONAL
;
1823 IN ULONG TolerableDelay
;
1824 OUT PBOOLEAN PreviousState OPTIONAL
;
1825 } TIMER_SET_COALESCABLE_TIMER_INFO
, *PTIMER_SET_COALESCABLE_TIMER_INFO
;
1826 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1828 #define XSTATE_LEGACY_FLOATING_POINT 0
1829 #define XSTATE_LEGACY_SSE 1
1830 #define XSTATE_GSSE 2
1832 #define XSTATE_MASK_LEGACY_FLOATING_POINT (1i64 << (XSTATE_LEGACY_FLOATING_POINT))
1833 #define XSTATE_MASK_LEGACY_SSE (1i64 << (XSTATE_LEGACY_SSE))
1834 #define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
1835 #define XSTATE_MASK_GSSE (1i64 << (XSTATE_GSSE))
1837 #define MAXIMUM_XSTATE_FEATURES 64
1839 typedef struct _XSTATE_FEATURE
{
1842 } XSTATE_FEATURE
, *PXSTATE_FEATURE
;
1844 typedef struct _XSTATE_CONFIGURATION
{
1845 ULONG64 EnabledFeatures
;
1847 ULONG OptimizedSave
:1;
1848 XSTATE_FEATURE Features
[MAXIMUM_XSTATE_FEATURES
];
1849 } XSTATE_CONFIGURATION
, *PXSTATE_CONFIGURATION
;
1851 #define MAX_WOW64_SHARED_ENTRIES 16
1853 typedef struct _KUSER_SHARED_DATA
{
1854 ULONG TickCountLowDeprecated
;
1855 ULONG TickCountMultiplier
;
1856 volatile KSYSTEM_TIME InterruptTime
;
1857 volatile KSYSTEM_TIME SystemTime
;
1858 volatile KSYSTEM_TIME TimeZoneBias
;
1859 USHORT ImageNumberLow
;
1860 USHORT ImageNumberHigh
;
1861 WCHAR NtSystemRoot
[260];
1862 ULONG MaxStackTraceDepth
;
1863 ULONG CryptoExponent
;
1865 ULONG LargePageMinimum
;
1867 NT_PRODUCT_TYPE NtProductType
;
1868 BOOLEAN ProductTypeIsValid
;
1869 ULONG NtMajorVersion
;
1870 ULONG NtMinorVersion
;
1871 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
1874 volatile ULONG TimeSlip
;
1875 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
1876 ULONG AltArchitecturePad
[1];
1877 LARGE_INTEGER SystemExpirationDate
;
1879 BOOLEAN KdDebuggerEnabled
;
1880 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
1881 UCHAR NXSupportPolicy
;
1883 volatile ULONG ActiveConsoleId
;
1884 volatile ULONG DismountCount
;
1885 ULONG ComPlusPackage
;
1886 ULONG LastSystemRITEventTickCount
;
1887 ULONG NumberOfPhysicalPages
;
1888 BOOLEAN SafeBootMode
;
1889 #if (NTDDI_VERSION >= NTDDI_WIN7)
1893 UCHAR TscQpcEnabled
:1;
1894 UCHAR TscQpcSpareFlag
:1;
1895 UCHAR TscQpcShift
:6;
1900 #if (NTDDI_VERSION >= NTDDI_VISTA)
1902 ULONG SharedDataFlags
;
1904 ULONG DbgErrorPortPresent
:1;
1905 ULONG DbgElevationEnabled
:1;
1906 ULONG DbgVirtEnabled
:1;
1907 ULONG DbgInstallerDetectEnabled
:1;
1908 ULONG DbgSystemDllRelocated
:1;
1909 ULONG DbgDynProcessorEnabled
:1;
1910 ULONG DbgSEHValidationEnabled
:1;
1917 ULONG DataFlagsPad
[1];
1918 ULONGLONG TestRetInstruction
;
1920 ULONG SystemCallReturn
;
1921 ULONGLONG SystemCallPad
[3];
1922 _ANONYMOUS_UNION
union {
1923 volatile KSYSTEM_TIME TickCount
;
1924 volatile ULONG64 TickCountQuad
;
1925 _ANONYMOUS_STRUCT
struct {
1926 ULONG ReservedTickCountOverlay
[3];
1927 ULONG TickCountPad
[1];
1932 #if (NTDDI_VERSION >= NTDDI_WS03)
1933 LONGLONG ConsoleSessionForegroundProcessId
;
1934 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
1936 #if (NTDDI_VERSION >= NTDDI_VISTA)
1937 #if (NTDDI_VERSION >= NTDDI_WIN7)
1938 USHORT UserModeGlobalLogger
[16];
1940 USHORT UserModeGlobalLogger
[8];
1941 ULONG HeapTracingPid
[2];
1942 ULONG CritSecTracingPid
[2];
1944 ULONG ImageFileExecutionOptions
;
1945 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
1946 ULONG LangGenerationCount
;
1948 /* 4 bytes padding */
1950 ULONGLONG Reserved5
;
1951 volatile ULONG64 InterruptTimeBias
;
1953 #if (NTDDI_VERSION >= NTDDI_WIN7)
1954 volatile ULONG64 TscQpcBias
;
1955 volatile ULONG ActiveProcessorCount
;
1956 volatile USHORT ActiveGroupCount
;
1958 volatile ULONG AitSamplingValue
;
1959 volatile ULONG AppCompatFlag
;
1960 ULONGLONG SystemDllNativeRelocation
;
1961 ULONG SystemDllWowRelocation
;
1963 XSTATE_CONFIGURATION XState
;
1965 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
1967 #if (NTDDI_VERSION >= NTDDI_VISTA)
1968 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
1969 #elif (NTDDI_VERSION >= NTDDI_WINXP)
1970 extern NTSYSAPI CCHAR KeNumberProcessors
;
1972 extern PCCHAR KeNumberProcessors
;
1976 /******************************************************************************
1977 * Kernel Debugger Types *
1978 ******************************************************************************/
1979 typedef struct _DEBUG_DEVICE_ADDRESS
{
1983 PUCHAR TranslatedAddress
;
1985 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
1987 typedef struct _DEBUG_MEMORY_REQUIREMENTS
{
1988 PHYSICAL_ADDRESS Start
;
1989 PHYSICAL_ADDRESS MaxEnd
;
1990 PVOID VirtualAddress
;
1994 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
1996 typedef struct _DEBUG_DEVICE_DESCRIPTOR
{
2005 BOOLEAN Initialized
;
2007 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
2008 DEBUG_MEMORY_REQUIREMENTS Memory
;
2009 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
2012 (NTAPI
*pKdSetupPciDeviceForDebugging
)(
2013 IN PVOID LoaderBlock OPTIONAL
,
2014 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
2017 (NTAPI
*pKdReleasePciDeviceForDebugging
)(
2018 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
2021 (NTAPI
*pKdGetAcpiTablePhase0
)(
2022 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
2023 IN ULONG Signature
);
2026 (NTAPI
*pKdCheckPowerButton
)(
2029 #if (NTDDI_VERSION >= NTDDI_VISTA)
2031 (NTAPI
*pKdMapPhysicalMemory64
)(
2032 IN PHYSICAL_ADDRESS PhysicalAddress
,
2033 IN ULONG NumberPages
,
2034 IN BOOLEAN FlushCurrentTLB
);
2037 (NTAPI
*pKdUnmapVirtualAddress
)(
2038 IN PVOID VirtualAddress
,
2039 IN ULONG NumberPages
,
2040 IN BOOLEAN FlushCurrentTLB
);
2043 (NTAPI
*pKdMapPhysicalMemory64
)(
2044 IN PHYSICAL_ADDRESS PhysicalAddress
,
2045 IN ULONG NumberPages
);
2048 (NTAPI
*pKdUnmapVirtualAddress
)(
2049 IN PVOID VirtualAddress
,
2050 IN ULONG NumberPages
);
2054 (NTAPI
*pKdGetPciDataByOffset
)(
2056 IN ULONG SlotNumber
,
2062 (NTAPI
*pKdSetPciDataByOffset
)(
2064 IN ULONG SlotNumber
,
2068 /******************************************************************************
2069 * Memory manager Types *
2070 ******************************************************************************/
2072 typedef struct _PHYSICAL_MEMORY_RANGE
{
2073 PHYSICAL_ADDRESS BaseAddress
;
2074 LARGE_INTEGER NumberOfBytes
;
2075 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
2078 (NTAPI
*PMM_ROTATE_COPY_CALLBACK_FUNCTION
)(
2079 IN PMDL DestinationMdl
,
2083 typedef enum _MM_ROTATE_DIRECTION
{
2085 MmToFrameBufferNoCopy
,
2087 MmToRegularMemoryNoCopy
,
2088 MmMaximumRotateDirection
2089 } MM_ROTATE_DIRECTION
, *PMM_ROTATE_DIRECTION
;
2092 /******************************************************************************
2093 * Process Manager Types *
2094 ******************************************************************************/
2098 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
2100 IN HANDLE ProcessId
,
2103 typedef struct _PS_CREATE_NOTIFY_INFO
{
2108 IN ULONG FileOpenNameAvailable
:1;
2109 IN ULONG Reserved
:31;
2112 IN HANDLE ParentProcessId
;
2113 IN CLIENT_ID CreatingThreadId
;
2114 IN OUT
struct _FILE_OBJECT
*FileObject
;
2115 IN PCUNICODE_STRING ImageFileName
;
2116 IN PCUNICODE_STRING CommandLine OPTIONAL
;
2117 IN OUT NTSTATUS CreationStatus
;
2118 } PS_CREATE_NOTIFY_INFO
, *PPS_CREATE_NOTIFY_INFO
;
2121 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE_EX
)(
2122 IN OUT PEPROCESS Process
,
2123 IN HANDLE ProcessId
,
2124 IN PPS_CREATE_NOTIFY_INFO CreateInfo OPTIONAL
);
2127 (NTAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
2128 IN HANDLE ProcessId
,
2132 #define IMAGE_ADDRESSING_MODE_32BIT 3
2134 typedef struct _IMAGE_INFO
{
2135 _ANONYMOUS_UNION
union {
2137 _ANONYMOUS_STRUCT
struct {
2138 ULONG ImageAddressingMode
:8;
2139 ULONG SystemModeImage
:1;
2140 ULONG ImageMappedToAllPids
:1;
2141 ULONG ExtendedInfoPresent
:1;
2146 ULONG ImageSelector
;
2148 ULONG ImageSectionNumber
;
2149 } IMAGE_INFO
, *PIMAGE_INFO
;
2151 typedef struct _IMAGE_INFO_EX
{
2153 IMAGE_INFO ImageInfo
;
2154 struct _FILE_OBJECT
*FileObject
;
2155 } IMAGE_INFO_EX
, *PIMAGE_INFO_EX
;
2158 (NTAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
2159 IN PUNICODE_STRING FullImageName
,
2160 IN HANDLE ProcessId
,
2161 IN PIMAGE_INFO ImageInfo
);
2163 #define THREAD_CSWITCH_PMU_DISABLE FALSE
2164 #define THREAD_CSWITCH_PMU_ENABLE TRUE
2166 #define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001
2168 #define PROCESS_HANDLE_TRACING_MAX_STACKS 16
2170 typedef struct _NT_TIB
{
2171 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
2175 _ANONYMOUS_UNION
union {
2179 PVOID ArbitraryUserPointer
;
2180 struct _NT_TIB
*Self
;
2183 typedef struct _NT_TIB32
{
2184 ULONG ExceptionList
;
2188 __GNU_EXTENSION
union {
2192 ULONG ArbitraryUserPointer
;
2194 } NT_TIB32
,*PNT_TIB32
;
2196 typedef struct _NT_TIB64
{
2197 ULONG64 ExceptionList
;
2200 ULONG64 SubSystemTib
;
2201 __GNU_EXTENSION
union {
2205 ULONG64 ArbitraryUserPointer
;
2207 } NT_TIB64
,*PNT_TIB64
;
2209 typedef enum _PROCESSINFOCLASS
{
2210 ProcessBasicInformation
,
2215 ProcessBasePriority
,
2216 ProcessRaisePriority
,
2218 ProcessExceptionPort
,
2220 ProcessLdtInformation
,
2222 ProcessDefaultHardErrorMode
,
2223 ProcessIoPortHandlers
,
2224 ProcessPooledUsageAndLimits
,
2225 ProcessWorkingSetWatch
,
2226 ProcessUserModeIOPL
,
2227 ProcessEnableAlignmentFaultFixup
,
2228 ProcessPriorityClass
,
2229 ProcessWx86Information
,
2231 ProcessAffinityMask
,
2232 ProcessPriorityBoost
,
2234 ProcessSessionInformation
,
2235 ProcessForegroundInformation
,
2236 ProcessWow64Information
,
2237 ProcessImageFileName
,
2238 ProcessLUIDDeviceMapsEnabled
,
2239 ProcessBreakOnTermination
,
2240 ProcessDebugObjectHandle
,
2242 ProcessHandleTracing
,
2244 ProcessExecuteFlags
,
2245 ProcessTlsInformation
,
2247 ProcessImageInformation
,
2249 ProcessPagePriority
,
2250 ProcessInstrumentationCallback
,
2251 ProcessThreadStackAllocation
,
2252 ProcessWorkingSetWatchEx
,
2253 ProcessImageFileNameWin32
,
2254 ProcessImageFileMapping
,
2255 ProcessAffinityUpdateMode
,
2256 ProcessMemoryAllocationMode
,
2257 ProcessGroupInformation
,
2258 ProcessTokenVirtualizationEnabled
,
2259 ProcessConsoleHostProcess
,
2260 ProcessWindowInformation
,
2264 typedef enum _THREADINFOCLASS
{
2265 ThreadBasicInformation
,
2270 ThreadImpersonationToken
,
2271 ThreadDescriptorTableEntry
,
2272 ThreadEnableAlignmentFaultFixup
,
2273 ThreadEventPair_Reusable
,
2274 ThreadQuerySetWin32StartAddress
,
2276 ThreadPerformanceCount
,
2277 ThreadAmILastThread
,
2278 ThreadIdealProcessor
,
2279 ThreadPriorityBoost
,
2280 ThreadSetTlsArrayAddress
,
2282 ThreadHideFromDebugger
,
2283 ThreadBreakOnTermination
,
2284 ThreadSwitchLegacyState
,
2286 ThreadLastSystemCall
,
2290 ThreadActualBasePriority
,
2291 ThreadTebInformation
,
2295 ThreadGroupInformation
,
2296 ThreadUmsInformation
,
2297 ThreadCounterProfiling
,
2298 ThreadIdealProcessorEx
,
2302 typedef struct _PAGE_PRIORITY_INFORMATION
{
2304 } PAGE_PRIORITY_INFORMATION
, *PPAGE_PRIORITY_INFORMATION
;
2306 typedef struct _PROCESS_WS_WATCH_INFORMATION
{
2309 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
2311 typedef struct _PROCESS_BASIC_INFORMATION
{
2312 NTSTATUS ExitStatus
;
2313 struct _PEB
*PebBaseAddress
;
2314 ULONG_PTR AffinityMask
;
2315 KPRIORITY BasePriority
;
2316 ULONG_PTR UniqueProcessId
;
2317 ULONG_PTR InheritedFromUniqueProcessId
;
2318 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
2320 typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION
{
2322 PROCESS_BASIC_INFORMATION BasicInfo
;
2326 ULONG IsProtectedProcess
:1;
2327 ULONG IsWow64Process
:1;
2328 ULONG IsProcessDeleting
:1;
2329 ULONG IsCrossSessionCreate
:1;
2333 } PROCESS_EXTENDED_BASIC_INFORMATION
, *PPROCESS_EXTENDED_BASIC_INFORMATION
;
2335 typedef struct _PROCESS_DEVICEMAP_INFORMATION
{
2336 __GNU_EXTENSION
union {
2338 HANDLE DirectoryHandle
;
2342 UCHAR DriveType
[32];
2345 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
2347 typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX
{
2350 HANDLE DirectoryHandle
;
2354 UCHAR DriveType
[32];
2358 } PROCESS_DEVICEMAP_INFORMATION_EX
, *PPROCESS_DEVICEMAP_INFORMATION_EX
;
2360 typedef struct _PROCESS_SESSION_INFORMATION
{
2362 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
2364 typedef struct _PROCESS_HANDLE_TRACING_ENABLE
{
2366 } PROCESS_HANDLE_TRACING_ENABLE
, *PPROCESS_HANDLE_TRACING_ENABLE
;
2368 typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX
{
2371 } PROCESS_HANDLE_TRACING_ENABLE_EX
, *PPROCESS_HANDLE_TRACING_ENABLE_EX
;
2373 typedef struct _PROCESS_HANDLE_TRACING_ENTRY
{
2377 PVOID Stacks
[PROCESS_HANDLE_TRACING_MAX_STACKS
];
2378 } PROCESS_HANDLE_TRACING_ENTRY
, *PPROCESS_HANDLE_TRACING_ENTRY
;
2380 typedef struct _PROCESS_HANDLE_TRACING_QUERY
{
2383 PROCESS_HANDLE_TRACING_ENTRY HandleTrace
[1];
2384 } PROCESS_HANDLE_TRACING_QUERY
, *PPROCESS_HANDLE_TRACING_QUERY
;
2388 /******************************************************************************
2389 * Runtime Library Types *
2390 ******************************************************************************/
2394 #ifndef _RTL_RUN_ONCE_DEF
2395 #define _RTL_RUN_ONCE_DEF
2397 #define RTL_RUN_ONCE_INIT {0}
2399 #define RTL_RUN_ONCE_CHECK_ONLY 0x00000001UL
2400 #define RTL_RUN_ONCE_ASYNC 0x00000002UL
2401 #define RTL_RUN_ONCE_INIT_FAILED 0x00000004UL
2403 #define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
2405 #define RTL_HASH_ALLOCATED_HEADER 0x00000001
2407 #define RTL_HASH_RESERVED_SIGNATURE 0
2409 /* RtlVerifyVersionInfo() ComparisonType */
2412 #define VER_GREATER 2
2413 #define VER_GREATER_EQUAL 3
2415 #define VER_LESS_EQUAL 5
2419 #define VER_CONDITION_MASK 7
2420 #define VER_NUM_BITS_PER_CONDITION_MASK 3
2422 /* RtlVerifyVersionInfo() TypeMask */
2424 #define VER_MINORVERSION 0x0000001
2425 #define VER_MAJORVERSION 0x0000002
2426 #define VER_BUILDNUMBER 0x0000004
2427 #define VER_PLATFORMID 0x0000008
2428 #define VER_SERVICEPACKMINOR 0x0000010
2429 #define VER_SERVICEPACKMAJOR 0x0000020
2430 #define VER_SUITENAME 0x0000040
2431 #define VER_PRODUCT_TYPE 0x0000080
2433 #define VER_NT_WORKSTATION 0x0000001
2434 #define VER_NT_DOMAIN_CONTROLLER 0x0000002
2435 #define VER_NT_SERVER 0x0000003
2437 #define VER_PLATFORM_WIN32s 0
2438 #define VER_PLATFORM_WIN32_WINDOWS 1
2439 #define VER_PLATFORM_WIN32_NT 2
2441 typedef union _RTL_RUN_ONCE
{
2443 } RTL_RUN_ONCE
, *PRTL_RUN_ONCE
;
2445 typedef ULONG
/* LOGICAL */
2446 (NTAPI
*PRTL_RUN_ONCE_INIT_FN
) (
2447 IN OUT PRTL_RUN_ONCE RunOnce
,
2448 IN OUT PVOID Parameter OPTIONAL
,
2449 IN OUT PVOID
*Context OPTIONAL
);
2451 #endif /* _RTL_RUN_ONCE_DEF */
2453 typedef enum _TABLE_SEARCH_RESULT
{
2458 } TABLE_SEARCH_RESULT
;
2460 typedef enum _RTL_GENERIC_COMPARE_RESULTS
{
2464 } RTL_GENERIC_COMPARE_RESULTS
;
2467 struct _RTL_AVL_TABLE
;
2469 typedef RTL_GENERIC_COMPARE_RESULTS
2470 (NTAPI
*PRTL_AVL_COMPARE_ROUTINE
) (
2471 IN
struct _RTL_AVL_TABLE
*Table
,
2472 IN PVOID FirstStruct
,
2473 IN PVOID SecondStruct
);
2476 (NTAPI
*PRTL_AVL_ALLOCATE_ROUTINE
) (
2477 IN
struct _RTL_AVL_TABLE
*Table
,
2481 (NTAPI
*PRTL_AVL_FREE_ROUTINE
) (
2482 IN
struct _RTL_AVL_TABLE
*Table
,
2486 (NTAPI
*PRTL_AVL_MATCH_FUNCTION
) (
2487 IN
struct _RTL_AVL_TABLE
*Table
,
2489 IN PVOID MatchData
);
2491 typedef struct _RTL_BALANCED_LINKS
{
2492 struct _RTL_BALANCED_LINKS
*Parent
;
2493 struct _RTL_BALANCED_LINKS
*LeftChild
;
2494 struct _RTL_BALANCED_LINKS
*RightChild
;
2497 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
2499 typedef struct _RTL_AVL_TABLE
{
2500 RTL_BALANCED_LINKS BalancedRoot
;
2501 PVOID OrderedPointer
;
2502 ULONG WhichOrderedElement
;
2503 ULONG NumberGenericTableElements
;
2505 PRTL_BALANCED_LINKS RestartKey
;
2507 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
2508 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
2509 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
2511 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
2513 #ifndef RTL_USE_AVL_TABLES
2515 struct _RTL_GENERIC_TABLE
;
2517 typedef RTL_GENERIC_COMPARE_RESULTS
2518 (NTAPI
*PRTL_GENERIC_COMPARE_ROUTINE
) (
2519 IN
struct _RTL_GENERIC_TABLE
*Table
,
2520 IN PVOID FirstStruct
,
2521 IN PVOID SecondStruct
);
2524 (NTAPI
*PRTL_GENERIC_ALLOCATE_ROUTINE
) (
2525 IN
struct _RTL_GENERIC_TABLE
*Table
,
2529 (NTAPI
*PRTL_GENERIC_FREE_ROUTINE
) (
2530 IN
struct _RTL_GENERIC_TABLE
*Table
,
2533 typedef struct _RTL_SPLAY_LINKS
{
2534 struct _RTL_SPLAY_LINKS
*Parent
;
2535 struct _RTL_SPLAY_LINKS
*LeftChild
;
2536 struct _RTL_SPLAY_LINKS
*RightChild
;
2537 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
2539 typedef struct _RTL_GENERIC_TABLE
{
2540 PRTL_SPLAY_LINKS TableRoot
;
2541 LIST_ENTRY InsertOrderList
;
2542 PLIST_ENTRY OrderedPointer
;
2543 ULONG WhichOrderedElement
;
2544 ULONG NumberGenericTableElements
;
2545 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
2546 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
2547 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
2549 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
2551 #endif /* !RTL_USE_AVL_TABLES */
2553 #ifdef RTL_USE_AVL_TABLES
2555 #undef PRTL_GENERIC_COMPARE_ROUTINE
2556 #undef RTL_GENERIC_COMPARE_ROUTINE
2557 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
2558 #undef RTL_GENERIC_ALLOCATE_ROUTINE
2559 #undef PRTL_GENERIC_FREE_ROUTINE
2560 #undef RTL_GENERIC_FREE_ROUTINE
2561 #undef RTL_GENERIC_TABLE
2562 #undef PRTL_GENERIC_TABLE
2564 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
2565 #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
2566 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
2567 #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
2568 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
2569 #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
2570 #define RTL_GENERIC_TABLE RTL_AVL_TABLE
2571 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
2573 #endif /* RTL_USE_AVL_TABLES */
2575 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY
{
2577 ULONG_PTR Signature
;
2578 } RTL_DYNAMIC_HASH_TABLE_ENTRY
, *PRTL_DYNAMIC_HASH_TABLE_ENTRY
;
2580 typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT
{
2581 PLIST_ENTRY ChainHead
;
2582 PLIST_ENTRY PrevLinkage
;
2583 ULONG_PTR Signature
;
2584 } RTL_DYNAMIC_HASH_TABLE_CONTEXT
, *PRTL_DYNAMIC_HASH_TABLE_CONTEXT
;
2586 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR
{
2587 RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry
;
2588 PLIST_ENTRY ChainHead
;
2590 } RTL_DYNAMIC_HASH_TABLE_ENUMERATOR
, *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR
;
2592 typedef struct _RTL_DYNAMIC_HASH_TABLE
{
2599 ULONG NonEmptyBuckets
;
2600 ULONG NumEnumerators
;
2602 } RTL_DYNAMIC_HASH_TABLE
, *PRTL_DYNAMIC_HASH_TABLE
;
2604 typedef struct _OSVERSIONINFOA
{
2605 ULONG dwOSVersionInfoSize
;
2606 ULONG dwMajorVersion
;
2607 ULONG dwMinorVersion
;
2608 ULONG dwBuildNumber
;
2610 CHAR szCSDVersion
[128];
2611 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
2613 typedef struct _OSVERSIONINFOW
{
2614 ULONG dwOSVersionInfoSize
;
2615 ULONG dwMajorVersion
;
2616 ULONG dwMinorVersion
;
2617 ULONG dwBuildNumber
;
2619 WCHAR szCSDVersion
[128];
2620 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
2622 typedef struct _OSVERSIONINFOEXA
{
2623 ULONG dwOSVersionInfoSize
;
2624 ULONG dwMajorVersion
;
2625 ULONG dwMinorVersion
;
2626 ULONG dwBuildNumber
;
2628 CHAR szCSDVersion
[128];
2629 USHORT wServicePackMajor
;
2630 USHORT wServicePackMinor
;
2634 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
2636 typedef struct _OSVERSIONINFOEXW
{
2637 ULONG dwOSVersionInfoSize
;
2638 ULONG dwMajorVersion
;
2639 ULONG dwMinorVersion
;
2640 ULONG dwBuildNumber
;
2642 WCHAR szCSDVersion
[128];
2643 USHORT wServicePackMajor
;
2644 USHORT wServicePackMinor
;
2648 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
2651 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
2652 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
2653 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
2654 typedef OSVERSIONINFOW OSVERSIONINFO
;
2655 typedef POSVERSIONINFOW POSVERSIONINFO
;
2656 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
2658 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
2659 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
2660 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
2661 typedef OSVERSIONINFOA OSVERSIONINFO
;
2662 typedef POSVERSIONINFOA POSVERSIONINFO
;
2663 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
2664 #endif /* UNICODE */
2666 #define HASH_ENTRY_KEY(x) ((x)->Signature)
2668 /******************************************************************************
2669 * Security Manager Types *
2670 ******************************************************************************/
2671 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
2673 typedef enum _WELL_KNOWN_SID_TYPE
{
2677 WinCreatorOwnerSid
= 3,
2678 WinCreatorGroupSid
= 4,
2679 WinCreatorOwnerServerSid
= 5,
2680 WinCreatorGroupServerSid
= 6,
2681 WinNtAuthoritySid
= 7,
2685 WinInteractiveSid
= 11,
2687 WinAnonymousSid
= 13,
2689 WinEnterpriseControllersSid
= 15,
2691 WinAuthenticatedUserSid
= 17,
2692 WinRestrictedCodeSid
= 18,
2693 WinTerminalServerSid
= 19,
2694 WinRemoteLogonIdSid
= 20,
2695 WinLogonIdsSid
= 21,
2696 WinLocalSystemSid
= 22,
2697 WinLocalServiceSid
= 23,
2698 WinNetworkServiceSid
= 24,
2699 WinBuiltinDomainSid
= 25,
2700 WinBuiltinAdministratorsSid
= 26,
2701 WinBuiltinUsersSid
= 27,
2702 WinBuiltinGuestsSid
= 28,
2703 WinBuiltinPowerUsersSid
= 29,
2704 WinBuiltinAccountOperatorsSid
= 30,
2705 WinBuiltinSystemOperatorsSid
= 31,
2706 WinBuiltinPrintOperatorsSid
= 32,
2707 WinBuiltinBackupOperatorsSid
= 33,
2708 WinBuiltinReplicatorSid
= 34,
2709 WinBuiltinPreWindows2000CompatibleAccessSid
= 35,
2710 WinBuiltinRemoteDesktopUsersSid
= 36,
2711 WinBuiltinNetworkConfigurationOperatorsSid
= 37,
2712 WinAccountAdministratorSid
= 38,
2713 WinAccountGuestSid
= 39,
2714 WinAccountKrbtgtSid
= 40,
2715 WinAccountDomainAdminsSid
= 41,
2716 WinAccountDomainUsersSid
= 42,
2717 WinAccountDomainGuestsSid
= 43,
2718 WinAccountComputersSid
= 44,
2719 WinAccountControllersSid
= 45,
2720 WinAccountCertAdminsSid
= 46,
2721 WinAccountSchemaAdminsSid
= 47,
2722 WinAccountEnterpriseAdminsSid
= 48,
2723 WinAccountPolicyAdminsSid
= 49,
2724 WinAccountRasAndIasServersSid
= 50,
2725 WinNTLMAuthenticationSid
= 51,
2726 WinDigestAuthenticationSid
= 52,
2727 WinSChannelAuthenticationSid
= 53,
2728 WinThisOrganizationSid
= 54,
2729 WinOtherOrganizationSid
= 55,
2730 WinBuiltinIncomingForestTrustBuildersSid
= 56,
2731 WinBuiltinPerfMonitoringUsersSid
= 57,
2732 WinBuiltinPerfLoggingUsersSid
= 58,
2733 WinBuiltinAuthorizationAccessSid
= 59,
2734 WinBuiltinTerminalServerLicenseServersSid
= 60,
2735 WinBuiltinDCOMUsersSid
= 61,
2736 WinBuiltinIUsersSid
= 62,
2738 WinBuiltinCryptoOperatorsSid
= 64,
2739 WinUntrustedLabelSid
= 65,
2740 WinLowLabelSid
= 66,
2741 WinMediumLabelSid
= 67,
2742 WinHighLabelSid
= 68,
2743 WinSystemLabelSid
= 69,
2744 WinWriteRestrictedCodeSid
= 70,
2745 WinCreatorOwnerRightsSid
= 71,
2746 WinCacheablePrincipalsGroupSid
= 72,
2747 WinNonCacheablePrincipalsGroupSid
= 73,
2748 WinEnterpriseReadonlyControllersSid
= 74,
2749 WinAccountReadonlyControllersSid
= 75,
2750 WinBuiltinEventLogReadersGroup
= 76,
2751 WinNewEnterpriseReadonlyControllersSid
= 77,
2752 WinBuiltinCertSvcDComAccessGroup
= 78,
2753 WinMediumPlusLabelSid
= 79,
2754 WinLocalLogonSid
= 80,
2755 WinConsoleLogonSid
= 81,
2756 WinThisOrganizationCertificateSid
= 82,
2757 } WELL_KNOWN_SID_TYPE
;
2761 #if defined(_M_IX86)
2763 #define KERNEL_STACK_SIZE 12288
2764 #define KERNEL_LARGE_STACK_SIZE 61440
2765 #define KERNEL_LARGE_STACK_COMMIT 12288
2767 #define SIZE_OF_80387_REGISTERS 80
2769 #if !defined(RC_INVOKED)
2771 #define CONTEXT_i386 0x10000
2772 #define CONTEXT_i486 0x10000
2773 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
2774 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
2775 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
2776 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
2777 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
2778 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
2780 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
2781 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
2782 CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \
2783 CONTEXT_EXTENDED_REGISTERS)
2785 #define CONTEXT_XSTATE (CONTEXT_i386 | 0x00000040L)
2787 #endif /* !defined(RC_INVOKED) */
2789 typedef struct _FLOATING_SAVE_AREA
{
2794 ULONG ErrorSelector
;
2797 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
2799 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
2801 #include "pshpack4.h"
2802 typedef struct _CONTEXT
{
2810 FLOATING_SAVE_AREA FloatSave
;
2827 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
2829 #include "poppack.h"
2831 #define KeGetPcr() PCR
2833 #define PCR_MINOR_VERSION 1
2834 #define PCR_MAJOR_VERSION 1
2836 typedef struct _KPCR
{
2840 struct _EXCEPTION_REGISTRATION_RECORD
*Used_ExceptionList
;
2841 PVOID Used_StackBase
;
2844 ULONG ContextSwitches
;
2845 KAFFINITY SetMemberCopy
;
2849 struct _KPCR
*SelfPcr
;
2850 struct _KPRCB
*Prcb
;
2855 PVOID KdVersionBlock
;
2856 struct _KIDTENTRY
*IDT
;
2857 struct _KGDTENTRY
*GDT
;
2859 USHORT MajorVersion
;
2860 USHORT MinorVersion
;
2861 KAFFINITY SetMember
;
2862 ULONG StallScaleFactor
;
2866 UCHAR SecondLevelCacheAssociativity
;
2868 ULONG KernelReserved
[14];
2869 ULONG SecondLevelCacheSize
;
2870 ULONG HalReserved
[16];
2875 KeGetCurrentProcessorNumber(VOID
)
2877 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
2885 extern NTKERNELAPI PVOID MmHighestUserAddress
;
2886 extern NTKERNELAPI PVOID MmSystemRangeStart
;
2887 extern NTKERNELAPI ULONG MmUserProbeAddress
;
2889 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
2890 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
2891 #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
2892 #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
2893 extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_
;
2895 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
2897 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
2898 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
2899 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
2900 #if !defined (_X86PAE_)
2901 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
2903 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
2906 #elif defined(_M_AMD64)
2908 #define KERNEL_STACK_SIZE 0x6000
2909 #define KERNEL_LARGE_STACK_SIZE 0x12000
2910 #define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE
2912 #define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000
2914 #define EXCEPTION_READ_FAULT 0
2915 #define EXCEPTION_WRITE_FAULT 1
2916 #define EXCEPTION_EXECUTE_FAULT 8
2918 #if !defined(RC_INVOKED)
2920 #define CONTEXT_AMD64 0x100000
2922 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
2923 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
2924 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
2925 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
2926 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
2928 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
2929 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
2931 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
2933 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
2934 #define CONTEXT_SERVICE_ACTIVE 0x10000000
2935 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
2936 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
2938 #endif /* !defined(RC_INVOKED) */
2940 #define INITIAL_MXCSR 0x1f80
2941 #define INITIAL_FPCSR 0x027f
2943 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
2983 XMM_SAVE_AREA32 FltSave
;
3005 M128A VectorRegister
[26];
3006 ULONG64 VectorControl
;
3007 ULONG64 DebugControl
;
3008 ULONG64 LastBranchToRip
;
3009 ULONG64 LastBranchFromRip
;
3010 ULONG64 LastExceptionToRip
;
3011 ULONG64 LastExceptionFromRip
;
3014 typedef struct _KPCR
3016 _ANONYMOUS_UNION
union
3019 _ANONYMOUS_STRUCT
struct
3021 union _KGDTENTRY64
*GdtBase
;
3022 struct _KTSS64
*TssBase
;
3025 struct _KPRCB
*CurrentPrcb
;
3026 PKSPIN_LOCK_QUEUE LockArray
;
3030 union _KIDTENTRY64
*IdtBase
;
3033 UCHAR SecondLevelCacheAssociativity
;
3034 UCHAR ObsoleteNumber
;
3037 USHORT MajorVersion
;
3038 USHORT MinorVersion
;
3039 ULONG StallScaleFactor
;
3041 ULONG KernelReserved
[15];
3042 ULONG SecondLevelCacheSize
;
3043 ULONG HalReserved
[16];
3045 PVOID KdVersionBlock
;
3047 ULONG PcrAlign1
[24];
3054 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
3059 KeGetCurrentProcessorNumber(VOID
)
3061 return (ULONG
)__readgsword(0x184);
3065 #define PTI_SHIFT 12L
3066 #define PDI_SHIFT 21L
3067 #define PPI_SHIFT 30L
3068 #define PXI_SHIFT 39L
3069 #define PTE_PER_PAGE 512
3070 #define PDE_PER_PAGE 512
3071 #define PPE_PER_PAGE 512
3072 #define PXE_PER_PAGE 512
3073 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
3074 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
3075 #define PPI_MASK (PPE_PER_PAGE - 1)
3076 #define PXI_MASK (PXE_PER_PAGE - 1)
3078 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
3079 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
3080 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
3081 #define PDE_BASE 0xFFFFF6FB40000000ULL
3082 #define PTE_BASE 0xFFFFF68000000000ULL
3083 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
3084 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
3085 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
3086 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
3088 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
3089 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
3090 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
3091 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
3092 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
3093 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
3096 #elif defined(_M_IA64)
3098 #elif defined(_M_PPC)
3101 #elif defined(_M_MIPS)
3103 #elif defined(_M_ARM)
3105 #error Unknown Architecture
3108 /******************************************************************************
3109 * Executive Functions *
3110 ******************************************************************************/
3111 static __inline PVOID
3113 IN PZONE_HEADER Zone
)
3115 if (Zone
->FreeList
.Next
)
3116 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
3117 return (PVOID
) Zone
->FreeList
.Next
;
3120 static __inline PVOID
3122 IN PZONE_HEADER Zone
,
3125 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
3126 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
3127 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
3132 * ExInterlockedAllocateFromZone(
3133 * IN PZONE_HEADER Zone,
3134 * IN PKSPIN_LOCK Lock)
3136 #define ExInterlockedAllocateFromZone(Zone, Lock) \
3137 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
3140 * ExInterlockedFreeToZone(
3141 * IN PZONE_HEADER Zone,
3143 * IN PKSPIN_LOCK Lock);
3145 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
3146 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
3151 * IN PZONE_HEADER Zone)
3153 #define ExIsFullZone(Zone) \
3154 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
3157 * ExIsObjectInFirstZoneSegment(
3158 * IN PZONE_HEADER Zone,
3161 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
3162 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
3163 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
3164 (Zone)->TotalSegmentSize)) )
3166 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
3167 #define ExAcquireResourceShared ExAcquireResourceSharedLite
3168 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
3169 #define ExDeleteResource ExDeleteResourceLite
3170 #define ExInitializeResource ExInitializeResourceLite
3171 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
3172 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
3173 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
3174 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
3176 typedef enum _INTERLOCKED_RESULT
{
3177 ResultNegative
= RESULT_NEGATIVE
,
3178 ResultZero
= RESULT_ZERO
,
3179 ResultPositive
= RESULT_POSITIVE
3180 } INTERLOCKED_RESULT
;
3186 Exfi386InterlockedIncrementLong(
3187 IN OUT LONG
volatile *Addend
);
3192 Exfi386InterlockedDecrementLong(
3198 Exfi386InterlockedExchangeUlong(
3205 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3210 IN OUT PZONE_HEADER Zone
,
3211 IN OUT PVOID Segment
,
3212 IN ULONG SegmentSize
);
3218 OUT PZONE_HEADER Zone
,
3220 IN OUT PVOID InitialSegment
,
3221 IN ULONG InitialSegmentSize
);
3226 ExInterlockedExtendZone(
3227 IN OUT PZONE_HEADER Zone
,
3228 IN OUT PVOID Segment
,
3229 IN ULONG SegmentSize
,
3230 IN OUT PKSPIN_LOCK Lock
);
3242 ExRaiseAccessViolation(VOID
);
3248 ExRaiseDatatypeMisalignment(VOID
);
3251 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3254 /* Hardware Abstraction Layer Functions */
3256 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
3262 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3263 //DECLSPEC_DEPRECATED_DDK
3267 IoFreeAdapterChannel(
3268 IN PADAPTER_OBJECT AdapterObject
);
3270 //DECLSPEC_DEPRECATED_DDK
3274 IoFlushAdapterBuffers(
3275 IN PADAPTER_OBJECT AdapterObject
,
3277 IN PVOID MapRegisterBase
,
3280 IN BOOLEAN WriteToDevice
);
3282 //DECLSPEC_DEPRECATED_DDK
3287 IN PADAPTER_OBJECT AdapterObject
,
3288 IN PVOID MapRegisterBase
,
3289 IN ULONG NumberOfMapRegisters
);
3291 //DECLSPEC_DEPRECATED_DDK
3295 HalAllocateCommonBuffer(
3296 IN PADAPTER_OBJECT AdapterObject
,
3298 OUT PPHYSICAL_ADDRESS LogicalAddress
,
3299 IN BOOLEAN CacheEnabled
);
3301 //DECLSPEC_DEPRECATED_DDK
3305 HalFreeCommonBuffer(
3306 IN PADAPTER_OBJECT AdapterObject
,
3308 IN PHYSICAL_ADDRESS LogicalAddress
,
3309 IN PVOID VirtualAddress
,
3310 IN BOOLEAN CacheEnabled
);
3312 //DECLSPEC_DEPRECATED_DDK
3317 IN PADAPTER_OBJECT AdapterObject
);
3322 HalAllocateAdapterChannel(
3323 IN PADAPTER_OBJECT AdapterObject
,
3324 IN PWAIT_CONTEXT_BLOCK Wcb
,
3325 IN ULONG NumberOfMapRegisters
,
3326 IN PDRIVER_CONTROL ExecutionRoutine
);
3328 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3334 #if !defined(NO_LEGACY_DRIVERS)
3336 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3341 HalAssignSlotResources(
3342 IN PUNICODE_STRING RegistryPath
,
3343 IN PUNICODE_STRING DriverClassName
,
3344 IN PDRIVER_OBJECT DriverObject
,
3345 IN PDEVICE_OBJECT DeviceObject
,
3346 IN INTERFACE_TYPE BusType
,
3348 IN ULONG SlotNumber
,
3349 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
3354 HalGetInterruptVector(
3355 IN INTERFACE_TYPE InterfaceType
,
3357 IN ULONG BusInterruptLevel
,
3358 IN ULONG BusInterruptVector
,
3360 OUT PKAFFINITY Affinity
);
3366 IN BUS_DATA_TYPE BusDataType
,
3368 IN ULONG SlotNumber
,
3376 IN BUS_DATA_TYPE BusDataType
,
3378 IN ULONG SlotNumber
,
3386 IN ULONG Frequency
);
3390 #endif /* !defined(NO_LEGACY_DRIVERS) */
3392 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3398 IN PDEVICE_DESCRIPTION DeviceDescription
,
3399 OUT PULONG NumberOfMapRegisters
);
3404 IN PADAPTER_OBJECT DmaAdapter
);
3409 HalAcquireDisplayOwnership(
3410 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
3415 HalGetBusDataByOffset(
3416 IN BUS_DATA_TYPE BusDataType
,
3418 IN ULONG SlotNumber
,
3426 HalSetBusDataByOffset(
3427 IN BUS_DATA_TYPE BusDataType
,
3429 IN ULONG SlotNumber
,
3437 HalTranslateBusAddress(
3438 IN INTERFACE_TYPE InterfaceType
,
3440 IN PHYSICAL_ADDRESS BusAddress
,
3441 IN OUT PULONG AddressSpace
,
3442 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
3447 HalAllocateCrashDumpRegisters(
3448 IN PADAPTER_OBJECT AdapterObject
,
3449 IN OUT PULONG NumberOfMapRegisters
);
3453 HalGetScatterGatherList(
3454 IN PADAPTER_OBJECT DmaAdapter
,
3455 IN PDEVICE_OBJECT DeviceObject
,
3459 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
3461 IN BOOLEAN WriteToDevice
);
3465 HalPutScatterGatherList(
3466 IN PADAPTER_OBJECT DmaAdapter
,
3467 IN PSCATTER_GATHER_LIST ScatterGather
,
3468 IN BOOLEAN WriteToDevice
);
3470 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3472 #if (NTDDI_VERSION >= NTDDI_WINXP)
3477 IN PDEVICE_OBJECT DeviceObject
,
3478 IN ULONG SectorSize
,
3479 IN ULONG MBRTypeIdentifier
,
3483 #if (NTDDI_VERSION >= NTDDI_WIN7)
3487 HalAllocateHardwareCounters(
3488 IN PGROUP_AFFINITY GroupAffinty
,
3489 IN ULONG GroupCount
,
3490 IN PPHYSICAL_COUNTER_RESOURCE_LIST ResourceList
,
3491 OUT PHANDLE CounterSetHandle
);
3495 HalFreeHardwareCounters(
3496 IN HANDLE CounterSetHandle
);
3501 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3505 HalGetDmaAlignmentRequirement(VOID
);
3507 #endif /* defined(_IA64_) */
3509 #if defined(_M_IX86) || defined(_M_AMD64)
3510 #define HalGetDmaAlignmentRequirement() 1L
3513 #if (NTDDI_VERSION >= NTDDI_WIN7)
3515 typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR
*PWHEA_ERROR_SOURCE_DESCRIPTOR
;
3516 typedef struct _WHEA_ERROR_RECORD
*PWHEA_ERROR_RECORD
;
3522 IN PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource
,
3523 IN PWHEA_ERROR_RECORD ErrorRecord
);
3527 typedef struct _WHEA_ERROR_RECORD
*PWHEA_ERROR_RECORD
;
3533 IN PWHEA_ERROR_RECORD ErrorRecord
);
3535 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
3538 /******************************************************************************
3539 * I/O Manager Functions *
3540 ******************************************************************************/
3542 * VOID IoAssignArcName(
3543 * IN PUNICODE_STRING ArcName,
3544 * IN PUNICODE_STRING DeviceName);
3546 #define IoAssignArcName(_ArcName, _DeviceName) ( \
3547 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
3551 * IoDeassignArcName(
3552 * IN PUNICODE_STRING ArcName)
3554 #define IoDeassignArcName IoDeleteSymbolicLink
3559 IoInitializeDriverCreateContext(
3560 PIO_DRIVER_CREATE_CONTEXT DriverContext
)
3562 RtlZeroMemory(DriverContext
, sizeof(IO_DRIVER_CREATE_CONTEXT
));
3563 DriverContext
->Size
= sizeof(IO_DRIVER_CREATE_CONTEXT
);
3568 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3569 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
3573 IoAllocateAdapterChannel(
3574 IN PADAPTER_OBJECT AdapterObject
,
3575 IN PDEVICE_OBJECT DeviceObject
,
3576 IN ULONG NumberOfMapRegisters
,
3577 IN PDRIVER_CONTROL ExecutionRoutine
,
3581 //DECLSPEC_DEPRECATED_DDK
3586 IN PADAPTER_OBJECT AdapterObject
,
3588 IN PVOID MapRegisterBase
,
3590 IN OUT PULONG Length
,
3591 IN BOOLEAN WriteToDevice
);
3596 IoAllocateController(
3597 IN PCONTROLLER_OBJECT ControllerObject
,
3598 IN PDEVICE_OBJECT DeviceObject
,
3599 IN PDRIVER_CONTROL ExecutionRoutine
,
3600 IN PVOID Context OPTIONAL
);
3612 IN PCONTROLLER_OBJECT ControllerObject
);
3618 IN PCONTROLLER_OBJECT ControllerObject
);
3621 PCONFIGURATION_INFORMATION
3623 IoGetConfigurationInformation(VOID
);
3628 IoGetDeviceToVerify(
3629 IN PETHREAD Thread
);
3635 IN PDEVICE_OBJECT DeviceObject
,
3636 IN PFILE_OBJECT FileObject
);
3641 IoGetFileObjectGenericMapping(VOID
);
3646 IoMakeAssociatedIrp(
3648 IN CCHAR StackSize
);
3653 IoQueryDeviceDescription(
3654 IN PINTERFACE_TYPE BusType OPTIONAL
,
3655 IN PULONG BusNumber OPTIONAL
,
3656 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
3657 IN PULONG ControllerNumber OPTIONAL
,
3658 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
3659 IN PULONG PeripheralNumber OPTIONAL
,
3660 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
3661 IN OUT PVOID Context OPTIONAL
);
3668 IN PVPB Vpb OPTIONAL
,
3669 IN PDEVICE_OBJECT RealDeviceObject
);
3674 IoRaiseInformationalHardError(
3675 IN NTSTATUS ErrorStatus
,
3676 IN PUNICODE_STRING String OPTIONAL
,
3677 IN PKTHREAD Thread OPTIONAL
);
3682 IoRegisterBootDriverReinitialization(
3683 IN PDRIVER_OBJECT DriverObject
,
3684 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
3685 IN PVOID Context OPTIONAL
);
3690 IoRegisterDriverReinitialization(
3691 IN PDRIVER_OBJECT DriverObject
,
3692 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
3693 IN PVOID Context OPTIONAL
);
3698 IoAttachDeviceByPointer(
3699 IN PDEVICE_OBJECT SourceDevice
,
3700 IN PDEVICE_OBJECT TargetDevice
);
3705 IoReportDetectedDevice(
3706 IN PDRIVER_OBJECT DriverObject
,
3707 IN INTERFACE_TYPE LegacyBusType
,
3709 IN ULONG SlotNumber
,
3710 IN PCM_RESOURCE_LIST ResourceList OPTIONAL
,
3711 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
3712 IN BOOLEAN ResourceAssigned
,
3713 IN OUT PDEVICE_OBJECT
*DeviceObject OPTIONAL
);
3718 IoReportResourceForDetection(
3719 IN PDRIVER_OBJECT DriverObject
,
3720 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
3721 IN ULONG DriverListSize OPTIONAL
,
3722 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
3723 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
3724 IN ULONG DeviceListSize OPTIONAL
,
3725 OUT PBOOLEAN ConflictDetected
);
3730 IoReportResourceUsage(
3731 IN PUNICODE_STRING DriverClassName OPTIONAL
,
3732 IN PDRIVER_OBJECT DriverObject
,
3733 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
3734 IN ULONG DriverListSize OPTIONAL
,
3735 IN PDEVICE_OBJECT DeviceObject
,
3736 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
3737 IN ULONG DeviceListSize OPTIONAL
,
3738 IN BOOLEAN OverrideConflict
,
3739 OUT PBOOLEAN ConflictDetected
);
3744 IoSetHardErrorOrVerifyDevice(
3746 IN PDEVICE_OBJECT DeviceObject
);
3752 IN PUNICODE_STRING RegistryPath
,
3753 IN PUNICODE_STRING DriverClassName OPTIONAL
,
3754 IN PDRIVER_OBJECT DriverObject
,
3755 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
3756 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL
,
3757 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
3762 IoSetThreadHardErrorMode(
3763 IN BOOLEAN EnableHardErrors
);
3765 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3767 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
3772 IoIsFileOriginRemote(
3773 IN PFILE_OBJECT FileObject
);
3779 IN PFILE_OBJECT FileObject
,
3782 #endif /* (NTDDI_VERSION >= NTDDI_WIN2KSP3) */
3784 #if (NTDDI_VERSION >= NTDDI_WINXP)
3788 IoReadPartitionTable(
3789 IN PDEVICE_OBJECT DeviceObject
,
3790 IN ULONG SectorSize
,
3791 IN BOOLEAN ReturnRecognizedPartitions
,
3792 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
3797 IoSetPartitionInformation(
3798 IN PDEVICE_OBJECT DeviceObject
,
3799 IN ULONG SectorSize
,
3800 IN ULONG PartitionNumber
,
3801 IN ULONG PartitionType
);
3806 IoWritePartitionTable(
3807 IN PDEVICE_OBJECT DeviceObject
,
3808 IN ULONG SectorSize
,
3809 IN ULONG SectorsPerTrack
,
3810 IN ULONG NumberOfHeads
,
3811 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
3817 IN PDEVICE_OBJECT DeviceObject
,
3818 IN
struct _CREATE_DISK
* Disk OPTIONAL
);
3823 IoReadDiskSignature(
3824 IN PDEVICE_OBJECT DeviceObject
,
3825 IN ULONG BytesPerSector
,
3826 OUT PDISK_SIGNATURE Signature
);
3831 IoReadPartitionTableEx(
3832 IN PDEVICE_OBJECT DeviceObject
,
3833 OUT
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
3838 IoSetPartitionInformationEx(
3839 IN PDEVICE_OBJECT DeviceObject
,
3840 IN ULONG PartitionNumber
,
3841 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
3846 IoSetSystemPartition(
3847 IN PUNICODE_STRING VolumeNameString
);
3852 IoVerifyPartitionTable(
3853 IN PDEVICE_OBJECT DeviceObject
,
3854 IN BOOLEAN FixErrors
);
3859 IoVolumeDeviceToDosName(
3860 IN PVOID VolumeDeviceObject
,
3861 OUT PUNICODE_STRING DosName
);
3866 IoWritePartitionTableEx(
3867 IN PDEVICE_OBJECT DeviceObject
,
3868 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*DriveLayout
);
3873 IoCreateFileSpecifyDeviceObjectHint(
3874 OUT PHANDLE FileHandle
,
3875 IN ACCESS_MASK DesiredAccess
,
3876 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3877 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3878 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
3879 IN ULONG FileAttributes
,
3880 IN ULONG ShareAccess
,
3881 IN ULONG Disposition
,
3882 IN ULONG CreateOptions
,
3883 IN PVOID EaBuffer OPTIONAL
,
3885 IN CREATE_FILE_TYPE CreateFileType
,
3886 IN PVOID InternalParameters OPTIONAL
,
3888 IN PVOID DeviceObject OPTIONAL
);
3893 IoAttachDeviceToDeviceStackSafe(
3894 IN PDEVICE_OBJECT SourceDevice
,
3895 IN PDEVICE_OBJECT TargetDevice
,
3896 OUT PDEVICE_OBJECT
*AttachedToDeviceObject
);
3898 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
3901 #if (NTDDI_VERSION >= NTDDI_WS03)
3905 IoGetPagingIoPriority(
3908 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
3910 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
3913 IoTranslateBusAddress(
3914 IN INTERFACE_TYPE InterfaceType
,
3916 IN PHYSICAL_ADDRESS BusAddress
,
3917 IN OUT PULONG AddressSpace
,
3918 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
3921 #if (NTDDI_VERSION >= NTDDI_VISTA)
3925 IoUpdateDiskGeometry(
3926 IN PDEVICE_OBJECT DeviceObject
,
3927 IN
struct _DISK_GEOMETRY_EX
* OldDiskGeometry
,
3928 IN
struct _DISK_GEOMETRY_EX
* NewDiskGeometry
);
3930 PTXN_PARAMETER_BLOCK
3932 IoGetTransactionParameterBlock(
3933 IN PFILE_OBJECT FileObject
);
3939 OUT PHANDLE FileHandle
,
3940 IN ACCESS_MASK DesiredAccess
,
3941 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3942 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3943 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
3944 IN ULONG FileAttributes
,
3945 IN ULONG ShareAccess
,
3946 IN ULONG Disposition
,
3947 IN ULONG CreateOptions
,
3948 IN PVOID EaBuffer OPTIONAL
,
3950 IN CREATE_FILE_TYPE CreateFileType
,
3951 IN PVOID InternalParameters OPTIONAL
,
3953 IN PIO_DRIVER_CREATE_CONTEXT DriverContext OPTIONAL
);
3957 IoSetIrpExtraCreateParameter(
3959 IN
struct _ECP_LIST
*ExtraCreateParameter
);
3963 IoClearIrpExtraCreateParameter(
3968 IoGetIrpExtraCreateParameter(
3970 OUT
struct _ECP_LIST
**ExtraCreateParameter OPTIONAL
);
3974 IoIsFileObjectIgnoringSharing(
3975 IN PFILE_OBJECT FileObject
);
3978 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
3981 #if (NTDDI_VERSION >= NTDDI_WIN7)
3984 IoSetFileObjectIgnoreSharing(
3985 IN PFILE_OBJECT FileObject
);
3988 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
3991 /******************************************************************************
3992 * Kernel Debugger Functions *
3993 ******************************************************************************/
4000 IN ULONG MaximumResponseLength
);
4002 /******************************************************************************
4003 * Kernel Functions *
4004 ******************************************************************************/
4008 KeInvalidateRangeAllCaches(
4009 IN PVOID BaseAddress
,
4013 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4021 IN KDPC_IMPORTANCE Importance
);
4027 IN OUT PRKEVENT Event
,
4028 IN KPRIORITY Increment
,
4034 KeSetBasePriorityThread(
4035 IN OUT PRKTHREAD Thread
,
4041 KeEnterCriticalRegion(VOID
);
4046 KeLeaveCriticalRegion(VOID
);
4053 IN ULONG BugCheckCode
);
4057 #if defined(SINGLE_GROUP_LEGACY_API)
4063 KeSetTargetProcessorDpc(
4070 KeQueryActiveProcessors(VOID
);
4072 #endif /* defined(SINGLE_GROUP_LEGACY_API) */
4075 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4077 #if (NTDDI_VERSION >= NTDDI_WINXP)
4081 KeAreApcsDisabled(VOID
);
4084 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4087 #if (NTDDI_VERSION >= NTDDI_WS03)
4091 KeInvalidateAllCaches(VOID
);
4094 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
4096 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
4100 KeExpandKernelStackAndCallout(
4101 IN PEXPAND_STACK_CALLOUT Callout
,
4102 IN PVOID Parameter OPTIONAL
,
4108 KeEnterGuardedRegion(VOID
);
4113 KeLeaveGuardedRegion(VOID
);
4116 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
4118 #if (NTDDI_VERSION >= NTDDI_VISTA)
4120 #if defined(SINGLE_GROUP_LEGACY_API)
4124 KeQueryActiveProcessorCount(
4125 OUT PKAFFINITY ActiveProcessors OPTIONAL
);
4130 KeQueryMaximumProcessorCount(VOID
);
4134 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4137 #if (NTDDI_VERSION >= NTDDI_WIN7)
4142 KeQueryActiveProcessorCountEx(
4143 IN USHORT GroupNumber
);
4148 KeQueryMaximumProcessorCountEx(
4149 IN USHORT GroupNumber
);
4154 KeQueryActiveGroupCount(VOID
);
4159 KeQueryMaximumGroupCount(VOID
);
4164 KeQueryGroupAffinity(
4165 IN USHORT GroupNumber
);
4170 KeGetCurrentProcessorNumberEx(
4171 OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL
);
4176 KeQueryNodeActiveAffinity(
4177 IN USHORT NodeNumber
,
4178 OUT PGROUP_AFFINITY Affinity OPTIONAL
,
4179 OUT PUSHORT Count OPTIONAL
);
4184 KeQueryNodeMaximumProcessorCount(
4185 IN USHORT NodeNumber
);
4190 KeQueryHighestNodeNumber(VOID
);
4195 KeGetCurrentNodeNumber(VOID
);
4200 KeQueryLogicalProcessorRelationship(
4201 IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL
,
4202 IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
4203 OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL
,
4204 IN OUT PULONG Length
);
4209 KeSetHardwareCounterConfiguration(
4210 IN PHARDWARE_COUNTER CounterArray
,
4216 KeQueryHardwareCounterConfiguration(
4217 OUT PHARDWARE_COUNTER CounterArray
,
4218 IN ULONG MaximumCount
,
4222 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4225 /******************************************************************************
4226 * Memory manager Functions *
4227 ******************************************************************************/
4229 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4231 PPHYSICAL_MEMORY_RANGE
4233 MmGetPhysicalMemoryRanges(VOID
);
4238 MmGetPhysicalAddress(
4239 IN PVOID BaseAddress
);
4244 MmIsNonPagedSystemAddressValid(
4245 IN PVOID VirtualAddress
);
4250 MmAllocateNonCachedMemory(
4251 IN SIZE_T NumberOfBytes
);
4256 MmFreeNonCachedMemory(
4257 IN PVOID BaseAddress
,
4258 IN SIZE_T NumberOfBytes
);
4263 MmGetVirtualForPhysical(
4264 IN PHYSICAL_ADDRESS PhysicalAddress
);
4269 MmMapUserAddressesToPage(
4270 IN PVOID BaseAddress
,
4271 IN SIZE_T NumberOfBytes
,
4272 IN PVOID PageAddress
);
4278 IN PHYSICAL_ADDRESS PhysicalAddress
,
4279 IN SIZE_T NumberOfBytes
,
4280 IN MEMORY_CACHING_TYPE CacheType
);
4285 MmMapViewInSessionSpace(
4287 OUT PVOID
*MappedBase
,
4288 IN OUT PSIZE_T ViewSize
);
4293 MmMapViewInSystemSpace(
4295 OUT PVOID
*MappedBase
,
4296 IN OUT PSIZE_T ViewSize
);
4302 IN PVOID VirtualAddress
);
4307 MmIsThisAnNtAsSystem(VOID
);
4312 MmLockPagableSectionByHandle(
4313 IN PVOID ImageSectionHandle
);
4318 MmUnmapViewInSessionSpace(
4319 IN PVOID MappedBase
);
4324 MmUnmapViewInSystemSpace(
4325 IN PVOID MappedBase
);
4330 MmUnsecureVirtualMemory(
4331 IN HANDLE SecureHandle
);
4336 MmRemovePhysicalMemory(
4337 IN PPHYSICAL_ADDRESS StartAddress
,
4338 IN OUT PLARGE_INTEGER NumberOfBytes
);
4343 MmSecureVirtualMemory(
4346 IN ULONG ProbeMode
);
4351 MmUnmapVideoDisplay(
4352 IN PVOID BaseAddress
,
4353 IN SIZE_T NumberOfBytes
);
4358 MmAddPhysicalMemory(
4359 IN PPHYSICAL_ADDRESS StartAddress
,
4360 IN OUT PLARGE_INTEGER NumberOfBytes
);
4365 MmAllocateContiguousMemory(
4366 IN SIZE_T NumberOfBytes
,
4367 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
4372 MmAllocateContiguousMemorySpecifyCache(
4373 IN SIZE_T NumberOfBytes
,
4374 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
4375 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
4376 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
4377 IN MEMORY_CACHING_TYPE CacheType
);
4382 MmAllocateContiguousMemorySpecifyCacheNode(
4383 IN SIZE_T NumberOfBytes
,
4384 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
4385 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
4386 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
4387 IN MEMORY_CACHING_TYPE CacheType
,
4388 IN NODE_REQUIREMENT PreferredNode
);
4393 MmFreeContiguousMemory(
4394 IN PVOID BaseAddress
);
4399 MmFreeContiguousMemorySpecifyCache(
4400 IN PVOID BaseAddress
,
4401 IN SIZE_T NumberOfBytes
,
4402 IN MEMORY_CACHING_TYPE CacheType
);
4405 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4407 #if (NTDDI_VERSION >= NTDDI_WINXP)
4414 IN ULONG NumberOfBytes
);
4419 MmAllocateMappingAddress(
4420 IN SIZE_T NumberOfBytes
,
4426 MmFreeMappingAddress(
4427 IN PVOID BaseAddress
,
4433 MmIsVerifierEnabled(
4434 OUT PULONG VerifierFlags
);
4439 MmMapLockedPagesWithReservedMapping(
4440 IN PVOID MappingAddress
,
4442 IN PMDL MemoryDescriptorList
,
4443 IN MEMORY_CACHING_TYPE CacheType
);
4448 MmProtectMdlSystemAddress(
4449 IN PMDL MemoryDescriptorList
,
4450 IN ULONG NewProtect
);
4455 MmUnmapReservedMapping(
4456 IN PVOID BaseAddress
,
4458 IN PMDL MemoryDescriptorList
);
4463 MmAddVerifierThunks(
4464 IN PVOID ThunkBuffer
,
4465 IN ULONG ThunkBufferSize
);
4467 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4469 #if (NTDDI_VERSION >= NTDDI_WS03)
4473 MmCreateMirror(VOID
);
4477 #if (NTDDI_VERSION >= NTDDI_VISTA)
4480 MmRotatePhysicalView(
4481 IN PVOID VirtualAddress
,
4482 IN OUT PSIZE_T NumberOfBytes
,
4483 IN PMDLX NewMdl OPTIONAL
,
4484 IN MM_ROTATE_DIRECTION Direction
,
4485 IN PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction
,
4486 IN PVOID Context OPTIONAL
);
4490 /******************************************************************************
4491 * Process Manager Functions *
4492 ******************************************************************************/
4493 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess
;
4496 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4501 PsSetCreateProcessNotifyRoutine(
4502 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
4508 PsSetCreateThreadNotifyRoutine(
4509 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4514 PsSetLoadImageNotifyRoutine(
4515 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4520 PsGetCurrentProcessId(VOID
);
4525 PsGetCurrentThreadId(VOID
);
4531 OUT PULONG MajorVersion OPTIONAL
,
4532 OUT PULONG MinorVersion OPTIONAL
,
4533 OUT PULONG BuildNumber OPTIONAL
,
4534 OUT PUNICODE_STRING CSDVersion OPTIONAL
);
4539 #if (NTDDI_VERSION >= NTDDI_WINXP)
4545 IN PEPROCESS Process
);
4551 IN PETHREAD Thread
);
4556 PsRemoveCreateThreadNotifyRoutine(
4557 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4562 PsRemoveLoadImageNotifyRoutine(
4563 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4568 PsGetProcessCreateTimeQuadPart(
4569 IN PEPROCESS Process
);
4571 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4573 #if (NTDDI_VERSION >= NTDDI_WS03)
4577 PsGetThreadProcessId(
4578 IN PETHREAD Thread
);
4581 #if (NTDDI_VERSION >= NTDDI_VISTA)
4586 PsSetCurrentThreadPrefetching(
4587 IN BOOLEAN Prefetching
);
4592 PsIsCurrentThreadPrefetching(VOID
);
4596 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
4600 PsSetCreateProcessNotifyRoutineEx(
4601 IN PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine
,
4605 /******************************************************************************
4606 * Runtime Library Functions *
4607 ******************************************************************************/
4609 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4613 #ifndef RTL_USE_AVL_TABLES
4618 RtlInitializeGenericTable(
4619 OUT PRTL_GENERIC_TABLE Table
,
4620 IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
,
4621 IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
,
4622 IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine
,
4623 IN PVOID TableContext OPTIONAL
);
4628 RtlInsertElementGenericTable(
4629 IN PRTL_GENERIC_TABLE Table
,
4631 IN CLONG BufferSize
,
4632 OUT PBOOLEAN NewElement OPTIONAL
);
4637 RtlInsertElementGenericTableFull(
4638 IN PRTL_GENERIC_TABLE Table
,
4640 IN CLONG BufferSize
,
4641 OUT PBOOLEAN NewElement OPTIONAL
,
4642 IN PVOID NodeOrParent
,
4643 IN TABLE_SEARCH_RESULT SearchResult
);
4648 RtlDeleteElementGenericTable(
4649 IN PRTL_GENERIC_TABLE Table
,
4655 RtlLookupElementGenericTable(
4656 IN PRTL_GENERIC_TABLE Table
,
4662 RtlLookupElementGenericTableFull(
4663 IN PRTL_GENERIC_TABLE Table
,
4665 OUT PVOID
*NodeOrParent
,
4666 OUT TABLE_SEARCH_RESULT
*SearchResult
);
4671 RtlEnumerateGenericTable(
4672 IN PRTL_GENERIC_TABLE Table
,
4673 IN BOOLEAN Restart
);
4678 RtlEnumerateGenericTableWithoutSplaying(
4679 IN PRTL_GENERIC_TABLE Table
,
4680 IN OUT PVOID
*RestartKey
);
4685 RtlGetElementGenericTable(
4686 IN PRTL_GENERIC_TABLE Table
,
4692 RtlNumberGenericTableElements(
4693 IN PRTL_GENERIC_TABLE Table
);
4698 RtlIsGenericTableEmpty(
4699 IN PRTL_GENERIC_TABLE Table
);
4701 #endif /* !RTL_USE_AVL_TABLES */
4703 #define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT 8
4709 IN OUT PRTL_SPLAY_LINKS Links
);
4715 IN PRTL_SPLAY_LINKS Links
);
4721 IN PRTL_SPLAY_LINKS Links
,
4722 IN OUT PRTL_SPLAY_LINKS
*Root
);
4727 RtlSubtreeSuccessor(
4728 IN PRTL_SPLAY_LINKS Links
);
4733 RtlSubtreePredecessor(
4734 IN PRTL_SPLAY_LINKS Links
);
4740 IN PRTL_SPLAY_LINKS Links
);
4746 IN PRTL_SPLAY_LINKS Links
);
4751 RtlPrefixUnicodeString(
4752 IN PCUNICODE_STRING String1
,
4753 IN PCUNICODE_STRING String2
,
4754 IN BOOLEAN CaseInSensitive
);
4760 IN OUT PSTRING DestinationString
,
4761 IN
const PSTRING SourceString
);
4766 RtlUpcaseUnicodeString(
4767 IN OUT PUNICODE_STRING DestinationString
,
4768 IN PCUNICODE_STRING SourceString
,
4769 IN BOOLEAN AllocateDestinationString
);
4775 IN OUT PACCESS_MASK AccessMask
,
4776 IN PGENERIC_MAPPING GenericMapping
);
4781 RtlVolumeDeviceToDosName(
4782 IN PVOID VolumeDeviceObject
,
4783 OUT PUNICODE_STRING DosName
);
4789 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
4794 RtlVerifyVersionInfo(
4795 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
4797 IN ULONGLONG ConditionMask
);
4803 IN
const PSTRING String1
,
4804 IN
const PSTRING String2
,
4805 IN BOOLEAN CaseInSensitive
);
4811 OUT PSTRING DestinationString
,
4812 IN
const PSTRING SourceString OPTIONAL
);
4818 IN
const PSTRING String1
,
4819 IN
const PSTRING String2
,
4820 IN BOOLEAN CaseInSensitive
);
4827 IN ULONG Base OPTIONAL
,
4846 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4849 #if (NTDDI_VERSION >= NTDDI_WINXP)
4855 RtlInitializeGenericTableAvl(
4856 OUT PRTL_AVL_TABLE Table
,
4857 IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine
,
4858 IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
,
4859 IN PRTL_AVL_FREE_ROUTINE FreeRoutine
,
4860 IN PVOID TableContext OPTIONAL
);
4865 RtlInsertElementGenericTableAvl(
4866 IN PRTL_AVL_TABLE Table
,
4868 IN CLONG BufferSize
,
4869 OUT PBOOLEAN NewElement OPTIONAL
);
4874 RtlInsertElementGenericTableFullAvl(
4875 IN PRTL_AVL_TABLE Table
,
4877 IN CLONG BufferSize
,
4878 OUT PBOOLEAN NewElement OPTIONAL
,
4879 IN PVOID NodeOrParent
,
4880 IN TABLE_SEARCH_RESULT SearchResult
);
4885 RtlDeleteElementGenericTableAvl(
4886 IN PRTL_AVL_TABLE Table
,
4892 RtlLookupElementGenericTableAvl(
4893 IN PRTL_AVL_TABLE Table
,
4899 RtlLookupElementGenericTableFullAvl(
4900 IN PRTL_AVL_TABLE Table
,
4902 OUT PVOID
*NodeOrParent
,
4903 OUT TABLE_SEARCH_RESULT
*SearchResult
);
4908 RtlEnumerateGenericTableAvl(
4909 IN PRTL_AVL_TABLE Table
,
4910 IN BOOLEAN Restart
);
4915 RtlEnumerateGenericTableWithoutSplayingAvl(
4916 IN PRTL_AVL_TABLE Table
,
4917 IN OUT PVOID
*RestartKey
);
4922 RtlLookupFirstMatchingElementGenericTableAvl(
4923 IN PRTL_AVL_TABLE Table
,
4925 OUT PVOID
*RestartKey
);
4930 RtlEnumerateGenericTableLikeADirectory(
4931 IN PRTL_AVL_TABLE Table
,
4932 IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL
,
4933 IN PVOID MatchData OPTIONAL
,
4935 IN OUT PVOID
*RestartKey
,
4936 IN OUT PULONG DeleteCount
,
4942 RtlGetElementGenericTableAvl(
4943 IN PRTL_AVL_TABLE Table
,
4949 RtlNumberGenericTableElementsAvl(
4950 IN PRTL_AVL_TABLE Table
);
4955 RtlIsGenericTableEmptyAvl(
4956 IN PRTL_AVL_TABLE Table
);
4960 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4962 #if (NTDDI_VERSION >= NTDDI_VISTA)
4968 RtlRunOnceInitialize(
4969 OUT PRTL_RUN_ONCE RunOnce
);
4974 RtlRunOnceExecuteOnce(
4975 IN OUT PRTL_RUN_ONCE RunOnce
,
4976 IN PRTL_RUN_ONCE_INIT_FN InitFn
,
4977 IN OUT PVOID Parameter OPTIONAL
,
4978 OUT PVOID
*Context OPTIONAL
);
4983 RtlRunOnceBeginInitialize(
4984 IN OUT PRTL_RUN_ONCE RunOnce
,
4986 OUT PVOID
*Context OPTIONAL
);
4992 IN OUT PRTL_RUN_ONCE RunOnce
,
4994 IN PVOID Context OPTIONAL
);
5000 IN ULONG OSMajorVersion
,
5001 IN ULONG OSMinorVersion
,
5002 IN ULONG SpMajorVersion
,
5003 IN ULONG SpMinorVersion
,
5004 OUT PULONG ReturnedProductType
);
5008 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
5010 #if (NTDDI_VERSION >= NTDDI_WIN7)
5017 IN OUT PRTL_DYNAMIC_HASH_TABLE
*HashTable OPTIONAL
,
5025 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
5030 RtlInsertEntryHashTable(
5031 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5032 IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry
,
5033 IN ULONG_PTR Signature
,
5034 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
5039 RtlRemoveEntryHashTable(
5040 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5041 IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry
,
5042 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
5045 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5047 RtlLookupEntryHashTable(
5048 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5049 IN ULONG_PTR Signature
,
5050 OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
5053 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5055 RtlGetNextEntryHashTable(
5056 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5057 IN PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
);
5062 RtlInitEnumerationHashTable(
5063 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5064 OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5067 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5069 RtlEnumerateEntryHashTable(
5070 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5071 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5076 RtlEndEnumerationHashTable(
5077 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5078 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5083 RtlInitWeakEnumerationHashTable(
5084 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5085 OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5088 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5090 RtlWeaklyEnumerateEntryHashTable(
5091 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5092 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5097 RtlEndWeakEnumerationHashTable(
5098 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5099 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5105 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
5110 RtlContractHashTable(
5111 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
5115 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5118 #if defined(_AMD64_) || defined(_IA64_)
5122 //DECLSPEC_DEPRECATED_DDK_WINXP
5126 RtlLargeIntegerDivide(
5127 IN LARGE_INTEGER Dividend
,
5128 IN LARGE_INTEGER Divisor
,
5129 OUT PLARGE_INTEGER Remainder OPTIONAL
)
5132 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
5134 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
5140 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5144 RtlLargeIntegerDivide(
5145 IN LARGE_INTEGER Dividend
,
5146 IN LARGE_INTEGER Divisor
,
5147 OUT PLARGE_INTEGER Remainder OPTIONAL
);
5151 #endif /* defined(_AMD64_) || defined(_IA64_) */
5155 #ifdef RTL_USE_AVL_TABLES
5157 #define RtlInitializeGenericTable RtlInitializeGenericTableAvl
5158 #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
5159 #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
5160 #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
5161 #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
5162 #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
5163 #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
5164 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
5165 #define RtlGetElementGenericTable RtlGetElementGenericTableAvl
5166 #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
5167 #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
5169 #endif /* RTL_USE_AVL_TABLES */
5171 #define RtlInitializeSplayLinks(Links) { \
5172 PRTL_SPLAY_LINKS _SplayLinks; \
5173 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
5174 _SplayLinks->Parent = _SplayLinks; \
5175 _SplayLinks->LeftChild = NULL; \
5176 _SplayLinks->RightChild = NULL; \
5179 #define RtlIsLeftChild(Links) \
5180 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
5182 #define RtlIsRightChild(Links) \
5183 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
5185 #define RtlRightChild(Links) \
5186 ((PRTL_SPLAY_LINKS)(Links))->RightChild
5188 #define RtlIsRoot(Links) \
5189 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
5191 #define RtlLeftChild(Links) \
5192 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
5194 #define RtlParent(Links) \
5195 ((PRTL_SPLAY_LINKS)(Links))->Parent
5197 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
5199 PRTL_SPLAY_LINKS _SplayParent; \
5200 PRTL_SPLAY_LINKS _SplayChild; \
5201 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
5202 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
5203 _SplayParent->LeftChild = _SplayChild; \
5204 _SplayChild->Parent = _SplayParent; \
5207 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
5209 PRTL_SPLAY_LINKS _SplayParent; \
5210 PRTL_SPLAY_LINKS _SplayChild; \
5211 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
5212 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
5213 _SplayParent->RightChild = _SplayChild; \
5214 _SplayChild->Parent = _SplayParent; \
5217 #if !defined(MIDL_PASS)
5222 RtlConvertLongToLuid(
5228 Temp
.QuadPart
= Val
;
5229 Luid
.LowPart
= Temp
.u
.LowPart
;
5230 Luid
.HighPart
= Temp
.u
.HighPart
;
5237 RtlConvertUlongToLuid(
5247 #endif /* !defined(MIDL_PASS) */
5249 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
5250 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
5251 *CallersAddress = (PVOID)_ReturnAddress(); \
5252 *CallersCaller = NULL;
5254 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5258 RtlGetCallersAddress(
5259 OUT PVOID
*CallersAddress
,
5260 OUT PVOID
*CallersCaller
);
5264 #if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
5266 #if (NTDDI_VERSION >= NTDDI_WIN7)
5271 RtlInitHashTableContext(
5272 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
)
5274 Context
->ChainHead
= NULL
;
5275 Context
->PrevLinkage
= NULL
;
5281 RtlInitHashTableContextFromEnumerator(
5282 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
,
5283 IN PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
)
5285 Context
->ChainHead
= Enumerator
->ChainHead
;
5286 Context
->PrevLinkage
= Enumerator
->HashEntry
.Linkage
.Blink
;
5292 RtlReleaseHashTableContext(
5293 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
)
5295 UNREFERENCED_PARAMETER(Context
);
5302 RtlTotalBucketsHashTable(
5303 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
5305 return HashTable
->TableSize
;
5311 RtlNonEmptyBucketsHashTable(
5312 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
5314 return HashTable
->NonEmptyBuckets
;
5320 RtlEmptyBucketsHashTable(
5321 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
5323 return HashTable
->TableSize
- HashTable
->NonEmptyBuckets
;
5329 RtlTotalEntriesHashTable(
5330 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
5332 return HashTable
->NumEntries
;
5338 RtlActiveEnumeratorsHashTable(
5339 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
5341 return HashTable
->NumEnumerators
;
5344 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5346 #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
5348 /******************************************************************************
5349 * Security Manager Functions *
5350 ******************************************************************************/
5352 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5356 SeSinglePrivilegeCheck(
5357 IN LUID PrivilegeValue
,
5358 IN KPROCESSOR_MODE PreviousMode
);
5361 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5363 /******************************************************************************
5365 ******************************************************************************/
5372 ZwAllocateLocallyUniqueId(
5379 IN HANDLE ProcessHandle OPTIONAL
,
5380 IN NTSTATUS ExitStatus
);
5386 OUT PHANDLE ProcessHandle
,
5387 IN ACCESS_MASK DesiredAccess
,
5388 IN POBJECT_ATTRIBUTES ObjectAttributes
,
5389 IN PCLIENT_ID ClientId OPTIONAL
);
5392 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5398 IN HANDLE TimerHandle
,
5399 OUT PBOOLEAN CurrentState OPTIONAL
);
5404 OUT PHANDLE TimerHandle
,
5405 IN ACCESS_MASK DesiredAccess
,
5406 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
5407 IN TIMER_TYPE TimerType
);
5412 OUT PHANDLE TimerHandle
,
5413 IN ACCESS_MASK DesiredAccess
,
5414 IN POBJECT_ATTRIBUTES ObjectAttributes
);
5419 ZwSetInformationThread(
5420 IN HANDLE ThreadHandle
,
5421 IN THREADINFOCLASS ThreadInformationClass
,
5422 IN PVOID ThreadInformation
,
5423 IN ULONG ThreadInformationLength
);
5428 IN HANDLE TimerHandle
,
5429 IN PLARGE_INTEGER DueTime
,
5430 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
5431 IN PVOID TimerContext OPTIONAL
,
5432 IN BOOLEAN ResumeTimer
,
5433 IN LONG Period OPTIONAL
,
5434 OUT PBOOLEAN PreviousState OPTIONAL
);
5440 IN PUNICODE_STRING String
);
5446 IN POWER_INFORMATION_LEVEL PowerInformationLevel
,
5447 IN PVOID InputBuffer OPTIONAL
,
5448 IN ULONG InputBufferLength
,
5449 OUT PVOID OutputBuffer OPTIONAL
,
5450 IN ULONG OutputBufferLength
);
5455 ZwQueryVolumeInformationFile(
5456 IN HANDLE FileHandle
,
5457 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5458 OUT PVOID FsInformation
,
5460 IN FS_INFORMATION_CLASS FsInformationClass
);
5465 ZwDeviceIoControlFile(
5466 IN HANDLE FileHandle
,
5467 IN HANDLE Event OPTIONAL
,
5468 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
5469 IN PVOID ApcContext OPTIONAL
,
5470 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5471 IN ULONG IoControlCode
,
5472 IN PVOID InputBuffer OPTIONAL
,
5473 IN ULONG InputBufferLength
,
5474 OUT PVOID OutputBuffer OPTIONAL
,
5475 IN ULONG OutputBufferLength
);
5479 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5482 #if (NTDDI_VERSION >= NTDDI_WIN7)
5487 IN HANDLE TimerHandle
,
5488 IN TIMER_SET_INFORMATION_CLASS TimerSetInformationClass
,
5489 IN OUT PVOID TimerSetInformation
,
5490 IN ULONG TimerSetInformationLength
);
5493 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5499 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
5500 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
5501 (TypeBitMask), (ComparisonType)))
5503 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5507 VerSetConditionMask(
5508 IN ULONGLONG ConditionMask
,
5510 IN UCHAR Condition
);
5513 typedef struct _KEY_NAME_INFORMATION
{
5516 } KEY_NAME_INFORMATION
, *PKEY_NAME_INFORMATION
;
5518 typedef struct _KEY_CACHED_INFORMATION
{
5519 LARGE_INTEGER LastWriteTime
;
5524 ULONG MaxValueNameLen
;
5525 ULONG MaxValueDataLen
;
5527 } KEY_CACHED_INFORMATION
, *PKEY_CACHED_INFORMATION
;
5529 typedef struct _KEY_VIRTUALIZATION_INFORMATION
{
5530 ULONG VirtualizationCandidate
:1;
5531 ULONG VirtualizationEnabled
:1;
5532 ULONG VirtualTarget
:1;
5533 ULONG VirtualStore
:1;
5534 ULONG VirtualSource
:1;
5536 } KEY_VIRTUALIZATION_INFORMATION
, *PKEY_VIRTUALIZATION_INFORMATION
;
5538 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
5539 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
5540 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
5541 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
5542 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
5544 typedef struct _QUOTA_LIMITS
{
5545 SIZE_T PagedPoolLimit
;
5546 SIZE_T NonPagedPoolLimit
;
5547 SIZE_T MinimumWorkingSetSize
;
5548 SIZE_T MaximumWorkingSetSize
;
5549 SIZE_T PagefileLimit
;
5550 LARGE_INTEGER TimeLimit
;
5551 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
5553 typedef union _RATE_QUOTA_LIMIT
{
5556 ULONG RatePercent
:7;
5559 } RATE_QUOTA_LIMIT
, *PRATE_QUOTA_LIMIT
;
5561 typedef struct _QUOTA_LIMITS_EX
{
5562 SIZE_T PagedPoolLimit
;
5563 SIZE_T NonPagedPoolLimit
;
5564 SIZE_T MinimumWorkingSetSize
;
5565 SIZE_T MaximumWorkingSetSize
;
5566 SIZE_T PagefileLimit
;
5567 LARGE_INTEGER TimeLimit
;
5568 SIZE_T WorkingSetLimit
;
5573 RATE_QUOTA_LIMIT CpuRateLimit
;
5574 } QUOTA_LIMITS_EX
, *PQUOTA_LIMITS_EX
;
5576 typedef struct _IO_COUNTERS
{
5577 ULONGLONG ReadOperationCount
;
5578 ULONGLONG WriteOperationCount
;
5579 ULONGLONG OtherOperationCount
;
5580 ULONGLONG ReadTransferCount
;
5581 ULONGLONG WriteTransferCount
;
5582 ULONGLONG OtherTransferCount
;
5583 } IO_COUNTERS
, *PIO_COUNTERS
;
5585 typedef struct _VM_COUNTERS
{
5586 SIZE_T PeakVirtualSize
;
5588 ULONG PageFaultCount
;
5589 SIZE_T PeakWorkingSetSize
;
5590 SIZE_T WorkingSetSize
;
5591 SIZE_T QuotaPeakPagedPoolUsage
;
5592 SIZE_T QuotaPagedPoolUsage
;
5593 SIZE_T QuotaPeakNonPagedPoolUsage
;
5594 SIZE_T QuotaNonPagedPoolUsage
;
5595 SIZE_T PagefileUsage
;
5596 SIZE_T PeakPagefileUsage
;
5597 } VM_COUNTERS
, *PVM_COUNTERS
;
5599 typedef struct _VM_COUNTERS_EX
{
5600 SIZE_T PeakVirtualSize
;
5602 ULONG PageFaultCount
;
5603 SIZE_T PeakWorkingSetSize
;
5604 SIZE_T WorkingSetSize
;
5605 SIZE_T QuotaPeakPagedPoolUsage
;
5606 SIZE_T QuotaPagedPoolUsage
;
5607 SIZE_T QuotaPeakNonPagedPoolUsage
;
5608 SIZE_T QuotaNonPagedPoolUsage
;
5609 SIZE_T PagefileUsage
;
5610 SIZE_T PeakPagefileUsage
;
5611 SIZE_T PrivateUsage
;
5612 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
5614 #define MAX_HW_COUNTERS 16
5615 #define THREAD_PROFILING_FLAG_DISPATCH 0x00000001
5617 typedef enum _HARDWARE_COUNTER_TYPE
{
5619 MaxHardwareCounterType
5620 } HARDWARE_COUNTER_TYPE
, *PHARDWARE_COUNTER_TYPE
;
5622 typedef struct _HARDWARE_COUNTER
{
5623 HARDWARE_COUNTER_TYPE Type
;
5626 } HARDWARE_COUNTER
, *PHARDWARE_COUNTER
;
5628 typedef struct _POOLED_USAGE_AND_LIMITS
{
5629 SIZE_T PeakPagedPoolUsage
;
5630 SIZE_T PagedPoolUsage
;
5631 SIZE_T PagedPoolLimit
;
5632 SIZE_T PeakNonPagedPoolUsage
;
5633 SIZE_T NonPagedPoolUsage
;
5634 SIZE_T NonPagedPoolLimit
;
5635 SIZE_T PeakPagefileUsage
;
5636 SIZE_T PagefileUsage
;
5637 SIZE_T PagefileLimit
;
5638 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
5640 typedef struct _PROCESS_ACCESS_TOKEN
{
5643 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
5645 #define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS 0x00000003UL
5646 #define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1))
5648 typedef struct _PROCESS_EXCEPTION_PORT
{
5649 IN HANDLE ExceptionPortHandle
;
5650 IN OUT ULONG StateFlags
;
5651 } PROCESS_EXCEPTION_PORT
, *PPROCESS_EXCEPTION_PORT
;
5653 typedef struct _KERNEL_USER_TIMES
{
5654 LARGE_INTEGER CreateTime
;
5655 LARGE_INTEGER ExitTime
;
5656 LARGE_INTEGER KernelTime
;
5657 LARGE_INTEGER UserTime
;
5658 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
5660 /* NtXxx Functions */
5666 OUT PHANDLE ProcessHandle
,
5667 IN ACCESS_MASK DesiredAccess
,
5668 IN POBJECT_ATTRIBUTES ObjectAttributes
,
5669 IN PCLIENT_ID ClientId OPTIONAL
);
5674 NtQueryInformationProcess(
5675 IN HANDLE ProcessHandle
,
5676 IN PROCESSINFOCLASS ProcessInformationClass
,
5677 OUT PVOID ProcessInformation OPTIONAL
,
5678 IN ULONG ProcessInformationLength
,
5679 OUT PULONG ReturnLength OPTIONAL
);
5681 typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION
{
5682 SystemFirmwareTable_Enumerate
,
5683 SystemFirmwareTable_Get
5684 } SYSTEM_FIRMWARE_TABLE_ACTION
;
5686 typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION
{
5687 ULONG ProviderSignature
;
5688 SYSTEM_FIRMWARE_TABLE_ACTION Action
;
5690 ULONG TableBufferLength
;
5691 UCHAR TableBuffer
[ANYSIZE_ARRAY
];
5692 } SYSTEM_FIRMWARE_TABLE_INFORMATION
, *PSYSTEM_FIRMWARE_TABLE_INFORMATION
;
5696 IN OUT PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo
);
5698 typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER
{
5699 ULONG ProviderSignature
;
5701 PFNFTH FirmwareTableHandler
;
5703 } SYSTEM_FIRMWARE_TABLE_HANDLER
, *PSYSTEM_FIRMWARE_TABLE_HANDLER
;
5706 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
5709 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
5710 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
5711 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
5712 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
5714 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
5715 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
5716 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
5717 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
5718 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
5720 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
5721 #define NX_SUPPORT_POLICY_ALWAYSON 1
5722 #define NX_SUPPORT_POLICY_OPTIN 2
5723 #define NX_SUPPORT_POLICY_OPTOUT 3
5725 #define SHARED_GLOBAL_FLAGS_ERROR_PORT_V 0x0
5726 #define SHARED_GLOBAL_FLAGS_ERROR_PORT (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V)
5728 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1
5729 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V)
5731 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V 0x2
5732 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V)
5734 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V 0x3
5735 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED \
5736 (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V)
5738 #define SHARED_GLOBAL_FLAGS_SPARE_V 0x4
5739 #define SHARED_GLOBAL_FLAGS_SPARE \
5740 (1UL << SHARED_GLOBAL_FLAGS_SPARE_V)
5742 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V 0x5
5743 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED \
5744 (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V)
5746 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V 0x6
5747 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED \
5748 (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V)
5750 #define EX_INIT_BITS(Flags, Bit) \
5751 *((Flags)) |= (Bit) // Safe to use before concurrently accessible
5753 #define EX_TEST_SET_BIT(Flags, Bit) \
5754 InterlockedBitTestAndSet ((PLONG)(Flags), (Bit))
5756 #define EX_TEST_CLEAR_BIT(Flags, Bit) \
5757 InterlockedBitTestAndReset ((PLONG)(Flags), (Bit))
5759 #define CmResourceTypeMaximum 8
5761 typedef struct _CM_PCCARD_DEVICE_DATA
{
5767 ULONG LegacyBaseAddress
;
5769 } CM_PCCARD_DEVICE_DATA
, *PCM_PCCARD_DEVICE_DATA
;
5771 #define PCCARD_MAP_ERROR 0x01
5772 #define PCCARD_DEVICE_PCI 0x10
5774 #define PCCARD_SCAN_DISABLED 0x01
5775 #define PCCARD_MAP_ZERO 0x02
5776 #define PCCARD_NO_TIMER 0x03
5777 #define PCCARD_NO_PIC 0x04
5778 #define PCCARD_NO_LEGACY_BASE 0x05
5779 #define PCCARD_DUP_LEGACY_BASE 0x06
5780 #define PCCARD_NO_CONTROLLERS 0x07
5782 #define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2))
5784 /* Filesystem runtime library routines */
5786 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5790 FsRtlIsTotalDeviceFailure(
5791 IN NTSTATUS Status
);
5794 /* FIXME : These definitions below doesn't belong to NTDDK */