4 * Windows NT Device Driver Kit
6 * This file is part of the ReactOS DDK package.
10 * Timo Kreuzer (timo.kreuzer@reactos.org)
12 * THIS SOFTWARE IS NOT COPYRIGHTED
14 * This source code is offered for use in the public domain. You may
15 * use, modify or distribute it freely.
17 * This code is distributed in the hope that it will be useful but
18 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
19 * DISCLAIMED. This includes but is not limited to warranties of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
28 #if !defined(_NTHAL_) && !defined(_NTIFS_)
29 #define _NTDDK_INCLUDED_
36 #define _CTYPE_DISABLE_MACROS
46 #include <stdarg.h> // FIXME
47 #include <basetyps.h> // FIXME
63 #endif /* _NTLSA_AUDIT_ */
64 #endif /* _NTLSA_IFS_ */
68 struct _LOADER_PARAMETER_BLOCK
;
70 struct _DRIVE_LAYOUT_INFORMATION_EX
;
71 struct _SET_PARTITION_INFORMATION_EX
;
73 typedef struct _BUS_HANDLER
*PBUS_HANDLER
;
74 typedef struct _DEVICE_HANDLER_OBJECT
*PDEVICE_HANDLER_OBJECT
;
75 #if defined(_NTHAL_INCLUDED_)
76 typedef struct _KAFFINITY_EX
*PKAFFINITY_EX
;
78 typedef struct _PEB
*PPEB
;
82 typedef struct _IMAGE_NT_HEADERS
*PIMAGE_NT_HEADERS32
;
83 typedef struct _IMAGE_NT_HEADERS64
*PIMAGE_NT_HEADERS64
;
86 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS
;
88 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS
;
91 #endif /* _NTIMAGE_ */
93 /******************************************************************************
95 ******************************************************************************/
96 typedef struct _ZONE_SEGMENT_HEADER
{
97 SINGLE_LIST_ENTRY SegmentList
;
99 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
101 typedef struct _ZONE_HEADER
{
102 SINGLE_LIST_ENTRY FreeList
;
103 SINGLE_LIST_ENTRY SegmentList
;
105 ULONG TotalSegmentSize
;
106 } ZONE_HEADER
, *PZONE_HEADER
;
108 #define PROTECTED_POOL 0x80000000
110 /******************************************************************************
111 * I/O Manager Types *
112 ******************************************************************************/
114 /* DEVICE_OBJECT.Flags */
115 #define DO_DEVICE_HAS_NAME 0x00000040
116 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
117 #define DO_LONG_TERM_REQUESTS 0x00000200
118 #define DO_NEVER_LAST_DEVICE 0x00000400
119 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
120 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
121 #define DO_FORCE_NEITHER_IO 0x00080000
122 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
123 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
124 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
125 #define DO_DISALLOW_EXECUTE 0x00800000
129 typedef enum _CONFIGURATION_TYPE
{
132 FloatingPointProcessor
,
142 MultiFunctionAdapter
,
156 FloppyDiskPeripheral
,
169 RealModeIrqRoutingTable
,
170 RealModePCIEnumeration
,
172 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
173 #endif /* !_ARC_DDK_ */
176 ** IRP function codes
179 #define IRP_MN_QUERY_DIRECTORY 0x01
180 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
182 #define IRP_MN_USER_FS_REQUEST 0x00
183 #define IRP_MN_MOUNT_VOLUME 0x01
184 #define IRP_MN_VERIFY_VOLUME 0x02
185 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
186 #define IRP_MN_TRACK_LINK 0x04
187 #define IRP_MN_KERNEL_CALL 0x04
189 #define IRP_MN_LOCK 0x01
190 #define IRP_MN_UNLOCK_SINGLE 0x02
191 #define IRP_MN_UNLOCK_ALL 0x03
192 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
194 #define IRP_MN_FLUSH_AND_PURGE 0x01
196 #define IRP_MN_NORMAL 0x00
197 #define IRP_MN_DPC 0x01
198 #define IRP_MN_MDL 0x02
199 #define IRP_MN_COMPLETE 0x04
200 #define IRP_MN_COMPRESSED 0x08
202 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
203 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
204 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
206 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
208 #define IO_CHECK_CREATE_PARAMETERS 0x0200
209 #define IO_ATTACH_DEVICE 0x0400
210 #define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800
213 (NTAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
215 IN PUNICODE_STRING PathName
,
216 IN INTERFACE_TYPE BusType
,
218 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
219 IN CONFIGURATION_TYPE ControllerType
,
220 IN ULONG ControllerNumber
,
221 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
222 IN CONFIGURATION_TYPE PeripheralType
,
223 IN ULONG PeripheralNumber
,
224 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
226 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
227 IoQueryDeviceIdentifier
= 0,
228 IoQueryDeviceConfigurationData
,
229 IoQueryDeviceComponentInformation
,
231 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
234 (NTAPI
*PDRIVER_REINITIALIZE
)(
235 IN
struct _DRIVER_OBJECT
*DriverObject
,
236 IN PVOID Context OPTIONAL
,
239 typedef struct _CONTROLLER_OBJECT
{
242 PVOID ControllerExtension
;
243 KDEVICE_QUEUE DeviceWaitQueue
;
245 LARGE_INTEGER Spare2
;
246 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
248 #define DRVO_REINIT_REGISTERED 0x00000008
249 #define DRVO_INITIALIZED 0x00000010
250 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
251 #define DRVO_LEGACY_RESOURCES 0x00000040
253 typedef struct _CONFIGURATION_INFORMATION
{
261 BOOLEAN AtDiskPrimaryAddressClaimed
;
262 BOOLEAN AtDiskSecondaryAddressClaimed
;
264 ULONG MediumChangerCount
;
265 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
267 typedef struct _DISK_SIGNATURE
{
268 ULONG PartitionStyle
;
269 _ANONYMOUS_UNION
union {
278 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
280 typedef struct _TXN_PARAMETER_BLOCK
{
283 PVOID TransactionObject
;
284 } TXN_PARAMETER_BLOCK
, *PTXN_PARAMETER_BLOCK
;
286 #define TXF_MINIVERSION_DEFAULT_VIEW (0xFFFE)
288 typedef struct _IO_DRIVER_CREATE_CONTEXT
{
290 struct _ECP_LIST
*ExtraCreateParameter
;
291 PVOID DeviceObjectHint
;
292 PTXN_PARAMETER_BLOCK TxnParameters
;
293 } IO_DRIVER_CREATE_CONTEXT
, *PIO_DRIVER_CREATE_CONTEXT
;
295 typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD
{
299 PINTERFACE_REFERENCE InterfaceReference
;
300 PINTERFACE_DEREFERENCE InterfaceDereference
;
301 PGET_SET_DEVICE_DATA SetBusData
;
302 PGET_SET_DEVICE_DATA GetBusData
;
304 } AGP_TARGET_BUS_INTERFACE_STANDARD
, *PAGP_TARGET_BUS_INTERFACE_STANDARD
;
307 (NTAPI
*PGET_LOCATION_STRING
)(
308 IN OUT PVOID Context OPTIONAL
,
309 OUT PWCHAR
*LocationStrings
);
311 typedef struct _PNP_LOCATION_INTERFACE
{
315 PINTERFACE_REFERENCE InterfaceReference
;
316 PINTERFACE_DEREFERENCE InterfaceDereference
;
317 PGET_LOCATION_STRING GetLocationString
;
318 } PNP_LOCATION_INTERFACE
, *PPNP_LOCATION_INTERFACE
;
320 typedef enum _ARBITER_ACTION
{
321 ArbiterActionTestAllocation
,
322 ArbiterActionRetestAllocation
,
323 ArbiterActionCommitAllocation
,
324 ArbiterActionRollbackAllocation
,
325 ArbiterActionQueryAllocatedResources
,
326 ArbiterActionWriteReservedResources
,
327 ArbiterActionQueryConflict
,
328 ArbiterActionQueryArbitrate
,
329 ArbiterActionAddReserved
,
330 ArbiterActionBootAllocation
331 } ARBITER_ACTION
, *PARBITER_ACTION
;
333 typedef struct _ARBITER_CONFLICT_INFO
{
334 PDEVICE_OBJECT OwningObject
;
337 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
339 typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS
{
340 IN OUT PLIST_ENTRY ArbitrationList
;
341 IN ULONG AllocateFromCount
;
342 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
343 } ARBITER_TEST_ALLOCATION_PARAMETERS
, *PARBITER_TEST_ALLOCATION_PARAMETERS
;
345 typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS
{
346 IN OUT PLIST_ENTRY ArbitrationList
;
347 IN ULONG AllocateFromCount
;
348 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
349 } ARBITER_RETEST_ALLOCATION_PARAMETERS
, *PARBITER_RETEST_ALLOCATION_PARAMETERS
;
351 typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS
{
352 IN OUT PLIST_ENTRY ArbitrationList
;
353 } ARBITER_BOOT_ALLOCATION_PARAMETERS
, *PARBITER_BOOT_ALLOCATION_PARAMETERS
;
355 typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
{
356 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
357 } ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
;
359 typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS
{
360 IN PDEVICE_OBJECT PhysicalDeviceObject
;
361 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
362 OUT PULONG ConflictCount
;
363 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
364 } ARBITER_QUERY_CONFLICT_PARAMETERS
, *PARBITER_QUERY_CONFLICT_PARAMETERS
;
366 typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS
{
367 IN PLIST_ENTRY ArbitrationList
;
368 } ARBITER_QUERY_ARBITRATE_PARAMETERS
, *PARBITER_QUERY_ARBITRATE_PARAMETERS
;
370 typedef struct _ARBITER_ADD_RESERVED_PARAMETERS
{
371 IN PDEVICE_OBJECT ReserveDevice
;
372 } ARBITER_ADD_RESERVED_PARAMETERS
, *PARBITER_ADD_RESERVED_PARAMETERS
;
374 typedef struct _ARBITER_PARAMETERS
{
376 ARBITER_TEST_ALLOCATION_PARAMETERS TestAllocation
;
377 ARBITER_RETEST_ALLOCATION_PARAMETERS RetestAllocation
;
378 ARBITER_BOOT_ALLOCATION_PARAMETERS BootAllocation
;
379 ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS QueryAllocatedResources
;
380 ARBITER_QUERY_CONFLICT_PARAMETERS QueryConflict
;
381 ARBITER_QUERY_ARBITRATE_PARAMETERS QueryArbitrate
;
382 ARBITER_ADD_RESERVED_PARAMETERS AddReserved
;
384 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
386 typedef enum _ARBITER_REQUEST_SOURCE
{
387 ArbiterRequestUndefined
= -1,
388 ArbiterRequestLegacyReported
,
389 ArbiterRequestHalReported
,
390 ArbiterRequestLegacyAssigned
,
391 ArbiterRequestPnpDetected
,
392 ArbiterRequestPnpEnumerated
393 } ARBITER_REQUEST_SOURCE
;
395 typedef enum _ARBITER_RESULT
{
396 ArbiterResultUndefined
= -1,
397 ArbiterResultSuccess
,
398 ArbiterResultExternalConflict
,
399 ArbiterResultNullRequest
402 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
404 typedef struct _ARBITER_LIST_ENTRY
{
405 LIST_ENTRY ListEntry
;
406 ULONG AlternativeCount
;
407 PIO_RESOURCE_DESCRIPTOR Alternatives
;
408 PDEVICE_OBJECT PhysicalDeviceObject
;
409 ARBITER_REQUEST_SOURCE RequestSource
;
412 INTERFACE_TYPE InterfaceType
;
415 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
416 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
417 ARBITER_RESULT Result
;
418 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
421 (NTAPI
*PARBITER_HANDLER
)(
422 IN OUT PVOID Context
,
423 IN ARBITER_ACTION Action
,
424 IN OUT PARBITER_PARAMETERS Parameters
);
426 #define ARBITER_PARTIAL 0x00000001
428 typedef struct _ARBITER_INTERFACE
{
432 PINTERFACE_REFERENCE InterfaceReference
;
433 PINTERFACE_DEREFERENCE InterfaceDereference
;
434 PARBITER_HANDLER ArbiterHandler
;
436 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
438 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
439 TranslateChildToParent
,
440 TranslateParentToChild
441 } RESOURCE_TRANSLATION_DIRECTION
;
444 (NTAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
445 IN OUT PVOID Context OPTIONAL
,
446 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
447 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
448 IN ULONG AlternativesCount OPTIONAL
,
449 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
450 IN PDEVICE_OBJECT PhysicalDeviceObject
,
451 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
454 (NTAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
455 IN OUT PVOID Context OPTIONAL
,
456 IN PIO_RESOURCE_DESCRIPTOR Source
,
457 IN PDEVICE_OBJECT PhysicalDeviceObject
,
458 OUT PULONG TargetCount
,
459 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
461 typedef struct _TRANSLATOR_INTERFACE
{
465 PINTERFACE_REFERENCE InterfaceReference
;
466 PINTERFACE_DEREFERENCE InterfaceDereference
;
467 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
468 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
469 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
471 typedef struct _PCI_AGP_CAPABILITY
{
472 PCI_CAPABILITIES_HEADER Header
;
476 struct _PCI_AGP_STATUS
{
481 ULONG HostTransDisable
:1;
483 ULONG ITA_Coherent
:1;
484 ULONG SideBandAddressing
:1;
485 ULONG CalibrationCycle
:3;
486 ULONG AsyncRequestSize
:3;
490 ULONG RequestQueueDepthMaximum
:8;
492 struct _PCI_AGP_COMMAND
{
495 ULONG FastWriteEnable
:1;
496 ULONG FourGBEnable
:1;
501 ULONG CalibrationCycle
:3;
502 ULONG AsyncReqSize
:3;
504 ULONG RequestQueueDepth
:8;
506 } PCI_AGP_CAPABILITY
, *PPCI_AGP_CAPABILITY
;
508 typedef enum _EXTENDED_AGP_REGISTER
{
516 } EXTENDED_AGP_REGISTER
, *PEXTENDED_AGP_REGISTER
;
518 typedef struct _PCI_AGP_ISOCH_STATUS
{
525 } PCI_AGP_ISOCH_STATUS
, *PPCI_AGP_ISOCH_STATUS
;
527 typedef struct _PCI_AGP_CONTROL
{
533 } PCI_AGP_CONTROL
, *PPCI_AGP_CONTROL
;
535 typedef struct _PCI_AGP_APERTURE_PAGE_SIZE
{
536 USHORT PageSizeMask
:11;
538 USHORT PageSizeSelect
:4;
539 } PCI_AGP_APERTURE_PAGE_SIZE
, *PPCI_AGP_APERTURE_PAGE_SIZE
;
541 typedef struct _PCI_AGP_ISOCH_COMMAND
{
545 } PCI_AGP_ISOCH_COMMAND
, *PPCI_AGP_ISOCH_COMMAND
;
547 typedef struct PCI_AGP_EXTENDED_CAPABILITY
{
548 PCI_AGP_ISOCH_STATUS IsochStatus
;
549 PCI_AGP_CONTROL AgpControl
;
551 PCI_AGP_APERTURE_PAGE_SIZE AperturePageSize
;
554 PCI_AGP_ISOCH_COMMAND IsochCommand
;
555 } PCI_AGP_EXTENDED_CAPABILITY
, *PPCI_AGP_EXTENDED_CAPABILITY
;
557 #define PCI_AGP_RATE_1X 0x1
558 #define PCI_AGP_RATE_2X 0x2
559 #define PCI_AGP_RATE_4X 0x4
561 #define PCIX_MODE_CONVENTIONAL_PCI 0x0
562 #define PCIX_MODE1_66MHZ 0x1
563 #define PCIX_MODE1_100MHZ 0x2
564 #define PCIX_MODE1_133MHZ 0x3
565 #define PCIX_MODE2_266_66MHZ 0x9
566 #define PCIX_MODE2_266_100MHZ 0xA
567 #define PCIX_MODE2_266_133MHZ 0xB
568 #define PCIX_MODE2_533_66MHZ 0xD
569 #define PCIX_MODE2_533_100MHZ 0xE
570 #define PCIX_MODE2_533_133MHZ 0xF
572 #define PCIX_VERSION_MODE1_ONLY 0x0
573 #define PCIX_VERSION_MODE2_ECC 0x1
574 #define PCIX_VERSION_DUAL_MODE_ECC 0x2
576 typedef struct _PCIX_BRIDGE_CAPABILITY
{
577 PCI_CAPABILITIES_HEADER Header
;
579 _ANONYMOUS_STRUCT
struct {
581 USHORT Bus133MHzCapable
:1;
582 USHORT SplitCompletionDiscarded
:1;
583 USHORT UnexpectedSplitCompletion
:1;
584 USHORT SplitCompletionOverrun
:1;
585 USHORT SplitRequestDelayed
:1;
586 USHORT BusModeFrequency
:4;
589 USHORT Bus266MHzCapable
:1;
590 USHORT Bus533MHzCapable
:1;
595 _ANONYMOUS_STRUCT
struct {
596 ULONG FunctionNumber
:3;
597 ULONG DeviceNumber
:5;
600 ULONG Device133MHzCapable
:1;
601 ULONG SplitCompletionDiscarded
:1;
602 ULONG UnexpectedSplitCompletion
:1;
603 ULONG SplitCompletionOverrun
:1;
604 ULONG SplitRequestDelayed
:1;
607 ULONG Device266MHzCapable
:1;
608 ULONG Device533MHzCapable
:1;
612 USHORT UpstreamSplitTransactionCapacity
;
613 USHORT UpstreamSplitTransactionLimit
;
614 USHORT DownstreamSplitTransactionCapacity
;
615 USHORT DownstreamSplitTransactionLimit
;
617 _ANONYMOUS_STRUCT
struct {
618 ULONG SelectSecondaryRegisters
:1;
619 ULONG ErrorPresentInOtherBank
:1;
620 ULONG AdditionalCorrectableError
:1;
621 ULONG AdditionalUncorrectableError
:1;
623 ULONG ErrorCorrected
:1;
625 ULONG ErrorFirstCommand
:4;
626 ULONG ErrorSecondCommand
:4;
627 ULONG ErrorUpperAttributes
:4;
628 ULONG ControlUpdateEnable
:1;
630 ULONG DisableSingleBitCorrection
:1;
635 ULONG EccFirstAddress
;
636 ULONG EccSecondAddress
;
638 } PCIX_BRIDGE_CAPABILITY
, *PPCIX_BRIDGE_CAPABILITY
;
640 typedef struct _PCI_SUBSYSTEM_IDS_CAPABILITY
{
641 PCI_CAPABILITIES_HEADER Header
;
645 } PCI_SUBSYSTEM_IDS_CAPABILITY
, *PPCI_SUBSYSTEM_IDS_CAPABILITY
;
647 #define OSC_FIRMWARE_FAILURE 0x02
648 #define OSC_UNRECOGNIZED_UUID 0x04
649 #define OSC_UNRECOGNIZED_REVISION 0x08
650 #define OSC_CAPABILITIES_MASKED 0x10
652 #define PCI_ROOT_BUS_OSC_METHOD_CAPABILITY_REVISION 0x01
654 typedef struct _PCI_ROOT_BUS_OSC_SUPPORT_FIELD
{
656 _ANONYMOUS_STRUCT
struct {
657 ULONG ExtendedConfigOpRegions
:1;
658 ULONG ActiveStatePowerManagement
:1;
659 ULONG ClockPowerManagement
:1;
660 ULONG SegmentGroups
:1;
661 ULONG MessageSignaledInterrupts
:1;
662 ULONG WindowsHardwareErrorArchitecture
:1;
667 } PCI_ROOT_BUS_OSC_SUPPORT_FIELD
, *PPCI_ROOT_BUS_OSC_SUPPORT_FIELD
;
669 typedef struct _PCI_ROOT_BUS_OSC_CONTROL_FIELD
{
671 _ANONYMOUS_STRUCT
struct {
672 ULONG ExpressNativeHotPlug
:1;
673 ULONG ShpcNativeHotPlug
:1;
674 ULONG ExpressNativePME
:1;
675 ULONG ExpressAdvancedErrorReporting
:1;
676 ULONG ExpressCapabilityStructure
:1;
681 } PCI_ROOT_BUS_OSC_CONTROL_FIELD
, *PPCI_ROOT_BUS_OSC_CONTROL_FIELD
;
683 typedef enum _PCI_HARDWARE_INTERFACE
{
688 } PCI_HARDWARE_INTERFACE
, *PPCI_HARDWARE_INTERFACE
;
695 typedef struct _PCI_ROOT_BUS_HARDWARE_CAPABILITY
{
696 PCI_HARDWARE_INTERFACE SecondaryInterface
;
697 _ANONYMOUS_STRUCT
struct {
698 BOOLEAN BusCapabilitiesFound
;
699 ULONG CurrentSpeedAndMode
;
700 ULONG SupportedSpeedsAndModes
;
701 BOOLEAN DeviceIDMessagingCapable
;
702 PCI_BUS_WIDTH SecondaryBusWidth
;
704 PCI_ROOT_BUS_OSC_SUPPORT_FIELD OscFeatureSupport
;
705 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlRequest
;
706 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlGranted
;
707 } PCI_ROOT_BUS_HARDWARE_CAPABILITY
, *PPCI_ROOT_BUS_HARDWARE_CAPABILITY
;
709 typedef union _PCI_EXPRESS_CAPABILITIES_REGISTER
{
710 _ANONYMOUS_STRUCT
struct {
711 USHORT CapabilityVersion
:4;
713 USHORT SlotImplemented
:1;
714 USHORT InterruptMessageNumber
:5;
718 } PCI_EXPRESS_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_CAPABILITIES_REGISTER
;
720 typedef union _PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
{
721 _ANONYMOUS_STRUCT
struct {
722 ULONG MaxPayloadSizeSupported
:3;
723 ULONG PhantomFunctionsSupported
:2;
724 ULONG ExtendedTagSupported
:1;
725 ULONG L0sAcceptableLatency
:3;
726 ULONG L1AcceptableLatency
:3;
728 ULONG RoleBasedErrorReporting
:1;
730 ULONG CapturedSlotPowerLimit
:8;
731 ULONG CapturedSlotPowerLimitScale
:2;
735 } PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
;
737 #define PCI_EXPRESS_AER_DEVICE_CONTROL_MASK 0x07;
739 typedef union _PCI_EXPRESS_DEVICE_CONTROL_REGISTER
{
740 _ANONYMOUS_STRUCT
struct {
741 USHORT CorrectableErrorEnable
:1;
742 USHORT NonFatalErrorEnable
:1;
743 USHORT FatalErrorEnable
:1;
744 USHORT UnsupportedRequestErrorEnable
:1;
745 USHORT EnableRelaxedOrder
:1;
746 USHORT MaxPayloadSize
:3;
747 USHORT ExtendedTagEnable
:1;
748 USHORT PhantomFunctionsEnable
:1;
749 USHORT AuxPowerEnable
:1;
750 USHORT NoSnoopEnable
:1;
751 USHORT MaxReadRequestSize
:3;
752 USHORT BridgeConfigRetryEnable
:1;
755 } PCI_EXPRESS_DEVICE_CONTROL_REGISTER
, *PPCI_EXPRESS_DEVICE_CONTROL_REGISTER
;
757 #define PCI_EXPRESS_AER_DEVICE_STATUS_MASK 0x0F;
759 typedef union _PCI_EXPRESS_DEVICE_STATUS_REGISTER
{
760 _ANONYMOUS_STRUCT
struct {
761 USHORT CorrectableErrorDetected
:1;
762 USHORT NonFatalErrorDetected
:1;
763 USHORT FatalErrorDetected
:1;
764 USHORT UnsupportedRequestDetected
:1;
765 USHORT AuxPowerDetected
:1;
766 USHORT TransactionsPending
:1;
770 } PCI_EXPRESS_DEVICE_STATUS_REGISTER
, *PPCI_EXPRESS_DEVICE_STATUS_REGISTER
;
772 typedef union _PCI_EXPRESS_LINK_CAPABILITIES_REGISTER
{
773 _ANONYMOUS_STRUCT
struct {
774 ULONG MaximumLinkSpeed
:4;
775 ULONG MaximumLinkWidth
:6;
776 ULONG ActiveStatePMSupport
:2;
777 ULONG L0sExitLatency
:3;
778 ULONG L1ExitLatency
:3;
779 ULONG ClockPowerManagement
:1;
780 ULONG SurpriseDownErrorReportingCapable
:1;
781 ULONG DataLinkLayerActiveReportingCapable
:1;
786 } PCI_EXPRESS_LINK_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_LINK_CAPABILITIES_REGISTER
;
788 typedef union _PCI_EXPRESS_LINK_CONTROL_REGISTER
{
789 _ANONYMOUS_STRUCT
struct {
790 USHORT ActiveStatePMControl
:2;
792 USHORT ReadCompletionBoundary
:1;
793 USHORT LinkDisable
:1;
794 USHORT RetrainLink
:1;
795 USHORT CommonClockConfig
:1;
796 USHORT ExtendedSynch
:1;
797 USHORT EnableClockPowerManagement
:1;
801 } PCI_EXPRESS_LINK_CONTROL_REGISTER
, *PPCI_EXPRESS_LINK_CONTROL_REGISTER
;
803 typedef union _PCI_EXPRESS_LINK_STATUS_REGISTER
{
804 _ANONYMOUS_STRUCT
struct {
808 USHORT LinkTraining
:1;
809 USHORT SlotClockConfig
:1;
810 USHORT DataLinkLayerActive
:1;
814 } PCI_EXPRESS_LINK_STATUS_REGISTER
, *PPCI_EXPRESS_LINK_STATUS_REGISTER
;
816 typedef union _PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
{
817 _ANONYMOUS_STRUCT
struct {
818 ULONG AttentionButtonPresent
:1;
819 ULONG PowerControllerPresent
:1;
820 ULONG MRLSensorPresent
:1;
821 ULONG AttentionIndicatorPresent
:1;
822 ULONG PowerIndicatorPresent
:1;
823 ULONG HotPlugSurprise
:1;
824 ULONG HotPlugCapable
:1;
825 ULONG SlotPowerLimit
:8;
826 ULONG SlotPowerLimitScale
:2;
827 ULONG ElectromechanicalLockPresent
:1;
828 ULONG NoCommandCompletedSupport
:1;
829 ULONG PhysicalSlotNumber
:13;
832 } PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
;
834 typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER
{
835 _ANONYMOUS_STRUCT
struct {
836 USHORT AttentionButtonEnable
:1;
837 USHORT PowerFaultDetectEnable
:1;
838 USHORT MRLSensorEnable
:1;
839 USHORT PresenceDetectEnable
:1;
840 USHORT CommandCompletedEnable
:1;
841 USHORT HotPlugInterruptEnable
:1;
842 USHORT AttentionIndicatorControl
:2;
843 USHORT PowerIndicatorControl
:2;
844 USHORT PowerControllerControl
:1;
845 USHORT ElectromechanicalLockControl
:1;
846 USHORT DataLinkStateChangeEnable
:1;
850 } PCI_EXPRESS_SLOT_CONTROL_REGISTER
, *PPCI_EXPRESS_SLOT_CONTROL_REGISTER
;
852 typedef union _PCI_EXPRESS_SLOT_STATUS_REGISTER
{
853 _ANONYMOUS_STRUCT
struct {
854 USHORT AttentionButtonPressed
:1;
855 USHORT PowerFaultDetected
:1;
856 USHORT MRLSensorChanged
:1;
857 USHORT PresenceDetectChanged
:1;
858 USHORT CommandCompleted
:1;
859 USHORT MRLSensorState
:1;
860 USHORT PresenceDetectState
:1;
861 USHORT ElectromechanicalLockEngaged
:1;
862 USHORT DataLinkStateChanged
:1;
866 } PCI_EXPRESS_SLOT_STATUS_REGISTER
, *PPCI_EXPRESS_SLOT_STATUS_REGISTER
;
868 typedef union _PCI_EXPRESS_ROOT_CONTROL_REGISTER
{
869 _ANONYMOUS_STRUCT
struct {
870 USHORT CorrectableSerrEnable
:1;
871 USHORT NonFatalSerrEnable
:1;
872 USHORT FatalSerrEnable
:1;
873 USHORT PMEInterruptEnable
:1;
874 USHORT CRSSoftwareVisibilityEnable
:1;
878 } PCI_EXPRESS_ROOT_CONTROL_REGISTER
, *PPCI_EXPRESS_ROOT_CONTROL_REGISTER
;
880 typedef union _PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
{
881 _ANONYMOUS_STRUCT
struct {
882 USHORT CRSSoftwareVisibility
:1;
886 } PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
;
888 typedef union _PCI_EXPRESS_ROOT_STATUS_REGISTER
{
889 _ANONYMOUS_STRUCT
struct {
890 ULONG PMERequestorId
:16;
896 } PCI_EXPRESS_ROOT_STATUS_REGISTER
, *PPCI_EXPRESS_ROOT_STATUS_REGISTER
;
898 typedef struct _PCI_EXPRESS_CAPABILITY
{
899 PCI_CAPABILITIES_HEADER Header
;
900 PCI_EXPRESS_CAPABILITIES_REGISTER ExpressCapabilities
;
901 PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER DeviceCapabilities
;
902 PCI_EXPRESS_DEVICE_CONTROL_REGISTER DeviceControl
;
903 PCI_EXPRESS_DEVICE_STATUS_REGISTER DeviceStatus
;
904 PCI_EXPRESS_LINK_CAPABILITIES_REGISTER LinkCapabilities
;
905 PCI_EXPRESS_LINK_CONTROL_REGISTER LinkControl
;
906 PCI_EXPRESS_LINK_STATUS_REGISTER LinkStatus
;
907 PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER SlotCapabilities
;
908 PCI_EXPRESS_SLOT_CONTROL_REGISTER SlotControl
;
909 PCI_EXPRESS_SLOT_STATUS_REGISTER SlotStatus
;
910 PCI_EXPRESS_ROOT_CONTROL_REGISTER RootControl
;
911 PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER RootCapabilities
;
912 PCI_EXPRESS_ROOT_STATUS_REGISTER RootStatus
;
913 } PCI_EXPRESS_CAPABILITY
, *PPCI_EXPRESS_CAPABILITY
;
918 } PCI_EXPRESS_MRL_STATE
;
923 } PCI_EXPRESS_CARD_PRESENCE
;
929 } PCI_EXPRESS_INDICATOR_STATE
;
934 } PCI_EXPRESS_POWER_STATE
;
938 L0sAndL1EntrySupport
= 3
939 } PCI_EXPRESS_ASPM_SUPPORT
;
942 L0sAndL1EntryDisabled
,
946 } PCI_EXPRESS_ASPM_CONTROL
;
957 } PCI_EXPRESS_L0s_EXIT_LATENCY
;
968 } PCI_EXPRESS_L1_EXIT_LATENCY
;
971 PciExpressEndpoint
= 0,
972 PciExpressLegacyEndpoint
,
973 PciExpressRootPort
= 4,
974 PciExpressUpstreamSwitchPort
,
975 PciExpressDownstreamSwitchPort
,
976 PciExpressToPciXBridge
,
978 PciExpressRootComplexIntegratedEndpoint
,
979 PciExpressRootComplexEventCollector
980 } PCI_EXPRESS_DEVICE_TYPE
;
983 MaxPayload128Bytes
= 0,
989 } PCI_EXPRESS_MAX_PAYLOAD_SIZE
;
991 typedef union _PCI_EXPRESS_PME_REQUESTOR_ID
{
992 _ANONYMOUS_STRUCT
struct {
993 USHORT FunctionNumber
:3;
994 USHORT DeviceNumber
:5;
998 } PCI_EXPRESS_PME_REQUESTOR_ID
, *PPCI_EXPRESS_PME_REQUESTOR_ID
;
1000 typedef enum _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE
{
1001 ResourceTypeSingle
= 0,
1003 ResourceTypeExtendedCounterConfiguration
,
1004 ResourceTypeOverflow
,
1006 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE
;
1008 typedef struct _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
{
1009 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE Type
;
1013 ULONG ExtendedRegisterAddress
;
1019 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
, *PPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
;
1021 typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST
{
1023 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors
[ANYSIZE_ARRAY
];
1024 } PHYSICAL_COUNTER_RESOURCE_LIST
, *PPHYSICAL_COUNTER_RESOURCE_LIST
;
1027 (NTAPI
*PciPin2Line
)(
1028 IN
struct _BUS_HANDLER
*BusHandler
,
1029 IN
struct _BUS_HANDLER
*RootHandler
,
1030 IN PCI_SLOT_NUMBER SlotNumber
,
1031 IN PPCI_COMMON_CONFIG PciData
);
1034 (NTAPI
*PciLine2Pin
)(
1035 IN
struct _BUS_HANDLER
*BusHandler
,
1036 IN
struct _BUS_HANDLER
*RootHandler
,
1037 IN PCI_SLOT_NUMBER SlotNumber
,
1038 IN PPCI_COMMON_CONFIG PciNewData
,
1039 IN PPCI_COMMON_CONFIG PciOldData
);
1042 (NTAPI
*PciReadWriteConfig
)(
1043 IN
struct _BUS_HANDLER
*BusHandler
,
1044 IN PCI_SLOT_NUMBER Slot
,
1049 #define PCI_DATA_TAG ' ICP'
1050 #define PCI_DATA_VERSION 1
1052 typedef struct _PCIBUSDATA
{
1055 PciReadWriteConfig ReadConfig
;
1056 PciReadWriteConfig WriteConfig
;
1057 PciPin2Line Pin2Line
;
1058 PciLine2Pin Line2Pin
;
1059 PCI_SLOT_NUMBER ParentSlot
;
1061 } PCIBUSDATA
, *PPCIBUSDATA
;
1063 #ifndef _PCIINTRF_X_
1064 #define _PCIINTRF_X_
1067 (NTAPI
*PCI_READ_WRITE_CONFIG
)(
1076 (NTAPI
*PCI_PIN_TO_LINE
)(
1078 IN PPCI_COMMON_CONFIG PciData
);
1081 (NTAPI
*PCI_LINE_TO_PIN
)(
1083 IN PPCI_COMMON_CONFIG PciNewData
,
1084 IN PPCI_COMMON_CONFIG PciOldData
);
1087 (NTAPI
*PCI_ROOT_BUS_CAPABILITY
)(
1089 OUT PPCI_ROOT_BUS_HARDWARE_CAPABILITY HardwareCapability
);
1092 (NTAPI
*PCI_EXPRESS_WAKE_CONTROL
)(
1094 IN BOOLEAN EnableWake
);
1096 typedef struct _PCI_BUS_INTERFACE_STANDARD
{
1100 PINTERFACE_REFERENCE InterfaceReference
;
1101 PINTERFACE_DEREFERENCE InterfaceDereference
;
1102 PCI_READ_WRITE_CONFIG ReadConfig
;
1103 PCI_READ_WRITE_CONFIG WriteConfig
;
1104 PCI_PIN_TO_LINE PinToLine
;
1105 PCI_LINE_TO_PIN LineToPin
;
1106 PCI_ROOT_BUS_CAPABILITY RootBusCapability
;
1107 PCI_EXPRESS_WAKE_CONTROL ExpressWakeControl
;
1108 } PCI_BUS_INTERFACE_STANDARD
, *PPCI_BUS_INTERFACE_STANDARD
;
1110 #define PCI_BUS_INTERFACE_STANDARD_VERSION 1
1112 #endif /* _PCIINTRF_X_ */
1114 #if (NTDDI_VERSION >= NTDDI_WIN7)
1116 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX 0x00004000
1117 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX 0x00008000
1118 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \
1119 (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \
1120 FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX)
1122 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200
1123 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300
1124 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300
1128 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 0x00000200
1129 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 0x00000300
1130 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 0x00000300
1132 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL
1133 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL
1134 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK
1136 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1138 #define FILE_CHARACTERISTICS_PROPAGATED (FILE_REMOVABLE_MEDIA | \
1139 FILE_READ_ONLY_DEVICE | \
1140 FILE_FLOPPY_DISKETTE | \
1141 FILE_WRITE_ONCE_MEDIA | \
1142 FILE_DEVICE_SECURE_OPEN)
1144 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1145 ULONG AlignmentRequirement
;
1146 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1148 typedef struct _FILE_NAME_INFORMATION
{
1149 ULONG FileNameLength
;
1151 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1154 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1155 ULONG FileAttributes
;
1157 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1159 typedef struct _FILE_DISPOSITION_INFORMATION
{
1161 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1163 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1164 LARGE_INTEGER EndOfFile
;
1165 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1167 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1168 LARGE_INTEGER ValidDataLength
;
1169 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1171 typedef struct _FILE_FS_LABEL_INFORMATION
{
1172 ULONG VolumeLabelLength
;
1173 WCHAR VolumeLabel
[1];
1174 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
1176 typedef struct _FILE_FS_VOLUME_INFORMATION
{
1177 LARGE_INTEGER VolumeCreationTime
;
1178 ULONG VolumeSerialNumber
;
1179 ULONG VolumeLabelLength
;
1180 BOOLEAN SupportsObjects
;
1181 WCHAR VolumeLabel
[1];
1182 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
1184 typedef struct _FILE_FS_SIZE_INFORMATION
{
1185 LARGE_INTEGER TotalAllocationUnits
;
1186 LARGE_INTEGER AvailableAllocationUnits
;
1187 ULONG SectorsPerAllocationUnit
;
1188 ULONG BytesPerSector
;
1189 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
1191 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
{
1192 LARGE_INTEGER TotalAllocationUnits
;
1193 LARGE_INTEGER CallerAvailableAllocationUnits
;
1194 LARGE_INTEGER ActualAvailableAllocationUnits
;
1195 ULONG SectorsPerAllocationUnit
;
1196 ULONG BytesPerSector
;
1197 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
1199 typedef struct _FILE_FS_OBJECTID_INFORMATION
{
1201 UCHAR ExtendedInfo
[48];
1202 } FILE_FS_OBJECTID_INFORMATION
, *PFILE_FS_OBJECTID_INFORMATION
;
1204 typedef union _FILE_SEGMENT_ELEMENT
{
1206 ULONGLONG Alignment
;
1207 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1209 #define IOCTL_AVIO_ALLOCATE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1210 #define IOCTL_AVIO_FREE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1211 #define IOCTL_AVIO_MODIFY_STREAM CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1213 typedef enum _BUS_DATA_TYPE
{
1214 ConfigurationSpaceUndefined
= -1,
1222 PCMCIAConfiguration
,
1225 PNPISAConfiguration
,
1226 SgiInternalConfiguration
,
1228 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
1230 /* Some Server 2003 DDK definitions */
1231 #define PCI_INT_ROUTE_INTRF_STANDARD_VER 1
1234 (NTAPI
*PLEGACY_DEVICE_DETECTION_HANDLER
)(
1236 IN INTERFACE_TYPE LegacyBusType
,
1238 IN ULONG SlotNumber
,
1239 OUT PDEVICE_OBJECT
*PhysicalDeviceObject
);
1241 typedef struct _ROUTING_TOKEN
{
1245 } ROUTING_TOKEN
, *PROUTING_TOKEN
;
1248 (NTAPI
*PGET_INTERRUPT_ROUTING
)(
1249 IN PDEVICE_OBJECT Pdo
,
1252 OUT UCHAR
*InterruptLine
,
1253 OUT UCHAR
*InterruptPin
,
1254 OUT UCHAR
*ClassCode
,
1255 OUT UCHAR
*SubClassCode
,
1256 OUT PDEVICE_OBJECT
*ParentPdo
,
1257 OUT ROUTING_TOKEN
*RoutingToken
,
1261 (NTAPI
*PSET_INTERRUPT_ROUTING_TOKEN
)(
1262 IN PDEVICE_OBJECT Pdo
,
1263 IN PROUTING_TOKEN RoutingToken
);
1266 (NTAPI
*PUPDATE_INTERRUPT_LINE
)(
1267 IN PDEVICE_OBJECT Pdo
,
1268 IN UCHAR LineRegister
);
1270 typedef struct _INT_ROUTE_INTERFACE_STANDARD
{
1274 PINTERFACE_REFERENCE InterfaceReference
;
1275 PINTERFACE_DEREFERENCE InterfaceDereference
;
1276 PGET_INTERRUPT_ROUTING GetInterruptRouting
;
1277 PSET_INTERRUPT_ROUTING_TOKEN SetInterruptRoutingToken
;
1278 PUPDATE_INTERRUPT_LINE UpdateInterruptLine
;
1279 } INT_ROUTE_INTERFACE_STANDARD
, *PINT_ROUTE_INTERFACE_STANDARD
;
1281 typedef struct _LEGACY_DEVICE_DETECTION_INTERFACE
{
1285 PINTERFACE_REFERENCE InterfaceReference
;
1286 PINTERFACE_DEREFERENCE InterfaceDereference
;
1287 PLEGACY_DEVICE_DETECTION_HANDLER LegacyDeviceDetection
;
1288 } LEGACY_DEVICE_DETECTION_INTERFACE
, *PLEGACY_DEVICE_DETECTION_INTERFACE
;
1290 /* FIXME : These definitions don't exist in public headers */
1292 #define PCI_CB_INTRF_VERSION 1
1293 #define PCI_PME_INTRF_STANDARD_VER 1
1294 #define PNP_LOCATION_INTERFACE_VERSION 1
1296 DEFINE_GUID(GUID_PCI_CARDBUS_INTERFACE_PRIVATE
, 0xcca82f31, 0x54d6, 0x11d1, 0x82, 0x24, 0x00, 0xa0, 0xc9, 0x32, 0x43, 0x85);
1297 DEFINE_GUID(GUID_PCI_PME_INTERFACE
, 0xaac7e6ac, 0xbb0b, 0x11d2, 0xb4, 0x84, 0x00, 0xc0, 0x4f, 0x72, 0xde, 0x8b);
1300 (NTAPI
*PCARDBUSADD
)(
1301 IN PDEVICE_OBJECT DeviceObject
,
1302 IN OUT PVOID
*DeviceContext
);
1305 (NTAPI
*PCARDBUSDELETE
)(
1306 IN PVOID DeviceContext
);
1309 (NTAPI
*PCARDBUSPCIDISPATCH
)(
1310 IN PVOID DeviceContext
,
1314 (NTAPI
*PPME_SET_PME_ENABLE
)(
1315 IN PDEVICE_OBJECT Pdo
,
1316 IN BOOLEAN PmeEnable
);
1319 (NTAPI
*PPME_CLEAR_PME_STATUS
)(
1320 IN PDEVICE_OBJECT Pdo
);
1323 (NTAPI
*PPME_GET_INFORMATION
)(
1324 IN PDEVICE_OBJECT Pdo
,
1325 OUT PBOOLEAN PmeCapable
,
1326 OUT PBOOLEAN PmeStatus
,
1327 OUT PBOOLEAN PmeEnable
);
1329 typedef struct _PCI_CARDBUS_INTERFACE_PRIVATE
{
1333 PINTERFACE_REFERENCE InterfaceReference
;
1334 PINTERFACE_DEREFERENCE InterfaceDereference
;
1335 PDRIVER_OBJECT DriverObject
;
1336 PCARDBUSADD AddCardBus
;
1337 PCARDBUSDELETE DeleteCardBus
;
1338 PCARDBUSPCIDISPATCH DispatchPnp
;
1339 } PCI_CARDBUS_INTERFACE_PRIVATE
, *PPCI_CARDBUS_INTERFACE_PRIVATE
;
1341 typedef struct _PCI_PME_INTERFACE
{
1345 PINTERFACE_REFERENCE InterfaceReference
;
1346 PINTERFACE_DEREFERENCE InterfaceDereference
;
1347 PPME_GET_INFORMATION GetPmeInformation
;
1348 PPME_CLEAR_PME_STATUS ClearPmeStatus
;
1349 PPME_SET_PME_ENABLE UpdateEnable
;
1350 } PCI_PME_INTERFACE
, *PPCI_PME_INTERFACE
;
1352 /* Hardware Abstraction Layer Types */
1355 (NTAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
1359 typedef PBUS_HANDLER
1360 (FASTCALL
*pHalHandlerForBus
)(
1361 IN INTERFACE_TYPE InterfaceType
,
1362 IN ULONG BusNumber
);
1365 (FASTCALL
*pHalReferenceBusHandler
)(
1366 IN PBUS_HANDLER BusHandler
);
1368 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
1369 HalInstalledBusInformation
,
1370 HalProfileSourceInformation
,
1371 HalInformationClassUnused1
,
1372 HalPowerInformation
,
1373 HalProcessorSpeedInformation
,
1374 HalCallbackInformation
,
1375 HalMapRegisterInformation
,
1376 HalMcaLogInformation
,
1377 HalFrameBufferCachingInformation
,
1378 HalDisplayBiosInformation
,
1379 HalProcessorFeatureInformation
,
1380 HalNumaTopologyInterface
,
1381 HalErrorInformation
,
1382 HalCmcLogInformation
,
1383 HalCpeLogInformation
,
1384 HalQueryMcaInterface
,
1385 HalQueryAMLIIllegalIOPortAddresses
,
1386 HalQueryMaxHotPlugMemoryAddress
,
1387 HalPartitionIpiInterface
,
1388 HalPlatformInformation
,
1389 HalQueryProfileSourceList
,
1390 HalInitLogInformation
,
1391 HalFrequencyInformation
,
1392 HalProcessorBrandString
,
1393 HalHypervisorInformation
,
1394 HalPlatformTimerInformation
,
1395 HalAcpiAuditInformation
1396 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
1398 typedef enum _HAL_SET_INFORMATION_CLASS
{
1399 HalProfileSourceInterval
,
1400 HalProfileSourceInterruptHandler
,
1401 HalMcaRegisterDriver
,
1402 HalKernelErrorHandler
,
1403 HalCmcRegisterDriver
,
1404 HalCpeRegisterDriver
,
1408 HalGenerateCmcInterrupt
,
1409 HalProfileSourceTimerHandler
,
1411 HalProfileDpgoSourceInterruptHandler
1412 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
1415 (NTAPI
*pHalQuerySystemInformation
)(
1416 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
1417 IN ULONG BufferSize
,
1418 IN OUT PVOID Buffer
,
1419 OUT PULONG ReturnedLength
);
1422 (NTAPI
*pHalSetSystemInformation
)(
1423 IN HAL_SET_INFORMATION_CLASS InformationClass
,
1424 IN ULONG BufferSize
,
1428 (FASTCALL
*pHalExamineMBR
)(
1429 IN PDEVICE_OBJECT DeviceObject
,
1430 IN ULONG SectorSize
,
1431 IN ULONG MBRTypeIdentifier
,
1435 (FASTCALL
*pHalIoReadPartitionTable
)(
1436 IN PDEVICE_OBJECT DeviceObject
,
1437 IN ULONG SectorSize
,
1438 IN BOOLEAN ReturnRecognizedPartitions
,
1439 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
1442 (FASTCALL
*pHalIoSetPartitionInformation
)(
1443 IN PDEVICE_OBJECT DeviceObject
,
1444 IN ULONG SectorSize
,
1445 IN ULONG PartitionNumber
,
1446 IN ULONG PartitionType
);
1449 (FASTCALL
*pHalIoWritePartitionTable
)(
1450 IN PDEVICE_OBJECT DeviceObject
,
1451 IN ULONG SectorSize
,
1452 IN ULONG SectorsPerTrack
,
1453 IN ULONG NumberOfHeads
,
1454 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
1457 (NTAPI
*pHalQueryBusSlots
)(
1458 IN PBUS_HANDLER BusHandler
,
1459 IN ULONG BufferSize
,
1460 OUT PULONG SlotNumbers
,
1461 OUT PULONG ReturnedLength
);
1464 (NTAPI
*pHalInitPnpDriver
)(
1467 typedef struct _PM_DISPATCH_TABLE
{
1471 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
1474 (NTAPI
*pHalInitPowerManagement
)(
1475 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
1476 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
1478 typedef struct _DMA_ADAPTER
*
1479 (NTAPI
*pHalGetDmaAdapter
)(
1481 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
1482 OUT PULONG NumberOfMapRegisters
);
1485 (NTAPI
*pHalGetInterruptTranslator
)(
1486 IN INTERFACE_TYPE ParentInterfaceType
,
1487 IN ULONG ParentBusNumber
,
1488 IN INTERFACE_TYPE BridgeInterfaceType
,
1491 OUT PTRANSLATOR_INTERFACE Translator
,
1492 OUT PULONG BridgeBusNumber
);
1495 (NTAPI
*pHalStartMirroring
)(
1499 (NTAPI
*pHalEndMirroring
)(
1500 IN ULONG PassNumber
);
1503 (NTAPI
*pHalMirrorPhysicalMemory
)(
1504 IN PHYSICAL_ADDRESS PhysicalAddress
,
1505 IN LARGE_INTEGER NumberOfBytes
);
1508 (NTAPI
*pHalMirrorVerify
)(
1509 IN PHYSICAL_ADDRESS PhysicalAddress
,
1510 IN LARGE_INTEGER NumberOfBytes
);
1513 (NTAPI
*pHalTranslateBusAddress
)(
1514 IN INTERFACE_TYPE InterfaceType
,
1516 IN PHYSICAL_ADDRESS BusAddress
,
1517 IN OUT PULONG AddressSpace
,
1518 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
1521 (NTAPI
*pHalAssignSlotResources
)(
1522 IN PUNICODE_STRING RegistryPath
,
1523 IN PUNICODE_STRING DriverClassName OPTIONAL
,
1524 IN PDRIVER_OBJECT DriverObject
,
1525 IN PDEVICE_OBJECT DeviceObject
,
1526 IN INTERFACE_TYPE BusType
,
1528 IN ULONG SlotNumber
,
1529 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
1532 (NTAPI
*pHalHaltSystem
)(
1536 (NTAPI
*pHalResetDisplay
)(
1539 typedef struct _MAP_REGISTER_ENTRY
{
1541 BOOLEAN WriteToDevice
;
1542 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
1545 (NTAPI
*pHalVectorToIDTEntry
)(
1549 (NTAPI
*pHalFindBusAddressTranslation
)(
1550 IN PHYSICAL_ADDRESS BusAddress
,
1551 IN OUT PULONG AddressSpace
,
1552 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
1553 IN OUT PULONG_PTR Context
,
1554 IN BOOLEAN NextBus
);
1557 (NTAPI
*pHalEndOfBoot
)(
1561 (NTAPI
*pHalGetAcpiTable
)(
1563 IN PCSTR OemId OPTIONAL
,
1564 IN PCSTR OemTableId OPTIONAL
);
1568 (*pHalGetErrorCapList
)(
1569 IN OUT PULONG CapsListLength
,
1570 IN OUT PUCHAR ErrorCapList
);
1574 IN ULONG BufferLength
,
1579 (NTAPI
*PCI_ERROR_HANDLER_CALLBACK
)(
1583 (NTAPI
*pHalSetPciErrorHandlerCallback
)(
1584 IN PCI_ERROR_HANDLER_CALLBACK Callback
);
1586 #if 1 /* Not present in WDK 7600 */
1588 (FASTCALL
*pHalIoAssignDriveLetters
)(
1589 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
1590 IN PSTRING NtDeviceName
,
1591 OUT PUCHAR NtSystemPath
,
1592 OUT PSTRING NtSystemPathString
);
1597 pHalQuerySystemInformation HalQuerySystemInformation
;
1598 pHalSetSystemInformation HalSetSystemInformation
;
1599 pHalQueryBusSlots HalQueryBusSlots
;
1601 pHalExamineMBR HalExamineMBR
;
1602 #if 1 /* Not present in WDK 7600 */
1603 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
1605 pHalIoReadPartitionTable HalIoReadPartitionTable
;
1606 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
1607 pHalIoWritePartitionTable HalIoWritePartitionTable
;
1608 pHalHandlerForBus HalReferenceHandlerForBus
;
1609 pHalReferenceBusHandler HalReferenceBusHandler
;
1610 pHalReferenceBusHandler HalDereferenceBusHandler
;
1611 pHalInitPnpDriver HalInitPnpDriver
;
1612 pHalInitPowerManagement HalInitPowerManagement
;
1613 pHalGetDmaAdapter HalGetDmaAdapter
;
1614 pHalGetInterruptTranslator HalGetInterruptTranslator
;
1615 pHalStartMirroring HalStartMirroring
;
1616 pHalEndMirroring HalEndMirroring
;
1617 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
1618 pHalEndOfBoot HalEndOfBoot
;
1619 pHalMirrorVerify HalMirrorVerify
;
1620 pHalGetAcpiTable HalGetCachedAcpiTable
;
1621 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback
;
1623 pHalGetErrorCapList HalGetErrorCapList
;
1624 pHalInjectError HalInjectError
;
1626 } HAL_DISPATCH
, *PHAL_DISPATCH
;
1628 /* GCC/MSVC and WDK compatible declaration */
1629 extern NTKERNELAPI HAL_DISPATCH HalDispatchTable
;
1631 #if defined(_NTOSKRNL_) || defined(_BLDR_)
1632 #define HALDISPATCH (&HalDispatchTable)
1634 /* This is a WDK compatibility definition */
1635 #define HalDispatchTable (&HalDispatchTable)
1636 #define HALDISPATCH HalDispatchTable
1639 #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
1640 #define HalDispatchTableVersion HALDISPATCH->Version
1641 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
1642 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
1643 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
1644 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
1645 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
1646 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
1647 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
1648 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
1649 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
1650 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
1651 #define HalStartMirroring HALDISPATCH->HalStartMirroring
1652 #define HalEndMirroring HALDISPATCH->HalEndMirroring
1653 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
1654 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
1655 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
1656 #define HalGetCachedAcpiTable HALDISPATCH->HalGetCachedAcpiTable
1657 #define HalSetPciErrorHandlerCallback HALDISPATCH->HalSetPciErrorHandlerCallback
1659 #define HalGetErrorCapList HALDISPATCH->HalGetErrorCapList
1660 #define HalInjectError HALDISPATCH->HalInjectError
1663 typedef struct _HAL_BUS_INFORMATION
{
1664 INTERFACE_TYPE BusType
;
1665 BUS_DATA_TYPE ConfigurationType
;
1668 } HAL_BUS_INFORMATION
, *PHAL_BUS_INFORMATION
;
1670 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
{
1671 KPROFILE_SOURCE Source
;
1674 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
1676 typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX
{
1677 KPROFILE_SOURCE Source
;
1680 ULONG_PTR DefInterval
;
1681 ULONG_PTR MaxInterval
;
1682 ULONG_PTR MinInterval
;
1683 } HAL_PROFILE_SOURCE_INFORMATION_EX
, *PHAL_PROFILE_SOURCE_INFORMATION_EX
;
1685 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
{
1686 KPROFILE_SOURCE Source
;
1688 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
1690 typedef struct _HAL_PROFILE_SOURCE_LIST
{
1691 KPROFILE_SOURCE Source
;
1693 } HAL_PROFILE_SOURCE_LIST
, *PHAL_PROFILE_SOURCE_LIST
;
1695 typedef enum _HAL_DISPLAY_BIOS_INFORMATION
{
1696 HalDisplayInt10Bios
,
1697 HalDisplayEmulatedBios
,
1699 } HAL_DISPLAY_BIOS_INFORMATION
, *PHAL_DISPLAY_BIOS_INFORMATION
;
1701 typedef struct _HAL_POWER_INFORMATION
{
1703 } HAL_POWER_INFORMATION
, *PHAL_POWER_INFORMATION
;
1705 typedef struct _HAL_PROCESSOR_SPEED_INFO
{
1706 ULONG ProcessorSpeed
;
1707 } HAL_PROCESSOR_SPEED_INFORMATION
, *PHAL_PROCESSOR_SPEED_INFORMATION
;
1709 typedef struct _HAL_CALLBACKS
{
1710 PCALLBACK_OBJECT SetSystemInformation
;
1711 PCALLBACK_OBJECT BusCheck
;
1712 } HAL_CALLBACKS
, *PHAL_CALLBACKS
;
1714 typedef struct _HAL_PROCESSOR_FEATURE
{
1715 ULONG UsableFeatureBits
;
1716 } HAL_PROCESSOR_FEATURE
;
1719 (NTAPI
*PHALIOREADWRITEHANDLER
)(
1723 IN OUT PULONG pdwData
);
1725 typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST
{
1728 ULONG OSVersionTrigger
;
1729 PHALIOREADWRITEHANDLER IOHandler
;
1730 } HAL_AMLI_BAD_IO_ADDRESS_LIST
, *PHAL_AMLI_BAD_IO_ADDRESS_LIST
;
1732 #if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
1735 (NTAPI
*PHALMCAINTERFACELOCK
)(
1739 (NTAPI
*PHALMCAINTERFACEUNLOCK
)(
1743 (NTAPI
*PHALMCAINTERFACEREADREGISTER
)(
1744 IN UCHAR BankNumber
,
1745 IN OUT PVOID Exception
);
1747 typedef struct _HAL_MCA_INTERFACE
{
1748 PHALMCAINTERFACELOCK Lock
;
1749 PHALMCAINTERFACEUNLOCK Unlock
;
1750 PHALMCAINTERFACEREADREGISTER ReadRegister
;
1751 } HAL_MCA_INTERFACE
;
1754 ApicDestinationModePhysical
= 1,
1755 ApicDestinationModeLogicalFlat
,
1756 ApicDestinationModeLogicalClustered
,
1757 ApicDestinationModeUnknown
1758 } HAL_APIC_DESTINATION_MODE
, *PHAL_APIC_DESTINATION_MODE
;
1760 #if defined(_AMD64_)
1762 struct _KTRAP_FRAME
;
1763 struct _KEXCEPTION_FRAME
;
1765 typedef ERROR_SEVERITY
1766 (NTAPI
*PDRIVER_EXCPTN_CALLBACK
)(
1768 IN
struct _KTRAP_FRAME
*TrapFrame
,
1769 IN
struct _KEXCEPTION_FRAME
*ExceptionFrame
,
1770 IN PMCA_EXCEPTION Exception
);
1774 #if defined(_X86_) || defined(_IA64_)
1781 (NTAPI
*PDRIVER_EXCPTN_CALLBACK
)(
1783 IN PMCA_EXCEPTION BankLog
);
1786 typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK
;
1788 typedef struct _MCA_DRIVER_INFO
{
1789 PDRIVER_MCA_EXCEPTION_CALLBACK ExceptionCallback
;
1790 PKDEFERRED_ROUTINE DpcCallback
;
1791 PVOID DeviceContext
;
1792 } MCA_DRIVER_INFO
, *PMCA_DRIVER_INFO
;
1794 typedef struct _HAL_ERROR_INFO
{
1798 ULONG McaPreviousEventsCount
;
1799 ULONG McaCorrectedEventsCount
;
1800 ULONG McaKernelDeliveryFails
;
1801 ULONG McaDriverDpcQueueFails
;
1804 ULONG CmcPollingInterval
;
1805 ULONG CmcInterruptsCount
;
1806 ULONG CmcKernelDeliveryFails
;
1807 ULONG CmcDriverDpcQueueFails
;
1808 ULONG CmcGetStateFails
;
1809 ULONG CmcClearStateFails
;
1813 ULONG CpePollingInterval
;
1814 ULONG CpeInterruptsCount
;
1815 ULONG CpeKernelDeliveryFails
;
1816 ULONG CpeDriverDpcQueueFails
;
1817 ULONG CpeGetStateFails
;
1818 ULONG CpeClearStateFails
;
1819 ULONG CpeInterruptSources
;
1821 ULONGLONG KernelReserved
[4];
1822 } HAL_ERROR_INFO
, *PHAL_ERROR_INFO
;
1824 #define HAL_MCE_INTERRUPTS_BASED ((ULONG)-1)
1825 #define HAL_MCE_DISABLED ((ULONG)0)
1827 #define HAL_CMC_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
1828 #define HAL_CMC_DISABLED HAL_MCE_DISABLED
1830 #define HAL_CPE_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
1831 #define HAL_CPE_DISABLED HAL_MCE_DISABLED
1833 #define HAL_MCA_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
1834 #define HAL_MCA_DISABLED HAL_MCE_DISABLED
1837 (NTAPI
*PDRIVER_CMC_EXCEPTION_CALLBACK
)(
1839 IN PCMC_EXCEPTION CmcLog
);
1842 (NTAPI
*PDRIVER_CPE_EXCEPTION_CALLBACK
)(
1844 IN PCPE_EXCEPTION CmcLog
);
1846 typedef struct _CMC_DRIVER_INFO
{
1847 PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback
;
1848 PKDEFERRED_ROUTINE DpcCallback
;
1849 PVOID DeviceContext
;
1850 } CMC_DRIVER_INFO
, *PCMC_DRIVER_INFO
;
1852 typedef struct _CPE_DRIVER_INFO
{
1853 PDRIVER_CPE_EXCEPTION_CALLBACK ExceptionCallback
;
1854 PKDEFERRED_ROUTINE DpcCallback
;
1855 PVOID DeviceContext
;
1856 } CPE_DRIVER_INFO
, *PCPE_DRIVER_INFO
;
1858 #endif // defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
1863 (*HALSENDCROSSPARTITIONIPI
)(
1864 IN USHORT ProcessorID
,
1865 IN UCHAR HardwareVector
);
1868 (*HALRESERVECROSSPARTITIONINTERRUPTVECTOR
)(
1871 IN OUT PGROUP_AFFINITY Affinity
,
1872 OUT PUCHAR HardwareVector
);
1875 (*HALFREECROSSPARTITIONINTERRUPTVECTOR
)(
1877 IN PGROUP_AFFINITY Affinity
);
1879 typedef struct _HAL_CROSS_PARTITION_IPI_INTERFACE
{
1880 HALSENDCROSSPARTITIONIPI HalSendCrossPartitionIpi
;
1881 HALRESERVECROSSPARTITIONINTERRUPTVECTOR HalReserveCrossPartitionInterruptVector
;
1882 HALFREECROSSPARTITIONINTERRUPTVECTOR HalFreeCrossPartitionInterruptVector
;
1883 } HAL_CROSS_PARTITION_IPI_INTERFACE
;
1885 #define HAL_CROSS_PARTITION_IPI_INTERFACE_MINIMUM_SIZE \
1886 FIELD_OFFSET(HAL_CROSS_PARTITION_IPI_INTERFACE, \
1887 HalFreeCrossPartitionInterruptVector)
1889 #endif /* defined(_IA64_) */
1891 typedef struct _HAL_PLATFORM_INFORMATION
{
1892 ULONG PlatformFlags
;
1893 } HAL_PLATFORM_INFORMATION
, *PHAL_PLATFORM_INFORMATION
;
1895 #define HAL_PLATFORM_DISABLE_WRITE_COMBINING 0x01L
1896 #define HAL_PLATFORM_DISABLE_PTCG 0x04L
1897 #define HAL_PLATFORM_DISABLE_UC_MAIN_MEMORY 0x08L
1898 #define HAL_PLATFORM_ENABLE_WRITE_COMBINING_MMIO 0x10L
1899 #define HAL_PLATFORM_ACPI_TABLES_CACHED 0x20L
1901 /******************************************************************************
1903 ******************************************************************************/
1905 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
1906 #define NX_SUPPORT_POLICY_ALWAYSON 1
1907 #define NX_SUPPORT_POLICY_OPTIN 2
1908 #define NX_SUPPORT_POLICY_OPTOUT 3
1911 (NTAPI EXPAND_STACK_CALLOUT
)(
1912 IN PVOID Parameter OPTIONAL
);
1913 typedef EXPAND_STACK_CALLOUT
*PEXPAND_STACK_CALLOUT
;
1916 (NTAPI
*PTIMER_APC_ROUTINE
)(
1917 IN PVOID TimerContext
,
1918 IN ULONG TimerLowValue
,
1919 IN LONG TimerHighValue
);
1921 typedef enum _TIMER_SET_INFORMATION_CLASS
{
1922 TimerSetCoalescableTimer
,
1924 } TIMER_SET_INFORMATION_CLASS
;
1926 #if (NTDDI_VERSION >= NTDDI_WIN7)
1927 typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO
{
1928 IN LARGE_INTEGER DueTime
;
1929 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
;
1930 IN PVOID TimerContext OPTIONAL
;
1931 IN
struct _COUNTED_REASON_CONTEXT
*WakeContext OPTIONAL
;
1932 IN ULONG Period OPTIONAL
;
1933 IN ULONG TolerableDelay
;
1934 OUT PBOOLEAN PreviousState OPTIONAL
;
1935 } TIMER_SET_COALESCABLE_TIMER_INFO
, *PTIMER_SET_COALESCABLE_TIMER_INFO
;
1936 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1938 #define XSTATE_LEGACY_FLOATING_POINT 0
1939 #define XSTATE_LEGACY_SSE 1
1940 #define XSTATE_GSSE 2
1942 #define XSTATE_MASK_LEGACY_FLOATING_POINT (1i64 << (XSTATE_LEGACY_FLOATING_POINT))
1943 #define XSTATE_MASK_LEGACY_SSE (1i64 << (XSTATE_LEGACY_SSE))
1944 #define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
1945 #define XSTATE_MASK_GSSE (1i64 << (XSTATE_GSSE))
1947 #define MAXIMUM_XSTATE_FEATURES 64
1949 typedef struct _XSTATE_FEATURE
{
1952 } XSTATE_FEATURE
, *PXSTATE_FEATURE
;
1954 typedef struct _XSTATE_CONFIGURATION
{
1955 ULONG64 EnabledFeatures
;
1957 ULONG OptimizedSave
:1;
1958 XSTATE_FEATURE Features
[MAXIMUM_XSTATE_FEATURES
];
1959 } XSTATE_CONFIGURATION
, *PXSTATE_CONFIGURATION
;
1961 #define MAX_WOW64_SHARED_ENTRIES 16
1963 typedef struct _KUSER_SHARED_DATA
{
1964 ULONG TickCountLowDeprecated
;
1965 ULONG TickCountMultiplier
;
1966 volatile KSYSTEM_TIME InterruptTime
;
1967 volatile KSYSTEM_TIME SystemTime
;
1968 volatile KSYSTEM_TIME TimeZoneBias
;
1969 USHORT ImageNumberLow
;
1970 USHORT ImageNumberHigh
;
1971 WCHAR NtSystemRoot
[260];
1972 ULONG MaxStackTraceDepth
;
1973 ULONG CryptoExponent
;
1975 ULONG LargePageMinimum
;
1977 NT_PRODUCT_TYPE NtProductType
;
1978 BOOLEAN ProductTypeIsValid
;
1979 ULONG NtMajorVersion
;
1980 ULONG NtMinorVersion
;
1981 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
1984 volatile ULONG TimeSlip
;
1985 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
1986 ULONG AltArchitecturePad
[1];
1987 LARGE_INTEGER SystemExpirationDate
;
1989 BOOLEAN KdDebuggerEnabled
;
1990 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
1991 UCHAR NXSupportPolicy
;
1993 volatile ULONG ActiveConsoleId
;
1994 volatile ULONG DismountCount
;
1995 ULONG ComPlusPackage
;
1996 ULONG LastSystemRITEventTickCount
;
1997 ULONG NumberOfPhysicalPages
;
1998 BOOLEAN SafeBootMode
;
1999 #if (NTDDI_VERSION >= NTDDI_WIN7)
2000 _ANONYMOUS_UNION
union {
2002 _ANONYMOUS_STRUCT
struct {
2003 UCHAR TscQpcEnabled
:1;
2004 UCHAR TscQpcSpareFlag
:1;
2005 UCHAR TscQpcShift
:6;
2010 #if (NTDDI_VERSION >= NTDDI_VISTA)
2011 _ANONYMOUS_UNION
union {
2012 ULONG SharedDataFlags
;
2013 _ANONYMOUS_STRUCT
struct {
2014 ULONG DbgErrorPortPresent
:1;
2015 ULONG DbgElevationEnabled
:1;
2016 ULONG DbgVirtEnabled
:1;
2017 ULONG DbgInstallerDetectEnabled
:1;
2018 ULONG DbgSystemDllRelocated
:1;
2019 ULONG DbgDynProcessorEnabled
:1;
2020 ULONG DbgSEHValidationEnabled
:1;
2027 ULONG DataFlagsPad
[1];
2028 ULONGLONG TestRetInstruction
;
2030 ULONG SystemCallReturn
;
2031 ULONGLONG SystemCallPad
[3];
2032 _ANONYMOUS_UNION
union {
2033 volatile KSYSTEM_TIME TickCount
;
2034 volatile ULONG64 TickCountQuad
;
2035 _ANONYMOUS_STRUCT
struct {
2036 ULONG ReservedTickCountOverlay
[3];
2037 ULONG TickCountPad
[1];
2042 #if (NTDDI_VERSION >= NTDDI_WS03)
2043 LONGLONG ConsoleSessionForegroundProcessId
;
2044 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
2046 #if (NTDDI_VERSION >= NTDDI_VISTA)
2047 #if (NTDDI_VERSION >= NTDDI_WIN7)
2048 USHORT UserModeGlobalLogger
[16];
2050 USHORT UserModeGlobalLogger
[8];
2051 ULONG HeapTracingPid
[2];
2052 ULONG CritSecTracingPid
[2];
2054 ULONG ImageFileExecutionOptions
;
2055 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
2056 ULONG LangGenerationCount
;
2058 /* 4 bytes padding */
2060 ULONGLONG Reserved5
;
2061 volatile ULONG64 InterruptTimeBias
;
2063 #if (NTDDI_VERSION >= NTDDI_WIN7)
2064 volatile ULONG64 TscQpcBias
;
2065 volatile ULONG ActiveProcessorCount
;
2066 volatile USHORT ActiveGroupCount
;
2068 volatile ULONG AitSamplingValue
;
2069 volatile ULONG AppCompatFlag
;
2070 ULONGLONG SystemDllNativeRelocation
;
2071 ULONG SystemDllWowRelocation
;
2073 XSTATE_CONFIGURATION XState
;
2075 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
2077 #if (NTDDI_VERSION >= NTDDI_VISTA)
2078 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
2079 #elif (NTDDI_VERSION >= NTDDI_WINXP)
2080 extern NTSYSAPI CCHAR KeNumberProcessors
;
2082 extern PCCHAR KeNumberProcessors
;
2086 /******************************************************************************
2087 * Kernel Debugger Types *
2088 ******************************************************************************/
2089 typedef struct _DEBUG_DEVICE_ADDRESS
{
2093 PUCHAR TranslatedAddress
;
2095 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
2097 typedef struct _DEBUG_MEMORY_REQUIREMENTS
{
2098 PHYSICAL_ADDRESS Start
;
2099 PHYSICAL_ADDRESS MaxEnd
;
2100 PVOID VirtualAddress
;
2104 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
2106 typedef struct _DEBUG_DEVICE_DESCRIPTOR
{
2115 BOOLEAN Initialized
;
2117 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
2118 DEBUG_MEMORY_REQUIREMENTS Memory
;
2119 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
2122 (NTAPI
*pKdSetupPciDeviceForDebugging
)(
2123 IN PVOID LoaderBlock OPTIONAL
,
2124 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
2127 (NTAPI
*pKdReleasePciDeviceForDebugging
)(
2128 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
2131 (NTAPI
*pKdGetAcpiTablePhase0
)(
2132 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
2133 IN ULONG Signature
);
2136 (NTAPI
*pKdCheckPowerButton
)(
2139 #if (NTDDI_VERSION >= NTDDI_VISTA)
2141 (NTAPI
*pKdMapPhysicalMemory64
)(
2142 IN PHYSICAL_ADDRESS PhysicalAddress
,
2143 IN ULONG NumberPages
,
2144 IN BOOLEAN FlushCurrentTLB
);
2147 (NTAPI
*pKdUnmapVirtualAddress
)(
2148 IN PVOID VirtualAddress
,
2149 IN ULONG NumberPages
,
2150 IN BOOLEAN FlushCurrentTLB
);
2153 (NTAPI
*pKdMapPhysicalMemory64
)(
2154 IN PHYSICAL_ADDRESS PhysicalAddress
,
2155 IN ULONG NumberPages
);
2158 (NTAPI
*pKdUnmapVirtualAddress
)(
2159 IN PVOID VirtualAddress
,
2160 IN ULONG NumberPages
);
2164 (NTAPI
*pKdGetPciDataByOffset
)(
2166 IN ULONG SlotNumber
,
2172 (NTAPI
*pKdSetPciDataByOffset
)(
2174 IN ULONG SlotNumber
,
2178 /******************************************************************************
2179 * Memory manager Types *
2180 ******************************************************************************/
2182 typedef struct _PHYSICAL_MEMORY_RANGE
{
2183 PHYSICAL_ADDRESS BaseAddress
;
2184 LARGE_INTEGER NumberOfBytes
;
2185 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
2188 (NTAPI
*PMM_ROTATE_COPY_CALLBACK_FUNCTION
)(
2189 IN PMDL DestinationMdl
,
2193 typedef enum _MM_ROTATE_DIRECTION
{
2195 MmToFrameBufferNoCopy
,
2197 MmToRegularMemoryNoCopy
,
2198 MmMaximumRotateDirection
2199 } MM_ROTATE_DIRECTION
, *PMM_ROTATE_DIRECTION
;
2202 /******************************************************************************
2203 * Process Manager Types *
2204 ******************************************************************************/
2206 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
2207 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
2208 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
2209 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
2210 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
2212 typedef struct _QUOTA_LIMITS
{
2213 SIZE_T PagedPoolLimit
;
2214 SIZE_T NonPagedPoolLimit
;
2215 SIZE_T MinimumWorkingSetSize
;
2216 SIZE_T MaximumWorkingSetSize
;
2217 SIZE_T PagefileLimit
;
2218 LARGE_INTEGER TimeLimit
;
2219 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
2221 typedef union _RATE_QUOTA_LIMIT
{
2223 _ANONYMOUS_STRUCT
struct {
2224 ULONG RatePercent
:7;
2227 } RATE_QUOTA_LIMIT
, *PRATE_QUOTA_LIMIT
;
2229 typedef struct _QUOTA_LIMITS_EX
{
2230 SIZE_T PagedPoolLimit
;
2231 SIZE_T NonPagedPoolLimit
;
2232 SIZE_T MinimumWorkingSetSize
;
2233 SIZE_T MaximumWorkingSetSize
;
2234 SIZE_T PagefileLimit
;
2235 LARGE_INTEGER TimeLimit
;
2236 SIZE_T WorkingSetLimit
;
2241 RATE_QUOTA_LIMIT CpuRateLimit
;
2242 } QUOTA_LIMITS_EX
, *PQUOTA_LIMITS_EX
;
2244 typedef struct _IO_COUNTERS
{
2245 ULONGLONG ReadOperationCount
;
2246 ULONGLONG WriteOperationCount
;
2247 ULONGLONG OtherOperationCount
;
2248 ULONGLONG ReadTransferCount
;
2249 ULONGLONG WriteTransferCount
;
2250 ULONGLONG OtherTransferCount
;
2251 } IO_COUNTERS
, *PIO_COUNTERS
;
2253 typedef struct _VM_COUNTERS
{
2254 SIZE_T PeakVirtualSize
;
2256 ULONG PageFaultCount
;
2257 SIZE_T PeakWorkingSetSize
;
2258 SIZE_T WorkingSetSize
;
2259 SIZE_T QuotaPeakPagedPoolUsage
;
2260 SIZE_T QuotaPagedPoolUsage
;
2261 SIZE_T QuotaPeakNonPagedPoolUsage
;
2262 SIZE_T QuotaNonPagedPoolUsage
;
2263 SIZE_T PagefileUsage
;
2264 SIZE_T PeakPagefileUsage
;
2265 } VM_COUNTERS
, *PVM_COUNTERS
;
2267 typedef struct _VM_COUNTERS_EX
{
2268 SIZE_T PeakVirtualSize
;
2270 ULONG PageFaultCount
;
2271 SIZE_T PeakWorkingSetSize
;
2272 SIZE_T WorkingSetSize
;
2273 SIZE_T QuotaPeakPagedPoolUsage
;
2274 SIZE_T QuotaPagedPoolUsage
;
2275 SIZE_T QuotaPeakNonPagedPoolUsage
;
2276 SIZE_T QuotaNonPagedPoolUsage
;
2277 SIZE_T PagefileUsage
;
2278 SIZE_T PeakPagefileUsage
;
2279 SIZE_T PrivateUsage
;
2280 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
2282 #define MAX_HW_COUNTERS 16
2283 #define THREAD_PROFILING_FLAG_DISPATCH 0x00000001
2285 typedef enum _HARDWARE_COUNTER_TYPE
{
2287 MaxHardwareCounterType
2288 } HARDWARE_COUNTER_TYPE
, *PHARDWARE_COUNTER_TYPE
;
2290 typedef struct _HARDWARE_COUNTER
{
2291 HARDWARE_COUNTER_TYPE Type
;
2294 } HARDWARE_COUNTER
, *PHARDWARE_COUNTER
;
2296 typedef struct _POOLED_USAGE_AND_LIMITS
{
2297 SIZE_T PeakPagedPoolUsage
;
2298 SIZE_T PagedPoolUsage
;
2299 SIZE_T PagedPoolLimit
;
2300 SIZE_T PeakNonPagedPoolUsage
;
2301 SIZE_T NonPagedPoolUsage
;
2302 SIZE_T NonPagedPoolLimit
;
2303 SIZE_T PeakPagefileUsage
;
2304 SIZE_T PagefileUsage
;
2305 SIZE_T PagefileLimit
;
2306 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
2308 typedef struct _PROCESS_ACCESS_TOKEN
{
2311 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
2313 #define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS 0x00000003UL
2314 #define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1))
2316 typedef struct _PROCESS_EXCEPTION_PORT
{
2317 IN HANDLE ExceptionPortHandle
;
2318 IN OUT ULONG StateFlags
;
2319 } PROCESS_EXCEPTION_PORT
, *PPROCESS_EXCEPTION_PORT
;
2322 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
2324 IN HANDLE ProcessId
,
2327 typedef struct _PS_CREATE_NOTIFY_INFO
{
2329 _ANONYMOUS_UNION
union {
2331 _ANONYMOUS_STRUCT
struct {
2332 IN ULONG FileOpenNameAvailable
:1;
2333 IN ULONG Reserved
:31;
2336 IN HANDLE ParentProcessId
;
2337 IN CLIENT_ID CreatingThreadId
;
2338 IN OUT
struct _FILE_OBJECT
*FileObject
;
2339 IN PCUNICODE_STRING ImageFileName
;
2340 IN PCUNICODE_STRING CommandLine OPTIONAL
;
2341 IN OUT NTSTATUS CreationStatus
;
2342 } PS_CREATE_NOTIFY_INFO
, *PPS_CREATE_NOTIFY_INFO
;
2345 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE_EX
)(
2346 IN OUT PEPROCESS Process
,
2347 IN HANDLE ProcessId
,
2348 IN PPS_CREATE_NOTIFY_INFO CreateInfo OPTIONAL
);
2351 (NTAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
2352 IN HANDLE ProcessId
,
2356 #define IMAGE_ADDRESSING_MODE_32BIT 3
2358 typedef struct _IMAGE_INFO
{
2359 _ANONYMOUS_UNION
union {
2361 _ANONYMOUS_STRUCT
struct {
2362 ULONG ImageAddressingMode
:8;
2363 ULONG SystemModeImage
:1;
2364 ULONG ImageMappedToAllPids
:1;
2365 ULONG ExtendedInfoPresent
:1;
2370 ULONG ImageSelector
;
2372 ULONG ImageSectionNumber
;
2373 } IMAGE_INFO
, *PIMAGE_INFO
;
2375 typedef struct _IMAGE_INFO_EX
{
2377 IMAGE_INFO ImageInfo
;
2378 struct _FILE_OBJECT
*FileObject
;
2379 } IMAGE_INFO_EX
, *PIMAGE_INFO_EX
;
2382 (NTAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
2383 IN PUNICODE_STRING FullImageName
,
2384 IN HANDLE ProcessId
,
2385 IN PIMAGE_INFO ImageInfo
);
2387 #define THREAD_CSWITCH_PMU_DISABLE FALSE
2388 #define THREAD_CSWITCH_PMU_ENABLE TRUE
2390 #define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001
2392 #define PROCESS_HANDLE_TRACING_MAX_STACKS 16
2394 typedef struct _NT_TIB
{
2395 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
2399 _ANONYMOUS_UNION
union {
2403 PVOID ArbitraryUserPointer
;
2404 struct _NT_TIB
*Self
;
2407 typedef struct _NT_TIB32
{
2408 ULONG ExceptionList
;
2412 _ANONYMOUS_UNION
union {
2416 ULONG ArbitraryUserPointer
;
2418 } NT_TIB32
,*PNT_TIB32
;
2420 typedef struct _NT_TIB64
{
2421 ULONG64 ExceptionList
;
2424 ULONG64 SubSystemTib
;
2425 _ANONYMOUS_UNION
union {
2429 ULONG64 ArbitraryUserPointer
;
2431 } NT_TIB64
,*PNT_TIB64
;
2433 typedef enum _PROCESSINFOCLASS
{
2434 ProcessBasicInformation
,
2439 ProcessBasePriority
,
2440 ProcessRaisePriority
,
2442 ProcessExceptionPort
,
2444 ProcessLdtInformation
,
2446 ProcessDefaultHardErrorMode
,
2447 ProcessIoPortHandlers
,
2448 ProcessPooledUsageAndLimits
,
2449 ProcessWorkingSetWatch
,
2450 ProcessUserModeIOPL
,
2451 ProcessEnableAlignmentFaultFixup
,
2452 ProcessPriorityClass
,
2453 ProcessWx86Information
,
2455 ProcessAffinityMask
,
2456 ProcessPriorityBoost
,
2458 ProcessSessionInformation
,
2459 ProcessForegroundInformation
,
2460 ProcessWow64Information
,
2461 ProcessImageFileName
,
2462 ProcessLUIDDeviceMapsEnabled
,
2463 ProcessBreakOnTermination
,
2464 ProcessDebugObjectHandle
,
2466 ProcessHandleTracing
,
2468 ProcessExecuteFlags
,
2469 ProcessTlsInformation
,
2471 ProcessImageInformation
,
2473 ProcessPagePriority
,
2474 ProcessInstrumentationCallback
,
2475 ProcessThreadStackAllocation
,
2476 ProcessWorkingSetWatchEx
,
2477 ProcessImageFileNameWin32
,
2478 ProcessImageFileMapping
,
2479 ProcessAffinityUpdateMode
,
2480 ProcessMemoryAllocationMode
,
2481 ProcessGroupInformation
,
2482 ProcessTokenVirtualizationEnabled
,
2483 ProcessConsoleHostProcess
,
2484 ProcessWindowInformation
,
2488 typedef enum _THREADINFOCLASS
{
2489 ThreadBasicInformation
,
2494 ThreadImpersonationToken
,
2495 ThreadDescriptorTableEntry
,
2496 ThreadEnableAlignmentFaultFixup
,
2497 ThreadEventPair_Reusable
,
2498 ThreadQuerySetWin32StartAddress
,
2500 ThreadPerformanceCount
,
2501 ThreadAmILastThread
,
2502 ThreadIdealProcessor
,
2503 ThreadPriorityBoost
,
2504 ThreadSetTlsArrayAddress
,
2506 ThreadHideFromDebugger
,
2507 ThreadBreakOnTermination
,
2508 ThreadSwitchLegacyState
,
2510 ThreadLastSystemCall
,
2514 ThreadActualBasePriority
,
2515 ThreadTebInformation
,
2519 ThreadGroupInformation
,
2520 ThreadUmsInformation
,
2521 ThreadCounterProfiling
,
2522 ThreadIdealProcessorEx
,
2526 typedef struct _PAGE_PRIORITY_INFORMATION
{
2528 } PAGE_PRIORITY_INFORMATION
, *PPAGE_PRIORITY_INFORMATION
;
2530 typedef struct _PROCESS_WS_WATCH_INFORMATION
{
2533 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
2535 typedef struct _PROCESS_BASIC_INFORMATION
{
2536 NTSTATUS ExitStatus
;
2537 struct _PEB
*PebBaseAddress
;
2538 ULONG_PTR AffinityMask
;
2539 KPRIORITY BasePriority
;
2540 ULONG_PTR UniqueProcessId
;
2541 ULONG_PTR InheritedFromUniqueProcessId
;
2542 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
2544 typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION
{
2546 PROCESS_BASIC_INFORMATION BasicInfo
;
2547 _ANONYMOUS_UNION
union {
2549 _ANONYMOUS_STRUCT
struct {
2550 ULONG IsProtectedProcess
:1;
2551 ULONG IsWow64Process
:1;
2552 ULONG IsProcessDeleting
:1;
2553 ULONG IsCrossSessionCreate
:1;
2557 } PROCESS_EXTENDED_BASIC_INFORMATION
, *PPROCESS_EXTENDED_BASIC_INFORMATION
;
2559 typedef struct _PROCESS_DEVICEMAP_INFORMATION
{
2560 _ANONYMOUS_UNION
union {
2562 HANDLE DirectoryHandle
;
2566 UCHAR DriveType
[32];
2569 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
2571 typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX
{
2572 _ANONYMOUS_UNION
union {
2574 HANDLE DirectoryHandle
;
2578 UCHAR DriveType
[32];
2582 } PROCESS_DEVICEMAP_INFORMATION_EX
, *PPROCESS_DEVICEMAP_INFORMATION_EX
;
2584 typedef struct _PROCESS_SESSION_INFORMATION
{
2586 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
2588 typedef struct _PROCESS_HANDLE_TRACING_ENABLE
{
2590 } PROCESS_HANDLE_TRACING_ENABLE
, *PPROCESS_HANDLE_TRACING_ENABLE
;
2592 typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX
{
2595 } PROCESS_HANDLE_TRACING_ENABLE_EX
, *PPROCESS_HANDLE_TRACING_ENABLE_EX
;
2597 typedef struct _PROCESS_HANDLE_TRACING_ENTRY
{
2601 PVOID Stacks
[PROCESS_HANDLE_TRACING_MAX_STACKS
];
2602 } PROCESS_HANDLE_TRACING_ENTRY
, *PPROCESS_HANDLE_TRACING_ENTRY
;
2604 typedef struct _PROCESS_HANDLE_TRACING_QUERY
{
2607 PROCESS_HANDLE_TRACING_ENTRY HandleTrace
[1];
2608 } PROCESS_HANDLE_TRACING_QUERY
, *PPROCESS_HANDLE_TRACING_QUERY
;
2610 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess
;
2613 /******************************************************************************
2614 * Runtime Library Types *
2615 ******************************************************************************/
2618 #ifndef _RTL_RUN_ONCE_DEF
2619 #define _RTL_RUN_ONCE_DEF
2621 #define RTL_RUN_ONCE_INIT {0}
2623 #define RTL_RUN_ONCE_CHECK_ONLY 0x00000001UL
2624 #define RTL_RUN_ONCE_ASYNC 0x00000002UL
2625 #define RTL_RUN_ONCE_INIT_FAILED 0x00000004UL
2627 #define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
2629 #define RTL_HASH_ALLOCATED_HEADER 0x00000001
2631 #define RTL_HASH_RESERVED_SIGNATURE 0
2633 /* RtlVerifyVersionInfo() ComparisonType */
2636 #define VER_GREATER 2
2637 #define VER_GREATER_EQUAL 3
2639 #define VER_LESS_EQUAL 5
2643 #define VER_CONDITION_MASK 7
2644 #define VER_NUM_BITS_PER_CONDITION_MASK 3
2646 /* RtlVerifyVersionInfo() TypeMask */
2648 #define VER_MINORVERSION 0x0000001
2649 #define VER_MAJORVERSION 0x0000002
2650 #define VER_BUILDNUMBER 0x0000004
2651 #define VER_PLATFORMID 0x0000008
2652 #define VER_SERVICEPACKMINOR 0x0000010
2653 #define VER_SERVICEPACKMAJOR 0x0000020
2654 #define VER_SUITENAME 0x0000040
2655 #define VER_PRODUCT_TYPE 0x0000080
2657 #define VER_NT_WORKSTATION 0x0000001
2658 #define VER_NT_DOMAIN_CONTROLLER 0x0000002
2659 #define VER_NT_SERVER 0x0000003
2661 #define VER_PLATFORM_WIN32s 0
2662 #define VER_PLATFORM_WIN32_WINDOWS 1
2663 #define VER_PLATFORM_WIN32_NT 2
2665 typedef union _RTL_RUN_ONCE
{
2667 } RTL_RUN_ONCE
, *PRTL_RUN_ONCE
;
2669 typedef ULONG
/* LOGICAL */
2670 (NTAPI
*PRTL_RUN_ONCE_INIT_FN
) (
2671 IN OUT PRTL_RUN_ONCE RunOnce
,
2672 IN OUT PVOID Parameter OPTIONAL
,
2673 IN OUT PVOID
*Context OPTIONAL
);
2675 #endif /* _RTL_RUN_ONCE_DEF */
2677 typedef enum _TABLE_SEARCH_RESULT
{
2682 } TABLE_SEARCH_RESULT
;
2684 typedef enum _RTL_GENERIC_COMPARE_RESULTS
{
2688 } RTL_GENERIC_COMPARE_RESULTS
;
2691 struct _RTL_AVL_TABLE
;
2693 typedef RTL_GENERIC_COMPARE_RESULTS
2694 (NTAPI RTL_AVL_COMPARE_ROUTINE
) (
2695 IN
struct _RTL_AVL_TABLE
*Table
,
2696 IN PVOID FirstStruct
,
2697 IN PVOID SecondStruct
);
2698 typedef RTL_AVL_COMPARE_ROUTINE
*PRTL_AVL_COMPARE_ROUTINE
;
2701 (NTAPI RTL_AVL_ALLOCATE_ROUTINE
) (
2702 IN
struct _RTL_AVL_TABLE
*Table
,
2704 typedef RTL_AVL_ALLOCATE_ROUTINE
*PRTL_AVL_ALLOCATE_ROUTINE
;
2707 (NTAPI RTL_AVL_FREE_ROUTINE
) (
2708 IN
struct _RTL_AVL_TABLE
*Table
,
2710 typedef RTL_AVL_FREE_ROUTINE
*PRTL_AVL_FREE_ROUTINE
;
2713 (NTAPI RTL_AVL_MATCH_FUNCTION
) (
2714 IN
struct _RTL_AVL_TABLE
*Table
,
2716 IN PVOID MatchData
);
2717 typedef RTL_AVL_MATCH_FUNCTION
*PRTL_AVL_MATCH_FUNCTION
;
2719 typedef struct _RTL_BALANCED_LINKS
{
2720 struct _RTL_BALANCED_LINKS
*Parent
;
2721 struct _RTL_BALANCED_LINKS
*LeftChild
;
2722 struct _RTL_BALANCED_LINKS
*RightChild
;
2725 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
2727 typedef struct _RTL_AVL_TABLE
{
2728 RTL_BALANCED_LINKS BalancedRoot
;
2729 PVOID OrderedPointer
;
2730 ULONG WhichOrderedElement
;
2731 ULONG NumberGenericTableElements
;
2733 PRTL_BALANCED_LINKS RestartKey
;
2735 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
2736 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
2737 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
2739 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
2741 typedef struct _RTL_SPLAY_LINKS
{
2742 struct _RTL_SPLAY_LINKS
*Parent
;
2743 struct _RTL_SPLAY_LINKS
*LeftChild
;
2744 struct _RTL_SPLAY_LINKS
*RightChild
;
2745 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
2747 #ifndef RTL_USE_AVL_TABLES
2749 struct _RTL_GENERIC_TABLE
;
2751 typedef RTL_GENERIC_COMPARE_RESULTS
2752 (NTAPI RTL_GENERIC_COMPARE_ROUTINE
) (
2753 IN
struct _RTL_GENERIC_TABLE
*Table
,
2754 IN PVOID FirstStruct
,
2755 IN PVOID SecondStruct
);
2756 typedef RTL_GENERIC_COMPARE_ROUTINE
*PRTL_GENERIC_COMPARE_ROUTINE
;
2759 (NTAPI RTL_GENERIC_ALLOCATE_ROUTINE
) (
2760 IN
struct _RTL_GENERIC_TABLE
*Table
,
2762 typedef RTL_GENERIC_ALLOCATE_ROUTINE
*PRTL_GENERIC_ALLOCATE_ROUTINE
;
2765 (NTAPI RTL_GENERIC_FREE_ROUTINE
) (
2766 IN
struct _RTL_GENERIC_TABLE
*Table
,
2768 typedef RTL_GENERIC_FREE_ROUTINE
*PRTL_GENERIC_FREE_ROUTINE
;
2770 typedef struct _RTL_GENERIC_TABLE
{
2771 PRTL_SPLAY_LINKS TableRoot
;
2772 LIST_ENTRY InsertOrderList
;
2773 PLIST_ENTRY OrderedPointer
;
2774 ULONG WhichOrderedElement
;
2775 ULONG NumberGenericTableElements
;
2776 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
2777 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
2778 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
2780 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
2782 #endif /* !RTL_USE_AVL_TABLES */
2784 #ifdef RTL_USE_AVL_TABLES
2786 #undef RTL_GENERIC_COMPARE_ROUTINE
2787 #undef PRTL_GENERIC_COMPARE_ROUTINE
2788 #undef RTL_GENERIC_ALLOCATE_ROUTINE
2789 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
2790 #undef RTL_GENERIC_FREE_ROUTINE
2791 #undef PRTL_GENERIC_FREE_ROUTINE
2792 #undef RTL_GENERIC_TABLE
2793 #undef PRTL_GENERIC_TABLE
2795 #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
2796 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
2797 #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
2798 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
2799 #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
2800 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
2801 #define RTL_GENERIC_TABLE RTL_AVL_TABLE
2802 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
2804 #endif /* RTL_USE_AVL_TABLES */
2806 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY
{
2808 ULONG_PTR Signature
;
2809 } RTL_DYNAMIC_HASH_TABLE_ENTRY
, *PRTL_DYNAMIC_HASH_TABLE_ENTRY
;
2811 typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT
{
2812 PLIST_ENTRY ChainHead
;
2813 PLIST_ENTRY PrevLinkage
;
2814 ULONG_PTR Signature
;
2815 } RTL_DYNAMIC_HASH_TABLE_CONTEXT
, *PRTL_DYNAMIC_HASH_TABLE_CONTEXT
;
2817 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR
{
2818 RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry
;
2819 PLIST_ENTRY ChainHead
;
2821 } RTL_DYNAMIC_HASH_TABLE_ENUMERATOR
, *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR
;
2823 typedef struct _RTL_DYNAMIC_HASH_TABLE
{
2830 ULONG NonEmptyBuckets
;
2831 ULONG NumEnumerators
;
2833 } RTL_DYNAMIC_HASH_TABLE
, *PRTL_DYNAMIC_HASH_TABLE
;
2835 typedef struct _OSVERSIONINFOA
{
2836 ULONG dwOSVersionInfoSize
;
2837 ULONG dwMajorVersion
;
2838 ULONG dwMinorVersion
;
2839 ULONG dwBuildNumber
;
2841 CHAR szCSDVersion
[128];
2842 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
2844 typedef struct _OSVERSIONINFOW
{
2845 ULONG dwOSVersionInfoSize
;
2846 ULONG dwMajorVersion
;
2847 ULONG dwMinorVersion
;
2848 ULONG dwBuildNumber
;
2850 WCHAR szCSDVersion
[128];
2851 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
2853 typedef struct _OSVERSIONINFOEXA
{
2854 ULONG dwOSVersionInfoSize
;
2855 ULONG dwMajorVersion
;
2856 ULONG dwMinorVersion
;
2857 ULONG dwBuildNumber
;
2859 CHAR szCSDVersion
[128];
2860 USHORT wServicePackMajor
;
2861 USHORT wServicePackMinor
;
2865 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
2867 typedef struct _OSVERSIONINFOEXW
{
2868 ULONG dwOSVersionInfoSize
;
2869 ULONG dwMajorVersion
;
2870 ULONG dwMinorVersion
;
2871 ULONG dwBuildNumber
;
2873 WCHAR szCSDVersion
[128];
2874 USHORT wServicePackMajor
;
2875 USHORT wServicePackMinor
;
2879 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
2882 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
2883 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
2884 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
2885 typedef OSVERSIONINFOW OSVERSIONINFO
;
2886 typedef POSVERSIONINFOW POSVERSIONINFO
;
2887 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
2889 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
2890 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
2891 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
2892 typedef OSVERSIONINFOA OSVERSIONINFO
;
2893 typedef POSVERSIONINFOA POSVERSIONINFO
;
2894 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
2895 #endif /* UNICODE */
2897 #define HASH_ENTRY_KEY(x) ((x)->Signature)
2899 /******************************************************************************
2900 * Security Manager Types *
2901 ******************************************************************************/
2902 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
2904 typedef enum _WELL_KNOWN_SID_TYPE
{
2908 WinCreatorOwnerSid
= 3,
2909 WinCreatorGroupSid
= 4,
2910 WinCreatorOwnerServerSid
= 5,
2911 WinCreatorGroupServerSid
= 6,
2912 WinNtAuthoritySid
= 7,
2916 WinInteractiveSid
= 11,
2918 WinAnonymousSid
= 13,
2920 WinEnterpriseControllersSid
= 15,
2922 WinAuthenticatedUserSid
= 17,
2923 WinRestrictedCodeSid
= 18,
2924 WinTerminalServerSid
= 19,
2925 WinRemoteLogonIdSid
= 20,
2926 WinLogonIdsSid
= 21,
2927 WinLocalSystemSid
= 22,
2928 WinLocalServiceSid
= 23,
2929 WinNetworkServiceSid
= 24,
2930 WinBuiltinDomainSid
= 25,
2931 WinBuiltinAdministratorsSid
= 26,
2932 WinBuiltinUsersSid
= 27,
2933 WinBuiltinGuestsSid
= 28,
2934 WinBuiltinPowerUsersSid
= 29,
2935 WinBuiltinAccountOperatorsSid
= 30,
2936 WinBuiltinSystemOperatorsSid
= 31,
2937 WinBuiltinPrintOperatorsSid
= 32,
2938 WinBuiltinBackupOperatorsSid
= 33,
2939 WinBuiltinReplicatorSid
= 34,
2940 WinBuiltinPreWindows2000CompatibleAccessSid
= 35,
2941 WinBuiltinRemoteDesktopUsersSid
= 36,
2942 WinBuiltinNetworkConfigurationOperatorsSid
= 37,
2943 WinAccountAdministratorSid
= 38,
2944 WinAccountGuestSid
= 39,
2945 WinAccountKrbtgtSid
= 40,
2946 WinAccountDomainAdminsSid
= 41,
2947 WinAccountDomainUsersSid
= 42,
2948 WinAccountDomainGuestsSid
= 43,
2949 WinAccountComputersSid
= 44,
2950 WinAccountControllersSid
= 45,
2951 WinAccountCertAdminsSid
= 46,
2952 WinAccountSchemaAdminsSid
= 47,
2953 WinAccountEnterpriseAdminsSid
= 48,
2954 WinAccountPolicyAdminsSid
= 49,
2955 WinAccountRasAndIasServersSid
= 50,
2956 WinNTLMAuthenticationSid
= 51,
2957 WinDigestAuthenticationSid
= 52,
2958 WinSChannelAuthenticationSid
= 53,
2959 WinThisOrganizationSid
= 54,
2960 WinOtherOrganizationSid
= 55,
2961 WinBuiltinIncomingForestTrustBuildersSid
= 56,
2962 WinBuiltinPerfMonitoringUsersSid
= 57,
2963 WinBuiltinPerfLoggingUsersSid
= 58,
2964 WinBuiltinAuthorizationAccessSid
= 59,
2965 WinBuiltinTerminalServerLicenseServersSid
= 60,
2966 WinBuiltinDCOMUsersSid
= 61,
2967 WinBuiltinIUsersSid
= 62,
2969 WinBuiltinCryptoOperatorsSid
= 64,
2970 WinUntrustedLabelSid
= 65,
2971 WinLowLabelSid
= 66,
2972 WinMediumLabelSid
= 67,
2973 WinHighLabelSid
= 68,
2974 WinSystemLabelSid
= 69,
2975 WinWriteRestrictedCodeSid
= 70,
2976 WinCreatorOwnerRightsSid
= 71,
2977 WinCacheablePrincipalsGroupSid
= 72,
2978 WinNonCacheablePrincipalsGroupSid
= 73,
2979 WinEnterpriseReadonlyControllersSid
= 74,
2980 WinAccountReadonlyControllersSid
= 75,
2981 WinBuiltinEventLogReadersGroup
= 76,
2982 WinNewEnterpriseReadonlyControllersSid
= 77,
2983 WinBuiltinCertSvcDComAccessGroup
= 78,
2984 WinMediumPlusLabelSid
= 79,
2985 WinLocalLogonSid
= 80,
2986 WinConsoleLogonSid
= 81,
2987 WinThisOrganizationCertificateSid
= 82,
2988 } WELL_KNOWN_SID_TYPE
;
2990 #if defined(_M_IX86)
2992 #define PAUSE_PROCESSOR YieldProcessor();
2994 #define KERNEL_STACK_SIZE 12288
2995 #define KERNEL_LARGE_STACK_SIZE 61440
2996 #define KERNEL_LARGE_STACK_COMMIT 12288
2998 #define SIZE_OF_80387_REGISTERS 80
3000 #if !defined(RC_INVOKED)
3002 #define CONTEXT_i386 0x10000
3003 #define CONTEXT_i486 0x10000
3004 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
3005 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
3006 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
3007 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
3008 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
3009 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
3011 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
3012 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
3013 CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \
3014 CONTEXT_EXTENDED_REGISTERS)
3016 #define CONTEXT_XSTATE (CONTEXT_i386 | 0x00000040L)
3018 #endif /* !defined(RC_INVOKED) */
3020 typedef struct _FLOATING_SAVE_AREA
{
3025 ULONG ErrorSelector
;
3028 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
3030 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
3032 #include "pshpack4.h"
3033 typedef struct _CONTEXT
{
3041 FLOATING_SAVE_AREA FloatSave
;
3058 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
3060 #include "poppack.h"
3062 #define KeGetPcr() PCR
3064 #define PCR_MINOR_VERSION 1
3065 #define PCR_MAJOR_VERSION 1
3067 typedef struct _KPCR
{
3071 struct _EXCEPTION_REGISTRATION_RECORD
*Used_ExceptionList
;
3072 PVOID Used_StackBase
;
3075 ULONG ContextSwitches
;
3076 KAFFINITY SetMemberCopy
;
3080 struct _KPCR
*SelfPcr
;
3081 struct _KPRCB
*Prcb
;
3086 PVOID KdVersionBlock
;
3087 struct _KIDTENTRY
*IDT
;
3088 struct _KGDTENTRY
*GDT
;
3090 USHORT MajorVersion
;
3091 USHORT MinorVersion
;
3092 KAFFINITY SetMember
;
3093 ULONG StallScaleFactor
;
3097 UCHAR SecondLevelCacheAssociativity
;
3099 ULONG KernelReserved
[14];
3100 ULONG SecondLevelCacheSize
;
3101 ULONG HalReserved
[16];
3106 KeGetCurrentProcessorNumber(VOID
)
3108 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
3116 extern NTKERNELAPI PVOID MmHighestUserAddress
;
3117 extern NTKERNELAPI PVOID MmSystemRangeStart
;
3118 extern NTKERNELAPI ULONG MmUserProbeAddress
;
3120 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
3121 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
3122 #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
3123 #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
3124 extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_
;
3126 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
3128 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
3129 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
3130 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
3131 #if !defined (_X86PAE_)
3132 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
3134 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
3137 #elif defined(_M_AMD64)
3139 #define PAUSE_PROCESSOR YieldProcessor();
3141 #define KERNEL_STACK_SIZE 0x6000
3142 #define KERNEL_LARGE_STACK_SIZE 0x12000
3143 #define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE
3145 #define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000
3147 #define EXCEPTION_READ_FAULT 0
3148 #define EXCEPTION_WRITE_FAULT 1
3149 #define EXCEPTION_EXECUTE_FAULT 8
3151 #if !defined(RC_INVOKED)
3153 #define CONTEXT_AMD64 0x100000
3155 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
3156 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
3157 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
3158 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
3159 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
3161 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
3162 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
3164 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
3166 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
3167 #define CONTEXT_SERVICE_ACTIVE 0x10000000
3168 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
3169 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
3171 #endif /* !defined(RC_INVOKED) */
3173 #define INITIAL_MXCSR 0x1f80
3174 #define INITIAL_FPCSR 0x027f
3176 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
3216 XMM_SAVE_AREA32 FltSave
;
3238 M128A VectorRegister
[26];
3239 ULONG64 VectorControl
;
3240 ULONG64 DebugControl
;
3241 ULONG64 LastBranchToRip
;
3242 ULONG64 LastBranchFromRip
;
3243 ULONG64 LastExceptionToRip
;
3244 ULONG64 LastExceptionFromRip
;
3247 #define PCR_MINOR_VERSION 1
3248 #define PCR_MAJOR_VERSION 1
3250 typedef struct _KPCR
3252 _ANONYMOUS_UNION
union
3255 _ANONYMOUS_STRUCT
struct
3257 union _KGDTENTRY64
*GdtBase
;
3258 struct _KTSS64
*TssBase
;
3261 struct _KPRCB
*CurrentPrcb
;
3262 PKSPIN_LOCK_QUEUE LockArray
;
3266 union _KIDTENTRY64
*IdtBase
;
3269 UCHAR SecondLevelCacheAssociativity
;
3270 UCHAR ObsoleteNumber
;
3273 USHORT MajorVersion
;
3274 USHORT MinorVersion
;
3275 ULONG StallScaleFactor
;
3277 ULONG KernelReserved
[15];
3278 ULONG SecondLevelCacheSize
;
3279 ULONG HalReserved
[16];
3281 PVOID KdVersionBlock
;
3283 ULONG PcrAlign1
[24];
3290 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
3295 KeGetCurrentProcessorNumber(VOID
)
3297 return (ULONG
)__readgsword(0x184);
3301 #define PTI_SHIFT 12L
3302 #define PDI_SHIFT 21L
3303 #define PPI_SHIFT 30L
3304 #define PXI_SHIFT 39L
3305 #define PTE_PER_PAGE 512
3306 #define PDE_PER_PAGE 512
3307 #define PPE_PER_PAGE 512
3308 #define PXE_PER_PAGE 512
3309 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
3310 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
3311 #define PPI_MASK (PPE_PER_PAGE - 1)
3312 #define PXI_MASK (PXE_PER_PAGE - 1)
3314 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
3315 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
3316 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
3317 #define PDE_BASE 0xFFFFF6FB40000000ULL
3318 #define PTE_BASE 0xFFFFF68000000000ULL
3319 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
3320 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
3321 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
3322 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
3324 extern NTKERNELAPI PVOID MmHighestUserAddress
;
3325 extern NTKERNELAPI PVOID MmSystemRangeStart
;
3326 extern NTKERNELAPI ULONG64 MmUserProbeAddress
;
3328 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
3329 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
3330 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
3331 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
3332 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
3335 #elif defined(_M_IA64)
3337 #elif defined(_M_PPC)
3340 #elif defined(_M_MIPS)
3342 #elif defined(_M_ARM)
3344 #error Unknown Architecture
3347 /******************************************************************************
3348 * Executive Functions *
3349 ******************************************************************************/
3351 static __inline PVOID
3353 IN PZONE_HEADER Zone
)
3355 if (Zone
->FreeList
.Next
)
3356 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
3357 return (PVOID
) Zone
->FreeList
.Next
;
3360 static __inline PVOID
3362 IN PZONE_HEADER Zone
,
3365 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
3366 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
3367 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
3372 * ExInterlockedAllocateFromZone(
3373 * IN PZONE_HEADER Zone,
3374 * IN PKSPIN_LOCK Lock)
3376 #define ExInterlockedAllocateFromZone(Zone, Lock) \
3377 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
3380 * ExInterlockedFreeToZone(
3381 * IN PZONE_HEADER Zone,
3383 * IN PKSPIN_LOCK Lock);
3385 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
3386 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
3391 * IN PZONE_HEADER Zone)
3393 #define ExIsFullZone(Zone) \
3394 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
3397 * ExIsObjectInFirstZoneSegment(
3398 * IN PZONE_HEADER Zone,
3401 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
3402 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
3403 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
3404 (Zone)->TotalSegmentSize)) )
3406 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
3407 #define ExAcquireResourceShared ExAcquireResourceSharedLite
3408 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
3409 #define ExDeleteResource ExDeleteResourceLite
3410 #define ExInitializeResource ExInitializeResourceLite
3411 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
3412 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
3413 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
3414 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
3417 #define RESULT_ZERO 0
3418 #define RESULT_NEGATIVE 1
3419 #define RESULT_POSITIVE 2
3422 typedef enum _INTERLOCKED_RESULT
{
3423 ResultNegative
= RESULT_NEGATIVE
,
3424 ResultZero
= RESULT_ZERO
,
3425 ResultPositive
= RESULT_POSITIVE
3426 } INTERLOCKED_RESULT
;
3433 Exfi386InterlockedIncrementLong(
3434 IN OUT LONG
volatile *Addend
);
3439 Exfi386InterlockedDecrementLong(
3445 Exfi386InterlockedExchangeUlong(
3452 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3457 IN OUT PZONE_HEADER Zone
,
3458 IN OUT PVOID Segment
,
3459 IN ULONG SegmentSize
);
3465 OUT PZONE_HEADER Zone
,
3467 IN OUT PVOID InitialSegment
,
3468 IN ULONG InitialSegmentSize
);
3473 ExInterlockedExtendZone(
3474 IN OUT PZONE_HEADER Zone
,
3475 IN OUT PVOID Segment
,
3476 IN ULONG SegmentSize
,
3477 IN OUT PKSPIN_LOCK Lock
);
3489 ExRaiseAccessViolation(VOID
);
3495 ExRaiseDatatypeMisalignment(VOID
);
3497 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3500 /* Hardware Abstraction Layer Functions */
3502 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3504 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
3508 #else /* USE_DMA_MACROS ... */
3510 //DECLSPEC_DEPRECATED_DDK
3514 IoFreeAdapterChannel(
3515 IN PADAPTER_OBJECT AdapterObject
);
3517 //DECLSPEC_DEPRECATED_DDK
3521 IoFlushAdapterBuffers(
3522 IN PADAPTER_OBJECT AdapterObject
,
3524 IN PVOID MapRegisterBase
,
3527 IN BOOLEAN WriteToDevice
);
3529 //DECLSPEC_DEPRECATED_DDK
3534 IN PADAPTER_OBJECT AdapterObject
,
3535 IN PVOID MapRegisterBase
,
3536 IN ULONG NumberOfMapRegisters
);
3538 //DECLSPEC_DEPRECATED_DDK
3542 HalAllocateCommonBuffer(
3543 IN PADAPTER_OBJECT AdapterObject
,
3545 OUT PPHYSICAL_ADDRESS LogicalAddress
,
3546 IN BOOLEAN CacheEnabled
);
3548 //DECLSPEC_DEPRECATED_DDK
3552 HalFreeCommonBuffer(
3553 IN PADAPTER_OBJECT AdapterObject
,
3555 IN PHYSICAL_ADDRESS LogicalAddress
,
3556 IN PVOID VirtualAddress
,
3557 IN BOOLEAN CacheEnabled
);
3559 //DECLSPEC_DEPRECATED_DDK
3564 IN PADAPTER_OBJECT AdapterObject
);
3569 HalAllocateAdapterChannel(
3570 IN PADAPTER_OBJECT AdapterObject
,
3571 IN PWAIT_CONTEXT_BLOCK Wcb
,
3572 IN ULONG NumberOfMapRegisters
,
3573 IN PDRIVER_CONTROL ExecutionRoutine
);
3575 #endif /* USE_DMA_MACROS ... */
3577 #if !defined(NO_LEGACY_DRIVERS)
3581 HalAssignSlotResources(
3582 IN PUNICODE_STRING RegistryPath
,
3583 IN PUNICODE_STRING DriverClassName
,
3584 IN PDRIVER_OBJECT DriverObject
,
3585 IN PDEVICE_OBJECT DeviceObject
,
3586 IN INTERFACE_TYPE BusType
,
3588 IN ULONG SlotNumber
,
3589 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
3594 HalGetInterruptVector(
3595 IN INTERFACE_TYPE InterfaceType
,
3597 IN ULONG BusInterruptLevel
,
3598 IN ULONG BusInterruptVector
,
3600 OUT PKAFFINITY Affinity
);
3606 IN BUS_DATA_TYPE BusDataType
,
3608 IN ULONG SlotNumber
,
3616 IN BUS_DATA_TYPE BusDataType
,
3618 IN ULONG SlotNumber
,
3626 IN ULONG Frequency
);
3627 #endif /* !defined(NO_LEGACY_DRIVERS) */
3633 IN PDEVICE_DESCRIPTION DeviceDescription
,
3634 OUT PULONG NumberOfMapRegisters
);
3639 IN PADAPTER_OBJECT DmaAdapter
);
3644 HalAcquireDisplayOwnership(
3645 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
3650 HalGetBusDataByOffset(
3651 IN BUS_DATA_TYPE BusDataType
,
3653 IN ULONG SlotNumber
,
3661 HalSetBusDataByOffset(
3662 IN BUS_DATA_TYPE BusDataType
,
3664 IN ULONG SlotNumber
,
3672 HalTranslateBusAddress(
3673 IN INTERFACE_TYPE InterfaceType
,
3675 IN PHYSICAL_ADDRESS BusAddress
,
3676 IN OUT PULONG AddressSpace
,
3677 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
3682 HalAllocateCrashDumpRegisters(
3683 IN PADAPTER_OBJECT AdapterObject
,
3684 IN OUT PULONG NumberOfMapRegisters
);
3688 HalGetScatterGatherList(
3689 IN PADAPTER_OBJECT DmaAdapter
,
3690 IN PDEVICE_OBJECT DeviceObject
,
3694 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
3696 IN BOOLEAN WriteToDevice
);
3700 HalPutScatterGatherList(
3701 IN PADAPTER_OBJECT DmaAdapter
,
3702 IN PSCATTER_GATHER_LIST ScatterGather
,
3703 IN BOOLEAN WriteToDevice
);
3705 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3707 #if (NTDDI_VERSION >= NTDDI_WINXP)
3712 IN PDEVICE_OBJECT DeviceObject
,
3713 IN ULONG SectorSize
,
3714 IN ULONG MBRTypeIdentifier
,
3716 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
3718 #if (NTDDI_VERSION >= NTDDI_WIN7)
3722 HalAllocateHardwareCounters(
3723 IN PGROUP_AFFINITY GroupAffinty
,
3724 IN ULONG GroupCount
,
3725 IN PPHYSICAL_COUNTER_RESOURCE_LIST ResourceList
,
3726 OUT PHANDLE CounterSetHandle
);
3730 HalFreeHardwareCounters(
3731 IN HANDLE CounterSetHandle
);
3733 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
3736 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3740 HalGetDmaAlignmentRequirement(VOID
);
3742 #endif /* defined(_IA64_) */
3744 #if defined(_M_IX86) || defined(_M_AMD64)
3745 #define HalGetDmaAlignmentRequirement() 1L
3748 #if (NTDDI_VERSION >= NTDDI_WIN7)
3750 typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR
*PWHEA_ERROR_SOURCE_DESCRIPTOR
;
3751 typedef struct _WHEA_ERROR_RECORD
*PWHEA_ERROR_RECORD
;
3757 IN PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource
,
3758 IN PWHEA_ERROR_RECORD ErrorRecord
);
3762 typedef struct _WHEA_ERROR_RECORD
*PWHEA_ERROR_RECORD
;
3768 IN PWHEA_ERROR_RECORD ErrorRecord
);
3770 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
3772 /******************************************************************************
3773 * I/O Manager Functions *
3774 ******************************************************************************/
3777 * VOID IoAssignArcName(
3778 * IN PUNICODE_STRING ArcName,
3779 * IN PUNICODE_STRING DeviceName);
3781 #define IoAssignArcName(_ArcName, _DeviceName) ( \
3782 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
3786 * IoDeassignArcName(
3787 * IN PUNICODE_STRING ArcName)
3789 #define IoDeassignArcName IoDeleteSymbolicLink
3794 IoInitializeDriverCreateContext(
3795 PIO_DRIVER_CREATE_CONTEXT DriverContext
)
3797 RtlZeroMemory(DriverContext
, sizeof(IO_DRIVER_CREATE_CONTEXT
));
3798 DriverContext
->Size
= sizeof(IO_DRIVER_CREATE_CONTEXT
);
3801 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3803 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
3807 IoAllocateAdapterChannel(
3808 IN PADAPTER_OBJECT AdapterObject
,
3809 IN PDEVICE_OBJECT DeviceObject
,
3810 IN ULONG NumberOfMapRegisters
,
3811 IN PDRIVER_CONTROL ExecutionRoutine
,
3815 #if !defined(DMA_MACROS_DEFINED)
3816 //DECLSPEC_DEPRECATED_DDK
3821 IN PADAPTER_OBJECT AdapterObject
,
3823 IN PVOID MapRegisterBase
,
3825 IN OUT PULONG Length
,
3826 IN BOOLEAN WriteToDevice
);
3832 IoAllocateController(
3833 IN PCONTROLLER_OBJECT ControllerObject
,
3834 IN PDEVICE_OBJECT DeviceObject
,
3835 IN PDRIVER_CONTROL ExecutionRoutine
,
3836 IN PVOID Context OPTIONAL
);
3848 IN PCONTROLLER_OBJECT ControllerObject
);
3854 IN PCONTROLLER_OBJECT ControllerObject
);
3857 PCONFIGURATION_INFORMATION
3859 IoGetConfigurationInformation(VOID
);
3864 IoGetDeviceToVerify(
3865 IN PETHREAD Thread
);
3871 IN PDEVICE_OBJECT DeviceObject
,
3872 IN PFILE_OBJECT FileObject
);
3877 IoGetFileObjectGenericMapping(VOID
);
3882 IoMakeAssociatedIrp(
3884 IN CCHAR StackSize
);
3889 IoQueryDeviceDescription(
3890 IN PINTERFACE_TYPE BusType OPTIONAL
,
3891 IN PULONG BusNumber OPTIONAL
,
3892 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
3893 IN PULONG ControllerNumber OPTIONAL
,
3894 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
3895 IN PULONG PeripheralNumber OPTIONAL
,
3896 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
3897 IN OUT PVOID Context OPTIONAL
);
3904 IN PVPB Vpb OPTIONAL
,
3905 IN PDEVICE_OBJECT RealDeviceObject
);
3910 IoRaiseInformationalHardError(
3911 IN NTSTATUS ErrorStatus
,
3912 IN PUNICODE_STRING String OPTIONAL
,
3913 IN PKTHREAD Thread OPTIONAL
);
3918 IoRegisterBootDriverReinitialization(
3919 IN PDRIVER_OBJECT DriverObject
,
3920 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
3921 IN PVOID Context OPTIONAL
);
3926 IoRegisterDriverReinitialization(
3927 IN PDRIVER_OBJECT DriverObject
,
3928 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
3929 IN PVOID Context OPTIONAL
);
3934 IoAttachDeviceByPointer(
3935 IN PDEVICE_OBJECT SourceDevice
,
3936 IN PDEVICE_OBJECT TargetDevice
);
3941 IoReportDetectedDevice(
3942 IN PDRIVER_OBJECT DriverObject
,
3943 IN INTERFACE_TYPE LegacyBusType
,
3945 IN ULONG SlotNumber
,
3946 IN PCM_RESOURCE_LIST ResourceList OPTIONAL
,
3947 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
3948 IN BOOLEAN ResourceAssigned
,
3949 IN OUT PDEVICE_OBJECT
*DeviceObject OPTIONAL
);
3954 IoReportResourceForDetection(
3955 IN PDRIVER_OBJECT DriverObject
,
3956 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
3957 IN ULONG DriverListSize OPTIONAL
,
3958 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
3959 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
3960 IN ULONG DeviceListSize OPTIONAL
,
3961 OUT PBOOLEAN ConflictDetected
);
3966 IoReportResourceUsage(
3967 IN PUNICODE_STRING DriverClassName OPTIONAL
,
3968 IN PDRIVER_OBJECT DriverObject
,
3969 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
3970 IN ULONG DriverListSize OPTIONAL
,
3971 IN PDEVICE_OBJECT DeviceObject
,
3972 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
3973 IN ULONG DeviceListSize OPTIONAL
,
3974 IN BOOLEAN OverrideConflict
,
3975 OUT PBOOLEAN ConflictDetected
);
3980 IoSetHardErrorOrVerifyDevice(
3982 IN PDEVICE_OBJECT DeviceObject
);
3988 IN PUNICODE_STRING RegistryPath
,
3989 IN PUNICODE_STRING DriverClassName OPTIONAL
,
3990 IN PDRIVER_OBJECT DriverObject
,
3991 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
3992 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL
,
3993 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
3998 IoSetThreadHardErrorMode(
3999 IN BOOLEAN EnableHardErrors
);
4002 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4004 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
4009 IoIsFileOriginRemote(
4010 IN PFILE_OBJECT FileObject
);
4016 IN PFILE_OBJECT FileObject
,
4019 #endif /* (NTDDI_VERSION >= NTDDI_WIN2KSP3) */
4021 #if (NTDDI_VERSION >= NTDDI_WINXP)
4026 IoReadPartitionTable(
4027 IN PDEVICE_OBJECT DeviceObject
,
4028 IN ULONG SectorSize
,
4029 IN BOOLEAN ReturnRecognizedPartitions
,
4030 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
4035 IoSetPartitionInformation(
4036 IN PDEVICE_OBJECT DeviceObject
,
4037 IN ULONG SectorSize
,
4038 IN ULONG PartitionNumber
,
4039 IN ULONG PartitionType
);
4044 IoWritePartitionTable(
4045 IN PDEVICE_OBJECT DeviceObject
,
4046 IN ULONG SectorSize
,
4047 IN ULONG SectorsPerTrack
,
4048 IN ULONG NumberOfHeads
,
4049 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
4055 IN PDEVICE_OBJECT DeviceObject
,
4056 IN
struct _CREATE_DISK
* Disk OPTIONAL
);
4061 IoReadDiskSignature(
4062 IN PDEVICE_OBJECT DeviceObject
,
4063 IN ULONG BytesPerSector
,
4064 OUT PDISK_SIGNATURE Signature
);
4069 IoReadPartitionTableEx(
4070 IN PDEVICE_OBJECT DeviceObject
,
4071 OUT
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
4076 IoSetPartitionInformationEx(
4077 IN PDEVICE_OBJECT DeviceObject
,
4078 IN ULONG PartitionNumber
,
4079 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
4084 IoSetSystemPartition(
4085 IN PUNICODE_STRING VolumeNameString
);
4090 IoVerifyPartitionTable(
4091 IN PDEVICE_OBJECT DeviceObject
,
4092 IN BOOLEAN FixErrors
);
4097 IoVolumeDeviceToDosName(
4098 IN PVOID VolumeDeviceObject
,
4099 OUT PUNICODE_STRING DosName
);
4104 IoWritePartitionTableEx(
4105 IN PDEVICE_OBJECT DeviceObject
,
4106 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*DriveLayout
);
4111 IoCreateFileSpecifyDeviceObjectHint(
4112 OUT PHANDLE FileHandle
,
4113 IN ACCESS_MASK DesiredAccess
,
4114 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4115 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4116 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
4117 IN ULONG FileAttributes
,
4118 IN ULONG ShareAccess
,
4119 IN ULONG Disposition
,
4120 IN ULONG CreateOptions
,
4121 IN PVOID EaBuffer OPTIONAL
,
4123 IN CREATE_FILE_TYPE CreateFileType
,
4124 IN PVOID InternalParameters OPTIONAL
,
4126 IN PVOID DeviceObject OPTIONAL
);
4131 IoAttachDeviceToDeviceStackSafe(
4132 IN PDEVICE_OBJECT SourceDevice
,
4133 IN PDEVICE_OBJECT TargetDevice
,
4134 OUT PDEVICE_OBJECT
*AttachedToDeviceObject
);
4137 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4139 #if (NTDDI_VERSION >= NTDDI_WS03)
4143 IoGetPagingIoPriority(
4146 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
4147 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
4151 IoTranslateBusAddress(
4152 IN INTERFACE_TYPE InterfaceType
,
4154 IN PHYSICAL_ADDRESS BusAddress
,
4155 IN OUT PULONG AddressSpace
,
4156 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
4157 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
4159 #if (NTDDI_VERSION >= NTDDI_VISTA)
4163 IoUpdateDiskGeometry(
4164 IN PDEVICE_OBJECT DeviceObject
,
4165 IN
struct _DISK_GEOMETRY_EX
* OldDiskGeometry
,
4166 IN
struct _DISK_GEOMETRY_EX
* NewDiskGeometry
);
4168 PTXN_PARAMETER_BLOCK
4170 IoGetTransactionParameterBlock(
4171 IN PFILE_OBJECT FileObject
);
4177 OUT PHANDLE FileHandle
,
4178 IN ACCESS_MASK DesiredAccess
,
4179 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4180 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4181 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
4182 IN ULONG FileAttributes
,
4183 IN ULONG ShareAccess
,
4184 IN ULONG Disposition
,
4185 IN ULONG CreateOptions
,
4186 IN PVOID EaBuffer OPTIONAL
,
4188 IN CREATE_FILE_TYPE CreateFileType
,
4189 IN PVOID InternalParameters OPTIONAL
,
4191 IN PIO_DRIVER_CREATE_CONTEXT DriverContext OPTIONAL
);
4195 IoSetIrpExtraCreateParameter(
4197 IN
struct _ECP_LIST
*ExtraCreateParameter
);
4201 IoClearIrpExtraCreateParameter(
4206 IoGetIrpExtraCreateParameter(
4208 OUT
struct _ECP_LIST
**ExtraCreateParameter OPTIONAL
);
4212 IoIsFileObjectIgnoringSharing(
4213 IN PFILE_OBJECT FileObject
);
4215 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4217 #if (NTDDI_VERSION >= NTDDI_WIN7)
4221 IoSetFileObjectIgnoreSharing(
4222 IN PFILE_OBJECT FileObject
);
4224 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4226 /******************************************************************************
4227 * Kernel Debugger Functions *
4228 ******************************************************************************/
4235 IN ULONG MaximumResponseLength
);
4237 /******************************************************************************
4238 * Kernel Functions *
4239 ******************************************************************************/
4244 KeInvalidateRangeAllCaches(
4245 IN PVOID BaseAddress
,
4248 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4255 IN KDPC_IMPORTANCE Importance
);
4261 IN OUT PRKEVENT Event
,
4262 IN KPRIORITY Increment
,
4268 KeSetBasePriorityThread(
4269 IN OUT PRKTHREAD Thread
,
4275 KeEnterCriticalRegion(VOID
);
4280 KeLeaveCriticalRegion(VOID
);
4287 IN ULONG BugCheckCode
);
4288 #if defined(SINGLE_GROUP_LEGACY_API)
4294 KeSetTargetProcessorDpc(
4301 KeQueryActiveProcessors(VOID
);
4302 #endif /* defined(SINGLE_GROUP_LEGACY_API) */
4305 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4307 #if (NTDDI_VERSION >= NTDDI_WINXP)
4312 KeAreApcsDisabled(VOID
);
4314 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4316 #if (NTDDI_VERSION >= NTDDI_WS03)
4322 KeInvalidateAllCaches(VOID
);
4323 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
4324 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
4329 KeExpandKernelStackAndCallout(
4330 IN PEXPAND_STACK_CALLOUT Callout
,
4331 IN PVOID Parameter OPTIONAL
,
4337 KeEnterGuardedRegion(VOID
);
4342 KeLeaveGuardedRegion(VOID
);
4343 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
4345 #if (NTDDI_VERSION >= NTDDI_VISTA)
4346 #if defined(SINGLE_GROUP_LEGACY_API)
4351 KeQueryActiveProcessorCount(
4352 OUT PKAFFINITY ActiveProcessors OPTIONAL
);
4357 KeQueryMaximumProcessorCount(VOID
);
4358 #endif /* SINGLE_GROUP_LEGACY_API */
4360 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4362 #if (NTDDI_VERSION >= NTDDI_WIN7)
4367 KeQueryActiveProcessorCountEx(
4368 IN USHORT GroupNumber
);
4373 KeQueryMaximumProcessorCountEx(
4374 IN USHORT GroupNumber
);
4379 KeQueryActiveGroupCount(VOID
);
4384 KeQueryMaximumGroupCount(VOID
);
4389 KeQueryGroupAffinity(
4390 IN USHORT GroupNumber
);
4395 KeGetCurrentProcessorNumberEx(
4396 OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL
);
4401 KeQueryNodeActiveAffinity(
4402 IN USHORT NodeNumber
,
4403 OUT PGROUP_AFFINITY Affinity OPTIONAL
,
4404 OUT PUSHORT Count OPTIONAL
);
4409 KeQueryNodeMaximumProcessorCount(
4410 IN USHORT NodeNumber
);
4415 KeQueryHighestNodeNumber(VOID
);
4420 KeGetCurrentNodeNumber(VOID
);
4425 KeQueryLogicalProcessorRelationship(
4426 IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL
,
4427 IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
4428 OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL
,
4429 IN OUT PULONG Length
);
4434 KeSetHardwareCounterConfiguration(
4435 IN PHARDWARE_COUNTER CounterArray
,
4441 KeQueryHardwareCounterConfiguration(
4442 OUT PHARDWARE_COUNTER CounterArray
,
4443 IN ULONG MaximumCount
,
4445 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4447 /******************************************************************************
4448 * Memory manager Functions *
4449 ******************************************************************************/
4451 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4454 PPHYSICAL_MEMORY_RANGE
4456 MmGetPhysicalMemoryRanges(VOID
);
4461 MmGetPhysicalAddress(
4462 IN PVOID BaseAddress
);
4467 MmIsNonPagedSystemAddressValid(
4468 IN PVOID VirtualAddress
);
4473 MmAllocateNonCachedMemory(
4474 IN SIZE_T NumberOfBytes
);
4479 MmFreeNonCachedMemory(
4480 IN PVOID BaseAddress
,
4481 IN SIZE_T NumberOfBytes
);
4486 MmGetVirtualForPhysical(
4487 IN PHYSICAL_ADDRESS PhysicalAddress
);
4492 MmMapUserAddressesToPage(
4493 IN PVOID BaseAddress
,
4494 IN SIZE_T NumberOfBytes
,
4495 IN PVOID PageAddress
);
4501 IN PHYSICAL_ADDRESS PhysicalAddress
,
4502 IN SIZE_T NumberOfBytes
,
4503 IN MEMORY_CACHING_TYPE CacheType
);
4508 MmMapViewInSessionSpace(
4510 OUT PVOID
*MappedBase
,
4511 IN OUT PSIZE_T ViewSize
);
4516 MmMapViewInSystemSpace(
4518 OUT PVOID
*MappedBase
,
4519 IN OUT PSIZE_T ViewSize
);
4525 IN PVOID VirtualAddress
);
4530 MmIsThisAnNtAsSystem(VOID
);
4535 MmLockPagableSectionByHandle(
4536 IN PVOID ImageSectionHandle
);
4541 MmUnmapViewInSessionSpace(
4542 IN PVOID MappedBase
);
4547 MmUnmapViewInSystemSpace(
4548 IN PVOID MappedBase
);
4553 MmUnsecureVirtualMemory(
4554 IN HANDLE SecureHandle
);
4559 MmRemovePhysicalMemory(
4560 IN PPHYSICAL_ADDRESS StartAddress
,
4561 IN OUT PLARGE_INTEGER NumberOfBytes
);
4566 MmSecureVirtualMemory(
4569 IN ULONG ProbeMode
);
4574 MmUnmapVideoDisplay(
4575 IN PVOID BaseAddress
,
4576 IN SIZE_T NumberOfBytes
);
4581 MmAddPhysicalMemory(
4582 IN PPHYSICAL_ADDRESS StartAddress
,
4583 IN OUT PLARGE_INTEGER NumberOfBytes
);
4588 MmAllocateContiguousMemory(
4589 IN SIZE_T NumberOfBytes
,
4590 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
4595 MmAllocateContiguousMemorySpecifyCache(
4596 IN SIZE_T NumberOfBytes
,
4597 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
4598 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
4599 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
4600 IN MEMORY_CACHING_TYPE CacheType
);
4605 MmAllocateContiguousMemorySpecifyCacheNode(
4606 IN SIZE_T NumberOfBytes
,
4607 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
4608 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
4609 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
4610 IN MEMORY_CACHING_TYPE CacheType
,
4611 IN NODE_REQUIREMENT PreferredNode
);
4616 MmFreeContiguousMemory(
4617 IN PVOID BaseAddress
);
4622 MmFreeContiguousMemorySpecifyCache(
4623 IN PVOID BaseAddress
,
4624 IN SIZE_T NumberOfBytes
,
4625 IN MEMORY_CACHING_TYPE CacheType
);
4627 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4631 #if (NTDDI_VERSION >= NTDDI_WS03)
4636 MmCreateMirror(VOID
);
4637 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
4639 #if (NTDDI_VERSION >= NTDDI_VISTA)
4642 MmRotatePhysicalView(
4643 IN PVOID VirtualAddress
,
4644 IN OUT PSIZE_T NumberOfBytes
,
4645 IN PMDLX NewMdl OPTIONAL
,
4646 IN MM_ROTATE_DIRECTION Direction
,
4647 IN PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction
,
4648 IN PVOID Context OPTIONAL
);
4649 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4651 /******************************************************************************
4652 * Process Manager Functions *
4653 ******************************************************************************/
4659 OUT PHANDLE ProcessHandle
,
4660 IN ACCESS_MASK DesiredAccess
,
4661 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4662 IN PCLIENT_ID ClientId OPTIONAL
);
4667 NtQueryInformationProcess(
4668 IN HANDLE ProcessHandle
,
4669 IN PROCESSINFOCLASS ProcessInformationClass
,
4670 OUT PVOID ProcessInformation OPTIONAL
,
4671 IN ULONG ProcessInformationLength
,
4672 OUT PULONG ReturnLength OPTIONAL
);
4674 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4680 PsSetCreateProcessNotifyRoutine(
4681 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
4687 PsSetCreateThreadNotifyRoutine(
4688 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4693 PsSetLoadImageNotifyRoutine(
4694 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4699 PsGetCurrentProcessId(VOID
);
4704 PsGetCurrentThreadId(VOID
);
4710 OUT PULONG MajorVersion OPTIONAL
,
4711 OUT PULONG MinorVersion OPTIONAL
,
4712 OUT PULONG BuildNumber OPTIONAL
,
4713 OUT PUNICODE_STRING CSDVersion OPTIONAL
);
4714 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4715 #if (NTDDI_VERSION >= NTDDI_WINXP)
4721 IN PEPROCESS Process
);
4727 IN PETHREAD Thread
);
4732 PsRemoveCreateThreadNotifyRoutine(
4733 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4738 PsRemoveLoadImageNotifyRoutine(
4739 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4744 PsGetProcessCreateTimeQuadPart(
4745 IN PEPROCESS Process
);
4746 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4748 #if (NTDDI_VERSION >= NTDDI_WS03)
4752 PsGetThreadProcessId(
4753 IN PETHREAD Thread
);
4754 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
4756 #if (NTDDI_VERSION >= NTDDI_VISTA)
4761 PsSetCurrentThreadPrefetching(
4762 IN BOOLEAN Prefetching
);
4767 PsIsCurrentThreadPrefetching(VOID
);
4769 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4771 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
4775 PsSetCreateProcessNotifyRoutineEx(
4776 IN PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine
,
4778 #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
4779 /******************************************************************************
4780 * Runtime Library Functions *
4781 ******************************************************************************/
4784 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4787 #ifndef RTL_USE_AVL_TABLES
4792 RtlInitializeGenericTable(
4793 OUT PRTL_GENERIC_TABLE Table
,
4794 IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
,
4795 IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
,
4796 IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine
,
4797 IN PVOID TableContext OPTIONAL
);
4802 RtlInsertElementGenericTable(
4803 IN PRTL_GENERIC_TABLE Table
,
4805 IN CLONG BufferSize
,
4806 OUT PBOOLEAN NewElement OPTIONAL
);
4811 RtlInsertElementGenericTableFull(
4812 IN PRTL_GENERIC_TABLE Table
,
4814 IN CLONG BufferSize
,
4815 OUT PBOOLEAN NewElement OPTIONAL
,
4816 IN PVOID NodeOrParent
,
4817 IN TABLE_SEARCH_RESULT SearchResult
);
4822 RtlDeleteElementGenericTable(
4823 IN PRTL_GENERIC_TABLE Table
,
4829 RtlLookupElementGenericTable(
4830 IN PRTL_GENERIC_TABLE Table
,
4836 RtlLookupElementGenericTableFull(
4837 IN PRTL_GENERIC_TABLE Table
,
4839 OUT PVOID
*NodeOrParent
,
4840 OUT TABLE_SEARCH_RESULT
*SearchResult
);
4845 RtlEnumerateGenericTable(
4846 IN PRTL_GENERIC_TABLE Table
,
4847 IN BOOLEAN Restart
);
4852 RtlEnumerateGenericTableWithoutSplaying(
4853 IN PRTL_GENERIC_TABLE Table
,
4854 IN OUT PVOID
*RestartKey
);
4859 RtlGetElementGenericTable(
4860 IN PRTL_GENERIC_TABLE Table
,
4866 RtlNumberGenericTableElements(
4867 IN PRTL_GENERIC_TABLE Table
);
4872 RtlIsGenericTableEmpty(
4873 IN PRTL_GENERIC_TABLE Table
);
4875 #endif /* !RTL_USE_AVL_TABLES */
4877 #define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT 8
4883 IN OUT PRTL_SPLAY_LINKS Links
);
4889 IN PRTL_SPLAY_LINKS Links
);
4895 IN PRTL_SPLAY_LINKS Links
,
4896 IN OUT PRTL_SPLAY_LINKS
*Root
);
4901 RtlSubtreeSuccessor(
4902 IN PRTL_SPLAY_LINKS Links
);
4907 RtlSubtreePredecessor(
4908 IN PRTL_SPLAY_LINKS Links
);
4914 IN PRTL_SPLAY_LINKS Links
);
4920 IN PRTL_SPLAY_LINKS Links
);
4925 RtlPrefixUnicodeString(
4926 IN PCUNICODE_STRING String1
,
4927 IN PCUNICODE_STRING String2
,
4928 IN BOOLEAN CaseInSensitive
);
4934 IN OUT PSTRING DestinationString
,
4935 IN
const PSTRING SourceString
);
4940 RtlUpcaseUnicodeString(
4941 IN OUT PUNICODE_STRING DestinationString
,
4942 IN PCUNICODE_STRING SourceString
,
4943 IN BOOLEAN AllocateDestinationString
);
4949 IN OUT PACCESS_MASK AccessMask
,
4950 IN PGENERIC_MAPPING GenericMapping
);
4955 RtlVolumeDeviceToDosName(
4956 IN PVOID VolumeDeviceObject
,
4957 OUT PUNICODE_STRING DosName
);
4963 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
4968 RtlVerifyVersionInfo(
4969 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
4971 IN ULONGLONG ConditionMask
);
4977 IN
const PSTRING String1
,
4978 IN
const PSTRING String2
,
4979 IN BOOLEAN CaseInSensitive
);
4985 OUT PSTRING DestinationString
,
4986 IN
const PSTRING SourceString OPTIONAL
);
4992 IN
const PSTRING String1
,
4993 IN
const PSTRING String2
,
4994 IN BOOLEAN CaseInSensitive
);
5001 IN ULONG Base OPTIONAL
,
5019 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5022 #if (NTDDI_VERSION >= NTDDI_WINXP)
5029 RtlInitializeGenericTableAvl(
5030 OUT PRTL_AVL_TABLE Table
,
5031 IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine
,
5032 IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
,
5033 IN PRTL_AVL_FREE_ROUTINE FreeRoutine
,
5034 IN PVOID TableContext OPTIONAL
);
5039 RtlInsertElementGenericTableAvl(
5040 IN PRTL_AVL_TABLE Table
,
5042 IN CLONG BufferSize
,
5043 OUT PBOOLEAN NewElement OPTIONAL
);
5048 RtlInsertElementGenericTableFullAvl(
5049 IN PRTL_AVL_TABLE Table
,
5051 IN CLONG BufferSize
,
5052 OUT PBOOLEAN NewElement OPTIONAL
,
5053 IN PVOID NodeOrParent
,
5054 IN TABLE_SEARCH_RESULT SearchResult
);
5059 RtlDeleteElementGenericTableAvl(
5060 IN PRTL_AVL_TABLE Table
,
5066 RtlLookupElementGenericTableAvl(
5067 IN PRTL_AVL_TABLE Table
,
5073 RtlLookupElementGenericTableFullAvl(
5074 IN PRTL_AVL_TABLE Table
,
5076 OUT PVOID
*NodeOrParent
,
5077 OUT TABLE_SEARCH_RESULT
*SearchResult
);
5082 RtlEnumerateGenericTableAvl(
5083 IN PRTL_AVL_TABLE Table
,
5084 IN BOOLEAN Restart
);
5089 RtlEnumerateGenericTableWithoutSplayingAvl(
5090 IN PRTL_AVL_TABLE Table
,
5091 IN OUT PVOID
*RestartKey
);
5096 RtlLookupFirstMatchingElementGenericTableAvl(
5097 IN PRTL_AVL_TABLE Table
,
5099 OUT PVOID
*RestartKey
);
5104 RtlEnumerateGenericTableLikeADirectory(
5105 IN PRTL_AVL_TABLE Table
,
5106 IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL
,
5107 IN PVOID MatchData OPTIONAL
,
5109 IN OUT PVOID
*RestartKey
,
5110 IN OUT PULONG DeleteCount
,
5116 RtlGetElementGenericTableAvl(
5117 IN PRTL_AVL_TABLE Table
,
5123 RtlNumberGenericTableElementsAvl(
5124 IN PRTL_AVL_TABLE Table
);
5129 RtlIsGenericTableEmptyAvl(
5130 IN PRTL_AVL_TABLE Table
);
5133 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5136 #if (NTDDI_VERSION >= NTDDI_VISTA)
5142 RtlRunOnceInitialize(
5143 OUT PRTL_RUN_ONCE RunOnce
);
5148 RtlRunOnceExecuteOnce(
5149 IN OUT PRTL_RUN_ONCE RunOnce
,
5150 IN PRTL_RUN_ONCE_INIT_FN InitFn
,
5151 IN OUT PVOID Parameter OPTIONAL
,
5152 OUT PVOID
*Context OPTIONAL
);
5157 RtlRunOnceBeginInitialize(
5158 IN OUT PRTL_RUN_ONCE RunOnce
,
5160 OUT PVOID
*Context OPTIONAL
);
5166 IN OUT PRTL_RUN_ONCE RunOnce
,
5168 IN PVOID Context OPTIONAL
);
5174 IN ULONG OSMajorVersion
,
5175 IN ULONG OSMinorVersion
,
5176 IN ULONG SpMajorVersion
,
5177 IN ULONG SpMinorVersion
,
5178 OUT PULONG ReturnedProductType
);
5181 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
5183 #if (NTDDI_VERSION >= NTDDI_WIN7)
5190 IN OUT PRTL_DYNAMIC_HASH_TABLE
*HashTable OPTIONAL
,
5198 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
5203 RtlInsertEntryHashTable(
5204 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5205 IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry
,
5206 IN ULONG_PTR Signature
,
5207 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
5212 RtlRemoveEntryHashTable(
5213 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5214 IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry
,
5215 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
5218 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5220 RtlLookupEntryHashTable(
5221 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5222 IN ULONG_PTR Signature
,
5223 OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
5226 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5228 RtlGetNextEntryHashTable(
5229 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5230 IN PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
);
5235 RtlInitEnumerationHashTable(
5236 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5237 OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5240 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5242 RtlEnumerateEntryHashTable(
5243 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5244 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5249 RtlEndEnumerationHashTable(
5250 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5251 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5256 RtlInitWeakEnumerationHashTable(
5257 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5258 OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5261 PRTL_DYNAMIC_HASH_TABLE_ENTRY
5263 RtlWeaklyEnumerateEntryHashTable(
5264 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5265 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5270 RtlEndWeakEnumerationHashTable(
5271 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
5272 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
5278 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
5283 RtlContractHashTable(
5284 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
5287 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5290 #if defined(_AMD64_) || defined(_IA64_)
5294 //DECLSPEC_DEPRECATED_DDK_WINXP
5298 RtlLargeIntegerDivide(
5299 IN LARGE_INTEGER Dividend
,
5300 IN LARGE_INTEGER Divisor
,
5301 OUT PLARGE_INTEGER Remainder OPTIONAL
)
5304 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
5306 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
5312 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5316 RtlLargeIntegerDivide(
5317 IN LARGE_INTEGER Dividend
,
5318 IN LARGE_INTEGER Divisor
,
5319 OUT PLARGE_INTEGER Remainder OPTIONAL
);
5323 #endif /* defined(_AMD64_) || defined(_IA64_) */
5327 #ifdef RTL_USE_AVL_TABLES
5329 #define RtlInitializeGenericTable RtlInitializeGenericTableAvl
5330 #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
5331 #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
5332 #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
5333 #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
5334 #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
5335 #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
5336 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
5337 #define RtlGetElementGenericTable RtlGetElementGenericTableAvl
5338 #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
5339 #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
5341 #endif /* RTL_USE_AVL_TABLES */
5343 #define RtlInitializeSplayLinks(Links) { \
5344 PRTL_SPLAY_LINKS _SplayLinks; \
5345 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
5346 _SplayLinks->Parent = _SplayLinks; \
5347 _SplayLinks->LeftChild = NULL; \
5348 _SplayLinks->RightChild = NULL; \
5351 #define RtlIsLeftChild(Links) \
5352 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
5354 #define RtlIsRightChild(Links) \
5355 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
5357 #define RtlRightChild(Links) \
5358 ((PRTL_SPLAY_LINKS)(Links))->RightChild
5360 #define RtlIsRoot(Links) \
5361 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
5363 #define RtlLeftChild(Links) \
5364 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
5366 #define RtlParent(Links) \
5367 ((PRTL_SPLAY_LINKS)(Links))->Parent
5369 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
5371 PRTL_SPLAY_LINKS _SplayParent; \
5372 PRTL_SPLAY_LINKS _SplayChild; \
5373 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
5374 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
5375 _SplayParent->LeftChild = _SplayChild; \
5376 _SplayChild->Parent = _SplayParent; \
5379 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
5381 PRTL_SPLAY_LINKS _SplayParent; \
5382 PRTL_SPLAY_LINKS _SplayChild; \
5383 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
5384 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
5385 _SplayParent->RightChild = _SplayChild; \
5386 _SplayChild->Parent = _SplayParent; \
5389 #if !defined(MIDL_PASS)
5394 RtlConvertLongToLuid(
5400 Temp
.QuadPart
= Val
;
5401 Luid
.LowPart
= Temp
.u
.LowPart
;
5402 Luid
.HighPart
= Temp
.u
.HighPart
;
5409 RtlConvertUlongToLuid(
5419 #endif /* !defined(MIDL_PASS) */
5421 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
5422 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
5423 *CallersAddress = (PVOID)_ReturnAddress(); \
5424 *CallersCaller = NULL;
5426 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5430 RtlGetCallersAddress(
5431 OUT PVOID
*CallersAddress
,
5432 OUT PVOID
*CallersCaller
);
5436 #if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
5438 #if (NTDDI_VERSION >= NTDDI_WIN7)
5443 RtlInitHashTableContext(
5444 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
)
5446 Context
->ChainHead
= NULL
;
5447 Context
->PrevLinkage
= NULL
;
5453 RtlInitHashTableContextFromEnumerator(
5454 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
,
5455 IN PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
)
5457 Context
->ChainHead
= Enumerator
->ChainHead
;
5458 Context
->PrevLinkage
= Enumerator
->HashEntry
.Linkage
.Blink
;
5464 RtlReleaseHashTableContext(
5465 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
)
5467 UNREFERENCED_PARAMETER(Context
);
5474 RtlTotalBucketsHashTable(
5475 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
5477 return HashTable
->TableSize
;
5483 RtlNonEmptyBucketsHashTable(
5484 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
5486 return HashTable
->NonEmptyBuckets
;
5492 RtlEmptyBucketsHashTable(
5493 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
5495 return HashTable
->TableSize
- HashTable
->NonEmptyBuckets
;
5501 RtlTotalEntriesHashTable(
5502 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
5504 return HashTable
->NumEntries
;
5510 RtlActiveEnumeratorsHashTable(
5511 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
5513 return HashTable
->NumEnumerators
;
5516 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5518 #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
5520 /******************************************************************************
5521 * Security Manager Functions *
5522 ******************************************************************************/
5524 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5529 SeSinglePrivilegeCheck(
5530 IN LUID PrivilegeValue
,
5531 IN KPROCESSOR_MODE PreviousMode
);
5533 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5536 /******************************************************************************
5538 ******************************************************************************/
5544 ZwAllocateLocallyUniqueId(
5551 IN HANDLE ProcessHandle OPTIONAL
,
5552 IN NTSTATUS ExitStatus
);
5558 OUT PHANDLE ProcessHandle
,
5559 IN ACCESS_MASK DesiredAccess
,
5560 IN POBJECT_ATTRIBUTES ObjectAttributes
,
5561 IN PCLIENT_ID ClientId OPTIONAL
);
5563 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5568 IN HANDLE TimerHandle
,
5569 OUT PBOOLEAN CurrentState OPTIONAL
);
5574 OUT PHANDLE TimerHandle
,
5575 IN ACCESS_MASK DesiredAccess
,
5576 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
5577 IN TIMER_TYPE TimerType
);
5582 OUT PHANDLE TimerHandle
,
5583 IN ACCESS_MASK DesiredAccess
,
5584 IN POBJECT_ATTRIBUTES ObjectAttributes
);
5589 ZwSetInformationThread(
5590 IN HANDLE ThreadHandle
,
5591 IN THREADINFOCLASS ThreadInformationClass
,
5592 IN PVOID ThreadInformation
,
5593 IN ULONG ThreadInformationLength
);
5598 IN HANDLE TimerHandle
,
5599 IN PLARGE_INTEGER DueTime
,
5600 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
5601 IN PVOID TimerContext OPTIONAL
,
5602 IN BOOLEAN ResumeTimer
,
5603 IN LONG Period OPTIONAL
,
5604 OUT PBOOLEAN PreviousState OPTIONAL
);
5610 IN PUNICODE_STRING String
);
5616 IN POWER_INFORMATION_LEVEL PowerInformationLevel
,
5617 IN PVOID InputBuffer OPTIONAL
,
5618 IN ULONG InputBufferLength
,
5619 OUT PVOID OutputBuffer OPTIONAL
,
5620 IN ULONG OutputBufferLength
);
5625 ZwQueryVolumeInformationFile(
5626 IN HANDLE FileHandle
,
5627 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5628 OUT PVOID FsInformation
,
5630 IN FS_INFORMATION_CLASS FsInformationClass
);
5635 ZwDeviceIoControlFile(
5636 IN HANDLE FileHandle
,
5637 IN HANDLE Event OPTIONAL
,
5638 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
5639 IN PVOID ApcContext OPTIONAL
,
5640 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5641 IN ULONG IoControlCode
,
5642 IN PVOID InputBuffer OPTIONAL
,
5643 IN ULONG InputBufferLength
,
5644 OUT PVOID OutputBuffer OPTIONAL
,
5645 IN ULONG OutputBufferLength
);
5647 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5650 #if (NTDDI_VERSION >= NTDDI_WIN7)
5655 IN HANDLE TimerHandle
,
5656 IN TIMER_SET_INFORMATION_CLASS TimerSetInformationClass
,
5657 IN OUT PVOID TimerSetInformation
,
5658 IN ULONG TimerSetInformationLength
);
5659 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5665 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
5666 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
5667 (TypeBitMask), (ComparisonType)))
5669 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5673 VerSetConditionMask(
5674 IN ULONGLONG ConditionMask
,
5676 IN UCHAR Condition
);
5679 typedef struct _KERNEL_USER_TIMES
{
5680 LARGE_INTEGER CreateTime
;
5681 LARGE_INTEGER ExitTime
;
5682 LARGE_INTEGER KernelTime
;
5683 LARGE_INTEGER UserTime
;
5684 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
5686 /* NtXxx Functions */
5688 typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION
{
5689 SystemFirmwareTable_Enumerate
,
5690 SystemFirmwareTable_Get
5691 } SYSTEM_FIRMWARE_TABLE_ACTION
;
5693 typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION
{
5694 ULONG ProviderSignature
;
5695 SYSTEM_FIRMWARE_TABLE_ACTION Action
;
5697 ULONG TableBufferLength
;
5698 UCHAR TableBuffer
[ANYSIZE_ARRAY
];
5699 } SYSTEM_FIRMWARE_TABLE_INFORMATION
, *PSYSTEM_FIRMWARE_TABLE_INFORMATION
;
5703 IN OUT PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo
);
5705 typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER
{
5706 ULONG ProviderSignature
;
5708 PFNFTH FirmwareTableHandler
;
5710 } SYSTEM_FIRMWARE_TABLE_HANDLER
, *PSYSTEM_FIRMWARE_TABLE_HANDLER
;
5713 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
5716 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
5717 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
5718 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
5719 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
5721 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
5722 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
5723 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
5724 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
5725 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
5727 #define SHARED_GLOBAL_FLAGS_ERROR_PORT_V 0x0
5728 #define SHARED_GLOBAL_FLAGS_ERROR_PORT (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V)
5730 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1
5731 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V)
5733 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V 0x2
5734 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V)
5736 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V 0x3
5737 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED \
5738 (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V)
5740 #define SHARED_GLOBAL_FLAGS_SPARE_V 0x4
5741 #define SHARED_GLOBAL_FLAGS_SPARE \
5742 (1UL << SHARED_GLOBAL_FLAGS_SPARE_V)
5744 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V 0x5
5745 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED \
5746 (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V)
5748 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V 0x6
5749 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED \
5750 (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V)
5752 #define EX_INIT_BITS(Flags, Bit) \
5753 *((Flags)) |= (Bit) // Safe to use before concurrently accessible
5755 #define EX_TEST_SET_BIT(Flags, Bit) \
5756 InterlockedBitTestAndSet ((PLONG)(Flags), (Bit))
5758 #define EX_TEST_CLEAR_BIT(Flags, Bit) \
5759 InterlockedBitTestAndReset ((PLONG)(Flags), (Bit))
5761 #define PCCARD_MAP_ERROR 0x01
5762 #define PCCARD_DEVICE_PCI 0x10
5764 #define PCCARD_SCAN_DISABLED 0x01
5765 #define PCCARD_MAP_ZERO 0x02
5766 #define PCCARD_NO_TIMER 0x03
5767 #define PCCARD_NO_PIC 0x04
5768 #define PCCARD_NO_LEGACY_BASE 0x05
5769 #define PCCARD_DUP_LEGACY_BASE 0x06
5770 #define PCCARD_NO_CONTROLLERS 0x07
5772 #define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2))
5774 /* Filesystem runtime library routines */
5776 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5780 FsRtlIsTotalDeviceFailure(
5781 IN NTSTATUS Status
);