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
66 typedef struct _BUS_HANDLER
*PBUS_HANDLER
;
68 #define KERNEL_STACK_SIZE 12288
69 #define KERNEL_LARGE_STACK_SIZE 61440
70 #define KERNEL_LARGE_STACK_COMMIT 12288
72 #define EXCEPTION_READ_FAULT 0
73 #define EXCEPTION_WRITE_FAULT 1
74 #define EXCEPTION_EXECUTE_FAULT 8
76 #if (NTDDI_VERSION >= NTDDI_VISTA)
77 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
78 #elif (NTDDI_VERSION >= NTDDI_WINXP)
79 extern NTSYSAPI CCHAR KeNumberProcessors
;
81 extern PCCHAR KeNumberProcessors
;
84 #define MAX_WOW64_SHARED_ENTRIES 16
86 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
87 #define NX_SUPPORT_POLICY_ALWAYSON 1
88 #define NX_SUPPORT_POLICY_OPTIN 2
89 #define NX_SUPPORT_POLICY_OPTOUT 3
95 #define IRP_MN_QUERY_DIRECTORY 0x01
96 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
98 #define IRP_MN_USER_FS_REQUEST 0x00
99 #define IRP_MN_MOUNT_VOLUME 0x01
100 #define IRP_MN_VERIFY_VOLUME 0x02
101 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
102 #define IRP_MN_TRACK_LINK 0x04
103 #define IRP_MN_KERNEL_CALL 0x04
105 #define IRP_MN_LOCK 0x01
106 #define IRP_MN_UNLOCK_SINGLE 0x02
107 #define IRP_MN_UNLOCK_ALL 0x03
108 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
110 #define IRP_MN_FLUSH_AND_PURGE 0x01
112 #define IRP_MN_NORMAL 0x00
113 #define IRP_MN_DPC 0x01
114 #define IRP_MN_MDL 0x02
115 #define IRP_MN_COMPLETE 0x04
116 #define IRP_MN_COMPRESSED 0x08
118 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
119 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
120 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
122 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
124 typedef struct _IO_COUNTERS
{
125 ULONGLONG ReadOperationCount
;
126 ULONGLONG WriteOperationCount
;
127 ULONGLONG OtherOperationCount
;
128 ULONGLONG ReadTransferCount
;
129 ULONGLONG WriteTransferCount
;
130 ULONGLONG OtherTransferCount
;
131 } IO_COUNTERS
, *PIO_COUNTERS
;
133 typedef struct _VM_COUNTERS
{
134 SIZE_T PeakVirtualSize
;
136 ULONG PageFaultCount
;
137 SIZE_T PeakWorkingSetSize
;
138 SIZE_T WorkingSetSize
;
139 SIZE_T QuotaPeakPagedPoolUsage
;
140 SIZE_T QuotaPagedPoolUsage
;
141 SIZE_T QuotaPeakNonPagedPoolUsage
;
142 SIZE_T QuotaNonPagedPoolUsage
;
143 SIZE_T PagefileUsage
;
144 SIZE_T PeakPagefileUsage
;
145 } VM_COUNTERS
, *PVM_COUNTERS
;
147 typedef struct _VM_COUNTERS_EX
149 SIZE_T PeakVirtualSize
;
151 ULONG PageFaultCount
;
152 SIZE_T PeakWorkingSetSize
;
153 SIZE_T WorkingSetSize
;
154 SIZE_T QuotaPeakPagedPoolUsage
;
155 SIZE_T QuotaPagedPoolUsage
;
156 SIZE_T QuotaPeakNonPagedPoolUsage
;
157 SIZE_T QuotaNonPagedPoolUsage
;
158 SIZE_T PagefileUsage
;
159 SIZE_T PeakPagefileUsage
;
161 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
163 typedef struct _POOLED_USAGE_AND_LIMITS
165 SIZE_T PeakPagedPoolUsage
;
166 SIZE_T PagedPoolUsage
;
167 SIZE_T PagedPoolLimit
;
168 SIZE_T PeakNonPagedPoolUsage
;
169 SIZE_T NonPagedPoolUsage
;
170 SIZE_T NonPagedPoolLimit
;
171 SIZE_T PeakPagefileUsage
;
172 SIZE_T PagefileUsage
;
173 SIZE_T PagefileLimit
;
174 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
176 /* DEVICE_OBJECT.Flags */
178 #define DO_VERIFY_VOLUME 0x00000002
179 #define DO_BUFFERED_IO 0x00000004
180 #define DO_EXCLUSIVE 0x00000008
181 #define DO_DIRECT_IO 0x00000010
182 #define DO_MAP_IO_BUFFER 0x00000020
183 #define DO_DEVICE_HAS_NAME 0x00000040
184 #define DO_DEVICE_INITIALIZING 0x00000080
185 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
186 #define DO_LONG_TERM_REQUESTS 0x00000200
187 #define DO_NEVER_LAST_DEVICE 0x00000400
188 #define DO_SHUTDOWN_REGISTERED 0x00000800
189 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
190 #define DO_POWER_PAGABLE 0x00002000
191 #define DO_POWER_INRUSH 0x00004000
192 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
193 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
194 #define DO_FORCE_NEITHER_IO 0x00080000
195 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
196 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
197 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
198 #define DO_DISALLOW_EXECUTE 0x00800000
200 #define DRVO_REINIT_REGISTERED 0x00000008
201 #define DRVO_INITIALIZED 0x00000010
202 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
203 #define DRVO_LEGACY_RESOURCES 0x00000040
205 typedef enum _ARBITER_REQUEST_SOURCE
{
206 ArbiterRequestUndefined
= -1,
207 ArbiterRequestLegacyReported
,
208 ArbiterRequestHalReported
,
209 ArbiterRequestLegacyAssigned
,
210 ArbiterRequestPnpDetected
,
211 ArbiterRequestPnpEnumerated
212 } ARBITER_REQUEST_SOURCE
;
214 typedef enum _ARBITER_RESULT
{
215 ArbiterResultUndefined
= -1,
216 ArbiterResultSuccess
,
217 ArbiterResultExternalConflict
,
218 ArbiterResultNullRequest
221 typedef enum _ARBITER_ACTION
{
222 ArbiterActionTestAllocation
,
223 ArbiterActionRetestAllocation
,
224 ArbiterActionCommitAllocation
,
225 ArbiterActionRollbackAllocation
,
226 ArbiterActionQueryAllocatedResources
,
227 ArbiterActionWriteReservedResources
,
228 ArbiterActionQueryConflict
,
229 ArbiterActionQueryArbitrate
,
230 ArbiterActionAddReserved
,
231 ArbiterActionBootAllocation
232 } ARBITER_ACTION
, *PARBITER_ACTION
;
234 typedef struct _ARBITER_CONFLICT_INFO
{
235 PDEVICE_OBJECT OwningObject
;
238 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
240 typedef struct _ARBITER_PARAMETERS
{
243 IN OUT PLIST_ENTRY ArbitrationList
;
244 IN ULONG AllocateFromCount
;
245 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
248 IN OUT PLIST_ENTRY ArbitrationList
;
249 IN ULONG AllocateFromCount
;
250 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
253 IN OUT PLIST_ENTRY ArbitrationList
;
256 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
257 } QueryAllocatedResources
;
259 IN PDEVICE_OBJECT PhysicalDeviceObject
;
260 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
261 OUT PULONG ConflictCount
;
262 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
265 IN PLIST_ENTRY ArbitrationList
;
268 IN PDEVICE_OBJECT ReserveDevice
;
271 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
273 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
275 typedef struct _ARBITER_LIST_ENTRY
{
276 LIST_ENTRY ListEntry
;
277 ULONG AlternativeCount
;
278 PIO_RESOURCE_DESCRIPTOR Alternatives
;
279 PDEVICE_OBJECT PhysicalDeviceObject
;
280 ARBITER_REQUEST_SOURCE RequestSource
;
283 INTERFACE_TYPE InterfaceType
;
286 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
287 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
288 ARBITER_RESULT Result
;
289 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
292 (DDKAPI
*PARBITER_HANDLER
)(
293 IN OUT PVOID Context
,
294 IN ARBITER_ACTION Action
,
295 IN OUT PARBITER_PARAMETERS Parameters
);
297 #define ARBITER_PARTIAL 0x00000001
299 typedef struct _ARBITER_INTERFACE
{
303 PINTERFACE_REFERENCE InterfaceReference
;
304 PINTERFACE_DEREFERENCE InterfaceDereference
;
305 PARBITER_HANDLER ArbiterHandler
;
307 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
309 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
310 HalInstalledBusInformation
,
311 HalProfileSourceInformation
,
312 HalInformationClassUnused1
,
314 HalProcessorSpeedInformation
,
315 HalCallbackInformation
,
316 HalMapRegisterInformation
,
317 HalMcaLogInformation
,
318 HalFrameBufferCachingInformation
,
319 HalDisplayBiosInformation
,
320 HalProcessorFeatureInformation
,
321 HalNumaTopologyInterface
,
323 HalCmcLogInformation
,
324 HalCpeLogInformation
,
325 HalQueryMcaInterface
,
326 HalQueryAMLIIllegalIOPortAddresses
,
327 HalQueryMaxHotPlugMemoryAddress
,
328 HalPartitionIpiInterface
,
329 HalPlatformInformation
,
330 HalQueryProfileSourceList
,
331 HalInitLogInformation
,
332 HalFrequencyInformation
,
333 HalProcessorBrandString
,
334 HalHypervisorInformation
,
335 HalPlatformTimerInformation
,
336 HalAcpiAuditInformation
337 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
339 typedef enum _HAL_SET_INFORMATION_CLASS
{
340 HalProfileSourceInterval
,
341 HalProfileSourceInterruptHandler
,
342 HalMcaRegisterDriver
,
343 HalKernelErrorHandler
,
344 HalCmcRegisterDriver
,
345 HalCpeRegisterDriver
,
349 HalGenerateCmcInterrupt
,
350 HalProfileSourceTimerHandler
,
352 HalProfileDpgoSourceInterruptHandler
353 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
355 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
{
356 KPROFILE_SOURCE Source
;
358 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
360 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
{
361 KPROFILE_SOURCE Source
;
364 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
366 typedef struct _MAP_REGISTER_ENTRY
{
368 BOOLEAN WriteToDevice
;
369 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
371 typedef struct _DEBUG_DEVICE_ADDRESS
{
375 PUCHAR TranslatedAddress
;
377 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
379 typedef struct _DEBUG_MEMORY_REQUIREMENTS
{
380 PHYSICAL_ADDRESS Start
;
381 PHYSICAL_ADDRESS MaxEnd
;
382 PVOID VirtualAddress
;
386 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
388 typedef struct _DEBUG_DEVICE_DESCRIPTOR
{
399 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
400 DEBUG_MEMORY_REQUIREMENTS Memory
;
401 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
403 typedef struct _PM_DISPATCH_TABLE
{
407 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
409 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
410 TranslateChildToParent
,
411 TranslateParentToChild
412 } RESOURCE_TRANSLATION_DIRECTION
;
415 (DDKAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
416 IN OUT PVOID Context
,
417 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
418 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
419 IN ULONG AlternativesCount OPTIONAL
,
420 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
421 IN PDEVICE_OBJECT PhysicalDeviceObject
,
422 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
425 (DDKAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
426 IN PVOID Context OPTIONAL
,
427 IN PIO_RESOURCE_DESCRIPTOR Source
,
428 IN PDEVICE_OBJECT PhysicalDeviceObject
,
429 OUT PULONG TargetCount
,
430 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
432 typedef struct _TRANSLATOR_INTERFACE
{
436 PINTERFACE_REFERENCE InterfaceReference
;
437 PINTERFACE_DEREFERENCE InterfaceDereference
;
438 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
439 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
440 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
443 (FASTCALL
*pHalExamineMBR
)(
444 IN PDEVICE_OBJECT DeviceObject
,
446 IN ULONG MBRTypeIdentifier
,
450 (FASTCALL
*pHalIoReadPartitionTable
)(
451 IN PDEVICE_OBJECT DeviceObject
,
453 IN BOOLEAN ReturnRecognizedPartitions
,
454 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
457 (FASTCALL
*pHalIoSetPartitionInformation
)(
458 IN PDEVICE_OBJECT DeviceObject
,
460 IN ULONG PartitionNumber
,
461 IN ULONG PartitionType
);
464 (FASTCALL
*pHalIoWritePartitionTable
)(
465 IN PDEVICE_OBJECT DeviceObject
,
467 IN ULONG SectorsPerTrack
,
468 IN ULONG NumberOfHeads
,
469 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
472 (FASTCALL
*pHalHandlerForBus
)(
473 IN INTERFACE_TYPE InterfaceType
,
477 (FASTCALL
*pHalReferenceBusHandler
)(
478 IN PBUS_HANDLER BusHandler
);
481 (DDKAPI
*pHalQuerySystemInformation
)(
482 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
485 OUT PULONG ReturnedLength
);
488 (DDKAPI
*pHalSetSystemInformation
)(
489 IN HAL_SET_INFORMATION_CLASS InformationClass
,
494 (DDKAPI
*pHalQueryBusSlots
)(
495 IN PBUS_HANDLER BusHandler
,
497 OUT PULONG SlotNumbers
,
498 OUT PULONG ReturnedLength
);
501 (DDKAPI
*pHalInitPnpDriver
)(
505 (DDKAPI
*pHalInitPowerManagement
)(
506 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
507 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
509 typedef struct _DMA_ADAPTER
*
510 (DDKAPI
*pHalGetDmaAdapter
)(
512 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
513 OUT PULONG NumberOfMapRegisters
);
516 (DDKAPI
*pHalGetInterruptTranslator
)(
517 IN INTERFACE_TYPE ParentInterfaceType
,
518 IN ULONG ParentBusNumber
,
519 IN INTERFACE_TYPE BridgeInterfaceType
,
522 OUT PTRANSLATOR_INTERFACE Translator
,
523 OUT PULONG BridgeBusNumber
);
526 (DDKAPI
*pHalStartMirroring
)(
530 (DDKAPI
*pHalEndMirroring
)(
531 IN ULONG PassNumber
);
534 (DDKAPI
*pHalMirrorPhysicalMemory
)(
535 IN PHYSICAL_ADDRESS PhysicalAddress
,
536 IN LARGE_INTEGER NumberOfBytes
);
539 (DDKAPI
*pHalMirrorVerify
)(
540 IN PHYSICAL_ADDRESS PhysicalAddress
,
541 IN LARGE_INTEGER NumberOfBytes
);
544 (DDKAPI
*pHalEndOfBoot
)(
549 (DDKAPI
*pHalTranslateBusAddress
)(
550 IN INTERFACE_TYPE InterfaceType
,
552 IN PHYSICAL_ADDRESS BusAddress
,
553 IN OUT PULONG AddressSpace
,
554 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
558 (DDKAPI
*pHalAssignSlotResources
)(
559 IN PUNICODE_STRING RegistryPath
,
560 IN PUNICODE_STRING DriverClassName OPTIONAL
,
561 IN PDRIVER_OBJECT DriverObject
,
562 IN PDEVICE_OBJECT DeviceObject
,
563 IN INTERFACE_TYPE BusType
,
566 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
570 (DDKAPI
*pHalHaltSystem
)(
575 (DDKAPI
*pHalResetDisplay
)(
580 (DDKAPI
*pHalVectorToIDTEntry
)(
585 (DDKAPI
*pHalFindBusAddressTranslation
)(
586 IN PHYSICAL_ADDRESS BusAddress
,
587 IN OUT PULONG AddressSpace
,
588 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
589 IN OUT PULONG_PTR Context
,
594 (DDKAPI
*pKdSetupPciDeviceForDebugging
)(
595 IN PVOID LoaderBlock OPTIONAL
,
596 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
600 (DDKAPI
*pKdReleasePciDeviceForDebugging
)(
601 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
605 (DDKAPI
*pKdGetAcpiTablePhase0
)(
606 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
611 (DDKAPI
*pKdCheckPowerButton
)(
616 #define SIZE_OF_80387_REGISTERS 80
618 typedef struct _FLOATING_SAVE_AREA
{
626 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
628 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
630 #include "pshpack4.h"
631 typedef struct _CONTEXT
{
639 FLOATING_SAVE_AREA FloatSave
;
656 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
664 #if !defined(RC_INVOKED)
666 #define CONTEXT_AMD64 0x100000
668 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
669 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
670 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
671 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
672 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
674 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
675 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
677 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
679 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
680 #define CONTEXT_SERVICE_ACTIVE 0x10000000
681 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
682 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
684 #endif /* RC_INVOKED */
688 typedef enum _INTERLOCKED_RESULT
{
689 ResultNegative
= RESULT_NEGATIVE
,
690 ResultZero
= RESULT_ZERO
,
691 ResultPositive
= RESULT_POSITIVE
692 } INTERLOCKED_RESULT
;
694 typedef struct _OSVERSIONINFOA
{
695 ULONG dwOSVersionInfoSize
;
696 ULONG dwMajorVersion
;
697 ULONG dwMinorVersion
;
700 CHAR szCSDVersion
[128];
701 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
703 typedef struct _OSVERSIONINFOW
{
704 ULONG dwOSVersionInfoSize
;
705 ULONG dwMajorVersion
;
706 ULONG dwMinorVersion
;
709 WCHAR szCSDVersion
[128];
710 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
712 typedef struct _OSVERSIONINFOEXA
{
713 ULONG dwOSVersionInfoSize
;
714 ULONG dwMajorVersion
;
715 ULONG dwMinorVersion
;
718 CHAR szCSDVersion
[128];
719 USHORT wServicePackMajor
;
720 USHORT wServicePackMinor
;
724 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
726 typedef struct _OSVERSIONINFOEXW
{
727 ULONG dwOSVersionInfoSize
;
728 ULONG dwMajorVersion
;
729 ULONG dwMinorVersion
;
732 WCHAR szCSDVersion
[128];
733 USHORT wServicePackMajor
;
734 USHORT wServicePackMinor
;
738 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
741 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
742 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
743 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
744 typedef OSVERSIONINFOW OSVERSIONINFO
;
745 typedef POSVERSIONINFOW POSVERSIONINFO
;
746 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
748 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
749 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
750 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
751 typedef OSVERSIONINFOA OSVERSIONINFO
;
752 typedef POSVERSIONINFOA POSVERSIONINFO
;
753 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
756 /* Executive Types */
758 #define PROTECTED_POOL 0x80000000
760 typedef struct _ZONE_SEGMENT_HEADER
{
761 SINGLE_LIST_ENTRY SegmentList
;
763 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
765 typedef struct _ZONE_HEADER
{
766 SINGLE_LIST_ENTRY FreeList
;
767 SINGLE_LIST_ENTRY SegmentList
;
769 ULONG TotalSegmentSize
;
770 } ZONE_HEADER
, *PZONE_HEADER
;
772 /* Executive Functions */
774 static __inline PVOID
776 IN PZONE_HEADER Zone
)
778 if (Zone
->FreeList
.Next
)
779 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
780 return (PVOID
) Zone
->FreeList
.Next
;
783 static __inline PVOID
785 IN PZONE_HEADER Zone
,
788 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
789 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
790 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
795 * ExInterlockedAllocateFromZone(
796 * IN PZONE_HEADER Zone,
797 * IN PKSPIN_LOCK Lock)
799 #define ExInterlockedAllocateFromZone(Zone, Lock) \
800 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
803 * ExInterlockedFreeToZone(
804 * IN PZONE_HEADER Zone,
806 * IN PKSPIN_LOCK Lock);
808 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
809 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
814 * IN PZONE_HEADER Zone)
816 #define ExIsFullZone(Zone) \
817 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
820 * ExIsObjectInFirstZoneSegment(
821 * IN PZONE_HEADER Zone,
824 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
825 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
826 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
827 (Zone)->TotalSegmentSize)) )
829 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
830 #define ExAcquireResourceShared ExAcquireResourceSharedLite
831 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
832 #define ExDeleteResource ExDeleteResourceLite
833 #define ExInitializeResource ExInitializeResourceLite
834 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
835 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
836 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
837 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
839 #if (NTDDI_VERSION >= NTDDI_WIN2K)
845 IN OUT PZONE_HEADER Zone
,
846 IN OUT PVOID Segment
,
847 IN ULONG SegmentSize
);
853 OUT PZONE_HEADER Zone
,
855 IN OUT PVOID InitialSegment
,
856 IN ULONG InitialSegmentSize
);
861 ExInterlockedExtendZone(
862 IN OUT PZONE_HEADER Zone
,
863 IN OUT PVOID Segment
,
864 IN ULONG SegmentSize
,
865 IN OUT PKSPIN_LOCK Lock
);
877 ExRaiseAccessViolation(
884 ExRaiseDatatypeMisalignment(
891 typedef enum _CONFIGURATION_TYPE
{
894 FloatingPointProcessor
,
904 MultiFunctionAdapter
,
918 FloppyDiskPeripheral
,
931 RealModeIrqRoutingTable
,
932 RealModePCIEnumeration
,
934 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
935 #endif /* !_ARC_DDK_ */
937 typedef struct _CONTROLLER_OBJECT
{
940 PVOID ControllerExtension
;
941 KDEVICE_QUEUE DeviceWaitQueue
;
943 LARGE_INTEGER Spare2
;
944 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
946 typedef struct _CONFIGURATION_INFORMATION
{
954 BOOLEAN AtDiskPrimaryAddressClaimed
;
955 BOOLEAN AtDiskSecondaryAddressClaimed
;
957 ULONG MediumChangerCount
;
958 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
962 (DDKAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
964 IN PUNICODE_STRING PathName
,
965 IN INTERFACE_TYPE BusType
,
967 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
968 IN CONFIGURATION_TYPE ControllerType
,
969 IN ULONG ControllerNumber
,
970 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
971 IN CONFIGURATION_TYPE PeripheralType
,
972 IN ULONG PeripheralNumber
,
973 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
977 (DDKAPI DRIVER_REINITIALIZE
)(
978 IN
struct _DRIVER_OBJECT
*DriverObject
,
982 typedef DRIVER_REINITIALIZE
*PDRIVER_REINITIALIZE
;
984 /** Filesystem runtime library routines **/
986 #if (NTDDI_VERSION >= NTDDI_WIN2K)
990 FsRtlIsTotalDeviceFailure(
994 /* Hardware Abstraction Layer Types */
997 (NTAPI
*PciPin2Line
)(
998 IN
struct _BUS_HANDLER
*BusHandler
,
999 IN
struct _BUS_HANDLER
*RootHandler
,
1000 IN PCI_SLOT_NUMBER SlotNumber
,
1001 IN PPCI_COMMON_CONFIG PciData
);
1004 (NTAPI
*PciLine2Pin
)(
1005 IN
struct _BUS_HANDLER
*BusHandler
,
1006 IN
struct _BUS_HANDLER
*RootHandler
,
1007 IN PCI_SLOT_NUMBER SlotNumber
,
1008 IN PPCI_COMMON_CONFIG PciNewData
,
1009 IN PPCI_COMMON_CONFIG PciOldData
);
1012 (NTAPI
*PciReadWriteConfig
)(
1013 IN
struct _BUS_HANDLER
*BusHandler
,
1014 IN PCI_SLOT_NUMBER Slot
,
1019 #define PCI_DATA_TAG ' ICP'
1020 #define PCI_DATA_VERSION 1
1022 typedef struct _PCIBUSDATA
{
1025 PciReadWriteConfig ReadConfig
;
1026 PciReadWriteConfig WriteConfig
;
1027 PciPin2Line Pin2Line
;
1028 PciLine2Pin Line2Pin
;
1029 PCI_SLOT_NUMBER ParentSlot
;
1031 } PCIBUSDATA
, *PPCIBUSDATA
;
1033 /* Hardware Abstraction Layer Functions */
1035 #if !defined(NO_LEGACY_DRIVERS)
1037 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1042 HalAssignSlotResources(
1043 IN PUNICODE_STRING RegistryPath
,
1044 IN PUNICODE_STRING DriverClassName
,
1045 IN PDRIVER_OBJECT DriverObject
,
1046 IN PDEVICE_OBJECT DeviceObject
,
1047 IN INTERFACE_TYPE BusType
,
1049 IN ULONG SlotNumber
,
1050 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
1055 HalGetInterruptVector(
1056 IN INTERFACE_TYPE InterfaceType
,
1058 IN ULONG BusInterruptLevel
,
1059 IN ULONG BusInterruptVector
,
1061 OUT PKAFFINITY Affinity
);
1067 IN BUS_DATA_TYPE BusDataType
,
1069 IN ULONG SlotNumber
,
1075 #endif /* !defined(NO_LEGACY_DRIVERS) */
1077 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1083 IN PDEVICE_DESCRIPTION DeviceDescription
,
1084 IN OUT PULONG NumberOfMapRegisters
);
1090 IN ULONG Frequency
);
1095 IN PADAPTER_OBJECT DmaAdapter
);
1100 HalAcquireDisplayOwnership(
1101 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
1107 IN BUS_DATA_TYPE BusDataType
,
1109 IN ULONG SlotNumber
,
1116 HalGetBusDataByOffset(
1117 IN BUS_DATA_TYPE BusDataType
,
1119 IN ULONG SlotNumber
,
1127 HalSetBusDataByOffset(
1128 IN BUS_DATA_TYPE BusDataType
,
1130 IN ULONG SlotNumber
,
1138 HalTranslateBusAddress(
1139 IN INTERFACE_TYPE InterfaceType
,
1141 IN PHYSICAL_ADDRESS BusAddress
,
1142 IN OUT PULONG AddressSpace
,
1143 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
1147 #if (NTDDI_VERSION >= NTDDI_WINXP)
1152 IN PDEVICE_OBJECT DeviceObject
,
1153 IN ULONG SectorSize
,
1154 IN ULONG MBRTypeIdentifier
,
1158 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
1162 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1163 //DECLSPEC_DEPRECATED_DDK
1167 IoFreeAdapterChannel(
1168 IN PADAPTER_OBJECT AdapterObject
);
1170 //DECLSPEC_DEPRECATED_DDK
1174 IoFlushAdapterBuffers(
1175 IN PADAPTER_OBJECT AdapterObject
,
1177 IN PVOID MapRegisterBase
,
1180 IN BOOLEAN WriteToDevice
);
1182 //DECLSPEC_DEPRECATED_DDK
1187 IN PADAPTER_OBJECT AdapterObject
,
1188 IN PVOID MapRegisterBase
,
1189 IN ULONG NumberOfMapRegisters
);
1191 //DECLSPEC_DEPRECATED_DDK
1195 HalAllocateCommonBuffer(
1196 IN PADAPTER_OBJECT AdapterObject
,
1198 OUT PPHYSICAL_ADDRESS LogicalAddress
,
1199 IN BOOLEAN CacheEnabled
);
1201 //DECLSPEC_DEPRECATED_DDK
1205 HalFreeCommonBuffer(
1206 IN PADAPTER_OBJECT AdapterObject
,
1208 IN PHYSICAL_ADDRESS LogicalAddress
,
1209 IN PVOID VirtualAddress
,
1210 IN BOOLEAN CacheEnabled
);
1212 //DECLSPEC_DEPRECATED_DDK
1217 IN PADAPTER_OBJECT AdapterObject
);
1222 HalAllocateAdapterChannel(
1223 IN PADAPTER_OBJECT AdapterObject
,
1224 IN PWAIT_CONTEXT_BLOCK Wcb
,
1225 IN ULONG NumberOfMapRegisters
,
1226 IN PDRIVER_CONTROL ExecutionRoutine
);
1228 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
1230 #endif /* defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) */
1232 /* I/O Manager Functions */
1235 * VOID IoAssignArcName(
1236 * IN PUNICODE_STRING ArcName,
1237 * IN PUNICODE_STRING DeviceName);
1239 #define IoAssignArcName(_ArcName, _DeviceName) ( \
1240 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
1244 * IoDeassignArcName(
1245 * IN PUNICODE_STRING ArcName)
1247 #define IoDeassignArcName IoDeleteSymbolicLink
1249 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1251 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
1255 IoAllocateAdapterChannel(
1256 IN PADAPTER_OBJECT AdapterObject
,
1257 IN PDEVICE_OBJECT DeviceObject
,
1258 IN ULONG NumberOfMapRegisters
,
1259 IN PDRIVER_CONTROL ExecutionRoutine
,
1263 //DECLSPEC_DEPRECATED_DDK
1268 IN PADAPTER_OBJECT AdapterObject
,
1270 IN PVOID MapRegisterBase
,
1272 IN OUT PULONG Length
,
1273 IN BOOLEAN WriteToDevice
);
1278 IoAllocateController(
1279 IN PCONTROLLER_OBJECT ControllerObject
,
1280 IN PDEVICE_OBJECT DeviceObject
,
1281 IN PDRIVER_CONTROL ExecutionRoutine
,
1282 IN PVOID Context OPTIONAL
);
1294 IN PCONTROLLER_OBJECT ControllerObject
);
1300 IN PCONTROLLER_OBJECT ControllerObject
);
1303 PCONFIGURATION_INFORMATION
1305 IoGetConfigurationInformation(
1311 IoGetDeviceToVerify(
1312 IN PETHREAD Thread
);
1318 IN PDEVICE_OBJECT DeviceObject
,
1319 IN PFILE_OBJECT FileObject
);
1324 IoGetFileObjectGenericMapping(
1330 IoMakeAssociatedIrp(
1332 IN CCHAR StackSize
);
1337 IoQueryDeviceDescription(
1338 IN PINTERFACE_TYPE BusType OPTIONAL
,
1339 IN PULONG BusNumber OPTIONAL
,
1340 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
1341 IN PULONG ControllerNumber OPTIONAL
,
1342 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
1343 IN PULONG PeripheralNumber OPTIONAL
,
1344 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
1345 IN OUT PVOID Context OPTIONAL
);
1352 IN PVPB Vpb OPTIONAL
,
1353 IN PDEVICE_OBJECT RealDeviceObject
);
1358 IoRaiseInformationalHardError(
1359 IN NTSTATUS ErrorStatus
,
1360 IN PUNICODE_STRING String OPTIONAL
,
1361 IN PKTHREAD Thread OPTIONAL
);
1366 IoRegisterBootDriverReinitialization(
1367 IN PDRIVER_OBJECT DriverObject
,
1368 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
1369 IN PVOID Context OPTIONAL
);
1374 IoRegisterDriverReinitialization(
1375 IN PDRIVER_OBJECT DriverObject
,
1376 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
1377 IN PVOID Context OPTIONAL
);
1382 IoAttachDeviceByPointer(
1383 IN PDEVICE_OBJECT SourceDevice
,
1384 IN PDEVICE_OBJECT TargetDevice
);
1389 IoReportDetectedDevice(
1390 IN PDRIVER_OBJECT DriverObject
,
1391 IN INTERFACE_TYPE LegacyBusType
,
1393 IN ULONG SlotNumber
,
1394 IN PCM_RESOURCE_LIST ResourceList OPTIONAL
,
1395 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
1396 IN BOOLEAN ResourceAssigned
,
1397 IN OUT PDEVICE_OBJECT
*DeviceObject
);
1402 IoReportResourceForDetection(
1403 IN PDRIVER_OBJECT DriverObject
,
1404 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
1405 IN ULONG DriverListSize OPTIONAL
,
1406 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
1407 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
1408 IN ULONG DeviceListSize OPTIONAL
,
1409 OUT PBOOLEAN ConflictDetected
);
1414 IoReportResourceUsage(
1415 IN PUNICODE_STRING DriverClassName OPTIONAL
,
1416 IN PDRIVER_OBJECT DriverObject
,
1417 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
1418 IN ULONG DriverListSize OPTIONAL
,
1419 IN PDEVICE_OBJECT DeviceObject
,
1420 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
1421 IN ULONG DeviceListSize OPTIONAL
,
1422 IN BOOLEAN OverrideConflict
,
1423 OUT PBOOLEAN ConflictDetected
);
1428 IoSetHardErrorOrVerifyDevice(
1430 IN PDEVICE_OBJECT DeviceObject
);
1436 IN PUNICODE_STRING RegistryPath
,
1437 IN PUNICODE_STRING DriverClassName OPTIONAL
,
1438 IN PDRIVER_OBJECT DriverObject
,
1439 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
1440 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL
,
1441 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
1443 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
1445 #if (NTDDI_VERSION >= NTDDI_WINXP)
1451 IN PDEVICE_OBJECT DeviceObject
,
1452 IN PCREATE_DISK Disk OPTIONAL
);
1457 IoReadDiskSignature(
1458 IN PDEVICE_OBJECT DeviceObject
,
1459 IN ULONG BytesPerSector
,
1460 OUT PDISK_SIGNATURE Signature
);
1465 IoReadPartitionTable(
1466 IN PDEVICE_OBJECT DeviceObject
,
1467 IN ULONG SectorSize
,
1468 IN BOOLEAN ReturnRecognizedPartitions
,
1469 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
1474 IoReadPartitionTableEx(
1475 IN PDEVICE_OBJECT DeviceObject
,
1476 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
1481 IoSetPartitionInformation(
1482 IN PDEVICE_OBJECT DeviceObject
,
1483 IN ULONG SectorSize
,
1484 IN ULONG PartitionNumber
,
1485 IN ULONG PartitionType
);
1490 IoSetPartitionInformationEx(
1491 IN PDEVICE_OBJECT DeviceObject
,
1492 IN ULONG PartitionNumber
,
1493 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
1498 IoSetSystemPartition(
1499 IN PUNICODE_STRING VolumeNameString
);
1504 IoSetThreadHardErrorMode(
1505 IN BOOLEAN EnableHardErrors
);
1510 IoVerifyPartitionTable(
1511 IN PDEVICE_OBJECT DeviceObject
,
1512 IN BOOLEAN FixErrors
);
1517 IoVolumeDeviceToDosName(
1518 IN PVOID VolumeDeviceObject
,
1519 OUT PUNICODE_STRING DosName
);
1524 IoWritePartitionTable(
1525 IN PDEVICE_OBJECT DeviceObject
,
1526 IN ULONG SectorSize
,
1527 IN ULONG SectorsPerTrack
,
1528 IN ULONG NumberOfHeads
,
1529 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
1534 IoWritePartitionTableEx(
1535 IN PDEVICE_OBJECT DeviceObject
,
1536 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*DriveLayout
);
1538 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
1540 /** Kernel debugger routines **/
1548 IN ULONG MaximumResponseLength
);
1550 /* Kernel Functions */
1552 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1559 IN ULONG BugCheckCode
);
1565 IN OUT PRKEVENT Event
,
1566 IN KPRIORITY Increment
,
1572 KeSetBasePriorityThread(
1573 IN OUT PRKTHREAD Thread
,
1578 /* Memory Manager Types */
1580 typedef struct _PHYSICAL_MEMORY_RANGE
{
1581 PHYSICAL_ADDRESS BaseAddress
;
1582 LARGE_INTEGER NumberOfBytes
;
1583 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
1585 /* Memory Manager Functions */
1587 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1590 PPHYSICAL_MEMORY_RANGE
1592 MmGetPhysicalMemoryRanges(
1598 MmGetPhysicalAddress(
1599 IN PVOID BaseAddress
);
1604 MmIsNonPagedSystemAddressValid(
1605 IN PVOID VirtualAddress
);
1610 MmAllocateNonCachedMemory(
1611 IN SIZE_T NumberOfBytes
);
1616 MmFreeNonCachedMemory(
1617 IN PVOID BaseAddress
,
1618 IN SIZE_T NumberOfBytes
);
1623 MmGetVirtualForPhysical(
1624 IN PHYSICAL_ADDRESS PhysicalAddress
);
1629 MmMapUserAddressesToPage(
1630 IN PVOID BaseAddress
,
1631 IN SIZE_T NumberOfBytes
,
1632 IN PVOID PageAddress
);
1638 IN PHYSICAL_ADDRESS PhysicalAddress
,
1639 IN SIZE_T NumberOfBytes
,
1640 IN MEMORY_CACHING_TYPE CacheType
);
1645 MmMapViewInSessionSpace(
1647 OUT PVOID
*MappedBase
,
1648 IN OUT PSIZE_T ViewSize
);
1653 MmMapViewInSystemSpace(
1655 OUT PVOID
*MappedBase
,
1656 IN OUT PSIZE_T ViewSize
);
1662 IN PVOID VirtualAddress
);
1667 MmIsThisAnNtAsSystem(
1673 MmLockPagableSectionByHandle(
1674 IN PVOID ImageSectionHandle
);
1679 MmUnmapViewInSessionSpace(
1680 IN PVOID MappedBase
);
1685 MmUnmapViewInSystemSpace(
1686 IN PVOID MappedBase
);
1691 MmUnsecureVirtualMemory(
1692 IN HANDLE SecureHandle
);
1697 MmRemovePhysicalMemory(
1698 IN PPHYSICAL_ADDRESS StartAddress
,
1699 IN OUT PLARGE_INTEGER NumberOfBytes
);
1704 MmSecureVirtualMemory(
1707 IN ULONG ProbeMode
);
1712 MmUnmapVideoDisplay(
1713 IN PVOID BaseAddress
,
1714 IN SIZE_T NumberOfBytes
);
1716 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
1718 /* NtXxx Functions */
1724 OUT PHANDLE ProcessHandle
,
1725 IN ACCESS_MASK DesiredAccess
,
1726 IN POBJECT_ATTRIBUTES ObjectAttributes
,
1727 IN PCLIENT_ID ClientId OPTIONAL
);
1732 NtQueryInformationProcess(
1733 IN HANDLE ProcessHandle
,
1734 IN PROCESSINFOCLASS ProcessInformationClass
,
1735 OUT PVOID ProcessInformation OPTIONAL
,
1736 IN ULONG ProcessInformationLength
,
1737 OUT PULONG ReturnLength OPTIONAL
);
1739 /** Process manager routines **/
1741 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1746 PsSetLoadImageNotifyRoutine(
1747 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
1752 PsSetCreateThreadNotifyRoutine(
1753 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
1758 PsSetCreateProcessNotifyRoutine(
1759 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
1765 PsGetCurrentProcessId(
1771 PsGetCurrentThreadId(
1778 OUT PULONG MajorVersion OPTIONAL
,
1779 OUT PULONG MinorVersion OPTIONAL
,
1780 OUT PULONG BuildNumber OPTIONAL
,
1781 OUT PUNICODE_STRING CSDVersion OPTIONAL
);
1783 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
1785 #if (NTDDI_VERSION >= NTDDI_WINXP)
1791 IN PEPROCESS Process
);
1796 PsRemoveCreateThreadNotifyRoutine(
1797 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
1802 PsRemoveLoadImageNotifyRoutine(
1803 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
1805 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
1807 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess
;
1811 typedef struct _RTL_SPLAY_LINKS
{
1812 struct _RTL_SPLAY_LINKS
*Parent
;
1813 struct _RTL_SPLAY_LINKS
*LeftChild
;
1814 struct _RTL_SPLAY_LINKS
*RightChild
;
1815 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
1819 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
1821 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
1822 *CallersAddress = (PVOID)_ReturnAddress(); \
1823 *CallersCaller = NULL;
1826 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1830 RtlGetCallersAddress(
1831 OUT PVOID
*CallersAddress
,
1832 OUT PVOID
*CallersCaller
);
1837 #if !defined(MIDL_PASS)
1842 RtlConvertLongToLuid(
1848 Temp
.QuadPart
= Val
;
1849 Luid
.LowPart
= Temp
.u
.LowPart
;
1850 Luid
.HighPart
= Temp
.u
.HighPart
;
1857 RtlConvertUlongToLuid(
1869 #if defined(_AMD64_) || defined(_IA64_)
1870 //DECLSPEC_DEPRECATED_DDK_WINXP
1874 RtlLargeIntegerDivide(
1875 IN LARGE_INTEGER Dividend
,
1876 IN LARGE_INTEGER Divisor
,
1877 OUT PLARGE_INTEGER Remainder OPTIONAL
)
1880 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
1882 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
1888 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1892 RtlLargeIntegerDivide(
1893 IN LARGE_INTEGER Dividend
,
1894 IN LARGE_INTEGER Divisor
,
1895 OUT PLARGE_INTEGER Remainder OPTIONAL
);
1898 #endif /* defined(_AMD64_) || defined(_IA64_) */
1900 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1905 RtlPrefixUnicodeString(
1906 IN PCUNICODE_STRING String1
,
1907 IN PCUNICODE_STRING String2
,
1908 IN BOOLEAN CaseInSensitive
);
1914 IN OUT PSTRING DestinationString
,
1915 IN
const PSTRING SourceString
);
1920 RtlUpcaseUnicodeString(
1921 IN OUT PUNICODE_STRING DestinationString
,
1922 IN PCUNICODE_STRING SourceString
,
1923 IN BOOLEAN AllocateDestinationString
);
1929 IN OUT PACCESS_MASK AccessMask
,
1930 IN PGENERIC_MAPPING GenericMapping
);
1935 RtlVolumeDeviceToDosName(
1936 IN PVOID VolumeDeviceObject
,
1937 OUT PUNICODE_STRING DosName
);
1943 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
1948 RtlVerifyVersionInfo(
1949 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
1951 IN ULONGLONG ConditionMask
);
1957 IN
const PSTRING String1
,
1958 IN
const PSTRING String2
,
1959 BOOLEAN CaseInSensitive
);
1965 OUT PSTRING DestinationString
,
1966 IN
const PSTRING SourceString OPTIONAL
);
1972 IN
const PSTRING String1
,
1973 IN
const PSTRING String2
,
1974 IN BOOLEAN CaseInSensitive
);
1981 IN ULONG Base OPTIONAL
,
1998 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2000 /* Security reference monitor routines */
2002 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2006 SeSinglePrivilegeCheck(
2007 IN LUID PrivilegeValue
,
2008 IN KPROCESSOR_MODE PreviousMode
);
2011 /* ZwXxx Functions */
2013 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2018 IN HANDLE TimerHandle
,
2019 OUT PBOOLEAN CurrentState OPTIONAL
);
2024 OUT PHANDLE TimerHandle
,
2025 IN ACCESS_MASK DesiredAccess
,
2026 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
2027 IN TIMER_TYPE TimerType
);
2032 OUT PHANDLE TimerHandle
,
2033 IN ACCESS_MASK DesiredAccess
,
2034 IN POBJECT_ATTRIBUTES ObjectAttributes
);
2039 ZwSetInformationThread(
2040 IN HANDLE ThreadHandle
,
2041 IN THREADINFOCLASS ThreadInformationClass
,
2042 IN PVOID ThreadInformation
,
2043 IN ULONG ThreadInformationLength
);
2048 IN HANDLE TimerHandle
,
2049 IN PLARGE_INTEGER DueTime
,
2050 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
2051 IN PVOID TimerContext OPTIONAL
,
2052 IN BOOLEAN ResumeTimer
,
2053 IN LONG Period OPTIONAL
,
2054 OUT PBOOLEAN PreviousState OPTIONAL
);
2058 /* Windows Device Driver Kit */
2066 #endif /* _NTDDK_ */