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 enum _HAL_QUERY_INFORMATION_CLASS
{
326 HalInstalledBusInformation
,
327 HalProfileSourceInformation
,
328 HalInformationClassUnused1
,
330 HalProcessorSpeedInformation
,
331 HalCallbackInformation
,
332 HalMapRegisterInformation
,
333 HalMcaLogInformation
,
334 HalFrameBufferCachingInformation
,
335 HalDisplayBiosInformation
,
336 HalProcessorFeatureInformation
,
337 HalNumaTopologyInterface
,
339 HalCmcLogInformation
,
340 HalCpeLogInformation
,
341 HalQueryMcaInterface
,
342 HalQueryAMLIIllegalIOPortAddresses
,
343 HalQueryMaxHotPlugMemoryAddress
,
344 HalPartitionIpiInterface
,
345 HalPlatformInformation
,
346 HalQueryProfileSourceList
,
347 HalInitLogInformation
,
348 HalFrequencyInformation
,
349 HalProcessorBrandString
,
350 HalHypervisorInformation
,
351 HalPlatformTimerInformation
,
352 HalAcpiAuditInformation
353 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
355 typedef enum _HAL_SET_INFORMATION_CLASS
{
356 HalProfileSourceInterval
,
357 HalProfileSourceInterruptHandler
,
358 HalMcaRegisterDriver
,
359 HalKernelErrorHandler
,
360 HalCmcRegisterDriver
,
361 HalCpeRegisterDriver
,
365 HalGenerateCmcInterrupt
,
366 HalProfileSourceTimerHandler
,
368 HalProfileDpgoSourceInterruptHandler
369 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
371 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
{
372 KPROFILE_SOURCE Source
;
374 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
376 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
{
377 KPROFILE_SOURCE Source
;
380 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
382 typedef struct _MAP_REGISTER_ENTRY
{
384 BOOLEAN WriteToDevice
;
385 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
387 typedef struct _DEBUG_DEVICE_ADDRESS
{
391 PUCHAR TranslatedAddress
;
393 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
395 typedef struct _DEBUG_MEMORY_REQUIREMENTS
{
396 PHYSICAL_ADDRESS Start
;
397 PHYSICAL_ADDRESS MaxEnd
;
398 PVOID VirtualAddress
;
402 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
404 typedef struct _DEBUG_DEVICE_DESCRIPTOR
{
415 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
416 DEBUG_MEMORY_REQUIREMENTS Memory
;
417 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
419 typedef struct _PM_DISPATCH_TABLE
{
423 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
425 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
426 TranslateChildToParent
,
427 TranslateParentToChild
428 } RESOURCE_TRANSLATION_DIRECTION
;
431 (NTAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
432 IN OUT PVOID Context
,
433 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
434 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
435 IN ULONG AlternativesCount OPTIONAL
,
436 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
437 IN PDEVICE_OBJECT PhysicalDeviceObject
,
438 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
441 (NTAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
442 IN PVOID Context OPTIONAL
,
443 IN PIO_RESOURCE_DESCRIPTOR Source
,
444 IN PDEVICE_OBJECT PhysicalDeviceObject
,
445 OUT PULONG TargetCount
,
446 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
448 typedef struct _TRANSLATOR_INTERFACE
{
452 PINTERFACE_REFERENCE InterfaceReference
;
453 PINTERFACE_DEREFERENCE InterfaceDereference
;
454 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
455 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
456 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
459 (FASTCALL
*pHalExamineMBR
)(
460 IN PDEVICE_OBJECT DeviceObject
,
462 IN ULONG MBRTypeIdentifier
,
466 (FASTCALL
*pHalIoReadPartitionTable
)(
467 IN PDEVICE_OBJECT DeviceObject
,
469 IN BOOLEAN ReturnRecognizedPartitions
,
470 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
473 (FASTCALL
*pHalIoSetPartitionInformation
)(
474 IN PDEVICE_OBJECT DeviceObject
,
476 IN ULONG PartitionNumber
,
477 IN ULONG PartitionType
);
480 (FASTCALL
*pHalIoWritePartitionTable
)(
481 IN PDEVICE_OBJECT DeviceObject
,
483 IN ULONG SectorsPerTrack
,
484 IN ULONG NumberOfHeads
,
485 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
488 (FASTCALL
*pHalHandlerForBus
)(
489 IN INTERFACE_TYPE InterfaceType
,
493 (FASTCALL
*pHalReferenceBusHandler
)(
494 IN PBUS_HANDLER BusHandler
);
497 (NTAPI
*pHalQuerySystemInformation
)(
498 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
501 OUT PULONG ReturnedLength
);
504 (NTAPI
*pHalSetSystemInformation
)(
505 IN HAL_SET_INFORMATION_CLASS InformationClass
,
510 (NTAPI
*pHalQueryBusSlots
)(
511 IN PBUS_HANDLER BusHandler
,
513 OUT PULONG SlotNumbers
,
514 OUT PULONG ReturnedLength
);
517 (NTAPI
*pHalInitPnpDriver
)(
521 (NTAPI
*pHalInitPowerManagement
)(
522 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
523 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
525 typedef struct _DMA_ADAPTER
*
526 (NTAPI
*pHalGetDmaAdapter
)(
528 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
529 OUT PULONG NumberOfMapRegisters
);
532 (NTAPI
*pHalGetInterruptTranslator
)(
533 IN INTERFACE_TYPE ParentInterfaceType
,
534 IN ULONG ParentBusNumber
,
535 IN INTERFACE_TYPE BridgeInterfaceType
,
538 OUT PTRANSLATOR_INTERFACE Translator
,
539 OUT PULONG BridgeBusNumber
);
542 (NTAPI
*pHalStartMirroring
)(
546 (NTAPI
*pHalEndMirroring
)(
547 IN ULONG PassNumber
);
550 (NTAPI
*pHalMirrorPhysicalMemory
)(
551 IN PHYSICAL_ADDRESS PhysicalAddress
,
552 IN LARGE_INTEGER NumberOfBytes
);
555 (NTAPI
*pHalMirrorVerify
)(
556 IN PHYSICAL_ADDRESS PhysicalAddress
,
557 IN LARGE_INTEGER NumberOfBytes
);
560 (NTAPI
*pHalEndOfBoot
)(
565 (NTAPI
*pHalTranslateBusAddress
)(
566 IN INTERFACE_TYPE InterfaceType
,
568 IN PHYSICAL_ADDRESS BusAddress
,
569 IN OUT PULONG AddressSpace
,
570 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
574 (NTAPI
*pHalAssignSlotResources
)(
575 IN PUNICODE_STRING RegistryPath
,
576 IN PUNICODE_STRING DriverClassName OPTIONAL
,
577 IN PDRIVER_OBJECT DriverObject
,
578 IN PDEVICE_OBJECT DeviceObject
,
579 IN INTERFACE_TYPE BusType
,
582 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
586 (NTAPI
*pHalHaltSystem
)(
591 (NTAPI
*pHalResetDisplay
)(
596 (NTAPI
*pHalVectorToIDTEntry
)(
601 (NTAPI
*pHalFindBusAddressTranslation
)(
602 IN PHYSICAL_ADDRESS BusAddress
,
603 IN OUT PULONG AddressSpace
,
604 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
605 IN OUT PULONG_PTR Context
,
610 (NTAPI
*pKdSetupPciDeviceForDebugging
)(
611 IN PVOID LoaderBlock OPTIONAL
,
612 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
616 (NTAPI
*pKdReleasePciDeviceForDebugging
)(
617 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
621 (NTAPI
*pKdGetAcpiTablePhase0
)(
622 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
627 (NTAPI
*pHalGetAcpiTable
)(
629 IN PCSTR OemId OPTIONAL
,
630 IN PCSTR OemTableId OPTIONAL
);
634 (NTAPI
*pKdCheckPowerButton
)(
637 #if (NTDDI_VERSION >= NTDDI_VISTA)
640 (NTAPI
*pKdMapPhysicalMemory64
)(
641 IN PHYSICAL_ADDRESS PhysicalAddress
,
642 IN ULONG NumberPages
,
643 IN BOOLEAN FlushCurrentTLB
);
647 (NTAPI
*pKdUnmapVirtualAddress
)(
648 IN PVOID VirtualAddress
,
649 IN ULONG NumberPages
,
650 IN BOOLEAN FlushCurrentTLB
);
654 (NTAPI
*pKdMapPhysicalMemory64
)(
655 IN PHYSICAL_ADDRESS PhysicalAddress
,
656 IN ULONG NumberPages
);
660 (NTAPI
*pKdUnmapVirtualAddress
)(
661 IN PVOID VirtualAddress
,
662 IN ULONG NumberPages
);
668 (NTAPI
*pKdGetPciDataByOffset
)(
677 (NTAPI
*pKdSetPciDataByOffset
)(
685 (NTAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
691 (NTAPI
*PCI_ERROR_HANDLER_CALLBACK
)(
696 (NTAPI
*pHalSetPciErrorHandlerCallback
)(
697 IN PCI_ERROR_HANDLER_CALLBACK Callback
);
699 #if 1 /* Not present in WDK 7600 */
701 (FASTCALL
*pHalIoAssignDriveLetters
)(
702 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
703 IN PSTRING NtDeviceName
,
704 OUT PUCHAR NtSystemPath
,
705 OUT PSTRING NtSystemPathString
);
710 pHalQuerySystemInformation HalQuerySystemInformation
;
711 pHalSetSystemInformation HalSetSystemInformation
;
712 pHalQueryBusSlots HalQueryBusSlots
;
714 pHalExamineMBR HalExamineMBR
;
715 #if 1 /* Not present in WDK 7600 */
716 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
718 pHalIoReadPartitionTable HalIoReadPartitionTable
;
719 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
720 pHalIoWritePartitionTable HalIoWritePartitionTable
;
721 pHalHandlerForBus HalReferenceHandlerForBus
;
722 pHalReferenceBusHandler HalReferenceBusHandler
;
723 pHalReferenceBusHandler HalDereferenceBusHandler
;
724 pHalInitPnpDriver HalInitPnpDriver
;
725 pHalInitPowerManagement HalInitPowerManagement
;
726 pHalGetDmaAdapter HalGetDmaAdapter
;
727 pHalGetInterruptTranslator HalGetInterruptTranslator
;
728 pHalStartMirroring HalStartMirroring
;
729 pHalEndMirroring HalEndMirroring
;
730 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
731 pHalEndOfBoot HalEndOfBoot
;
732 pHalMirrorVerify HalMirrorVerify
;
733 pHalGetAcpiTable HalGetCachedAcpiTable
;
734 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback
;
736 pHalGetErrorCapList HalGetErrorCapList
;
737 pHalInjectError HalInjectError
;
739 } HAL_DISPATCH
, *PHAL_DISPATCH
;
741 /* GCC/MSVC and WDK compatible declaration */
742 extern NTKERNELAPI HAL_DISPATCH HalDispatchTable
;
744 #if defined(_NTOSKRNL_) || defined(_BLDR_)
745 #define HALDISPATCH (&HalDispatchTable)
747 /* This is a WDK compatibility definition */
748 #define HalDispatchTable (&HalDispatchTable)
749 #define HALDISPATCH HalDispatchTable
752 #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
753 #define HalDispatchTableVersion HALDISPATCH->Version
754 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
755 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
756 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
757 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
758 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
759 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
760 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
761 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
762 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
763 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
764 #define HalStartMirroring HALDISPATCH->HalStartMirroring
765 #define HalEndMirroring HALDISPATCH->HalEndMirroring
766 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
767 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
768 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
770 typedef struct _FILE_ALIGNMENT_INFORMATION
{
771 ULONG AlignmentRequirement
;
772 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
774 typedef struct _FILE_NAME_INFORMATION
{
775 ULONG FileNameLength
;
777 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
780 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
781 ULONG FileAttributes
;
783 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
785 typedef struct _FILE_DISPOSITION_INFORMATION
{
787 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
789 typedef struct _FILE_END_OF_FILE_INFORMATION
{
790 LARGE_INTEGER EndOfFile
;
791 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
793 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
794 LARGE_INTEGER ValidDataLength
;
795 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
797 typedef union _FILE_SEGMENT_ELEMENT
{
800 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
802 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
804 #if (NTDDI_VERSION >= NTDDI_WIN2K)
809 IN ULONGLONG ConditionMask
,
814 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
815 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
816 (TypeBitMask), (ComparisonType)))
818 /* RtlVerifyVersionInfo() TypeMask */
820 #define VER_MINORVERSION 0x0000001
821 #define VER_MAJORVERSION 0x0000002
822 #define VER_BUILDNUMBER 0x0000004
823 #define VER_PLATFORMID 0x0000008
824 #define VER_SERVICEPACKMINOR 0x0000010
825 #define VER_SERVICEPACKMAJOR 0x0000020
826 #define VER_SUITENAME 0x0000040
827 #define VER_PRODUCT_TYPE 0x0000080
829 /* RtlVerifyVersionInfo() ComparisonType */
832 #define VER_GREATER 2
833 #define VER_GREATER_EQUAL 3
835 #define VER_LESS_EQUAL 5
839 #define VER_CONDITION_MASK 7
840 #define VER_NUM_BITS_PER_CONDITION_MASK 3
842 typedef struct _IMAGE_INFO
{
843 _ANONYMOUS_UNION
union {
845 _ANONYMOUS_STRUCT
struct {
846 ULONG ImageAddressingMode
:8;
847 ULONG SystemModeImage
:1;
848 ULONG ImageMappedToAllPids
:1;
849 ULONG ExtendedInfoPresent
:1;
856 ULONG ImageSectionNumber
;
857 } IMAGE_INFO
, *PIMAGE_INFO
;
859 #define IMAGE_ADDRESSING_MODE_32BIT 3
861 typedef enum _BUS_DATA_TYPE
{
862 ConfigurationSpaceUndefined
= -1,
874 SgiInternalConfiguration
,
876 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
878 typedef struct _NT_TIB
{
879 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
883 _ANONYMOUS_UNION
union {
887 PVOID ArbitraryUserPointer
;
888 struct _NT_TIB
*Self
;
891 typedef struct _NT_TIB32
{
896 __GNU_EXTENSION
union {
900 ULONG ArbitraryUserPointer
;
902 } NT_TIB32
,*PNT_TIB32
;
904 typedef struct _NT_TIB64
{
905 ULONG64 ExceptionList
;
908 ULONG64 SubSystemTib
;
909 __GNU_EXTENSION
union {
913 ULONG64 ArbitraryUserPointer
;
915 } NT_TIB64
,*PNT_TIB64
;
917 typedef enum _PROCESSINFOCLASS
{
918 ProcessBasicInformation
,
924 ProcessRaisePriority
,
926 ProcessExceptionPort
,
928 ProcessLdtInformation
,
930 ProcessDefaultHardErrorMode
,
931 ProcessIoPortHandlers
,
932 ProcessPooledUsageAndLimits
,
933 ProcessWorkingSetWatch
,
935 ProcessEnableAlignmentFaultFixup
,
936 ProcessPriorityClass
,
937 ProcessWx86Information
,
940 ProcessPriorityBoost
,
942 ProcessSessionInformation
,
943 ProcessForegroundInformation
,
944 ProcessWow64Information
,
945 ProcessImageFileName
,
946 ProcessLUIDDeviceMapsEnabled
,
947 ProcessBreakOnTermination
,
948 ProcessDebugObjectHandle
,
950 ProcessHandleTracing
,
953 ProcessTlsInformation
,
955 ProcessImageInformation
,
958 ProcessInstrumentationCallback
,
959 ProcessThreadStackAllocation
,
960 ProcessWorkingSetWatchEx
,
961 ProcessImageFileNameWin32
,
962 ProcessImageFileMapping
,
963 ProcessAffinityUpdateMode
,
964 ProcessMemoryAllocationMode
,
965 ProcessGroupInformation
,
966 ProcessTokenVirtualizationEnabled
,
967 ProcessConsoleHostProcess
,
968 ProcessWindowInformation
,
972 typedef enum _THREADINFOCLASS
{
973 ThreadBasicInformation
,
978 ThreadImpersonationToken
,
979 ThreadDescriptorTableEntry
,
980 ThreadEnableAlignmentFaultFixup
,
981 ThreadEventPair_Reusable
,
982 ThreadQuerySetWin32StartAddress
,
984 ThreadPerformanceCount
,
986 ThreadIdealProcessor
,
988 ThreadSetTlsArrayAddress
,
990 ThreadHideFromDebugger
,
991 ThreadBreakOnTermination
,
992 ThreadSwitchLegacyState
,
994 ThreadLastSystemCall
,
998 ThreadActualBasePriority
,
999 ThreadTebInformation
,
1003 ThreadGroupInformation
,
1004 ThreadUmsInformation
,
1005 ThreadCounterProfiling
,
1006 ThreadIdealProcessorEx
,
1010 typedef struct _PROCESS_BASIC_INFORMATION
{
1011 NTSTATUS ExitStatus
;
1012 struct _PEB
*PebBaseAddress
;
1013 ULONG_PTR AffinityMask
;
1014 KPRIORITY BasePriority
;
1015 ULONG_PTR UniqueProcessId
;
1016 ULONG_PTR InheritedFromUniqueProcessId
;
1017 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
1019 typedef struct _PROCESS_WS_WATCH_INFORMATION
{
1022 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
1024 typedef struct _PROCESS_DEVICEMAP_INFORMATION
{
1025 __GNU_EXTENSION
union {
1027 HANDLE DirectoryHandle
;
1031 UCHAR DriveType
[32];
1034 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
1036 typedef struct _KERNEL_USER_TIMES
{
1037 LARGE_INTEGER CreateTime
;
1038 LARGE_INTEGER ExitTime
;
1039 LARGE_INTEGER KernelTime
;
1040 LARGE_INTEGER UserTime
;
1041 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1043 typedef struct _PROCESS_ACCESS_TOKEN
{
1046 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1048 typedef struct _PROCESS_SESSION_INFORMATION
{
1050 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1052 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
1053 IoQueryDeviceIdentifier
= 0,
1054 IoQueryDeviceConfigurationData
,
1055 IoQueryDeviceComponentInformation
,
1056 IoQueryDeviceMaxData
1057 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
1059 typedef struct _DISK_SIGNATURE
{
1060 ULONG PartitionStyle
;
1061 _ANONYMOUS_UNION
union {
1070 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
1073 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
1076 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
1077 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
1078 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
1079 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
1081 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1082 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1083 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1084 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1085 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1088 (NTAPI
*PTIMER_APC_ROUTINE
)(
1089 IN PVOID TimerContext
,
1090 IN ULONG TimerLowValue
,
1091 IN LONG TimerHighValue
);
1093 typedef struct _KUSER_SHARED_DATA
1095 ULONG TickCountLowDeprecated
;
1096 ULONG TickCountMultiplier
;
1097 volatile KSYSTEM_TIME InterruptTime
;
1098 volatile KSYSTEM_TIME SystemTime
;
1099 volatile KSYSTEM_TIME TimeZoneBias
;
1100 USHORT ImageNumberLow
;
1101 USHORT ImageNumberHigh
;
1102 WCHAR NtSystemRoot
[260];
1103 ULONG MaxStackTraceDepth
;
1104 ULONG CryptoExponent
;
1106 ULONG LargePageMinimum
;
1108 NT_PRODUCT_TYPE NtProductType
;
1109 BOOLEAN ProductTypeIsValid
;
1110 ULONG NtMajorVersion
;
1111 ULONG NtMinorVersion
;
1112 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
1115 volatile ULONG TimeSlip
;
1116 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
1117 ULONG AltArchitecturePad
[1];
1118 LARGE_INTEGER SystemExpirationDate
;
1120 BOOLEAN KdDebuggerEnabled
;
1121 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
1122 UCHAR NXSupportPolicy
;
1124 volatile ULONG ActiveConsoleId
;
1125 volatile ULONG DismountCount
;
1126 ULONG ComPlusPackage
;
1127 ULONG LastSystemRITEventTickCount
;
1128 ULONG NumberOfPhysicalPages
;
1129 BOOLEAN SafeBootMode
;
1130 #if (NTDDI_VERSION >= NTDDI_WIN7)
1134 UCHAR TscQpcEnabled
:1;
1135 UCHAR TscQpcSpareFlag
:1;
1136 UCHAR TscQpcShift
:6;
1141 #if (NTDDI_VERSION >= NTDDI_VISTA)
1143 ULONG SharedDataFlags
;
1145 ULONG DbgErrorPortPresent
:1;
1146 ULONG DbgElevationEnabled
:1;
1147 ULONG DbgVirtEnabled
:1;
1148 ULONG DbgInstallerDetectEnabled
:1;
1149 ULONG DbgSystemDllRelocated
:1;
1150 ULONG DbgDynProcessorEnabled
:1;
1151 ULONG DbgSEHValidationEnabled
:1;
1158 ULONG DataFlagsPad
[1];
1159 ULONGLONG TestRetInstruction
;
1161 ULONG SystemCallReturn
;
1162 ULONGLONG SystemCallPad
[3];
1163 _ANONYMOUS_UNION
union {
1164 volatile KSYSTEM_TIME TickCount
;
1165 volatile ULONG64 TickCountQuad
;
1166 _ANONYMOUS_STRUCT
struct {
1167 ULONG ReservedTickCountOverlay
[3];
1168 ULONG TickCountPad
[1];
1173 #if (NTDDI_VERSION >= NTDDI_WS03)
1174 LONGLONG ConsoleSessionForegroundProcessId
;
1175 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
1177 #if (NTDDI_VERSION >= NTDDI_VISTA)
1178 #if (NTDDI_VERSION >= NTDDI_WIN7)
1179 USHORT UserModeGlobalLogger
[16];
1181 USHORT UserModeGlobalLogger
[8];
1182 ULONG HeapTracingPid
[2];
1183 ULONG CritSecTracingPid
[2];
1185 ULONG ImageFileExecutionOptions
;
1186 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
1187 ULONG LangGenerationCount
;
1189 /* 4 bytes padding */
1191 ULONGLONG Reserved5
;
1192 volatile ULONG64 InterruptTimeBias
;
1194 #if (NTDDI_VERSION >= NTDDI_WIN7)
1195 volatile ULONG64 TscQpcBias
;
1196 volatile ULONG ActiveProcessorCount
;
1197 volatile USHORT ActiveGroupCount
;
1199 volatile ULONG AitSamplingValue
;
1200 volatile ULONG AppCompatFlag
;
1201 ULONGLONG SystemDllNativeRelocation
;
1202 ULONG SystemDllWowRelocation
;
1204 XSTATE_CONFIGURATION XState
;
1206 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
1208 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1209 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1210 extern NTKERNELAPI ULONG MmUserProbeAddress
;
1215 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1216 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1217 #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
1218 #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
1219 extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_
;
1221 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1223 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1224 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
1225 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
1226 #if !defined (_X86PAE_)
1227 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
1229 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
1232 #define KeGetPcr() PCR
1234 #define KERNEL_STACK_SIZE 12288
1235 #define KERNEL_LARGE_STACK_SIZE 61440
1236 #define KERNEL_LARGE_STACK_COMMIT 12288
1238 #define SIZE_OF_80387_REGISTERS 80
1240 #define PCR_MINOR_VERSION 1
1241 #define PCR_MAJOR_VERSION 1
1243 #if !defined(RC_INVOKED)
1245 #define CONTEXT_i386 0x10000
1246 #define CONTEXT_i486 0x10000
1247 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
1248 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
1249 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
1250 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
1251 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
1252 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
1254 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
1256 #endif /* !defined(RC_INVOKED) */
1258 typedef struct _KPCR
{
1262 struct _EXCEPTION_REGISTRATION_RECORD
*Used_ExceptionList
;
1263 PVOID Used_StackBase
;
1266 ULONG ContextSwitches
;
1267 KAFFINITY SetMemberCopy
;
1271 struct _KPCR
*SelfPcr
;
1272 struct _KPRCB
*Prcb
;
1277 PVOID KdVersionBlock
;
1278 struct _KIDTENTRY
*IDT
;
1279 struct _KGDTENTRY
*GDT
;
1281 USHORT MajorVersion
;
1282 USHORT MinorVersion
;
1283 KAFFINITY SetMember
;
1284 ULONG StallScaleFactor
;
1288 UCHAR SecondLevelCacheAssociativity
;
1290 ULONG KernelReserved
[14];
1291 ULONG SecondLevelCacheSize
;
1292 ULONG HalReserved
[16];
1297 KeGetCurrentProcessorNumber(VOID
)
1299 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
1302 typedef struct _FLOATING_SAVE_AREA
{
1307 ULONG ErrorSelector
;
1310 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
1312 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
1314 #include "pshpack4.h"
1315 typedef struct _CONTEXT
{
1323 FLOATING_SAVE_AREA FloatSave
;
1340 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
1342 #include "poppack.h"
1348 #define PTI_SHIFT 12L
1349 #define PDI_SHIFT 21L
1350 #define PPI_SHIFT 30L
1351 #define PXI_SHIFT 39L
1352 #define PTE_PER_PAGE 512
1353 #define PDE_PER_PAGE 512
1354 #define PPE_PER_PAGE 512
1355 #define PXE_PER_PAGE 512
1356 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
1357 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
1358 #define PPI_MASK (PPE_PER_PAGE - 1)
1359 #define PXI_MASK (PXE_PER_PAGE - 1)
1361 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
1362 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
1363 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
1364 #define PDE_BASE 0xFFFFF6FB40000000ULL
1365 #define PTE_BASE 0xFFFFF68000000000ULL
1366 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
1367 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
1368 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
1369 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
1371 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1372 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1373 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1374 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1375 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
1376 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
1378 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
1428 /* Floating point */
1430 XMM_SAVE_AREA32 FltSave
;
1454 M128A VectorRegister
[26];
1455 ULONG64 VectorControl
;
1458 ULONG64 DebugControl
;
1459 ULONG64 LastBranchToRip
;
1460 ULONG64 LastBranchFromRip
;
1461 ULONG64 LastExceptionToRip
;
1462 ULONG64 LastExceptionFromRip
;
1465 typedef struct _KPCR
1467 _ANONYMOUS_UNION
union
1470 _ANONYMOUS_STRUCT
struct
1472 union _KGDTENTRY64
*GdtBase
;
1473 struct _KTSS64
*TssBase
;
1476 struct _KPRCB
*CurrentPrcb
;
1477 PKSPIN_LOCK_QUEUE LockArray
;
1481 union _KIDTENTRY64
*IdtBase
;
1484 UCHAR SecondLevelCacheAssociativity
;
1485 UCHAR ObsoleteNumber
;
1488 USHORT MajorVersion
;
1489 USHORT MinorVersion
;
1490 ULONG StallScaleFactor
;
1492 ULONG KernelReserved
[15];
1493 ULONG SecondLevelCacheSize
;
1494 ULONG HalReserved
[16];
1496 PVOID KdVersionBlock
;
1498 ULONG PcrAlign1
[24];
1505 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
1510 KeGetCurrentProcessorNumber(VOID
)
1512 return (ULONG
)__readgsword(0x184);
1515 #if !defined(RC_INVOKED)
1517 #define CONTEXT_AMD64 0x100000
1519 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
1520 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
1521 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
1522 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
1523 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
1525 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1526 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1528 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
1530 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1531 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1532 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1533 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1535 #endif /* RC_INVOKED */
1537 #endif /* _AMD64_ */
1539 typedef enum _INTERLOCKED_RESULT
{
1540 ResultNegative
= RESULT_NEGATIVE
,
1541 ResultZero
= RESULT_ZERO
,
1542 ResultPositive
= RESULT_POSITIVE
1543 } INTERLOCKED_RESULT
;
1545 typedef struct _OSVERSIONINFOA
{
1546 ULONG dwOSVersionInfoSize
;
1547 ULONG dwMajorVersion
;
1548 ULONG dwMinorVersion
;
1549 ULONG dwBuildNumber
;
1551 CHAR szCSDVersion
[128];
1552 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
1554 typedef struct _OSVERSIONINFOW
{
1555 ULONG dwOSVersionInfoSize
;
1556 ULONG dwMajorVersion
;
1557 ULONG dwMinorVersion
;
1558 ULONG dwBuildNumber
;
1560 WCHAR szCSDVersion
[128];
1561 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
1563 typedef struct _OSVERSIONINFOEXA
{
1564 ULONG dwOSVersionInfoSize
;
1565 ULONG dwMajorVersion
;
1566 ULONG dwMinorVersion
;
1567 ULONG dwBuildNumber
;
1569 CHAR szCSDVersion
[128];
1570 USHORT wServicePackMajor
;
1571 USHORT wServicePackMinor
;
1575 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
1577 typedef struct _OSVERSIONINFOEXW
{
1578 ULONG dwOSVersionInfoSize
;
1579 ULONG dwMajorVersion
;
1580 ULONG dwMinorVersion
;
1581 ULONG dwBuildNumber
;
1583 WCHAR szCSDVersion
[128];
1584 USHORT wServicePackMajor
;
1585 USHORT wServicePackMinor
;
1589 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
1592 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
1593 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
1594 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
1595 typedef OSVERSIONINFOW OSVERSIONINFO
;
1596 typedef POSVERSIONINFOW POSVERSIONINFO
;
1597 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
1599 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
1600 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
1601 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
1602 typedef OSVERSIONINFOA OSVERSIONINFO
;
1603 typedef POSVERSIONINFOA POSVERSIONINFO
;
1604 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
1605 #endif /* UNICODE */
1607 /* Executive Types */
1609 #define PROTECTED_POOL 0x80000000
1611 typedef struct _ZONE_SEGMENT_HEADER
{
1612 SINGLE_LIST_ENTRY SegmentList
;
1614 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
1616 typedef struct _ZONE_HEADER
{
1617 SINGLE_LIST_ENTRY FreeList
;
1618 SINGLE_LIST_ENTRY SegmentList
;
1620 ULONG TotalSegmentSize
;
1621 } ZONE_HEADER
, *PZONE_HEADER
;
1623 /* Executive Functions */
1625 static __inline PVOID
1627 IN PZONE_HEADER Zone
)
1629 if (Zone
->FreeList
.Next
)
1630 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
1631 return (PVOID
) Zone
->FreeList
.Next
;
1634 static __inline PVOID
1636 IN PZONE_HEADER Zone
,
1639 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
1640 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
1641 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
1646 * ExInterlockedAllocateFromZone(
1647 * IN PZONE_HEADER Zone,
1648 * IN PKSPIN_LOCK Lock)
1650 #define ExInterlockedAllocateFromZone(Zone, Lock) \
1651 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
1654 * ExInterlockedFreeToZone(
1655 * IN PZONE_HEADER Zone,
1657 * IN PKSPIN_LOCK Lock);
1659 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
1660 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
1665 * IN PZONE_HEADER Zone)
1667 #define ExIsFullZone(Zone) \
1668 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
1671 * ExIsObjectInFirstZoneSegment(
1672 * IN PZONE_HEADER Zone,
1675 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
1676 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
1677 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
1678 (Zone)->TotalSegmentSize)) )
1680 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
1681 #define ExAcquireResourceShared ExAcquireResourceSharedLite
1682 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
1683 #define ExDeleteResource ExDeleteResourceLite
1684 #define ExInitializeResource ExInitializeResourceLite
1685 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
1686 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
1687 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
1688 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
1690 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1696 IN OUT PZONE_HEADER Zone
,
1697 IN OUT PVOID Segment
,
1698 IN ULONG SegmentSize
);
1704 OUT PZONE_HEADER Zone
,
1706 IN OUT PVOID InitialSegment
,
1707 IN ULONG InitialSegmentSize
);
1712 ExInterlockedExtendZone(
1713 IN OUT PZONE_HEADER Zone
,
1714 IN OUT PVOID Segment
,
1715 IN ULONG SegmentSize
,
1716 IN OUT PKSPIN_LOCK Lock
);
1728 ExRaiseAccessViolation(
1735 ExRaiseDatatypeMisalignment(
1745 Exfi386InterlockedIncrementLong(
1746 IN OUT LONG
volatile *Addend
);
1751 Exfi386InterlockedDecrementLong(
1757 Exfi386InterlockedExchangeUlong(
1765 typedef enum _CONFIGURATION_TYPE
{
1768 FloatingPointProcessor
,
1778 MultiFunctionAdapter
,
1792 FloppyDiskPeripheral
,
1805 RealModeIrqRoutingTable
,
1806 RealModePCIEnumeration
,
1808 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
1809 #endif /* !_ARC_DDK_ */
1811 typedef struct _CONTROLLER_OBJECT
{
1814 PVOID ControllerExtension
;
1815 KDEVICE_QUEUE DeviceWaitQueue
;
1817 LARGE_INTEGER Spare2
;
1818 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
1820 typedef struct _CONFIGURATION_INFORMATION
{
1825 ULONG ScsiPortCount
;
1827 ULONG ParallelCount
;
1828 BOOLEAN AtDiskPrimaryAddressClaimed
;
1829 BOOLEAN AtDiskSecondaryAddressClaimed
;
1831 ULONG MediumChangerCount
;
1832 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
1836 (NTAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
1838 IN PUNICODE_STRING PathName
,
1839 IN INTERFACE_TYPE BusType
,
1841 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
1842 IN CONFIGURATION_TYPE ControllerType
,
1843 IN ULONG ControllerNumber
,
1844 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
1845 IN CONFIGURATION_TYPE PeripheralType
,
1846 IN ULONG PeripheralNumber
,
1847 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
1851 (NTAPI DRIVER_REINITIALIZE
)(
1852 IN
struct _DRIVER_OBJECT
*DriverObject
,
1856 typedef DRIVER_REINITIALIZE
*PDRIVER_REINITIALIZE
;
1858 /** Filesystem runtime library routines **/
1860 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1864 FsRtlIsTotalDeviceFailure(
1865 IN NTSTATUS Status
);
1868 /* Hardware Abstraction Layer Types */
1871 (NTAPI
*PciPin2Line
)(
1872 IN
struct _BUS_HANDLER
*BusHandler
,
1873 IN
struct _BUS_HANDLER
*RootHandler
,
1874 IN PCI_SLOT_NUMBER SlotNumber
,
1875 IN PPCI_COMMON_CONFIG PciData
);
1878 (NTAPI
*PciLine2Pin
)(
1879 IN
struct _BUS_HANDLER
*BusHandler
,
1880 IN
struct _BUS_HANDLER
*RootHandler
,
1881 IN PCI_SLOT_NUMBER SlotNumber
,
1882 IN PPCI_COMMON_CONFIG PciNewData
,
1883 IN PPCI_COMMON_CONFIG PciOldData
);
1886 (NTAPI
*PciReadWriteConfig
)(
1887 IN
struct _BUS_HANDLER
*BusHandler
,
1888 IN PCI_SLOT_NUMBER Slot
,
1893 #define PCI_DATA_TAG ' ICP'
1894 #define PCI_DATA_VERSION 1
1896 typedef struct _PCIBUSDATA
{
1899 PciReadWriteConfig ReadConfig
;
1900 PciReadWriteConfig WriteConfig
;
1901 PciPin2Line Pin2Line
;
1902 PciLine2Pin Line2Pin
;
1903 PCI_SLOT_NUMBER ParentSlot
;
1905 } PCIBUSDATA
, *PPCIBUSDATA
;
1907 /* Hardware Abstraction Layer Functions */
1909 #if !defined(NO_LEGACY_DRIVERS)
1911 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1916 HalAssignSlotResources(
1917 IN PUNICODE_STRING RegistryPath
,
1918 IN PUNICODE_STRING DriverClassName
,
1919 IN PDRIVER_OBJECT DriverObject
,
1920 IN PDEVICE_OBJECT DeviceObject
,
1921 IN INTERFACE_TYPE BusType
,
1923 IN ULONG SlotNumber
,
1924 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
1929 HalGetInterruptVector(
1930 IN INTERFACE_TYPE InterfaceType
,
1932 IN ULONG BusInterruptLevel
,
1933 IN ULONG BusInterruptVector
,
1935 OUT PKAFFINITY Affinity
);
1941 IN BUS_DATA_TYPE BusDataType
,
1943 IN ULONG SlotNumber
,
1949 #endif /* !defined(NO_LEGACY_DRIVERS) */
1951 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1957 IN PDEVICE_DESCRIPTION DeviceDescription
,
1958 IN OUT PULONG NumberOfMapRegisters
);
1964 IN ULONG Frequency
);
1969 IN PADAPTER_OBJECT DmaAdapter
);
1974 HalAcquireDisplayOwnership(
1975 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
1981 IN BUS_DATA_TYPE BusDataType
,
1983 IN ULONG SlotNumber
,
1990 HalGetBusDataByOffset(
1991 IN BUS_DATA_TYPE BusDataType
,
1993 IN ULONG SlotNumber
,
2001 HalSetBusDataByOffset(
2002 IN BUS_DATA_TYPE BusDataType
,
2004 IN ULONG SlotNumber
,
2012 HalTranslateBusAddress(
2013 IN INTERFACE_TYPE InterfaceType
,
2015 IN PHYSICAL_ADDRESS BusAddress
,
2016 IN OUT PULONG AddressSpace
,
2017 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
2021 #if (NTDDI_VERSION >= NTDDI_WINXP)
2026 IN PDEVICE_OBJECT DeviceObject
,
2027 IN ULONG SectorSize
,
2028 IN ULONG MBRTypeIdentifier
,
2032 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
2036 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2037 //DECLSPEC_DEPRECATED_DDK
2041 IoFreeAdapterChannel(
2042 IN PADAPTER_OBJECT AdapterObject
);
2044 //DECLSPEC_DEPRECATED_DDK
2048 IoFlushAdapterBuffers(
2049 IN PADAPTER_OBJECT AdapterObject
,
2051 IN PVOID MapRegisterBase
,
2054 IN BOOLEAN WriteToDevice
);
2056 //DECLSPEC_DEPRECATED_DDK
2061 IN PADAPTER_OBJECT AdapterObject
,
2062 IN PVOID MapRegisterBase
,
2063 IN ULONG NumberOfMapRegisters
);
2065 //DECLSPEC_DEPRECATED_DDK
2069 HalAllocateCommonBuffer(
2070 IN PADAPTER_OBJECT AdapterObject
,
2072 OUT PPHYSICAL_ADDRESS LogicalAddress
,
2073 IN BOOLEAN CacheEnabled
);
2075 //DECLSPEC_DEPRECATED_DDK
2079 HalFreeCommonBuffer(
2080 IN PADAPTER_OBJECT AdapterObject
,
2082 IN PHYSICAL_ADDRESS LogicalAddress
,
2083 IN PVOID VirtualAddress
,
2084 IN BOOLEAN CacheEnabled
);
2086 //DECLSPEC_DEPRECATED_DDK
2091 IN PADAPTER_OBJECT AdapterObject
);
2096 HalAllocateAdapterChannel(
2097 IN PADAPTER_OBJECT AdapterObject
,
2098 IN PWAIT_CONTEXT_BLOCK Wcb
,
2099 IN ULONG NumberOfMapRegisters
,
2100 IN PDRIVER_CONTROL ExecutionRoutine
);
2102 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2104 #endif /* defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) */
2106 /* I/O Manager Functions */
2109 * VOID IoAssignArcName(
2110 * IN PUNICODE_STRING ArcName,
2111 * IN PUNICODE_STRING DeviceName);
2113 #define IoAssignArcName(_ArcName, _DeviceName) ( \
2114 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
2118 * IoDeassignArcName(
2119 * IN PUNICODE_STRING ArcName)
2121 #define IoDeassignArcName IoDeleteSymbolicLink
2123 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2125 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
2129 IoAllocateAdapterChannel(
2130 IN PADAPTER_OBJECT AdapterObject
,
2131 IN PDEVICE_OBJECT DeviceObject
,
2132 IN ULONG NumberOfMapRegisters
,
2133 IN PDRIVER_CONTROL ExecutionRoutine
,
2137 //DECLSPEC_DEPRECATED_DDK
2142 IN PADAPTER_OBJECT AdapterObject
,
2144 IN PVOID MapRegisterBase
,
2146 IN OUT PULONG Length
,
2147 IN BOOLEAN WriteToDevice
);
2152 IoAllocateController(
2153 IN PCONTROLLER_OBJECT ControllerObject
,
2154 IN PDEVICE_OBJECT DeviceObject
,
2155 IN PDRIVER_CONTROL ExecutionRoutine
,
2156 IN PVOID Context OPTIONAL
);
2168 IN PCONTROLLER_OBJECT ControllerObject
);
2174 IN PCONTROLLER_OBJECT ControllerObject
);
2177 PCONFIGURATION_INFORMATION
2179 IoGetConfigurationInformation(
2185 IoGetDeviceToVerify(
2186 IN PETHREAD Thread
);
2192 IN PDEVICE_OBJECT DeviceObject
,
2193 IN PFILE_OBJECT FileObject
);
2198 IoGetFileObjectGenericMapping(
2204 IoMakeAssociatedIrp(
2206 IN CCHAR StackSize
);
2211 IoQueryDeviceDescription(
2212 IN PINTERFACE_TYPE BusType OPTIONAL
,
2213 IN PULONG BusNumber OPTIONAL
,
2214 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
2215 IN PULONG ControllerNumber OPTIONAL
,
2216 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
2217 IN PULONG PeripheralNumber OPTIONAL
,
2218 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
2219 IN OUT PVOID Context OPTIONAL
);
2226 IN PVPB Vpb OPTIONAL
,
2227 IN PDEVICE_OBJECT RealDeviceObject
);
2232 IoRaiseInformationalHardError(
2233 IN NTSTATUS ErrorStatus
,
2234 IN PUNICODE_STRING String OPTIONAL
,
2235 IN PKTHREAD Thread OPTIONAL
);
2240 IoRegisterBootDriverReinitialization(
2241 IN PDRIVER_OBJECT DriverObject
,
2242 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2243 IN PVOID Context OPTIONAL
);
2248 IoRegisterDriverReinitialization(
2249 IN PDRIVER_OBJECT DriverObject
,
2250 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2251 IN PVOID Context OPTIONAL
);
2256 IoAttachDeviceByPointer(
2257 IN PDEVICE_OBJECT SourceDevice
,
2258 IN PDEVICE_OBJECT TargetDevice
);
2263 IoReportDetectedDevice(
2264 IN PDRIVER_OBJECT DriverObject
,
2265 IN INTERFACE_TYPE LegacyBusType
,
2267 IN ULONG SlotNumber
,
2268 IN PCM_RESOURCE_LIST ResourceList OPTIONAL
,
2269 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
2270 IN BOOLEAN ResourceAssigned
,
2271 IN OUT PDEVICE_OBJECT
*DeviceObject
);
2276 IoReportResourceForDetection(
2277 IN PDRIVER_OBJECT DriverObject
,
2278 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2279 IN ULONG DriverListSize OPTIONAL
,
2280 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2281 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2282 IN ULONG DeviceListSize OPTIONAL
,
2283 OUT PBOOLEAN ConflictDetected
);
2288 IoReportResourceUsage(
2289 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2290 IN PDRIVER_OBJECT DriverObject
,
2291 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2292 IN ULONG DriverListSize OPTIONAL
,
2293 IN PDEVICE_OBJECT DeviceObject
,
2294 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2295 IN ULONG DeviceListSize OPTIONAL
,
2296 IN BOOLEAN OverrideConflict
,
2297 OUT PBOOLEAN ConflictDetected
);
2302 IoSetHardErrorOrVerifyDevice(
2304 IN PDEVICE_OBJECT DeviceObject
);
2310 IN PUNICODE_STRING RegistryPath
,
2311 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2312 IN PDRIVER_OBJECT DriverObject
,
2313 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2314 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL
,
2315 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
2317 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2319 #if (NTDDI_VERSION >= NTDDI_WINXP)
2325 IN PDEVICE_OBJECT DeviceObject
,
2326 IN
struct _CREATE_DISK
* Disk OPTIONAL
);
2331 IoReadDiskSignature(
2332 IN PDEVICE_OBJECT DeviceObject
,
2333 IN ULONG BytesPerSector
,
2334 OUT PDISK_SIGNATURE Signature
);
2339 IoReadPartitionTable(
2340 IN PDEVICE_OBJECT DeviceObject
,
2341 IN ULONG SectorSize
,
2342 IN BOOLEAN ReturnRecognizedPartitions
,
2343 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2348 IoReadPartitionTableEx(
2349 IN PDEVICE_OBJECT DeviceObject
,
2350 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
2355 IoSetPartitionInformation(
2356 IN PDEVICE_OBJECT DeviceObject
,
2357 IN ULONG SectorSize
,
2358 IN ULONG PartitionNumber
,
2359 IN ULONG PartitionType
);
2364 IoSetPartitionInformationEx(
2365 IN PDEVICE_OBJECT DeviceObject
,
2366 IN ULONG PartitionNumber
,
2367 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
2372 IoSetSystemPartition(
2373 IN PUNICODE_STRING VolumeNameString
);
2378 IoSetThreadHardErrorMode(
2379 IN BOOLEAN EnableHardErrors
);
2384 IoVerifyPartitionTable(
2385 IN PDEVICE_OBJECT DeviceObject
,
2386 IN BOOLEAN FixErrors
);
2391 IoVolumeDeviceToDosName(
2392 IN PVOID VolumeDeviceObject
,
2393 OUT PUNICODE_STRING DosName
);
2398 IoWritePartitionTable(
2399 IN PDEVICE_OBJECT DeviceObject
,
2400 IN ULONG SectorSize
,
2401 IN ULONG SectorsPerTrack
,
2402 IN ULONG NumberOfHeads
,
2403 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2408 IoWritePartitionTableEx(
2409 IN PDEVICE_OBJECT DeviceObject
,
2410 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*DriveLayout
);
2415 IoAttachDeviceToDeviceStackSafe(
2416 IN PDEVICE_OBJECT SourceDevice
,
2417 IN PDEVICE_OBJECT TargetDevice
,
2418 OUT PDEVICE_OBJECT
*AttachedToDeviceObject
);
2420 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2422 /** Kernel debugger routines **/
2430 IN ULONG MaximumResponseLength
);
2432 /* Kernel Functions */
2434 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2441 IN ULONG BugCheckCode
);
2447 IN OUT PRKEVENT Event
,
2448 IN KPRIORITY Increment
,
2454 KeSetBasePriorityThread(
2455 IN OUT PRKTHREAD Thread
,
2460 /* Memory Manager Types */
2462 typedef struct _PHYSICAL_MEMORY_RANGE
{
2463 PHYSICAL_ADDRESS BaseAddress
;
2464 LARGE_INTEGER NumberOfBytes
;
2465 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
2467 /* Memory Manager Functions */
2469 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2472 PPHYSICAL_MEMORY_RANGE
2474 MmGetPhysicalMemoryRanges(
2480 MmGetPhysicalAddress(
2481 IN PVOID BaseAddress
);
2486 MmIsNonPagedSystemAddressValid(
2487 IN PVOID VirtualAddress
);
2492 MmAllocateNonCachedMemory(
2493 IN SIZE_T NumberOfBytes
);
2498 MmFreeNonCachedMemory(
2499 IN PVOID BaseAddress
,
2500 IN SIZE_T NumberOfBytes
);
2505 MmGetVirtualForPhysical(
2506 IN PHYSICAL_ADDRESS PhysicalAddress
);
2511 MmMapUserAddressesToPage(
2512 IN PVOID BaseAddress
,
2513 IN SIZE_T NumberOfBytes
,
2514 IN PVOID PageAddress
);
2520 IN PHYSICAL_ADDRESS PhysicalAddress
,
2521 IN SIZE_T NumberOfBytes
,
2522 IN MEMORY_CACHING_TYPE CacheType
);
2527 MmMapViewInSessionSpace(
2529 OUT PVOID
*MappedBase
,
2530 IN OUT PSIZE_T ViewSize
);
2535 MmMapViewInSystemSpace(
2537 OUT PVOID
*MappedBase
,
2538 IN OUT PSIZE_T ViewSize
);
2544 IN PVOID VirtualAddress
);
2549 MmIsThisAnNtAsSystem(
2555 MmLockPagableSectionByHandle(
2556 IN PVOID ImageSectionHandle
);
2561 MmUnmapViewInSessionSpace(
2562 IN PVOID MappedBase
);
2567 MmUnmapViewInSystemSpace(
2568 IN PVOID MappedBase
);
2573 MmUnsecureVirtualMemory(
2574 IN HANDLE SecureHandle
);
2579 MmRemovePhysicalMemory(
2580 IN PPHYSICAL_ADDRESS StartAddress
,
2581 IN OUT PLARGE_INTEGER NumberOfBytes
);
2586 MmSecureVirtualMemory(
2589 IN ULONG ProbeMode
);
2594 MmUnmapVideoDisplay(
2595 IN PVOID BaseAddress
,
2596 IN SIZE_T NumberOfBytes
);
2598 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2600 /* NtXxx Functions */
2606 OUT PHANDLE ProcessHandle
,
2607 IN ACCESS_MASK DesiredAccess
,
2608 IN POBJECT_ATTRIBUTES ObjectAttributes
,
2609 IN PCLIENT_ID ClientId OPTIONAL
);
2614 NtQueryInformationProcess(
2615 IN HANDLE ProcessHandle
,
2616 IN PROCESSINFOCLASS ProcessInformationClass
,
2617 OUT PVOID ProcessInformation OPTIONAL
,
2618 IN ULONG ProcessInformationLength
,
2619 OUT PULONG ReturnLength OPTIONAL
);
2621 /** Process manager types **/
2624 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
2626 IN HANDLE ProcessId
,
2630 (NTAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
2631 IN HANDLE ProcessId
,
2636 (NTAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
2637 IN PUNICODE_STRING FullImageName
,
2638 IN HANDLE ProcessId
,
2639 IN PIMAGE_INFO ImageInfo
);
2641 /** Process manager routines **/
2643 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2648 PsSetLoadImageNotifyRoutine(
2649 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
2654 PsSetCreateThreadNotifyRoutine(
2655 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
2660 PsSetCreateProcessNotifyRoutine(
2661 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
2667 PsGetCurrentProcessId(
2673 PsGetCurrentThreadId(
2680 OUT PULONG MajorVersion OPTIONAL
,
2681 OUT PULONG MinorVersion OPTIONAL
,
2682 OUT PULONG BuildNumber OPTIONAL
,
2683 OUT PUNICODE_STRING CSDVersion OPTIONAL
);
2685 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2687 #if (NTDDI_VERSION >= NTDDI_WINXP)
2693 IN PEPROCESS Process
);
2698 PsRemoveCreateThreadNotifyRoutine(
2699 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
2704 PsRemoveLoadImageNotifyRoutine(
2705 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
2707 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2709 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess
;
2713 typedef struct _RTL_SPLAY_LINKS
{
2714 struct _RTL_SPLAY_LINKS
*Parent
;
2715 struct _RTL_SPLAY_LINKS
*LeftChild
;
2716 struct _RTL_SPLAY_LINKS
*RightChild
;
2717 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
2721 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
2723 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
2724 *CallersAddress = (PVOID)_ReturnAddress(); \
2725 *CallersCaller = NULL;
2728 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2732 RtlGetCallersAddress(
2733 OUT PVOID
*CallersAddress
,
2734 OUT PVOID
*CallersCaller
);
2739 #if !defined(MIDL_PASS)
2744 RtlConvertLongToLuid(
2750 Temp
.QuadPart
= Val
;
2751 Luid
.LowPart
= Temp
.u
.LowPart
;
2752 Luid
.HighPart
= Temp
.u
.HighPart
;
2759 RtlConvertUlongToLuid(
2771 #if defined(_AMD64_) || defined(_IA64_)
2772 //DECLSPEC_DEPRECATED_DDK_WINXP
2776 RtlLargeIntegerDivide(
2777 IN LARGE_INTEGER Dividend
,
2778 IN LARGE_INTEGER Divisor
,
2779 OUT PLARGE_INTEGER Remainder OPTIONAL
)
2782 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
2784 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
2790 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2794 RtlLargeIntegerDivide(
2795 IN LARGE_INTEGER Dividend
,
2796 IN LARGE_INTEGER Divisor
,
2797 OUT PLARGE_INTEGER Remainder OPTIONAL
);
2800 #endif /* defined(_AMD64_) || defined(_IA64_) */
2802 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2807 RtlPrefixUnicodeString(
2808 IN PCUNICODE_STRING String1
,
2809 IN PCUNICODE_STRING String2
,
2810 IN BOOLEAN CaseInSensitive
);
2816 IN OUT PSTRING DestinationString
,
2817 IN
const PSTRING SourceString
);
2822 RtlUpcaseUnicodeString(
2823 IN OUT PUNICODE_STRING DestinationString
,
2824 IN PCUNICODE_STRING SourceString
,
2825 IN BOOLEAN AllocateDestinationString
);
2831 IN OUT PACCESS_MASK AccessMask
,
2832 IN PGENERIC_MAPPING GenericMapping
);
2837 RtlVolumeDeviceToDosName(
2838 IN PVOID VolumeDeviceObject
,
2839 OUT PUNICODE_STRING DosName
);
2845 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
2850 RtlVerifyVersionInfo(
2851 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
2853 IN ULONGLONG ConditionMask
);
2859 IN
const PSTRING String1
,
2860 IN
const PSTRING String2
,
2861 BOOLEAN CaseInSensitive
);
2867 OUT PSTRING DestinationString
,
2868 IN
const PSTRING SourceString OPTIONAL
);
2874 IN
const PSTRING String1
,
2875 IN
const PSTRING String2
,
2876 IN BOOLEAN CaseInSensitive
);
2883 IN ULONG Base OPTIONAL
,
2900 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2902 /* Security reference monitor routines */
2904 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2908 SeSinglePrivilegeCheck(
2909 IN LUID PrivilegeValue
,
2910 IN KPROCESSOR_MODE PreviousMode
);
2913 /* ZwXxx Functions */
2915 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2920 IN HANDLE TimerHandle
,
2921 OUT PBOOLEAN CurrentState OPTIONAL
);
2926 OUT PHANDLE TimerHandle
,
2927 IN ACCESS_MASK DesiredAccess
,
2928 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
2929 IN TIMER_TYPE TimerType
);
2934 OUT PHANDLE TimerHandle
,
2935 IN ACCESS_MASK DesiredAccess
,
2936 IN POBJECT_ATTRIBUTES ObjectAttributes
);
2941 ZwSetInformationThread(
2942 IN HANDLE ThreadHandle
,
2943 IN THREADINFOCLASS ThreadInformationClass
,
2944 IN PVOID ThreadInformation
,
2945 IN ULONG ThreadInformationLength
);
2950 IN HANDLE TimerHandle
,
2951 IN PLARGE_INTEGER DueTime
,
2952 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
2953 IN PVOID TimerContext OPTIONAL
,
2954 IN BOOLEAN ResumeTimer
,
2955 IN LONG Period OPTIONAL
,
2956 OUT PBOOLEAN PreviousState OPTIONAL
);
2960 typedef struct _QUOTA_LIMITS
{
2961 SIZE_T PagedPoolLimit
;
2962 SIZE_T NonPagedPoolLimit
;
2963 SIZE_T MinimumWorkingSetSize
;
2964 SIZE_T MaximumWorkingSetSize
;
2965 SIZE_T PagefileLimit
;
2966 LARGE_INTEGER TimeLimit
;
2967 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
2969 struct _RTL_GENERIC_COMPARE_ROUTINE
;
2970 struct _RTL_GENERIC_ALLOCATE_ROUTINE
;
2971 struct _RTL_GENERIC_FREE_ROUTINE
;
2973 typedef struct _RTL_GENERIC_TABLE
{
2974 PRTL_SPLAY_LINKS TableRoot
;
2975 LIST_ENTRY InsertOrderList
;
2976 PLIST_ENTRY OrderedPointer
;
2977 ULONG WhichOrderedElement
;
2978 ULONG NumberGenericTableElements
;
2979 struct _RTL_GENERIC_COMPARE_ROUTINE
*CompareRoutine
;
2980 struct _RTL_GENERIC_ALLOCATE_ROUTINE
*AllocateRoutine
;
2981 struct _RTL_GENERIC_FREE_ROUTINE
*FreeRoutine
;
2983 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
2985 typedef enum _TABLE_SEARCH_RESULT
{
2990 } TABLE_SEARCH_RESULT
;
2992 typedef struct _FILE_FS_SIZE_INFORMATION
{
2993 LARGE_INTEGER TotalAllocationUnits
;
2994 LARGE_INTEGER AvailableAllocationUnits
;
2995 ULONG SectorsPerAllocationUnit
;
2996 ULONG BytesPerSector
;
2997 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
2999 #define IO_CHECK_CREATE_PARAMETERS 0x0200
3000 #define IO_ATTACH_DEVICE 0x0400
3001 #define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800
3003 typedef struct _FILE_FS_VOLUME_INFORMATION
{
3004 LARGE_INTEGER VolumeCreationTime
;
3005 ULONG VolumeSerialNumber
;
3006 ULONG VolumeLabelLength
;
3007 BOOLEAN SupportsObjects
;
3008 WCHAR VolumeLabel
[1];
3009 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
3011 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
{
3012 LARGE_INTEGER TotalAllocationUnits
;
3013 LARGE_INTEGER CallerAvailableAllocationUnits
;
3014 LARGE_INTEGER ActualAvailableAllocationUnits
;
3015 ULONG SectorsPerAllocationUnit
;
3016 ULONG BytesPerSector
;
3017 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
3019 typedef struct _FILE_FS_OBJECTID_INFORMATION
{
3021 UCHAR ExtendedInfo
[48];
3022 } FILE_FS_OBJECTID_INFORMATION
, *PFILE_FS_OBJECTID_INFORMATION
;
3024 typedef struct _FILE_FS_LABEL_INFORMATION
{
3025 ULONG VolumeLabelLength
;
3026 WCHAR VolumeLabel
[1];
3027 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
3029 typedef enum _RTL_GENERIC_COMPARE_RESULTS
{
3033 } RTL_GENERIC_COMPARE_RESULTS
;
3036 struct _RTL_AVL_TABLE
;
3038 typedef RTL_GENERIC_COMPARE_RESULTS
3039 (NTAPI
*PRTL_AVL_COMPARE_ROUTINE
) (
3040 IN
struct _RTL_AVL_TABLE
*Table
,
3041 IN PVOID FirstStruct
,
3042 IN PVOID SecondStruct
);
3045 (NTAPI
*PRTL_AVL_ALLOCATE_ROUTINE
) (
3046 IN
struct _RTL_AVL_TABLE
*Table
,
3050 (NTAPI
*PRTL_AVL_FREE_ROUTINE
) (
3051 IN
struct _RTL_AVL_TABLE
*Table
,
3055 (NTAPI
*PRTL_AVL_MATCH_FUNCTION
) (
3056 IN
struct _RTL_AVL_TABLE
*Table
,
3058 IN PVOID MatchData
);
3060 typedef struct _RTL_BALANCED_LINKS
{
3061 struct _RTL_BALANCED_LINKS
*Parent
;
3062 struct _RTL_BALANCED_LINKS
*LeftChild
;
3063 struct _RTL_BALANCED_LINKS
*RightChild
;
3066 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
3068 typedef struct _RTL_AVL_TABLE
{
3069 RTL_BALANCED_LINKS BalancedRoot
;
3070 PVOID OrderedPointer
;
3071 ULONG WhichOrderedElement
;
3072 ULONG NumberGenericTableElements
;
3074 PRTL_BALANCED_LINKS RestartKey
;
3076 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
3077 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
3078 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
3080 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
3082 #ifndef RTL_USE_AVL_TABLES
3084 struct _RTL_GENERIC_TABLE
;
3086 typedef RTL_GENERIC_COMPARE_RESULTS
3087 (NTAPI
*PRTL_GENERIC_COMPARE_ROUTINE
) (
3088 IN
struct _RTL_GENERIC_TABLE
*Table
,
3089 IN PVOID FirstStruct
,
3090 IN PVOID SecondStruct
);
3093 (NTAPI
*PRTL_GENERIC_ALLOCATE_ROUTINE
) (
3094 IN
struct _RTL_GENERIC_TABLE
*Table
,
3098 (NTAPI
*PRTL_GENERIC_FREE_ROUTINE
) (
3099 IN
struct _RTL_GENERIC_TABLE
*Table
,
3102 #endif /* !RTL_USE_AVL_TABLES */
3107 RtlInitializeGenericTableAvl(
3108 OUT PRTL_AVL_TABLE Table
,
3109 IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine
,
3110 IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
,
3111 IN PRTL_AVL_FREE_ROUTINE FreeRoutine
,
3112 IN PVOID TableContext OPTIONAL
);
3119 #endif /* _NTDDK_ */