4 * Windows Device Driver Kit
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
22 * DBG - Debugging enabled/disabled (0/1)
23 * POOL_TAGGING - Enable pool tagging
24 * _X86_ - X86 environment
30 #if !defined(_NTHAL_) && !defined(_NTIFS_)
31 #define _NTDDK_INCLUDED_
38 #define _CTYPE_DISABLE_MACROS
50 #include <stdarg.h> // FIXME
51 #include <basetyps.h> // FIXME
58 struct _LOADER_PARAMETER_BLOCK
;
60 struct _DRIVE_LAYOUT_INFORMATION_EX
;
61 struct _SET_PARTITION_INFORMATION_EX
;
71 typedef struct _BUS_HANDLER
*PBUS_HANDLER
;
73 #define EXCEPTION_READ_FAULT 0
74 #define EXCEPTION_WRITE_FAULT 1
75 #define EXCEPTION_EXECUTE_FAULT 8
77 #if (NTDDI_VERSION >= NTDDI_VISTA)
78 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
79 #elif (NTDDI_VERSION >= NTDDI_WINXP)
80 extern NTSYSAPI CCHAR KeNumberProcessors
;
82 extern PCCHAR KeNumberProcessors
;
85 #define MAX_WOW64_SHARED_ENTRIES 16
87 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
88 #define NX_SUPPORT_POLICY_ALWAYSON 1
89 #define NX_SUPPORT_POLICY_OPTIN 2
90 #define NX_SUPPORT_POLICY_OPTOUT 3
96 #define IRP_MN_QUERY_DIRECTORY 0x01
97 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
99 #define IRP_MN_USER_FS_REQUEST 0x00
100 #define IRP_MN_MOUNT_VOLUME 0x01
101 #define IRP_MN_VERIFY_VOLUME 0x02
102 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
103 #define IRP_MN_TRACK_LINK 0x04
104 #define IRP_MN_KERNEL_CALL 0x04
106 #define IRP_MN_LOCK 0x01
107 #define IRP_MN_UNLOCK_SINGLE 0x02
108 #define IRP_MN_UNLOCK_ALL 0x03
109 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
111 #define IRP_MN_FLUSH_AND_PURGE 0x01
113 #define IRP_MN_NORMAL 0x00
114 #define IRP_MN_DPC 0x01
115 #define IRP_MN_MDL 0x02
116 #define IRP_MN_COMPLETE 0x04
117 #define IRP_MN_COMPRESSED 0x08
119 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
120 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
121 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
123 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
125 typedef struct _IO_COUNTERS
{
126 ULONGLONG ReadOperationCount
;
127 ULONGLONG WriteOperationCount
;
128 ULONGLONG OtherOperationCount
;
129 ULONGLONG ReadTransferCount
;
130 ULONGLONG WriteTransferCount
;
131 ULONGLONG OtherTransferCount
;
132 } IO_COUNTERS
, *PIO_COUNTERS
;
134 typedef struct _VM_COUNTERS
{
135 SIZE_T PeakVirtualSize
;
137 ULONG PageFaultCount
;
138 SIZE_T PeakWorkingSetSize
;
139 SIZE_T WorkingSetSize
;
140 SIZE_T QuotaPeakPagedPoolUsage
;
141 SIZE_T QuotaPagedPoolUsage
;
142 SIZE_T QuotaPeakNonPagedPoolUsage
;
143 SIZE_T QuotaNonPagedPoolUsage
;
144 SIZE_T PagefileUsage
;
145 SIZE_T PeakPagefileUsage
;
146 } VM_COUNTERS
, *PVM_COUNTERS
;
148 typedef struct _VM_COUNTERS_EX
150 SIZE_T PeakVirtualSize
;
152 ULONG PageFaultCount
;
153 SIZE_T PeakWorkingSetSize
;
154 SIZE_T WorkingSetSize
;
155 SIZE_T QuotaPeakPagedPoolUsage
;
156 SIZE_T QuotaPagedPoolUsage
;
157 SIZE_T QuotaPeakNonPagedPoolUsage
;
158 SIZE_T QuotaNonPagedPoolUsage
;
159 SIZE_T PagefileUsage
;
160 SIZE_T PeakPagefileUsage
;
162 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
164 typedef struct _POOLED_USAGE_AND_LIMITS
166 SIZE_T PeakPagedPoolUsage
;
167 SIZE_T PagedPoolUsage
;
168 SIZE_T PagedPoolLimit
;
169 SIZE_T PeakNonPagedPoolUsage
;
170 SIZE_T NonPagedPoolUsage
;
171 SIZE_T NonPagedPoolLimit
;
172 SIZE_T PeakPagefileUsage
;
173 SIZE_T PagefileUsage
;
174 SIZE_T PagefileLimit
;
175 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
177 /* DEVICE_OBJECT.Flags */
179 #define DO_VERIFY_VOLUME 0x00000002
180 #define DO_BUFFERED_IO 0x00000004
181 #define DO_EXCLUSIVE 0x00000008
182 #define DO_DIRECT_IO 0x00000010
183 #define DO_MAP_IO_BUFFER 0x00000020
184 #define DO_DEVICE_HAS_NAME 0x00000040
185 #define DO_DEVICE_INITIALIZING 0x00000080
186 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
187 #define DO_LONG_TERM_REQUESTS 0x00000200
188 #define DO_NEVER_LAST_DEVICE 0x00000400
189 #define DO_SHUTDOWN_REGISTERED 0x00000800
190 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
191 #define DO_POWER_PAGABLE 0x00002000
192 #define DO_POWER_INRUSH 0x00004000
193 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
194 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
195 #define DO_FORCE_NEITHER_IO 0x00080000
196 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
197 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
198 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
199 #define DO_DISALLOW_EXECUTE 0x00800000
201 #define DRVO_REINIT_REGISTERED 0x00000008
202 #define DRVO_INITIALIZED 0x00000010
203 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
204 #define DRVO_LEGACY_RESOURCES 0x00000040
206 typedef enum _ARBITER_REQUEST_SOURCE
{
207 ArbiterRequestUndefined
= -1,
208 ArbiterRequestLegacyReported
,
209 ArbiterRequestHalReported
,
210 ArbiterRequestLegacyAssigned
,
211 ArbiterRequestPnpDetected
,
212 ArbiterRequestPnpEnumerated
213 } ARBITER_REQUEST_SOURCE
;
215 typedef enum _ARBITER_RESULT
{
216 ArbiterResultUndefined
= -1,
217 ArbiterResultSuccess
,
218 ArbiterResultExternalConflict
,
219 ArbiterResultNullRequest
222 typedef enum _ARBITER_ACTION
{
223 ArbiterActionTestAllocation
,
224 ArbiterActionRetestAllocation
,
225 ArbiterActionCommitAllocation
,
226 ArbiterActionRollbackAllocation
,
227 ArbiterActionQueryAllocatedResources
,
228 ArbiterActionWriteReservedResources
,
229 ArbiterActionQueryConflict
,
230 ArbiterActionQueryArbitrate
,
231 ArbiterActionAddReserved
,
232 ArbiterActionBootAllocation
233 } ARBITER_ACTION
, *PARBITER_ACTION
;
235 typedef struct _ARBITER_CONFLICT_INFO
{
236 PDEVICE_OBJECT OwningObject
;
239 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
241 typedef struct _ARBITER_PARAMETERS
{
244 IN OUT PLIST_ENTRY ArbitrationList
;
245 IN ULONG AllocateFromCount
;
246 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
249 IN OUT PLIST_ENTRY ArbitrationList
;
250 IN ULONG AllocateFromCount
;
251 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
254 IN OUT PLIST_ENTRY ArbitrationList
;
257 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
258 } QueryAllocatedResources
;
260 IN PDEVICE_OBJECT PhysicalDeviceObject
;
261 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
262 OUT PULONG ConflictCount
;
263 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
266 IN PLIST_ENTRY ArbitrationList
;
269 IN PDEVICE_OBJECT ReserveDevice
;
272 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
274 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
276 typedef struct _ARBITER_LIST_ENTRY
{
277 LIST_ENTRY ListEntry
;
278 ULONG AlternativeCount
;
279 PIO_RESOURCE_DESCRIPTOR Alternatives
;
280 PDEVICE_OBJECT PhysicalDeviceObject
;
281 ARBITER_REQUEST_SOURCE RequestSource
;
284 INTERFACE_TYPE InterfaceType
;
287 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
288 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
289 ARBITER_RESULT Result
;
290 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
293 (NTAPI
*PARBITER_HANDLER
)(
294 IN OUT PVOID Context
,
295 IN ARBITER_ACTION Action
,
296 IN OUT PARBITER_PARAMETERS Parameters
);
298 #define ARBITER_PARTIAL 0x00000001
300 typedef struct _ARBITER_INTERFACE
{
304 PINTERFACE_REFERENCE InterfaceReference
;
305 PINTERFACE_DEREFERENCE InterfaceDereference
;
306 PARBITER_HANDLER ArbiterHandler
;
308 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
310 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
311 HalInstalledBusInformation
,
312 HalProfileSourceInformation
,
313 HalInformationClassUnused1
,
315 HalProcessorSpeedInformation
,
316 HalCallbackInformation
,
317 HalMapRegisterInformation
,
318 HalMcaLogInformation
,
319 HalFrameBufferCachingInformation
,
320 HalDisplayBiosInformation
,
321 HalProcessorFeatureInformation
,
322 HalNumaTopologyInterface
,
324 HalCmcLogInformation
,
325 HalCpeLogInformation
,
326 HalQueryMcaInterface
,
327 HalQueryAMLIIllegalIOPortAddresses
,
328 HalQueryMaxHotPlugMemoryAddress
,
329 HalPartitionIpiInterface
,
330 HalPlatformInformation
,
331 HalQueryProfileSourceList
,
332 HalInitLogInformation
,
333 HalFrequencyInformation
,
334 HalProcessorBrandString
,
335 HalHypervisorInformation
,
336 HalPlatformTimerInformation
,
337 HalAcpiAuditInformation
338 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
340 typedef enum _HAL_SET_INFORMATION_CLASS
{
341 HalProfileSourceInterval
,
342 HalProfileSourceInterruptHandler
,
343 HalMcaRegisterDriver
,
344 HalKernelErrorHandler
,
345 HalCmcRegisterDriver
,
346 HalCpeRegisterDriver
,
350 HalGenerateCmcInterrupt
,
351 HalProfileSourceTimerHandler
,
353 HalProfileDpgoSourceInterruptHandler
354 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
356 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
{
357 KPROFILE_SOURCE Source
;
359 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
361 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
{
362 KPROFILE_SOURCE Source
;
365 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
367 typedef struct _MAP_REGISTER_ENTRY
{
369 BOOLEAN WriteToDevice
;
370 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
372 typedef struct _DEBUG_DEVICE_ADDRESS
{
376 PUCHAR TranslatedAddress
;
378 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
380 typedef struct _DEBUG_MEMORY_REQUIREMENTS
{
381 PHYSICAL_ADDRESS Start
;
382 PHYSICAL_ADDRESS MaxEnd
;
383 PVOID VirtualAddress
;
387 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
389 typedef struct _DEBUG_DEVICE_DESCRIPTOR
{
400 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
401 DEBUG_MEMORY_REQUIREMENTS Memory
;
402 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
404 typedef struct _PM_DISPATCH_TABLE
{
408 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
410 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
411 TranslateChildToParent
,
412 TranslateParentToChild
413 } RESOURCE_TRANSLATION_DIRECTION
;
416 (NTAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
417 IN OUT PVOID Context
,
418 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
419 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
420 IN ULONG AlternativesCount OPTIONAL
,
421 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
422 IN PDEVICE_OBJECT PhysicalDeviceObject
,
423 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
426 (NTAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
427 IN PVOID Context OPTIONAL
,
428 IN PIO_RESOURCE_DESCRIPTOR Source
,
429 IN PDEVICE_OBJECT PhysicalDeviceObject
,
430 OUT PULONG TargetCount
,
431 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
433 typedef struct _TRANSLATOR_INTERFACE
{
437 PINTERFACE_REFERENCE InterfaceReference
;
438 PINTERFACE_DEREFERENCE InterfaceDereference
;
439 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
440 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
441 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
444 (FASTCALL
*pHalExamineMBR
)(
445 IN PDEVICE_OBJECT DeviceObject
,
447 IN ULONG MBRTypeIdentifier
,
451 (FASTCALL
*pHalIoReadPartitionTable
)(
452 IN PDEVICE_OBJECT DeviceObject
,
454 IN BOOLEAN ReturnRecognizedPartitions
,
455 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
458 (FASTCALL
*pHalIoSetPartitionInformation
)(
459 IN PDEVICE_OBJECT DeviceObject
,
461 IN ULONG PartitionNumber
,
462 IN ULONG PartitionType
);
465 (FASTCALL
*pHalIoWritePartitionTable
)(
466 IN PDEVICE_OBJECT DeviceObject
,
468 IN ULONG SectorsPerTrack
,
469 IN ULONG NumberOfHeads
,
470 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
473 (FASTCALL
*pHalHandlerForBus
)(
474 IN INTERFACE_TYPE InterfaceType
,
478 (FASTCALL
*pHalReferenceBusHandler
)(
479 IN PBUS_HANDLER BusHandler
);
482 (NTAPI
*pHalQuerySystemInformation
)(
483 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
486 OUT PULONG ReturnedLength
);
489 (NTAPI
*pHalSetSystemInformation
)(
490 IN HAL_SET_INFORMATION_CLASS InformationClass
,
495 (NTAPI
*pHalQueryBusSlots
)(
496 IN PBUS_HANDLER BusHandler
,
498 OUT PULONG SlotNumbers
,
499 OUT PULONG ReturnedLength
);
502 (NTAPI
*pHalInitPnpDriver
)(
506 (NTAPI
*pHalInitPowerManagement
)(
507 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
508 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
510 typedef struct _DMA_ADAPTER
*
511 (NTAPI
*pHalGetDmaAdapter
)(
513 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
514 OUT PULONG NumberOfMapRegisters
);
517 (NTAPI
*pHalGetInterruptTranslator
)(
518 IN INTERFACE_TYPE ParentInterfaceType
,
519 IN ULONG ParentBusNumber
,
520 IN INTERFACE_TYPE BridgeInterfaceType
,
523 OUT PTRANSLATOR_INTERFACE Translator
,
524 OUT PULONG BridgeBusNumber
);
527 (NTAPI
*pHalStartMirroring
)(
531 (NTAPI
*pHalEndMirroring
)(
532 IN ULONG PassNumber
);
535 (NTAPI
*pHalMirrorPhysicalMemory
)(
536 IN PHYSICAL_ADDRESS PhysicalAddress
,
537 IN LARGE_INTEGER NumberOfBytes
);
540 (NTAPI
*pHalMirrorVerify
)(
541 IN PHYSICAL_ADDRESS PhysicalAddress
,
542 IN LARGE_INTEGER NumberOfBytes
);
545 (NTAPI
*pHalEndOfBoot
)(
550 (NTAPI
*pHalTranslateBusAddress
)(
551 IN INTERFACE_TYPE InterfaceType
,
553 IN PHYSICAL_ADDRESS BusAddress
,
554 IN OUT PULONG AddressSpace
,
555 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
559 (NTAPI
*pHalAssignSlotResources
)(
560 IN PUNICODE_STRING RegistryPath
,
561 IN PUNICODE_STRING DriverClassName OPTIONAL
,
562 IN PDRIVER_OBJECT DriverObject
,
563 IN PDEVICE_OBJECT DeviceObject
,
564 IN INTERFACE_TYPE BusType
,
567 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
571 (NTAPI
*pHalHaltSystem
)(
576 (NTAPI
*pHalResetDisplay
)(
581 (NTAPI
*pHalVectorToIDTEntry
)(
586 (NTAPI
*pHalFindBusAddressTranslation
)(
587 IN PHYSICAL_ADDRESS BusAddress
,
588 IN OUT PULONG AddressSpace
,
589 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
590 IN OUT PULONG_PTR Context
,
595 (NTAPI
*pKdSetupPciDeviceForDebugging
)(
596 IN PVOID LoaderBlock OPTIONAL
,
597 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
601 (NTAPI
*pKdReleasePciDeviceForDebugging
)(
602 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
606 (NTAPI
*pKdGetAcpiTablePhase0
)(
607 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
612 (NTAPI
*pHalGetAcpiTable
)(
614 IN PCSTR OemId OPTIONAL
,
615 IN PCSTR OemTableId OPTIONAL
);
619 (NTAPI
*pKdCheckPowerButton
)(
622 #if (NTDDI_VERSION >= NTDDI_VISTA)
625 (NTAPI
*pKdMapPhysicalMemory64
)(
626 IN PHYSICAL_ADDRESS PhysicalAddress
,
627 IN ULONG NumberPages
,
628 IN BOOLEAN FlushCurrentTLB
);
632 (NTAPI
*pKdUnmapVirtualAddress
)(
633 IN PVOID VirtualAddress
,
634 IN ULONG NumberPages
,
635 IN BOOLEAN FlushCurrentTLB
);
639 (NTAPI
*pKdMapPhysicalMemory64
)(
640 IN PHYSICAL_ADDRESS PhysicalAddress
,
641 IN ULONG NumberPages
);
645 (NTAPI
*pKdUnmapVirtualAddress
)(
646 IN PVOID VirtualAddress
,
647 IN ULONG NumberPages
);
653 (NTAPI
*pKdGetPciDataByOffset
)(
662 (NTAPI
*pKdSetPciDataByOffset
)(
670 (NTAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
676 (NTAPI
*PCI_ERROR_HANDLER_CALLBACK
)(
681 (NTAPI
*pHalSetPciErrorHandlerCallback
)(
682 IN PCI_ERROR_HANDLER_CALLBACK Callback
);
684 #if 1 /* Not present in WDK 7600 */
686 (FASTCALL
*pHalIoAssignDriveLetters
)(
687 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
688 IN PSTRING NtDeviceName
,
689 OUT PUCHAR NtSystemPath
,
690 OUT PSTRING NtSystemPathString
);
695 pHalQuerySystemInformation HalQuerySystemInformation
;
696 pHalSetSystemInformation HalSetSystemInformation
;
697 pHalQueryBusSlots HalQueryBusSlots
;
699 pHalExamineMBR HalExamineMBR
;
700 #if 1 /* Not present in WDK 7600 */
701 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
703 pHalIoReadPartitionTable HalIoReadPartitionTable
;
704 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
705 pHalIoWritePartitionTable HalIoWritePartitionTable
;
706 pHalHandlerForBus HalReferenceHandlerForBus
;
707 pHalReferenceBusHandler HalReferenceBusHandler
;
708 pHalReferenceBusHandler HalDereferenceBusHandler
;
709 pHalInitPnpDriver HalInitPnpDriver
;
710 pHalInitPowerManagement HalInitPowerManagement
;
711 pHalGetDmaAdapter HalGetDmaAdapter
;
712 pHalGetInterruptTranslator HalGetInterruptTranslator
;
713 pHalStartMirroring HalStartMirroring
;
714 pHalEndMirroring HalEndMirroring
;
715 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
716 pHalEndOfBoot HalEndOfBoot
;
717 pHalMirrorVerify HalMirrorVerify
;
718 pHalGetAcpiTable HalGetCachedAcpiTable
;
719 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback
;
721 pHalGetErrorCapList HalGetErrorCapList
;
722 pHalInjectError HalInjectError
;
724 } HAL_DISPATCH
, *PHAL_DISPATCH
;
726 /* GCC/MSVC and WDK compatible declaration */
727 extern NTKERNELAPI HAL_DISPATCH HalDispatchTable
;
729 #if defined(_NTOSKRNL_) || defined(_BLDR_)
730 #define HALDISPATCH (&HalDispatchTable)
732 /* This is a WDK compatibility definition */
733 #define HalDispatchTable (&HalDispatchTable)
734 #define HALDISPATCH HalDispatchTable
737 #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
738 #define HalDispatchTableVersion HALDISPATCH->Version
739 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
740 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
741 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
742 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
743 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
744 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
745 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
746 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
747 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
748 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
749 #define HalStartMirroring HALDISPATCH->HalStartMirroring
750 #define HalEndMirroring HALDISPATCH->HalEndMirroring
751 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
752 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
753 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
755 typedef struct _FILE_ALIGNMENT_INFORMATION
{
756 ULONG AlignmentRequirement
;
757 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
759 typedef struct _FILE_NAME_INFORMATION
{
760 ULONG FileNameLength
;
762 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
765 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
766 ULONG FileAttributes
;
768 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
770 typedef struct _FILE_DISPOSITION_INFORMATION
{
772 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
774 typedef struct _FILE_END_OF_FILE_INFORMATION
{
775 LARGE_INTEGER EndOfFile
;
776 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
778 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
779 LARGE_INTEGER ValidDataLength
;
780 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
782 typedef union _FILE_SEGMENT_ELEMENT
{
785 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
787 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
789 #if (NTDDI_VERSION >= NTDDI_WIN2K)
794 IN ULONGLONG ConditionMask
,
799 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
800 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
801 (TypeBitMask), (ComparisonType)))
803 /* RtlVerifyVersionInfo() TypeMask */
805 #define VER_MINORVERSION 0x0000001
806 #define VER_MAJORVERSION 0x0000002
807 #define VER_BUILDNUMBER 0x0000004
808 #define VER_PLATFORMID 0x0000008
809 #define VER_SERVICEPACKMINOR 0x0000010
810 #define VER_SERVICEPACKMAJOR 0x0000020
811 #define VER_SUITENAME 0x0000040
812 #define VER_PRODUCT_TYPE 0x0000080
814 /* RtlVerifyVersionInfo() ComparisonType */
817 #define VER_GREATER 2
818 #define VER_GREATER_EQUAL 3
820 #define VER_LESS_EQUAL 5
824 #define VER_CONDITION_MASK 7
825 #define VER_NUM_BITS_PER_CONDITION_MASK 3
827 typedef struct _IMAGE_INFO
{
828 _ANONYMOUS_UNION
union {
830 _ANONYMOUS_STRUCT
struct {
831 ULONG ImageAddressingMode
:8;
832 ULONG SystemModeImage
:1;
833 ULONG ImageMappedToAllPids
:1;
834 ULONG ExtendedInfoPresent
:1;
841 ULONG ImageSectionNumber
;
842 } IMAGE_INFO
, *PIMAGE_INFO
;
844 #define IMAGE_ADDRESSING_MODE_32BIT 3
846 typedef enum _BUS_DATA_TYPE
{
847 ConfigurationSpaceUndefined
= -1,
859 SgiInternalConfiguration
,
861 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
863 typedef struct _NT_TIB
{
864 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
868 _ANONYMOUS_UNION
union {
872 PVOID ArbitraryUserPointer
;
873 struct _NT_TIB
*Self
;
876 typedef struct _NT_TIB32
{
881 __GNU_EXTENSION
union {
885 ULONG ArbitraryUserPointer
;
887 } NT_TIB32
,*PNT_TIB32
;
889 typedef struct _NT_TIB64
{
890 ULONG64 ExceptionList
;
893 ULONG64 SubSystemTib
;
894 __GNU_EXTENSION
union {
898 ULONG64 ArbitraryUserPointer
;
900 } NT_TIB64
,*PNT_TIB64
;
902 typedef enum _PROCESSINFOCLASS
{
903 ProcessBasicInformation
,
909 ProcessRaisePriority
,
911 ProcessExceptionPort
,
913 ProcessLdtInformation
,
915 ProcessDefaultHardErrorMode
,
916 ProcessIoPortHandlers
,
917 ProcessPooledUsageAndLimits
,
918 ProcessWorkingSetWatch
,
920 ProcessEnableAlignmentFaultFixup
,
921 ProcessPriorityClass
,
922 ProcessWx86Information
,
925 ProcessPriorityBoost
,
927 ProcessSessionInformation
,
928 ProcessForegroundInformation
,
929 ProcessWow64Information
,
930 ProcessImageFileName
,
931 ProcessLUIDDeviceMapsEnabled
,
932 ProcessBreakOnTermination
,
933 ProcessDebugObjectHandle
,
935 ProcessHandleTracing
,
938 ProcessTlsInformation
,
940 ProcessImageInformation
,
943 ProcessInstrumentationCallback
,
944 ProcessThreadStackAllocation
,
945 ProcessWorkingSetWatchEx
,
946 ProcessImageFileNameWin32
,
947 ProcessImageFileMapping
,
948 ProcessAffinityUpdateMode
,
949 ProcessMemoryAllocationMode
,
950 ProcessGroupInformation
,
951 ProcessTokenVirtualizationEnabled
,
952 ProcessConsoleHostProcess
,
953 ProcessWindowInformation
,
957 typedef enum _THREADINFOCLASS
{
958 ThreadBasicInformation
,
963 ThreadImpersonationToken
,
964 ThreadDescriptorTableEntry
,
965 ThreadEnableAlignmentFaultFixup
,
966 ThreadEventPair_Reusable
,
967 ThreadQuerySetWin32StartAddress
,
969 ThreadPerformanceCount
,
971 ThreadIdealProcessor
,
973 ThreadSetTlsArrayAddress
,
975 ThreadHideFromDebugger
,
976 ThreadBreakOnTermination
,
977 ThreadSwitchLegacyState
,
979 ThreadLastSystemCall
,
983 ThreadActualBasePriority
,
984 ThreadTebInformation
,
988 ThreadGroupInformation
,
989 ThreadUmsInformation
,
990 ThreadCounterProfiling
,
991 ThreadIdealProcessorEx
,
995 typedef struct _PROCESS_BASIC_INFORMATION
{
997 struct _PEB
*PebBaseAddress
;
998 ULONG_PTR AffinityMask
;
999 KPRIORITY BasePriority
;
1000 ULONG_PTR UniqueProcessId
;
1001 ULONG_PTR InheritedFromUniqueProcessId
;
1002 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
1004 typedef struct _PROCESS_WS_WATCH_INFORMATION
{
1007 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
1009 typedef struct _PROCESS_DEVICEMAP_INFORMATION
{
1010 __GNU_EXTENSION
union {
1012 HANDLE DirectoryHandle
;
1016 UCHAR DriveType
[32];
1019 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
1021 typedef struct _KERNEL_USER_TIMES
{
1022 LARGE_INTEGER CreateTime
;
1023 LARGE_INTEGER ExitTime
;
1024 LARGE_INTEGER KernelTime
;
1025 LARGE_INTEGER UserTime
;
1026 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1028 typedef struct _PROCESS_ACCESS_TOKEN
{
1031 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1033 typedef struct _PROCESS_SESSION_INFORMATION
{
1035 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1037 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
1038 IoQueryDeviceIdentifier
= 0,
1039 IoQueryDeviceConfigurationData
,
1040 IoQueryDeviceComponentInformation
,
1041 IoQueryDeviceMaxData
1042 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
1044 typedef struct _DISK_SIGNATURE
{
1045 ULONG PartitionStyle
;
1046 _ANONYMOUS_UNION
union {
1055 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
1058 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
1061 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
1062 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
1063 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
1064 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
1066 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1067 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1068 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1069 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1070 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1073 (NTAPI
*PTIMER_APC_ROUTINE
)(
1074 IN PVOID TimerContext
,
1075 IN ULONG TimerLowValue
,
1076 IN LONG TimerHighValue
);
1078 typedef struct _KUSER_SHARED_DATA
1080 ULONG TickCountLowDeprecated
;
1081 ULONG TickCountMultiplier
;
1082 volatile KSYSTEM_TIME InterruptTime
;
1083 volatile KSYSTEM_TIME SystemTime
;
1084 volatile KSYSTEM_TIME TimeZoneBias
;
1085 USHORT ImageNumberLow
;
1086 USHORT ImageNumberHigh
;
1087 WCHAR NtSystemRoot
[260];
1088 ULONG MaxStackTraceDepth
;
1089 ULONG CryptoExponent
;
1091 ULONG LargePageMinimum
;
1093 NT_PRODUCT_TYPE NtProductType
;
1094 BOOLEAN ProductTypeIsValid
;
1095 ULONG NtMajorVersion
;
1096 ULONG NtMinorVersion
;
1097 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
1100 volatile ULONG TimeSlip
;
1101 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
1102 ULONG AltArchitecturePad
[1];
1103 LARGE_INTEGER SystemExpirationDate
;
1105 BOOLEAN KdDebuggerEnabled
;
1106 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
1107 UCHAR NXSupportPolicy
;
1109 volatile ULONG ActiveConsoleId
;
1110 volatile ULONG DismountCount
;
1111 ULONG ComPlusPackage
;
1112 ULONG LastSystemRITEventTickCount
;
1113 ULONG NumberOfPhysicalPages
;
1114 BOOLEAN SafeBootMode
;
1115 #if (NTDDI_VERSION >= NTDDI_WIN7)
1119 UCHAR TscQpcEnabled
:1;
1120 UCHAR TscQpcSpareFlag
:1;
1121 UCHAR TscQpcShift
:6;
1126 #if (NTDDI_VERSION >= NTDDI_VISTA)
1128 ULONG SharedDataFlags
;
1130 ULONG DbgErrorPortPresent
:1;
1131 ULONG DbgElevationEnabled
:1;
1132 ULONG DbgVirtEnabled
:1;
1133 ULONG DbgInstallerDetectEnabled
:1;
1134 ULONG DbgSystemDllRelocated
:1;
1135 ULONG DbgDynProcessorEnabled
:1;
1136 ULONG DbgSEHValidationEnabled
:1;
1143 ULONG DataFlagsPad
[1];
1144 ULONGLONG TestRetInstruction
;
1146 ULONG SystemCallReturn
;
1147 ULONGLONG SystemCallPad
[3];
1148 _ANONYMOUS_UNION
union {
1149 volatile KSYSTEM_TIME TickCount
;
1150 volatile ULONG64 TickCountQuad
;
1151 _ANONYMOUS_STRUCT
struct {
1152 ULONG ReservedTickCountOverlay
[3];
1153 ULONG TickCountPad
[1];
1158 #if (NTDDI_VERSION >= NTDDI_WS03)
1159 LONGLONG ConsoleSessionForegroundProcessId
;
1160 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
1162 #if (NTDDI_VERSION >= NTDDI_VISTA)
1163 #if (NTDDI_VERSION >= NTDDI_WIN7)
1164 USHORT UserModeGlobalLogger
[16];
1166 USHORT UserModeGlobalLogger
[8];
1167 ULONG HeapTracingPid
[2];
1168 ULONG CritSecTracingPid
[2];
1170 ULONG ImageFileExecutionOptions
;
1171 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
1172 ULONG LangGenerationCount
;
1174 /* 4 bytes padding */
1176 ULONGLONG Reserved5
;
1177 volatile ULONG64 InterruptTimeBias
;
1179 #if (NTDDI_VERSION >= NTDDI_WIN7)
1180 volatile ULONG64 TscQpcBias
;
1181 volatile ULONG ActiveProcessorCount
;
1182 volatile USHORT ActiveGroupCount
;
1184 volatile ULONG AitSamplingValue
;
1185 volatile ULONG AppCompatFlag
;
1186 ULONGLONG SystemDllNativeRelocation
;
1187 ULONG SystemDllWowRelocation
;
1189 XSTATE_CONFIGURATION XState
;
1191 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
1195 #define KERNEL_STACK_SIZE 12288
1196 #define KERNEL_LARGE_STACK_SIZE 61440
1197 #define KERNEL_LARGE_STACK_COMMIT 12288
1199 #define SIZE_OF_80387_REGISTERS 80
1201 #define PCR_MINOR_VERSION 1
1202 #define PCR_MAJOR_VERSION 1
1204 #if !defined(RC_INVOKED)
1206 #define CONTEXT_i386 0x10000
1207 #define CONTEXT_i486 0x10000
1208 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
1209 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
1210 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
1211 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
1212 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
1213 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
1215 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
1217 #endif /* !defined(RC_INVOKED) */
1219 typedef struct _KPCR
{
1223 struct _EXCEPTION_REGISTRATION_RECORD
*Used_ExceptionList
;
1224 PVOID Used_StackBase
;
1227 ULONG ContextSwitches
;
1228 KAFFINITY SetMemberCopy
;
1232 struct _KPCR
*SelfPcr
;
1233 struct _KPRCB
*Prcb
;
1238 PVOID KdVersionBlock
;
1239 struct _KIDTENTRY
*IDT
;
1240 struct _KGDTENTRY
*GDT
;
1242 USHORT MajorVersion
;
1243 USHORT MinorVersion
;
1244 KAFFINITY SetMember
;
1245 ULONG StallScaleFactor
;
1249 UCHAR SecondLevelCacheAssociativity
;
1251 ULONG KernelReserved
[14];
1252 ULONG SecondLevelCacheSize
;
1253 ULONG HalReserved
[16];
1256 typedef struct _FLOATING_SAVE_AREA
{
1261 ULONG ErrorSelector
;
1264 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
1266 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
1268 #include "pshpack4.h"
1269 typedef struct _CONTEXT
{
1277 FLOATING_SAVE_AREA FloatSave
;
1294 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
1296 #include "poppack.h"
1302 #if !defined(RC_INVOKED)
1304 #define CONTEXT_AMD64 0x100000
1306 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
1307 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
1308 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
1309 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
1310 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
1312 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1313 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1315 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
1317 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1318 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1319 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1320 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1322 #endif /* RC_INVOKED */
1324 #endif /* _AMD64_ */
1326 typedef enum _INTERLOCKED_RESULT
{
1327 ResultNegative
= RESULT_NEGATIVE
,
1328 ResultZero
= RESULT_ZERO
,
1329 ResultPositive
= RESULT_POSITIVE
1330 } INTERLOCKED_RESULT
;
1332 typedef struct _OSVERSIONINFOA
{
1333 ULONG dwOSVersionInfoSize
;
1334 ULONG dwMajorVersion
;
1335 ULONG dwMinorVersion
;
1336 ULONG dwBuildNumber
;
1338 CHAR szCSDVersion
[128];
1339 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
1341 typedef struct _OSVERSIONINFOW
{
1342 ULONG dwOSVersionInfoSize
;
1343 ULONG dwMajorVersion
;
1344 ULONG dwMinorVersion
;
1345 ULONG dwBuildNumber
;
1347 WCHAR szCSDVersion
[128];
1348 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
1350 typedef struct _OSVERSIONINFOEXA
{
1351 ULONG dwOSVersionInfoSize
;
1352 ULONG dwMajorVersion
;
1353 ULONG dwMinorVersion
;
1354 ULONG dwBuildNumber
;
1356 CHAR szCSDVersion
[128];
1357 USHORT wServicePackMajor
;
1358 USHORT wServicePackMinor
;
1362 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
1364 typedef struct _OSVERSIONINFOEXW
{
1365 ULONG dwOSVersionInfoSize
;
1366 ULONG dwMajorVersion
;
1367 ULONG dwMinorVersion
;
1368 ULONG dwBuildNumber
;
1370 WCHAR szCSDVersion
[128];
1371 USHORT wServicePackMajor
;
1372 USHORT wServicePackMinor
;
1376 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
1379 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
1380 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
1381 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
1382 typedef OSVERSIONINFOW OSVERSIONINFO
;
1383 typedef POSVERSIONINFOW POSVERSIONINFO
;
1384 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
1386 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
1387 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
1388 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
1389 typedef OSVERSIONINFOA OSVERSIONINFO
;
1390 typedef POSVERSIONINFOA POSVERSIONINFO
;
1391 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
1392 #endif /* UNICODE */
1394 /* Executive Types */
1396 #define PROTECTED_POOL 0x80000000
1398 typedef struct _ZONE_SEGMENT_HEADER
{
1399 SINGLE_LIST_ENTRY SegmentList
;
1401 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
1403 typedef struct _ZONE_HEADER
{
1404 SINGLE_LIST_ENTRY FreeList
;
1405 SINGLE_LIST_ENTRY SegmentList
;
1407 ULONG TotalSegmentSize
;
1408 } ZONE_HEADER
, *PZONE_HEADER
;
1410 /* Executive Functions */
1412 static __inline PVOID
1414 IN PZONE_HEADER Zone
)
1416 if (Zone
->FreeList
.Next
)
1417 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
1418 return (PVOID
) Zone
->FreeList
.Next
;
1421 static __inline PVOID
1423 IN PZONE_HEADER Zone
,
1426 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
1427 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
1428 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
1433 * ExInterlockedAllocateFromZone(
1434 * IN PZONE_HEADER Zone,
1435 * IN PKSPIN_LOCK Lock)
1437 #define ExInterlockedAllocateFromZone(Zone, Lock) \
1438 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
1441 * ExInterlockedFreeToZone(
1442 * IN PZONE_HEADER Zone,
1444 * IN PKSPIN_LOCK Lock);
1446 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
1447 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
1452 * IN PZONE_HEADER Zone)
1454 #define ExIsFullZone(Zone) \
1455 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
1458 * ExIsObjectInFirstZoneSegment(
1459 * IN PZONE_HEADER Zone,
1462 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
1463 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
1464 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
1465 (Zone)->TotalSegmentSize)) )
1467 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
1468 #define ExAcquireResourceShared ExAcquireResourceSharedLite
1469 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
1470 #define ExDeleteResource ExDeleteResourceLite
1471 #define ExInitializeResource ExInitializeResourceLite
1472 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
1473 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
1474 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
1475 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
1477 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1483 IN OUT PZONE_HEADER Zone
,
1484 IN OUT PVOID Segment
,
1485 IN ULONG SegmentSize
);
1491 OUT PZONE_HEADER Zone
,
1493 IN OUT PVOID InitialSegment
,
1494 IN ULONG InitialSegmentSize
);
1499 ExInterlockedExtendZone(
1500 IN OUT PZONE_HEADER Zone
,
1501 IN OUT PVOID Segment
,
1502 IN ULONG SegmentSize
,
1503 IN OUT PKSPIN_LOCK Lock
);
1515 ExRaiseAccessViolation(
1522 ExRaiseDatatypeMisalignment(
1532 Exfi386InterlockedIncrementLong(
1533 IN OUT LONG
volatile *Addend
);
1538 Exfi386InterlockedDecrementLong(
1544 Exfi386InterlockedExchangeUlong(
1552 typedef enum _CONFIGURATION_TYPE
{
1555 FloatingPointProcessor
,
1565 MultiFunctionAdapter
,
1579 FloppyDiskPeripheral
,
1592 RealModeIrqRoutingTable
,
1593 RealModePCIEnumeration
,
1595 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
1596 #endif /* !_ARC_DDK_ */
1598 typedef struct _CONTROLLER_OBJECT
{
1601 PVOID ControllerExtension
;
1602 KDEVICE_QUEUE DeviceWaitQueue
;
1604 LARGE_INTEGER Spare2
;
1605 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
1607 typedef struct _CONFIGURATION_INFORMATION
{
1612 ULONG ScsiPortCount
;
1614 ULONG ParallelCount
;
1615 BOOLEAN AtDiskPrimaryAddressClaimed
;
1616 BOOLEAN AtDiskSecondaryAddressClaimed
;
1618 ULONG MediumChangerCount
;
1619 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
1623 (NTAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
1625 IN PUNICODE_STRING PathName
,
1626 IN INTERFACE_TYPE BusType
,
1628 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
1629 IN CONFIGURATION_TYPE ControllerType
,
1630 IN ULONG ControllerNumber
,
1631 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
1632 IN CONFIGURATION_TYPE PeripheralType
,
1633 IN ULONG PeripheralNumber
,
1634 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
1638 (NTAPI DRIVER_REINITIALIZE
)(
1639 IN
struct _DRIVER_OBJECT
*DriverObject
,
1643 typedef DRIVER_REINITIALIZE
*PDRIVER_REINITIALIZE
;
1645 /** Filesystem runtime library routines **/
1647 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1651 FsRtlIsTotalDeviceFailure(
1652 IN NTSTATUS Status
);
1655 /* Hardware Abstraction Layer Types */
1658 (NTAPI
*PciPin2Line
)(
1659 IN
struct _BUS_HANDLER
*BusHandler
,
1660 IN
struct _BUS_HANDLER
*RootHandler
,
1661 IN PCI_SLOT_NUMBER SlotNumber
,
1662 IN PPCI_COMMON_CONFIG PciData
);
1665 (NTAPI
*PciLine2Pin
)(
1666 IN
struct _BUS_HANDLER
*BusHandler
,
1667 IN
struct _BUS_HANDLER
*RootHandler
,
1668 IN PCI_SLOT_NUMBER SlotNumber
,
1669 IN PPCI_COMMON_CONFIG PciNewData
,
1670 IN PPCI_COMMON_CONFIG PciOldData
);
1673 (NTAPI
*PciReadWriteConfig
)(
1674 IN
struct _BUS_HANDLER
*BusHandler
,
1675 IN PCI_SLOT_NUMBER Slot
,
1680 #define PCI_DATA_TAG ' ICP'
1681 #define PCI_DATA_VERSION 1
1683 typedef struct _PCIBUSDATA
{
1686 PciReadWriteConfig ReadConfig
;
1687 PciReadWriteConfig WriteConfig
;
1688 PciPin2Line Pin2Line
;
1689 PciLine2Pin Line2Pin
;
1690 PCI_SLOT_NUMBER ParentSlot
;
1692 } PCIBUSDATA
, *PPCIBUSDATA
;
1694 /* Hardware Abstraction Layer Functions */
1696 #if !defined(NO_LEGACY_DRIVERS)
1698 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1703 HalAssignSlotResources(
1704 IN PUNICODE_STRING RegistryPath
,
1705 IN PUNICODE_STRING DriverClassName
,
1706 IN PDRIVER_OBJECT DriverObject
,
1707 IN PDEVICE_OBJECT DeviceObject
,
1708 IN INTERFACE_TYPE BusType
,
1710 IN ULONG SlotNumber
,
1711 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
1716 HalGetInterruptVector(
1717 IN INTERFACE_TYPE InterfaceType
,
1719 IN ULONG BusInterruptLevel
,
1720 IN ULONG BusInterruptVector
,
1722 OUT PKAFFINITY Affinity
);
1728 IN BUS_DATA_TYPE BusDataType
,
1730 IN ULONG SlotNumber
,
1736 #endif /* !defined(NO_LEGACY_DRIVERS) */
1738 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1744 IN PDEVICE_DESCRIPTION DeviceDescription
,
1745 IN OUT PULONG NumberOfMapRegisters
);
1751 IN ULONG Frequency
);
1756 IN PADAPTER_OBJECT DmaAdapter
);
1761 HalAcquireDisplayOwnership(
1762 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
1768 IN BUS_DATA_TYPE BusDataType
,
1770 IN ULONG SlotNumber
,
1777 HalGetBusDataByOffset(
1778 IN BUS_DATA_TYPE BusDataType
,
1780 IN ULONG SlotNumber
,
1788 HalSetBusDataByOffset(
1789 IN BUS_DATA_TYPE BusDataType
,
1791 IN ULONG SlotNumber
,
1799 HalTranslateBusAddress(
1800 IN INTERFACE_TYPE InterfaceType
,
1802 IN PHYSICAL_ADDRESS BusAddress
,
1803 IN OUT PULONG AddressSpace
,
1804 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
1808 #if (NTDDI_VERSION >= NTDDI_WINXP)
1813 IN PDEVICE_OBJECT DeviceObject
,
1814 IN ULONG SectorSize
,
1815 IN ULONG MBRTypeIdentifier
,
1819 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
1823 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1824 //DECLSPEC_DEPRECATED_DDK
1828 IoFreeAdapterChannel(
1829 IN PADAPTER_OBJECT AdapterObject
);
1831 //DECLSPEC_DEPRECATED_DDK
1835 IoFlushAdapterBuffers(
1836 IN PADAPTER_OBJECT AdapterObject
,
1838 IN PVOID MapRegisterBase
,
1841 IN BOOLEAN WriteToDevice
);
1843 //DECLSPEC_DEPRECATED_DDK
1848 IN PADAPTER_OBJECT AdapterObject
,
1849 IN PVOID MapRegisterBase
,
1850 IN ULONG NumberOfMapRegisters
);
1852 //DECLSPEC_DEPRECATED_DDK
1856 HalAllocateCommonBuffer(
1857 IN PADAPTER_OBJECT AdapterObject
,
1859 OUT PPHYSICAL_ADDRESS LogicalAddress
,
1860 IN BOOLEAN CacheEnabled
);
1862 //DECLSPEC_DEPRECATED_DDK
1866 HalFreeCommonBuffer(
1867 IN PADAPTER_OBJECT AdapterObject
,
1869 IN PHYSICAL_ADDRESS LogicalAddress
,
1870 IN PVOID VirtualAddress
,
1871 IN BOOLEAN CacheEnabled
);
1873 //DECLSPEC_DEPRECATED_DDK
1878 IN PADAPTER_OBJECT AdapterObject
);
1883 HalAllocateAdapterChannel(
1884 IN PADAPTER_OBJECT AdapterObject
,
1885 IN PWAIT_CONTEXT_BLOCK Wcb
,
1886 IN ULONG NumberOfMapRegisters
,
1887 IN PDRIVER_CONTROL ExecutionRoutine
);
1889 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
1891 #endif /* defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) */
1893 /* I/O Manager Functions */
1896 * VOID IoAssignArcName(
1897 * IN PUNICODE_STRING ArcName,
1898 * IN PUNICODE_STRING DeviceName);
1900 #define IoAssignArcName(_ArcName, _DeviceName) ( \
1901 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
1905 * IoDeassignArcName(
1906 * IN PUNICODE_STRING ArcName)
1908 #define IoDeassignArcName IoDeleteSymbolicLink
1910 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1912 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
1916 IoAllocateAdapterChannel(
1917 IN PADAPTER_OBJECT AdapterObject
,
1918 IN PDEVICE_OBJECT DeviceObject
,
1919 IN ULONG NumberOfMapRegisters
,
1920 IN PDRIVER_CONTROL ExecutionRoutine
,
1924 //DECLSPEC_DEPRECATED_DDK
1929 IN PADAPTER_OBJECT AdapterObject
,
1931 IN PVOID MapRegisterBase
,
1933 IN OUT PULONG Length
,
1934 IN BOOLEAN WriteToDevice
);
1939 IoAllocateController(
1940 IN PCONTROLLER_OBJECT ControllerObject
,
1941 IN PDEVICE_OBJECT DeviceObject
,
1942 IN PDRIVER_CONTROL ExecutionRoutine
,
1943 IN PVOID Context OPTIONAL
);
1955 IN PCONTROLLER_OBJECT ControllerObject
);
1961 IN PCONTROLLER_OBJECT ControllerObject
);
1964 PCONFIGURATION_INFORMATION
1966 IoGetConfigurationInformation(
1972 IoGetDeviceToVerify(
1973 IN PETHREAD Thread
);
1979 IN PDEVICE_OBJECT DeviceObject
,
1980 IN PFILE_OBJECT FileObject
);
1985 IoGetFileObjectGenericMapping(
1991 IoMakeAssociatedIrp(
1993 IN CCHAR StackSize
);
1998 IoQueryDeviceDescription(
1999 IN PINTERFACE_TYPE BusType OPTIONAL
,
2000 IN PULONG BusNumber OPTIONAL
,
2001 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
2002 IN PULONG ControllerNumber OPTIONAL
,
2003 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
2004 IN PULONG PeripheralNumber OPTIONAL
,
2005 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
2006 IN OUT PVOID Context OPTIONAL
);
2013 IN PVPB Vpb OPTIONAL
,
2014 IN PDEVICE_OBJECT RealDeviceObject
);
2019 IoRaiseInformationalHardError(
2020 IN NTSTATUS ErrorStatus
,
2021 IN PUNICODE_STRING String OPTIONAL
,
2022 IN PKTHREAD Thread OPTIONAL
);
2027 IoRegisterBootDriverReinitialization(
2028 IN PDRIVER_OBJECT DriverObject
,
2029 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2030 IN PVOID Context OPTIONAL
);
2035 IoRegisterDriverReinitialization(
2036 IN PDRIVER_OBJECT DriverObject
,
2037 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2038 IN PVOID Context OPTIONAL
);
2043 IoAttachDeviceByPointer(
2044 IN PDEVICE_OBJECT SourceDevice
,
2045 IN PDEVICE_OBJECT TargetDevice
);
2050 IoReportDetectedDevice(
2051 IN PDRIVER_OBJECT DriverObject
,
2052 IN INTERFACE_TYPE LegacyBusType
,
2054 IN ULONG SlotNumber
,
2055 IN PCM_RESOURCE_LIST ResourceList OPTIONAL
,
2056 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
2057 IN BOOLEAN ResourceAssigned
,
2058 IN OUT PDEVICE_OBJECT
*DeviceObject
);
2063 IoReportResourceForDetection(
2064 IN PDRIVER_OBJECT DriverObject
,
2065 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2066 IN ULONG DriverListSize OPTIONAL
,
2067 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2068 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2069 IN ULONG DeviceListSize OPTIONAL
,
2070 OUT PBOOLEAN ConflictDetected
);
2075 IoReportResourceUsage(
2076 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2077 IN PDRIVER_OBJECT DriverObject
,
2078 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2079 IN ULONG DriverListSize OPTIONAL
,
2080 IN PDEVICE_OBJECT DeviceObject
,
2081 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2082 IN ULONG DeviceListSize OPTIONAL
,
2083 IN BOOLEAN OverrideConflict
,
2084 OUT PBOOLEAN ConflictDetected
);
2089 IoSetHardErrorOrVerifyDevice(
2091 IN PDEVICE_OBJECT DeviceObject
);
2097 IN PUNICODE_STRING RegistryPath
,
2098 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2099 IN PDRIVER_OBJECT DriverObject
,
2100 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2101 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL
,
2102 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
2104 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2106 #if (NTDDI_VERSION >= NTDDI_WINXP)
2112 IN PDEVICE_OBJECT DeviceObject
,
2113 IN
struct _CREATE_DISK
* Disk OPTIONAL
);
2118 IoReadDiskSignature(
2119 IN PDEVICE_OBJECT DeviceObject
,
2120 IN ULONG BytesPerSector
,
2121 OUT PDISK_SIGNATURE Signature
);
2126 IoReadPartitionTable(
2127 IN PDEVICE_OBJECT DeviceObject
,
2128 IN ULONG SectorSize
,
2129 IN BOOLEAN ReturnRecognizedPartitions
,
2130 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2135 IoReadPartitionTableEx(
2136 IN PDEVICE_OBJECT DeviceObject
,
2137 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
2142 IoSetPartitionInformation(
2143 IN PDEVICE_OBJECT DeviceObject
,
2144 IN ULONG SectorSize
,
2145 IN ULONG PartitionNumber
,
2146 IN ULONG PartitionType
);
2151 IoSetPartitionInformationEx(
2152 IN PDEVICE_OBJECT DeviceObject
,
2153 IN ULONG PartitionNumber
,
2154 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
2159 IoSetSystemPartition(
2160 IN PUNICODE_STRING VolumeNameString
);
2165 IoSetThreadHardErrorMode(
2166 IN BOOLEAN EnableHardErrors
);
2171 IoVerifyPartitionTable(
2172 IN PDEVICE_OBJECT DeviceObject
,
2173 IN BOOLEAN FixErrors
);
2178 IoVolumeDeviceToDosName(
2179 IN PVOID VolumeDeviceObject
,
2180 OUT PUNICODE_STRING DosName
);
2185 IoWritePartitionTable(
2186 IN PDEVICE_OBJECT DeviceObject
,
2187 IN ULONG SectorSize
,
2188 IN ULONG SectorsPerTrack
,
2189 IN ULONG NumberOfHeads
,
2190 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2195 IoWritePartitionTableEx(
2196 IN PDEVICE_OBJECT DeviceObject
,
2197 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*DriveLayout
);
2199 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2201 /** Kernel debugger routines **/
2209 IN ULONG MaximumResponseLength
);
2211 /* Kernel Functions */
2213 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2220 IN ULONG BugCheckCode
);
2226 IN OUT PRKEVENT Event
,
2227 IN KPRIORITY Increment
,
2233 KeSetBasePriorityThread(
2234 IN OUT PRKTHREAD Thread
,
2239 /* Memory Manager Types */
2241 typedef struct _PHYSICAL_MEMORY_RANGE
{
2242 PHYSICAL_ADDRESS BaseAddress
;
2243 LARGE_INTEGER NumberOfBytes
;
2244 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
2246 /* Memory Manager Functions */
2248 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2251 PPHYSICAL_MEMORY_RANGE
2253 MmGetPhysicalMemoryRanges(
2259 MmGetPhysicalAddress(
2260 IN PVOID BaseAddress
);
2265 MmIsNonPagedSystemAddressValid(
2266 IN PVOID VirtualAddress
);
2271 MmAllocateNonCachedMemory(
2272 IN SIZE_T NumberOfBytes
);
2277 MmFreeNonCachedMemory(
2278 IN PVOID BaseAddress
,
2279 IN SIZE_T NumberOfBytes
);
2284 MmGetVirtualForPhysical(
2285 IN PHYSICAL_ADDRESS PhysicalAddress
);
2290 MmMapUserAddressesToPage(
2291 IN PVOID BaseAddress
,
2292 IN SIZE_T NumberOfBytes
,
2293 IN PVOID PageAddress
);
2299 IN PHYSICAL_ADDRESS PhysicalAddress
,
2300 IN SIZE_T NumberOfBytes
,
2301 IN MEMORY_CACHING_TYPE CacheType
);
2306 MmMapViewInSessionSpace(
2308 OUT PVOID
*MappedBase
,
2309 IN OUT PSIZE_T ViewSize
);
2314 MmMapViewInSystemSpace(
2316 OUT PVOID
*MappedBase
,
2317 IN OUT PSIZE_T ViewSize
);
2323 IN PVOID VirtualAddress
);
2328 MmIsThisAnNtAsSystem(
2334 MmLockPagableSectionByHandle(
2335 IN PVOID ImageSectionHandle
);
2340 MmUnmapViewInSessionSpace(
2341 IN PVOID MappedBase
);
2346 MmUnmapViewInSystemSpace(
2347 IN PVOID MappedBase
);
2352 MmUnsecureVirtualMemory(
2353 IN HANDLE SecureHandle
);
2358 MmRemovePhysicalMemory(
2359 IN PPHYSICAL_ADDRESS StartAddress
,
2360 IN OUT PLARGE_INTEGER NumberOfBytes
);
2365 MmSecureVirtualMemory(
2368 IN ULONG ProbeMode
);
2373 MmUnmapVideoDisplay(
2374 IN PVOID BaseAddress
,
2375 IN SIZE_T NumberOfBytes
);
2377 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2379 /* NtXxx Functions */
2385 OUT PHANDLE ProcessHandle
,
2386 IN ACCESS_MASK DesiredAccess
,
2387 IN POBJECT_ATTRIBUTES ObjectAttributes
,
2388 IN PCLIENT_ID ClientId OPTIONAL
);
2393 NtQueryInformationProcess(
2394 IN HANDLE ProcessHandle
,
2395 IN PROCESSINFOCLASS ProcessInformationClass
,
2396 OUT PVOID ProcessInformation OPTIONAL
,
2397 IN ULONG ProcessInformationLength
,
2398 OUT PULONG ReturnLength OPTIONAL
);
2400 /** Process manager types **/
2403 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
2405 IN HANDLE ProcessId
,
2409 (NTAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
2410 IN HANDLE ProcessId
,
2415 (NTAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
2416 IN PUNICODE_STRING FullImageName
,
2417 IN HANDLE ProcessId
,
2418 IN PIMAGE_INFO ImageInfo
);
2420 /** Process manager routines **/
2422 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2427 PsSetLoadImageNotifyRoutine(
2428 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
2433 PsSetCreateThreadNotifyRoutine(
2434 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
2439 PsSetCreateProcessNotifyRoutine(
2440 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
2446 PsGetCurrentProcessId(
2452 PsGetCurrentThreadId(
2459 OUT PULONG MajorVersion OPTIONAL
,
2460 OUT PULONG MinorVersion OPTIONAL
,
2461 OUT PULONG BuildNumber OPTIONAL
,
2462 OUT PUNICODE_STRING CSDVersion OPTIONAL
);
2464 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2466 #if (NTDDI_VERSION >= NTDDI_WINXP)
2472 IN PEPROCESS Process
);
2477 PsRemoveCreateThreadNotifyRoutine(
2478 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
2483 PsRemoveLoadImageNotifyRoutine(
2484 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
2486 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2488 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess
;
2492 typedef struct _RTL_SPLAY_LINKS
{
2493 struct _RTL_SPLAY_LINKS
*Parent
;
2494 struct _RTL_SPLAY_LINKS
*LeftChild
;
2495 struct _RTL_SPLAY_LINKS
*RightChild
;
2496 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
2500 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
2502 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
2503 *CallersAddress = (PVOID)_ReturnAddress(); \
2504 *CallersCaller = NULL;
2507 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2511 RtlGetCallersAddress(
2512 OUT PVOID
*CallersAddress
,
2513 OUT PVOID
*CallersCaller
);
2518 #if !defined(MIDL_PASS)
2523 RtlConvertLongToLuid(
2529 Temp
.QuadPart
= Val
;
2530 Luid
.LowPart
= Temp
.u
.LowPart
;
2531 Luid
.HighPart
= Temp
.u
.HighPart
;
2538 RtlConvertUlongToLuid(
2550 #if defined(_AMD64_) || defined(_IA64_)
2551 //DECLSPEC_DEPRECATED_DDK_WINXP
2555 RtlLargeIntegerDivide(
2556 IN LARGE_INTEGER Dividend
,
2557 IN LARGE_INTEGER Divisor
,
2558 OUT PLARGE_INTEGER Remainder OPTIONAL
)
2561 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
2563 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
2569 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2573 RtlLargeIntegerDivide(
2574 IN LARGE_INTEGER Dividend
,
2575 IN LARGE_INTEGER Divisor
,
2576 OUT PLARGE_INTEGER Remainder OPTIONAL
);
2579 #endif /* defined(_AMD64_) || defined(_IA64_) */
2581 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2586 RtlPrefixUnicodeString(
2587 IN PCUNICODE_STRING String1
,
2588 IN PCUNICODE_STRING String2
,
2589 IN BOOLEAN CaseInSensitive
);
2595 IN OUT PSTRING DestinationString
,
2596 IN
const PSTRING SourceString
);
2601 RtlUpcaseUnicodeString(
2602 IN OUT PUNICODE_STRING DestinationString
,
2603 IN PCUNICODE_STRING SourceString
,
2604 IN BOOLEAN AllocateDestinationString
);
2610 IN OUT PACCESS_MASK AccessMask
,
2611 IN PGENERIC_MAPPING GenericMapping
);
2616 RtlVolumeDeviceToDosName(
2617 IN PVOID VolumeDeviceObject
,
2618 OUT PUNICODE_STRING DosName
);
2624 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
2629 RtlVerifyVersionInfo(
2630 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
2632 IN ULONGLONG ConditionMask
);
2638 IN
const PSTRING String1
,
2639 IN
const PSTRING String2
,
2640 BOOLEAN CaseInSensitive
);
2646 OUT PSTRING DestinationString
,
2647 IN
const PSTRING SourceString OPTIONAL
);
2653 IN
const PSTRING String1
,
2654 IN
const PSTRING String2
,
2655 IN BOOLEAN CaseInSensitive
);
2662 IN ULONG Base OPTIONAL
,
2679 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2681 /* Security reference monitor routines */
2683 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2687 SeSinglePrivilegeCheck(
2688 IN LUID PrivilegeValue
,
2689 IN KPROCESSOR_MODE PreviousMode
);
2692 /* ZwXxx Functions */
2694 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2699 IN HANDLE TimerHandle
,
2700 OUT PBOOLEAN CurrentState OPTIONAL
);
2705 OUT PHANDLE TimerHandle
,
2706 IN ACCESS_MASK DesiredAccess
,
2707 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
2708 IN TIMER_TYPE TimerType
);
2713 OUT PHANDLE TimerHandle
,
2714 IN ACCESS_MASK DesiredAccess
,
2715 IN POBJECT_ATTRIBUTES ObjectAttributes
);
2720 ZwSetInformationThread(
2721 IN HANDLE ThreadHandle
,
2722 IN THREADINFOCLASS ThreadInformationClass
,
2723 IN PVOID ThreadInformation
,
2724 IN ULONG ThreadInformationLength
);
2729 IN HANDLE TimerHandle
,
2730 IN PLARGE_INTEGER DueTime
,
2731 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
2732 IN PVOID TimerContext OPTIONAL
,
2733 IN BOOLEAN ResumeTimer
,
2734 IN LONG Period OPTIONAL
,
2735 OUT PBOOLEAN PreviousState OPTIONAL
);
2739 /* Windows Device Driver Kit */
2747 #endif /* _NTDDK_ */