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 #define EXCEPTION_READ_FAULT 0
74 #define EXCEPTION_WRITE_FAULT 1
75 #define EXCEPTION_EXECUTE_FAULT 8
77 #if (NTDDI_VERSION >= NTDDI_VISTA)
78 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
79 #elif (NTDDI_VERSION >= NTDDI_WINXP)
80 extern NTSYSAPI CCHAR KeNumberProcessors
;
82 extern PCCHAR KeNumberProcessors
;
85 #define MAX_WOW64_SHARED_ENTRIES 16
87 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
88 #define NX_SUPPORT_POLICY_ALWAYSON 1
89 #define NX_SUPPORT_POLICY_OPTIN 2
90 #define NX_SUPPORT_POLICY_OPTOUT 3
96 #define IRP_MN_QUERY_DIRECTORY 0x01
97 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
99 #define IRP_MN_USER_FS_REQUEST 0x00
100 #define IRP_MN_MOUNT_VOLUME 0x01
101 #define IRP_MN_VERIFY_VOLUME 0x02
102 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
103 #define IRP_MN_TRACK_LINK 0x04
104 #define IRP_MN_KERNEL_CALL 0x04
106 #define IRP_MN_LOCK 0x01
107 #define IRP_MN_UNLOCK_SINGLE 0x02
108 #define IRP_MN_UNLOCK_ALL 0x03
109 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
111 #define IRP_MN_FLUSH_AND_PURGE 0x01
113 #define IRP_MN_NORMAL 0x00
114 #define IRP_MN_DPC 0x01
115 #define IRP_MN_MDL 0x02
116 #define IRP_MN_COMPLETE 0x04
117 #define IRP_MN_COMPRESSED 0x08
119 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
120 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
121 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
123 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
125 typedef struct _IO_COUNTERS
{
126 ULONGLONG ReadOperationCount
;
127 ULONGLONG WriteOperationCount
;
128 ULONGLONG OtherOperationCount
;
129 ULONGLONG ReadTransferCount
;
130 ULONGLONG WriteTransferCount
;
131 ULONGLONG OtherTransferCount
;
132 } IO_COUNTERS
, *PIO_COUNTERS
;
134 typedef struct _VM_COUNTERS
{
135 SIZE_T PeakVirtualSize
;
137 ULONG PageFaultCount
;
138 SIZE_T PeakWorkingSetSize
;
139 SIZE_T WorkingSetSize
;
140 SIZE_T QuotaPeakPagedPoolUsage
;
141 SIZE_T QuotaPagedPoolUsage
;
142 SIZE_T QuotaPeakNonPagedPoolUsage
;
143 SIZE_T QuotaNonPagedPoolUsage
;
144 SIZE_T PagefileUsage
;
145 SIZE_T PeakPagefileUsage
;
146 } VM_COUNTERS
, *PVM_COUNTERS
;
148 typedef struct _VM_COUNTERS_EX
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
;
162 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
164 typedef struct _POOLED_USAGE_AND_LIMITS
166 SIZE_T PeakPagedPoolUsage
;
167 SIZE_T PagedPoolUsage
;
168 SIZE_T PagedPoolLimit
;
169 SIZE_T PeakNonPagedPoolUsage
;
170 SIZE_T NonPagedPoolUsage
;
171 SIZE_T NonPagedPoolLimit
;
172 SIZE_T PeakPagefileUsage
;
173 SIZE_T PagefileUsage
;
174 SIZE_T PagefileLimit
;
175 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
177 /* DEVICE_OBJECT.Flags */
179 #define DO_VERIFY_VOLUME 0x00000002
180 #define DO_BUFFERED_IO 0x00000004
181 #define DO_EXCLUSIVE 0x00000008
182 #define DO_DIRECT_IO 0x00000010
183 #define DO_MAP_IO_BUFFER 0x00000020
184 #define DO_DEVICE_HAS_NAME 0x00000040
185 #define DO_DEVICE_INITIALIZING 0x00000080
186 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
187 #define DO_LONG_TERM_REQUESTS 0x00000200
188 #define DO_NEVER_LAST_DEVICE 0x00000400
189 #define DO_SHUTDOWN_REGISTERED 0x00000800
190 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
191 #define DO_POWER_PAGABLE 0x00002000
192 #define DO_POWER_INRUSH 0x00004000
193 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
194 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
195 #define DO_FORCE_NEITHER_IO 0x00080000
196 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
197 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
198 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
199 #define DO_DISALLOW_EXECUTE 0x00800000
201 #define DRVO_REINIT_REGISTERED 0x00000008
202 #define DRVO_INITIALIZED 0x00000010
203 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
204 #define DRVO_LEGACY_RESOURCES 0x00000040
206 typedef enum _ARBITER_REQUEST_SOURCE
{
207 ArbiterRequestUndefined
= -1,
208 ArbiterRequestLegacyReported
,
209 ArbiterRequestHalReported
,
210 ArbiterRequestLegacyAssigned
,
211 ArbiterRequestPnpDetected
,
212 ArbiterRequestPnpEnumerated
213 } ARBITER_REQUEST_SOURCE
;
215 typedef enum _ARBITER_RESULT
{
216 ArbiterResultUndefined
= -1,
217 ArbiterResultSuccess
,
218 ArbiterResultExternalConflict
,
219 ArbiterResultNullRequest
222 typedef enum _ARBITER_ACTION
{
223 ArbiterActionTestAllocation
,
224 ArbiterActionRetestAllocation
,
225 ArbiterActionCommitAllocation
,
226 ArbiterActionRollbackAllocation
,
227 ArbiterActionQueryAllocatedResources
,
228 ArbiterActionWriteReservedResources
,
229 ArbiterActionQueryConflict
,
230 ArbiterActionQueryArbitrate
,
231 ArbiterActionAddReserved
,
232 ArbiterActionBootAllocation
233 } ARBITER_ACTION
, *PARBITER_ACTION
;
235 typedef struct _ARBITER_CONFLICT_INFO
{
236 PDEVICE_OBJECT OwningObject
;
239 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
241 typedef struct _ARBITER_PARAMETERS
{
244 IN OUT PLIST_ENTRY ArbitrationList
;
245 IN ULONG AllocateFromCount
;
246 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
249 IN OUT PLIST_ENTRY ArbitrationList
;
250 IN ULONG AllocateFromCount
;
251 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
254 IN OUT PLIST_ENTRY ArbitrationList
;
257 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
258 } QueryAllocatedResources
;
260 IN PDEVICE_OBJECT PhysicalDeviceObject
;
261 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
262 OUT PULONG ConflictCount
;
263 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
266 IN PLIST_ENTRY ArbitrationList
;
269 IN PDEVICE_OBJECT ReserveDevice
;
272 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
274 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
276 typedef struct _ARBITER_LIST_ENTRY
{
277 LIST_ENTRY ListEntry
;
278 ULONG AlternativeCount
;
279 PIO_RESOURCE_DESCRIPTOR Alternatives
;
280 PDEVICE_OBJECT PhysicalDeviceObject
;
281 ARBITER_REQUEST_SOURCE RequestSource
;
284 INTERFACE_TYPE InterfaceType
;
287 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
288 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
289 ARBITER_RESULT Result
;
290 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
293 (NTAPI
*PARBITER_HANDLER
)(
294 IN OUT PVOID Context
,
295 IN ARBITER_ACTION Action
,
296 IN OUT PARBITER_PARAMETERS Parameters
);
298 #define ARBITER_PARTIAL 0x00000001
300 typedef struct _ARBITER_INTERFACE
{
304 PINTERFACE_REFERENCE InterfaceReference
;
305 PINTERFACE_DEREFERENCE InterfaceDereference
;
306 PARBITER_HANDLER ArbiterHandler
;
308 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
310 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
311 HalInstalledBusInformation
,
312 HalProfileSourceInformation
,
313 HalInformationClassUnused1
,
315 HalProcessorSpeedInformation
,
316 HalCallbackInformation
,
317 HalMapRegisterInformation
,
318 HalMcaLogInformation
,
319 HalFrameBufferCachingInformation
,
320 HalDisplayBiosInformation
,
321 HalProcessorFeatureInformation
,
322 HalNumaTopologyInterface
,
324 HalCmcLogInformation
,
325 HalCpeLogInformation
,
326 HalQueryMcaInterface
,
327 HalQueryAMLIIllegalIOPortAddresses
,
328 HalQueryMaxHotPlugMemoryAddress
,
329 HalPartitionIpiInterface
,
330 HalPlatformInformation
,
331 HalQueryProfileSourceList
,
332 HalInitLogInformation
,
333 HalFrequencyInformation
,
334 HalProcessorBrandString
,
335 HalHypervisorInformation
,
336 HalPlatformTimerInformation
,
337 HalAcpiAuditInformation
338 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
340 typedef enum _HAL_SET_INFORMATION_CLASS
{
341 HalProfileSourceInterval
,
342 HalProfileSourceInterruptHandler
,
343 HalMcaRegisterDriver
,
344 HalKernelErrorHandler
,
345 HalCmcRegisterDriver
,
346 HalCpeRegisterDriver
,
350 HalGenerateCmcInterrupt
,
351 HalProfileSourceTimerHandler
,
353 HalProfileDpgoSourceInterruptHandler
354 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
356 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
{
357 KPROFILE_SOURCE Source
;
359 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
361 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
{
362 KPROFILE_SOURCE Source
;
365 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
367 typedef struct _MAP_REGISTER_ENTRY
{
369 BOOLEAN WriteToDevice
;
370 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
372 typedef struct _DEBUG_DEVICE_ADDRESS
{
376 PUCHAR TranslatedAddress
;
378 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
380 typedef struct _DEBUG_MEMORY_REQUIREMENTS
{
381 PHYSICAL_ADDRESS Start
;
382 PHYSICAL_ADDRESS MaxEnd
;
383 PVOID VirtualAddress
;
387 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
389 typedef struct _DEBUG_DEVICE_DESCRIPTOR
{
400 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
401 DEBUG_MEMORY_REQUIREMENTS Memory
;
402 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
404 typedef struct _PM_DISPATCH_TABLE
{
408 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
410 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
411 TranslateChildToParent
,
412 TranslateParentToChild
413 } RESOURCE_TRANSLATION_DIRECTION
;
416 (NTAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
417 IN OUT PVOID Context
,
418 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
419 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
420 IN ULONG AlternativesCount OPTIONAL
,
421 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
422 IN PDEVICE_OBJECT PhysicalDeviceObject
,
423 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
426 (NTAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
427 IN PVOID Context OPTIONAL
,
428 IN PIO_RESOURCE_DESCRIPTOR Source
,
429 IN PDEVICE_OBJECT PhysicalDeviceObject
,
430 OUT PULONG TargetCount
,
431 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
433 typedef struct _TRANSLATOR_INTERFACE
{
437 PINTERFACE_REFERENCE InterfaceReference
;
438 PINTERFACE_DEREFERENCE InterfaceDereference
;
439 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
440 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
441 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
444 (FASTCALL
*pHalExamineMBR
)(
445 IN PDEVICE_OBJECT DeviceObject
,
447 IN ULONG MBRTypeIdentifier
,
451 (FASTCALL
*pHalIoReadPartitionTable
)(
452 IN PDEVICE_OBJECT DeviceObject
,
454 IN BOOLEAN ReturnRecognizedPartitions
,
455 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
458 (FASTCALL
*pHalIoSetPartitionInformation
)(
459 IN PDEVICE_OBJECT DeviceObject
,
461 IN ULONG PartitionNumber
,
462 IN ULONG PartitionType
);
465 (FASTCALL
*pHalIoWritePartitionTable
)(
466 IN PDEVICE_OBJECT DeviceObject
,
468 IN ULONG SectorsPerTrack
,
469 IN ULONG NumberOfHeads
,
470 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
473 (FASTCALL
*pHalHandlerForBus
)(
474 IN INTERFACE_TYPE InterfaceType
,
478 (FASTCALL
*pHalReferenceBusHandler
)(
479 IN PBUS_HANDLER BusHandler
);
482 (NTAPI
*pHalQuerySystemInformation
)(
483 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
486 OUT PULONG ReturnedLength
);
489 (NTAPI
*pHalSetSystemInformation
)(
490 IN HAL_SET_INFORMATION_CLASS InformationClass
,
495 (NTAPI
*pHalQueryBusSlots
)(
496 IN PBUS_HANDLER BusHandler
,
498 OUT PULONG SlotNumbers
,
499 OUT PULONG ReturnedLength
);
502 (NTAPI
*pHalInitPnpDriver
)(
506 (NTAPI
*pHalInitPowerManagement
)(
507 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
508 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
510 typedef struct _DMA_ADAPTER
*
511 (NTAPI
*pHalGetDmaAdapter
)(
513 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
514 OUT PULONG NumberOfMapRegisters
);
517 (NTAPI
*pHalGetInterruptTranslator
)(
518 IN INTERFACE_TYPE ParentInterfaceType
,
519 IN ULONG ParentBusNumber
,
520 IN INTERFACE_TYPE BridgeInterfaceType
,
523 OUT PTRANSLATOR_INTERFACE Translator
,
524 OUT PULONG BridgeBusNumber
);
527 (NTAPI
*pHalStartMirroring
)(
531 (NTAPI
*pHalEndMirroring
)(
532 IN ULONG PassNumber
);
535 (NTAPI
*pHalMirrorPhysicalMemory
)(
536 IN PHYSICAL_ADDRESS PhysicalAddress
,
537 IN LARGE_INTEGER NumberOfBytes
);
540 (NTAPI
*pHalMirrorVerify
)(
541 IN PHYSICAL_ADDRESS PhysicalAddress
,
542 IN LARGE_INTEGER NumberOfBytes
);
545 (NTAPI
*pHalEndOfBoot
)(
550 (NTAPI
*pHalTranslateBusAddress
)(
551 IN INTERFACE_TYPE InterfaceType
,
553 IN PHYSICAL_ADDRESS BusAddress
,
554 IN OUT PULONG AddressSpace
,
555 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
559 (NTAPI
*pHalAssignSlotResources
)(
560 IN PUNICODE_STRING RegistryPath
,
561 IN PUNICODE_STRING DriverClassName OPTIONAL
,
562 IN PDRIVER_OBJECT DriverObject
,
563 IN PDEVICE_OBJECT DeviceObject
,
564 IN INTERFACE_TYPE BusType
,
567 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
571 (NTAPI
*pHalHaltSystem
)(
576 (NTAPI
*pHalResetDisplay
)(
581 (NTAPI
*pHalVectorToIDTEntry
)(
586 (NTAPI
*pHalFindBusAddressTranslation
)(
587 IN PHYSICAL_ADDRESS BusAddress
,
588 IN OUT PULONG AddressSpace
,
589 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
590 IN OUT PULONG_PTR Context
,
595 (NTAPI
*pKdSetupPciDeviceForDebugging
)(
596 IN PVOID LoaderBlock OPTIONAL
,
597 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
601 (NTAPI
*pKdReleasePciDeviceForDebugging
)(
602 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
606 (NTAPI
*pKdGetAcpiTablePhase0
)(
607 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
612 (NTAPI
*pHalGetAcpiTable
)(
614 IN PCSTR OemId OPTIONAL
,
615 IN PCSTR OemTableId OPTIONAL
);
619 (NTAPI
*pKdCheckPowerButton
)(
622 #if (NTDDI_VERSION >= NTDDI_VISTA)
625 (NTAPI
*pKdMapPhysicalMemory64
)(
626 IN PHYSICAL_ADDRESS PhysicalAddress
,
627 IN ULONG NumberPages
,
628 IN BOOLEAN FlushCurrentTLB
);
632 (NTAPI
*pKdUnmapVirtualAddress
)(
633 IN PVOID VirtualAddress
,
634 IN ULONG NumberPages
,
635 IN BOOLEAN FlushCurrentTLB
);
639 (NTAPI
*pKdMapPhysicalMemory64
)(
640 IN PHYSICAL_ADDRESS PhysicalAddress
,
641 IN ULONG NumberPages
);
645 (NTAPI
*pKdUnmapVirtualAddress
)(
646 IN PVOID VirtualAddress
,
647 IN ULONG NumberPages
);
653 (NTAPI
*pKdGetPciDataByOffset
)(
662 (NTAPI
*pKdSetPciDataByOffset
)(
670 (NTAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
676 (NTAPI
*PCI_ERROR_HANDLER_CALLBACK
)(
681 (NTAPI
*pHalSetPciErrorHandlerCallback
)(
682 IN PCI_ERROR_HANDLER_CALLBACK Callback
);
684 #if 1 /* Not present in WDK 7600 */
686 (FASTCALL
*pHalIoAssignDriveLetters
)(
687 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
688 IN PSTRING NtDeviceName
,
689 OUT PUCHAR NtSystemPath
,
690 OUT PSTRING NtSystemPathString
);
695 pHalQuerySystemInformation HalQuerySystemInformation
;
696 pHalSetSystemInformation HalSetSystemInformation
;
697 pHalQueryBusSlots HalQueryBusSlots
;
699 pHalExamineMBR HalExamineMBR
;
700 #if 1 /* Not present in WDK 7600 */
701 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
703 pHalIoReadPartitionTable HalIoReadPartitionTable
;
704 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
705 pHalIoWritePartitionTable HalIoWritePartitionTable
;
706 pHalHandlerForBus HalReferenceHandlerForBus
;
707 pHalReferenceBusHandler HalReferenceBusHandler
;
708 pHalReferenceBusHandler HalDereferenceBusHandler
;
709 pHalInitPnpDriver HalInitPnpDriver
;
710 pHalInitPowerManagement HalInitPowerManagement
;
711 pHalGetDmaAdapter HalGetDmaAdapter
;
712 pHalGetInterruptTranslator HalGetInterruptTranslator
;
713 pHalStartMirroring HalStartMirroring
;
714 pHalEndMirroring HalEndMirroring
;
715 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
716 pHalEndOfBoot HalEndOfBoot
;
717 pHalMirrorVerify HalMirrorVerify
;
718 pHalGetAcpiTable HalGetCachedAcpiTable
;
719 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback
;
721 pHalGetErrorCapList HalGetErrorCapList
;
722 pHalInjectError HalInjectError
;
724 } HAL_DISPATCH
, *PHAL_DISPATCH
;
726 /* GCC/MSVC and WDK compatible declaration */
727 extern NTKERNELAPI HAL_DISPATCH HalDispatchTable
;
729 #if defined(_NTOSKRNL_) || defined(_BLDR_)
730 #define HALDISPATCH (&HalDispatchTable)
732 /* This is a WDK compatibility definition */
733 #define HalDispatchTable (&HalDispatchTable)
734 #define HALDISPATCH HalDispatchTable
737 #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
738 #define HalDispatchTableVersion HALDISPATCH->Version
739 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
740 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
741 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
742 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
743 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
744 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
745 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
746 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
747 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
748 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
749 #define HalStartMirroring HALDISPATCH->HalStartMirroring
750 #define HalEndMirroring HALDISPATCH->HalEndMirroring
751 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
752 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
753 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
755 typedef struct _FILE_ALIGNMENT_INFORMATION
{
756 ULONG AlignmentRequirement
;
757 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
759 typedef struct _FILE_NAME_INFORMATION
{
760 ULONG FileNameLength
;
762 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
765 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
766 ULONG FileAttributes
;
768 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
770 typedef struct _FILE_DISPOSITION_INFORMATION
{
772 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
774 typedef struct _FILE_END_OF_FILE_INFORMATION
{
775 LARGE_INTEGER EndOfFile
;
776 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
778 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
779 LARGE_INTEGER ValidDataLength
;
780 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
782 typedef union _FILE_SEGMENT_ELEMENT
{
785 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
787 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
789 #if (NTDDI_VERSION >= NTDDI_WIN2K)
794 IN ULONGLONG ConditionMask
,
799 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
800 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
801 (TypeBitMask), (ComparisonType)))
803 /* RtlVerifyVersionInfo() TypeMask */
805 #define VER_MINORVERSION 0x0000001
806 #define VER_MAJORVERSION 0x0000002
807 #define VER_BUILDNUMBER 0x0000004
808 #define VER_PLATFORMID 0x0000008
809 #define VER_SERVICEPACKMINOR 0x0000010
810 #define VER_SERVICEPACKMAJOR 0x0000020
811 #define VER_SUITENAME 0x0000040
812 #define VER_PRODUCT_TYPE 0x0000080
814 /* RtlVerifyVersionInfo() ComparisonType */
817 #define VER_GREATER 2
818 #define VER_GREATER_EQUAL 3
820 #define VER_LESS_EQUAL 5
824 #define VER_CONDITION_MASK 7
825 #define VER_NUM_BITS_PER_CONDITION_MASK 3
827 typedef struct _IMAGE_INFO
{
828 _ANONYMOUS_UNION
union {
830 _ANONYMOUS_STRUCT
struct {
831 ULONG ImageAddressingMode
:8;
832 ULONG SystemModeImage
:1;
833 ULONG ImageMappedToAllPids
:1;
834 ULONG ExtendedInfoPresent
:1;
841 ULONG ImageSectionNumber
;
842 } IMAGE_INFO
, *PIMAGE_INFO
;
844 #define IMAGE_ADDRESSING_MODE_32BIT 3
846 typedef enum _BUS_DATA_TYPE
{
847 ConfigurationSpaceUndefined
= -1,
859 SgiInternalConfiguration
,
861 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
863 typedef struct _NT_TIB
{
864 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
868 _ANONYMOUS_UNION
union {
872 PVOID ArbitraryUserPointer
;
873 struct _NT_TIB
*Self
;
876 typedef struct _NT_TIB32
{
881 __GNU_EXTENSION
union {
885 ULONG ArbitraryUserPointer
;
887 } NT_TIB32
,*PNT_TIB32
;
889 typedef struct _NT_TIB64
{
890 ULONG64 ExceptionList
;
893 ULONG64 SubSystemTib
;
894 __GNU_EXTENSION
union {
898 ULONG64 ArbitraryUserPointer
;
900 } NT_TIB64
,*PNT_TIB64
;
902 typedef enum _PROCESSINFOCLASS
{
903 ProcessBasicInformation
,
909 ProcessRaisePriority
,
911 ProcessExceptionPort
,
913 ProcessLdtInformation
,
915 ProcessDefaultHardErrorMode
,
916 ProcessIoPortHandlers
,
917 ProcessPooledUsageAndLimits
,
918 ProcessWorkingSetWatch
,
920 ProcessEnableAlignmentFaultFixup
,
921 ProcessPriorityClass
,
922 ProcessWx86Information
,
925 ProcessPriorityBoost
,
927 ProcessSessionInformation
,
928 ProcessForegroundInformation
,
929 ProcessWow64Information
,
930 ProcessImageFileName
,
931 ProcessLUIDDeviceMapsEnabled
,
932 ProcessBreakOnTermination
,
933 ProcessDebugObjectHandle
,
935 ProcessHandleTracing
,
938 ProcessTlsInformation
,
940 ProcessImageInformation
,
943 ProcessInstrumentationCallback
,
944 ProcessThreadStackAllocation
,
945 ProcessWorkingSetWatchEx
,
946 ProcessImageFileNameWin32
,
947 ProcessImageFileMapping
,
948 ProcessAffinityUpdateMode
,
949 ProcessMemoryAllocationMode
,
950 ProcessGroupInformation
,
951 ProcessTokenVirtualizationEnabled
,
952 ProcessConsoleHostProcess
,
953 ProcessWindowInformation
,
957 typedef enum _THREADINFOCLASS
{
958 ThreadBasicInformation
,
963 ThreadImpersonationToken
,
964 ThreadDescriptorTableEntry
,
965 ThreadEnableAlignmentFaultFixup
,
966 ThreadEventPair_Reusable
,
967 ThreadQuerySetWin32StartAddress
,
969 ThreadPerformanceCount
,
971 ThreadIdealProcessor
,
973 ThreadSetTlsArrayAddress
,
975 ThreadHideFromDebugger
,
976 ThreadBreakOnTermination
,
977 ThreadSwitchLegacyState
,
979 ThreadLastSystemCall
,
983 ThreadActualBasePriority
,
984 ThreadTebInformation
,
988 ThreadGroupInformation
,
989 ThreadUmsInformation
,
990 ThreadCounterProfiling
,
991 ThreadIdealProcessorEx
,
995 typedef struct _PROCESS_BASIC_INFORMATION
{
997 struct _PEB
*PebBaseAddress
;
998 ULONG_PTR AffinityMask
;
999 KPRIORITY BasePriority
;
1000 ULONG_PTR UniqueProcessId
;
1001 ULONG_PTR InheritedFromUniqueProcessId
;
1002 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
1004 typedef struct _PROCESS_WS_WATCH_INFORMATION
{
1007 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
1009 typedef struct _PROCESS_DEVICEMAP_INFORMATION
{
1010 __GNU_EXTENSION
union {
1012 HANDLE DirectoryHandle
;
1016 UCHAR DriveType
[32];
1019 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
1021 typedef struct _KERNEL_USER_TIMES
{
1022 LARGE_INTEGER CreateTime
;
1023 LARGE_INTEGER ExitTime
;
1024 LARGE_INTEGER KernelTime
;
1025 LARGE_INTEGER UserTime
;
1026 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1028 typedef struct _PROCESS_ACCESS_TOKEN
{
1031 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1033 typedef struct _PROCESS_SESSION_INFORMATION
{
1035 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1037 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
1038 IoQueryDeviceIdentifier
= 0,
1039 IoQueryDeviceConfigurationData
,
1040 IoQueryDeviceComponentInformation
,
1041 IoQueryDeviceMaxData
1042 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
1044 typedef struct _DISK_SIGNATURE
{
1045 ULONG PartitionStyle
;
1046 _ANONYMOUS_UNION
union {
1055 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
1058 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
1061 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
1062 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
1063 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
1064 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
1066 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1067 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1068 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1069 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1070 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1073 (NTAPI
*PTIMER_APC_ROUTINE
)(
1074 IN PVOID TimerContext
,
1075 IN ULONG TimerLowValue
,
1076 IN LONG TimerHighValue
);
1078 typedef struct _KUSER_SHARED_DATA
1080 ULONG TickCountLowDeprecated
;
1081 ULONG TickCountMultiplier
;
1082 volatile KSYSTEM_TIME InterruptTime
;
1083 volatile KSYSTEM_TIME SystemTime
;
1084 volatile KSYSTEM_TIME TimeZoneBias
;
1085 USHORT ImageNumberLow
;
1086 USHORT ImageNumberHigh
;
1087 WCHAR NtSystemRoot
[260];
1088 ULONG MaxStackTraceDepth
;
1089 ULONG CryptoExponent
;
1091 ULONG LargePageMinimum
;
1093 NT_PRODUCT_TYPE NtProductType
;
1094 BOOLEAN ProductTypeIsValid
;
1095 ULONG NtMajorVersion
;
1096 ULONG NtMinorVersion
;
1097 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
1100 volatile ULONG TimeSlip
;
1101 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
1102 ULONG AltArchitecturePad
[1];
1103 LARGE_INTEGER SystemExpirationDate
;
1105 BOOLEAN KdDebuggerEnabled
;
1106 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
1107 UCHAR NXSupportPolicy
;
1109 volatile ULONG ActiveConsoleId
;
1110 volatile ULONG DismountCount
;
1111 ULONG ComPlusPackage
;
1112 ULONG LastSystemRITEventTickCount
;
1113 ULONG NumberOfPhysicalPages
;
1114 BOOLEAN SafeBootMode
;
1115 #if (NTDDI_VERSION >= NTDDI_WIN7)
1119 UCHAR TscQpcEnabled
:1;
1120 UCHAR TscQpcSpareFlag
:1;
1121 UCHAR TscQpcShift
:6;
1126 #if (NTDDI_VERSION >= NTDDI_VISTA)
1128 ULONG SharedDataFlags
;
1130 ULONG DbgErrorPortPresent
:1;
1131 ULONG DbgElevationEnabled
:1;
1132 ULONG DbgVirtEnabled
:1;
1133 ULONG DbgInstallerDetectEnabled
:1;
1134 ULONG DbgSystemDllRelocated
:1;
1135 ULONG DbgDynProcessorEnabled
:1;
1136 ULONG DbgSEHValidationEnabled
:1;
1143 ULONG DataFlagsPad
[1];
1144 ULONGLONG TestRetInstruction
;
1146 ULONG SystemCallReturn
;
1147 ULONGLONG SystemCallPad
[3];
1148 _ANONYMOUS_UNION
union {
1149 volatile KSYSTEM_TIME TickCount
;
1150 volatile ULONG64 TickCountQuad
;
1151 _ANONYMOUS_STRUCT
struct {
1152 ULONG ReservedTickCountOverlay
[3];
1153 ULONG TickCountPad
[1];
1158 #if (NTDDI_VERSION >= NTDDI_WS03)
1159 LONGLONG ConsoleSessionForegroundProcessId
;
1160 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
1162 #if (NTDDI_VERSION >= NTDDI_VISTA)
1163 #if (NTDDI_VERSION >= NTDDI_WIN7)
1164 USHORT UserModeGlobalLogger
[16];
1166 USHORT UserModeGlobalLogger
[8];
1167 ULONG HeapTracingPid
[2];
1168 ULONG CritSecTracingPid
[2];
1170 ULONG ImageFileExecutionOptions
;
1171 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
1172 ULONG LangGenerationCount
;
1174 /* 4 bytes padding */
1176 ULONGLONG Reserved5
;
1177 volatile ULONG64 InterruptTimeBias
;
1179 #if (NTDDI_VERSION >= NTDDI_WIN7)
1180 volatile ULONG64 TscQpcBias
;
1181 volatile ULONG ActiveProcessorCount
;
1182 volatile USHORT ActiveGroupCount
;
1184 volatile ULONG AitSamplingValue
;
1185 volatile ULONG AppCompatFlag
;
1186 ULONGLONG SystemDllNativeRelocation
;
1187 ULONG SystemDllWowRelocation
;
1189 XSTATE_CONFIGURATION XState
;
1191 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
1193 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1194 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1195 extern NTKERNELAPI ULONG MmUserProbeAddress
;
1200 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1201 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1202 #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
1203 #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
1204 extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_
;
1206 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1208 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1209 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
1210 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
1211 #if !defined (_X86PAE_)
1212 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
1214 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
1217 #define KeGetPcr() PCR
1219 #define KERNEL_STACK_SIZE 12288
1220 #define KERNEL_LARGE_STACK_SIZE 61440
1221 #define KERNEL_LARGE_STACK_COMMIT 12288
1223 #define SIZE_OF_80387_REGISTERS 80
1225 #define PCR_MINOR_VERSION 1
1226 #define PCR_MAJOR_VERSION 1
1228 #if !defined(RC_INVOKED)
1230 #define CONTEXT_i386 0x10000
1231 #define CONTEXT_i486 0x10000
1232 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
1233 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
1234 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
1235 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
1236 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
1237 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
1239 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
1241 #endif /* !defined(RC_INVOKED) */
1243 typedef struct _KPCR
{
1247 struct _EXCEPTION_REGISTRATION_RECORD
*Used_ExceptionList
;
1248 PVOID Used_StackBase
;
1251 ULONG ContextSwitches
;
1252 KAFFINITY SetMemberCopy
;
1256 struct _KPCR
*SelfPcr
;
1257 struct _KPRCB
*Prcb
;
1262 PVOID KdVersionBlock
;
1263 struct _KIDTENTRY
*IDT
;
1264 struct _KGDTENTRY
*GDT
;
1266 USHORT MajorVersion
;
1267 USHORT MinorVersion
;
1268 KAFFINITY SetMember
;
1269 ULONG StallScaleFactor
;
1273 UCHAR SecondLevelCacheAssociativity
;
1275 ULONG KernelReserved
[14];
1276 ULONG SecondLevelCacheSize
;
1277 ULONG HalReserved
[16];
1282 KeGetCurrentProcessorNumber(VOID
)
1284 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
1287 typedef struct _FLOATING_SAVE_AREA
{
1292 ULONG ErrorSelector
;
1295 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
1297 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
1299 #include "pshpack4.h"
1300 typedef struct _CONTEXT
{
1308 FLOATING_SAVE_AREA FloatSave
;
1325 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
1327 #include "poppack.h"
1333 #define PTI_SHIFT 12L
1334 #define PDI_SHIFT 21L
1335 #define PPI_SHIFT 30L
1336 #define PXI_SHIFT 39L
1337 #define PTE_PER_PAGE 512
1338 #define PDE_PER_PAGE 512
1339 #define PPE_PER_PAGE 512
1340 #define PXE_PER_PAGE 512
1341 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
1342 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
1343 #define PPI_MASK (PPE_PER_PAGE - 1)
1344 #define PXI_MASK (PXE_PER_PAGE - 1)
1346 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
1347 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
1348 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
1349 #define PDE_BASE 0xFFFFF6FB40000000ULL
1350 #define PTE_BASE 0xFFFFF68000000000ULL
1351 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
1352 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
1353 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
1354 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
1356 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1357 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1358 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1359 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1360 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
1361 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
1363 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
1413 /* Floating point */
1415 XMM_SAVE_AREA32 FltSave
;
1439 M128A VectorRegister
[26];
1440 ULONG64 VectorControl
;
1443 ULONG64 DebugControl
;
1444 ULONG64 LastBranchToRip
;
1445 ULONG64 LastBranchFromRip
;
1446 ULONG64 LastExceptionToRip
;
1447 ULONG64 LastExceptionFromRip
;
1450 typedef struct _KPCR
1452 _ANONYMOUS_UNION
union
1455 _ANONYMOUS_STRUCT
struct
1457 union _KGDTENTRY64
*GdtBase
;
1458 struct _KTSS64
*TssBase
;
1461 struct _KPRCB
*CurrentPrcb
;
1462 PKSPIN_LOCK_QUEUE LockArray
;
1466 union _KIDTENTRY64
*IdtBase
;
1469 UCHAR SecondLevelCacheAssociativity
;
1470 UCHAR ObsoleteNumber
;
1473 USHORT MajorVersion
;
1474 USHORT MinorVersion
;
1475 ULONG StallScaleFactor
;
1477 ULONG KernelReserved
[15];
1478 ULONG SecondLevelCacheSize
;
1479 ULONG HalReserved
[16];
1481 PVOID KdVersionBlock
;
1483 ULONG PcrAlign1
[24];
1490 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
1495 KeGetCurrentProcessorNumber(VOID
)
1497 return (ULONG
)__readgsword(0x184);
1500 #if !defined(RC_INVOKED)
1502 #define CONTEXT_AMD64 0x100000
1504 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
1505 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
1506 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
1507 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
1508 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
1510 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1511 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1513 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
1515 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1516 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1517 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1518 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1520 #endif /* RC_INVOKED */
1522 #endif /* _AMD64_ */
1524 typedef enum _INTERLOCKED_RESULT
{
1525 ResultNegative
= RESULT_NEGATIVE
,
1526 ResultZero
= RESULT_ZERO
,
1527 ResultPositive
= RESULT_POSITIVE
1528 } INTERLOCKED_RESULT
;
1530 typedef struct _OSVERSIONINFOA
{
1531 ULONG dwOSVersionInfoSize
;
1532 ULONG dwMajorVersion
;
1533 ULONG dwMinorVersion
;
1534 ULONG dwBuildNumber
;
1536 CHAR szCSDVersion
[128];
1537 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
1539 typedef struct _OSVERSIONINFOW
{
1540 ULONG dwOSVersionInfoSize
;
1541 ULONG dwMajorVersion
;
1542 ULONG dwMinorVersion
;
1543 ULONG dwBuildNumber
;
1545 WCHAR szCSDVersion
[128];
1546 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
1548 typedef struct _OSVERSIONINFOEXA
{
1549 ULONG dwOSVersionInfoSize
;
1550 ULONG dwMajorVersion
;
1551 ULONG dwMinorVersion
;
1552 ULONG dwBuildNumber
;
1554 CHAR szCSDVersion
[128];
1555 USHORT wServicePackMajor
;
1556 USHORT wServicePackMinor
;
1560 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
1562 typedef struct _OSVERSIONINFOEXW
{
1563 ULONG dwOSVersionInfoSize
;
1564 ULONG dwMajorVersion
;
1565 ULONG dwMinorVersion
;
1566 ULONG dwBuildNumber
;
1568 WCHAR szCSDVersion
[128];
1569 USHORT wServicePackMajor
;
1570 USHORT wServicePackMinor
;
1574 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
1577 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
1578 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
1579 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
1580 typedef OSVERSIONINFOW OSVERSIONINFO
;
1581 typedef POSVERSIONINFOW POSVERSIONINFO
;
1582 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
1584 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
1585 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
1586 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
1587 typedef OSVERSIONINFOA OSVERSIONINFO
;
1588 typedef POSVERSIONINFOA POSVERSIONINFO
;
1589 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
1590 #endif /* UNICODE */
1592 /* Executive Types */
1594 #define PROTECTED_POOL 0x80000000
1596 typedef struct _ZONE_SEGMENT_HEADER
{
1597 SINGLE_LIST_ENTRY SegmentList
;
1599 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
1601 typedef struct _ZONE_HEADER
{
1602 SINGLE_LIST_ENTRY FreeList
;
1603 SINGLE_LIST_ENTRY SegmentList
;
1605 ULONG TotalSegmentSize
;
1606 } ZONE_HEADER
, *PZONE_HEADER
;
1608 /* Executive Functions */
1610 static __inline PVOID
1612 IN PZONE_HEADER Zone
)
1614 if (Zone
->FreeList
.Next
)
1615 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
1616 return (PVOID
) Zone
->FreeList
.Next
;
1619 static __inline PVOID
1621 IN PZONE_HEADER Zone
,
1624 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
1625 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
1626 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
1631 * ExInterlockedAllocateFromZone(
1632 * IN PZONE_HEADER Zone,
1633 * IN PKSPIN_LOCK Lock)
1635 #define ExInterlockedAllocateFromZone(Zone, Lock) \
1636 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
1639 * ExInterlockedFreeToZone(
1640 * IN PZONE_HEADER Zone,
1642 * IN PKSPIN_LOCK Lock);
1644 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
1645 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
1650 * IN PZONE_HEADER Zone)
1652 #define ExIsFullZone(Zone) \
1653 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
1656 * ExIsObjectInFirstZoneSegment(
1657 * IN PZONE_HEADER Zone,
1660 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
1661 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
1662 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
1663 (Zone)->TotalSegmentSize)) )
1665 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
1666 #define ExAcquireResourceShared ExAcquireResourceSharedLite
1667 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
1668 #define ExDeleteResource ExDeleteResourceLite
1669 #define ExInitializeResource ExInitializeResourceLite
1670 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
1671 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
1672 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
1673 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
1675 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1681 IN OUT PZONE_HEADER Zone
,
1682 IN OUT PVOID Segment
,
1683 IN ULONG SegmentSize
);
1689 OUT PZONE_HEADER Zone
,
1691 IN OUT PVOID InitialSegment
,
1692 IN ULONG InitialSegmentSize
);
1697 ExInterlockedExtendZone(
1698 IN OUT PZONE_HEADER Zone
,
1699 IN OUT PVOID Segment
,
1700 IN ULONG SegmentSize
,
1701 IN OUT PKSPIN_LOCK Lock
);
1713 ExRaiseAccessViolation(
1720 ExRaiseDatatypeMisalignment(
1730 Exfi386InterlockedIncrementLong(
1731 IN OUT LONG
volatile *Addend
);
1736 Exfi386InterlockedDecrementLong(
1742 Exfi386InterlockedExchangeUlong(
1750 typedef enum _CONFIGURATION_TYPE
{
1753 FloatingPointProcessor
,
1763 MultiFunctionAdapter
,
1777 FloppyDiskPeripheral
,
1790 RealModeIrqRoutingTable
,
1791 RealModePCIEnumeration
,
1793 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
1794 #endif /* !_ARC_DDK_ */
1796 typedef struct _CONTROLLER_OBJECT
{
1799 PVOID ControllerExtension
;
1800 KDEVICE_QUEUE DeviceWaitQueue
;
1802 LARGE_INTEGER Spare2
;
1803 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
1805 typedef struct _CONFIGURATION_INFORMATION
{
1810 ULONG ScsiPortCount
;
1812 ULONG ParallelCount
;
1813 BOOLEAN AtDiskPrimaryAddressClaimed
;
1814 BOOLEAN AtDiskSecondaryAddressClaimed
;
1816 ULONG MediumChangerCount
;
1817 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
1821 (NTAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
1823 IN PUNICODE_STRING PathName
,
1824 IN INTERFACE_TYPE BusType
,
1826 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
1827 IN CONFIGURATION_TYPE ControllerType
,
1828 IN ULONG ControllerNumber
,
1829 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
1830 IN CONFIGURATION_TYPE PeripheralType
,
1831 IN ULONG PeripheralNumber
,
1832 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
1836 (NTAPI DRIVER_REINITIALIZE
)(
1837 IN
struct _DRIVER_OBJECT
*DriverObject
,
1841 typedef DRIVER_REINITIALIZE
*PDRIVER_REINITIALIZE
;
1843 /** Filesystem runtime library routines **/
1845 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1849 FsRtlIsTotalDeviceFailure(
1850 IN NTSTATUS Status
);
1853 /* Hardware Abstraction Layer Types */
1856 (NTAPI
*PciPin2Line
)(
1857 IN
struct _BUS_HANDLER
*BusHandler
,
1858 IN
struct _BUS_HANDLER
*RootHandler
,
1859 IN PCI_SLOT_NUMBER SlotNumber
,
1860 IN PPCI_COMMON_CONFIG PciData
);
1863 (NTAPI
*PciLine2Pin
)(
1864 IN
struct _BUS_HANDLER
*BusHandler
,
1865 IN
struct _BUS_HANDLER
*RootHandler
,
1866 IN PCI_SLOT_NUMBER SlotNumber
,
1867 IN PPCI_COMMON_CONFIG PciNewData
,
1868 IN PPCI_COMMON_CONFIG PciOldData
);
1871 (NTAPI
*PciReadWriteConfig
)(
1872 IN
struct _BUS_HANDLER
*BusHandler
,
1873 IN PCI_SLOT_NUMBER Slot
,
1878 #define PCI_DATA_TAG ' ICP'
1879 #define PCI_DATA_VERSION 1
1881 typedef struct _PCIBUSDATA
{
1884 PciReadWriteConfig ReadConfig
;
1885 PciReadWriteConfig WriteConfig
;
1886 PciPin2Line Pin2Line
;
1887 PciLine2Pin Line2Pin
;
1888 PCI_SLOT_NUMBER ParentSlot
;
1890 } PCIBUSDATA
, *PPCIBUSDATA
;
1892 /* Hardware Abstraction Layer Functions */
1894 #if !defined(NO_LEGACY_DRIVERS)
1896 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1901 HalAssignSlotResources(
1902 IN PUNICODE_STRING RegistryPath
,
1903 IN PUNICODE_STRING DriverClassName
,
1904 IN PDRIVER_OBJECT DriverObject
,
1905 IN PDEVICE_OBJECT DeviceObject
,
1906 IN INTERFACE_TYPE BusType
,
1908 IN ULONG SlotNumber
,
1909 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
1914 HalGetInterruptVector(
1915 IN INTERFACE_TYPE InterfaceType
,
1917 IN ULONG BusInterruptLevel
,
1918 IN ULONG BusInterruptVector
,
1920 OUT PKAFFINITY Affinity
);
1926 IN BUS_DATA_TYPE BusDataType
,
1928 IN ULONG SlotNumber
,
1934 #endif /* !defined(NO_LEGACY_DRIVERS) */
1936 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1942 IN PDEVICE_DESCRIPTION DeviceDescription
,
1943 IN OUT PULONG NumberOfMapRegisters
);
1949 IN ULONG Frequency
);
1954 IN PADAPTER_OBJECT DmaAdapter
);
1959 HalAcquireDisplayOwnership(
1960 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
1966 IN BUS_DATA_TYPE BusDataType
,
1968 IN ULONG SlotNumber
,
1975 HalGetBusDataByOffset(
1976 IN BUS_DATA_TYPE BusDataType
,
1978 IN ULONG SlotNumber
,
1986 HalSetBusDataByOffset(
1987 IN BUS_DATA_TYPE BusDataType
,
1989 IN ULONG SlotNumber
,
1997 HalTranslateBusAddress(
1998 IN INTERFACE_TYPE InterfaceType
,
2000 IN PHYSICAL_ADDRESS BusAddress
,
2001 IN OUT PULONG AddressSpace
,
2002 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
2006 #if (NTDDI_VERSION >= NTDDI_WINXP)
2011 IN PDEVICE_OBJECT DeviceObject
,
2012 IN ULONG SectorSize
,
2013 IN ULONG MBRTypeIdentifier
,
2017 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
2021 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2022 //DECLSPEC_DEPRECATED_DDK
2026 IoFreeAdapterChannel(
2027 IN PADAPTER_OBJECT AdapterObject
);
2029 //DECLSPEC_DEPRECATED_DDK
2033 IoFlushAdapterBuffers(
2034 IN PADAPTER_OBJECT AdapterObject
,
2036 IN PVOID MapRegisterBase
,
2039 IN BOOLEAN WriteToDevice
);
2041 //DECLSPEC_DEPRECATED_DDK
2046 IN PADAPTER_OBJECT AdapterObject
,
2047 IN PVOID MapRegisterBase
,
2048 IN ULONG NumberOfMapRegisters
);
2050 //DECLSPEC_DEPRECATED_DDK
2054 HalAllocateCommonBuffer(
2055 IN PADAPTER_OBJECT AdapterObject
,
2057 OUT PPHYSICAL_ADDRESS LogicalAddress
,
2058 IN BOOLEAN CacheEnabled
);
2060 //DECLSPEC_DEPRECATED_DDK
2064 HalFreeCommonBuffer(
2065 IN PADAPTER_OBJECT AdapterObject
,
2067 IN PHYSICAL_ADDRESS LogicalAddress
,
2068 IN PVOID VirtualAddress
,
2069 IN BOOLEAN CacheEnabled
);
2071 //DECLSPEC_DEPRECATED_DDK
2076 IN PADAPTER_OBJECT AdapterObject
);
2081 HalAllocateAdapterChannel(
2082 IN PADAPTER_OBJECT AdapterObject
,
2083 IN PWAIT_CONTEXT_BLOCK Wcb
,
2084 IN ULONG NumberOfMapRegisters
,
2085 IN PDRIVER_CONTROL ExecutionRoutine
);
2087 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2089 #endif /* defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) */
2091 /* I/O Manager Functions */
2094 * VOID IoAssignArcName(
2095 * IN PUNICODE_STRING ArcName,
2096 * IN PUNICODE_STRING DeviceName);
2098 #define IoAssignArcName(_ArcName, _DeviceName) ( \
2099 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
2103 * IoDeassignArcName(
2104 * IN PUNICODE_STRING ArcName)
2106 #define IoDeassignArcName IoDeleteSymbolicLink
2108 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2110 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
2114 IoAllocateAdapterChannel(
2115 IN PADAPTER_OBJECT AdapterObject
,
2116 IN PDEVICE_OBJECT DeviceObject
,
2117 IN ULONG NumberOfMapRegisters
,
2118 IN PDRIVER_CONTROL ExecutionRoutine
,
2122 //DECLSPEC_DEPRECATED_DDK
2127 IN PADAPTER_OBJECT AdapterObject
,
2129 IN PVOID MapRegisterBase
,
2131 IN OUT PULONG Length
,
2132 IN BOOLEAN WriteToDevice
);
2137 IoAllocateController(
2138 IN PCONTROLLER_OBJECT ControllerObject
,
2139 IN PDEVICE_OBJECT DeviceObject
,
2140 IN PDRIVER_CONTROL ExecutionRoutine
,
2141 IN PVOID Context OPTIONAL
);
2153 IN PCONTROLLER_OBJECT ControllerObject
);
2159 IN PCONTROLLER_OBJECT ControllerObject
);
2162 PCONFIGURATION_INFORMATION
2164 IoGetConfigurationInformation(
2170 IoGetDeviceToVerify(
2171 IN PETHREAD Thread
);
2177 IN PDEVICE_OBJECT DeviceObject
,
2178 IN PFILE_OBJECT FileObject
);
2183 IoGetFileObjectGenericMapping(
2189 IoMakeAssociatedIrp(
2191 IN CCHAR StackSize
);
2196 IoQueryDeviceDescription(
2197 IN PINTERFACE_TYPE BusType OPTIONAL
,
2198 IN PULONG BusNumber OPTIONAL
,
2199 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
2200 IN PULONG ControllerNumber OPTIONAL
,
2201 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
2202 IN PULONG PeripheralNumber OPTIONAL
,
2203 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
2204 IN OUT PVOID Context OPTIONAL
);
2211 IN PVPB Vpb OPTIONAL
,
2212 IN PDEVICE_OBJECT RealDeviceObject
);
2217 IoRaiseInformationalHardError(
2218 IN NTSTATUS ErrorStatus
,
2219 IN PUNICODE_STRING String OPTIONAL
,
2220 IN PKTHREAD Thread OPTIONAL
);
2225 IoRegisterBootDriverReinitialization(
2226 IN PDRIVER_OBJECT DriverObject
,
2227 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2228 IN PVOID Context OPTIONAL
);
2233 IoRegisterDriverReinitialization(
2234 IN PDRIVER_OBJECT DriverObject
,
2235 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2236 IN PVOID Context OPTIONAL
);
2241 IoAttachDeviceByPointer(
2242 IN PDEVICE_OBJECT SourceDevice
,
2243 IN PDEVICE_OBJECT TargetDevice
);
2248 IoReportDetectedDevice(
2249 IN PDRIVER_OBJECT DriverObject
,
2250 IN INTERFACE_TYPE LegacyBusType
,
2252 IN ULONG SlotNumber
,
2253 IN PCM_RESOURCE_LIST ResourceList OPTIONAL
,
2254 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
2255 IN BOOLEAN ResourceAssigned
,
2256 IN OUT PDEVICE_OBJECT
*DeviceObject
);
2261 IoReportResourceForDetection(
2262 IN PDRIVER_OBJECT DriverObject
,
2263 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2264 IN ULONG DriverListSize OPTIONAL
,
2265 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2266 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2267 IN ULONG DeviceListSize OPTIONAL
,
2268 OUT PBOOLEAN ConflictDetected
);
2273 IoReportResourceUsage(
2274 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2275 IN PDRIVER_OBJECT DriverObject
,
2276 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2277 IN ULONG DriverListSize OPTIONAL
,
2278 IN PDEVICE_OBJECT DeviceObject
,
2279 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2280 IN ULONG DeviceListSize OPTIONAL
,
2281 IN BOOLEAN OverrideConflict
,
2282 OUT PBOOLEAN ConflictDetected
);
2287 IoSetHardErrorOrVerifyDevice(
2289 IN PDEVICE_OBJECT DeviceObject
);
2295 IN PUNICODE_STRING RegistryPath
,
2296 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2297 IN PDRIVER_OBJECT DriverObject
,
2298 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2299 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL
,
2300 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
2302 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2304 #if (NTDDI_VERSION >= NTDDI_WINXP)
2310 IN PDEVICE_OBJECT DeviceObject
,
2311 IN
struct _CREATE_DISK
* Disk OPTIONAL
);
2316 IoReadDiskSignature(
2317 IN PDEVICE_OBJECT DeviceObject
,
2318 IN ULONG BytesPerSector
,
2319 OUT PDISK_SIGNATURE Signature
);
2324 IoReadPartitionTable(
2325 IN PDEVICE_OBJECT DeviceObject
,
2326 IN ULONG SectorSize
,
2327 IN BOOLEAN ReturnRecognizedPartitions
,
2328 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2333 IoReadPartitionTableEx(
2334 IN PDEVICE_OBJECT DeviceObject
,
2335 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
2340 IoSetPartitionInformation(
2341 IN PDEVICE_OBJECT DeviceObject
,
2342 IN ULONG SectorSize
,
2343 IN ULONG PartitionNumber
,
2344 IN ULONG PartitionType
);
2349 IoSetPartitionInformationEx(
2350 IN PDEVICE_OBJECT DeviceObject
,
2351 IN ULONG PartitionNumber
,
2352 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
2357 IoSetSystemPartition(
2358 IN PUNICODE_STRING VolumeNameString
);
2363 IoSetThreadHardErrorMode(
2364 IN BOOLEAN EnableHardErrors
);
2369 IoVerifyPartitionTable(
2370 IN PDEVICE_OBJECT DeviceObject
,
2371 IN BOOLEAN FixErrors
);
2376 IoVolumeDeviceToDosName(
2377 IN PVOID VolumeDeviceObject
,
2378 OUT PUNICODE_STRING DosName
);
2383 IoWritePartitionTable(
2384 IN PDEVICE_OBJECT DeviceObject
,
2385 IN ULONG SectorSize
,
2386 IN ULONG SectorsPerTrack
,
2387 IN ULONG NumberOfHeads
,
2388 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2393 IoWritePartitionTableEx(
2394 IN PDEVICE_OBJECT DeviceObject
,
2395 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*DriveLayout
);
2397 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2399 /** Kernel debugger routines **/
2407 IN ULONG MaximumResponseLength
);
2409 /* Kernel Functions */
2411 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2418 IN ULONG BugCheckCode
);
2424 IN OUT PRKEVENT Event
,
2425 IN KPRIORITY Increment
,
2431 KeSetBasePriorityThread(
2432 IN OUT PRKTHREAD Thread
,
2437 /* Memory Manager Types */
2439 typedef struct _PHYSICAL_MEMORY_RANGE
{
2440 PHYSICAL_ADDRESS BaseAddress
;
2441 LARGE_INTEGER NumberOfBytes
;
2442 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
2444 /* Memory Manager Functions */
2446 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2449 PPHYSICAL_MEMORY_RANGE
2451 MmGetPhysicalMemoryRanges(
2457 MmGetPhysicalAddress(
2458 IN PVOID BaseAddress
);
2463 MmIsNonPagedSystemAddressValid(
2464 IN PVOID VirtualAddress
);
2469 MmAllocateNonCachedMemory(
2470 IN SIZE_T NumberOfBytes
);
2475 MmFreeNonCachedMemory(
2476 IN PVOID BaseAddress
,
2477 IN SIZE_T NumberOfBytes
);
2482 MmGetVirtualForPhysical(
2483 IN PHYSICAL_ADDRESS PhysicalAddress
);
2488 MmMapUserAddressesToPage(
2489 IN PVOID BaseAddress
,
2490 IN SIZE_T NumberOfBytes
,
2491 IN PVOID PageAddress
);
2497 IN PHYSICAL_ADDRESS PhysicalAddress
,
2498 IN SIZE_T NumberOfBytes
,
2499 IN MEMORY_CACHING_TYPE CacheType
);
2504 MmMapViewInSessionSpace(
2506 OUT PVOID
*MappedBase
,
2507 IN OUT PSIZE_T ViewSize
);
2512 MmMapViewInSystemSpace(
2514 OUT PVOID
*MappedBase
,
2515 IN OUT PSIZE_T ViewSize
);
2521 IN PVOID VirtualAddress
);
2526 MmIsThisAnNtAsSystem(
2532 MmLockPagableSectionByHandle(
2533 IN PVOID ImageSectionHandle
);
2538 MmUnmapViewInSessionSpace(
2539 IN PVOID MappedBase
);
2544 MmUnmapViewInSystemSpace(
2545 IN PVOID MappedBase
);
2550 MmUnsecureVirtualMemory(
2551 IN HANDLE SecureHandle
);
2556 MmRemovePhysicalMemory(
2557 IN PPHYSICAL_ADDRESS StartAddress
,
2558 IN OUT PLARGE_INTEGER NumberOfBytes
);
2563 MmSecureVirtualMemory(
2566 IN ULONG ProbeMode
);
2571 MmUnmapVideoDisplay(
2572 IN PVOID BaseAddress
,
2573 IN SIZE_T NumberOfBytes
);
2575 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2577 /* NtXxx Functions */
2583 OUT PHANDLE ProcessHandle
,
2584 IN ACCESS_MASK DesiredAccess
,
2585 IN POBJECT_ATTRIBUTES ObjectAttributes
,
2586 IN PCLIENT_ID ClientId OPTIONAL
);
2591 NtQueryInformationProcess(
2592 IN HANDLE ProcessHandle
,
2593 IN PROCESSINFOCLASS ProcessInformationClass
,
2594 OUT PVOID ProcessInformation OPTIONAL
,
2595 IN ULONG ProcessInformationLength
,
2596 OUT PULONG ReturnLength OPTIONAL
);
2598 /** Process manager types **/
2601 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
2603 IN HANDLE ProcessId
,
2607 (NTAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
2608 IN HANDLE ProcessId
,
2613 (NTAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
2614 IN PUNICODE_STRING FullImageName
,
2615 IN HANDLE ProcessId
,
2616 IN PIMAGE_INFO ImageInfo
);
2618 /** Process manager routines **/
2620 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2625 PsSetLoadImageNotifyRoutine(
2626 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
2631 PsSetCreateThreadNotifyRoutine(
2632 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
2637 PsSetCreateProcessNotifyRoutine(
2638 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
2644 PsGetCurrentProcessId(
2650 PsGetCurrentThreadId(
2657 OUT PULONG MajorVersion OPTIONAL
,
2658 OUT PULONG MinorVersion OPTIONAL
,
2659 OUT PULONG BuildNumber OPTIONAL
,
2660 OUT PUNICODE_STRING CSDVersion OPTIONAL
);
2662 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2664 #if (NTDDI_VERSION >= NTDDI_WINXP)
2670 IN PEPROCESS Process
);
2675 PsRemoveCreateThreadNotifyRoutine(
2676 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
2681 PsRemoveLoadImageNotifyRoutine(
2682 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
2684 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2686 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess
;
2690 typedef struct _RTL_SPLAY_LINKS
{
2691 struct _RTL_SPLAY_LINKS
*Parent
;
2692 struct _RTL_SPLAY_LINKS
*LeftChild
;
2693 struct _RTL_SPLAY_LINKS
*RightChild
;
2694 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
2698 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
2700 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
2701 *CallersAddress = (PVOID)_ReturnAddress(); \
2702 *CallersCaller = NULL;
2705 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2709 RtlGetCallersAddress(
2710 OUT PVOID
*CallersAddress
,
2711 OUT PVOID
*CallersCaller
);
2716 #if !defined(MIDL_PASS)
2721 RtlConvertLongToLuid(
2727 Temp
.QuadPart
= Val
;
2728 Luid
.LowPart
= Temp
.u
.LowPart
;
2729 Luid
.HighPart
= Temp
.u
.HighPart
;
2736 RtlConvertUlongToLuid(
2748 #if defined(_AMD64_) || defined(_IA64_)
2749 //DECLSPEC_DEPRECATED_DDK_WINXP
2753 RtlLargeIntegerDivide(
2754 IN LARGE_INTEGER Dividend
,
2755 IN LARGE_INTEGER Divisor
,
2756 OUT PLARGE_INTEGER Remainder OPTIONAL
)
2759 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
2761 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
2767 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2771 RtlLargeIntegerDivide(
2772 IN LARGE_INTEGER Dividend
,
2773 IN LARGE_INTEGER Divisor
,
2774 OUT PLARGE_INTEGER Remainder OPTIONAL
);
2777 #endif /* defined(_AMD64_) || defined(_IA64_) */
2779 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2784 RtlPrefixUnicodeString(
2785 IN PCUNICODE_STRING String1
,
2786 IN PCUNICODE_STRING String2
,
2787 IN BOOLEAN CaseInSensitive
);
2793 IN OUT PSTRING DestinationString
,
2794 IN
const PSTRING SourceString
);
2799 RtlUpcaseUnicodeString(
2800 IN OUT PUNICODE_STRING DestinationString
,
2801 IN PCUNICODE_STRING SourceString
,
2802 IN BOOLEAN AllocateDestinationString
);
2808 IN OUT PACCESS_MASK AccessMask
,
2809 IN PGENERIC_MAPPING GenericMapping
);
2814 RtlVolumeDeviceToDosName(
2815 IN PVOID VolumeDeviceObject
,
2816 OUT PUNICODE_STRING DosName
);
2822 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
2827 RtlVerifyVersionInfo(
2828 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
2830 IN ULONGLONG ConditionMask
);
2836 IN
const PSTRING String1
,
2837 IN
const PSTRING String2
,
2838 BOOLEAN CaseInSensitive
);
2844 OUT PSTRING DestinationString
,
2845 IN
const PSTRING SourceString OPTIONAL
);
2851 IN
const PSTRING String1
,
2852 IN
const PSTRING String2
,
2853 IN BOOLEAN CaseInSensitive
);
2860 IN ULONG Base OPTIONAL
,
2877 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2879 /* Security reference monitor routines */
2881 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2885 SeSinglePrivilegeCheck(
2886 IN LUID PrivilegeValue
,
2887 IN KPROCESSOR_MODE PreviousMode
);
2890 /* ZwXxx Functions */
2892 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2897 IN HANDLE TimerHandle
,
2898 OUT PBOOLEAN CurrentState OPTIONAL
);
2903 OUT PHANDLE TimerHandle
,
2904 IN ACCESS_MASK DesiredAccess
,
2905 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
2906 IN TIMER_TYPE TimerType
);
2911 OUT PHANDLE TimerHandle
,
2912 IN ACCESS_MASK DesiredAccess
,
2913 IN POBJECT_ATTRIBUTES ObjectAttributes
);
2918 ZwSetInformationThread(
2919 IN HANDLE ThreadHandle
,
2920 IN THREADINFOCLASS ThreadInformationClass
,
2921 IN PVOID ThreadInformation
,
2922 IN ULONG ThreadInformationLength
);
2927 IN HANDLE TimerHandle
,
2928 IN PLARGE_INTEGER DueTime
,
2929 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
2930 IN PVOID TimerContext OPTIONAL
,
2931 IN BOOLEAN ResumeTimer
,
2932 IN LONG Period OPTIONAL
,
2933 OUT PBOOLEAN PreviousState OPTIONAL
);
2943 #endif /* _NTDDK_ */