4 * Windows Device Driver Kit
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
22 * DBG - Debugging enabled/disabled (0/1)
23 * POOL_TAGGING - Enable pool tagging
24 * _X86_ - X86 environment
30 #if !defined(_NTHAL_) && !defined(_NTIFS_)
31 #define _NTDDK_INCLUDED_
38 #define _CTYPE_DISABLE_MACROS
50 #include <stdarg.h> // FIXME
51 #include <basetyps.h> // FIXME
58 struct _LOADER_PARAMETER_BLOCK
;
60 struct _DRIVE_LAYOUT_INFORMATION_EX
;
61 struct _SET_PARTITION_INFORMATION_EX
;
71 typedef struct _BUS_HANDLER
*PBUS_HANDLER
;
73 #define EXCEPTION_READ_FAULT 0
74 #define EXCEPTION_WRITE_FAULT 1
75 #define EXCEPTION_EXECUTE_FAULT 8
77 #if (NTDDI_VERSION >= NTDDI_VISTA)
78 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
79 #elif (NTDDI_VERSION >= NTDDI_WINXP)
80 extern NTSYSAPI CCHAR KeNumberProcessors
;
82 extern PCCHAR KeNumberProcessors
;
85 #define MAX_WOW64_SHARED_ENTRIES 16
87 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
88 #define NX_SUPPORT_POLICY_ALWAYSON 1
89 #define NX_SUPPORT_POLICY_OPTIN 2
90 #define NX_SUPPORT_POLICY_OPTOUT 3
96 #define IRP_MN_QUERY_DIRECTORY 0x01
97 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
99 #define IRP_MN_USER_FS_REQUEST 0x00
100 #define IRP_MN_MOUNT_VOLUME 0x01
101 #define IRP_MN_VERIFY_VOLUME 0x02
102 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
103 #define IRP_MN_TRACK_LINK 0x04
104 #define IRP_MN_KERNEL_CALL 0x04
106 #define IRP_MN_LOCK 0x01
107 #define IRP_MN_UNLOCK_SINGLE 0x02
108 #define IRP_MN_UNLOCK_ALL 0x03
109 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
111 #define IRP_MN_FLUSH_AND_PURGE 0x01
113 #define IRP_MN_NORMAL 0x00
114 #define IRP_MN_DPC 0x01
115 #define IRP_MN_MDL 0x02
116 #define IRP_MN_COMPLETE 0x04
117 #define IRP_MN_COMPRESSED 0x08
119 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
120 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
121 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
123 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
125 typedef struct _IO_COUNTERS
{
126 ULONGLONG ReadOperationCount
;
127 ULONGLONG WriteOperationCount
;
128 ULONGLONG OtherOperationCount
;
129 ULONGLONG ReadTransferCount
;
130 ULONGLONG WriteTransferCount
;
131 ULONGLONG OtherTransferCount
;
132 } IO_COUNTERS
, *PIO_COUNTERS
;
134 typedef struct _VM_COUNTERS
{
135 SIZE_T PeakVirtualSize
;
137 ULONG PageFaultCount
;
138 SIZE_T PeakWorkingSetSize
;
139 SIZE_T WorkingSetSize
;
140 SIZE_T QuotaPeakPagedPoolUsage
;
141 SIZE_T QuotaPagedPoolUsage
;
142 SIZE_T QuotaPeakNonPagedPoolUsage
;
143 SIZE_T QuotaNonPagedPoolUsage
;
144 SIZE_T PagefileUsage
;
145 SIZE_T PeakPagefileUsage
;
146 } VM_COUNTERS
, *PVM_COUNTERS
;
148 typedef struct _VM_COUNTERS_EX
150 SIZE_T PeakVirtualSize
;
152 ULONG PageFaultCount
;
153 SIZE_T PeakWorkingSetSize
;
154 SIZE_T WorkingSetSize
;
155 SIZE_T QuotaPeakPagedPoolUsage
;
156 SIZE_T QuotaPagedPoolUsage
;
157 SIZE_T QuotaPeakNonPagedPoolUsage
;
158 SIZE_T QuotaNonPagedPoolUsage
;
159 SIZE_T PagefileUsage
;
160 SIZE_T PeakPagefileUsage
;
162 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
164 typedef struct _POOLED_USAGE_AND_LIMITS
166 SIZE_T PeakPagedPoolUsage
;
167 SIZE_T PagedPoolUsage
;
168 SIZE_T PagedPoolLimit
;
169 SIZE_T PeakNonPagedPoolUsage
;
170 SIZE_T NonPagedPoolUsage
;
171 SIZE_T NonPagedPoolLimit
;
172 SIZE_T PeakPagefileUsage
;
173 SIZE_T PagefileUsage
;
174 SIZE_T PagefileLimit
;
175 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
177 /* DEVICE_OBJECT.Flags */
179 #define DO_VERIFY_VOLUME 0x00000002
180 #define DO_BUFFERED_IO 0x00000004
181 #define DO_EXCLUSIVE 0x00000008
182 #define DO_DIRECT_IO 0x00000010
183 #define DO_MAP_IO_BUFFER 0x00000020
184 #define DO_DEVICE_HAS_NAME 0x00000040
185 #define DO_DEVICE_INITIALIZING 0x00000080
186 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
187 #define DO_LONG_TERM_REQUESTS 0x00000200
188 #define DO_NEVER_LAST_DEVICE 0x00000400
189 #define DO_SHUTDOWN_REGISTERED 0x00000800
190 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
191 #define DO_POWER_PAGABLE 0x00002000
192 #define DO_POWER_INRUSH 0x00004000
193 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
194 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
195 #define DO_FORCE_NEITHER_IO 0x00080000
196 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
197 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
198 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
199 #define DO_DISALLOW_EXECUTE 0x00800000
201 #define DRVO_REINIT_REGISTERED 0x00000008
202 #define DRVO_INITIALIZED 0x00000010
203 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
204 #define DRVO_LEGACY_RESOURCES 0x00000040
206 typedef enum _ARBITER_REQUEST_SOURCE
{
207 ArbiterRequestUndefined
= -1,
208 ArbiterRequestLegacyReported
,
209 ArbiterRequestHalReported
,
210 ArbiterRequestLegacyAssigned
,
211 ArbiterRequestPnpDetected
,
212 ArbiterRequestPnpEnumerated
213 } ARBITER_REQUEST_SOURCE
;
215 typedef enum _ARBITER_RESULT
{
216 ArbiterResultUndefined
= -1,
217 ArbiterResultSuccess
,
218 ArbiterResultExternalConflict
,
219 ArbiterResultNullRequest
222 typedef enum _ARBITER_ACTION
{
223 ArbiterActionTestAllocation
,
224 ArbiterActionRetestAllocation
,
225 ArbiterActionCommitAllocation
,
226 ArbiterActionRollbackAllocation
,
227 ArbiterActionQueryAllocatedResources
,
228 ArbiterActionWriteReservedResources
,
229 ArbiterActionQueryConflict
,
230 ArbiterActionQueryArbitrate
,
231 ArbiterActionAddReserved
,
232 ArbiterActionBootAllocation
233 } ARBITER_ACTION
, *PARBITER_ACTION
;
235 typedef struct _ARBITER_CONFLICT_INFO
{
236 PDEVICE_OBJECT OwningObject
;
239 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
241 typedef struct _ARBITER_PARAMETERS
{
244 IN OUT PLIST_ENTRY ArbitrationList
;
245 IN ULONG AllocateFromCount
;
246 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
249 IN OUT PLIST_ENTRY ArbitrationList
;
250 IN ULONG AllocateFromCount
;
251 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
254 IN OUT PLIST_ENTRY ArbitrationList
;
257 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
258 } QueryAllocatedResources
;
260 IN PDEVICE_OBJECT PhysicalDeviceObject
;
261 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
262 OUT PULONG ConflictCount
;
263 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
266 IN PLIST_ENTRY ArbitrationList
;
269 IN PDEVICE_OBJECT ReserveDevice
;
272 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
274 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
276 typedef struct _ARBITER_LIST_ENTRY
{
277 LIST_ENTRY ListEntry
;
278 ULONG AlternativeCount
;
279 PIO_RESOURCE_DESCRIPTOR Alternatives
;
280 PDEVICE_OBJECT PhysicalDeviceObject
;
281 ARBITER_REQUEST_SOURCE RequestSource
;
284 INTERFACE_TYPE InterfaceType
;
287 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
288 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
289 ARBITER_RESULT Result
;
290 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
293 (NTAPI
*PARBITER_HANDLER
)(
294 IN OUT PVOID Context
,
295 IN ARBITER_ACTION Action
,
296 IN OUT PARBITER_PARAMETERS Parameters
);
298 #define ARBITER_PARTIAL 0x00000001
300 typedef struct _ARBITER_INTERFACE
{
304 PINTERFACE_REFERENCE InterfaceReference
;
305 PINTERFACE_DEREFERENCE InterfaceDereference
;
306 PARBITER_HANDLER ArbiterHandler
;
308 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
310 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
311 HalInstalledBusInformation
,
312 HalProfileSourceInformation
,
313 HalInformationClassUnused1
,
315 HalProcessorSpeedInformation
,
316 HalCallbackInformation
,
317 HalMapRegisterInformation
,
318 HalMcaLogInformation
,
319 HalFrameBufferCachingInformation
,
320 HalDisplayBiosInformation
,
321 HalProcessorFeatureInformation
,
322 HalNumaTopologyInterface
,
324 HalCmcLogInformation
,
325 HalCpeLogInformation
,
326 HalQueryMcaInterface
,
327 HalQueryAMLIIllegalIOPortAddresses
,
328 HalQueryMaxHotPlugMemoryAddress
,
329 HalPartitionIpiInterface
,
330 HalPlatformInformation
,
331 HalQueryProfileSourceList
,
332 HalInitLogInformation
,
333 HalFrequencyInformation
,
334 HalProcessorBrandString
,
335 HalHypervisorInformation
,
336 HalPlatformTimerInformation
,
337 HalAcpiAuditInformation
338 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
340 typedef enum _HAL_SET_INFORMATION_CLASS
{
341 HalProfileSourceInterval
,
342 HalProfileSourceInterruptHandler
,
343 HalMcaRegisterDriver
,
344 HalKernelErrorHandler
,
345 HalCmcRegisterDriver
,
346 HalCpeRegisterDriver
,
350 HalGenerateCmcInterrupt
,
351 HalProfileSourceTimerHandler
,
353 HalProfileDpgoSourceInterruptHandler
354 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
356 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
{
357 KPROFILE_SOURCE Source
;
359 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
361 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
{
362 KPROFILE_SOURCE Source
;
365 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
367 typedef struct _MAP_REGISTER_ENTRY
{
369 BOOLEAN WriteToDevice
;
370 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
372 typedef struct _DEBUG_DEVICE_ADDRESS
{
376 PUCHAR TranslatedAddress
;
378 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
380 typedef struct _DEBUG_MEMORY_REQUIREMENTS
{
381 PHYSICAL_ADDRESS Start
;
382 PHYSICAL_ADDRESS MaxEnd
;
383 PVOID VirtualAddress
;
387 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
389 typedef struct _DEBUG_DEVICE_DESCRIPTOR
{
400 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
401 DEBUG_MEMORY_REQUIREMENTS Memory
;
402 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
404 typedef struct _PM_DISPATCH_TABLE
{
408 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
410 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
411 TranslateChildToParent
,
412 TranslateParentToChild
413 } RESOURCE_TRANSLATION_DIRECTION
;
416 (NTAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
417 IN OUT PVOID Context
,
418 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
419 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
420 IN ULONG AlternativesCount OPTIONAL
,
421 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
422 IN PDEVICE_OBJECT PhysicalDeviceObject
,
423 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
426 (NTAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
427 IN PVOID Context OPTIONAL
,
428 IN PIO_RESOURCE_DESCRIPTOR Source
,
429 IN PDEVICE_OBJECT PhysicalDeviceObject
,
430 OUT PULONG TargetCount
,
431 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
433 typedef struct _TRANSLATOR_INTERFACE
{
437 PINTERFACE_REFERENCE InterfaceReference
;
438 PINTERFACE_DEREFERENCE InterfaceDereference
;
439 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
440 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
441 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
444 (FASTCALL
*pHalExamineMBR
)(
445 IN PDEVICE_OBJECT DeviceObject
,
447 IN ULONG MBRTypeIdentifier
,
451 (FASTCALL
*pHalIoReadPartitionTable
)(
452 IN PDEVICE_OBJECT DeviceObject
,
454 IN BOOLEAN ReturnRecognizedPartitions
,
455 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
458 (FASTCALL
*pHalIoSetPartitionInformation
)(
459 IN PDEVICE_OBJECT DeviceObject
,
461 IN ULONG PartitionNumber
,
462 IN ULONG PartitionType
);
465 (FASTCALL
*pHalIoWritePartitionTable
)(
466 IN PDEVICE_OBJECT DeviceObject
,
468 IN ULONG SectorsPerTrack
,
469 IN ULONG NumberOfHeads
,
470 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
473 (FASTCALL
*pHalHandlerForBus
)(
474 IN INTERFACE_TYPE InterfaceType
,
478 (FASTCALL
*pHalReferenceBusHandler
)(
479 IN PBUS_HANDLER BusHandler
);
482 (NTAPI
*pHalQuerySystemInformation
)(
483 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
486 OUT PULONG ReturnedLength
);
489 (NTAPI
*pHalSetSystemInformation
)(
490 IN HAL_SET_INFORMATION_CLASS InformationClass
,
495 (NTAPI
*pHalQueryBusSlots
)(
496 IN PBUS_HANDLER BusHandler
,
498 OUT PULONG SlotNumbers
,
499 OUT PULONG ReturnedLength
);
502 (NTAPI
*pHalInitPnpDriver
)(
506 (NTAPI
*pHalInitPowerManagement
)(
507 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
508 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
510 typedef struct _DMA_ADAPTER
*
511 (NTAPI
*pHalGetDmaAdapter
)(
513 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
514 OUT PULONG NumberOfMapRegisters
);
517 (NTAPI
*pHalGetInterruptTranslator
)(
518 IN INTERFACE_TYPE ParentInterfaceType
,
519 IN ULONG ParentBusNumber
,
520 IN INTERFACE_TYPE BridgeInterfaceType
,
523 OUT PTRANSLATOR_INTERFACE Translator
,
524 OUT PULONG BridgeBusNumber
);
527 (NTAPI
*pHalStartMirroring
)(
531 (NTAPI
*pHalEndMirroring
)(
532 IN ULONG PassNumber
);
535 (NTAPI
*pHalMirrorPhysicalMemory
)(
536 IN PHYSICAL_ADDRESS PhysicalAddress
,
537 IN LARGE_INTEGER NumberOfBytes
);
540 (NTAPI
*pHalMirrorVerify
)(
541 IN PHYSICAL_ADDRESS PhysicalAddress
,
542 IN LARGE_INTEGER NumberOfBytes
);
545 (NTAPI
*pHalEndOfBoot
)(
550 (NTAPI
*pHalTranslateBusAddress
)(
551 IN INTERFACE_TYPE InterfaceType
,
553 IN PHYSICAL_ADDRESS BusAddress
,
554 IN OUT PULONG AddressSpace
,
555 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
559 (NTAPI
*pHalAssignSlotResources
)(
560 IN PUNICODE_STRING RegistryPath
,
561 IN PUNICODE_STRING DriverClassName OPTIONAL
,
562 IN PDRIVER_OBJECT DriverObject
,
563 IN PDEVICE_OBJECT DeviceObject
,
564 IN INTERFACE_TYPE BusType
,
567 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
571 (NTAPI
*pHalHaltSystem
)(
576 (NTAPI
*pHalResetDisplay
)(
581 (NTAPI
*pHalVectorToIDTEntry
)(
586 (NTAPI
*pHalFindBusAddressTranslation
)(
587 IN PHYSICAL_ADDRESS BusAddress
,
588 IN OUT PULONG AddressSpace
,
589 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
590 IN OUT PULONG_PTR Context
,
595 (NTAPI
*pKdSetupPciDeviceForDebugging
)(
596 IN PVOID LoaderBlock OPTIONAL
,
597 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
601 (NTAPI
*pKdReleasePciDeviceForDebugging
)(
602 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
606 (NTAPI
*pKdGetAcpiTablePhase0
)(
607 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
612 (NTAPI
*pKdCheckPowerButton
)(
617 (NTAPI
*pKdMapPhysicalMemory64
)(
618 IN PHYSICAL_ADDRESS PhysicalAddress
,
619 IN ULONG NumberPages
,
620 IN BOOLEAN FlushCurrentTLB
);
624 (NTAPI
*pKdUnmapVirtualAddress
)(
625 IN PVOID VirtualAddress
,
626 IN ULONG NumberPages
,
627 IN BOOLEAN FlushCurrentTLB
);
631 (NTAPI
*pKdGetPciDataByOffset
)(
640 (NTAPI
*pKdSetPciDataByOffset
)(
648 (NTAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
652 typedef struct _HAL_DISPATCH
{
654 pHalQuerySystemInformation HalQuerySystemInformation
;
655 pHalSetSystemInformation HalSetSystemInformation
;
656 pHalQueryBusSlots HalQueryBusSlots
;
658 pHalExamineMBR HalExamineMBR
;
659 pHalIoReadPartitionTable HalIoReadPartitionTable
;
660 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
661 pHalIoWritePartitionTable HalIoWritePartitionTable
;
662 pHalHandlerForBus HalReferenceHandlerForBus
;
663 pHalReferenceBusHandler HalReferenceBusHandler
;
664 pHalReferenceBusHandler HalDereferenceBusHandler
;
665 pHalInitPnpDriver HalInitPnpDriver
;
666 pHalInitPowerManagement HalInitPowerManagement
;
667 pHalGetDmaAdapter HalGetDmaAdapter
;
668 pHalGetInterruptTranslator HalGetInterruptTranslator
;
669 pHalStartMirroring HalStartMirroring
;
670 pHalEndMirroring HalEndMirroring
;
671 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
672 pHalEndOfBoot HalEndOfBoot
;
673 pHalMirrorVerify HalMirrorVerify
;
674 pHalGetAcpiTable HalGetCachedAcpiTable
;
675 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback
;
677 pHalGetErrorCapList HalGetErrorCapList
;
678 pHalInjectError HalInjectError
;
680 } HAL_DISPATCH
, *PHAL_DISPATCH
;
682 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_)
684 extern PHAL_DISPATCH HalDispatchTable
;
685 #define HALDISPATCH HalDispatchTable
689 extern HAL_DISPATCH HalDispatchTable
;
690 #define HALDISPATCH (&HalDispatchTable)
694 #define HAL_DISPATCH_VERSION 3
695 #define HalDispatchTableVersion HALDISPATCH->Version
696 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
697 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
698 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
699 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
700 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
701 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
702 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
703 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
704 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
705 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
706 #define HalStartMirroring HALDISPATCH->HalStartMirroring
707 #define HalEndMirroring HALDISPATCH->HalEndMirroring
708 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
709 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
710 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
712 typedef struct _FILE_ALIGNMENT_INFORMATION
{
713 ULONG AlignmentRequirement
;
714 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
716 typedef struct _FILE_NAME_INFORMATION
{
717 ULONG FileNameLength
;
719 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
722 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
723 ULONG FileAttributes
;
725 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
727 typedef struct _FILE_DISPOSITION_INFORMATION
{
729 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
731 typedef struct _FILE_END_OF_FILE_INFORMATION
{
732 LARGE_INTEGER EndOfFile
;
733 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
735 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
736 LARGE_INTEGER ValidDataLength
;
737 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
739 typedef union _FILE_SEGMENT_ELEMENT
{
742 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
744 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
746 #if (NTDDI_VERSION >= NTDDI_WIN2K)
751 IN ULONGLONG ConditionMask
,
756 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
757 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
758 (TypeBitMask), (ComparisonType)))
760 /* RtlVerifyVersionInfo() TypeMask */
762 #define VER_MINORVERSION 0x0000001
763 #define VER_MAJORVERSION 0x0000002
764 #define VER_BUILDNUMBER 0x0000004
765 #define VER_PLATFORMID 0x0000008
766 #define VER_SERVICEPACKMINOR 0x0000010
767 #define VER_SERVICEPACKMAJOR 0x0000020
768 #define VER_SUITENAME 0x0000040
769 #define VER_PRODUCT_TYPE 0x0000080
771 /* RtlVerifyVersionInfo() ComparisonType */
774 #define VER_GREATER 2
775 #define VER_GREATER_EQUAL 3
777 #define VER_LESS_EQUAL 5
781 #define VER_CONDITION_MASK 7
782 #define VER_NUM_BITS_PER_CONDITION_MASK 3
784 typedef struct _IMAGE_INFO
{
785 _ANONYMOUS_UNION
union {
787 _ANONYMOUS_STRUCT
struct {
788 ULONG ImageAddressingMode
:8;
789 ULONG SystemModeImage
:1;
790 ULONG ImageMappedToAllPids
:1;
791 ULONG ExtendedInfoPresent
:1;
798 ULONG ImageSectionNumber
;
799 } IMAGE_INFO
, *PIMAGE_INFO
;
801 #define IMAGE_ADDRESSING_MODE_32BIT 3
803 typedef enum _BUS_DATA_TYPE
{
804 ConfigurationSpaceUndefined
= -1,
816 SgiInternalConfiguration
,
818 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
820 typedef struct _NT_TIB
{
821 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
825 _ANONYMOUS_UNION
union {
829 PVOID ArbitraryUserPointer
;
830 struct _NT_TIB
*Self
;
833 typedef struct _NT_TIB32
{
838 __GNU_EXTENSION
union {
842 ULONG ArbitraryUserPointer
;
844 } NT_TIB32
,*PNT_TIB32
;
846 typedef struct _NT_TIB64
{
847 ULONG64 ExceptionList
;
850 ULONG64 SubSystemTib
;
851 __GNU_EXTENSION
union {
855 ULONG64 ArbitraryUserPointer
;
857 } NT_TIB64
,*PNT_TIB64
;
859 typedef enum _PROCESSINFOCLASS
{
860 ProcessBasicInformation
,
866 ProcessRaisePriority
,
868 ProcessExceptionPort
,
870 ProcessLdtInformation
,
872 ProcessDefaultHardErrorMode
,
873 ProcessIoPortHandlers
,
874 ProcessPooledUsageAndLimits
,
875 ProcessWorkingSetWatch
,
877 ProcessEnableAlignmentFaultFixup
,
878 ProcessPriorityClass
,
879 ProcessWx86Information
,
882 ProcessPriorityBoost
,
884 ProcessSessionInformation
,
885 ProcessForegroundInformation
,
886 ProcessWow64Information
,
887 ProcessImageFileName
,
888 ProcessLUIDDeviceMapsEnabled
,
889 ProcessBreakOnTermination
,
890 ProcessDebugObjectHandle
,
892 ProcessHandleTracing
,
895 ProcessTlsInformation
,
897 ProcessImageInformation
,
900 ProcessInstrumentationCallback
,
901 ProcessThreadStackAllocation
,
902 ProcessWorkingSetWatchEx
,
903 ProcessImageFileNameWin32
,
904 ProcessImageFileMapping
,
905 ProcessAffinityUpdateMode
,
906 ProcessMemoryAllocationMode
,
907 ProcessGroupInformation
,
908 ProcessTokenVirtualizationEnabled
,
909 ProcessConsoleHostProcess
,
910 ProcessWindowInformation
,
914 typedef enum _THREADINFOCLASS
{
915 ThreadBasicInformation
,
920 ThreadImpersonationToken
,
921 ThreadDescriptorTableEntry
,
922 ThreadEnableAlignmentFaultFixup
,
923 ThreadEventPair_Reusable
,
924 ThreadQuerySetWin32StartAddress
,
926 ThreadPerformanceCount
,
928 ThreadIdealProcessor
,
930 ThreadSetTlsArrayAddress
,
932 ThreadHideFromDebugger
,
933 ThreadBreakOnTermination
,
934 ThreadSwitchLegacyState
,
936 ThreadLastSystemCall
,
940 ThreadActualBasePriority
,
941 ThreadTebInformation
,
945 ThreadGroupInformation
,
946 ThreadUmsInformation
,
947 ThreadCounterProfiling
,
948 ThreadIdealProcessorEx
,
952 typedef struct _PROCESS_BASIC_INFORMATION
{
954 struct _PEB
*PebBaseAddress
;
955 ULONG_PTR AffinityMask
;
956 KPRIORITY BasePriority
;
957 ULONG_PTR UniqueProcessId
;
958 ULONG_PTR InheritedFromUniqueProcessId
;
959 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
961 typedef struct _PROCESS_WS_WATCH_INFORMATION
{
964 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
966 typedef struct _PROCESS_DEVICEMAP_INFORMATION
{
967 __GNU_EXTENSION
union {
969 HANDLE DirectoryHandle
;
976 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
978 typedef struct _KERNEL_USER_TIMES
{
979 LARGE_INTEGER CreateTime
;
980 LARGE_INTEGER ExitTime
;
981 LARGE_INTEGER KernelTime
;
982 LARGE_INTEGER UserTime
;
983 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
985 typedef struct _PROCESS_ACCESS_TOKEN
{
988 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
990 typedef struct _PROCESS_SESSION_INFORMATION
{
992 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
994 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
995 IoQueryDeviceIdentifier
= 0,
996 IoQueryDeviceConfigurationData
,
997 IoQueryDeviceComponentInformation
,
999 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
1001 typedef struct _DISK_SIGNATURE
{
1002 ULONG PartitionStyle
;
1003 _ANONYMOUS_UNION
union {
1012 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
1015 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
1018 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
1019 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
1020 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
1021 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
1023 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1024 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1025 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1026 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1027 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1030 (NTAPI
*PTIMER_APC_ROUTINE
)(
1031 IN PVOID TimerContext
,
1032 IN ULONG TimerLowValue
,
1033 IN LONG TimerHighValue
);
1035 typedef struct _KUSER_SHARED_DATA
1037 ULONG TickCountLowDeprecated
;
1038 ULONG TickCountMultiplier
;
1039 volatile KSYSTEM_TIME InterruptTime
;
1040 volatile KSYSTEM_TIME SystemTime
;
1041 volatile KSYSTEM_TIME TimeZoneBias
;
1042 USHORT ImageNumberLow
;
1043 USHORT ImageNumberHigh
;
1044 WCHAR NtSystemRoot
[260];
1045 ULONG MaxStackTraceDepth
;
1046 ULONG CryptoExponent
;
1048 ULONG LargePageMinimum
;
1050 NT_PRODUCT_TYPE NtProductType
;
1051 BOOLEAN ProductTypeIsValid
;
1052 ULONG NtMajorVersion
;
1053 ULONG NtMinorVersion
;
1054 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
1057 volatile ULONG TimeSlip
;
1058 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
1059 ULONG AltArchitecturePad
[1];
1060 LARGE_INTEGER SystemExpirationDate
;
1062 BOOLEAN KdDebuggerEnabled
;
1063 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
1064 UCHAR NXSupportPolicy
;
1066 volatile ULONG ActiveConsoleId
;
1067 volatile ULONG DismountCount
;
1068 ULONG ComPlusPackage
;
1069 ULONG LastSystemRITEventTickCount
;
1070 ULONG NumberOfPhysicalPages
;
1071 BOOLEAN SafeBootMode
;
1072 #if (NTDDI_VERSION >= NTDDI_WIN7)
1076 UCHAR TscQpcEnabled
:1;
1077 UCHAR TscQpcSpareFlag
:1;
1078 UCHAR TscQpcShift
:6;
1083 #if (NTDDI_VERSION >= NTDDI_VISTA)
1085 ULONG SharedDataFlags
;
1087 ULONG DbgErrorPortPresent
:1;
1088 ULONG DbgElevationEnabled
:1;
1089 ULONG DbgVirtEnabled
:1;
1090 ULONG DbgInstallerDetectEnabled
:1;
1091 ULONG DbgSystemDllRelocated
:1;
1092 ULONG DbgDynProcessorEnabled
:1;
1093 ULONG DbgSEHValidationEnabled
:1;
1100 ULONG DataFlagsPad
[1];
1101 ULONGLONG TestRetInstruction
;
1103 ULONG SystemCallReturn
;
1104 ULONGLONG SystemCallPad
[3];
1105 _ANONYMOUS_UNION
union {
1106 volatile KSYSTEM_TIME TickCount
;
1107 volatile ULONG64 TickCountQuad
;
1108 _ANONYMOUS_STRUCT
struct {
1109 ULONG ReservedTickCountOverlay
[3];
1110 ULONG TickCountPad
[1];
1115 #if (NTDDI_VERSION >= NTDDI_WS03)
1116 LONGLONG ConsoleSessionForegroundProcessId
;
1117 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
1119 #if (NTDDI_VERSION >= NTDDI_VISTA)
1120 #if (NTDDI_VERSION >= NTDDI_WIN7)
1121 USHORT UserModeGlobalLogger
[16];
1123 USHORT UserModeGlobalLogger
[8];
1124 ULONG HeapTracingPid
[2];
1125 ULONG CritSecTracingPid
[2];
1127 ULONG ImageFileExecutionOptions
;
1128 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
1129 ULONG LangGenerationCount
;
1131 /* 4 bytes padding */
1133 ULONGLONG Reserved5
;
1134 volatile ULONG64 InterruptTimeBias
;
1136 #if (NTDDI_VERSION >= NTDDI_WIN7)
1137 volatile ULONG64 TscQpcBias
;
1138 volatile ULONG ActiveProcessorCount
;
1139 volatile USHORT ActiveGroupCount
;
1141 volatile ULONG AitSamplingValue
;
1142 volatile ULONG AppCompatFlag
;
1143 ULONGLONG SystemDllNativeRelocation
;
1144 ULONG SystemDllWowRelocation
;
1146 XSTATE_CONFIGURATION XState
;
1148 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
1152 #define KERNEL_STACK_SIZE 12288
1153 #define KERNEL_LARGE_STACK_SIZE 61440
1154 #define KERNEL_LARGE_STACK_COMMIT 12288
1156 #define SIZE_OF_80387_REGISTERS 80
1158 #define PCR_MINOR_VERSION 1
1159 #define PCR_MAJOR_VERSION 1
1161 #if !defined(RC_INVOKED)
1163 #define CONTEXT_i386 0x10000
1164 #define CONTEXT_i486 0x10000
1165 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
1166 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
1167 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
1168 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
1169 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
1170 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
1172 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
1174 #endif /* !defined(RC_INVOKED) */
1176 typedef struct _KPCR
{
1180 struct _EXCEPTION_REGISTRATION_RECORD
*Used_ExceptionList
;
1181 PVOID Used_StackBase
;
1184 ULONG ContextSwitches
;
1185 KAFFINITY SetMemberCopy
;
1189 struct _KPCR
*SelfPcr
;
1190 struct _KPRCB
*Prcb
;
1195 PVOID KdVersionBlock
;
1196 struct _KIDTENTRY
*IDT
;
1197 struct _KGDTENTRY
*GDT
;
1199 USHORT MajorVersion
;
1200 USHORT MinorVersion
;
1201 KAFFINITY SetMember
;
1202 ULONG StallScaleFactor
;
1206 UCHAR SecondLevelCacheAssociativity
;
1208 ULONG KernelReserved
[14];
1209 ULONG SecondLevelCacheSize
;
1210 ULONG HalReserved
[16];
1213 typedef struct _FLOATING_SAVE_AREA
{
1218 ULONG ErrorSelector
;
1221 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
1223 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
1225 #include "pshpack4.h"
1226 typedef struct _CONTEXT
{
1234 FLOATING_SAVE_AREA FloatSave
;
1251 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
1253 #include "poppack.h"
1259 #if !defined(RC_INVOKED)
1261 #define CONTEXT_AMD64 0x100000
1263 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
1264 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
1265 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
1266 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
1267 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
1269 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1270 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1272 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
1274 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1275 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1276 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1277 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1279 #endif /* RC_INVOKED */
1281 #endif /* _AMD64_ */
1283 typedef enum _INTERLOCKED_RESULT
{
1284 ResultNegative
= RESULT_NEGATIVE
,
1285 ResultZero
= RESULT_ZERO
,
1286 ResultPositive
= RESULT_POSITIVE
1287 } INTERLOCKED_RESULT
;
1289 typedef struct _OSVERSIONINFOA
{
1290 ULONG dwOSVersionInfoSize
;
1291 ULONG dwMajorVersion
;
1292 ULONG dwMinorVersion
;
1293 ULONG dwBuildNumber
;
1295 CHAR szCSDVersion
[128];
1296 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
1298 typedef struct _OSVERSIONINFOW
{
1299 ULONG dwOSVersionInfoSize
;
1300 ULONG dwMajorVersion
;
1301 ULONG dwMinorVersion
;
1302 ULONG dwBuildNumber
;
1304 WCHAR szCSDVersion
[128];
1305 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
1307 typedef struct _OSVERSIONINFOEXA
{
1308 ULONG dwOSVersionInfoSize
;
1309 ULONG dwMajorVersion
;
1310 ULONG dwMinorVersion
;
1311 ULONG dwBuildNumber
;
1313 CHAR szCSDVersion
[128];
1314 USHORT wServicePackMajor
;
1315 USHORT wServicePackMinor
;
1319 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
1321 typedef struct _OSVERSIONINFOEXW
{
1322 ULONG dwOSVersionInfoSize
;
1323 ULONG dwMajorVersion
;
1324 ULONG dwMinorVersion
;
1325 ULONG dwBuildNumber
;
1327 WCHAR szCSDVersion
[128];
1328 USHORT wServicePackMajor
;
1329 USHORT wServicePackMinor
;
1333 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
1336 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
1337 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
1338 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
1339 typedef OSVERSIONINFOW OSVERSIONINFO
;
1340 typedef POSVERSIONINFOW POSVERSIONINFO
;
1341 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
1343 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
1344 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
1345 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
1346 typedef OSVERSIONINFOA OSVERSIONINFO
;
1347 typedef POSVERSIONINFOA POSVERSIONINFO
;
1348 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
1349 #endif /* UNICODE */
1351 /* Executive Types */
1353 #define PROTECTED_POOL 0x80000000
1355 typedef struct _ZONE_SEGMENT_HEADER
{
1356 SINGLE_LIST_ENTRY SegmentList
;
1358 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
1360 typedef struct _ZONE_HEADER
{
1361 SINGLE_LIST_ENTRY FreeList
;
1362 SINGLE_LIST_ENTRY SegmentList
;
1364 ULONG TotalSegmentSize
;
1365 } ZONE_HEADER
, *PZONE_HEADER
;
1367 /* Executive Functions */
1369 static __inline PVOID
1371 IN PZONE_HEADER Zone
)
1373 if (Zone
->FreeList
.Next
)
1374 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
1375 return (PVOID
) Zone
->FreeList
.Next
;
1378 static __inline PVOID
1380 IN PZONE_HEADER Zone
,
1383 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
1384 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
1385 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
1390 * ExInterlockedAllocateFromZone(
1391 * IN PZONE_HEADER Zone,
1392 * IN PKSPIN_LOCK Lock)
1394 #define ExInterlockedAllocateFromZone(Zone, Lock) \
1395 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
1398 * ExInterlockedFreeToZone(
1399 * IN PZONE_HEADER Zone,
1401 * IN PKSPIN_LOCK Lock);
1403 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
1404 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
1409 * IN PZONE_HEADER Zone)
1411 #define ExIsFullZone(Zone) \
1412 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
1415 * ExIsObjectInFirstZoneSegment(
1416 * IN PZONE_HEADER Zone,
1419 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
1420 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
1421 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
1422 (Zone)->TotalSegmentSize)) )
1424 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
1425 #define ExAcquireResourceShared ExAcquireResourceSharedLite
1426 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
1427 #define ExDeleteResource ExDeleteResourceLite
1428 #define ExInitializeResource ExInitializeResourceLite
1429 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
1430 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
1431 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
1432 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
1434 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1440 IN OUT PZONE_HEADER Zone
,
1441 IN OUT PVOID Segment
,
1442 IN ULONG SegmentSize
);
1448 OUT PZONE_HEADER Zone
,
1450 IN OUT PVOID InitialSegment
,
1451 IN ULONG InitialSegmentSize
);
1456 ExInterlockedExtendZone(
1457 IN OUT PZONE_HEADER Zone
,
1458 IN OUT PVOID Segment
,
1459 IN ULONG SegmentSize
,
1460 IN OUT PKSPIN_LOCK Lock
);
1472 ExRaiseAccessViolation(
1479 ExRaiseDatatypeMisalignment(
1489 Exfi386InterlockedIncrementLong(
1490 IN OUT LONG
volatile *Addend
);
1495 Exfi386InterlockedDecrementLong(
1501 Exfi386InterlockedExchangeUlong(
1509 typedef enum _CONFIGURATION_TYPE
{
1512 FloatingPointProcessor
,
1522 MultiFunctionAdapter
,
1536 FloppyDiskPeripheral
,
1549 RealModeIrqRoutingTable
,
1550 RealModePCIEnumeration
,
1552 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
1553 #endif /* !_ARC_DDK_ */
1555 typedef struct _CONTROLLER_OBJECT
{
1558 PVOID ControllerExtension
;
1559 KDEVICE_QUEUE DeviceWaitQueue
;
1561 LARGE_INTEGER Spare2
;
1562 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
1564 typedef struct _CONFIGURATION_INFORMATION
{
1569 ULONG ScsiPortCount
;
1571 ULONG ParallelCount
;
1572 BOOLEAN AtDiskPrimaryAddressClaimed
;
1573 BOOLEAN AtDiskSecondaryAddressClaimed
;
1575 ULONG MediumChangerCount
;
1576 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
1580 (NTAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
1582 IN PUNICODE_STRING PathName
,
1583 IN INTERFACE_TYPE BusType
,
1585 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
1586 IN CONFIGURATION_TYPE ControllerType
,
1587 IN ULONG ControllerNumber
,
1588 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
1589 IN CONFIGURATION_TYPE PeripheralType
,
1590 IN ULONG PeripheralNumber
,
1591 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
1595 (NTAPI DRIVER_REINITIALIZE
)(
1596 IN
struct _DRIVER_OBJECT
*DriverObject
,
1600 typedef DRIVER_REINITIALIZE
*PDRIVER_REINITIALIZE
;
1602 /** Filesystem runtime library routines **/
1604 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1608 FsRtlIsTotalDeviceFailure(
1609 IN NTSTATUS Status
);
1612 /* Hardware Abstraction Layer Types */
1615 (NTAPI
*PciPin2Line
)(
1616 IN
struct _BUS_HANDLER
*BusHandler
,
1617 IN
struct _BUS_HANDLER
*RootHandler
,
1618 IN PCI_SLOT_NUMBER SlotNumber
,
1619 IN PPCI_COMMON_CONFIG PciData
);
1622 (NTAPI
*PciLine2Pin
)(
1623 IN
struct _BUS_HANDLER
*BusHandler
,
1624 IN
struct _BUS_HANDLER
*RootHandler
,
1625 IN PCI_SLOT_NUMBER SlotNumber
,
1626 IN PPCI_COMMON_CONFIG PciNewData
,
1627 IN PPCI_COMMON_CONFIG PciOldData
);
1630 (NTAPI
*PciReadWriteConfig
)(
1631 IN
struct _BUS_HANDLER
*BusHandler
,
1632 IN PCI_SLOT_NUMBER Slot
,
1637 #define PCI_DATA_TAG ' ICP'
1638 #define PCI_DATA_VERSION 1
1640 typedef struct _PCIBUSDATA
{
1643 PciReadWriteConfig ReadConfig
;
1644 PciReadWriteConfig WriteConfig
;
1645 PciPin2Line Pin2Line
;
1646 PciLine2Pin Line2Pin
;
1647 PCI_SLOT_NUMBER ParentSlot
;
1649 } PCIBUSDATA
, *PPCIBUSDATA
;
1653 (NTAPI
*pHalGetAcpiTable
)(
1655 IN PCSTR OemId OPTIONAL
,
1656 IN PCSTR OemTableId OPTIONAL
);
1660 (NTAPI
*PCI_ERROR_HANDLER_CALLBACK
)(
1665 (NTAPI
*pHalSetPciErrorHandlerCallback
)(
1666 IN PCI_ERROR_HANDLER_CALLBACK Callback
);
1668 #if 1 /* Not present in WDK 7600 */
1670 (FASTCALL
*pHalIoAssignDriveLetters
)(
1671 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
1672 IN PSTRING NtDeviceName
,
1673 OUT PUCHAR NtSystemPath
,
1674 OUT PSTRING NtSystemPathString
);
1677 /* Hardware Abstraction Layer Functions */
1679 #if !defined(NO_LEGACY_DRIVERS)
1681 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1686 HalAssignSlotResources(
1687 IN PUNICODE_STRING RegistryPath
,
1688 IN PUNICODE_STRING DriverClassName
,
1689 IN PDRIVER_OBJECT DriverObject
,
1690 IN PDEVICE_OBJECT DeviceObject
,
1691 IN INTERFACE_TYPE BusType
,
1693 IN ULONG SlotNumber
,
1694 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
1699 HalGetInterruptVector(
1700 IN INTERFACE_TYPE InterfaceType
,
1702 IN ULONG BusInterruptLevel
,
1703 IN ULONG BusInterruptVector
,
1705 OUT PKAFFINITY Affinity
);
1711 IN BUS_DATA_TYPE BusDataType
,
1713 IN ULONG SlotNumber
,
1719 #endif /* !defined(NO_LEGACY_DRIVERS) */
1721 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1727 IN PDEVICE_DESCRIPTION DeviceDescription
,
1728 IN OUT PULONG NumberOfMapRegisters
);
1734 IN ULONG Frequency
);
1739 IN PADAPTER_OBJECT DmaAdapter
);
1744 HalAcquireDisplayOwnership(
1745 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
1751 IN BUS_DATA_TYPE BusDataType
,
1753 IN ULONG SlotNumber
,
1760 HalGetBusDataByOffset(
1761 IN BUS_DATA_TYPE BusDataType
,
1763 IN ULONG SlotNumber
,
1771 HalSetBusDataByOffset(
1772 IN BUS_DATA_TYPE BusDataType
,
1774 IN ULONG SlotNumber
,
1782 HalTranslateBusAddress(
1783 IN INTERFACE_TYPE InterfaceType
,
1785 IN PHYSICAL_ADDRESS BusAddress
,
1786 IN OUT PULONG AddressSpace
,
1787 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
1791 #if (NTDDI_VERSION >= NTDDI_WINXP)
1796 IN PDEVICE_OBJECT DeviceObject
,
1797 IN ULONG SectorSize
,
1798 IN ULONG MBRTypeIdentifier
,
1802 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
1806 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1807 //DECLSPEC_DEPRECATED_DDK
1811 IoFreeAdapterChannel(
1812 IN PADAPTER_OBJECT AdapterObject
);
1814 //DECLSPEC_DEPRECATED_DDK
1818 IoFlushAdapterBuffers(
1819 IN PADAPTER_OBJECT AdapterObject
,
1821 IN PVOID MapRegisterBase
,
1824 IN BOOLEAN WriteToDevice
);
1826 //DECLSPEC_DEPRECATED_DDK
1831 IN PADAPTER_OBJECT AdapterObject
,
1832 IN PVOID MapRegisterBase
,
1833 IN ULONG NumberOfMapRegisters
);
1835 //DECLSPEC_DEPRECATED_DDK
1839 HalAllocateCommonBuffer(
1840 IN PADAPTER_OBJECT AdapterObject
,
1842 OUT PPHYSICAL_ADDRESS LogicalAddress
,
1843 IN BOOLEAN CacheEnabled
);
1845 //DECLSPEC_DEPRECATED_DDK
1849 HalFreeCommonBuffer(
1850 IN PADAPTER_OBJECT AdapterObject
,
1852 IN PHYSICAL_ADDRESS LogicalAddress
,
1853 IN PVOID VirtualAddress
,
1854 IN BOOLEAN CacheEnabled
);
1856 //DECLSPEC_DEPRECATED_DDK
1861 IN PADAPTER_OBJECT AdapterObject
);
1866 HalAllocateAdapterChannel(
1867 IN PADAPTER_OBJECT AdapterObject
,
1868 IN PWAIT_CONTEXT_BLOCK Wcb
,
1869 IN ULONG NumberOfMapRegisters
,
1870 IN PDRIVER_CONTROL ExecutionRoutine
);
1872 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
1874 #endif /* defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) */
1876 /* I/O Manager Functions */
1879 * VOID IoAssignArcName(
1880 * IN PUNICODE_STRING ArcName,
1881 * IN PUNICODE_STRING DeviceName);
1883 #define IoAssignArcName(_ArcName, _DeviceName) ( \
1884 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
1888 * IoDeassignArcName(
1889 * IN PUNICODE_STRING ArcName)
1891 #define IoDeassignArcName IoDeleteSymbolicLink
1893 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1895 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
1899 IoAllocateAdapterChannel(
1900 IN PADAPTER_OBJECT AdapterObject
,
1901 IN PDEVICE_OBJECT DeviceObject
,
1902 IN ULONG NumberOfMapRegisters
,
1903 IN PDRIVER_CONTROL ExecutionRoutine
,
1907 //DECLSPEC_DEPRECATED_DDK
1912 IN PADAPTER_OBJECT AdapterObject
,
1914 IN PVOID MapRegisterBase
,
1916 IN OUT PULONG Length
,
1917 IN BOOLEAN WriteToDevice
);
1922 IoAllocateController(
1923 IN PCONTROLLER_OBJECT ControllerObject
,
1924 IN PDEVICE_OBJECT DeviceObject
,
1925 IN PDRIVER_CONTROL ExecutionRoutine
,
1926 IN PVOID Context OPTIONAL
);
1938 IN PCONTROLLER_OBJECT ControllerObject
);
1944 IN PCONTROLLER_OBJECT ControllerObject
);
1947 PCONFIGURATION_INFORMATION
1949 IoGetConfigurationInformation(
1955 IoGetDeviceToVerify(
1956 IN PETHREAD Thread
);
1962 IN PDEVICE_OBJECT DeviceObject
,
1963 IN PFILE_OBJECT FileObject
);
1968 IoGetFileObjectGenericMapping(
1974 IoMakeAssociatedIrp(
1976 IN CCHAR StackSize
);
1981 IoQueryDeviceDescription(
1982 IN PINTERFACE_TYPE BusType OPTIONAL
,
1983 IN PULONG BusNumber OPTIONAL
,
1984 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
1985 IN PULONG ControllerNumber OPTIONAL
,
1986 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
1987 IN PULONG PeripheralNumber OPTIONAL
,
1988 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
1989 IN OUT PVOID Context OPTIONAL
);
1996 IN PVPB Vpb OPTIONAL
,
1997 IN PDEVICE_OBJECT RealDeviceObject
);
2002 IoRaiseInformationalHardError(
2003 IN NTSTATUS ErrorStatus
,
2004 IN PUNICODE_STRING String OPTIONAL
,
2005 IN PKTHREAD Thread OPTIONAL
);
2010 IoRegisterBootDriverReinitialization(
2011 IN PDRIVER_OBJECT DriverObject
,
2012 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2013 IN PVOID Context OPTIONAL
);
2018 IoRegisterDriverReinitialization(
2019 IN PDRIVER_OBJECT DriverObject
,
2020 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2021 IN PVOID Context OPTIONAL
);
2026 IoAttachDeviceByPointer(
2027 IN PDEVICE_OBJECT SourceDevice
,
2028 IN PDEVICE_OBJECT TargetDevice
);
2033 IoReportDetectedDevice(
2034 IN PDRIVER_OBJECT DriverObject
,
2035 IN INTERFACE_TYPE LegacyBusType
,
2037 IN ULONG SlotNumber
,
2038 IN PCM_RESOURCE_LIST ResourceList OPTIONAL
,
2039 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
2040 IN BOOLEAN ResourceAssigned
,
2041 IN OUT PDEVICE_OBJECT
*DeviceObject
);
2046 IoReportResourceForDetection(
2047 IN PDRIVER_OBJECT DriverObject
,
2048 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2049 IN ULONG DriverListSize OPTIONAL
,
2050 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2051 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2052 IN ULONG DeviceListSize OPTIONAL
,
2053 OUT PBOOLEAN ConflictDetected
);
2058 IoReportResourceUsage(
2059 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2060 IN PDRIVER_OBJECT DriverObject
,
2061 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2062 IN ULONG DriverListSize OPTIONAL
,
2063 IN PDEVICE_OBJECT DeviceObject
,
2064 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2065 IN ULONG DeviceListSize OPTIONAL
,
2066 IN BOOLEAN OverrideConflict
,
2067 OUT PBOOLEAN ConflictDetected
);
2072 IoSetHardErrorOrVerifyDevice(
2074 IN PDEVICE_OBJECT DeviceObject
);
2080 IN PUNICODE_STRING RegistryPath
,
2081 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2082 IN PDRIVER_OBJECT DriverObject
,
2083 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2084 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL
,
2085 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
2087 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2089 #if (NTDDI_VERSION >= NTDDI_WINXP)
2095 IN PDEVICE_OBJECT DeviceObject
,
2096 IN
struct _CREATE_DISK
* Disk OPTIONAL
);
2101 IoReadDiskSignature(
2102 IN PDEVICE_OBJECT DeviceObject
,
2103 IN ULONG BytesPerSector
,
2104 OUT PDISK_SIGNATURE Signature
);
2109 IoReadPartitionTable(
2110 IN PDEVICE_OBJECT DeviceObject
,
2111 IN ULONG SectorSize
,
2112 IN BOOLEAN ReturnRecognizedPartitions
,
2113 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2118 IoReadPartitionTableEx(
2119 IN PDEVICE_OBJECT DeviceObject
,
2120 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
2125 IoSetPartitionInformation(
2126 IN PDEVICE_OBJECT DeviceObject
,
2127 IN ULONG SectorSize
,
2128 IN ULONG PartitionNumber
,
2129 IN ULONG PartitionType
);
2134 IoSetPartitionInformationEx(
2135 IN PDEVICE_OBJECT DeviceObject
,
2136 IN ULONG PartitionNumber
,
2137 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
2142 IoSetSystemPartition(
2143 IN PUNICODE_STRING VolumeNameString
);
2148 IoSetThreadHardErrorMode(
2149 IN BOOLEAN EnableHardErrors
);
2154 IoVerifyPartitionTable(
2155 IN PDEVICE_OBJECT DeviceObject
,
2156 IN BOOLEAN FixErrors
);
2161 IoVolumeDeviceToDosName(
2162 IN PVOID VolumeDeviceObject
,
2163 OUT PUNICODE_STRING DosName
);
2168 IoWritePartitionTable(
2169 IN PDEVICE_OBJECT DeviceObject
,
2170 IN ULONG SectorSize
,
2171 IN ULONG SectorsPerTrack
,
2172 IN ULONG NumberOfHeads
,
2173 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2178 IoWritePartitionTableEx(
2179 IN PDEVICE_OBJECT DeviceObject
,
2180 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*DriveLayout
);
2182 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2184 /** Kernel debugger routines **/
2192 IN ULONG MaximumResponseLength
);
2194 /* Kernel Functions */
2196 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2203 IN ULONG BugCheckCode
);
2209 IN OUT PRKEVENT Event
,
2210 IN KPRIORITY Increment
,
2216 KeSetBasePriorityThread(
2217 IN OUT PRKTHREAD Thread
,
2222 /* Memory Manager Types */
2224 typedef struct _PHYSICAL_MEMORY_RANGE
{
2225 PHYSICAL_ADDRESS BaseAddress
;
2226 LARGE_INTEGER NumberOfBytes
;
2227 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
2229 /* Memory Manager Functions */
2231 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2234 PPHYSICAL_MEMORY_RANGE
2236 MmGetPhysicalMemoryRanges(
2242 MmGetPhysicalAddress(
2243 IN PVOID BaseAddress
);
2248 MmIsNonPagedSystemAddressValid(
2249 IN PVOID VirtualAddress
);
2254 MmAllocateNonCachedMemory(
2255 IN SIZE_T NumberOfBytes
);
2260 MmFreeNonCachedMemory(
2261 IN PVOID BaseAddress
,
2262 IN SIZE_T NumberOfBytes
);
2267 MmGetVirtualForPhysical(
2268 IN PHYSICAL_ADDRESS PhysicalAddress
);
2273 MmMapUserAddressesToPage(
2274 IN PVOID BaseAddress
,
2275 IN SIZE_T NumberOfBytes
,
2276 IN PVOID PageAddress
);
2282 IN PHYSICAL_ADDRESS PhysicalAddress
,
2283 IN SIZE_T NumberOfBytes
,
2284 IN MEMORY_CACHING_TYPE CacheType
);
2289 MmMapViewInSessionSpace(
2291 OUT PVOID
*MappedBase
,
2292 IN OUT PSIZE_T ViewSize
);
2297 MmMapViewInSystemSpace(
2299 OUT PVOID
*MappedBase
,
2300 IN OUT PSIZE_T ViewSize
);
2306 IN PVOID VirtualAddress
);
2311 MmIsThisAnNtAsSystem(
2317 MmLockPagableSectionByHandle(
2318 IN PVOID ImageSectionHandle
);
2323 MmUnmapViewInSessionSpace(
2324 IN PVOID MappedBase
);
2329 MmUnmapViewInSystemSpace(
2330 IN PVOID MappedBase
);
2335 MmUnsecureVirtualMemory(
2336 IN HANDLE SecureHandle
);
2341 MmRemovePhysicalMemory(
2342 IN PPHYSICAL_ADDRESS StartAddress
,
2343 IN OUT PLARGE_INTEGER NumberOfBytes
);
2348 MmSecureVirtualMemory(
2351 IN ULONG ProbeMode
);
2356 MmUnmapVideoDisplay(
2357 IN PVOID BaseAddress
,
2358 IN SIZE_T NumberOfBytes
);
2360 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2362 /* NtXxx Functions */
2368 OUT PHANDLE ProcessHandle
,
2369 IN ACCESS_MASK DesiredAccess
,
2370 IN POBJECT_ATTRIBUTES ObjectAttributes
,
2371 IN PCLIENT_ID ClientId OPTIONAL
);
2376 NtQueryInformationProcess(
2377 IN HANDLE ProcessHandle
,
2378 IN PROCESSINFOCLASS ProcessInformationClass
,
2379 OUT PVOID ProcessInformation OPTIONAL
,
2380 IN ULONG ProcessInformationLength
,
2381 OUT PULONG ReturnLength OPTIONAL
);
2383 /** Process manager types **/
2386 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
2388 IN HANDLE ProcessId
,
2392 (NTAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
2393 IN HANDLE ProcessId
,
2398 (NTAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
2399 IN PUNICODE_STRING FullImageName
,
2400 IN HANDLE ProcessId
,
2401 IN PIMAGE_INFO ImageInfo
);
2403 /** Process manager routines **/
2405 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2410 PsSetLoadImageNotifyRoutine(
2411 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
2416 PsSetCreateThreadNotifyRoutine(
2417 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
2422 PsSetCreateProcessNotifyRoutine(
2423 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
2429 PsGetCurrentProcessId(
2435 PsGetCurrentThreadId(
2442 OUT PULONG MajorVersion OPTIONAL
,
2443 OUT PULONG MinorVersion OPTIONAL
,
2444 OUT PULONG BuildNumber OPTIONAL
,
2445 OUT PUNICODE_STRING CSDVersion OPTIONAL
);
2447 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2449 #if (NTDDI_VERSION >= NTDDI_WINXP)
2455 IN PEPROCESS Process
);
2460 PsRemoveCreateThreadNotifyRoutine(
2461 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
2466 PsRemoveLoadImageNotifyRoutine(
2467 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
2469 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2471 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess
;
2475 typedef struct _RTL_SPLAY_LINKS
{
2476 struct _RTL_SPLAY_LINKS
*Parent
;
2477 struct _RTL_SPLAY_LINKS
*LeftChild
;
2478 struct _RTL_SPLAY_LINKS
*RightChild
;
2479 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
2483 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
2485 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
2486 *CallersAddress = (PVOID)_ReturnAddress(); \
2487 *CallersCaller = NULL;
2490 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2494 RtlGetCallersAddress(
2495 OUT PVOID
*CallersAddress
,
2496 OUT PVOID
*CallersCaller
);
2501 #if !defined(MIDL_PASS)
2506 RtlConvertLongToLuid(
2512 Temp
.QuadPart
= Val
;
2513 Luid
.LowPart
= Temp
.u
.LowPart
;
2514 Luid
.HighPart
= Temp
.u
.HighPart
;
2521 RtlConvertUlongToLuid(
2533 #if defined(_AMD64_) || defined(_IA64_)
2534 //DECLSPEC_DEPRECATED_DDK_WINXP
2538 RtlLargeIntegerDivide(
2539 IN LARGE_INTEGER Dividend
,
2540 IN LARGE_INTEGER Divisor
,
2541 OUT PLARGE_INTEGER Remainder OPTIONAL
)
2544 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
2546 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
2552 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2556 RtlLargeIntegerDivide(
2557 IN LARGE_INTEGER Dividend
,
2558 IN LARGE_INTEGER Divisor
,
2559 OUT PLARGE_INTEGER Remainder OPTIONAL
);
2562 #endif /* defined(_AMD64_) || defined(_IA64_) */
2564 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2569 RtlPrefixUnicodeString(
2570 IN PCUNICODE_STRING String1
,
2571 IN PCUNICODE_STRING String2
,
2572 IN BOOLEAN CaseInSensitive
);
2578 IN OUT PSTRING DestinationString
,
2579 IN
const PSTRING SourceString
);
2584 RtlUpcaseUnicodeString(
2585 IN OUT PUNICODE_STRING DestinationString
,
2586 IN PCUNICODE_STRING SourceString
,
2587 IN BOOLEAN AllocateDestinationString
);
2593 IN OUT PACCESS_MASK AccessMask
,
2594 IN PGENERIC_MAPPING GenericMapping
);
2599 RtlVolumeDeviceToDosName(
2600 IN PVOID VolumeDeviceObject
,
2601 OUT PUNICODE_STRING DosName
);
2607 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
2612 RtlVerifyVersionInfo(
2613 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
2615 IN ULONGLONG ConditionMask
);
2621 IN
const PSTRING String1
,
2622 IN
const PSTRING String2
,
2623 BOOLEAN CaseInSensitive
);
2629 OUT PSTRING DestinationString
,
2630 IN
const PSTRING SourceString OPTIONAL
);
2636 IN
const PSTRING String1
,
2637 IN
const PSTRING String2
,
2638 IN BOOLEAN CaseInSensitive
);
2645 IN ULONG Base OPTIONAL
,
2662 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2664 /* Security reference monitor routines */
2666 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2670 SeSinglePrivilegeCheck(
2671 IN LUID PrivilegeValue
,
2672 IN KPROCESSOR_MODE PreviousMode
);
2675 /* ZwXxx Functions */
2677 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2682 IN HANDLE TimerHandle
,
2683 OUT PBOOLEAN CurrentState OPTIONAL
);
2688 OUT PHANDLE TimerHandle
,
2689 IN ACCESS_MASK DesiredAccess
,
2690 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
2691 IN TIMER_TYPE TimerType
);
2696 OUT PHANDLE TimerHandle
,
2697 IN ACCESS_MASK DesiredAccess
,
2698 IN POBJECT_ATTRIBUTES ObjectAttributes
);
2703 ZwSetInformationThread(
2704 IN HANDLE ThreadHandle
,
2705 IN THREADINFOCLASS ThreadInformationClass
,
2706 IN PVOID ThreadInformation
,
2707 IN ULONG ThreadInformationLength
);
2712 IN HANDLE TimerHandle
,
2713 IN PLARGE_INTEGER DueTime
,
2714 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
2715 IN PVOID TimerContext OPTIONAL
,
2716 IN BOOLEAN ResumeTimer
,
2717 IN LONG Period OPTIONAL
,
2718 OUT PBOOLEAN PreviousState OPTIONAL
);
2722 /* Windows Device Driver Kit */
2730 #endif /* _NTDDK_ */