4 * Windows Device Driver Kit
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
22 * DBG - Debugging enabled/disabled (0/1)
23 * POOL_TAGGING - Enable pool tagging
24 * _X86_ - X86 environment
30 #if !defined(_NTHAL_) && !defined(_NTIFS_)
31 #define _NTDDK_INCLUDED_
38 #define _CTYPE_DISABLE_MACROS
50 #include <stdarg.h> // FIXME
51 #include <basetyps.h> // FIXME
58 struct _LOADER_PARAMETER_BLOCK
;
60 struct _DRIVE_LAYOUT_INFORMATION_EX
;
61 struct _SET_PARTITION_INFORMATION_EX
;
71 typedef struct _BUS_HANDLER
*PBUS_HANDLER
;
73 typedef struct _PEB
*PPEB
;
77 typedef struct _IMAGE_NT_HEADERS
*PIMAGE_NT_HEADERS32
;
78 typedef struct _IMAGE_NT_HEADERS64
*PIMAGE_NT_HEADERS64
;
81 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS
;
83 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS
;
86 #endif /* _NTIMAGE_ */
88 #define EXCEPTION_READ_FAULT 0
89 #define EXCEPTION_WRITE_FAULT 1
90 #define EXCEPTION_EXECUTE_FAULT 8
92 #if (NTDDI_VERSION >= NTDDI_VISTA)
93 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
94 #elif (NTDDI_VERSION >= NTDDI_WINXP)
95 extern NTSYSAPI CCHAR KeNumberProcessors
;
97 extern PCCHAR KeNumberProcessors
;
100 #define MAX_WOW64_SHARED_ENTRIES 16
102 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
103 #define NX_SUPPORT_POLICY_ALWAYSON 1
104 #define NX_SUPPORT_POLICY_OPTIN 2
105 #define NX_SUPPORT_POLICY_OPTOUT 3
108 ** IRP function codes
111 #define IRP_MN_QUERY_DIRECTORY 0x01
112 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
114 #define IRP_MN_USER_FS_REQUEST 0x00
115 #define IRP_MN_MOUNT_VOLUME 0x01
116 #define IRP_MN_VERIFY_VOLUME 0x02
117 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
118 #define IRP_MN_TRACK_LINK 0x04
119 #define IRP_MN_KERNEL_CALL 0x04
121 #define IRP_MN_LOCK 0x01
122 #define IRP_MN_UNLOCK_SINGLE 0x02
123 #define IRP_MN_UNLOCK_ALL 0x03
124 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
126 #define IRP_MN_FLUSH_AND_PURGE 0x01
128 #define IRP_MN_NORMAL 0x00
129 #define IRP_MN_DPC 0x01
130 #define IRP_MN_MDL 0x02
131 #define IRP_MN_COMPLETE 0x04
132 #define IRP_MN_COMPRESSED 0x08
134 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
135 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
136 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
138 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
140 typedef struct _IO_COUNTERS
{
141 ULONGLONG ReadOperationCount
;
142 ULONGLONG WriteOperationCount
;
143 ULONGLONG OtherOperationCount
;
144 ULONGLONG ReadTransferCount
;
145 ULONGLONG WriteTransferCount
;
146 ULONGLONG OtherTransferCount
;
147 } IO_COUNTERS
, *PIO_COUNTERS
;
149 typedef struct _VM_COUNTERS
{
150 SIZE_T PeakVirtualSize
;
152 ULONG PageFaultCount
;
153 SIZE_T PeakWorkingSetSize
;
154 SIZE_T WorkingSetSize
;
155 SIZE_T QuotaPeakPagedPoolUsage
;
156 SIZE_T QuotaPagedPoolUsage
;
157 SIZE_T QuotaPeakNonPagedPoolUsage
;
158 SIZE_T QuotaNonPagedPoolUsage
;
159 SIZE_T PagefileUsage
;
160 SIZE_T PeakPagefileUsage
;
161 } VM_COUNTERS
, *PVM_COUNTERS
;
163 typedef struct _VM_COUNTERS_EX
165 SIZE_T PeakVirtualSize
;
167 ULONG PageFaultCount
;
168 SIZE_T PeakWorkingSetSize
;
169 SIZE_T WorkingSetSize
;
170 SIZE_T QuotaPeakPagedPoolUsage
;
171 SIZE_T QuotaPagedPoolUsage
;
172 SIZE_T QuotaPeakNonPagedPoolUsage
;
173 SIZE_T QuotaNonPagedPoolUsage
;
174 SIZE_T PagefileUsage
;
175 SIZE_T PeakPagefileUsage
;
177 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
179 typedef struct _POOLED_USAGE_AND_LIMITS
181 SIZE_T PeakPagedPoolUsage
;
182 SIZE_T PagedPoolUsage
;
183 SIZE_T PagedPoolLimit
;
184 SIZE_T PeakNonPagedPoolUsage
;
185 SIZE_T NonPagedPoolUsage
;
186 SIZE_T NonPagedPoolLimit
;
187 SIZE_T PeakPagefileUsage
;
188 SIZE_T PagefileUsage
;
189 SIZE_T PagefileLimit
;
190 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
192 /* DEVICE_OBJECT.Flags */
194 #define DO_VERIFY_VOLUME 0x00000002
195 #define DO_BUFFERED_IO 0x00000004
196 #define DO_EXCLUSIVE 0x00000008
197 #define DO_DIRECT_IO 0x00000010
198 #define DO_MAP_IO_BUFFER 0x00000020
199 #define DO_DEVICE_HAS_NAME 0x00000040
200 #define DO_DEVICE_INITIALIZING 0x00000080
201 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
202 #define DO_LONG_TERM_REQUESTS 0x00000200
203 #define DO_NEVER_LAST_DEVICE 0x00000400
204 #define DO_SHUTDOWN_REGISTERED 0x00000800
205 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
206 #define DO_POWER_PAGABLE 0x00002000
207 #define DO_POWER_INRUSH 0x00004000
208 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
209 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
210 #define DO_FORCE_NEITHER_IO 0x00080000
211 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
212 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
213 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
214 #define DO_DISALLOW_EXECUTE 0x00800000
216 #define DRVO_REINIT_REGISTERED 0x00000008
217 #define DRVO_INITIALIZED 0x00000010
218 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
219 #define DRVO_LEGACY_RESOURCES 0x00000040
221 typedef enum _ARBITER_REQUEST_SOURCE
{
222 ArbiterRequestUndefined
= -1,
223 ArbiterRequestLegacyReported
,
224 ArbiterRequestHalReported
,
225 ArbiterRequestLegacyAssigned
,
226 ArbiterRequestPnpDetected
,
227 ArbiterRequestPnpEnumerated
228 } ARBITER_REQUEST_SOURCE
;
230 typedef enum _ARBITER_RESULT
{
231 ArbiterResultUndefined
= -1,
232 ArbiterResultSuccess
,
233 ArbiterResultExternalConflict
,
234 ArbiterResultNullRequest
237 typedef enum _ARBITER_ACTION
{
238 ArbiterActionTestAllocation
,
239 ArbiterActionRetestAllocation
,
240 ArbiterActionCommitAllocation
,
241 ArbiterActionRollbackAllocation
,
242 ArbiterActionQueryAllocatedResources
,
243 ArbiterActionWriteReservedResources
,
244 ArbiterActionQueryConflict
,
245 ArbiterActionQueryArbitrate
,
246 ArbiterActionAddReserved
,
247 ArbiterActionBootAllocation
248 } ARBITER_ACTION
, *PARBITER_ACTION
;
250 typedef struct _ARBITER_CONFLICT_INFO
{
251 PDEVICE_OBJECT OwningObject
;
254 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
256 typedef struct _ARBITER_PARAMETERS
{
259 IN OUT PLIST_ENTRY ArbitrationList
;
260 IN ULONG AllocateFromCount
;
261 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
264 IN OUT PLIST_ENTRY ArbitrationList
;
265 IN ULONG AllocateFromCount
;
266 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
269 IN OUT PLIST_ENTRY ArbitrationList
;
272 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
273 } QueryAllocatedResources
;
275 IN PDEVICE_OBJECT PhysicalDeviceObject
;
276 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
277 OUT PULONG ConflictCount
;
278 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
281 IN PLIST_ENTRY ArbitrationList
;
284 IN PDEVICE_OBJECT ReserveDevice
;
287 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
289 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
291 typedef struct _ARBITER_LIST_ENTRY
{
292 LIST_ENTRY ListEntry
;
293 ULONG AlternativeCount
;
294 PIO_RESOURCE_DESCRIPTOR Alternatives
;
295 PDEVICE_OBJECT PhysicalDeviceObject
;
296 ARBITER_REQUEST_SOURCE RequestSource
;
299 INTERFACE_TYPE InterfaceType
;
302 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
303 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
304 ARBITER_RESULT Result
;
305 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
308 (NTAPI
*PARBITER_HANDLER
)(
309 IN OUT PVOID Context
,
310 IN ARBITER_ACTION Action
,
311 IN OUT PARBITER_PARAMETERS Parameters
);
313 #define ARBITER_PARTIAL 0x00000001
315 typedef struct _ARBITER_INTERFACE
{
319 PINTERFACE_REFERENCE InterfaceReference
;
320 PINTERFACE_DEREFERENCE InterfaceDereference
;
321 PARBITER_HANDLER ArbiterHandler
;
323 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
325 typedef struct _PCI_AGP_CAPABILITY
{
326 PCI_CAPABILITIES_HEADER Header
;
330 struct _PCI_AGP_STATUS
{
335 ULONG HostTransDisable
:1;
337 ULONG ITA_Coherent
:1;
338 ULONG SideBandAddressing
:1;
339 ULONG CalibrationCycle
:3;
340 ULONG AsyncRequestSize
:3;
344 ULONG RequestQueueDepthMaximum
:8;
346 struct _PCI_AGP_COMMAND
{
349 ULONG FastWriteEnable
:1;
350 ULONG FourGBEnable
:1;
355 ULONG CalibrationCycle
:3;
356 ULONG AsyncReqSize
:3;
358 ULONG RequestQueueDepth
:8;
360 } PCI_AGP_CAPABILITY
, *PPCI_AGP_CAPABILITY
;
362 typedef enum _EXTENDED_AGP_REGISTER
{
370 } EXTENDED_AGP_REGISTER
, *PEXTENDED_AGP_REGISTER
;
372 typedef struct _PCI_AGP_ISOCH_STATUS
{
379 } PCI_AGP_ISOCH_STATUS
, *PPCI_AGP_ISOCH_STATUS
;
381 typedef struct _PCI_AGP_CONTROL
{
387 } PCI_AGP_CONTROL
, *PPCI_AGP_CONTROL
;
389 typedef struct _PCI_AGP_APERTURE_PAGE_SIZE
{
390 USHORT PageSizeMask
:11;
392 USHORT PageSizeSelect
:4;
393 } PCI_AGP_APERTURE_PAGE_SIZE
, *PPCI_AGP_APERTURE_PAGE_SIZE
;
395 typedef struct _PCI_AGP_ISOCH_COMMAND
{
399 } PCI_AGP_ISOCH_COMMAND
, *PPCI_AGP_ISOCH_COMMAND
;
401 typedef struct PCI_AGP_EXTENDED_CAPABILITY
{
402 PCI_AGP_ISOCH_STATUS IsochStatus
;
403 PCI_AGP_CONTROL AgpControl
;
405 PCI_AGP_APERTURE_PAGE_SIZE AperturePageSize
;
408 PCI_AGP_ISOCH_COMMAND IsochCommand
;
409 } PCI_AGP_EXTENDED_CAPABILITY
, *PPCI_AGP_EXTENDED_CAPABILITY
;
411 #define PCI_AGP_RATE_1X 0x1
412 #define PCI_AGP_RATE_2X 0x2
413 #define PCI_AGP_RATE_4X 0x4
415 #define PCIX_MODE_CONVENTIONAL_PCI 0x0
416 #define PCIX_MODE1_66MHZ 0x1
417 #define PCIX_MODE1_100MHZ 0x2
418 #define PCIX_MODE1_133MHZ 0x3
419 #define PCIX_MODE2_266_66MHZ 0x9
420 #define PCIX_MODE2_266_100MHZ 0xA
421 #define PCIX_MODE2_266_133MHZ 0xB
422 #define PCIX_MODE2_533_66MHZ 0xD
423 #define PCIX_MODE2_533_100MHZ 0xE
424 #define PCIX_MODE2_533_133MHZ 0xF
426 #define PCIX_VERSION_MODE1_ONLY 0x0
427 #define PCIX_VERSION_MODE2_ECC 0x1
428 #define PCIX_VERSION_DUAL_MODE_ECC 0x2
430 typedef struct _PCIX_BRIDGE_CAPABILITY
{
431 PCI_CAPABILITIES_HEADER Header
;
435 USHORT Bus133MHzCapable
:1;
436 USHORT SplitCompletionDiscarded
:1;
437 USHORT UnexpectedSplitCompletion
:1;
438 USHORT SplitCompletionOverrun
:1;
439 USHORT SplitRequestDelayed
:1;
440 USHORT BusModeFrequency
:4;
443 USHORT Bus266MHzCapable
:1;
444 USHORT Bus533MHzCapable
:1;
450 ULONG FunctionNumber
:3;
451 ULONG DeviceNumber
:5;
454 ULONG Device133MHzCapable
:1;
455 ULONG SplitCompletionDiscarded
:1;
456 ULONG UnexpectedSplitCompletion
:1;
457 ULONG SplitCompletionOverrun
:1;
458 ULONG SplitRequestDelayed
:1;
461 ULONG Device266MHzCapable
:1;
462 ULONG Device533MHzCapable
:1;
466 USHORT UpstreamSplitTransactionCapacity
;
467 USHORT UpstreamSplitTransactionLimit
;
468 USHORT DownstreamSplitTransactionCapacity
;
469 USHORT DownstreamSplitTransactionLimit
;
472 ULONG SelectSecondaryRegisters
:1;
473 ULONG ErrorPresentInOtherBank
:1;
474 ULONG AdditionalCorrectableError
:1;
475 ULONG AdditionalUncorrectableError
:1;
477 ULONG ErrorCorrected
:1;
479 ULONG ErrorFirstCommand
:4;
480 ULONG ErrorSecondCommand
:4;
481 ULONG ErrorUpperAttributes
:4;
482 ULONG ControlUpdateEnable
:1;
484 ULONG DisableSingleBitCorrection
:1;
489 ULONG EccFirstAddress
;
490 ULONG EccSecondAddress
;
492 } PCIX_BRIDGE_CAPABILITY
, *PPCIX_BRIDGE_CAPABILITY
;
494 typedef struct _PCI_SUBSYSTEM_IDS_CAPABILITY
{
495 PCI_CAPABILITIES_HEADER Header
;
499 } PCI_SUBSYSTEM_IDS_CAPABILITY
, *PPCI_SUBSYSTEM_IDS_CAPABILITY
;
501 #define OSC_FIRMWARE_FAILURE 0x02
502 #define OSC_UNRECOGNIZED_UUID 0x04
503 #define OSC_UNRECOGNIZED_REVISION 0x08
504 #define OSC_CAPABILITIES_MASKED 0x10
506 #define PCI_ROOT_BUS_OSC_METHOD_CAPABILITY_REVISION 0x01
508 typedef struct _PCI_ROOT_BUS_OSC_SUPPORT_FIELD
{
511 ULONG ExtendedConfigOpRegions
:1;
512 ULONG ActiveStatePowerManagement
:1;
513 ULONG ClockPowerManagement
:1;
514 ULONG SegmentGroups
:1;
515 ULONG MessageSignaledInterrupts
:1;
516 ULONG WindowsHardwareErrorArchitecture
:1;
521 } PCI_ROOT_BUS_OSC_SUPPORT_FIELD
, *PPCI_ROOT_BUS_OSC_SUPPORT_FIELD
;
523 typedef struct _PCI_ROOT_BUS_OSC_CONTROL_FIELD
{
526 ULONG ExpressNativeHotPlug
:1;
527 ULONG ShpcNativeHotPlug
:1;
528 ULONG ExpressNativePME
:1;
529 ULONG ExpressAdvancedErrorReporting
:1;
530 ULONG ExpressCapabilityStructure
:1;
535 } PCI_ROOT_BUS_OSC_CONTROL_FIELD
, *PPCI_ROOT_BUS_OSC_CONTROL_FIELD
;
537 typedef enum _PCI_HARDWARE_INTERFACE
{
542 } PCI_HARDWARE_INTERFACE
, *PPCI_HARDWARE_INTERFACE
;
549 typedef struct _PCI_ROOT_BUS_HARDWARE_CAPABILITY
{
550 PCI_HARDWARE_INTERFACE SecondaryInterface
;
552 BOOLEAN BusCapabilitiesFound
;
553 ULONG CurrentSpeedAndMode
;
554 ULONG SupportedSpeedsAndModes
;
555 BOOLEAN DeviceIDMessagingCapable
;
556 PCI_BUS_WIDTH SecondaryBusWidth
;
558 PCI_ROOT_BUS_OSC_SUPPORT_FIELD OscFeatureSupport
;
559 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlRequest
;
560 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlGranted
;
561 } PCI_ROOT_BUS_HARDWARE_CAPABILITY
, *PPCI_ROOT_BUS_HARDWARE_CAPABILITY
;
563 typedef union _PCI_EXPRESS_CAPABILITIES_REGISTER
{
565 USHORT CapabilityVersion
:4;
567 USHORT SlotImplemented
:1;
568 USHORT InterruptMessageNumber
:5;
572 } PCI_EXPRESS_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_CAPABILITIES_REGISTER
;
574 typedef union _PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
{
576 ULONG MaxPayloadSizeSupported
:3;
577 ULONG PhantomFunctionsSupported
:2;
578 ULONG ExtendedTagSupported
:1;
579 ULONG L0sAcceptableLatency
:3;
580 ULONG L1AcceptableLatency
:3;
582 ULONG RoleBasedErrorReporting
:1;
584 ULONG CapturedSlotPowerLimit
:8;
585 ULONG CapturedSlotPowerLimitScale
:2;
589 } PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
;
591 #define PCI_EXPRESS_AER_DEVICE_CONTROL_MASK 0x07;
593 typedef union _PCI_EXPRESS_DEVICE_CONTROL_REGISTER
{
595 USHORT CorrectableErrorEnable
:1;
596 USHORT NonFatalErrorEnable
:1;
597 USHORT FatalErrorEnable
:1;
598 USHORT UnsupportedRequestErrorEnable
:1;
599 USHORT EnableRelaxedOrder
:1;
600 USHORT MaxPayloadSize
:3;
601 USHORT ExtendedTagEnable
:1;
602 USHORT PhantomFunctionsEnable
:1;
603 USHORT AuxPowerEnable
:1;
604 USHORT NoSnoopEnable
:1;
605 USHORT MaxReadRequestSize
:3;
606 USHORT BridgeConfigRetryEnable
:1;
609 } PCI_EXPRESS_DEVICE_CONTROL_REGISTER
, *PPCI_EXPRESS_DEVICE_CONTROL_REGISTER
;
611 #define PCI_EXPRESS_AER_DEVICE_STATUS_MASK 0x0F;
613 typedef union _PCI_EXPRESS_DEVICE_STATUS_REGISTER
{
615 USHORT CorrectableErrorDetected
:1;
616 USHORT NonFatalErrorDetected
:1;
617 USHORT FatalErrorDetected
:1;
618 USHORT UnsupportedRequestDetected
:1;
619 USHORT AuxPowerDetected
:1;
620 USHORT TransactionsPending
:1;
624 } PCI_EXPRESS_DEVICE_STATUS_REGISTER
, *PPCI_EXPRESS_DEVICE_STATUS_REGISTER
;
626 typedef union _PCI_EXPRESS_LINK_CAPABILITIES_REGISTER
{
628 ULONG MaximumLinkSpeed
:4;
629 ULONG MaximumLinkWidth
:6;
630 ULONG ActiveStatePMSupport
:2;
631 ULONG L0sExitLatency
:3;
632 ULONG L1ExitLatency
:3;
633 ULONG ClockPowerManagement
:1;
634 ULONG SurpriseDownErrorReportingCapable
:1;
635 ULONG DataLinkLayerActiveReportingCapable
:1;
640 } PCI_EXPRESS_LINK_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_LINK_CAPABILITIES_REGISTER
;
642 typedef union _PCI_EXPRESS_LINK_CONTROL_REGISTER
{
644 USHORT ActiveStatePMControl
:2;
646 USHORT ReadCompletionBoundary
:1;
647 USHORT LinkDisable
:1;
648 USHORT RetrainLink
:1;
649 USHORT CommonClockConfig
:1;
650 USHORT ExtendedSynch
:1;
651 USHORT EnableClockPowerManagement
:1;
655 } PCI_EXPRESS_LINK_CONTROL_REGISTER
, *PPCI_EXPRESS_LINK_CONTROL_REGISTER
;
657 typedef union _PCI_EXPRESS_LINK_STATUS_REGISTER
{
662 USHORT LinkTraining
:1;
663 USHORT SlotClockConfig
:1;
664 USHORT DataLinkLayerActive
:1;
668 } PCI_EXPRESS_LINK_STATUS_REGISTER
, *PPCI_EXPRESS_LINK_STATUS_REGISTER
;
670 typedef union _PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
{
672 ULONG AttentionButtonPresent
:1;
673 ULONG PowerControllerPresent
:1;
674 ULONG MRLSensorPresent
:1;
675 ULONG AttentionIndicatorPresent
:1;
676 ULONG PowerIndicatorPresent
:1;
677 ULONG HotPlugSurprise
:1;
678 ULONG HotPlugCapable
:1;
679 ULONG SlotPowerLimit
:8;
680 ULONG SlotPowerLimitScale
:2;
681 ULONG ElectromechanicalLockPresent
:1;
682 ULONG NoCommandCompletedSupport
:1;
683 ULONG PhysicalSlotNumber
:13;
686 } PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
;
688 typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER
{
690 USHORT AttentionButtonEnable
:1;
691 USHORT PowerFaultDetectEnable
:1;
692 USHORT MRLSensorEnable
:1;
693 USHORT PresenceDetectEnable
:1;
694 USHORT CommandCompletedEnable
:1;
695 USHORT HotPlugInterruptEnable
:1;
696 USHORT AttentionIndicatorControl
:2;
697 USHORT PowerIndicatorControl
:2;
698 USHORT PowerControllerControl
:1;
699 USHORT ElectromechanicalLockControl
:1;
700 USHORT DataLinkStateChangeEnable
:1;
704 } PCI_EXPRESS_SLOT_CONTROL_REGISTER
, *PPCI_EXPRESS_SLOT_CONTROL_REGISTER
;
706 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
707 HalInstalledBusInformation
,
708 HalProfileSourceInformation
,
709 HalInformationClassUnused1
,
711 HalProcessorSpeedInformation
,
712 HalCallbackInformation
,
713 HalMapRegisterInformation
,
714 HalMcaLogInformation
,
715 HalFrameBufferCachingInformation
,
716 HalDisplayBiosInformation
,
717 HalProcessorFeatureInformation
,
718 HalNumaTopologyInterface
,
720 HalCmcLogInformation
,
721 HalCpeLogInformation
,
722 HalQueryMcaInterface
,
723 HalQueryAMLIIllegalIOPortAddresses
,
724 HalQueryMaxHotPlugMemoryAddress
,
725 HalPartitionIpiInterface
,
726 HalPlatformInformation
,
727 HalQueryProfileSourceList
,
728 HalInitLogInformation
,
729 HalFrequencyInformation
,
730 HalProcessorBrandString
,
731 HalHypervisorInformation
,
732 HalPlatformTimerInformation
,
733 HalAcpiAuditInformation
734 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
736 typedef enum _HAL_SET_INFORMATION_CLASS
{
737 HalProfileSourceInterval
,
738 HalProfileSourceInterruptHandler
,
739 HalMcaRegisterDriver
,
740 HalKernelErrorHandler
,
741 HalCmcRegisterDriver
,
742 HalCpeRegisterDriver
,
746 HalGenerateCmcInterrupt
,
747 HalProfileSourceTimerHandler
,
749 HalProfileDpgoSourceInterruptHandler
750 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
752 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
{
753 KPROFILE_SOURCE Source
;
755 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
757 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
{
758 KPROFILE_SOURCE Source
;
761 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
763 typedef struct _MAP_REGISTER_ENTRY
{
765 BOOLEAN WriteToDevice
;
766 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
768 typedef struct _DEBUG_DEVICE_ADDRESS
{
772 PUCHAR TranslatedAddress
;
774 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
776 typedef struct _DEBUG_MEMORY_REQUIREMENTS
{
777 PHYSICAL_ADDRESS Start
;
778 PHYSICAL_ADDRESS MaxEnd
;
779 PVOID VirtualAddress
;
783 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
785 typedef struct _DEBUG_DEVICE_DESCRIPTOR
{
796 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
797 DEBUG_MEMORY_REQUIREMENTS Memory
;
798 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
800 typedef struct _PM_DISPATCH_TABLE
{
804 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
806 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
807 TranslateChildToParent
,
808 TranslateParentToChild
809 } RESOURCE_TRANSLATION_DIRECTION
;
812 (NTAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
813 IN OUT PVOID Context
,
814 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
815 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
816 IN ULONG AlternativesCount OPTIONAL
,
817 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
818 IN PDEVICE_OBJECT PhysicalDeviceObject
,
819 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
822 (NTAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
823 IN PVOID Context OPTIONAL
,
824 IN PIO_RESOURCE_DESCRIPTOR Source
,
825 IN PDEVICE_OBJECT PhysicalDeviceObject
,
826 OUT PULONG TargetCount
,
827 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
829 typedef struct _TRANSLATOR_INTERFACE
{
833 PINTERFACE_REFERENCE InterfaceReference
;
834 PINTERFACE_DEREFERENCE InterfaceDereference
;
835 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
836 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
837 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
840 (FASTCALL
*pHalExamineMBR
)(
841 IN PDEVICE_OBJECT DeviceObject
,
843 IN ULONG MBRTypeIdentifier
,
847 (FASTCALL
*pHalIoReadPartitionTable
)(
848 IN PDEVICE_OBJECT DeviceObject
,
850 IN BOOLEAN ReturnRecognizedPartitions
,
851 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
854 (FASTCALL
*pHalIoSetPartitionInformation
)(
855 IN PDEVICE_OBJECT DeviceObject
,
857 IN ULONG PartitionNumber
,
858 IN ULONG PartitionType
);
861 (FASTCALL
*pHalIoWritePartitionTable
)(
862 IN PDEVICE_OBJECT DeviceObject
,
864 IN ULONG SectorsPerTrack
,
865 IN ULONG NumberOfHeads
,
866 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
869 (FASTCALL
*pHalHandlerForBus
)(
870 IN INTERFACE_TYPE InterfaceType
,
874 (FASTCALL
*pHalReferenceBusHandler
)(
875 IN PBUS_HANDLER BusHandler
);
878 (NTAPI
*pHalQuerySystemInformation
)(
879 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
882 OUT PULONG ReturnedLength
);
885 (NTAPI
*pHalSetSystemInformation
)(
886 IN HAL_SET_INFORMATION_CLASS InformationClass
,
891 (NTAPI
*pHalQueryBusSlots
)(
892 IN PBUS_HANDLER BusHandler
,
894 OUT PULONG SlotNumbers
,
895 OUT PULONG ReturnedLength
);
898 (NTAPI
*pHalInitPnpDriver
)(
902 (NTAPI
*pHalInitPowerManagement
)(
903 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
904 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
906 typedef struct _DMA_ADAPTER
*
907 (NTAPI
*pHalGetDmaAdapter
)(
909 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
910 OUT PULONG NumberOfMapRegisters
);
913 (NTAPI
*pHalGetInterruptTranslator
)(
914 IN INTERFACE_TYPE ParentInterfaceType
,
915 IN ULONG ParentBusNumber
,
916 IN INTERFACE_TYPE BridgeInterfaceType
,
919 OUT PTRANSLATOR_INTERFACE Translator
,
920 OUT PULONG BridgeBusNumber
);
923 (NTAPI
*pHalStartMirroring
)(
927 (NTAPI
*pHalEndMirroring
)(
928 IN ULONG PassNumber
);
931 (NTAPI
*pHalMirrorPhysicalMemory
)(
932 IN PHYSICAL_ADDRESS PhysicalAddress
,
933 IN LARGE_INTEGER NumberOfBytes
);
936 (NTAPI
*pHalMirrorVerify
)(
937 IN PHYSICAL_ADDRESS PhysicalAddress
,
938 IN LARGE_INTEGER NumberOfBytes
);
941 (NTAPI
*pHalEndOfBoot
)(
946 (NTAPI
*pHalTranslateBusAddress
)(
947 IN INTERFACE_TYPE InterfaceType
,
949 IN PHYSICAL_ADDRESS BusAddress
,
950 IN OUT PULONG AddressSpace
,
951 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
955 (NTAPI
*pHalAssignSlotResources
)(
956 IN PUNICODE_STRING RegistryPath
,
957 IN PUNICODE_STRING DriverClassName OPTIONAL
,
958 IN PDRIVER_OBJECT DriverObject
,
959 IN PDEVICE_OBJECT DeviceObject
,
960 IN INTERFACE_TYPE BusType
,
963 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
967 (NTAPI
*pHalHaltSystem
)(
972 (NTAPI
*pHalResetDisplay
)(
977 (NTAPI
*pHalVectorToIDTEntry
)(
982 (NTAPI
*pHalFindBusAddressTranslation
)(
983 IN PHYSICAL_ADDRESS BusAddress
,
984 IN OUT PULONG AddressSpace
,
985 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
986 IN OUT PULONG_PTR Context
,
991 (NTAPI
*pKdSetupPciDeviceForDebugging
)(
992 IN PVOID LoaderBlock OPTIONAL
,
993 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
997 (NTAPI
*pKdReleasePciDeviceForDebugging
)(
998 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
1002 (NTAPI
*pKdGetAcpiTablePhase0
)(
1003 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
1004 IN ULONG Signature
);
1008 (NTAPI
*pHalGetAcpiTable
)(
1010 IN PCSTR OemId OPTIONAL
,
1011 IN PCSTR OemTableId OPTIONAL
);
1015 (NTAPI
*pKdCheckPowerButton
)(
1018 #if (NTDDI_VERSION >= NTDDI_VISTA)
1021 (NTAPI
*pKdMapPhysicalMemory64
)(
1022 IN PHYSICAL_ADDRESS PhysicalAddress
,
1023 IN ULONG NumberPages
,
1024 IN BOOLEAN FlushCurrentTLB
);
1028 (NTAPI
*pKdUnmapVirtualAddress
)(
1029 IN PVOID VirtualAddress
,
1030 IN ULONG NumberPages
,
1031 IN BOOLEAN FlushCurrentTLB
);
1035 (NTAPI
*pKdMapPhysicalMemory64
)(
1036 IN PHYSICAL_ADDRESS PhysicalAddress
,
1037 IN ULONG NumberPages
);
1041 (NTAPI
*pKdUnmapVirtualAddress
)(
1042 IN PVOID VirtualAddress
,
1043 IN ULONG NumberPages
);
1049 (NTAPI
*pKdGetPciDataByOffset
)(
1051 IN ULONG SlotNumber
,
1058 (NTAPI
*pKdSetPciDataByOffset
)(
1060 IN ULONG SlotNumber
,
1066 (NTAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
1072 (NTAPI
*PCI_ERROR_HANDLER_CALLBACK
)(
1077 (NTAPI
*pHalSetPciErrorHandlerCallback
)(
1078 IN PCI_ERROR_HANDLER_CALLBACK Callback
);
1080 #if 1 /* Not present in WDK 7600 */
1082 (FASTCALL
*pHalIoAssignDriveLetters
)(
1083 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
1084 IN PSTRING NtDeviceName
,
1085 OUT PUCHAR NtSystemPath
,
1086 OUT PSTRING NtSystemPathString
);
1091 pHalQuerySystemInformation HalQuerySystemInformation
;
1092 pHalSetSystemInformation HalSetSystemInformation
;
1093 pHalQueryBusSlots HalQueryBusSlots
;
1095 pHalExamineMBR HalExamineMBR
;
1096 #if 1 /* Not present in WDK 7600 */
1097 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
1099 pHalIoReadPartitionTable HalIoReadPartitionTable
;
1100 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
1101 pHalIoWritePartitionTable HalIoWritePartitionTable
;
1102 pHalHandlerForBus HalReferenceHandlerForBus
;
1103 pHalReferenceBusHandler HalReferenceBusHandler
;
1104 pHalReferenceBusHandler HalDereferenceBusHandler
;
1105 pHalInitPnpDriver HalInitPnpDriver
;
1106 pHalInitPowerManagement HalInitPowerManagement
;
1107 pHalGetDmaAdapter HalGetDmaAdapter
;
1108 pHalGetInterruptTranslator HalGetInterruptTranslator
;
1109 pHalStartMirroring HalStartMirroring
;
1110 pHalEndMirroring HalEndMirroring
;
1111 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
1112 pHalEndOfBoot HalEndOfBoot
;
1113 pHalMirrorVerify HalMirrorVerify
;
1114 pHalGetAcpiTable HalGetCachedAcpiTable
;
1115 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback
;
1117 pHalGetErrorCapList HalGetErrorCapList
;
1118 pHalInjectError HalInjectError
;
1120 } HAL_DISPATCH
, *PHAL_DISPATCH
;
1122 /* GCC/MSVC and WDK compatible declaration */
1123 extern NTKERNELAPI HAL_DISPATCH HalDispatchTable
;
1125 #if defined(_NTOSKRNL_) || defined(_BLDR_)
1126 #define HALDISPATCH (&HalDispatchTable)
1128 /* This is a WDK compatibility definition */
1129 #define HalDispatchTable (&HalDispatchTable)
1130 #define HALDISPATCH HalDispatchTable
1133 #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
1134 #define HalDispatchTableVersion HALDISPATCH->Version
1135 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
1136 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
1137 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
1138 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
1139 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
1140 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
1141 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
1142 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
1143 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
1144 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
1145 #define HalStartMirroring HALDISPATCH->HalStartMirroring
1146 #define HalEndMirroring HALDISPATCH->HalEndMirroring
1147 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
1148 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
1149 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
1151 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1152 ULONG AlignmentRequirement
;
1153 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1155 typedef struct _FILE_NAME_INFORMATION
{
1156 ULONG FileNameLength
;
1158 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1161 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1162 ULONG FileAttributes
;
1164 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1166 typedef struct _FILE_DISPOSITION_INFORMATION
{
1168 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1170 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1171 LARGE_INTEGER EndOfFile
;
1172 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1174 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1175 LARGE_INTEGER ValidDataLength
;
1176 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1178 typedef union _FILE_SEGMENT_ELEMENT
{
1180 ULONGLONG Alignment
;
1181 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1183 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
1185 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1189 VerSetConditionMask(
1190 IN ULONGLONG ConditionMask
,
1192 IN UCHAR Condition
);
1195 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
1196 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
1197 (TypeBitMask), (ComparisonType)))
1199 /* RtlVerifyVersionInfo() TypeMask */
1201 #define VER_MINORVERSION 0x0000001
1202 #define VER_MAJORVERSION 0x0000002
1203 #define VER_BUILDNUMBER 0x0000004
1204 #define VER_PLATFORMID 0x0000008
1205 #define VER_SERVICEPACKMINOR 0x0000010
1206 #define VER_SERVICEPACKMAJOR 0x0000020
1207 #define VER_SUITENAME 0x0000040
1208 #define VER_PRODUCT_TYPE 0x0000080
1210 /* RtlVerifyVersionInfo() ComparisonType */
1213 #define VER_GREATER 2
1214 #define VER_GREATER_EQUAL 3
1216 #define VER_LESS_EQUAL 5
1220 #define VER_CONDITION_MASK 7
1221 #define VER_NUM_BITS_PER_CONDITION_MASK 3
1223 typedef struct _IMAGE_INFO
{
1224 _ANONYMOUS_UNION
union {
1226 _ANONYMOUS_STRUCT
struct {
1227 ULONG ImageAddressingMode
:8;
1228 ULONG SystemModeImage
:1;
1229 ULONG ImageMappedToAllPids
:1;
1230 ULONG ExtendedInfoPresent
:1;
1235 ULONG ImageSelector
;
1237 ULONG ImageSectionNumber
;
1238 } IMAGE_INFO
, *PIMAGE_INFO
;
1240 #define IMAGE_ADDRESSING_MODE_32BIT 3
1242 typedef enum _BUS_DATA_TYPE
{
1243 ConfigurationSpaceUndefined
= -1,
1251 PCMCIAConfiguration
,
1254 PNPISAConfiguration
,
1255 SgiInternalConfiguration
,
1257 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
1259 typedef struct _NT_TIB
{
1260 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
1264 _ANONYMOUS_UNION
union {
1268 PVOID ArbitraryUserPointer
;
1269 struct _NT_TIB
*Self
;
1272 typedef struct _NT_TIB32
{
1273 ULONG ExceptionList
;
1277 __GNU_EXTENSION
union {
1281 ULONG ArbitraryUserPointer
;
1283 } NT_TIB32
,*PNT_TIB32
;
1285 typedef struct _NT_TIB64
{
1286 ULONG64 ExceptionList
;
1289 ULONG64 SubSystemTib
;
1290 __GNU_EXTENSION
union {
1294 ULONG64 ArbitraryUserPointer
;
1296 } NT_TIB64
,*PNT_TIB64
;
1298 typedef enum _PROCESSINFOCLASS
{
1299 ProcessBasicInformation
,
1304 ProcessBasePriority
,
1305 ProcessRaisePriority
,
1307 ProcessExceptionPort
,
1309 ProcessLdtInformation
,
1311 ProcessDefaultHardErrorMode
,
1312 ProcessIoPortHandlers
,
1313 ProcessPooledUsageAndLimits
,
1314 ProcessWorkingSetWatch
,
1315 ProcessUserModeIOPL
,
1316 ProcessEnableAlignmentFaultFixup
,
1317 ProcessPriorityClass
,
1318 ProcessWx86Information
,
1320 ProcessAffinityMask
,
1321 ProcessPriorityBoost
,
1323 ProcessSessionInformation
,
1324 ProcessForegroundInformation
,
1325 ProcessWow64Information
,
1326 ProcessImageFileName
,
1327 ProcessLUIDDeviceMapsEnabled
,
1328 ProcessBreakOnTermination
,
1329 ProcessDebugObjectHandle
,
1331 ProcessHandleTracing
,
1333 ProcessExecuteFlags
,
1334 ProcessTlsInformation
,
1336 ProcessImageInformation
,
1338 ProcessPagePriority
,
1339 ProcessInstrumentationCallback
,
1340 ProcessThreadStackAllocation
,
1341 ProcessWorkingSetWatchEx
,
1342 ProcessImageFileNameWin32
,
1343 ProcessImageFileMapping
,
1344 ProcessAffinityUpdateMode
,
1345 ProcessMemoryAllocationMode
,
1346 ProcessGroupInformation
,
1347 ProcessTokenVirtualizationEnabled
,
1348 ProcessConsoleHostProcess
,
1349 ProcessWindowInformation
,
1353 typedef enum _THREADINFOCLASS
{
1354 ThreadBasicInformation
,
1359 ThreadImpersonationToken
,
1360 ThreadDescriptorTableEntry
,
1361 ThreadEnableAlignmentFaultFixup
,
1362 ThreadEventPair_Reusable
,
1363 ThreadQuerySetWin32StartAddress
,
1365 ThreadPerformanceCount
,
1366 ThreadAmILastThread
,
1367 ThreadIdealProcessor
,
1368 ThreadPriorityBoost
,
1369 ThreadSetTlsArrayAddress
,
1371 ThreadHideFromDebugger
,
1372 ThreadBreakOnTermination
,
1373 ThreadSwitchLegacyState
,
1375 ThreadLastSystemCall
,
1379 ThreadActualBasePriority
,
1380 ThreadTebInformation
,
1384 ThreadGroupInformation
,
1385 ThreadUmsInformation
,
1386 ThreadCounterProfiling
,
1387 ThreadIdealProcessorEx
,
1391 typedef struct _PROCESS_BASIC_INFORMATION
{
1392 NTSTATUS ExitStatus
;
1393 struct _PEB
*PebBaseAddress
;
1394 ULONG_PTR AffinityMask
;
1395 KPRIORITY BasePriority
;
1396 ULONG_PTR UniqueProcessId
;
1397 ULONG_PTR InheritedFromUniqueProcessId
;
1398 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
1400 typedef struct _PROCESS_WS_WATCH_INFORMATION
{
1403 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
1405 typedef struct _PROCESS_DEVICEMAP_INFORMATION
{
1406 __GNU_EXTENSION
union {
1408 HANDLE DirectoryHandle
;
1412 UCHAR DriveType
[32];
1415 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
1417 typedef struct _KERNEL_USER_TIMES
{
1418 LARGE_INTEGER CreateTime
;
1419 LARGE_INTEGER ExitTime
;
1420 LARGE_INTEGER KernelTime
;
1421 LARGE_INTEGER UserTime
;
1422 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1424 typedef struct _PROCESS_ACCESS_TOKEN
{
1427 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1429 typedef struct _PROCESS_SESSION_INFORMATION
{
1431 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1433 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
1434 IoQueryDeviceIdentifier
= 0,
1435 IoQueryDeviceConfigurationData
,
1436 IoQueryDeviceComponentInformation
,
1437 IoQueryDeviceMaxData
1438 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
1440 typedef struct _DISK_SIGNATURE
{
1441 ULONG PartitionStyle
;
1442 _ANONYMOUS_UNION
union {
1451 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
1454 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
1457 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
1458 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
1459 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
1460 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
1462 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1463 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1464 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1465 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1466 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1469 (NTAPI
*PTIMER_APC_ROUTINE
)(
1470 IN PVOID TimerContext
,
1471 IN ULONG TimerLowValue
,
1472 IN LONG TimerHighValue
);
1474 typedef struct _KUSER_SHARED_DATA
1476 ULONG TickCountLowDeprecated
;
1477 ULONG TickCountMultiplier
;
1478 volatile KSYSTEM_TIME InterruptTime
;
1479 volatile KSYSTEM_TIME SystemTime
;
1480 volatile KSYSTEM_TIME TimeZoneBias
;
1481 USHORT ImageNumberLow
;
1482 USHORT ImageNumberHigh
;
1483 WCHAR NtSystemRoot
[260];
1484 ULONG MaxStackTraceDepth
;
1485 ULONG CryptoExponent
;
1487 ULONG LargePageMinimum
;
1489 NT_PRODUCT_TYPE NtProductType
;
1490 BOOLEAN ProductTypeIsValid
;
1491 ULONG NtMajorVersion
;
1492 ULONG NtMinorVersion
;
1493 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
1496 volatile ULONG TimeSlip
;
1497 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
1498 ULONG AltArchitecturePad
[1];
1499 LARGE_INTEGER SystemExpirationDate
;
1501 BOOLEAN KdDebuggerEnabled
;
1502 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
1503 UCHAR NXSupportPolicy
;
1505 volatile ULONG ActiveConsoleId
;
1506 volatile ULONG DismountCount
;
1507 ULONG ComPlusPackage
;
1508 ULONG LastSystemRITEventTickCount
;
1509 ULONG NumberOfPhysicalPages
;
1510 BOOLEAN SafeBootMode
;
1511 #if (NTDDI_VERSION >= NTDDI_WIN7)
1515 UCHAR TscQpcEnabled
:1;
1516 UCHAR TscQpcSpareFlag
:1;
1517 UCHAR TscQpcShift
:6;
1522 #if (NTDDI_VERSION >= NTDDI_VISTA)
1524 ULONG SharedDataFlags
;
1526 ULONG DbgErrorPortPresent
:1;
1527 ULONG DbgElevationEnabled
:1;
1528 ULONG DbgVirtEnabled
:1;
1529 ULONG DbgInstallerDetectEnabled
:1;
1530 ULONG DbgSystemDllRelocated
:1;
1531 ULONG DbgDynProcessorEnabled
:1;
1532 ULONG DbgSEHValidationEnabled
:1;
1539 ULONG DataFlagsPad
[1];
1540 ULONGLONG TestRetInstruction
;
1542 ULONG SystemCallReturn
;
1543 ULONGLONG SystemCallPad
[3];
1544 _ANONYMOUS_UNION
union {
1545 volatile KSYSTEM_TIME TickCount
;
1546 volatile ULONG64 TickCountQuad
;
1547 _ANONYMOUS_STRUCT
struct {
1548 ULONG ReservedTickCountOverlay
[3];
1549 ULONG TickCountPad
[1];
1554 #if (NTDDI_VERSION >= NTDDI_WS03)
1555 LONGLONG ConsoleSessionForegroundProcessId
;
1556 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
1558 #if (NTDDI_VERSION >= NTDDI_VISTA)
1559 #if (NTDDI_VERSION >= NTDDI_WIN7)
1560 USHORT UserModeGlobalLogger
[16];
1562 USHORT UserModeGlobalLogger
[8];
1563 ULONG HeapTracingPid
[2];
1564 ULONG CritSecTracingPid
[2];
1566 ULONG ImageFileExecutionOptions
;
1567 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
1568 ULONG LangGenerationCount
;
1570 /* 4 bytes padding */
1572 ULONGLONG Reserved5
;
1573 volatile ULONG64 InterruptTimeBias
;
1575 #if (NTDDI_VERSION >= NTDDI_WIN7)
1576 volatile ULONG64 TscQpcBias
;
1577 volatile ULONG ActiveProcessorCount
;
1578 volatile USHORT ActiveGroupCount
;
1580 volatile ULONG AitSamplingValue
;
1581 volatile ULONG AppCompatFlag
;
1582 ULONGLONG SystemDllNativeRelocation
;
1583 ULONG SystemDllWowRelocation
;
1585 XSTATE_CONFIGURATION XState
;
1587 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
1589 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1590 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1591 extern NTKERNELAPI ULONG MmUserProbeAddress
;
1596 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1597 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1598 #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
1599 #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
1600 extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_
;
1602 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1604 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1605 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
1606 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
1607 #if !defined (_X86PAE_)
1608 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
1610 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
1613 #define KeGetPcr() PCR
1615 #define KERNEL_STACK_SIZE 12288
1616 #define KERNEL_LARGE_STACK_SIZE 61440
1617 #define KERNEL_LARGE_STACK_COMMIT 12288
1619 #define SIZE_OF_80387_REGISTERS 80
1621 #define PCR_MINOR_VERSION 1
1622 #define PCR_MAJOR_VERSION 1
1624 #if !defined(RC_INVOKED)
1626 #define CONTEXT_i386 0x10000
1627 #define CONTEXT_i486 0x10000
1628 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
1629 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
1630 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
1631 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
1632 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
1633 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
1635 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
1637 #endif /* !defined(RC_INVOKED) */
1639 typedef struct _KPCR
{
1643 struct _EXCEPTION_REGISTRATION_RECORD
*Used_ExceptionList
;
1644 PVOID Used_StackBase
;
1647 ULONG ContextSwitches
;
1648 KAFFINITY SetMemberCopy
;
1652 struct _KPCR
*SelfPcr
;
1653 struct _KPRCB
*Prcb
;
1658 PVOID KdVersionBlock
;
1659 struct _KIDTENTRY
*IDT
;
1660 struct _KGDTENTRY
*GDT
;
1662 USHORT MajorVersion
;
1663 USHORT MinorVersion
;
1664 KAFFINITY SetMember
;
1665 ULONG StallScaleFactor
;
1669 UCHAR SecondLevelCacheAssociativity
;
1671 ULONG KernelReserved
[14];
1672 ULONG SecondLevelCacheSize
;
1673 ULONG HalReserved
[16];
1678 KeGetCurrentProcessorNumber(VOID
)
1680 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
1683 typedef struct _FLOATING_SAVE_AREA
{
1688 ULONG ErrorSelector
;
1691 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
1693 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
1695 #include "pshpack4.h"
1696 typedef struct _CONTEXT
{
1704 FLOATING_SAVE_AREA FloatSave
;
1721 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
1723 #include "poppack.h"
1729 #define PTI_SHIFT 12L
1730 #define PDI_SHIFT 21L
1731 #define PPI_SHIFT 30L
1732 #define PXI_SHIFT 39L
1733 #define PTE_PER_PAGE 512
1734 #define PDE_PER_PAGE 512
1735 #define PPE_PER_PAGE 512
1736 #define PXE_PER_PAGE 512
1737 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
1738 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
1739 #define PPI_MASK (PPE_PER_PAGE - 1)
1740 #define PXI_MASK (PXE_PER_PAGE - 1)
1742 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
1743 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
1744 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
1745 #define PDE_BASE 0xFFFFF6FB40000000ULL
1746 #define PTE_BASE 0xFFFFF68000000000ULL
1747 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
1748 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
1749 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
1750 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
1752 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1753 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1754 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1755 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1756 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
1757 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
1759 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
1809 /* Floating point */
1811 XMM_SAVE_AREA32 FltSave
;
1835 M128A VectorRegister
[26];
1836 ULONG64 VectorControl
;
1839 ULONG64 DebugControl
;
1840 ULONG64 LastBranchToRip
;
1841 ULONG64 LastBranchFromRip
;
1842 ULONG64 LastExceptionToRip
;
1843 ULONG64 LastExceptionFromRip
;
1846 typedef struct _KPCR
1848 _ANONYMOUS_UNION
union
1851 _ANONYMOUS_STRUCT
struct
1853 union _KGDTENTRY64
*GdtBase
;
1854 struct _KTSS64
*TssBase
;
1857 struct _KPRCB
*CurrentPrcb
;
1858 PKSPIN_LOCK_QUEUE LockArray
;
1862 union _KIDTENTRY64
*IdtBase
;
1865 UCHAR SecondLevelCacheAssociativity
;
1866 UCHAR ObsoleteNumber
;
1869 USHORT MajorVersion
;
1870 USHORT MinorVersion
;
1871 ULONG StallScaleFactor
;
1873 ULONG KernelReserved
[15];
1874 ULONG SecondLevelCacheSize
;
1875 ULONG HalReserved
[16];
1877 PVOID KdVersionBlock
;
1879 ULONG PcrAlign1
[24];
1886 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
1891 KeGetCurrentProcessorNumber(VOID
)
1893 return (ULONG
)__readgsword(0x184);
1896 #if !defined(RC_INVOKED)
1898 #define CONTEXT_AMD64 0x100000
1900 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
1901 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
1902 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
1903 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
1904 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
1906 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1907 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1909 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
1911 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1912 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1913 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1914 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1916 #endif /* RC_INVOKED */
1918 #endif /* _AMD64_ */
1920 typedef enum _INTERLOCKED_RESULT
{
1921 ResultNegative
= RESULT_NEGATIVE
,
1922 ResultZero
= RESULT_ZERO
,
1923 ResultPositive
= RESULT_POSITIVE
1924 } INTERLOCKED_RESULT
;
1926 typedef struct _OSVERSIONINFOA
{
1927 ULONG dwOSVersionInfoSize
;
1928 ULONG dwMajorVersion
;
1929 ULONG dwMinorVersion
;
1930 ULONG dwBuildNumber
;
1932 CHAR szCSDVersion
[128];
1933 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
1935 typedef struct _OSVERSIONINFOW
{
1936 ULONG dwOSVersionInfoSize
;
1937 ULONG dwMajorVersion
;
1938 ULONG dwMinorVersion
;
1939 ULONG dwBuildNumber
;
1941 WCHAR szCSDVersion
[128];
1942 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
1944 typedef struct _OSVERSIONINFOEXA
{
1945 ULONG dwOSVersionInfoSize
;
1946 ULONG dwMajorVersion
;
1947 ULONG dwMinorVersion
;
1948 ULONG dwBuildNumber
;
1950 CHAR szCSDVersion
[128];
1951 USHORT wServicePackMajor
;
1952 USHORT wServicePackMinor
;
1956 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
1958 typedef struct _OSVERSIONINFOEXW
{
1959 ULONG dwOSVersionInfoSize
;
1960 ULONG dwMajorVersion
;
1961 ULONG dwMinorVersion
;
1962 ULONG dwBuildNumber
;
1964 WCHAR szCSDVersion
[128];
1965 USHORT wServicePackMajor
;
1966 USHORT wServicePackMinor
;
1970 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
1973 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
1974 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
1975 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
1976 typedef OSVERSIONINFOW OSVERSIONINFO
;
1977 typedef POSVERSIONINFOW POSVERSIONINFO
;
1978 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
1980 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
1981 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
1982 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
1983 typedef OSVERSIONINFOA OSVERSIONINFO
;
1984 typedef POSVERSIONINFOA POSVERSIONINFO
;
1985 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
1986 #endif /* UNICODE */
1988 /* Executive Types */
1990 #define PROTECTED_POOL 0x80000000
1992 typedef struct _ZONE_SEGMENT_HEADER
{
1993 SINGLE_LIST_ENTRY SegmentList
;
1995 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
1997 typedef struct _ZONE_HEADER
{
1998 SINGLE_LIST_ENTRY FreeList
;
1999 SINGLE_LIST_ENTRY SegmentList
;
2001 ULONG TotalSegmentSize
;
2002 } ZONE_HEADER
, *PZONE_HEADER
;
2004 /* Executive Functions */
2006 static __inline PVOID
2008 IN PZONE_HEADER Zone
)
2010 if (Zone
->FreeList
.Next
)
2011 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
2012 return (PVOID
) Zone
->FreeList
.Next
;
2015 static __inline PVOID
2017 IN PZONE_HEADER Zone
,
2020 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
2021 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
2022 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
2027 * ExInterlockedAllocateFromZone(
2028 * IN PZONE_HEADER Zone,
2029 * IN PKSPIN_LOCK Lock)
2031 #define ExInterlockedAllocateFromZone(Zone, Lock) \
2032 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
2035 * ExInterlockedFreeToZone(
2036 * IN PZONE_HEADER Zone,
2038 * IN PKSPIN_LOCK Lock);
2040 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
2041 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
2046 * IN PZONE_HEADER Zone)
2048 #define ExIsFullZone(Zone) \
2049 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
2052 * ExIsObjectInFirstZoneSegment(
2053 * IN PZONE_HEADER Zone,
2056 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
2057 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
2058 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
2059 (Zone)->TotalSegmentSize)) )
2061 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
2062 #define ExAcquireResourceShared ExAcquireResourceSharedLite
2063 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
2064 #define ExDeleteResource ExDeleteResourceLite
2065 #define ExInitializeResource ExInitializeResourceLite
2066 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
2067 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
2068 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
2069 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
2071 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2077 IN OUT PZONE_HEADER Zone
,
2078 IN OUT PVOID Segment
,
2079 IN ULONG SegmentSize
);
2085 OUT PZONE_HEADER Zone
,
2087 IN OUT PVOID InitialSegment
,
2088 IN ULONG InitialSegmentSize
);
2093 ExInterlockedExtendZone(
2094 IN OUT PZONE_HEADER Zone
,
2095 IN OUT PVOID Segment
,
2096 IN ULONG SegmentSize
,
2097 IN OUT PKSPIN_LOCK Lock
);
2109 ExRaiseAccessViolation(
2116 ExRaiseDatatypeMisalignment(
2126 Exfi386InterlockedIncrementLong(
2127 IN OUT LONG
volatile *Addend
);
2132 Exfi386InterlockedDecrementLong(
2138 Exfi386InterlockedExchangeUlong(
2146 typedef enum _CONFIGURATION_TYPE
{
2149 FloatingPointProcessor
,
2159 MultiFunctionAdapter
,
2173 FloppyDiskPeripheral
,
2186 RealModeIrqRoutingTable
,
2187 RealModePCIEnumeration
,
2189 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
2190 #endif /* !_ARC_DDK_ */
2192 typedef struct _CONTROLLER_OBJECT
{
2195 PVOID ControllerExtension
;
2196 KDEVICE_QUEUE DeviceWaitQueue
;
2198 LARGE_INTEGER Spare2
;
2199 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
2201 typedef struct _CONFIGURATION_INFORMATION
{
2206 ULONG ScsiPortCount
;
2208 ULONG ParallelCount
;
2209 BOOLEAN AtDiskPrimaryAddressClaimed
;
2210 BOOLEAN AtDiskSecondaryAddressClaimed
;
2212 ULONG MediumChangerCount
;
2213 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
2217 (NTAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
2219 IN PUNICODE_STRING PathName
,
2220 IN INTERFACE_TYPE BusType
,
2222 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
2223 IN CONFIGURATION_TYPE ControllerType
,
2224 IN ULONG ControllerNumber
,
2225 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
2226 IN CONFIGURATION_TYPE PeripheralType
,
2227 IN ULONG PeripheralNumber
,
2228 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
2232 (NTAPI DRIVER_REINITIALIZE
)(
2233 IN
struct _DRIVER_OBJECT
*DriverObject
,
2237 typedef DRIVER_REINITIALIZE
*PDRIVER_REINITIALIZE
;
2239 /** Filesystem runtime library routines **/
2241 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2245 FsRtlIsTotalDeviceFailure(
2246 IN NTSTATUS Status
);
2249 /* Hardware Abstraction Layer Types */
2252 (NTAPI
*PciPin2Line
)(
2253 IN
struct _BUS_HANDLER
*BusHandler
,
2254 IN
struct _BUS_HANDLER
*RootHandler
,
2255 IN PCI_SLOT_NUMBER SlotNumber
,
2256 IN PPCI_COMMON_CONFIG PciData
);
2259 (NTAPI
*PciLine2Pin
)(
2260 IN
struct _BUS_HANDLER
*BusHandler
,
2261 IN
struct _BUS_HANDLER
*RootHandler
,
2262 IN PCI_SLOT_NUMBER SlotNumber
,
2263 IN PPCI_COMMON_CONFIG PciNewData
,
2264 IN PPCI_COMMON_CONFIG PciOldData
);
2267 (NTAPI
*PciReadWriteConfig
)(
2268 IN
struct _BUS_HANDLER
*BusHandler
,
2269 IN PCI_SLOT_NUMBER Slot
,
2274 #define PCI_DATA_TAG ' ICP'
2275 #define PCI_DATA_VERSION 1
2277 typedef struct _PCIBUSDATA
{
2280 PciReadWriteConfig ReadConfig
;
2281 PciReadWriteConfig WriteConfig
;
2282 PciPin2Line Pin2Line
;
2283 PciLine2Pin Line2Pin
;
2284 PCI_SLOT_NUMBER ParentSlot
;
2286 } PCIBUSDATA
, *PPCIBUSDATA
;
2288 /* Hardware Abstraction Layer Functions */
2290 #if !defined(NO_LEGACY_DRIVERS)
2292 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2297 HalAssignSlotResources(
2298 IN PUNICODE_STRING RegistryPath
,
2299 IN PUNICODE_STRING DriverClassName
,
2300 IN PDRIVER_OBJECT DriverObject
,
2301 IN PDEVICE_OBJECT DeviceObject
,
2302 IN INTERFACE_TYPE BusType
,
2304 IN ULONG SlotNumber
,
2305 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
2310 HalGetInterruptVector(
2311 IN INTERFACE_TYPE InterfaceType
,
2313 IN ULONG BusInterruptLevel
,
2314 IN ULONG BusInterruptVector
,
2316 OUT PKAFFINITY Affinity
);
2322 IN BUS_DATA_TYPE BusDataType
,
2324 IN ULONG SlotNumber
,
2330 #endif /* !defined(NO_LEGACY_DRIVERS) */
2332 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2338 IN PDEVICE_DESCRIPTION DeviceDescription
,
2339 IN OUT PULONG NumberOfMapRegisters
);
2345 IN ULONG Frequency
);
2350 IN PADAPTER_OBJECT DmaAdapter
);
2355 HalAcquireDisplayOwnership(
2356 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
2362 IN BUS_DATA_TYPE BusDataType
,
2364 IN ULONG SlotNumber
,
2371 HalGetBusDataByOffset(
2372 IN BUS_DATA_TYPE BusDataType
,
2374 IN ULONG SlotNumber
,
2382 HalSetBusDataByOffset(
2383 IN BUS_DATA_TYPE BusDataType
,
2385 IN ULONG SlotNumber
,
2393 HalTranslateBusAddress(
2394 IN INTERFACE_TYPE InterfaceType
,
2396 IN PHYSICAL_ADDRESS BusAddress
,
2397 IN OUT PULONG AddressSpace
,
2398 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
2402 #if (NTDDI_VERSION >= NTDDI_WINXP)
2407 IN PDEVICE_OBJECT DeviceObject
,
2408 IN ULONG SectorSize
,
2409 IN ULONG MBRTypeIdentifier
,
2413 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
2417 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2418 //DECLSPEC_DEPRECATED_DDK
2422 IoFreeAdapterChannel(
2423 IN PADAPTER_OBJECT AdapterObject
);
2425 //DECLSPEC_DEPRECATED_DDK
2429 IoFlushAdapterBuffers(
2430 IN PADAPTER_OBJECT AdapterObject
,
2432 IN PVOID MapRegisterBase
,
2435 IN BOOLEAN WriteToDevice
);
2437 //DECLSPEC_DEPRECATED_DDK
2442 IN PADAPTER_OBJECT AdapterObject
,
2443 IN PVOID MapRegisterBase
,
2444 IN ULONG NumberOfMapRegisters
);
2446 //DECLSPEC_DEPRECATED_DDK
2450 HalAllocateCommonBuffer(
2451 IN PADAPTER_OBJECT AdapterObject
,
2453 OUT PPHYSICAL_ADDRESS LogicalAddress
,
2454 IN BOOLEAN CacheEnabled
);
2456 //DECLSPEC_DEPRECATED_DDK
2460 HalFreeCommonBuffer(
2461 IN PADAPTER_OBJECT AdapterObject
,
2463 IN PHYSICAL_ADDRESS LogicalAddress
,
2464 IN PVOID VirtualAddress
,
2465 IN BOOLEAN CacheEnabled
);
2467 //DECLSPEC_DEPRECATED_DDK
2472 IN PADAPTER_OBJECT AdapterObject
);
2477 HalAllocateAdapterChannel(
2478 IN PADAPTER_OBJECT AdapterObject
,
2479 IN PWAIT_CONTEXT_BLOCK Wcb
,
2480 IN ULONG NumberOfMapRegisters
,
2481 IN PDRIVER_CONTROL ExecutionRoutine
);
2483 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2485 #endif /* defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) */
2487 /* I/O Manager Functions */
2490 * VOID IoAssignArcName(
2491 * IN PUNICODE_STRING ArcName,
2492 * IN PUNICODE_STRING DeviceName);
2494 #define IoAssignArcName(_ArcName, _DeviceName) ( \
2495 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
2499 * IoDeassignArcName(
2500 * IN PUNICODE_STRING ArcName)
2502 #define IoDeassignArcName IoDeleteSymbolicLink
2504 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2506 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
2510 IoAllocateAdapterChannel(
2511 IN PADAPTER_OBJECT AdapterObject
,
2512 IN PDEVICE_OBJECT DeviceObject
,
2513 IN ULONG NumberOfMapRegisters
,
2514 IN PDRIVER_CONTROL ExecutionRoutine
,
2518 #if !defined(DMA_MACROS_DEFINED)
2519 //DECLSPEC_DEPRECATED_DDK
2524 IN PADAPTER_OBJECT AdapterObject
,
2526 IN PVOID MapRegisterBase
,
2528 IN OUT PULONG Length
,
2529 IN BOOLEAN WriteToDevice
);
2535 IoAllocateController(
2536 IN PCONTROLLER_OBJECT ControllerObject
,
2537 IN PDEVICE_OBJECT DeviceObject
,
2538 IN PDRIVER_CONTROL ExecutionRoutine
,
2539 IN PVOID Context OPTIONAL
);
2551 IN PCONTROLLER_OBJECT ControllerObject
);
2557 IN PCONTROLLER_OBJECT ControllerObject
);
2560 PCONFIGURATION_INFORMATION
2562 IoGetConfigurationInformation(
2568 IoGetDeviceToVerify(
2569 IN PETHREAD Thread
);
2575 IN PDEVICE_OBJECT DeviceObject
,
2576 IN PFILE_OBJECT FileObject
);
2581 IoGetFileObjectGenericMapping(
2587 IoMakeAssociatedIrp(
2589 IN CCHAR StackSize
);
2594 IoQueryDeviceDescription(
2595 IN PINTERFACE_TYPE BusType OPTIONAL
,
2596 IN PULONG BusNumber OPTIONAL
,
2597 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
2598 IN PULONG ControllerNumber OPTIONAL
,
2599 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
2600 IN PULONG PeripheralNumber OPTIONAL
,
2601 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
2602 IN OUT PVOID Context OPTIONAL
);
2609 IN PVPB Vpb OPTIONAL
,
2610 IN PDEVICE_OBJECT RealDeviceObject
);
2615 IoRaiseInformationalHardError(
2616 IN NTSTATUS ErrorStatus
,
2617 IN PUNICODE_STRING String OPTIONAL
,
2618 IN PKTHREAD Thread OPTIONAL
);
2623 IoRegisterBootDriverReinitialization(
2624 IN PDRIVER_OBJECT DriverObject
,
2625 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2626 IN PVOID Context OPTIONAL
);
2631 IoRegisterDriverReinitialization(
2632 IN PDRIVER_OBJECT DriverObject
,
2633 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2634 IN PVOID Context OPTIONAL
);
2639 IoAttachDeviceByPointer(
2640 IN PDEVICE_OBJECT SourceDevice
,
2641 IN PDEVICE_OBJECT TargetDevice
);
2646 IoReportDetectedDevice(
2647 IN PDRIVER_OBJECT DriverObject
,
2648 IN INTERFACE_TYPE LegacyBusType
,
2650 IN ULONG SlotNumber
,
2651 IN PCM_RESOURCE_LIST ResourceList OPTIONAL
,
2652 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
2653 IN BOOLEAN ResourceAssigned
,
2654 IN OUT PDEVICE_OBJECT
*DeviceObject
);
2659 IoReportResourceForDetection(
2660 IN PDRIVER_OBJECT DriverObject
,
2661 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2662 IN ULONG DriverListSize OPTIONAL
,
2663 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2664 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2665 IN ULONG DeviceListSize OPTIONAL
,
2666 OUT PBOOLEAN ConflictDetected
);
2671 IoReportResourceUsage(
2672 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2673 IN PDRIVER_OBJECT DriverObject
,
2674 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2675 IN ULONG DriverListSize OPTIONAL
,
2676 IN PDEVICE_OBJECT DeviceObject
,
2677 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2678 IN ULONG DeviceListSize OPTIONAL
,
2679 IN BOOLEAN OverrideConflict
,
2680 OUT PBOOLEAN ConflictDetected
);
2685 IoSetHardErrorOrVerifyDevice(
2687 IN PDEVICE_OBJECT DeviceObject
);
2693 IN PUNICODE_STRING RegistryPath
,
2694 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2695 IN PDRIVER_OBJECT DriverObject
,
2696 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2697 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL
,
2698 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
2700 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2702 #if (NTDDI_VERSION >= NTDDI_WINXP)
2708 IN PDEVICE_OBJECT DeviceObject
,
2709 IN
struct _CREATE_DISK
* Disk OPTIONAL
);
2714 IoReadDiskSignature(
2715 IN PDEVICE_OBJECT DeviceObject
,
2716 IN ULONG BytesPerSector
,
2717 OUT PDISK_SIGNATURE Signature
);
2722 IoReadPartitionTable(
2723 IN PDEVICE_OBJECT DeviceObject
,
2724 IN ULONG SectorSize
,
2725 IN BOOLEAN ReturnRecognizedPartitions
,
2726 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2731 IoReadPartitionTableEx(
2732 IN PDEVICE_OBJECT DeviceObject
,
2733 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
2738 IoSetPartitionInformation(
2739 IN PDEVICE_OBJECT DeviceObject
,
2740 IN ULONG SectorSize
,
2741 IN ULONG PartitionNumber
,
2742 IN ULONG PartitionType
);
2747 IoSetPartitionInformationEx(
2748 IN PDEVICE_OBJECT DeviceObject
,
2749 IN ULONG PartitionNumber
,
2750 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
2755 IoSetSystemPartition(
2756 IN PUNICODE_STRING VolumeNameString
);
2761 IoSetThreadHardErrorMode(
2762 IN BOOLEAN EnableHardErrors
);
2767 IoVerifyPartitionTable(
2768 IN PDEVICE_OBJECT DeviceObject
,
2769 IN BOOLEAN FixErrors
);
2774 IoVolumeDeviceToDosName(
2775 IN PVOID VolumeDeviceObject
,
2776 OUT PUNICODE_STRING DosName
);
2781 IoWritePartitionTable(
2782 IN PDEVICE_OBJECT DeviceObject
,
2783 IN ULONG SectorSize
,
2784 IN ULONG SectorsPerTrack
,
2785 IN ULONG NumberOfHeads
,
2786 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2791 IoWritePartitionTableEx(
2792 IN PDEVICE_OBJECT DeviceObject
,
2793 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*DriveLayout
);
2798 IoAttachDeviceToDeviceStackSafe(
2799 IN PDEVICE_OBJECT SourceDevice
,
2800 IN PDEVICE_OBJECT TargetDevice
,
2801 OUT PDEVICE_OBJECT
*AttachedToDeviceObject
);
2803 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2805 /** Kernel debugger routines **/
2813 IN ULONG MaximumResponseLength
);
2815 /* Kernel Functions */
2817 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2824 IN ULONG BugCheckCode
);
2830 IN OUT PRKEVENT Event
,
2831 IN KPRIORITY Increment
,
2837 KeSetBasePriorityThread(
2838 IN OUT PRKTHREAD Thread
,
2843 /* Memory Manager Types */
2845 typedef struct _PHYSICAL_MEMORY_RANGE
{
2846 PHYSICAL_ADDRESS BaseAddress
;
2847 LARGE_INTEGER NumberOfBytes
;
2848 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
2850 /* Memory Manager Functions */
2852 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2855 PPHYSICAL_MEMORY_RANGE
2857 MmGetPhysicalMemoryRanges(
2863 MmGetPhysicalAddress(
2864 IN PVOID BaseAddress
);
2869 MmIsNonPagedSystemAddressValid(
2870 IN PVOID VirtualAddress
);
2875 MmAllocateNonCachedMemory(
2876 IN SIZE_T NumberOfBytes
);
2881 MmFreeNonCachedMemory(
2882 IN PVOID BaseAddress
,
2883 IN SIZE_T NumberOfBytes
);
2888 MmGetVirtualForPhysical(
2889 IN PHYSICAL_ADDRESS PhysicalAddress
);
2894 MmMapUserAddressesToPage(
2895 IN PVOID BaseAddress
,
2896 IN SIZE_T NumberOfBytes
,
2897 IN PVOID PageAddress
);
2903 IN PHYSICAL_ADDRESS PhysicalAddress
,
2904 IN SIZE_T NumberOfBytes
,
2905 IN MEMORY_CACHING_TYPE CacheType
);
2910 MmMapViewInSessionSpace(
2912 OUT PVOID
*MappedBase
,
2913 IN OUT PSIZE_T ViewSize
);
2918 MmMapViewInSystemSpace(
2920 OUT PVOID
*MappedBase
,
2921 IN OUT PSIZE_T ViewSize
);
2927 IN PVOID VirtualAddress
);
2932 MmIsThisAnNtAsSystem(
2938 MmLockPagableSectionByHandle(
2939 IN PVOID ImageSectionHandle
);
2944 MmUnmapViewInSessionSpace(
2945 IN PVOID MappedBase
);
2950 MmUnmapViewInSystemSpace(
2951 IN PVOID MappedBase
);
2956 MmUnsecureVirtualMemory(
2957 IN HANDLE SecureHandle
);
2962 MmRemovePhysicalMemory(
2963 IN PPHYSICAL_ADDRESS StartAddress
,
2964 IN OUT PLARGE_INTEGER NumberOfBytes
);
2969 MmSecureVirtualMemory(
2972 IN ULONG ProbeMode
);
2977 MmUnmapVideoDisplay(
2978 IN PVOID BaseAddress
,
2979 IN SIZE_T NumberOfBytes
);
2981 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2983 /* NtXxx Functions */
2989 OUT PHANDLE ProcessHandle
,
2990 IN ACCESS_MASK DesiredAccess
,
2991 IN POBJECT_ATTRIBUTES ObjectAttributes
,
2992 IN PCLIENT_ID ClientId OPTIONAL
);
2997 NtQueryInformationProcess(
2998 IN HANDLE ProcessHandle
,
2999 IN PROCESSINFOCLASS ProcessInformationClass
,
3000 OUT PVOID ProcessInformation OPTIONAL
,
3001 IN ULONG ProcessInformationLength
,
3002 OUT PULONG ReturnLength OPTIONAL
);
3004 /** Process manager types **/
3007 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
3009 IN HANDLE ProcessId
,
3013 (NTAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
3014 IN HANDLE ProcessId
,
3019 (NTAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
3020 IN PUNICODE_STRING FullImageName
,
3021 IN HANDLE ProcessId
,
3022 IN PIMAGE_INFO ImageInfo
);
3024 /** Process manager routines **/
3026 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3031 PsSetLoadImageNotifyRoutine(
3032 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
3037 PsSetCreateThreadNotifyRoutine(
3038 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
3043 PsSetCreateProcessNotifyRoutine(
3044 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
3050 PsGetCurrentProcessId(
3056 PsGetCurrentThreadId(
3063 OUT PULONG MajorVersion OPTIONAL
,
3064 OUT PULONG MinorVersion OPTIONAL
,
3065 OUT PULONG BuildNumber OPTIONAL
,
3066 OUT PUNICODE_STRING CSDVersion OPTIONAL
);
3068 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3070 #if (NTDDI_VERSION >= NTDDI_WINXP)
3076 IN PEPROCESS Process
);
3081 PsRemoveCreateThreadNotifyRoutine(
3082 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
3087 PsRemoveLoadImageNotifyRoutine(
3088 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
3090 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
3092 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess
;
3096 typedef struct _RTL_SPLAY_LINKS
{
3097 struct _RTL_SPLAY_LINKS
*Parent
;
3098 struct _RTL_SPLAY_LINKS
*LeftChild
;
3099 struct _RTL_SPLAY_LINKS
*RightChild
;
3100 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
3104 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
3106 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
3107 *CallersAddress = (PVOID)_ReturnAddress(); \
3108 *CallersCaller = NULL;
3111 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3115 RtlGetCallersAddress(
3116 OUT PVOID
*CallersAddress
,
3117 OUT PVOID
*CallersCaller
);
3122 #if !defined(MIDL_PASS)
3127 RtlConvertLongToLuid(
3133 Temp
.QuadPart
= Val
;
3134 Luid
.LowPart
= Temp
.u
.LowPart
;
3135 Luid
.HighPart
= Temp
.u
.HighPart
;
3142 RtlConvertUlongToLuid(
3154 #if defined(_AMD64_) || defined(_IA64_)
3155 //DECLSPEC_DEPRECATED_DDK_WINXP
3159 RtlLargeIntegerDivide(
3160 IN LARGE_INTEGER Dividend
,
3161 IN LARGE_INTEGER Divisor
,
3162 OUT PLARGE_INTEGER Remainder OPTIONAL
)
3165 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
3167 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
3173 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3177 RtlLargeIntegerDivide(
3178 IN LARGE_INTEGER Dividend
,
3179 IN LARGE_INTEGER Divisor
,
3180 OUT PLARGE_INTEGER Remainder OPTIONAL
);
3183 #endif /* defined(_AMD64_) || defined(_IA64_) */
3185 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3190 RtlPrefixUnicodeString(
3191 IN PCUNICODE_STRING String1
,
3192 IN PCUNICODE_STRING String2
,
3193 IN BOOLEAN CaseInSensitive
);
3199 IN OUT PSTRING DestinationString
,
3200 IN
const PSTRING SourceString
);
3205 RtlUpcaseUnicodeString(
3206 IN OUT PUNICODE_STRING DestinationString
,
3207 IN PCUNICODE_STRING SourceString
,
3208 IN BOOLEAN AllocateDestinationString
);
3214 IN OUT PACCESS_MASK AccessMask
,
3215 IN PGENERIC_MAPPING GenericMapping
);
3220 RtlVolumeDeviceToDosName(
3221 IN PVOID VolumeDeviceObject
,
3222 OUT PUNICODE_STRING DosName
);
3228 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
3233 RtlVerifyVersionInfo(
3234 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
3236 IN ULONGLONG ConditionMask
);
3242 IN
const PSTRING String1
,
3243 IN
const PSTRING String2
,
3244 BOOLEAN CaseInSensitive
);
3250 OUT PSTRING DestinationString
,
3251 IN
const PSTRING SourceString OPTIONAL
);
3257 IN
const PSTRING String1
,
3258 IN
const PSTRING String2
,
3259 IN BOOLEAN CaseInSensitive
);
3266 IN ULONG Base OPTIONAL
,
3283 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3285 /* Security reference monitor routines */
3287 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3291 SeSinglePrivilegeCheck(
3292 IN LUID PrivilegeValue
,
3293 IN KPROCESSOR_MODE PreviousMode
);
3296 /* ZwXxx Functions */
3298 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3303 IN HANDLE TimerHandle
,
3304 OUT PBOOLEAN CurrentState OPTIONAL
);
3309 OUT PHANDLE TimerHandle
,
3310 IN ACCESS_MASK DesiredAccess
,
3311 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
3312 IN TIMER_TYPE TimerType
);
3317 OUT PHANDLE TimerHandle
,
3318 IN ACCESS_MASK DesiredAccess
,
3319 IN POBJECT_ATTRIBUTES ObjectAttributes
);
3324 ZwSetInformationThread(
3325 IN HANDLE ThreadHandle
,
3326 IN THREADINFOCLASS ThreadInformationClass
,
3327 IN PVOID ThreadInformation
,
3328 IN ULONG ThreadInformationLength
);
3333 IN HANDLE TimerHandle
,
3334 IN PLARGE_INTEGER DueTime
,
3335 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
3336 IN PVOID TimerContext OPTIONAL
,
3337 IN BOOLEAN ResumeTimer
,
3338 IN LONG Period OPTIONAL
,
3339 OUT PBOOLEAN PreviousState OPTIONAL
);
3343 typedef struct _QUOTA_LIMITS
{
3344 SIZE_T PagedPoolLimit
;
3345 SIZE_T NonPagedPoolLimit
;
3346 SIZE_T MinimumWorkingSetSize
;
3347 SIZE_T MaximumWorkingSetSize
;
3348 SIZE_T PagefileLimit
;
3349 LARGE_INTEGER TimeLimit
;
3350 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
3352 struct _RTL_GENERIC_COMPARE_ROUTINE
;
3353 struct _RTL_GENERIC_ALLOCATE_ROUTINE
;
3354 struct _RTL_GENERIC_FREE_ROUTINE
;
3356 typedef struct _RTL_GENERIC_TABLE
{
3357 PRTL_SPLAY_LINKS TableRoot
;
3358 LIST_ENTRY InsertOrderList
;
3359 PLIST_ENTRY OrderedPointer
;
3360 ULONG WhichOrderedElement
;
3361 ULONG NumberGenericTableElements
;
3362 struct _RTL_GENERIC_COMPARE_ROUTINE
*CompareRoutine
;
3363 struct _RTL_GENERIC_ALLOCATE_ROUTINE
*AllocateRoutine
;
3364 struct _RTL_GENERIC_FREE_ROUTINE
*FreeRoutine
;
3366 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
3368 typedef enum _TABLE_SEARCH_RESULT
{
3373 } TABLE_SEARCH_RESULT
;
3375 typedef struct _FILE_FS_SIZE_INFORMATION
{
3376 LARGE_INTEGER TotalAllocationUnits
;
3377 LARGE_INTEGER AvailableAllocationUnits
;
3378 ULONG SectorsPerAllocationUnit
;
3379 ULONG BytesPerSector
;
3380 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
3382 #define IO_CHECK_CREATE_PARAMETERS 0x0200
3383 #define IO_ATTACH_DEVICE 0x0400
3384 #define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800
3386 typedef struct _FILE_FS_VOLUME_INFORMATION
{
3387 LARGE_INTEGER VolumeCreationTime
;
3388 ULONG VolumeSerialNumber
;
3389 ULONG VolumeLabelLength
;
3390 BOOLEAN SupportsObjects
;
3391 WCHAR VolumeLabel
[1];
3392 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
3394 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
{
3395 LARGE_INTEGER TotalAllocationUnits
;
3396 LARGE_INTEGER CallerAvailableAllocationUnits
;
3397 LARGE_INTEGER ActualAvailableAllocationUnits
;
3398 ULONG SectorsPerAllocationUnit
;
3399 ULONG BytesPerSector
;
3400 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
3402 typedef struct _FILE_FS_OBJECTID_INFORMATION
{
3404 UCHAR ExtendedInfo
[48];
3405 } FILE_FS_OBJECTID_INFORMATION
, *PFILE_FS_OBJECTID_INFORMATION
;
3407 typedef struct _FILE_FS_LABEL_INFORMATION
{
3408 ULONG VolumeLabelLength
;
3409 WCHAR VolumeLabel
[1];
3410 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
3412 typedef enum _RTL_GENERIC_COMPARE_RESULTS
{
3416 } RTL_GENERIC_COMPARE_RESULTS
;
3419 struct _RTL_AVL_TABLE
;
3421 typedef RTL_GENERIC_COMPARE_RESULTS
3422 (NTAPI
*PRTL_AVL_COMPARE_ROUTINE
) (
3423 IN
struct _RTL_AVL_TABLE
*Table
,
3424 IN PVOID FirstStruct
,
3425 IN PVOID SecondStruct
);
3428 (NTAPI
*PRTL_AVL_ALLOCATE_ROUTINE
) (
3429 IN
struct _RTL_AVL_TABLE
*Table
,
3433 (NTAPI
*PRTL_AVL_FREE_ROUTINE
) (
3434 IN
struct _RTL_AVL_TABLE
*Table
,
3438 (NTAPI
*PRTL_AVL_MATCH_FUNCTION
) (
3439 IN
struct _RTL_AVL_TABLE
*Table
,
3441 IN PVOID MatchData
);
3443 typedef struct _RTL_BALANCED_LINKS
{
3444 struct _RTL_BALANCED_LINKS
*Parent
;
3445 struct _RTL_BALANCED_LINKS
*LeftChild
;
3446 struct _RTL_BALANCED_LINKS
*RightChild
;
3449 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
3451 typedef struct _RTL_AVL_TABLE
{
3452 RTL_BALANCED_LINKS BalancedRoot
;
3453 PVOID OrderedPointer
;
3454 ULONG WhichOrderedElement
;
3455 ULONG NumberGenericTableElements
;
3457 PRTL_BALANCED_LINKS RestartKey
;
3459 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
3460 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
3461 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
3463 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
3465 #ifndef RTL_USE_AVL_TABLES
3467 struct _RTL_GENERIC_TABLE
;
3469 typedef RTL_GENERIC_COMPARE_RESULTS
3470 (NTAPI
*PRTL_GENERIC_COMPARE_ROUTINE
) (
3471 IN
struct _RTL_GENERIC_TABLE
*Table
,
3472 IN PVOID FirstStruct
,
3473 IN PVOID SecondStruct
);
3476 (NTAPI
*PRTL_GENERIC_ALLOCATE_ROUTINE
) (
3477 IN
struct _RTL_GENERIC_TABLE
*Table
,
3481 (NTAPI
*PRTL_GENERIC_FREE_ROUTINE
) (
3482 IN
struct _RTL_GENERIC_TABLE
*Table
,
3485 #endif /* !RTL_USE_AVL_TABLES */
3490 RtlInitializeGenericTableAvl(
3491 OUT PRTL_AVL_TABLE Table
,
3492 IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine
,
3493 IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
,
3494 IN PRTL_AVL_FREE_ROUTINE FreeRoutine
,
3495 IN PVOID TableContext OPTIONAL
);
3502 #endif /* _NTDDK_ */