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
;
75 #define EXCEPTION_READ_FAULT 0
76 #define EXCEPTION_WRITE_FAULT 1
77 #define EXCEPTION_EXECUTE_FAULT 8
79 #if (NTDDI_VERSION >= NTDDI_VISTA)
80 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
81 #elif (NTDDI_VERSION >= NTDDI_WINXP)
82 extern NTSYSAPI CCHAR KeNumberProcessors
;
84 extern PCCHAR KeNumberProcessors
;
87 #define MAX_WOW64_SHARED_ENTRIES 16
89 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
90 #define NX_SUPPORT_POLICY_ALWAYSON 1
91 #define NX_SUPPORT_POLICY_OPTIN 2
92 #define NX_SUPPORT_POLICY_OPTOUT 3
98 #define IRP_MN_QUERY_DIRECTORY 0x01
99 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
101 #define IRP_MN_USER_FS_REQUEST 0x00
102 #define IRP_MN_MOUNT_VOLUME 0x01
103 #define IRP_MN_VERIFY_VOLUME 0x02
104 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
105 #define IRP_MN_TRACK_LINK 0x04
106 #define IRP_MN_KERNEL_CALL 0x04
108 #define IRP_MN_LOCK 0x01
109 #define IRP_MN_UNLOCK_SINGLE 0x02
110 #define IRP_MN_UNLOCK_ALL 0x03
111 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
113 #define IRP_MN_FLUSH_AND_PURGE 0x01
115 #define IRP_MN_NORMAL 0x00
116 #define IRP_MN_DPC 0x01
117 #define IRP_MN_MDL 0x02
118 #define IRP_MN_COMPLETE 0x04
119 #define IRP_MN_COMPRESSED 0x08
121 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
122 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
123 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
125 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
127 typedef struct _IO_COUNTERS
{
128 ULONGLONG ReadOperationCount
;
129 ULONGLONG WriteOperationCount
;
130 ULONGLONG OtherOperationCount
;
131 ULONGLONG ReadTransferCount
;
132 ULONGLONG WriteTransferCount
;
133 ULONGLONG OtherTransferCount
;
134 } IO_COUNTERS
, *PIO_COUNTERS
;
136 typedef struct _VM_COUNTERS
{
137 SIZE_T PeakVirtualSize
;
139 ULONG PageFaultCount
;
140 SIZE_T PeakWorkingSetSize
;
141 SIZE_T WorkingSetSize
;
142 SIZE_T QuotaPeakPagedPoolUsage
;
143 SIZE_T QuotaPagedPoolUsage
;
144 SIZE_T QuotaPeakNonPagedPoolUsage
;
145 SIZE_T QuotaNonPagedPoolUsage
;
146 SIZE_T PagefileUsage
;
147 SIZE_T PeakPagefileUsage
;
148 } VM_COUNTERS
, *PVM_COUNTERS
;
150 typedef struct _VM_COUNTERS_EX
152 SIZE_T PeakVirtualSize
;
154 ULONG PageFaultCount
;
155 SIZE_T PeakWorkingSetSize
;
156 SIZE_T WorkingSetSize
;
157 SIZE_T QuotaPeakPagedPoolUsage
;
158 SIZE_T QuotaPagedPoolUsage
;
159 SIZE_T QuotaPeakNonPagedPoolUsage
;
160 SIZE_T QuotaNonPagedPoolUsage
;
161 SIZE_T PagefileUsage
;
162 SIZE_T PeakPagefileUsage
;
164 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
166 typedef struct _POOLED_USAGE_AND_LIMITS
168 SIZE_T PeakPagedPoolUsage
;
169 SIZE_T PagedPoolUsage
;
170 SIZE_T PagedPoolLimit
;
171 SIZE_T PeakNonPagedPoolUsage
;
172 SIZE_T NonPagedPoolUsage
;
173 SIZE_T NonPagedPoolLimit
;
174 SIZE_T PeakPagefileUsage
;
175 SIZE_T PagefileUsage
;
176 SIZE_T PagefileLimit
;
177 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
179 /* DEVICE_OBJECT.Flags */
181 #define DO_VERIFY_VOLUME 0x00000002
182 #define DO_BUFFERED_IO 0x00000004
183 #define DO_EXCLUSIVE 0x00000008
184 #define DO_DIRECT_IO 0x00000010
185 #define DO_MAP_IO_BUFFER 0x00000020
186 #define DO_DEVICE_HAS_NAME 0x00000040
187 #define DO_DEVICE_INITIALIZING 0x00000080
188 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
189 #define DO_LONG_TERM_REQUESTS 0x00000200
190 #define DO_NEVER_LAST_DEVICE 0x00000400
191 #define DO_SHUTDOWN_REGISTERED 0x00000800
192 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
193 #define DO_POWER_PAGABLE 0x00002000
194 #define DO_POWER_INRUSH 0x00004000
195 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
196 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
197 #define DO_FORCE_NEITHER_IO 0x00080000
198 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
199 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
200 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
201 #define DO_DISALLOW_EXECUTE 0x00800000
203 #define DRVO_REINIT_REGISTERED 0x00000008
204 #define DRVO_INITIALIZED 0x00000010
205 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
206 #define DRVO_LEGACY_RESOURCES 0x00000040
208 typedef enum _ARBITER_REQUEST_SOURCE
{
209 ArbiterRequestUndefined
= -1,
210 ArbiterRequestLegacyReported
,
211 ArbiterRequestHalReported
,
212 ArbiterRequestLegacyAssigned
,
213 ArbiterRequestPnpDetected
,
214 ArbiterRequestPnpEnumerated
215 } ARBITER_REQUEST_SOURCE
;
217 typedef enum _ARBITER_RESULT
{
218 ArbiterResultUndefined
= -1,
219 ArbiterResultSuccess
,
220 ArbiterResultExternalConflict
,
221 ArbiterResultNullRequest
224 typedef enum _ARBITER_ACTION
{
225 ArbiterActionTestAllocation
,
226 ArbiterActionRetestAllocation
,
227 ArbiterActionCommitAllocation
,
228 ArbiterActionRollbackAllocation
,
229 ArbiterActionQueryAllocatedResources
,
230 ArbiterActionWriteReservedResources
,
231 ArbiterActionQueryConflict
,
232 ArbiterActionQueryArbitrate
,
233 ArbiterActionAddReserved
,
234 ArbiterActionBootAllocation
235 } ARBITER_ACTION
, *PARBITER_ACTION
;
237 typedef struct _ARBITER_CONFLICT_INFO
{
238 PDEVICE_OBJECT OwningObject
;
241 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
243 typedef struct _ARBITER_PARAMETERS
{
246 IN OUT PLIST_ENTRY ArbitrationList
;
247 IN ULONG AllocateFromCount
;
248 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
251 IN OUT PLIST_ENTRY ArbitrationList
;
252 IN ULONG AllocateFromCount
;
253 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
256 IN OUT PLIST_ENTRY ArbitrationList
;
259 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
260 } QueryAllocatedResources
;
262 IN PDEVICE_OBJECT PhysicalDeviceObject
;
263 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
264 OUT PULONG ConflictCount
;
265 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
268 IN PLIST_ENTRY ArbitrationList
;
271 IN PDEVICE_OBJECT ReserveDevice
;
274 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
276 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
278 typedef struct _ARBITER_LIST_ENTRY
{
279 LIST_ENTRY ListEntry
;
280 ULONG AlternativeCount
;
281 PIO_RESOURCE_DESCRIPTOR Alternatives
;
282 PDEVICE_OBJECT PhysicalDeviceObject
;
283 ARBITER_REQUEST_SOURCE RequestSource
;
286 INTERFACE_TYPE InterfaceType
;
289 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
290 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
291 ARBITER_RESULT Result
;
292 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
295 (NTAPI
*PARBITER_HANDLER
)(
296 IN OUT PVOID Context
,
297 IN ARBITER_ACTION Action
,
298 IN OUT PARBITER_PARAMETERS Parameters
);
300 #define ARBITER_PARTIAL 0x00000001
302 typedef struct _ARBITER_INTERFACE
{
306 PINTERFACE_REFERENCE InterfaceReference
;
307 PINTERFACE_DEREFERENCE InterfaceDereference
;
308 PARBITER_HANDLER ArbiterHandler
;
310 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
312 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
313 HalInstalledBusInformation
,
314 HalProfileSourceInformation
,
315 HalInformationClassUnused1
,
317 HalProcessorSpeedInformation
,
318 HalCallbackInformation
,
319 HalMapRegisterInformation
,
320 HalMcaLogInformation
,
321 HalFrameBufferCachingInformation
,
322 HalDisplayBiosInformation
,
323 HalProcessorFeatureInformation
,
324 HalNumaTopologyInterface
,
326 HalCmcLogInformation
,
327 HalCpeLogInformation
,
328 HalQueryMcaInterface
,
329 HalQueryAMLIIllegalIOPortAddresses
,
330 HalQueryMaxHotPlugMemoryAddress
,
331 HalPartitionIpiInterface
,
332 HalPlatformInformation
,
333 HalQueryProfileSourceList
,
334 HalInitLogInformation
,
335 HalFrequencyInformation
,
336 HalProcessorBrandString
,
337 HalHypervisorInformation
,
338 HalPlatformTimerInformation
,
339 HalAcpiAuditInformation
340 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
342 typedef enum _HAL_SET_INFORMATION_CLASS
{
343 HalProfileSourceInterval
,
344 HalProfileSourceInterruptHandler
,
345 HalMcaRegisterDriver
,
346 HalKernelErrorHandler
,
347 HalCmcRegisterDriver
,
348 HalCpeRegisterDriver
,
352 HalGenerateCmcInterrupt
,
353 HalProfileSourceTimerHandler
,
355 HalProfileDpgoSourceInterruptHandler
356 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
358 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
{
359 KPROFILE_SOURCE Source
;
361 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
363 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
{
364 KPROFILE_SOURCE Source
;
367 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
369 typedef struct _MAP_REGISTER_ENTRY
{
371 BOOLEAN WriteToDevice
;
372 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
374 typedef struct _DEBUG_DEVICE_ADDRESS
{
378 PUCHAR TranslatedAddress
;
380 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
382 typedef struct _DEBUG_MEMORY_REQUIREMENTS
{
383 PHYSICAL_ADDRESS Start
;
384 PHYSICAL_ADDRESS MaxEnd
;
385 PVOID VirtualAddress
;
389 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
391 typedef struct _DEBUG_DEVICE_DESCRIPTOR
{
402 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
403 DEBUG_MEMORY_REQUIREMENTS Memory
;
404 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
406 typedef struct _PM_DISPATCH_TABLE
{
410 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
412 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
413 TranslateChildToParent
,
414 TranslateParentToChild
415 } RESOURCE_TRANSLATION_DIRECTION
;
418 (NTAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
419 IN OUT PVOID Context
,
420 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
421 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
422 IN ULONG AlternativesCount OPTIONAL
,
423 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
424 IN PDEVICE_OBJECT PhysicalDeviceObject
,
425 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
428 (NTAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
429 IN PVOID Context OPTIONAL
,
430 IN PIO_RESOURCE_DESCRIPTOR Source
,
431 IN PDEVICE_OBJECT PhysicalDeviceObject
,
432 OUT PULONG TargetCount
,
433 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
435 typedef struct _TRANSLATOR_INTERFACE
{
439 PINTERFACE_REFERENCE InterfaceReference
;
440 PINTERFACE_DEREFERENCE InterfaceDereference
;
441 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
442 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
443 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
446 (FASTCALL
*pHalExamineMBR
)(
447 IN PDEVICE_OBJECT DeviceObject
,
449 IN ULONG MBRTypeIdentifier
,
453 (FASTCALL
*pHalIoReadPartitionTable
)(
454 IN PDEVICE_OBJECT DeviceObject
,
456 IN BOOLEAN ReturnRecognizedPartitions
,
457 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
460 (FASTCALL
*pHalIoSetPartitionInformation
)(
461 IN PDEVICE_OBJECT DeviceObject
,
463 IN ULONG PartitionNumber
,
464 IN ULONG PartitionType
);
467 (FASTCALL
*pHalIoWritePartitionTable
)(
468 IN PDEVICE_OBJECT DeviceObject
,
470 IN ULONG SectorsPerTrack
,
471 IN ULONG NumberOfHeads
,
472 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
475 (FASTCALL
*pHalHandlerForBus
)(
476 IN INTERFACE_TYPE InterfaceType
,
480 (FASTCALL
*pHalReferenceBusHandler
)(
481 IN PBUS_HANDLER BusHandler
);
484 (NTAPI
*pHalQuerySystemInformation
)(
485 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
488 OUT PULONG ReturnedLength
);
491 (NTAPI
*pHalSetSystemInformation
)(
492 IN HAL_SET_INFORMATION_CLASS InformationClass
,
497 (NTAPI
*pHalQueryBusSlots
)(
498 IN PBUS_HANDLER BusHandler
,
500 OUT PULONG SlotNumbers
,
501 OUT PULONG ReturnedLength
);
504 (NTAPI
*pHalInitPnpDriver
)(
508 (NTAPI
*pHalInitPowerManagement
)(
509 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
510 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
512 typedef struct _DMA_ADAPTER
*
513 (NTAPI
*pHalGetDmaAdapter
)(
515 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
516 OUT PULONG NumberOfMapRegisters
);
519 (NTAPI
*pHalGetInterruptTranslator
)(
520 IN INTERFACE_TYPE ParentInterfaceType
,
521 IN ULONG ParentBusNumber
,
522 IN INTERFACE_TYPE BridgeInterfaceType
,
525 OUT PTRANSLATOR_INTERFACE Translator
,
526 OUT PULONG BridgeBusNumber
);
529 (NTAPI
*pHalStartMirroring
)(
533 (NTAPI
*pHalEndMirroring
)(
534 IN ULONG PassNumber
);
537 (NTAPI
*pHalMirrorPhysicalMemory
)(
538 IN PHYSICAL_ADDRESS PhysicalAddress
,
539 IN LARGE_INTEGER NumberOfBytes
);
542 (NTAPI
*pHalMirrorVerify
)(
543 IN PHYSICAL_ADDRESS PhysicalAddress
,
544 IN LARGE_INTEGER NumberOfBytes
);
547 (NTAPI
*pHalEndOfBoot
)(
552 (NTAPI
*pHalTranslateBusAddress
)(
553 IN INTERFACE_TYPE InterfaceType
,
555 IN PHYSICAL_ADDRESS BusAddress
,
556 IN OUT PULONG AddressSpace
,
557 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
561 (NTAPI
*pHalAssignSlotResources
)(
562 IN PUNICODE_STRING RegistryPath
,
563 IN PUNICODE_STRING DriverClassName OPTIONAL
,
564 IN PDRIVER_OBJECT DriverObject
,
565 IN PDEVICE_OBJECT DeviceObject
,
566 IN INTERFACE_TYPE BusType
,
569 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
573 (NTAPI
*pHalHaltSystem
)(
578 (NTAPI
*pHalResetDisplay
)(
583 (NTAPI
*pHalVectorToIDTEntry
)(
588 (NTAPI
*pHalFindBusAddressTranslation
)(
589 IN PHYSICAL_ADDRESS BusAddress
,
590 IN OUT PULONG AddressSpace
,
591 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
592 IN OUT PULONG_PTR Context
,
597 (NTAPI
*pKdSetupPciDeviceForDebugging
)(
598 IN PVOID LoaderBlock OPTIONAL
,
599 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
603 (NTAPI
*pKdReleasePciDeviceForDebugging
)(
604 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
608 (NTAPI
*pKdGetAcpiTablePhase0
)(
609 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
614 (NTAPI
*pHalGetAcpiTable
)(
616 IN PCSTR OemId OPTIONAL
,
617 IN PCSTR OemTableId OPTIONAL
);
621 (NTAPI
*pKdCheckPowerButton
)(
624 #if (NTDDI_VERSION >= NTDDI_VISTA)
627 (NTAPI
*pKdMapPhysicalMemory64
)(
628 IN PHYSICAL_ADDRESS PhysicalAddress
,
629 IN ULONG NumberPages
,
630 IN BOOLEAN FlushCurrentTLB
);
634 (NTAPI
*pKdUnmapVirtualAddress
)(
635 IN PVOID VirtualAddress
,
636 IN ULONG NumberPages
,
637 IN BOOLEAN FlushCurrentTLB
);
641 (NTAPI
*pKdMapPhysicalMemory64
)(
642 IN PHYSICAL_ADDRESS PhysicalAddress
,
643 IN ULONG NumberPages
);
647 (NTAPI
*pKdUnmapVirtualAddress
)(
648 IN PVOID VirtualAddress
,
649 IN ULONG NumberPages
);
655 (NTAPI
*pKdGetPciDataByOffset
)(
664 (NTAPI
*pKdSetPciDataByOffset
)(
672 (NTAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
678 (NTAPI
*PCI_ERROR_HANDLER_CALLBACK
)(
683 (NTAPI
*pHalSetPciErrorHandlerCallback
)(
684 IN PCI_ERROR_HANDLER_CALLBACK Callback
);
686 #if 1 /* Not present in WDK 7600 */
688 (FASTCALL
*pHalIoAssignDriveLetters
)(
689 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
690 IN PSTRING NtDeviceName
,
691 OUT PUCHAR NtSystemPath
,
692 OUT PSTRING NtSystemPathString
);
697 pHalQuerySystemInformation HalQuerySystemInformation
;
698 pHalSetSystemInformation HalSetSystemInformation
;
699 pHalQueryBusSlots HalQueryBusSlots
;
701 pHalExamineMBR HalExamineMBR
;
702 #if 1 /* Not present in WDK 7600 */
703 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
705 pHalIoReadPartitionTable HalIoReadPartitionTable
;
706 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
707 pHalIoWritePartitionTable HalIoWritePartitionTable
;
708 pHalHandlerForBus HalReferenceHandlerForBus
;
709 pHalReferenceBusHandler HalReferenceBusHandler
;
710 pHalReferenceBusHandler HalDereferenceBusHandler
;
711 pHalInitPnpDriver HalInitPnpDriver
;
712 pHalInitPowerManagement HalInitPowerManagement
;
713 pHalGetDmaAdapter HalGetDmaAdapter
;
714 pHalGetInterruptTranslator HalGetInterruptTranslator
;
715 pHalStartMirroring HalStartMirroring
;
716 pHalEndMirroring HalEndMirroring
;
717 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
718 pHalEndOfBoot HalEndOfBoot
;
719 pHalMirrorVerify HalMirrorVerify
;
720 pHalGetAcpiTable HalGetCachedAcpiTable
;
721 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback
;
723 pHalGetErrorCapList HalGetErrorCapList
;
724 pHalInjectError HalInjectError
;
726 } HAL_DISPATCH
, *PHAL_DISPATCH
;
728 /* GCC/MSVC and WDK compatible declaration */
729 extern NTKERNELAPI HAL_DISPATCH HalDispatchTable
;
731 #if defined(_NTOSKRNL_) || defined(_BLDR_)
732 #define HALDISPATCH (&HalDispatchTable)
734 /* This is a WDK compatibility definition */
735 #define HalDispatchTable (&HalDispatchTable)
736 #define HALDISPATCH HalDispatchTable
739 #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
740 #define HalDispatchTableVersion HALDISPATCH->Version
741 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
742 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
743 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
744 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
745 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
746 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
747 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
748 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
749 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
750 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
751 #define HalStartMirroring HALDISPATCH->HalStartMirroring
752 #define HalEndMirroring HALDISPATCH->HalEndMirroring
753 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
754 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
755 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
757 typedef struct _FILE_ALIGNMENT_INFORMATION
{
758 ULONG AlignmentRequirement
;
759 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
761 typedef struct _FILE_NAME_INFORMATION
{
762 ULONG FileNameLength
;
764 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
767 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
768 ULONG FileAttributes
;
770 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
772 typedef struct _FILE_DISPOSITION_INFORMATION
{
774 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
776 typedef struct _FILE_END_OF_FILE_INFORMATION
{
777 LARGE_INTEGER EndOfFile
;
778 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
780 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
781 LARGE_INTEGER ValidDataLength
;
782 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
784 typedef union _FILE_SEGMENT_ELEMENT
{
787 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
789 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
791 #if (NTDDI_VERSION >= NTDDI_WIN2K)
796 IN ULONGLONG ConditionMask
,
801 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
802 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
803 (TypeBitMask), (ComparisonType)))
805 /* RtlVerifyVersionInfo() TypeMask */
807 #define VER_MINORVERSION 0x0000001
808 #define VER_MAJORVERSION 0x0000002
809 #define VER_BUILDNUMBER 0x0000004
810 #define VER_PLATFORMID 0x0000008
811 #define VER_SERVICEPACKMINOR 0x0000010
812 #define VER_SERVICEPACKMAJOR 0x0000020
813 #define VER_SUITENAME 0x0000040
814 #define VER_PRODUCT_TYPE 0x0000080
816 /* RtlVerifyVersionInfo() ComparisonType */
819 #define VER_GREATER 2
820 #define VER_GREATER_EQUAL 3
822 #define VER_LESS_EQUAL 5
826 #define VER_CONDITION_MASK 7
827 #define VER_NUM_BITS_PER_CONDITION_MASK 3
829 typedef struct _IMAGE_INFO
{
830 _ANONYMOUS_UNION
union {
832 _ANONYMOUS_STRUCT
struct {
833 ULONG ImageAddressingMode
:8;
834 ULONG SystemModeImage
:1;
835 ULONG ImageMappedToAllPids
:1;
836 ULONG ExtendedInfoPresent
:1;
843 ULONG ImageSectionNumber
;
844 } IMAGE_INFO
, *PIMAGE_INFO
;
846 #define IMAGE_ADDRESSING_MODE_32BIT 3
848 typedef enum _BUS_DATA_TYPE
{
849 ConfigurationSpaceUndefined
= -1,
861 SgiInternalConfiguration
,
863 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
865 typedef struct _NT_TIB
{
866 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
870 _ANONYMOUS_UNION
union {
874 PVOID ArbitraryUserPointer
;
875 struct _NT_TIB
*Self
;
878 typedef struct _NT_TIB32
{
883 __GNU_EXTENSION
union {
887 ULONG ArbitraryUserPointer
;
889 } NT_TIB32
,*PNT_TIB32
;
891 typedef struct _NT_TIB64
{
892 ULONG64 ExceptionList
;
895 ULONG64 SubSystemTib
;
896 __GNU_EXTENSION
union {
900 ULONG64 ArbitraryUserPointer
;
902 } NT_TIB64
,*PNT_TIB64
;
904 typedef enum _PROCESSINFOCLASS
{
905 ProcessBasicInformation
,
911 ProcessRaisePriority
,
913 ProcessExceptionPort
,
915 ProcessLdtInformation
,
917 ProcessDefaultHardErrorMode
,
918 ProcessIoPortHandlers
,
919 ProcessPooledUsageAndLimits
,
920 ProcessWorkingSetWatch
,
922 ProcessEnableAlignmentFaultFixup
,
923 ProcessPriorityClass
,
924 ProcessWx86Information
,
927 ProcessPriorityBoost
,
929 ProcessSessionInformation
,
930 ProcessForegroundInformation
,
931 ProcessWow64Information
,
932 ProcessImageFileName
,
933 ProcessLUIDDeviceMapsEnabled
,
934 ProcessBreakOnTermination
,
935 ProcessDebugObjectHandle
,
937 ProcessHandleTracing
,
940 ProcessTlsInformation
,
942 ProcessImageInformation
,
945 ProcessInstrumentationCallback
,
946 ProcessThreadStackAllocation
,
947 ProcessWorkingSetWatchEx
,
948 ProcessImageFileNameWin32
,
949 ProcessImageFileMapping
,
950 ProcessAffinityUpdateMode
,
951 ProcessMemoryAllocationMode
,
952 ProcessGroupInformation
,
953 ProcessTokenVirtualizationEnabled
,
954 ProcessConsoleHostProcess
,
955 ProcessWindowInformation
,
959 typedef enum _THREADINFOCLASS
{
960 ThreadBasicInformation
,
965 ThreadImpersonationToken
,
966 ThreadDescriptorTableEntry
,
967 ThreadEnableAlignmentFaultFixup
,
968 ThreadEventPair_Reusable
,
969 ThreadQuerySetWin32StartAddress
,
971 ThreadPerformanceCount
,
973 ThreadIdealProcessor
,
975 ThreadSetTlsArrayAddress
,
977 ThreadHideFromDebugger
,
978 ThreadBreakOnTermination
,
979 ThreadSwitchLegacyState
,
981 ThreadLastSystemCall
,
985 ThreadActualBasePriority
,
986 ThreadTebInformation
,
990 ThreadGroupInformation
,
991 ThreadUmsInformation
,
992 ThreadCounterProfiling
,
993 ThreadIdealProcessorEx
,
997 typedef struct _PROCESS_BASIC_INFORMATION
{
999 struct _PEB
*PebBaseAddress
;
1000 ULONG_PTR AffinityMask
;
1001 KPRIORITY BasePriority
;
1002 ULONG_PTR UniqueProcessId
;
1003 ULONG_PTR InheritedFromUniqueProcessId
;
1004 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
1006 typedef struct _PROCESS_WS_WATCH_INFORMATION
{
1009 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
1011 typedef struct _PROCESS_DEVICEMAP_INFORMATION
{
1012 __GNU_EXTENSION
union {
1014 HANDLE DirectoryHandle
;
1018 UCHAR DriveType
[32];
1021 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
1023 typedef struct _KERNEL_USER_TIMES
{
1024 LARGE_INTEGER CreateTime
;
1025 LARGE_INTEGER ExitTime
;
1026 LARGE_INTEGER KernelTime
;
1027 LARGE_INTEGER UserTime
;
1028 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1030 typedef struct _PROCESS_ACCESS_TOKEN
{
1033 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1035 typedef struct _PROCESS_SESSION_INFORMATION
{
1037 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1039 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
1040 IoQueryDeviceIdentifier
= 0,
1041 IoQueryDeviceConfigurationData
,
1042 IoQueryDeviceComponentInformation
,
1043 IoQueryDeviceMaxData
1044 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
1046 typedef struct _DISK_SIGNATURE
{
1047 ULONG PartitionStyle
;
1048 _ANONYMOUS_UNION
union {
1057 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
1060 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
1063 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
1064 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
1065 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
1066 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
1068 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1069 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1070 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1071 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1072 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1075 (NTAPI
*PTIMER_APC_ROUTINE
)(
1076 IN PVOID TimerContext
,
1077 IN ULONG TimerLowValue
,
1078 IN LONG TimerHighValue
);
1080 typedef struct _KUSER_SHARED_DATA
1082 ULONG TickCountLowDeprecated
;
1083 ULONG TickCountMultiplier
;
1084 volatile KSYSTEM_TIME InterruptTime
;
1085 volatile KSYSTEM_TIME SystemTime
;
1086 volatile KSYSTEM_TIME TimeZoneBias
;
1087 USHORT ImageNumberLow
;
1088 USHORT ImageNumberHigh
;
1089 WCHAR NtSystemRoot
[260];
1090 ULONG MaxStackTraceDepth
;
1091 ULONG CryptoExponent
;
1093 ULONG LargePageMinimum
;
1095 NT_PRODUCT_TYPE NtProductType
;
1096 BOOLEAN ProductTypeIsValid
;
1097 ULONG NtMajorVersion
;
1098 ULONG NtMinorVersion
;
1099 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
1102 volatile ULONG TimeSlip
;
1103 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
1104 ULONG AltArchitecturePad
[1];
1105 LARGE_INTEGER SystemExpirationDate
;
1107 BOOLEAN KdDebuggerEnabled
;
1108 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
1109 UCHAR NXSupportPolicy
;
1111 volatile ULONG ActiveConsoleId
;
1112 volatile ULONG DismountCount
;
1113 ULONG ComPlusPackage
;
1114 ULONG LastSystemRITEventTickCount
;
1115 ULONG NumberOfPhysicalPages
;
1116 BOOLEAN SafeBootMode
;
1117 #if (NTDDI_VERSION >= NTDDI_WIN7)
1121 UCHAR TscQpcEnabled
:1;
1122 UCHAR TscQpcSpareFlag
:1;
1123 UCHAR TscQpcShift
:6;
1128 #if (NTDDI_VERSION >= NTDDI_VISTA)
1130 ULONG SharedDataFlags
;
1132 ULONG DbgErrorPortPresent
:1;
1133 ULONG DbgElevationEnabled
:1;
1134 ULONG DbgVirtEnabled
:1;
1135 ULONG DbgInstallerDetectEnabled
:1;
1136 ULONG DbgSystemDllRelocated
:1;
1137 ULONG DbgDynProcessorEnabled
:1;
1138 ULONG DbgSEHValidationEnabled
:1;
1145 ULONG DataFlagsPad
[1];
1146 ULONGLONG TestRetInstruction
;
1148 ULONG SystemCallReturn
;
1149 ULONGLONG SystemCallPad
[3];
1150 _ANONYMOUS_UNION
union {
1151 volatile KSYSTEM_TIME TickCount
;
1152 volatile ULONG64 TickCountQuad
;
1153 _ANONYMOUS_STRUCT
struct {
1154 ULONG ReservedTickCountOverlay
[3];
1155 ULONG TickCountPad
[1];
1160 #if (NTDDI_VERSION >= NTDDI_WS03)
1161 LONGLONG ConsoleSessionForegroundProcessId
;
1162 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
1164 #if (NTDDI_VERSION >= NTDDI_VISTA)
1165 #if (NTDDI_VERSION >= NTDDI_WIN7)
1166 USHORT UserModeGlobalLogger
[16];
1168 USHORT UserModeGlobalLogger
[8];
1169 ULONG HeapTracingPid
[2];
1170 ULONG CritSecTracingPid
[2];
1172 ULONG ImageFileExecutionOptions
;
1173 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
1174 ULONG LangGenerationCount
;
1176 /* 4 bytes padding */
1178 ULONGLONG Reserved5
;
1179 volatile ULONG64 InterruptTimeBias
;
1181 #if (NTDDI_VERSION >= NTDDI_WIN7)
1182 volatile ULONG64 TscQpcBias
;
1183 volatile ULONG ActiveProcessorCount
;
1184 volatile USHORT ActiveGroupCount
;
1186 volatile ULONG AitSamplingValue
;
1187 volatile ULONG AppCompatFlag
;
1188 ULONGLONG SystemDllNativeRelocation
;
1189 ULONG SystemDllWowRelocation
;
1191 XSTATE_CONFIGURATION XState
;
1193 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
1195 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1196 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1197 extern NTKERNELAPI ULONG MmUserProbeAddress
;
1202 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1203 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1204 #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
1205 #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
1206 extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_
;
1208 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1210 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1211 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
1212 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
1213 #if !defined (_X86PAE_)
1214 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
1216 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
1219 #define KeGetPcr() PCR
1221 #define KERNEL_STACK_SIZE 12288
1222 #define KERNEL_LARGE_STACK_SIZE 61440
1223 #define KERNEL_LARGE_STACK_COMMIT 12288
1225 #define SIZE_OF_80387_REGISTERS 80
1227 #define PCR_MINOR_VERSION 1
1228 #define PCR_MAJOR_VERSION 1
1230 #if !defined(RC_INVOKED)
1232 #define CONTEXT_i386 0x10000
1233 #define CONTEXT_i486 0x10000
1234 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
1235 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
1236 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
1237 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
1238 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
1239 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
1241 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
1243 #endif /* !defined(RC_INVOKED) */
1245 typedef struct _KPCR
{
1249 struct _EXCEPTION_REGISTRATION_RECORD
*Used_ExceptionList
;
1250 PVOID Used_StackBase
;
1253 ULONG ContextSwitches
;
1254 KAFFINITY SetMemberCopy
;
1258 struct _KPCR
*SelfPcr
;
1259 struct _KPRCB
*Prcb
;
1264 PVOID KdVersionBlock
;
1265 struct _KIDTENTRY
*IDT
;
1266 struct _KGDTENTRY
*GDT
;
1268 USHORT MajorVersion
;
1269 USHORT MinorVersion
;
1270 KAFFINITY SetMember
;
1271 ULONG StallScaleFactor
;
1275 UCHAR SecondLevelCacheAssociativity
;
1277 ULONG KernelReserved
[14];
1278 ULONG SecondLevelCacheSize
;
1279 ULONG HalReserved
[16];
1284 KeGetCurrentProcessorNumber(VOID
)
1286 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
1289 typedef struct _FLOATING_SAVE_AREA
{
1294 ULONG ErrorSelector
;
1297 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
1299 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
1301 #include "pshpack4.h"
1302 typedef struct _CONTEXT
{
1310 FLOATING_SAVE_AREA FloatSave
;
1327 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
1329 #include "poppack.h"
1335 #define PTI_SHIFT 12L
1336 #define PDI_SHIFT 21L
1337 #define PPI_SHIFT 30L
1338 #define PXI_SHIFT 39L
1339 #define PTE_PER_PAGE 512
1340 #define PDE_PER_PAGE 512
1341 #define PPE_PER_PAGE 512
1342 #define PXE_PER_PAGE 512
1343 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
1344 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
1345 #define PPI_MASK (PPE_PER_PAGE - 1)
1346 #define PXI_MASK (PXE_PER_PAGE - 1)
1348 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
1349 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
1350 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
1351 #define PDE_BASE 0xFFFFF6FB40000000ULL
1352 #define PTE_BASE 0xFFFFF68000000000ULL
1353 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
1354 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
1355 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
1356 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
1358 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1359 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1360 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1361 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1362 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
1363 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
1365 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
1415 /* Floating point */
1417 XMM_SAVE_AREA32 FltSave
;
1441 M128A VectorRegister
[26];
1442 ULONG64 VectorControl
;
1445 ULONG64 DebugControl
;
1446 ULONG64 LastBranchToRip
;
1447 ULONG64 LastBranchFromRip
;
1448 ULONG64 LastExceptionToRip
;
1449 ULONG64 LastExceptionFromRip
;
1452 typedef struct _KPCR
1454 _ANONYMOUS_UNION
union
1457 _ANONYMOUS_STRUCT
struct
1459 union _KGDTENTRY64
*GdtBase
;
1460 struct _KTSS64
*TssBase
;
1463 struct _KPRCB
*CurrentPrcb
;
1464 PKSPIN_LOCK_QUEUE LockArray
;
1468 union _KIDTENTRY64
*IdtBase
;
1471 UCHAR SecondLevelCacheAssociativity
;
1472 UCHAR ObsoleteNumber
;
1475 USHORT MajorVersion
;
1476 USHORT MinorVersion
;
1477 ULONG StallScaleFactor
;
1479 ULONG KernelReserved
[15];
1480 ULONG SecondLevelCacheSize
;
1481 ULONG HalReserved
[16];
1483 PVOID KdVersionBlock
;
1485 ULONG PcrAlign1
[24];
1492 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
1497 KeGetCurrentProcessorNumber(VOID
)
1499 return (ULONG
)__readgsword(0x184);
1502 #if !defined(RC_INVOKED)
1504 #define CONTEXT_AMD64 0x100000
1506 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
1507 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
1508 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
1509 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
1510 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
1512 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1513 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1515 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
1517 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1518 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1519 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1520 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1522 #endif /* RC_INVOKED */
1524 #endif /* _AMD64_ */
1526 typedef enum _INTERLOCKED_RESULT
{
1527 ResultNegative
= RESULT_NEGATIVE
,
1528 ResultZero
= RESULT_ZERO
,
1529 ResultPositive
= RESULT_POSITIVE
1530 } INTERLOCKED_RESULT
;
1532 typedef struct _OSVERSIONINFOA
{
1533 ULONG dwOSVersionInfoSize
;
1534 ULONG dwMajorVersion
;
1535 ULONG dwMinorVersion
;
1536 ULONG dwBuildNumber
;
1538 CHAR szCSDVersion
[128];
1539 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
1541 typedef struct _OSVERSIONINFOW
{
1542 ULONG dwOSVersionInfoSize
;
1543 ULONG dwMajorVersion
;
1544 ULONG dwMinorVersion
;
1545 ULONG dwBuildNumber
;
1547 WCHAR szCSDVersion
[128];
1548 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
1550 typedef struct _OSVERSIONINFOEXA
{
1551 ULONG dwOSVersionInfoSize
;
1552 ULONG dwMajorVersion
;
1553 ULONG dwMinorVersion
;
1554 ULONG dwBuildNumber
;
1556 CHAR szCSDVersion
[128];
1557 USHORT wServicePackMajor
;
1558 USHORT wServicePackMinor
;
1562 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
1564 typedef struct _OSVERSIONINFOEXW
{
1565 ULONG dwOSVersionInfoSize
;
1566 ULONG dwMajorVersion
;
1567 ULONG dwMinorVersion
;
1568 ULONG dwBuildNumber
;
1570 WCHAR szCSDVersion
[128];
1571 USHORT wServicePackMajor
;
1572 USHORT wServicePackMinor
;
1576 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
1579 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
1580 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
1581 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
1582 typedef OSVERSIONINFOW OSVERSIONINFO
;
1583 typedef POSVERSIONINFOW POSVERSIONINFO
;
1584 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
1586 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
1587 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
1588 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
1589 typedef OSVERSIONINFOA OSVERSIONINFO
;
1590 typedef POSVERSIONINFOA POSVERSIONINFO
;
1591 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
1592 #endif /* UNICODE */
1594 /* Executive Types */
1596 #define PROTECTED_POOL 0x80000000
1598 typedef struct _ZONE_SEGMENT_HEADER
{
1599 SINGLE_LIST_ENTRY SegmentList
;
1601 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
1603 typedef struct _ZONE_HEADER
{
1604 SINGLE_LIST_ENTRY FreeList
;
1605 SINGLE_LIST_ENTRY SegmentList
;
1607 ULONG TotalSegmentSize
;
1608 } ZONE_HEADER
, *PZONE_HEADER
;
1610 /* Executive Functions */
1612 static __inline PVOID
1614 IN PZONE_HEADER Zone
)
1616 if (Zone
->FreeList
.Next
)
1617 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
1618 return (PVOID
) Zone
->FreeList
.Next
;
1621 static __inline PVOID
1623 IN PZONE_HEADER Zone
,
1626 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
1627 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
1628 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
1633 * ExInterlockedAllocateFromZone(
1634 * IN PZONE_HEADER Zone,
1635 * IN PKSPIN_LOCK Lock)
1637 #define ExInterlockedAllocateFromZone(Zone, Lock) \
1638 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
1641 * ExInterlockedFreeToZone(
1642 * IN PZONE_HEADER Zone,
1644 * IN PKSPIN_LOCK Lock);
1646 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
1647 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
1652 * IN PZONE_HEADER Zone)
1654 #define ExIsFullZone(Zone) \
1655 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
1658 * ExIsObjectInFirstZoneSegment(
1659 * IN PZONE_HEADER Zone,
1662 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
1663 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
1664 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
1665 (Zone)->TotalSegmentSize)) )
1667 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
1668 #define ExAcquireResourceShared ExAcquireResourceSharedLite
1669 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
1670 #define ExDeleteResource ExDeleteResourceLite
1671 #define ExInitializeResource ExInitializeResourceLite
1672 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
1673 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
1674 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
1675 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
1677 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1683 IN OUT PZONE_HEADER Zone
,
1684 IN OUT PVOID Segment
,
1685 IN ULONG SegmentSize
);
1691 OUT PZONE_HEADER Zone
,
1693 IN OUT PVOID InitialSegment
,
1694 IN ULONG InitialSegmentSize
);
1699 ExInterlockedExtendZone(
1700 IN OUT PZONE_HEADER Zone
,
1701 IN OUT PVOID Segment
,
1702 IN ULONG SegmentSize
,
1703 IN OUT PKSPIN_LOCK Lock
);
1715 ExRaiseAccessViolation(
1722 ExRaiseDatatypeMisalignment(
1732 Exfi386InterlockedIncrementLong(
1733 IN OUT LONG
volatile *Addend
);
1738 Exfi386InterlockedDecrementLong(
1744 Exfi386InterlockedExchangeUlong(
1752 typedef enum _CONFIGURATION_TYPE
{
1755 FloatingPointProcessor
,
1765 MultiFunctionAdapter
,
1779 FloppyDiskPeripheral
,
1792 RealModeIrqRoutingTable
,
1793 RealModePCIEnumeration
,
1795 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
1796 #endif /* !_ARC_DDK_ */
1798 typedef struct _CONTROLLER_OBJECT
{
1801 PVOID ControllerExtension
;
1802 KDEVICE_QUEUE DeviceWaitQueue
;
1804 LARGE_INTEGER Spare2
;
1805 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
1807 typedef struct _CONFIGURATION_INFORMATION
{
1812 ULONG ScsiPortCount
;
1814 ULONG ParallelCount
;
1815 BOOLEAN AtDiskPrimaryAddressClaimed
;
1816 BOOLEAN AtDiskSecondaryAddressClaimed
;
1818 ULONG MediumChangerCount
;
1819 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
1823 (NTAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
1825 IN PUNICODE_STRING PathName
,
1826 IN INTERFACE_TYPE BusType
,
1828 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
1829 IN CONFIGURATION_TYPE ControllerType
,
1830 IN ULONG ControllerNumber
,
1831 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
1832 IN CONFIGURATION_TYPE PeripheralType
,
1833 IN ULONG PeripheralNumber
,
1834 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
1838 (NTAPI DRIVER_REINITIALIZE
)(
1839 IN
struct _DRIVER_OBJECT
*DriverObject
,
1843 typedef DRIVER_REINITIALIZE
*PDRIVER_REINITIALIZE
;
1845 /** Filesystem runtime library routines **/
1847 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1851 FsRtlIsTotalDeviceFailure(
1852 IN NTSTATUS Status
);
1855 /* Hardware Abstraction Layer Types */
1858 (NTAPI
*PciPin2Line
)(
1859 IN
struct _BUS_HANDLER
*BusHandler
,
1860 IN
struct _BUS_HANDLER
*RootHandler
,
1861 IN PCI_SLOT_NUMBER SlotNumber
,
1862 IN PPCI_COMMON_CONFIG PciData
);
1865 (NTAPI
*PciLine2Pin
)(
1866 IN
struct _BUS_HANDLER
*BusHandler
,
1867 IN
struct _BUS_HANDLER
*RootHandler
,
1868 IN PCI_SLOT_NUMBER SlotNumber
,
1869 IN PPCI_COMMON_CONFIG PciNewData
,
1870 IN PPCI_COMMON_CONFIG PciOldData
);
1873 (NTAPI
*PciReadWriteConfig
)(
1874 IN
struct _BUS_HANDLER
*BusHandler
,
1875 IN PCI_SLOT_NUMBER Slot
,
1880 #define PCI_DATA_TAG ' ICP'
1881 #define PCI_DATA_VERSION 1
1883 typedef struct _PCIBUSDATA
{
1886 PciReadWriteConfig ReadConfig
;
1887 PciReadWriteConfig WriteConfig
;
1888 PciPin2Line Pin2Line
;
1889 PciLine2Pin Line2Pin
;
1890 PCI_SLOT_NUMBER ParentSlot
;
1892 } PCIBUSDATA
, *PPCIBUSDATA
;
1894 /* Hardware Abstraction Layer Functions */
1896 #if !defined(NO_LEGACY_DRIVERS)
1898 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1903 HalAssignSlotResources(
1904 IN PUNICODE_STRING RegistryPath
,
1905 IN PUNICODE_STRING DriverClassName
,
1906 IN PDRIVER_OBJECT DriverObject
,
1907 IN PDEVICE_OBJECT DeviceObject
,
1908 IN INTERFACE_TYPE BusType
,
1910 IN ULONG SlotNumber
,
1911 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
1916 HalGetInterruptVector(
1917 IN INTERFACE_TYPE InterfaceType
,
1919 IN ULONG BusInterruptLevel
,
1920 IN ULONG BusInterruptVector
,
1922 OUT PKAFFINITY Affinity
);
1928 IN BUS_DATA_TYPE BusDataType
,
1930 IN ULONG SlotNumber
,
1936 #endif /* !defined(NO_LEGACY_DRIVERS) */
1938 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1944 IN PDEVICE_DESCRIPTION DeviceDescription
,
1945 IN OUT PULONG NumberOfMapRegisters
);
1951 IN ULONG Frequency
);
1956 IN PADAPTER_OBJECT DmaAdapter
);
1961 HalAcquireDisplayOwnership(
1962 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
1968 IN BUS_DATA_TYPE BusDataType
,
1970 IN ULONG SlotNumber
,
1977 HalGetBusDataByOffset(
1978 IN BUS_DATA_TYPE BusDataType
,
1980 IN ULONG SlotNumber
,
1988 HalSetBusDataByOffset(
1989 IN BUS_DATA_TYPE BusDataType
,
1991 IN ULONG SlotNumber
,
1999 HalTranslateBusAddress(
2000 IN INTERFACE_TYPE InterfaceType
,
2002 IN PHYSICAL_ADDRESS BusAddress
,
2003 IN OUT PULONG AddressSpace
,
2004 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
2008 #if (NTDDI_VERSION >= NTDDI_WINXP)
2013 IN PDEVICE_OBJECT DeviceObject
,
2014 IN ULONG SectorSize
,
2015 IN ULONG MBRTypeIdentifier
,
2019 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
2023 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2024 //DECLSPEC_DEPRECATED_DDK
2028 IoFreeAdapterChannel(
2029 IN PADAPTER_OBJECT AdapterObject
);
2031 //DECLSPEC_DEPRECATED_DDK
2035 IoFlushAdapterBuffers(
2036 IN PADAPTER_OBJECT AdapterObject
,
2038 IN PVOID MapRegisterBase
,
2041 IN BOOLEAN WriteToDevice
);
2043 //DECLSPEC_DEPRECATED_DDK
2048 IN PADAPTER_OBJECT AdapterObject
,
2049 IN PVOID MapRegisterBase
,
2050 IN ULONG NumberOfMapRegisters
);
2052 //DECLSPEC_DEPRECATED_DDK
2056 HalAllocateCommonBuffer(
2057 IN PADAPTER_OBJECT AdapterObject
,
2059 OUT PPHYSICAL_ADDRESS LogicalAddress
,
2060 IN BOOLEAN CacheEnabled
);
2062 //DECLSPEC_DEPRECATED_DDK
2066 HalFreeCommonBuffer(
2067 IN PADAPTER_OBJECT AdapterObject
,
2069 IN PHYSICAL_ADDRESS LogicalAddress
,
2070 IN PVOID VirtualAddress
,
2071 IN BOOLEAN CacheEnabled
);
2073 //DECLSPEC_DEPRECATED_DDK
2078 IN PADAPTER_OBJECT AdapterObject
);
2083 HalAllocateAdapterChannel(
2084 IN PADAPTER_OBJECT AdapterObject
,
2085 IN PWAIT_CONTEXT_BLOCK Wcb
,
2086 IN ULONG NumberOfMapRegisters
,
2087 IN PDRIVER_CONTROL ExecutionRoutine
);
2089 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2091 #endif /* defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) */
2093 /* I/O Manager Functions */
2096 * VOID IoAssignArcName(
2097 * IN PUNICODE_STRING ArcName,
2098 * IN PUNICODE_STRING DeviceName);
2100 #define IoAssignArcName(_ArcName, _DeviceName) ( \
2101 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
2105 * IoDeassignArcName(
2106 * IN PUNICODE_STRING ArcName)
2108 #define IoDeassignArcName IoDeleteSymbolicLink
2110 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2112 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
2116 IoAllocateAdapterChannel(
2117 IN PADAPTER_OBJECT AdapterObject
,
2118 IN PDEVICE_OBJECT DeviceObject
,
2119 IN ULONG NumberOfMapRegisters
,
2120 IN PDRIVER_CONTROL ExecutionRoutine
,
2124 //DECLSPEC_DEPRECATED_DDK
2129 IN PADAPTER_OBJECT AdapterObject
,
2131 IN PVOID MapRegisterBase
,
2133 IN OUT PULONG Length
,
2134 IN BOOLEAN WriteToDevice
);
2139 IoAllocateController(
2140 IN PCONTROLLER_OBJECT ControllerObject
,
2141 IN PDEVICE_OBJECT DeviceObject
,
2142 IN PDRIVER_CONTROL ExecutionRoutine
,
2143 IN PVOID Context OPTIONAL
);
2155 IN PCONTROLLER_OBJECT ControllerObject
);
2161 IN PCONTROLLER_OBJECT ControllerObject
);
2164 PCONFIGURATION_INFORMATION
2166 IoGetConfigurationInformation(
2172 IoGetDeviceToVerify(
2173 IN PETHREAD Thread
);
2179 IN PDEVICE_OBJECT DeviceObject
,
2180 IN PFILE_OBJECT FileObject
);
2185 IoGetFileObjectGenericMapping(
2191 IoMakeAssociatedIrp(
2193 IN CCHAR StackSize
);
2198 IoQueryDeviceDescription(
2199 IN PINTERFACE_TYPE BusType OPTIONAL
,
2200 IN PULONG BusNumber OPTIONAL
,
2201 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
2202 IN PULONG ControllerNumber OPTIONAL
,
2203 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
2204 IN PULONG PeripheralNumber OPTIONAL
,
2205 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
2206 IN OUT PVOID Context OPTIONAL
);
2213 IN PVPB Vpb OPTIONAL
,
2214 IN PDEVICE_OBJECT RealDeviceObject
);
2219 IoRaiseInformationalHardError(
2220 IN NTSTATUS ErrorStatus
,
2221 IN PUNICODE_STRING String OPTIONAL
,
2222 IN PKTHREAD Thread OPTIONAL
);
2227 IoRegisterBootDriverReinitialization(
2228 IN PDRIVER_OBJECT DriverObject
,
2229 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2230 IN PVOID Context OPTIONAL
);
2235 IoRegisterDriverReinitialization(
2236 IN PDRIVER_OBJECT DriverObject
,
2237 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2238 IN PVOID Context OPTIONAL
);
2243 IoAttachDeviceByPointer(
2244 IN PDEVICE_OBJECT SourceDevice
,
2245 IN PDEVICE_OBJECT TargetDevice
);
2250 IoReportDetectedDevice(
2251 IN PDRIVER_OBJECT DriverObject
,
2252 IN INTERFACE_TYPE LegacyBusType
,
2254 IN ULONG SlotNumber
,
2255 IN PCM_RESOURCE_LIST ResourceList OPTIONAL
,
2256 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
2257 IN BOOLEAN ResourceAssigned
,
2258 IN OUT PDEVICE_OBJECT
*DeviceObject
);
2263 IoReportResourceForDetection(
2264 IN PDRIVER_OBJECT DriverObject
,
2265 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2266 IN ULONG DriverListSize OPTIONAL
,
2267 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2268 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2269 IN ULONG DeviceListSize OPTIONAL
,
2270 OUT PBOOLEAN ConflictDetected
);
2275 IoReportResourceUsage(
2276 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2277 IN PDRIVER_OBJECT DriverObject
,
2278 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2279 IN ULONG DriverListSize OPTIONAL
,
2280 IN PDEVICE_OBJECT DeviceObject
,
2281 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2282 IN ULONG DeviceListSize OPTIONAL
,
2283 IN BOOLEAN OverrideConflict
,
2284 OUT PBOOLEAN ConflictDetected
);
2289 IoSetHardErrorOrVerifyDevice(
2291 IN PDEVICE_OBJECT DeviceObject
);
2297 IN PUNICODE_STRING RegistryPath
,
2298 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2299 IN PDRIVER_OBJECT DriverObject
,
2300 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2301 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL
,
2302 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
2304 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2306 #if (NTDDI_VERSION >= NTDDI_WINXP)
2312 IN PDEVICE_OBJECT DeviceObject
,
2313 IN
struct _CREATE_DISK
* Disk OPTIONAL
);
2318 IoReadDiskSignature(
2319 IN PDEVICE_OBJECT DeviceObject
,
2320 IN ULONG BytesPerSector
,
2321 OUT PDISK_SIGNATURE Signature
);
2326 IoReadPartitionTable(
2327 IN PDEVICE_OBJECT DeviceObject
,
2328 IN ULONG SectorSize
,
2329 IN BOOLEAN ReturnRecognizedPartitions
,
2330 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2335 IoReadPartitionTableEx(
2336 IN PDEVICE_OBJECT DeviceObject
,
2337 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
2342 IoSetPartitionInformation(
2343 IN PDEVICE_OBJECT DeviceObject
,
2344 IN ULONG SectorSize
,
2345 IN ULONG PartitionNumber
,
2346 IN ULONG PartitionType
);
2351 IoSetPartitionInformationEx(
2352 IN PDEVICE_OBJECT DeviceObject
,
2353 IN ULONG PartitionNumber
,
2354 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
2359 IoSetSystemPartition(
2360 IN PUNICODE_STRING VolumeNameString
);
2365 IoSetThreadHardErrorMode(
2366 IN BOOLEAN EnableHardErrors
);
2371 IoVerifyPartitionTable(
2372 IN PDEVICE_OBJECT DeviceObject
,
2373 IN BOOLEAN FixErrors
);
2378 IoVolumeDeviceToDosName(
2379 IN PVOID VolumeDeviceObject
,
2380 OUT PUNICODE_STRING DosName
);
2385 IoWritePartitionTable(
2386 IN PDEVICE_OBJECT DeviceObject
,
2387 IN ULONG SectorSize
,
2388 IN ULONG SectorsPerTrack
,
2389 IN ULONG NumberOfHeads
,
2390 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2395 IoWritePartitionTableEx(
2396 IN PDEVICE_OBJECT DeviceObject
,
2397 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*DriveLayout
);
2402 IoAttachDeviceToDeviceStackSafe(
2403 IN PDEVICE_OBJECT SourceDevice
,
2404 IN PDEVICE_OBJECT TargetDevice
,
2405 OUT PDEVICE_OBJECT
*AttachedToDeviceObject
);
2407 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2409 /** Kernel debugger routines **/
2417 IN ULONG MaximumResponseLength
);
2419 /* Kernel Functions */
2421 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2428 IN ULONG BugCheckCode
);
2434 IN OUT PRKEVENT Event
,
2435 IN KPRIORITY Increment
,
2441 KeSetBasePriorityThread(
2442 IN OUT PRKTHREAD Thread
,
2447 /* Memory Manager Types */
2449 typedef struct _PHYSICAL_MEMORY_RANGE
{
2450 PHYSICAL_ADDRESS BaseAddress
;
2451 LARGE_INTEGER NumberOfBytes
;
2452 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
2454 /* Memory Manager Functions */
2456 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2459 PPHYSICAL_MEMORY_RANGE
2461 MmGetPhysicalMemoryRanges(
2467 MmGetPhysicalAddress(
2468 IN PVOID BaseAddress
);
2473 MmIsNonPagedSystemAddressValid(
2474 IN PVOID VirtualAddress
);
2479 MmAllocateNonCachedMemory(
2480 IN SIZE_T NumberOfBytes
);
2485 MmFreeNonCachedMemory(
2486 IN PVOID BaseAddress
,
2487 IN SIZE_T NumberOfBytes
);
2492 MmGetVirtualForPhysical(
2493 IN PHYSICAL_ADDRESS PhysicalAddress
);
2498 MmMapUserAddressesToPage(
2499 IN PVOID BaseAddress
,
2500 IN SIZE_T NumberOfBytes
,
2501 IN PVOID PageAddress
);
2507 IN PHYSICAL_ADDRESS PhysicalAddress
,
2508 IN SIZE_T NumberOfBytes
,
2509 IN MEMORY_CACHING_TYPE CacheType
);
2514 MmMapViewInSessionSpace(
2516 OUT PVOID
*MappedBase
,
2517 IN OUT PSIZE_T ViewSize
);
2522 MmMapViewInSystemSpace(
2524 OUT PVOID
*MappedBase
,
2525 IN OUT PSIZE_T ViewSize
);
2531 IN PVOID VirtualAddress
);
2536 MmIsThisAnNtAsSystem(
2542 MmLockPagableSectionByHandle(
2543 IN PVOID ImageSectionHandle
);
2548 MmUnmapViewInSessionSpace(
2549 IN PVOID MappedBase
);
2554 MmUnmapViewInSystemSpace(
2555 IN PVOID MappedBase
);
2560 MmUnsecureVirtualMemory(
2561 IN HANDLE SecureHandle
);
2566 MmRemovePhysicalMemory(
2567 IN PPHYSICAL_ADDRESS StartAddress
,
2568 IN OUT PLARGE_INTEGER NumberOfBytes
);
2573 MmSecureVirtualMemory(
2576 IN ULONG ProbeMode
);
2581 MmUnmapVideoDisplay(
2582 IN PVOID BaseAddress
,
2583 IN SIZE_T NumberOfBytes
);
2585 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2587 /* NtXxx Functions */
2593 OUT PHANDLE ProcessHandle
,
2594 IN ACCESS_MASK DesiredAccess
,
2595 IN POBJECT_ATTRIBUTES ObjectAttributes
,
2596 IN PCLIENT_ID ClientId OPTIONAL
);
2601 NtQueryInformationProcess(
2602 IN HANDLE ProcessHandle
,
2603 IN PROCESSINFOCLASS ProcessInformationClass
,
2604 OUT PVOID ProcessInformation OPTIONAL
,
2605 IN ULONG ProcessInformationLength
,
2606 OUT PULONG ReturnLength OPTIONAL
);
2608 /** Process manager types **/
2611 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
2613 IN HANDLE ProcessId
,
2617 (NTAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
2618 IN HANDLE ProcessId
,
2623 (NTAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
2624 IN PUNICODE_STRING FullImageName
,
2625 IN HANDLE ProcessId
,
2626 IN PIMAGE_INFO ImageInfo
);
2628 /** Process manager routines **/
2630 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2635 PsSetLoadImageNotifyRoutine(
2636 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
2641 PsSetCreateThreadNotifyRoutine(
2642 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
2647 PsSetCreateProcessNotifyRoutine(
2648 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
2654 PsGetCurrentProcessId(
2660 PsGetCurrentThreadId(
2667 OUT PULONG MajorVersion OPTIONAL
,
2668 OUT PULONG MinorVersion OPTIONAL
,
2669 OUT PULONG BuildNumber OPTIONAL
,
2670 OUT PUNICODE_STRING CSDVersion OPTIONAL
);
2672 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2674 #if (NTDDI_VERSION >= NTDDI_WINXP)
2680 IN PEPROCESS Process
);
2685 PsRemoveCreateThreadNotifyRoutine(
2686 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
2691 PsRemoveLoadImageNotifyRoutine(
2692 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
2694 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2696 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess
;
2700 typedef struct _RTL_SPLAY_LINKS
{
2701 struct _RTL_SPLAY_LINKS
*Parent
;
2702 struct _RTL_SPLAY_LINKS
*LeftChild
;
2703 struct _RTL_SPLAY_LINKS
*RightChild
;
2704 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
2708 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
2710 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
2711 *CallersAddress = (PVOID)_ReturnAddress(); \
2712 *CallersCaller = NULL;
2715 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2719 RtlGetCallersAddress(
2720 OUT PVOID
*CallersAddress
,
2721 OUT PVOID
*CallersCaller
);
2726 #if !defined(MIDL_PASS)
2731 RtlConvertLongToLuid(
2737 Temp
.QuadPart
= Val
;
2738 Luid
.LowPart
= Temp
.u
.LowPart
;
2739 Luid
.HighPart
= Temp
.u
.HighPart
;
2746 RtlConvertUlongToLuid(
2758 #if defined(_AMD64_) || defined(_IA64_)
2759 //DECLSPEC_DEPRECATED_DDK_WINXP
2763 RtlLargeIntegerDivide(
2764 IN LARGE_INTEGER Dividend
,
2765 IN LARGE_INTEGER Divisor
,
2766 OUT PLARGE_INTEGER Remainder OPTIONAL
)
2769 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
2771 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
2777 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2781 RtlLargeIntegerDivide(
2782 IN LARGE_INTEGER Dividend
,
2783 IN LARGE_INTEGER Divisor
,
2784 OUT PLARGE_INTEGER Remainder OPTIONAL
);
2787 #endif /* defined(_AMD64_) || defined(_IA64_) */
2789 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2794 RtlPrefixUnicodeString(
2795 IN PCUNICODE_STRING String1
,
2796 IN PCUNICODE_STRING String2
,
2797 IN BOOLEAN CaseInSensitive
);
2803 IN OUT PSTRING DestinationString
,
2804 IN
const PSTRING SourceString
);
2809 RtlUpcaseUnicodeString(
2810 IN OUT PUNICODE_STRING DestinationString
,
2811 IN PCUNICODE_STRING SourceString
,
2812 IN BOOLEAN AllocateDestinationString
);
2818 IN OUT PACCESS_MASK AccessMask
,
2819 IN PGENERIC_MAPPING GenericMapping
);
2824 RtlVolumeDeviceToDosName(
2825 IN PVOID VolumeDeviceObject
,
2826 OUT PUNICODE_STRING DosName
);
2832 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
2837 RtlVerifyVersionInfo(
2838 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
2840 IN ULONGLONG ConditionMask
);
2846 IN
const PSTRING String1
,
2847 IN
const PSTRING String2
,
2848 BOOLEAN CaseInSensitive
);
2854 OUT PSTRING DestinationString
,
2855 IN
const PSTRING SourceString OPTIONAL
);
2861 IN
const PSTRING String1
,
2862 IN
const PSTRING String2
,
2863 IN BOOLEAN CaseInSensitive
);
2870 IN ULONG Base OPTIONAL
,
2887 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2889 /* Security reference monitor routines */
2891 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2895 SeSinglePrivilegeCheck(
2896 IN LUID PrivilegeValue
,
2897 IN KPROCESSOR_MODE PreviousMode
);
2900 /* ZwXxx Functions */
2902 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2907 IN HANDLE TimerHandle
,
2908 OUT PBOOLEAN CurrentState OPTIONAL
);
2913 OUT PHANDLE TimerHandle
,
2914 IN ACCESS_MASK DesiredAccess
,
2915 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
2916 IN TIMER_TYPE TimerType
);
2921 OUT PHANDLE TimerHandle
,
2922 IN ACCESS_MASK DesiredAccess
,
2923 IN POBJECT_ATTRIBUTES ObjectAttributes
);
2928 ZwSetInformationThread(
2929 IN HANDLE ThreadHandle
,
2930 IN THREADINFOCLASS ThreadInformationClass
,
2931 IN PVOID ThreadInformation
,
2932 IN ULONG ThreadInformationLength
);
2937 IN HANDLE TimerHandle
,
2938 IN PLARGE_INTEGER DueTime
,
2939 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
2940 IN PVOID TimerContext OPTIONAL
,
2941 IN BOOLEAN ResumeTimer
,
2942 IN LONG Period OPTIONAL
,
2943 OUT PBOOLEAN PreviousState OPTIONAL
);
2953 #endif /* _NTDDK_ */