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_DEVICE_HAS_NAME 0x00000040
180 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
181 #define DO_LONG_TERM_REQUESTS 0x00000200
182 #define DO_NEVER_LAST_DEVICE 0x00000400
183 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
184 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
185 #define DO_FORCE_NEITHER_IO 0x00080000
186 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
187 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
188 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
189 #define DO_DISALLOW_EXECUTE 0x00800000
191 #define DRVO_REINIT_REGISTERED 0x00000008
192 #define DRVO_INITIALIZED 0x00000010
193 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
194 #define DRVO_LEGACY_RESOURCES 0x00000040
196 typedef enum _ARBITER_REQUEST_SOURCE
{
197 ArbiterRequestUndefined
= -1,
198 ArbiterRequestLegacyReported
,
199 ArbiterRequestHalReported
,
200 ArbiterRequestLegacyAssigned
,
201 ArbiterRequestPnpDetected
,
202 ArbiterRequestPnpEnumerated
203 } ARBITER_REQUEST_SOURCE
;
205 typedef enum _ARBITER_RESULT
{
206 ArbiterResultUndefined
= -1,
207 ArbiterResultSuccess
,
208 ArbiterResultExternalConflict
,
209 ArbiterResultNullRequest
212 typedef enum _ARBITER_ACTION
{
213 ArbiterActionTestAllocation
,
214 ArbiterActionRetestAllocation
,
215 ArbiterActionCommitAllocation
,
216 ArbiterActionRollbackAllocation
,
217 ArbiterActionQueryAllocatedResources
,
218 ArbiterActionWriteReservedResources
,
219 ArbiterActionQueryConflict
,
220 ArbiterActionQueryArbitrate
,
221 ArbiterActionAddReserved
,
222 ArbiterActionBootAllocation
223 } ARBITER_ACTION
, *PARBITER_ACTION
;
225 typedef struct _ARBITER_CONFLICT_INFO
{
226 PDEVICE_OBJECT OwningObject
;
229 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
231 typedef struct _ARBITER_PARAMETERS
{
234 IN OUT PLIST_ENTRY ArbitrationList
;
235 IN ULONG AllocateFromCount
;
236 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
239 IN OUT PLIST_ENTRY ArbitrationList
;
240 IN ULONG AllocateFromCount
;
241 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
244 IN OUT PLIST_ENTRY ArbitrationList
;
247 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
248 } QueryAllocatedResources
;
250 IN PDEVICE_OBJECT PhysicalDeviceObject
;
251 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
252 OUT PULONG ConflictCount
;
253 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
256 IN PLIST_ENTRY ArbitrationList
;
259 IN PDEVICE_OBJECT ReserveDevice
;
262 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
264 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
266 typedef struct _ARBITER_LIST_ENTRY
{
267 LIST_ENTRY ListEntry
;
268 ULONG AlternativeCount
;
269 PIO_RESOURCE_DESCRIPTOR Alternatives
;
270 PDEVICE_OBJECT PhysicalDeviceObject
;
271 ARBITER_REQUEST_SOURCE RequestSource
;
274 INTERFACE_TYPE InterfaceType
;
277 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
278 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
279 ARBITER_RESULT Result
;
280 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
283 (NTAPI
*PARBITER_HANDLER
)(
284 IN OUT PVOID Context
,
285 IN ARBITER_ACTION Action
,
286 IN OUT PARBITER_PARAMETERS Parameters
);
288 #define ARBITER_PARTIAL 0x00000001
290 typedef struct _ARBITER_INTERFACE
{
294 PINTERFACE_REFERENCE InterfaceReference
;
295 PINTERFACE_DEREFERENCE InterfaceDereference
;
296 PARBITER_HANDLER ArbiterHandler
;
298 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
300 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
301 HalInstalledBusInformation
,
302 HalProfileSourceInformation
,
303 HalInformationClassUnused1
,
305 HalProcessorSpeedInformation
,
306 HalCallbackInformation
,
307 HalMapRegisterInformation
,
308 HalMcaLogInformation
,
309 HalFrameBufferCachingInformation
,
310 HalDisplayBiosInformation
,
311 HalProcessorFeatureInformation
,
312 HalNumaTopologyInterface
,
314 HalCmcLogInformation
,
315 HalCpeLogInformation
,
316 HalQueryMcaInterface
,
317 HalQueryAMLIIllegalIOPortAddresses
,
318 HalQueryMaxHotPlugMemoryAddress
,
319 HalPartitionIpiInterface
,
320 HalPlatformInformation
,
321 HalQueryProfileSourceList
,
322 HalInitLogInformation
,
323 HalFrequencyInformation
,
324 HalProcessorBrandString
,
325 HalHypervisorInformation
,
326 HalPlatformTimerInformation
,
327 HalAcpiAuditInformation
328 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
330 typedef enum _HAL_SET_INFORMATION_CLASS
{
331 HalProfileSourceInterval
,
332 HalProfileSourceInterruptHandler
,
333 HalMcaRegisterDriver
,
334 HalKernelErrorHandler
,
335 HalCmcRegisterDriver
,
336 HalCpeRegisterDriver
,
340 HalGenerateCmcInterrupt
,
341 HalProfileSourceTimerHandler
,
343 HalProfileDpgoSourceInterruptHandler
344 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
346 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
{
347 KPROFILE_SOURCE Source
;
349 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
351 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
{
352 KPROFILE_SOURCE Source
;
355 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
357 typedef struct _MAP_REGISTER_ENTRY
{
359 BOOLEAN WriteToDevice
;
360 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
362 typedef struct _DEBUG_DEVICE_ADDRESS
{
366 PUCHAR TranslatedAddress
;
368 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
370 typedef struct _DEBUG_MEMORY_REQUIREMENTS
{
371 PHYSICAL_ADDRESS Start
;
372 PHYSICAL_ADDRESS MaxEnd
;
373 PVOID VirtualAddress
;
377 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
379 typedef struct _DEBUG_DEVICE_DESCRIPTOR
{
390 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
391 DEBUG_MEMORY_REQUIREMENTS Memory
;
392 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
394 typedef struct _PM_DISPATCH_TABLE
{
398 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
400 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
401 TranslateChildToParent
,
402 TranslateParentToChild
403 } RESOURCE_TRANSLATION_DIRECTION
;
406 (NTAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
407 IN OUT PVOID Context
,
408 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
409 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
410 IN ULONG AlternativesCount OPTIONAL
,
411 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
412 IN PDEVICE_OBJECT PhysicalDeviceObject
,
413 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
416 (NTAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
417 IN PVOID Context OPTIONAL
,
418 IN PIO_RESOURCE_DESCRIPTOR Source
,
419 IN PDEVICE_OBJECT PhysicalDeviceObject
,
420 OUT PULONG TargetCount
,
421 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
423 typedef struct _TRANSLATOR_INTERFACE
{
427 PINTERFACE_REFERENCE InterfaceReference
;
428 PINTERFACE_DEREFERENCE InterfaceDereference
;
429 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
430 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
431 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
434 (FASTCALL
*pHalExamineMBR
)(
435 IN PDEVICE_OBJECT DeviceObject
,
437 IN ULONG MBRTypeIdentifier
,
441 (FASTCALL
*pHalIoReadPartitionTable
)(
442 IN PDEVICE_OBJECT DeviceObject
,
444 IN BOOLEAN ReturnRecognizedPartitions
,
445 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
448 (FASTCALL
*pHalIoSetPartitionInformation
)(
449 IN PDEVICE_OBJECT DeviceObject
,
451 IN ULONG PartitionNumber
,
452 IN ULONG PartitionType
);
455 (FASTCALL
*pHalIoWritePartitionTable
)(
456 IN PDEVICE_OBJECT DeviceObject
,
458 IN ULONG SectorsPerTrack
,
459 IN ULONG NumberOfHeads
,
460 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
463 (FASTCALL
*pHalHandlerForBus
)(
464 IN INTERFACE_TYPE InterfaceType
,
468 (FASTCALL
*pHalReferenceBusHandler
)(
469 IN PBUS_HANDLER BusHandler
);
472 (NTAPI
*pHalQuerySystemInformation
)(
473 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
476 OUT PULONG ReturnedLength
);
479 (NTAPI
*pHalSetSystemInformation
)(
480 IN HAL_SET_INFORMATION_CLASS InformationClass
,
485 (NTAPI
*pHalQueryBusSlots
)(
486 IN PBUS_HANDLER BusHandler
,
488 OUT PULONG SlotNumbers
,
489 OUT PULONG ReturnedLength
);
492 (NTAPI
*pHalInitPnpDriver
)(
496 (NTAPI
*pHalInitPowerManagement
)(
497 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
498 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
500 typedef struct _DMA_ADAPTER
*
501 (NTAPI
*pHalGetDmaAdapter
)(
503 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
504 OUT PULONG NumberOfMapRegisters
);
507 (NTAPI
*pHalGetInterruptTranslator
)(
508 IN INTERFACE_TYPE ParentInterfaceType
,
509 IN ULONG ParentBusNumber
,
510 IN INTERFACE_TYPE BridgeInterfaceType
,
513 OUT PTRANSLATOR_INTERFACE Translator
,
514 OUT PULONG BridgeBusNumber
);
517 (NTAPI
*pHalStartMirroring
)(
521 (NTAPI
*pHalEndMirroring
)(
522 IN ULONG PassNumber
);
525 (NTAPI
*pHalMirrorPhysicalMemory
)(
526 IN PHYSICAL_ADDRESS PhysicalAddress
,
527 IN LARGE_INTEGER NumberOfBytes
);
530 (NTAPI
*pHalMirrorVerify
)(
531 IN PHYSICAL_ADDRESS PhysicalAddress
,
532 IN LARGE_INTEGER NumberOfBytes
);
535 (NTAPI
*pHalEndOfBoot
)(
540 (NTAPI
*pHalTranslateBusAddress
)(
541 IN INTERFACE_TYPE InterfaceType
,
543 IN PHYSICAL_ADDRESS BusAddress
,
544 IN OUT PULONG AddressSpace
,
545 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
549 (NTAPI
*pHalAssignSlotResources
)(
550 IN PUNICODE_STRING RegistryPath
,
551 IN PUNICODE_STRING DriverClassName OPTIONAL
,
552 IN PDRIVER_OBJECT DriverObject
,
553 IN PDEVICE_OBJECT DeviceObject
,
554 IN INTERFACE_TYPE BusType
,
557 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
561 (NTAPI
*pHalHaltSystem
)(
566 (NTAPI
*pHalResetDisplay
)(
571 (NTAPI
*pHalVectorToIDTEntry
)(
576 (NTAPI
*pHalFindBusAddressTranslation
)(
577 IN PHYSICAL_ADDRESS BusAddress
,
578 IN OUT PULONG AddressSpace
,
579 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
580 IN OUT PULONG_PTR Context
,
585 (NTAPI
*pKdSetupPciDeviceForDebugging
)(
586 IN PVOID LoaderBlock OPTIONAL
,
587 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
591 (NTAPI
*pKdReleasePciDeviceForDebugging
)(
592 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
596 (NTAPI
*pKdGetAcpiTablePhase0
)(
597 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
602 (NTAPI
*pHalGetAcpiTable
)(
604 IN PCSTR OemId OPTIONAL
,
605 IN PCSTR OemTableId OPTIONAL
);
609 (NTAPI
*pKdCheckPowerButton
)(
612 #if (NTDDI_VERSION >= NTDDI_VISTA)
615 (NTAPI
*pKdMapPhysicalMemory64
)(
616 IN PHYSICAL_ADDRESS PhysicalAddress
,
617 IN ULONG NumberPages
,
618 IN BOOLEAN FlushCurrentTLB
);
622 (NTAPI
*pKdUnmapVirtualAddress
)(
623 IN PVOID VirtualAddress
,
624 IN ULONG NumberPages
,
625 IN BOOLEAN FlushCurrentTLB
);
629 (NTAPI
*pKdMapPhysicalMemory64
)(
630 IN PHYSICAL_ADDRESS PhysicalAddress
,
631 IN ULONG NumberPages
);
635 (NTAPI
*pKdUnmapVirtualAddress
)(
636 IN PVOID VirtualAddress
,
637 IN ULONG NumberPages
);
643 (NTAPI
*pKdGetPciDataByOffset
)(
652 (NTAPI
*pKdSetPciDataByOffset
)(
660 (NTAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
666 (NTAPI
*PCI_ERROR_HANDLER_CALLBACK
)(
671 (NTAPI
*pHalSetPciErrorHandlerCallback
)(
672 IN PCI_ERROR_HANDLER_CALLBACK Callback
);
674 #if 1 /* Not present in WDK 7600 */
676 (FASTCALL
*pHalIoAssignDriveLetters
)(
677 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
678 IN PSTRING NtDeviceName
,
679 OUT PUCHAR NtSystemPath
,
680 OUT PSTRING NtSystemPathString
);
685 pHalQuerySystemInformation HalQuerySystemInformation
;
686 pHalSetSystemInformation HalSetSystemInformation
;
687 pHalQueryBusSlots HalQueryBusSlots
;
689 pHalExamineMBR HalExamineMBR
;
690 #if 1 /* Not present in WDK 7600 */
691 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
693 pHalIoReadPartitionTable HalIoReadPartitionTable
;
694 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
695 pHalIoWritePartitionTable HalIoWritePartitionTable
;
696 pHalHandlerForBus HalReferenceHandlerForBus
;
697 pHalReferenceBusHandler HalReferenceBusHandler
;
698 pHalReferenceBusHandler HalDereferenceBusHandler
;
699 pHalInitPnpDriver HalInitPnpDriver
;
700 pHalInitPowerManagement HalInitPowerManagement
;
701 pHalGetDmaAdapter HalGetDmaAdapter
;
702 pHalGetInterruptTranslator HalGetInterruptTranslator
;
703 pHalStartMirroring HalStartMirroring
;
704 pHalEndMirroring HalEndMirroring
;
705 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
706 pHalEndOfBoot HalEndOfBoot
;
707 pHalMirrorVerify HalMirrorVerify
;
708 pHalGetAcpiTable HalGetCachedAcpiTable
;
709 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback
;
711 pHalGetErrorCapList HalGetErrorCapList
;
712 pHalInjectError HalInjectError
;
714 } HAL_DISPATCH
, *PHAL_DISPATCH
;
716 /* GCC/MSVC and WDK compatible declaration */
717 extern NTKERNELAPI HAL_DISPATCH HalDispatchTable
;
719 #if defined(_NTOSKRNL_) || defined(_BLDR_)
720 #define HALDISPATCH (&HalDispatchTable)
722 /* This is a WDK compatibility definition */
723 #define HalDispatchTable (&HalDispatchTable)
724 #define HALDISPATCH HalDispatchTable
727 #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
728 #define HalDispatchTableVersion HALDISPATCH->Version
729 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
730 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
731 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
732 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
733 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
734 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
735 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
736 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
737 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
738 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
739 #define HalStartMirroring HALDISPATCH->HalStartMirroring
740 #define HalEndMirroring HALDISPATCH->HalEndMirroring
741 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
742 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
743 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
745 typedef struct _FILE_ALIGNMENT_INFORMATION
{
746 ULONG AlignmentRequirement
;
747 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
749 typedef struct _FILE_NAME_INFORMATION
{
750 ULONG FileNameLength
;
752 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
755 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
756 ULONG FileAttributes
;
758 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
760 typedef struct _FILE_DISPOSITION_INFORMATION
{
762 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
764 typedef struct _FILE_END_OF_FILE_INFORMATION
{
765 LARGE_INTEGER EndOfFile
;
766 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
768 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
769 LARGE_INTEGER ValidDataLength
;
770 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
772 typedef union _FILE_SEGMENT_ELEMENT
{
775 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
777 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
779 #if (NTDDI_VERSION >= NTDDI_WIN2K)
784 IN ULONGLONG ConditionMask
,
789 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
790 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
791 (TypeBitMask), (ComparisonType)))
793 /* RtlVerifyVersionInfo() TypeMask */
795 #define VER_MINORVERSION 0x0000001
796 #define VER_MAJORVERSION 0x0000002
797 #define VER_BUILDNUMBER 0x0000004
798 #define VER_PLATFORMID 0x0000008
799 #define VER_SERVICEPACKMINOR 0x0000010
800 #define VER_SERVICEPACKMAJOR 0x0000020
801 #define VER_SUITENAME 0x0000040
802 #define VER_PRODUCT_TYPE 0x0000080
804 /* RtlVerifyVersionInfo() ComparisonType */
807 #define VER_GREATER 2
808 #define VER_GREATER_EQUAL 3
810 #define VER_LESS_EQUAL 5
814 #define VER_CONDITION_MASK 7
815 #define VER_NUM_BITS_PER_CONDITION_MASK 3
817 typedef struct _IMAGE_INFO
{
818 _ANONYMOUS_UNION
union {
820 _ANONYMOUS_STRUCT
struct {
821 ULONG ImageAddressingMode
:8;
822 ULONG SystemModeImage
:1;
823 ULONG ImageMappedToAllPids
:1;
824 ULONG ExtendedInfoPresent
:1;
831 ULONG ImageSectionNumber
;
832 } IMAGE_INFO
, *PIMAGE_INFO
;
834 #define IMAGE_ADDRESSING_MODE_32BIT 3
836 typedef enum _BUS_DATA_TYPE
{
837 ConfigurationSpaceUndefined
= -1,
849 SgiInternalConfiguration
,
851 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
853 typedef struct _NT_TIB
{
854 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
858 _ANONYMOUS_UNION
union {
862 PVOID ArbitraryUserPointer
;
863 struct _NT_TIB
*Self
;
866 typedef struct _NT_TIB32
{
871 __GNU_EXTENSION
union {
875 ULONG ArbitraryUserPointer
;
877 } NT_TIB32
,*PNT_TIB32
;
879 typedef struct _NT_TIB64
{
880 ULONG64 ExceptionList
;
883 ULONG64 SubSystemTib
;
884 __GNU_EXTENSION
union {
888 ULONG64 ArbitraryUserPointer
;
890 } NT_TIB64
,*PNT_TIB64
;
892 typedef enum _PROCESSINFOCLASS
{
893 ProcessBasicInformation
,
899 ProcessRaisePriority
,
901 ProcessExceptionPort
,
903 ProcessLdtInformation
,
905 ProcessDefaultHardErrorMode
,
906 ProcessIoPortHandlers
,
907 ProcessPooledUsageAndLimits
,
908 ProcessWorkingSetWatch
,
910 ProcessEnableAlignmentFaultFixup
,
911 ProcessPriorityClass
,
912 ProcessWx86Information
,
915 ProcessPriorityBoost
,
917 ProcessSessionInformation
,
918 ProcessForegroundInformation
,
919 ProcessWow64Information
,
920 ProcessImageFileName
,
921 ProcessLUIDDeviceMapsEnabled
,
922 ProcessBreakOnTermination
,
923 ProcessDebugObjectHandle
,
925 ProcessHandleTracing
,
928 ProcessTlsInformation
,
930 ProcessImageInformation
,
933 ProcessInstrumentationCallback
,
934 ProcessThreadStackAllocation
,
935 ProcessWorkingSetWatchEx
,
936 ProcessImageFileNameWin32
,
937 ProcessImageFileMapping
,
938 ProcessAffinityUpdateMode
,
939 ProcessMemoryAllocationMode
,
940 ProcessGroupInformation
,
941 ProcessTokenVirtualizationEnabled
,
942 ProcessConsoleHostProcess
,
943 ProcessWindowInformation
,
947 typedef enum _THREADINFOCLASS
{
948 ThreadBasicInformation
,
953 ThreadImpersonationToken
,
954 ThreadDescriptorTableEntry
,
955 ThreadEnableAlignmentFaultFixup
,
956 ThreadEventPair_Reusable
,
957 ThreadQuerySetWin32StartAddress
,
959 ThreadPerformanceCount
,
961 ThreadIdealProcessor
,
963 ThreadSetTlsArrayAddress
,
965 ThreadHideFromDebugger
,
966 ThreadBreakOnTermination
,
967 ThreadSwitchLegacyState
,
969 ThreadLastSystemCall
,
973 ThreadActualBasePriority
,
974 ThreadTebInformation
,
978 ThreadGroupInformation
,
979 ThreadUmsInformation
,
980 ThreadCounterProfiling
,
981 ThreadIdealProcessorEx
,
985 typedef struct _PROCESS_BASIC_INFORMATION
{
987 struct _PEB
*PebBaseAddress
;
988 ULONG_PTR AffinityMask
;
989 KPRIORITY BasePriority
;
990 ULONG_PTR UniqueProcessId
;
991 ULONG_PTR InheritedFromUniqueProcessId
;
992 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
994 typedef struct _PROCESS_WS_WATCH_INFORMATION
{
997 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
999 typedef struct _PROCESS_DEVICEMAP_INFORMATION
{
1000 __GNU_EXTENSION
union {
1002 HANDLE DirectoryHandle
;
1006 UCHAR DriveType
[32];
1009 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
1011 typedef struct _KERNEL_USER_TIMES
{
1012 LARGE_INTEGER CreateTime
;
1013 LARGE_INTEGER ExitTime
;
1014 LARGE_INTEGER KernelTime
;
1015 LARGE_INTEGER UserTime
;
1016 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1018 typedef struct _PROCESS_ACCESS_TOKEN
{
1021 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1023 typedef struct _PROCESS_SESSION_INFORMATION
{
1025 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1027 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
1028 IoQueryDeviceIdentifier
= 0,
1029 IoQueryDeviceConfigurationData
,
1030 IoQueryDeviceComponentInformation
,
1031 IoQueryDeviceMaxData
1032 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
1034 typedef struct _DISK_SIGNATURE
{
1035 ULONG PartitionStyle
;
1036 _ANONYMOUS_UNION
union {
1045 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
1048 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
1051 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
1052 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
1053 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
1054 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
1056 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1057 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1058 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1059 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1060 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1063 (NTAPI
*PTIMER_APC_ROUTINE
)(
1064 IN PVOID TimerContext
,
1065 IN ULONG TimerLowValue
,
1066 IN LONG TimerHighValue
);
1068 typedef struct _KUSER_SHARED_DATA
1070 ULONG TickCountLowDeprecated
;
1071 ULONG TickCountMultiplier
;
1072 volatile KSYSTEM_TIME InterruptTime
;
1073 volatile KSYSTEM_TIME SystemTime
;
1074 volatile KSYSTEM_TIME TimeZoneBias
;
1075 USHORT ImageNumberLow
;
1076 USHORT ImageNumberHigh
;
1077 WCHAR NtSystemRoot
[260];
1078 ULONG MaxStackTraceDepth
;
1079 ULONG CryptoExponent
;
1081 ULONG LargePageMinimum
;
1083 NT_PRODUCT_TYPE NtProductType
;
1084 BOOLEAN ProductTypeIsValid
;
1085 ULONG NtMajorVersion
;
1086 ULONG NtMinorVersion
;
1087 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
1090 volatile ULONG TimeSlip
;
1091 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
1092 ULONG AltArchitecturePad
[1];
1093 LARGE_INTEGER SystemExpirationDate
;
1095 BOOLEAN KdDebuggerEnabled
;
1096 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
1097 UCHAR NXSupportPolicy
;
1099 volatile ULONG ActiveConsoleId
;
1100 volatile ULONG DismountCount
;
1101 ULONG ComPlusPackage
;
1102 ULONG LastSystemRITEventTickCount
;
1103 ULONG NumberOfPhysicalPages
;
1104 BOOLEAN SafeBootMode
;
1105 #if (NTDDI_VERSION >= NTDDI_WIN7)
1109 UCHAR TscQpcEnabled
:1;
1110 UCHAR TscQpcSpareFlag
:1;
1111 UCHAR TscQpcShift
:6;
1116 #if (NTDDI_VERSION >= NTDDI_VISTA)
1118 ULONG SharedDataFlags
;
1120 ULONG DbgErrorPortPresent
:1;
1121 ULONG DbgElevationEnabled
:1;
1122 ULONG DbgVirtEnabled
:1;
1123 ULONG DbgInstallerDetectEnabled
:1;
1124 ULONG DbgSystemDllRelocated
:1;
1125 ULONG DbgDynProcessorEnabled
:1;
1126 ULONG DbgSEHValidationEnabled
:1;
1133 ULONG DataFlagsPad
[1];
1134 ULONGLONG TestRetInstruction
;
1136 ULONG SystemCallReturn
;
1137 ULONGLONG SystemCallPad
[3];
1138 _ANONYMOUS_UNION
union {
1139 volatile KSYSTEM_TIME TickCount
;
1140 volatile ULONG64 TickCountQuad
;
1141 _ANONYMOUS_STRUCT
struct {
1142 ULONG ReservedTickCountOverlay
[3];
1143 ULONG TickCountPad
[1];
1148 #if (NTDDI_VERSION >= NTDDI_WS03)
1149 LONGLONG ConsoleSessionForegroundProcessId
;
1150 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
1152 #if (NTDDI_VERSION >= NTDDI_VISTA)
1153 #if (NTDDI_VERSION >= NTDDI_WIN7)
1154 USHORT UserModeGlobalLogger
[16];
1156 USHORT UserModeGlobalLogger
[8];
1157 ULONG HeapTracingPid
[2];
1158 ULONG CritSecTracingPid
[2];
1160 ULONG ImageFileExecutionOptions
;
1161 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
1162 ULONG LangGenerationCount
;
1164 /* 4 bytes padding */
1166 ULONGLONG Reserved5
;
1167 volatile ULONG64 InterruptTimeBias
;
1169 #if (NTDDI_VERSION >= NTDDI_WIN7)
1170 volatile ULONG64 TscQpcBias
;
1171 volatile ULONG ActiveProcessorCount
;
1172 volatile USHORT ActiveGroupCount
;
1174 volatile ULONG AitSamplingValue
;
1175 volatile ULONG AppCompatFlag
;
1176 ULONGLONG SystemDllNativeRelocation
;
1177 ULONG SystemDllWowRelocation
;
1179 XSTATE_CONFIGURATION XState
;
1181 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
1183 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1184 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1185 extern NTKERNELAPI ULONG MmUserProbeAddress
;
1190 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1191 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1192 #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
1193 #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
1194 extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_
;
1196 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1198 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1199 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
1200 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
1201 #if !defined (_X86PAE_)
1202 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
1204 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
1207 #define KeGetPcr() PCR
1209 #define KERNEL_STACK_SIZE 12288
1210 #define KERNEL_LARGE_STACK_SIZE 61440
1211 #define KERNEL_LARGE_STACK_COMMIT 12288
1213 #define SIZE_OF_80387_REGISTERS 80
1215 #define PCR_MINOR_VERSION 1
1216 #define PCR_MAJOR_VERSION 1
1218 #if !defined(RC_INVOKED)
1220 #define CONTEXT_i386 0x10000
1221 #define CONTEXT_i486 0x10000
1222 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
1223 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
1224 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
1225 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
1226 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
1227 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
1229 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
1231 #endif /* !defined(RC_INVOKED) */
1233 typedef struct _KPCR
{
1237 struct _EXCEPTION_REGISTRATION_RECORD
*Used_ExceptionList
;
1238 PVOID Used_StackBase
;
1241 ULONG ContextSwitches
;
1242 KAFFINITY SetMemberCopy
;
1246 struct _KPCR
*SelfPcr
;
1247 struct _KPRCB
*Prcb
;
1252 PVOID KdVersionBlock
;
1253 struct _KIDTENTRY
*IDT
;
1254 struct _KGDTENTRY
*GDT
;
1256 USHORT MajorVersion
;
1257 USHORT MinorVersion
;
1258 KAFFINITY SetMember
;
1259 ULONG StallScaleFactor
;
1263 UCHAR SecondLevelCacheAssociativity
;
1265 ULONG KernelReserved
[14];
1266 ULONG SecondLevelCacheSize
;
1267 ULONG HalReserved
[16];
1272 KeGetCurrentProcessorNumber(VOID
)
1274 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
1277 typedef struct _FLOATING_SAVE_AREA
{
1282 ULONG ErrorSelector
;
1285 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
1287 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
1289 #include "pshpack4.h"
1290 typedef struct _CONTEXT
{
1298 FLOATING_SAVE_AREA FloatSave
;
1315 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
1317 #include "poppack.h"
1323 #define PTI_SHIFT 12L
1324 #define PDI_SHIFT 21L
1325 #define PPI_SHIFT 30L
1326 #define PXI_SHIFT 39L
1327 #define PTE_PER_PAGE 512
1328 #define PDE_PER_PAGE 512
1329 #define PPE_PER_PAGE 512
1330 #define PXE_PER_PAGE 512
1331 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
1332 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
1333 #define PPI_MASK (PPE_PER_PAGE - 1)
1334 #define PXI_MASK (PXE_PER_PAGE - 1)
1336 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
1337 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
1338 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
1339 #define PDE_BASE 0xFFFFF6FB40000000ULL
1340 #define PTE_BASE 0xFFFFF68000000000ULL
1341 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
1342 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
1343 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
1344 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
1346 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1347 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1348 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1349 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1350 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
1351 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
1353 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
1403 /* Floating point */
1405 XMM_SAVE_AREA32 FltSave
;
1429 M128A VectorRegister
[26];
1430 ULONG64 VectorControl
;
1433 ULONG64 DebugControl
;
1434 ULONG64 LastBranchToRip
;
1435 ULONG64 LastBranchFromRip
;
1436 ULONG64 LastExceptionToRip
;
1437 ULONG64 LastExceptionFromRip
;
1440 typedef struct _KPCR
1442 _ANONYMOUS_UNION
union
1445 _ANONYMOUS_STRUCT
struct
1447 union _KGDTENTRY64
*GdtBase
;
1448 struct _KTSS64
*TssBase
;
1451 struct _KPRCB
*CurrentPrcb
;
1452 PKSPIN_LOCK_QUEUE LockArray
;
1456 union _KIDTENTRY64
*IdtBase
;
1459 UCHAR SecondLevelCacheAssociativity
;
1460 UCHAR ObsoleteNumber
;
1463 USHORT MajorVersion
;
1464 USHORT MinorVersion
;
1465 ULONG StallScaleFactor
;
1467 ULONG KernelReserved
[15];
1468 ULONG SecondLevelCacheSize
;
1469 ULONG HalReserved
[16];
1471 PVOID KdVersionBlock
;
1473 ULONG PcrAlign1
[24];
1480 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
1485 KeGetCurrentProcessorNumber(VOID
)
1487 return (ULONG
)__readgsword(0x184);
1490 #if !defined(RC_INVOKED)
1492 #define CONTEXT_AMD64 0x100000
1494 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
1495 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
1496 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
1497 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
1498 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
1500 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1501 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1503 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
1505 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1506 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1507 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1508 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1510 #endif /* RC_INVOKED */
1512 #endif /* _AMD64_ */
1514 typedef enum _INTERLOCKED_RESULT
{
1515 ResultNegative
= RESULT_NEGATIVE
,
1516 ResultZero
= RESULT_ZERO
,
1517 ResultPositive
= RESULT_POSITIVE
1518 } INTERLOCKED_RESULT
;
1520 typedef struct _OSVERSIONINFOA
{
1521 ULONG dwOSVersionInfoSize
;
1522 ULONG dwMajorVersion
;
1523 ULONG dwMinorVersion
;
1524 ULONG dwBuildNumber
;
1526 CHAR szCSDVersion
[128];
1527 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
1529 typedef struct _OSVERSIONINFOW
{
1530 ULONG dwOSVersionInfoSize
;
1531 ULONG dwMajorVersion
;
1532 ULONG dwMinorVersion
;
1533 ULONG dwBuildNumber
;
1535 WCHAR szCSDVersion
[128];
1536 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
1538 typedef struct _OSVERSIONINFOEXA
{
1539 ULONG dwOSVersionInfoSize
;
1540 ULONG dwMajorVersion
;
1541 ULONG dwMinorVersion
;
1542 ULONG dwBuildNumber
;
1544 CHAR szCSDVersion
[128];
1545 USHORT wServicePackMajor
;
1546 USHORT wServicePackMinor
;
1550 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
1552 typedef struct _OSVERSIONINFOEXW
{
1553 ULONG dwOSVersionInfoSize
;
1554 ULONG dwMajorVersion
;
1555 ULONG dwMinorVersion
;
1556 ULONG dwBuildNumber
;
1558 WCHAR szCSDVersion
[128];
1559 USHORT wServicePackMajor
;
1560 USHORT wServicePackMinor
;
1564 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
1567 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
1568 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
1569 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
1570 typedef OSVERSIONINFOW OSVERSIONINFO
;
1571 typedef POSVERSIONINFOW POSVERSIONINFO
;
1572 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
1574 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
1575 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
1576 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
1577 typedef OSVERSIONINFOA OSVERSIONINFO
;
1578 typedef POSVERSIONINFOA POSVERSIONINFO
;
1579 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
1580 #endif /* UNICODE */
1582 /* Executive Types */
1584 #define PROTECTED_POOL 0x80000000
1586 typedef struct _ZONE_SEGMENT_HEADER
{
1587 SINGLE_LIST_ENTRY SegmentList
;
1589 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
1591 typedef struct _ZONE_HEADER
{
1592 SINGLE_LIST_ENTRY FreeList
;
1593 SINGLE_LIST_ENTRY SegmentList
;
1595 ULONG TotalSegmentSize
;
1596 } ZONE_HEADER
, *PZONE_HEADER
;
1598 /* Executive Functions */
1600 static __inline PVOID
1602 IN PZONE_HEADER Zone
)
1604 if (Zone
->FreeList
.Next
)
1605 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
1606 return (PVOID
) Zone
->FreeList
.Next
;
1609 static __inline PVOID
1611 IN PZONE_HEADER Zone
,
1614 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
1615 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
1616 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
1621 * ExInterlockedAllocateFromZone(
1622 * IN PZONE_HEADER Zone,
1623 * IN PKSPIN_LOCK Lock)
1625 #define ExInterlockedAllocateFromZone(Zone, Lock) \
1626 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
1629 * ExInterlockedFreeToZone(
1630 * IN PZONE_HEADER Zone,
1632 * IN PKSPIN_LOCK Lock);
1634 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
1635 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
1640 * IN PZONE_HEADER Zone)
1642 #define ExIsFullZone(Zone) \
1643 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
1646 * ExIsObjectInFirstZoneSegment(
1647 * IN PZONE_HEADER Zone,
1650 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
1651 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
1652 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
1653 (Zone)->TotalSegmentSize)) )
1655 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
1656 #define ExAcquireResourceShared ExAcquireResourceSharedLite
1657 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
1658 #define ExDeleteResource ExDeleteResourceLite
1659 #define ExInitializeResource ExInitializeResourceLite
1660 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
1661 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
1662 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
1663 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
1665 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1671 IN OUT PZONE_HEADER Zone
,
1672 IN OUT PVOID Segment
,
1673 IN ULONG SegmentSize
);
1679 OUT PZONE_HEADER Zone
,
1681 IN OUT PVOID InitialSegment
,
1682 IN ULONG InitialSegmentSize
);
1687 ExInterlockedExtendZone(
1688 IN OUT PZONE_HEADER Zone
,
1689 IN OUT PVOID Segment
,
1690 IN ULONG SegmentSize
,
1691 IN OUT PKSPIN_LOCK Lock
);
1703 ExRaiseAccessViolation(
1710 ExRaiseDatatypeMisalignment(
1720 Exfi386InterlockedIncrementLong(
1721 IN OUT LONG
volatile *Addend
);
1726 Exfi386InterlockedDecrementLong(
1732 Exfi386InterlockedExchangeUlong(
1740 typedef enum _CONFIGURATION_TYPE
{
1743 FloatingPointProcessor
,
1753 MultiFunctionAdapter
,
1767 FloppyDiskPeripheral
,
1780 RealModeIrqRoutingTable
,
1781 RealModePCIEnumeration
,
1783 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
1784 #endif /* !_ARC_DDK_ */
1786 typedef struct _CONTROLLER_OBJECT
{
1789 PVOID ControllerExtension
;
1790 KDEVICE_QUEUE DeviceWaitQueue
;
1792 LARGE_INTEGER Spare2
;
1793 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
1795 typedef struct _CONFIGURATION_INFORMATION
{
1800 ULONG ScsiPortCount
;
1802 ULONG ParallelCount
;
1803 BOOLEAN AtDiskPrimaryAddressClaimed
;
1804 BOOLEAN AtDiskSecondaryAddressClaimed
;
1806 ULONG MediumChangerCount
;
1807 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
1811 (NTAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
1813 IN PUNICODE_STRING PathName
,
1814 IN INTERFACE_TYPE BusType
,
1816 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
1817 IN CONFIGURATION_TYPE ControllerType
,
1818 IN ULONG ControllerNumber
,
1819 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
1820 IN CONFIGURATION_TYPE PeripheralType
,
1821 IN ULONG PeripheralNumber
,
1822 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
1826 (NTAPI DRIVER_REINITIALIZE
)(
1827 IN
struct _DRIVER_OBJECT
*DriverObject
,
1831 typedef DRIVER_REINITIALIZE
*PDRIVER_REINITIALIZE
;
1833 /** Filesystem runtime library routines **/
1835 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1839 FsRtlIsTotalDeviceFailure(
1840 IN NTSTATUS Status
);
1843 /* Hardware Abstraction Layer Types */
1846 (NTAPI
*PciPin2Line
)(
1847 IN
struct _BUS_HANDLER
*BusHandler
,
1848 IN
struct _BUS_HANDLER
*RootHandler
,
1849 IN PCI_SLOT_NUMBER SlotNumber
,
1850 IN PPCI_COMMON_CONFIG PciData
);
1853 (NTAPI
*PciLine2Pin
)(
1854 IN
struct _BUS_HANDLER
*BusHandler
,
1855 IN
struct _BUS_HANDLER
*RootHandler
,
1856 IN PCI_SLOT_NUMBER SlotNumber
,
1857 IN PPCI_COMMON_CONFIG PciNewData
,
1858 IN PPCI_COMMON_CONFIG PciOldData
);
1861 (NTAPI
*PciReadWriteConfig
)(
1862 IN
struct _BUS_HANDLER
*BusHandler
,
1863 IN PCI_SLOT_NUMBER Slot
,
1868 #define PCI_DATA_TAG ' ICP'
1869 #define PCI_DATA_VERSION 1
1871 typedef struct _PCIBUSDATA
{
1874 PciReadWriteConfig ReadConfig
;
1875 PciReadWriteConfig WriteConfig
;
1876 PciPin2Line Pin2Line
;
1877 PciLine2Pin Line2Pin
;
1878 PCI_SLOT_NUMBER ParentSlot
;
1880 } PCIBUSDATA
, *PPCIBUSDATA
;
1882 /* Hardware Abstraction Layer Functions */
1884 #if !defined(NO_LEGACY_DRIVERS)
1886 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1891 HalAssignSlotResources(
1892 IN PUNICODE_STRING RegistryPath
,
1893 IN PUNICODE_STRING DriverClassName
,
1894 IN PDRIVER_OBJECT DriverObject
,
1895 IN PDEVICE_OBJECT DeviceObject
,
1896 IN INTERFACE_TYPE BusType
,
1898 IN ULONG SlotNumber
,
1899 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
1904 HalGetInterruptVector(
1905 IN INTERFACE_TYPE InterfaceType
,
1907 IN ULONG BusInterruptLevel
,
1908 IN ULONG BusInterruptVector
,
1910 OUT PKAFFINITY Affinity
);
1916 IN BUS_DATA_TYPE BusDataType
,
1918 IN ULONG SlotNumber
,
1924 #endif /* !defined(NO_LEGACY_DRIVERS) */
1926 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1932 IN PDEVICE_DESCRIPTION DeviceDescription
,
1933 IN OUT PULONG NumberOfMapRegisters
);
1939 IN ULONG Frequency
);
1944 IN PADAPTER_OBJECT DmaAdapter
);
1949 HalAcquireDisplayOwnership(
1950 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
1956 IN BUS_DATA_TYPE BusDataType
,
1958 IN ULONG SlotNumber
,
1965 HalGetBusDataByOffset(
1966 IN BUS_DATA_TYPE BusDataType
,
1968 IN ULONG SlotNumber
,
1976 HalSetBusDataByOffset(
1977 IN BUS_DATA_TYPE BusDataType
,
1979 IN ULONG SlotNumber
,
1987 HalTranslateBusAddress(
1988 IN INTERFACE_TYPE InterfaceType
,
1990 IN PHYSICAL_ADDRESS BusAddress
,
1991 IN OUT PULONG AddressSpace
,
1992 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
1996 #if (NTDDI_VERSION >= NTDDI_WINXP)
2001 IN PDEVICE_OBJECT DeviceObject
,
2002 IN ULONG SectorSize
,
2003 IN ULONG MBRTypeIdentifier
,
2007 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
2011 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2012 //DECLSPEC_DEPRECATED_DDK
2016 IoFreeAdapterChannel(
2017 IN PADAPTER_OBJECT AdapterObject
);
2019 //DECLSPEC_DEPRECATED_DDK
2023 IoFlushAdapterBuffers(
2024 IN PADAPTER_OBJECT AdapterObject
,
2026 IN PVOID MapRegisterBase
,
2029 IN BOOLEAN WriteToDevice
);
2031 //DECLSPEC_DEPRECATED_DDK
2036 IN PADAPTER_OBJECT AdapterObject
,
2037 IN PVOID MapRegisterBase
,
2038 IN ULONG NumberOfMapRegisters
);
2040 //DECLSPEC_DEPRECATED_DDK
2044 HalAllocateCommonBuffer(
2045 IN PADAPTER_OBJECT AdapterObject
,
2047 OUT PPHYSICAL_ADDRESS LogicalAddress
,
2048 IN BOOLEAN CacheEnabled
);
2050 //DECLSPEC_DEPRECATED_DDK
2054 HalFreeCommonBuffer(
2055 IN PADAPTER_OBJECT AdapterObject
,
2057 IN PHYSICAL_ADDRESS LogicalAddress
,
2058 IN PVOID VirtualAddress
,
2059 IN BOOLEAN CacheEnabled
);
2061 //DECLSPEC_DEPRECATED_DDK
2066 IN PADAPTER_OBJECT AdapterObject
);
2071 HalAllocateAdapterChannel(
2072 IN PADAPTER_OBJECT AdapterObject
,
2073 IN PWAIT_CONTEXT_BLOCK Wcb
,
2074 IN ULONG NumberOfMapRegisters
,
2075 IN PDRIVER_CONTROL ExecutionRoutine
);
2077 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2079 #endif /* defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) */
2081 /* I/O Manager Functions */
2084 * VOID IoAssignArcName(
2085 * IN PUNICODE_STRING ArcName,
2086 * IN PUNICODE_STRING DeviceName);
2088 #define IoAssignArcName(_ArcName, _DeviceName) ( \
2089 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
2093 * IoDeassignArcName(
2094 * IN PUNICODE_STRING ArcName)
2096 #define IoDeassignArcName IoDeleteSymbolicLink
2098 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2100 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
2104 IoAllocateAdapterChannel(
2105 IN PADAPTER_OBJECT AdapterObject
,
2106 IN PDEVICE_OBJECT DeviceObject
,
2107 IN ULONG NumberOfMapRegisters
,
2108 IN PDRIVER_CONTROL ExecutionRoutine
,
2112 //DECLSPEC_DEPRECATED_DDK
2117 IN PADAPTER_OBJECT AdapterObject
,
2119 IN PVOID MapRegisterBase
,
2121 IN OUT PULONG Length
,
2122 IN BOOLEAN WriteToDevice
);
2127 IoAllocateController(
2128 IN PCONTROLLER_OBJECT ControllerObject
,
2129 IN PDEVICE_OBJECT DeviceObject
,
2130 IN PDRIVER_CONTROL ExecutionRoutine
,
2131 IN PVOID Context OPTIONAL
);
2143 IN PCONTROLLER_OBJECT ControllerObject
);
2149 IN PCONTROLLER_OBJECT ControllerObject
);
2152 PCONFIGURATION_INFORMATION
2154 IoGetConfigurationInformation(
2160 IoGetDeviceToVerify(
2161 IN PETHREAD Thread
);
2167 IN PDEVICE_OBJECT DeviceObject
,
2168 IN PFILE_OBJECT FileObject
);
2173 IoGetFileObjectGenericMapping(
2179 IoMakeAssociatedIrp(
2181 IN CCHAR StackSize
);
2186 IoQueryDeviceDescription(
2187 IN PINTERFACE_TYPE BusType OPTIONAL
,
2188 IN PULONG BusNumber OPTIONAL
,
2189 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
2190 IN PULONG ControllerNumber OPTIONAL
,
2191 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
2192 IN PULONG PeripheralNumber OPTIONAL
,
2193 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
2194 IN OUT PVOID Context OPTIONAL
);
2201 IN PVPB Vpb OPTIONAL
,
2202 IN PDEVICE_OBJECT RealDeviceObject
);
2207 IoRaiseInformationalHardError(
2208 IN NTSTATUS ErrorStatus
,
2209 IN PUNICODE_STRING String OPTIONAL
,
2210 IN PKTHREAD Thread OPTIONAL
);
2215 IoRegisterBootDriverReinitialization(
2216 IN PDRIVER_OBJECT DriverObject
,
2217 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2218 IN PVOID Context OPTIONAL
);
2223 IoRegisterDriverReinitialization(
2224 IN PDRIVER_OBJECT DriverObject
,
2225 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2226 IN PVOID Context OPTIONAL
);
2231 IoAttachDeviceByPointer(
2232 IN PDEVICE_OBJECT SourceDevice
,
2233 IN PDEVICE_OBJECT TargetDevice
);
2238 IoReportDetectedDevice(
2239 IN PDRIVER_OBJECT DriverObject
,
2240 IN INTERFACE_TYPE LegacyBusType
,
2242 IN ULONG SlotNumber
,
2243 IN PCM_RESOURCE_LIST ResourceList OPTIONAL
,
2244 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
2245 IN BOOLEAN ResourceAssigned
,
2246 IN OUT PDEVICE_OBJECT
*DeviceObject
);
2251 IoReportResourceForDetection(
2252 IN PDRIVER_OBJECT DriverObject
,
2253 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2254 IN ULONG DriverListSize OPTIONAL
,
2255 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2256 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2257 IN ULONG DeviceListSize OPTIONAL
,
2258 OUT PBOOLEAN ConflictDetected
);
2263 IoReportResourceUsage(
2264 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2265 IN PDRIVER_OBJECT DriverObject
,
2266 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2267 IN ULONG DriverListSize OPTIONAL
,
2268 IN PDEVICE_OBJECT DeviceObject
,
2269 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2270 IN ULONG DeviceListSize OPTIONAL
,
2271 IN BOOLEAN OverrideConflict
,
2272 OUT PBOOLEAN ConflictDetected
);
2277 IoSetHardErrorOrVerifyDevice(
2279 IN PDEVICE_OBJECT DeviceObject
);
2285 IN PUNICODE_STRING RegistryPath
,
2286 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2287 IN PDRIVER_OBJECT DriverObject
,
2288 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2289 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL
,
2290 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
2292 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2294 #if (NTDDI_VERSION >= NTDDI_WINXP)
2300 IN PDEVICE_OBJECT DeviceObject
,
2301 IN
struct _CREATE_DISK
* Disk OPTIONAL
);
2306 IoReadDiskSignature(
2307 IN PDEVICE_OBJECT DeviceObject
,
2308 IN ULONG BytesPerSector
,
2309 OUT PDISK_SIGNATURE Signature
);
2314 IoReadPartitionTable(
2315 IN PDEVICE_OBJECT DeviceObject
,
2316 IN ULONG SectorSize
,
2317 IN BOOLEAN ReturnRecognizedPartitions
,
2318 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2323 IoReadPartitionTableEx(
2324 IN PDEVICE_OBJECT DeviceObject
,
2325 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
2330 IoSetPartitionInformation(
2331 IN PDEVICE_OBJECT DeviceObject
,
2332 IN ULONG SectorSize
,
2333 IN ULONG PartitionNumber
,
2334 IN ULONG PartitionType
);
2339 IoSetPartitionInformationEx(
2340 IN PDEVICE_OBJECT DeviceObject
,
2341 IN ULONG PartitionNumber
,
2342 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
2347 IoSetSystemPartition(
2348 IN PUNICODE_STRING VolumeNameString
);
2353 IoSetThreadHardErrorMode(
2354 IN BOOLEAN EnableHardErrors
);
2359 IoVerifyPartitionTable(
2360 IN PDEVICE_OBJECT DeviceObject
,
2361 IN BOOLEAN FixErrors
);
2366 IoVolumeDeviceToDosName(
2367 IN PVOID VolumeDeviceObject
,
2368 OUT PUNICODE_STRING DosName
);
2373 IoWritePartitionTable(
2374 IN PDEVICE_OBJECT DeviceObject
,
2375 IN ULONG SectorSize
,
2376 IN ULONG SectorsPerTrack
,
2377 IN ULONG NumberOfHeads
,
2378 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2383 IoWritePartitionTableEx(
2384 IN PDEVICE_OBJECT DeviceObject
,
2385 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*DriveLayout
);
2387 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2389 /** Kernel debugger routines **/
2397 IN ULONG MaximumResponseLength
);
2399 /* Kernel Functions */
2401 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2408 IN ULONG BugCheckCode
);
2414 IN OUT PRKEVENT Event
,
2415 IN KPRIORITY Increment
,
2421 KeSetBasePriorityThread(
2422 IN OUT PRKTHREAD Thread
,
2427 /* Memory Manager Types */
2429 typedef struct _PHYSICAL_MEMORY_RANGE
{
2430 PHYSICAL_ADDRESS BaseAddress
;
2431 LARGE_INTEGER NumberOfBytes
;
2432 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
2434 /* Memory Manager Functions */
2436 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2439 PPHYSICAL_MEMORY_RANGE
2441 MmGetPhysicalMemoryRanges(
2447 MmGetPhysicalAddress(
2448 IN PVOID BaseAddress
);
2453 MmIsNonPagedSystemAddressValid(
2454 IN PVOID VirtualAddress
);
2459 MmAllocateNonCachedMemory(
2460 IN SIZE_T NumberOfBytes
);
2465 MmFreeNonCachedMemory(
2466 IN PVOID BaseAddress
,
2467 IN SIZE_T NumberOfBytes
);
2472 MmGetVirtualForPhysical(
2473 IN PHYSICAL_ADDRESS PhysicalAddress
);
2478 MmMapUserAddressesToPage(
2479 IN PVOID BaseAddress
,
2480 IN SIZE_T NumberOfBytes
,
2481 IN PVOID PageAddress
);
2487 IN PHYSICAL_ADDRESS PhysicalAddress
,
2488 IN SIZE_T NumberOfBytes
,
2489 IN MEMORY_CACHING_TYPE CacheType
);
2494 MmMapViewInSessionSpace(
2496 OUT PVOID
*MappedBase
,
2497 IN OUT PSIZE_T ViewSize
);
2502 MmMapViewInSystemSpace(
2504 OUT PVOID
*MappedBase
,
2505 IN OUT PSIZE_T ViewSize
);
2511 IN PVOID VirtualAddress
);
2516 MmIsThisAnNtAsSystem(
2522 MmLockPagableSectionByHandle(
2523 IN PVOID ImageSectionHandle
);
2528 MmUnmapViewInSessionSpace(
2529 IN PVOID MappedBase
);
2534 MmUnmapViewInSystemSpace(
2535 IN PVOID MappedBase
);
2540 MmUnsecureVirtualMemory(
2541 IN HANDLE SecureHandle
);
2546 MmRemovePhysicalMemory(
2547 IN PPHYSICAL_ADDRESS StartAddress
,
2548 IN OUT PLARGE_INTEGER NumberOfBytes
);
2553 MmSecureVirtualMemory(
2556 IN ULONG ProbeMode
);
2561 MmUnmapVideoDisplay(
2562 IN PVOID BaseAddress
,
2563 IN SIZE_T NumberOfBytes
);
2565 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2567 /* NtXxx Functions */
2573 OUT PHANDLE ProcessHandle
,
2574 IN ACCESS_MASK DesiredAccess
,
2575 IN POBJECT_ATTRIBUTES ObjectAttributes
,
2576 IN PCLIENT_ID ClientId OPTIONAL
);
2581 NtQueryInformationProcess(
2582 IN HANDLE ProcessHandle
,
2583 IN PROCESSINFOCLASS ProcessInformationClass
,
2584 OUT PVOID ProcessInformation OPTIONAL
,
2585 IN ULONG ProcessInformationLength
,
2586 OUT PULONG ReturnLength OPTIONAL
);
2588 /** Process manager types **/
2591 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
2593 IN HANDLE ProcessId
,
2597 (NTAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
2598 IN HANDLE ProcessId
,
2603 (NTAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
2604 IN PUNICODE_STRING FullImageName
,
2605 IN HANDLE ProcessId
,
2606 IN PIMAGE_INFO ImageInfo
);
2608 /** Process manager routines **/
2610 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2615 PsSetLoadImageNotifyRoutine(
2616 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
2621 PsSetCreateThreadNotifyRoutine(
2622 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
2627 PsSetCreateProcessNotifyRoutine(
2628 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
2634 PsGetCurrentProcessId(
2640 PsGetCurrentThreadId(
2647 OUT PULONG MajorVersion OPTIONAL
,
2648 OUT PULONG MinorVersion OPTIONAL
,
2649 OUT PULONG BuildNumber OPTIONAL
,
2650 OUT PUNICODE_STRING CSDVersion OPTIONAL
);
2652 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2654 #if (NTDDI_VERSION >= NTDDI_WINXP)
2660 IN PEPROCESS Process
);
2665 PsRemoveCreateThreadNotifyRoutine(
2666 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
2671 PsRemoveLoadImageNotifyRoutine(
2672 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
2674 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2676 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess
;
2680 typedef struct _RTL_SPLAY_LINKS
{
2681 struct _RTL_SPLAY_LINKS
*Parent
;
2682 struct _RTL_SPLAY_LINKS
*LeftChild
;
2683 struct _RTL_SPLAY_LINKS
*RightChild
;
2684 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
2688 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
2690 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
2691 *CallersAddress = (PVOID)_ReturnAddress(); \
2692 *CallersCaller = NULL;
2695 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2699 RtlGetCallersAddress(
2700 OUT PVOID
*CallersAddress
,
2701 OUT PVOID
*CallersCaller
);
2706 #if !defined(MIDL_PASS)
2711 RtlConvertLongToLuid(
2717 Temp
.QuadPart
= Val
;
2718 Luid
.LowPart
= Temp
.u
.LowPart
;
2719 Luid
.HighPart
= Temp
.u
.HighPart
;
2726 RtlConvertUlongToLuid(
2738 #if defined(_AMD64_) || defined(_IA64_)
2739 //DECLSPEC_DEPRECATED_DDK_WINXP
2743 RtlLargeIntegerDivide(
2744 IN LARGE_INTEGER Dividend
,
2745 IN LARGE_INTEGER Divisor
,
2746 OUT PLARGE_INTEGER Remainder OPTIONAL
)
2749 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
2751 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
2757 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2761 RtlLargeIntegerDivide(
2762 IN LARGE_INTEGER Dividend
,
2763 IN LARGE_INTEGER Divisor
,
2764 OUT PLARGE_INTEGER Remainder OPTIONAL
);
2767 #endif /* defined(_AMD64_) || defined(_IA64_) */
2769 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2774 RtlPrefixUnicodeString(
2775 IN PCUNICODE_STRING String1
,
2776 IN PCUNICODE_STRING String2
,
2777 IN BOOLEAN CaseInSensitive
);
2783 IN OUT PSTRING DestinationString
,
2784 IN
const PSTRING SourceString
);
2789 RtlUpcaseUnicodeString(
2790 IN OUT PUNICODE_STRING DestinationString
,
2791 IN PCUNICODE_STRING SourceString
,
2792 IN BOOLEAN AllocateDestinationString
);
2798 IN OUT PACCESS_MASK AccessMask
,
2799 IN PGENERIC_MAPPING GenericMapping
);
2804 RtlVolumeDeviceToDosName(
2805 IN PVOID VolumeDeviceObject
,
2806 OUT PUNICODE_STRING DosName
);
2812 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
2817 RtlVerifyVersionInfo(
2818 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
2820 IN ULONGLONG ConditionMask
);
2826 IN
const PSTRING String1
,
2827 IN
const PSTRING String2
,
2828 BOOLEAN CaseInSensitive
);
2834 OUT PSTRING DestinationString
,
2835 IN
const PSTRING SourceString OPTIONAL
);
2841 IN
const PSTRING String1
,
2842 IN
const PSTRING String2
,
2843 IN BOOLEAN CaseInSensitive
);
2850 IN ULONG Base OPTIONAL
,
2867 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2869 /* Security reference monitor routines */
2871 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2875 SeSinglePrivilegeCheck(
2876 IN LUID PrivilegeValue
,
2877 IN KPROCESSOR_MODE PreviousMode
);
2880 /* ZwXxx Functions */
2882 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2887 IN HANDLE TimerHandle
,
2888 OUT PBOOLEAN CurrentState OPTIONAL
);
2893 OUT PHANDLE TimerHandle
,
2894 IN ACCESS_MASK DesiredAccess
,
2895 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
2896 IN TIMER_TYPE TimerType
);
2901 OUT PHANDLE TimerHandle
,
2902 IN ACCESS_MASK DesiredAccess
,
2903 IN POBJECT_ATTRIBUTES ObjectAttributes
);
2908 ZwSetInformationThread(
2909 IN HANDLE ThreadHandle
,
2910 IN THREADINFOCLASS ThreadInformationClass
,
2911 IN PVOID ThreadInformation
,
2912 IN ULONG ThreadInformationLength
);
2917 IN HANDLE TimerHandle
,
2918 IN PLARGE_INTEGER DueTime
,
2919 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
2920 IN PVOID TimerContext OPTIONAL
,
2921 IN BOOLEAN ResumeTimer
,
2922 IN LONG Period OPTIONAL
,
2923 OUT PBOOLEAN PreviousState OPTIONAL
);
2933 #endif /* _NTDDK_ */