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.
26 /* Helper macro to enable gcc's extension. */
27 #ifndef __GNU_EXTENSION
29 #define __GNU_EXTENSION __extension__
31 #define __GNU_EXTENSION
45 /* Pseudo modifiers for parameters */
61 #define RESTRICTED_POINTER
63 #define DECLSPEC_ADDRSAFE
65 #ifdef NONAMELESSUNION
66 # define _DDK_DUMMYUNION_MEMBER(name) DUMMYUNIONNAME.name
67 # define _DDK_DUMMYUNION_N_MEMBER(n, name) DUMMYUNIONNAME##n.name
69 # define _DDK_DUMMYUNION_MEMBER(name) name
70 # define _DDK_DUMMYUNION_N_MEMBER(n, name) name
74 ** Forward declarations
80 struct _DRIVE_LAYOUT_INFORMATION_EX
;
81 struct _LOADER_PARAMETER_BLOCK
;
85 /* FIXME: Unknown definitions */
86 struct _SET_PARTITION_INFORMATION_EX
;
87 typedef ULONG WAIT_TYPE
;
90 typedef HANDLE TRACEHANDLE
;
91 typedef PVOID PWMILIB_CONTEXT
;
92 typedef ULONG LOGICAL
;
96 ** WmiLib specific structure
100 IrpProcessed
, // Irp was processed and possibly completed
101 IrpNotCompleted
, // Irp was process and NOT completed
102 IrpNotWmi
, // Irp is not a WMI irp
103 IrpForward
// Irp is wmi irp, but targeted at another device object
104 } SYSCTL_IRP_DISPOSITION
, *PSYSCTL_IRP_DISPOSITION
;
109 struct _COMPRESSED_DATA_INFO
;
111 #define KERNEL_STACK_SIZE 12288
112 #define KERNEL_LARGE_STACK_SIZE 61440
113 #define KERNEL_LARGE_STACK_COMMIT 12288
115 #define EXCEPTION_READ_FAULT 0
116 #define EXCEPTION_WRITE_FAULT 1
117 #define EXCEPTION_EXECUTE_FAULT 8
119 #define DPFLTR_ERROR_LEVEL 0
120 #define DPFLTR_WARNING_LEVEL 1
121 #define DPFLTR_TRACE_LEVEL 2
122 #define DPFLTR_INFO_LEVEL 3
123 #define DPFLTR_MASK 0x80000000
125 typedef enum _DPFLTR_TYPE
127 DPFLTR_SYSTEM_ID
= 0,
132 DPFLTR_CRASHDUMP_ID
= 5,
133 DPFLTR_CDAUDIO_ID
= 6,
135 DPFLTR_CLASSPNP_ID
= 8,
137 DPFLTR_REDBOOK_ID
= 10,
138 DPFLTR_STORPROP_ID
= 11,
139 DPFLTR_SCSIPORT_ID
= 12,
140 DPFLTR_SCSIMINIPORT_ID
= 13,
141 DPFLTR_CONFIG_ID
= 14,
142 DPFLTR_I8042PRT_ID
= 15,
143 DPFLTR_SERMOUSE_ID
= 16,
144 DPFLTR_LSERMOUS_ID
= 17,
145 DPFLTR_KBDHID_ID
= 18,
146 DPFLTR_MOUHID_ID
= 19,
147 DPFLTR_KBDCLASS_ID
= 20,
148 DPFLTR_MOUCLASS_ID
= 21,
149 DPFLTR_TWOTRACK_ID
= 22,
150 DPFLTR_WMILIB_ID
= 23,
153 DPFLTR_HALIA64_ID
= 26,
154 DPFLTR_VIDEO_ID
= 27,
155 DPFLTR_SVCHOST_ID
= 28,
156 DPFLTR_VIDEOPRT_ID
= 29,
157 DPFLTR_TCPIP_ID
= 30,
158 DPFLTR_DMSYNTH_ID
= 31,
159 DPFLTR_NTOSPNP_ID
= 32,
160 DPFLTR_FASTFAT_ID
= 33,
161 DPFLTR_SAMSS_ID
= 34,
162 DPFLTR_PNPMGR_ID
= 35,
163 DPFLTR_NETAPI_ID
= 36,
164 DPFLTR_SCSERVER_ID
= 37,
165 DPFLTR_SCCLIENT_ID
= 38,
166 DPFLTR_SERIAL_ID
= 39,
167 DPFLTR_SERENUM_ID
= 40,
169 DPFLTR_BOOTOK_ID
= 42,
170 DPFLTR_BOOTVRFY_ID
= 43,
171 DPFLTR_RPCPROXY_ID
= 44,
172 DPFLTR_AUTOCHK_ID
= 45,
173 DPFLTR_DCOMSS_ID
= 46,
174 DPFLTR_UNIMODEM_ID
= 47,
176 DPFLTR_FLTMGR_ID
= 49,
177 DPFLTR_WMICORE_ID
= 50,
178 DPFLTR_BURNENG_ID
= 51,
179 DPFLTR_IMAPI_ID
= 52,
181 DPFLTR_FUSION_ID
= 54,
182 DPFLTR_IDLETASK_ID
= 55,
183 DPFLTR_SOFTPCI_ID
= 56,
185 DPFLTR_MCHGR_ID
= 58,
187 DPFLTR_PCIIDE_ID
= 60,
188 DPFLTR_FLOPPY_ID
= 61,
190 DPFLTR_TERMSRV_ID
= 63,
191 DPFLTR_W32TIME_ID
= 64,
192 DPFLTR_PREFETCHER_ID
= 65,
193 DPFLTR_RSFILTER_ID
= 66,
194 DPFLTR_FCPORT_ID
= 67,
197 DPFLTR_DMCONFIG_ID
= 70,
198 DPFLTR_DMADMIN_ID
= 71,
199 DPFLTR_WSOCKTRANSPORT_ID
= 72,
201 DPFLTR_PNPMEM_ID
= 74,
202 DPFLTR_PROCESSOR_ID
= 75,
203 DPFLTR_DMSERVER_ID
= 76,
205 DPFLTR_INFINIBAND_ID
= 78,
206 DPFLTR_IHVDRIVER_ID
= 79,
207 DPFLTR_IHVVIDEO_ID
= 80,
208 DPFLTR_IHVAUDIO_ID
= 81,
209 DPFLTR_IHVNETWORK_ID
= 82,
210 DPFLTR_IHVSTREAMING_ID
= 83,
211 DPFLTR_IHVBUS_ID
= 84,
213 DPFLTR_RTLTHREADPOOL_ID
= 86,
215 DPFLTR_TCPIP6_ID
= 88,
216 DPFLTR_ISAPNP_ID
= 89,
218 DPFLTR_STORPORT_ID
= 91,
219 DPFLTR_STORMINIPORT_ID
= 92,
220 DPFLTR_PRINTSPOOLER_ID
= 93,
222 DPFLTR_VDSBAS_ID
= 95,
223 DPFLTR_VDSDYNDR_ID
= 96,
224 DPFLTR_VDSUTIL_ID
= 97,
225 DPFLTR_DFRGIFC_ID
= 98,
226 DPFLTR_DEFAULT_ID
= 99,
228 DPFLTR_DFSC_ID
= 101,
229 DPFLTR_WOW64_ID
= 102,
233 /* also in winnt.h */
235 #define FILE_COPY_STRUCTURED_STORAGE 0x00000041
236 #define FILE_STRUCTURED_STORAGE 0x00000441
240 #define THREAD_ALERT (0x0004)
242 /* Exported object types */
243 extern POBJECT_TYPE NTSYSAPI ExDesktopObjectType
;
244 extern POBJECT_TYPE NTSYSAPI ExEventObjectType
;
245 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType
;
246 extern POBJECT_TYPE NTSYSAPI ExWindowStationObjectType
;
247 extern ULONG NTSYSAPI IoDeviceHandlerObjectSize
;
248 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType
;
249 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType
;
250 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType
;
251 extern POBJECT_TYPE NTSYSAPI IoFileObjectType
;
252 extern POBJECT_TYPE NTSYSAPI PsThreadType
;
253 extern POBJECT_TYPE NTSYSAPI LpcPortObjectType
;
254 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType
;
255 extern POBJECT_TYPE NTSYSAPI PsProcessType
;
257 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
258 extern volatile CCHAR NTSYSAPI KeNumberProcessors
;
260 #if (NTDDI_VERSION >= NTDDI_WINXP)
261 extern CCHAR NTSYSAPI KeNumberProcessors
;
263 //extern PCCHAR KeNumberProcessors;
264 extern NTSYSAPI CCHAR KeNumberProcessors
; //FIXME: Note to Alex: I won't fix this atm, since I prefer to discuss this with you first.
268 #define MAX_WOW64_SHARED_ENTRIES 16
270 extern volatile KSYSTEM_TIME KeTickCount
;
272 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
273 #define NX_SUPPORT_POLICY_ALWAYSON 1
274 #define NX_SUPPORT_POLICY_OPTIN 2
275 #define NX_SUPPORT_POLICY_OPTOUT 3
277 typedef struct _KUSER_SHARED_DATA
279 ULONG TickCountLowDeprecated
;
280 ULONG TickCountMultiplier
;
281 volatile KSYSTEM_TIME InterruptTime
;
282 volatile KSYSTEM_TIME SystemTime
;
283 volatile KSYSTEM_TIME TimeZoneBias
;
284 USHORT ImageNumberLow
;
285 USHORT ImageNumberHigh
;
286 WCHAR NtSystemRoot
[260];
287 ULONG MaxStackTraceDepth
;
288 ULONG CryptoExponent
;
290 ULONG LargePageMinimum
;
292 NT_PRODUCT_TYPE NtProductType
;
293 BOOLEAN ProductTypeIsValid
;
294 ULONG NtMajorVersion
;
295 ULONG NtMinorVersion
;
296 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
299 volatile ULONG TimeSlip
;
300 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
301 LARGE_INTEGER SystemExpirationDate
;
303 BOOLEAN KdDebuggerEnabled
;
304 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
305 UCHAR NXSupportPolicy
;
307 volatile ULONG ActiveConsoleId
;
308 volatile ULONG DismountCount
;
309 ULONG ComPlusPackage
;
310 ULONG LastSystemRITEventTickCount
;
311 ULONG NumberOfPhysicalPages
;
312 BOOLEAN SafeBootMode
;
315 ULONGLONG TestRetInstruction
;
317 ULONG SystemCallReturn
;
318 ULONGLONG SystemCallPad
[3];
319 __GNU_EXTENSION
union {
320 volatile KSYSTEM_TIME TickCount
;
321 volatile ULONG64 TickCountQuad
;
324 #if (NTDDI_VERSION >= NTDDI_WS03)
325 LONGLONG ConsoleSessionForegroundProcessId
;
326 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
328 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
329 USHORT UserModeGlobalLogger
[8];
330 ULONG HeapTracingPid
[2];
331 ULONG CritSecTracingPid
[2];
332 __GNU_EXTENSION
union
334 ULONG SharedDataFlags
;
335 __GNU_EXTENSION
struct
337 ULONG DbgErrorPortPresent
:1;
338 ULONG DbgElevationEnabled
:1;
339 ULONG DbgVirtEnabled
:1;
340 ULONG DbgInstallerDetectEnabled
:1;
344 ULONG ImageFileExecutionOptions
;
345 KAFFINITY ActiveProcessorAffinity
;
347 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
350 ** IRP function codes
353 #define IRP_MN_QUERY_DIRECTORY 0x01
354 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
356 #define IRP_MN_USER_FS_REQUEST 0x00
357 #define IRP_MN_MOUNT_VOLUME 0x01
358 #define IRP_MN_VERIFY_VOLUME 0x02
359 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
360 #define IRP_MN_TRACK_LINK 0x04
361 #define IRP_MN_KERNEL_CALL 0x04
363 #define IRP_MN_LOCK 0x01
364 #define IRP_MN_UNLOCK_SINGLE 0x02
365 #define IRP_MN_UNLOCK_ALL 0x03
366 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
368 #define IRP_MN_NORMAL 0x00
369 #define IRP_MN_DPC 0x01
370 #define IRP_MN_MDL 0x02
371 #define IRP_MN_COMPLETE 0x04
372 #define IRP_MN_COMPRESSED 0x08
374 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
375 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
376 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
378 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
380 typedef EXCEPTION_DISPOSITION
381 (DDKAPI
*PEXCEPTION_ROUTINE
)(
382 IN
struct _EXCEPTION_RECORD
*ExceptionRecord
,
383 IN PVOID EstablisherFrame
,
384 IN OUT
struct _CONTEXT
*ContextRecord
,
385 IN OUT PVOID DispatcherContext
);
388 (DDKAPI
*PDRIVER_ENTRY
)(
389 IN
struct _DRIVER_OBJECT
*DriverObject
,
390 IN PUNICODE_STRING RegistryPath
);
393 (DDKAPI
*PDRIVER_REINITIALIZE
)(
394 IN
struct _DRIVER_OBJECT
*DriverObject
,
399 (DDKAPI
*PKTRANSFER_ROUTINE
)(
402 #define ASSERT_GATE(object) \
403 ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
404 (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
406 #define TIMER_TABLE_SIZE 512
407 #define TIMER_TABLE_SHIFT 9
409 #define ASSERT_TIMER(E) \
410 ASSERT(((E)->Header.Type == TimerNotificationObject) || \
411 ((E)->Header.Type == TimerSynchronizationObject))
413 #define ASSERT_MUTANT(E) \
414 ASSERT((E)->Header.Type == MutantObject)
416 #define ASSERT_SEMAPHORE(E) \
417 ASSERT((E)->Header.Type == SemaphoreObject)
419 #define ASSERT_EVENT(E) \
420 ASSERT(((E)->Header.Type == NotificationEvent) || \
421 ((E)->Header.Type == SynchronizationEvent))
423 #define KEYBOARD_INSERT_ON 0x08
424 #define KEYBOARD_CAPS_LOCK_ON 0x04
425 #define KEYBOARD_NUM_LOCK_ON 0x02
426 #define KEYBOARD_SCROLL_LOCK_ON 0x01
427 #define KEYBOARD_ALT_KEY_DOWN 0x80
428 #define KEYBOARD_CTRL_KEY_DOWN 0x40
429 #define KEYBOARD_LEFT_SHIFT_DOWN 0x20
430 #define KEYBOARD_RIGHT_SHIFT_DOWN 0x10
432 typedef struct _IO_COUNTERS
{
433 ULONGLONG ReadOperationCount
;
434 ULONGLONG WriteOperationCount
;
435 ULONGLONG OtherOperationCount
;
436 ULONGLONG ReadTransferCount
;
437 ULONGLONG WriteTransferCount
;
438 ULONGLONG OtherTransferCount
;
439 } IO_COUNTERS
, *PIO_COUNTERS
;
441 typedef struct _VM_COUNTERS
443 SIZE_T PeakVirtualSize
;
445 ULONG PageFaultCount
;
446 SIZE_T PeakWorkingSetSize
;
447 SIZE_T WorkingSetSize
;
448 SIZE_T QuotaPeakPagedPoolUsage
;
449 SIZE_T QuotaPagedPoolUsage
;
450 SIZE_T QuotaPeakNonPagedPoolUsage
;
451 SIZE_T QuotaNonPagedPoolUsage
;
452 SIZE_T PagefileUsage
;
453 SIZE_T PeakPagefileUsage
;
454 } VM_COUNTERS
, *PVM_COUNTERS
;
456 typedef struct _VM_COUNTERS_EX
458 SIZE_T PeakVirtualSize
;
460 ULONG PageFaultCount
;
461 SIZE_T PeakWorkingSetSize
;
462 SIZE_T WorkingSetSize
;
463 SIZE_T QuotaPeakPagedPoolUsage
;
464 SIZE_T QuotaPagedPoolUsage
;
465 SIZE_T QuotaPeakNonPagedPoolUsage
;
466 SIZE_T QuotaNonPagedPoolUsage
;
467 SIZE_T PagefileUsage
;
468 SIZE_T PeakPagefileUsage
;
470 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
472 typedef struct _POOLED_USAGE_AND_LIMITS
474 SIZE_T PeakPagedPoolUsage
;
475 SIZE_T PagedPoolUsage
;
476 SIZE_T PagedPoolLimit
;
477 SIZE_T PeakNonPagedPoolUsage
;
478 SIZE_T NonPagedPoolUsage
;
479 SIZE_T NonPagedPoolLimit
;
480 SIZE_T PeakPagefileUsage
;
481 SIZE_T PagefileUsage
;
482 SIZE_T PagefileLimit
;
483 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
485 typedef struct _CONTROLLER_OBJECT
{
488 PVOID ControllerExtension
;
489 KDEVICE_QUEUE DeviceWaitQueue
;
491 LARGE_INTEGER Spare2
;
492 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
494 /* DEVICE_OBJECT.Flags */
496 #define DO_DEVICE_HAS_NAME 0x00000040
497 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
498 #define DO_LONG_TERM_REQUESTS 0x00000200
499 #define DO_NEVER_LAST_DEVICE 0x00000400
500 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
501 #define DO_XIP 0x00020000
503 #define DRVO_REINIT_REGISTERED 0x00000008
504 #define DRVO_INITIALIZED 0x00000010
505 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
506 #define DRVO_LEGACY_RESOURCES 0x00000040
508 typedef enum _ARBITER_REQUEST_SOURCE
{
509 ArbiterRequestUndefined
= -1,
510 ArbiterRequestLegacyReported
,
511 ArbiterRequestHalReported
,
512 ArbiterRequestLegacyAssigned
,
513 ArbiterRequestPnpDetected
,
514 ArbiterRequestPnpEnumerated
515 } ARBITER_REQUEST_SOURCE
;
517 typedef enum _ARBITER_RESULT
{
518 ArbiterResultUndefined
= -1,
519 ArbiterResultSuccess
,
520 ArbiterResultExternalConflict
,
521 ArbiterResultNullRequest
524 typedef enum _ARBITER_ACTION
{
525 ArbiterActionTestAllocation
,
526 ArbiterActionRetestAllocation
,
527 ArbiterActionCommitAllocation
,
528 ArbiterActionRollbackAllocation
,
529 ArbiterActionQueryAllocatedResources
,
530 ArbiterActionWriteReservedResources
,
531 ArbiterActionQueryConflict
,
532 ArbiterActionQueryArbitrate
,
533 ArbiterActionAddReserved
,
534 ArbiterActionBootAllocation
535 } ARBITER_ACTION
, *PARBITER_ACTION
;
537 typedef struct _ARBITER_CONFLICT_INFO
{
538 PDEVICE_OBJECT OwningObject
;
541 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
543 typedef struct _ARBITER_PARAMETERS
{
546 IN OUT PLIST_ENTRY ArbitrationList
;
547 IN ULONG AllocateFromCount
;
548 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
552 IN OUT PLIST_ENTRY ArbitrationList
;
553 IN ULONG AllocateFromCount
;
554 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
558 IN OUT PLIST_ENTRY ArbitrationList
;
562 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
563 } QueryAllocatedResources
;
566 IN PDEVICE_OBJECT PhysicalDeviceObject
;
567 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
568 OUT PULONG ConflictCount
;
569 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
573 IN PLIST_ENTRY ArbitrationList
;
577 IN PDEVICE_OBJECT ReserveDevice
;
580 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
582 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
584 typedef struct _ARBITER_LIST_ENTRY
{
585 LIST_ENTRY ListEntry
;
586 ULONG AlternativeCount
;
587 PIO_RESOURCE_DESCRIPTOR Alternatives
;
588 PDEVICE_OBJECT PhysicalDeviceObject
;
589 ARBITER_REQUEST_SOURCE RequestSource
;
592 INTERFACE_TYPE InterfaceType
;
595 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
596 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
597 ARBITER_RESULT Result
;
598 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
601 (DDKAPI
*PARBITER_HANDLER
)(
603 IN ARBITER_ACTION Action
,
604 IN OUT PARBITER_PARAMETERS Parameters
);
606 #define ARBITER_PARTIAL 0x00000001
608 typedef struct _ARBITER_INTERFACE
{
612 PINTERFACE_REFERENCE InterfaceReference
;
613 PINTERFACE_DEREFERENCE InterfaceDereference
;
614 PARBITER_HANDLER ArbiterHandler
;
616 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
618 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
619 HalInstalledBusInformation
,
620 HalProfileSourceInformation
,
621 HalInformationClassUnused1
,
623 HalProcessorSpeedInformation
,
624 HalCallbackInformation
,
625 HalMapRegisterInformation
,
626 HalMcaLogInformation
,
627 HalFrameBufferCachingInformation
,
628 HalDisplayBiosInformation
,
629 HalProcessorFeatureInformation
,
630 HalNumaTopologyInterface
,
632 HalCmcLogInformation
,
633 HalCpeLogInformation
,
634 HalQueryMcaInterface
,
635 HalQueryAMLIIllegalIOPortAddresses
,
636 HalQueryMaxHotPlugMemoryAddress
,
637 HalPartitionIpiInterface
,
638 HalPlatformInformation
,
639 HalQueryProfileSourceList
640 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
642 typedef enum _HAL_SET_INFORMATION_CLASS
{
643 HalProfileSourceInterval
,
644 HalProfileSourceInterruptHandler
,
645 HalMcaRegisterDriver
,
646 HalKernelErrorHandler
,
647 HalCmcRegisterDriver
,
648 HalCpeRegisterDriver
,
652 HalGenerateCmcInterrupt
653 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
655 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
657 KPROFILE_SOURCE Source
;
659 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
661 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
663 KPROFILE_SOURCE Source
;
666 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
668 typedef struct _MAP_REGISTER_ENTRY
671 BOOLEAN WriteToDevice
;
672 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
679 PUCHAR TranslatedAddress
;
681 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
685 PHYSICAL_ADDRESS Start
;
686 PHYSICAL_ADDRESS MaxEnd
;
687 PVOID VirtualAddress
;
691 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
703 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
704 DEBUG_MEMORY_REQUIREMENTS Memory
;
705 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
707 /* Function Type Defintions for Dispatch Functions */
708 struct _DEVICE_CONTROL_CONTEXT
;
711 (DDKAPI
*PDEVICE_CONTROL_COMPLETION
)(
712 IN
struct _DEVICE_CONTROL_CONTEXT
*ControlContext
);
714 typedef struct _DEVICE_CONTROL_CONTEXT
{
716 PDEVICE_HANDLER_OBJECT DeviceHandler
;
717 PDEVICE_OBJECT DeviceObject
;
722 } DEVICE_CONTROL_CONTEXT
, *PDEVICE_CONTROL_CONTEXT
;
724 typedef struct _PM_DISPATCH_TABLE
{
728 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
730 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
731 TranslateChildToParent
,
732 TranslateParentToChild
733 } RESOURCE_TRANSLATION_DIRECTION
;
736 (DDKAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
738 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
739 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
740 IN ULONG AlternativesCount
,
741 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
742 IN PDEVICE_OBJECT PhysicalDeviceObject
,
743 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
746 (DDKAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
748 IN PIO_RESOURCE_DESCRIPTOR Source
,
749 IN PDEVICE_OBJECT PhysicalDeviceObject
,
750 OUT PULONG TargetCount
,
751 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
753 typedef struct _TRANSLATOR_INTERFACE
{
757 PINTERFACE_REFERENCE InterfaceReference
;
758 PINTERFACE_DEREFERENCE InterfaceDereference
;
759 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
760 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
761 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
764 (DDKAPI
*pHalDeviceControl
)(
765 IN PDEVICE_HANDLER_OBJECT DeviceHandler
,
766 IN PDEVICE_OBJECT DeviceObject
,
767 IN ULONG ControlCode
,
768 IN OUT PVOID Buffer OPTIONAL
,
769 IN OUT PULONG BufferLength OPTIONAL
,
771 IN PDEVICE_CONTROL_COMPLETION CompletionRoutine
);
774 (FASTCALL
*pHalExamineMBR
)(
775 IN PDEVICE_OBJECT DeviceObject
,
777 IN ULONG MBRTypeIdentifier
,
781 (FASTCALL
*pHalIoAssignDriveLetters
)(
782 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
783 IN PSTRING NtDeviceName
,
784 OUT PUCHAR NtSystemPath
,
785 OUT PSTRING NtSystemPathString
);
788 (FASTCALL
*pHalIoReadPartitionTable
)(
789 IN PDEVICE_OBJECT DeviceObject
,
791 IN BOOLEAN ReturnRecognizedPartitions
,
792 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
795 (FASTCALL
*pHalIoSetPartitionInformation
)(
796 IN PDEVICE_OBJECT DeviceObject
,
798 IN ULONG PartitionNumber
,
799 IN ULONG PartitionType
);
802 (FASTCALL
*pHalIoWritePartitionTable
)(
803 IN PDEVICE_OBJECT DeviceObject
,
805 IN ULONG SectorsPerTrack
,
806 IN ULONG NumberOfHeads
,
807 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
810 (FASTCALL
*pHalHandlerForBus
)(
811 IN INTERFACE_TYPE InterfaceType
,
815 (FASTCALL
*pHalReferenceBusHandler
)(
816 IN PBUS_HANDLER BusHandler
);
819 (DDKAPI
*pHalQuerySystemInformation
)(
820 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
823 OUT PULONG ReturnedLength
);
826 (DDKAPI
*pHalSetSystemInformation
)(
827 IN HAL_SET_INFORMATION_CLASS InformationClass
,
832 (DDKAPI
*pHalQueryBusSlots
)(
833 IN PBUS_HANDLER BusHandler
,
835 OUT PULONG SlotNumbers
,
836 OUT PULONG ReturnedLength
);
839 (DDKAPI
*pHalInitPnpDriver
)(
843 (DDKAPI
*pHalInitPowerManagement
)(
844 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
845 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
847 typedef struct _DMA_ADAPTER
*
848 (DDKAPI
*pHalGetDmaAdapter
)(
850 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
851 OUT PULONG NumberOfMapRegisters
);
854 (DDKAPI
*pHalGetInterruptTranslator
)(
855 IN INTERFACE_TYPE ParentInterfaceType
,
856 IN ULONG ParentBusNumber
,
857 IN INTERFACE_TYPE BridgeInterfaceType
,
860 OUT PTRANSLATOR_INTERFACE Translator
,
861 OUT PULONG BridgeBusNumber
);
864 (DDKAPI
*pHalStartMirroring
)(
868 (DDKAPI
*pHalEndMirroring
)(
869 IN ULONG PassNumber
);
872 (DDKAPI
*pHalMirrorPhysicalMemory
)(
873 IN PHYSICAL_ADDRESS PhysicalAddress
,
874 IN LARGE_INTEGER NumberOfBytes
);
877 (DDKAPI
*pHalMirrorVerify
)(
878 IN PHYSICAL_ADDRESS PhysicalAddress
,
879 IN LARGE_INTEGER NumberOfBytes
);
882 (DDKAPI
*pHalEndOfBoot
)(
887 (DDKAPI
*pHalTranslateBusAddress
)(
888 IN INTERFACE_TYPE InterfaceType
,
890 IN PHYSICAL_ADDRESS BusAddress
,
891 IN OUT PULONG AddressSpace
,
892 OUT PPHYSICAL_ADDRESS TranslatedAddress
897 (DDKAPI
*pHalAssignSlotResources
)(
898 IN PUNICODE_STRING RegistryPath
,
899 IN PUNICODE_STRING DriverClassName OPTIONAL
,
900 IN PDRIVER_OBJECT DriverObject
,
901 IN PDEVICE_OBJECT DeviceObject
,
902 IN INTERFACE_TYPE BusType
,
905 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
910 (DDKAPI
*pHalHaltSystem
)(
916 (DDKAPI
*pHalResetDisplay
)(
922 (DDKAPI
*pHalVectorToIDTEntry
)(
928 (DDKAPI
*pHalFindBusAddressTranslation
)(
929 IN PHYSICAL_ADDRESS BusAddress
,
930 IN OUT PULONG AddressSpace
,
931 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
932 IN OUT PULONG_PTR Context
,
938 (DDKAPI
*pKdSetupPciDeviceForDebugging
)(
939 IN PVOID LoaderBlock OPTIONAL
,
940 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
945 (DDKAPI
*pKdReleasePciDeviceForDebugging
)(
946 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
951 (DDKAPI
*pKdGetAcpiTablePhase0
)(
952 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
958 (DDKAPI
*pKdCheckPowerButton
)(
964 (DDKAPI
*pHalGetInterruptVector
)(
965 IN INTERFACE_TYPE InterfaceType
,
967 IN ULONG BusInterruptLevel
,
968 IN ULONG BusInterruptVector
,
970 OUT PKAFFINITY Affinity
975 (DDKAPI
*pHalGetVectorInput
)(
977 IN KAFFINITY Affinity
,
979 OUT PKINTERRUPT_POLARITY Polarity
984 (DDKAPI
*pKdMapPhysicalMemory64
)(
985 IN PHYSICAL_ADDRESS PhysicalAddress
,
991 (DDKAPI
*pKdUnmapVirtualAddress
)(
992 IN PVOID VirtualAddress
,
998 (DDKAPI
*pKdGetPciDataByOffset
)(
1000 IN ULONG SlotNumber
,
1008 (DDKAPI
*pKdSetPciDataByOffset
)(
1010 IN ULONG SlotNumber
,
1017 (DDKAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
1018 ULONG Columns
, ULONG Rows
);
1022 pHalQuerySystemInformation HalQuerySystemInformation
;
1023 pHalSetSystemInformation HalSetSystemInformation
;
1024 pHalQueryBusSlots HalQueryBusSlots
;
1026 pHalExamineMBR HalExamineMBR
;
1027 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
1028 pHalIoReadPartitionTable HalIoReadPartitionTable
;
1029 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
1030 pHalIoWritePartitionTable HalIoWritePartitionTable
;
1031 pHalHandlerForBus HalReferenceHandlerForBus
;
1032 pHalReferenceBusHandler HalReferenceBusHandler
;
1033 pHalReferenceBusHandler HalDereferenceBusHandler
;
1034 pHalInitPnpDriver HalInitPnpDriver
;
1035 pHalInitPowerManagement HalInitPowerManagement
;
1036 pHalGetDmaAdapter HalGetDmaAdapter
;
1037 pHalGetInterruptTranslator HalGetInterruptTranslator
;
1038 pHalStartMirroring HalStartMirroring
;
1039 pHalEndMirroring HalEndMirroring
;
1040 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
1041 pHalEndOfBoot HalEndOfBoot
;
1042 pHalMirrorVerify HalMirrorVerify
;
1043 } HAL_DISPATCH
, *PHAL_DISPATCH
;
1045 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTHAL_)
1046 extern NTSYSAPI PHAL_DISPATCH HalDispatchTable
;
1047 #define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable)
1049 extern __declspec(dllexport
) HAL_DISPATCH HalDispatchTable
;
1050 #define HALDISPATCH (&HalDispatchTable)
1053 #define HAL_DISPATCH_VERSION 3
1054 #define HalDispatchTableVersion HALDISPATCH->Version
1055 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
1056 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
1057 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
1058 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
1059 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
1060 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
1061 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
1062 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
1063 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
1064 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
1065 #define HalStartMirroring HALDISPATCH->HalStartMirroring
1066 #define HalEndMirroring HALDISPATCH->HalEndMirroring
1067 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
1068 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
1069 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
1071 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1072 ULONG AlignmentRequirement
;
1073 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1075 typedef struct _FILE_NAME_INFORMATION
{
1076 ULONG FileNameLength
;
1078 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1081 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1082 ULONG FileAttributes
;
1084 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1086 typedef struct _FILE_DISPOSITION_INFORMATION
{
1088 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1090 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1091 LARGE_INTEGER EndOfFile
;
1092 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1094 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1095 LARGE_INTEGER ValidDataLength
;
1096 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1098 typedef union _FILE_SEGMENT_ELEMENT
{
1100 ULONGLONG Alignment
;
1101 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1103 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
1105 typedef struct _KEY_USER_FLAGS_INFORMATION
{
1107 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
1109 #define PCI_ADDRESS_MEMORY_SPACE 0x00000000
1111 typedef struct _OSVERSIONINFOA
{
1112 ULONG dwOSVersionInfoSize
;
1113 ULONG dwMajorVersion
;
1114 ULONG dwMinorVersion
;
1115 ULONG dwBuildNumber
;
1117 CHAR szCSDVersion
[128];
1118 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
1120 typedef struct _OSVERSIONINFOW
{
1121 ULONG dwOSVersionInfoSize
;
1122 ULONG dwMajorVersion
;
1123 ULONG dwMinorVersion
;
1124 ULONG dwBuildNumber
;
1126 WCHAR szCSDVersion
[128];
1127 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
1130 typedef OSVERSIONINFOW OSVERSIONINFO
;
1131 typedef POSVERSIONINFOW POSVERSIONINFO
;
1132 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
1134 typedef OSVERSIONINFOA OSVERSIONINFO
;
1135 typedef POSVERSIONINFOA POSVERSIONINFO
;
1136 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
1139 typedef struct _OSVERSIONINFOEXA
{
1140 ULONG dwOSVersionInfoSize
;
1141 ULONG dwMajorVersion
;
1142 ULONG dwMinorVersion
;
1143 ULONG dwBuildNumber
;
1145 CHAR szCSDVersion
[128];
1146 USHORT wServicePackMajor
;
1147 USHORT wServicePackMinor
;
1151 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
1153 typedef struct _OSVERSIONINFOEXW
{
1154 ULONG dwOSVersionInfoSize
;
1155 ULONG dwMajorVersion
;
1156 ULONG dwMinorVersion
;
1157 ULONG dwBuildNumber
;
1159 WCHAR szCSDVersion
[128];
1160 USHORT wServicePackMajor
;
1161 USHORT wServicePackMinor
;
1165 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
1168 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
1169 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
1170 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
1172 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
1173 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
1174 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
1180 VerSetConditionMask(
1181 IN ULONGLONG ConditionMask
,
1183 IN UCHAR Condition
);
1185 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
1186 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
1187 (TypeBitMask), (ComparisonType)))
1189 /* RtlVerifyVersionInfo() TypeMask */
1191 #define VER_MINORVERSION 0x0000001
1192 #define VER_MAJORVERSION 0x0000002
1193 #define VER_BUILDNUMBER 0x0000004
1194 #define VER_PLATFORMID 0x0000008
1195 #define VER_SERVICEPACKMINOR 0x0000010
1196 #define VER_SERVICEPACKMAJOR 0x0000020
1197 #define VER_SUITENAME 0x0000040
1198 #define VER_PRODUCT_TYPE 0x0000080
1200 /* RtlVerifyVersionInfo() ComparisonType */
1203 #define VER_GREATER 2
1204 #define VER_GREATER_EQUAL 3
1206 #define VER_LESS_EQUAL 5
1210 #define VER_CONDITION_MASK 7
1211 #define VER_NUM_BITS_PER_CONDITION_MASK 3
1216 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
) (
1218 struct _RTL_RANGE
*Range
1221 typedef struct _CONFIGURATION_INFORMATION
{
1226 ULONG ScsiPortCount
;
1228 ULONG ParallelCount
;
1229 BOOLEAN AtDiskPrimaryAddressClaimed
;
1230 BOOLEAN AtDiskSecondaryAddressClaimed
;
1232 ULONG MediumChangerCount
;
1233 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
1235 typedef enum _CONFIGURATION_TYPE
{
1238 FloatingPointProcessor
,
1248 MultiFunctionAdapter
,
1262 FloppyDiskPeripheral
,
1275 RealModeIrqRoutingTable
,
1276 RealModePCIEnumeration
,
1278 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
1281 (DDKAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
1283 IN PUNICODE_STRING PathName
,
1284 IN INTERFACE_TYPE BusType
,
1286 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
1287 IN CONFIGURATION_TYPE ControllerType
,
1288 IN ULONG ControllerNumber
,
1289 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
1290 IN CONFIGURATION_TYPE PeripheralType
,
1291 IN ULONG PeripheralNumber
,
1292 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
1294 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
1295 IoQueryDeviceIdentifier
= 0,
1296 IoQueryDeviceConfigurationData
,
1297 IoQueryDeviceComponentInformation
,
1298 IoQueryDeviceMaxData
1299 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
1302 (DDKAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
1304 IN HANDLE ProcessId
,
1308 (DDKAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
1309 IN HANDLE ProcessId
,
1313 typedef struct _IMAGE_INFO
{
1314 _ANONYMOUS_UNION
union {
1316 _ANONYMOUS_STRUCT
struct {
1317 ULONG ImageAddressingMode
: 8;
1318 ULONG SystemModeImage
: 1;
1319 ULONG ImageMappedToAllPids
: 1;
1320 ULONG Reserved
: 22;
1324 ULONG ImageSelector
;
1326 ULONG ImageSectionNumber
;
1327 } IMAGE_INFO
, *PIMAGE_INFO
;
1329 #define IMAGE_ADDRESSING_MODE_32BIT 3
1332 (DDKAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
1333 IN PUNICODE_STRING FullImageName
,
1334 IN HANDLE ProcessId
,
1335 IN PIMAGE_INFO ImageInfo
);
1337 #pragma pack(push,4)
1338 typedef enum _BUS_DATA_TYPE
{
1339 ConfigurationSpaceUndefined
= -1,
1347 PCMCIAConfiguration
,
1350 PNPISAConfiguration
,
1351 SgiInternalConfiguration
,
1353 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
1356 typedef struct _NT_TIB
{
1357 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
1361 _ANONYMOUS_UNION
union {
1365 PVOID ArbitraryUserPointer
;
1366 struct _NT_TIB
*Self
;
1369 typedef struct _NT_TIB32
{
1370 ULONG ExceptionList
;
1374 __GNU_EXTENSION
union {
1378 ULONG ArbitraryUserPointer
;
1380 } NT_TIB32
,*PNT_TIB32
;
1382 typedef struct _NT_TIB64
{
1383 ULONG64 ExceptionList
;
1386 ULONG64 SubSystemTib
;
1387 __GNU_EXTENSION
union {
1391 ULONG64 ArbitraryUserPointer
;
1393 } NT_TIB64
,*PNT_TIB64
;
1395 typedef enum _PROCESSINFOCLASS
{
1396 ProcessBasicInformation
,
1401 ProcessBasePriority
,
1402 ProcessRaisePriority
,
1404 ProcessExceptionPort
,
1406 ProcessLdtInformation
,
1408 ProcessDefaultHardErrorMode
,
1409 ProcessIoPortHandlers
,
1410 ProcessPooledUsageAndLimits
,
1411 ProcessWorkingSetWatch
,
1412 ProcessUserModeIOPL
,
1413 ProcessEnableAlignmentFaultFixup
,
1414 ProcessPriorityClass
,
1415 ProcessWx86Information
,
1417 ProcessAffinityMask
,
1418 ProcessPriorityBoost
,
1420 ProcessSessionInformation
,
1421 ProcessForegroundInformation
,
1422 ProcessWow64Information
,
1423 ProcessImageFileName
,
1424 ProcessLUIDDeviceMapsEnabled
,
1425 ProcessBreakOnTermination
,
1426 ProcessDebugObjectHandle
,
1428 ProcessHandleTracing
,
1430 ProcessExecuteFlags
,
1431 ProcessTlsInformation
,
1433 ProcessImageInformation
,
1435 ProcessPagePriority
,
1436 ProcessInstrumentationCallback
,
1440 typedef enum _THREADINFOCLASS
{
1441 ThreadBasicInformation
,
1446 ThreadImpersonationToken
,
1447 ThreadDescriptorTableEntry
,
1448 ThreadEnableAlignmentFaultFixup
,
1449 ThreadEventPair_Reusable
,
1450 ThreadQuerySetWin32StartAddress
,
1452 ThreadPerformanceCount
,
1453 ThreadAmILastThread
,
1454 ThreadIdealProcessor
,
1455 ThreadPriorityBoost
,
1456 ThreadSetTlsArrayAddress
,
1458 ThreadHideFromDebugger
,
1459 ThreadBreakOnTermination
,
1460 ThreadSwitchLegacyState
,
1462 ThreadLastSystemCall
,
1466 ThreadActualBasePriority
,
1470 typedef struct _PROCESS_BASIC_INFORMATION
1472 NTSTATUS ExitStatus
;
1473 struct _PEB
*PebBaseAddress
;
1474 ULONG_PTR AffinityMask
;
1475 KPRIORITY BasePriority
;
1476 ULONG_PTR UniqueProcessId
;
1477 ULONG_PTR InheritedFromUniqueProcessId
;
1478 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
1480 typedef struct _PROCESS_WS_WATCH_INFORMATION
1484 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
1486 typedef struct _PROCESS_DEVICEMAP_INFORMATION
1488 __GNU_EXTENSION
union
1492 HANDLE DirectoryHandle
;
1497 UCHAR DriveType
[32];
1500 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
1502 typedef struct _KERNEL_USER_TIMES
1504 LARGE_INTEGER CreateTime
;
1505 LARGE_INTEGER ExitTime
;
1506 LARGE_INTEGER KernelTime
;
1507 LARGE_INTEGER UserTime
;
1508 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1510 typedef struct _PROCESS_ACCESS_TOKEN
1514 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1516 typedef struct _PROCESS_SESSION_INFORMATION
1519 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1522 ** Storage structures
1524 typedef enum _PARTITION_STYLE
{
1525 PARTITION_STYLE_MBR
,
1526 PARTITION_STYLE_GPT
,
1530 typedef struct _CREATE_DISK_MBR
{
1532 } CREATE_DISK_MBR
, *PCREATE_DISK_MBR
;
1534 typedef struct _CREATE_DISK_GPT
{
1536 ULONG MaxPartitionCount
;
1537 } CREATE_DISK_GPT
, *PCREATE_DISK_GPT
;
1539 typedef struct _CREATE_DISK
{
1540 PARTITION_STYLE PartitionStyle
;
1541 _ANONYMOUS_UNION
union {
1542 CREATE_DISK_MBR Mbr
;
1543 CREATE_DISK_GPT Gpt
;
1545 } CREATE_DISK
, *PCREATE_DISK
;
1547 typedef struct _DISK_SIGNATURE
{
1548 ULONG PartitionStyle
;
1549 _ANONYMOUS_UNION
union {
1558 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
1561 (FASTCALL
*PTIME_UPDATE_NOTIFY_ROUTINE
)(
1563 IN KPROCESSOR_MODE Mode
);
1565 typedef struct _PHYSICAL_MEMORY_RANGE
{
1566 PHYSICAL_ADDRESS BaseAddress
;
1567 LARGE_INTEGER NumberOfBytes
;
1568 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
1571 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
1574 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
1575 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
1576 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
1577 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
1579 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1580 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1581 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1582 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1583 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1586 (DDKAPI
*PTIMER_APC_ROUTINE
)(
1587 IN PVOID TimerContext
,
1588 IN ULONG TimerLowValue
,
1589 IN LONG TimerHighValue
);
1592 ** Architecture specific structures
1594 #define PCR_MINOR_VERSION 1
1595 #define PCR_MAJOR_VERSION 1
1599 #define SIZE_OF_80387_REGISTERS 80
1600 #define CONTEXT_i386 0x10000
1601 #define CONTEXT_i486 0x10000
1602 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
1603 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
1604 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
1605 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
1606 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
1607 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
1608 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
1610 typedef struct _FLOATING_SAVE_AREA
{
1615 ULONG ErrorSelector
;
1618 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
1620 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
1622 typedef struct _CONTEXT
{
1630 FLOATING_SAVE_AREA FloatSave
;
1647 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
1650 typedef struct _KPCR_TIB
{
1651 PVOID ExceptionList
; /* 00 */
1652 PVOID StackBase
; /* 04 */
1653 PVOID StackLimit
; /* 08 */
1654 PVOID SubSystemTib
; /* 0C */
1655 _ANONYMOUS_UNION
union {
1656 PVOID FiberData
; /* 10 */
1657 ULONG Version
; /* 10 */
1659 PVOID ArbitraryUserPointer
; /* 14 */
1660 struct _KPCR_TIB
*Self
; /* 18 */
1661 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
1663 typedef struct _KPCR
{
1664 KPCR_TIB Tib
; /* 00 */
1665 struct _KPCR
*Self
; /* 1C */
1666 struct _KPRCB
*Prcb
; /* 20 */
1667 KIRQL Irql
; /* 24 */
1669 ULONG IrrActive
; /* 2C */
1671 PVOID KdVersionBlock
; /* 34 */
1672 PUSHORT IDT
; /* 38 */
1673 PUSHORT GDT
; /* 3C */
1674 struct _KTSS
*TSS
; /* 40 */
1675 USHORT MajorVersion
; /* 44 */
1676 USHORT MinorVersion
; /* 46 */
1677 KAFFINITY SetMember
; /* 48 */
1678 ULONG StallScaleFactor
; /* 4C */
1679 UCHAR SpareUnused
; /* 50 */
1680 UCHAR Number
; /* 51 */
1682 UCHAR SecondLevelCacheAssociativity
;
1684 ULONG KernelReserved
[14]; // For use by the kernel
1685 ULONG SecondLevelCacheSize
;
1686 ULONG HalReserved
[16]; // For use by Hal
1687 } KPCR
, *PKPCR
; /* 54 */
1689 #define KeGetPcr() PCR
1693 KeGetCurrentProcessorNumber(VOID
)
1695 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
1698 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1699 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1700 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
1702 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1703 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1704 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1705 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1706 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
1708 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
1709 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
1711 #elif defined(__x86_64__)
1713 #define CONTEXT_AMD64 0x100000
1714 #if !defined(RC_INVOKED)
1715 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
1716 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
1717 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
1718 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
1719 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
1721 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1722 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1724 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1725 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1726 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1727 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1730 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
1780 /* Floating point */
1782 XMM_SAVE_AREA32 FltSave
;
1806 M128A VectorRegister
[26];
1807 ULONG64 VectorControl
;
1810 ULONG64 DebugControl
;
1811 ULONG64 LastBranchToRip
;
1812 ULONG64 LastBranchFromRip
;
1813 ULONG64 LastExceptionToRip
;
1814 ULONG64 LastExceptionFromRip
;
1817 #define PAGE_SIZE 0x1000
1818 #define PAGE_SHIFT 12L
1819 #define PTI_SHIFT 12L
1820 #define PDI_SHIFT 21L
1821 #define PPI_SHIFT 30L
1822 #define PXI_SHIFT 39L
1823 #define PTE_PER_PAGE 512
1824 #define PDE_PER_PAGE 512
1825 #define PPE_PER_PAGE 512
1826 #define PXE_PER_PAGE 512
1827 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
1828 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
1829 #define PPI_MASK (PPE_PER_PAGE - 1)
1830 #define PXI_MASK (PXE_PER_PAGE - 1)
1832 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
1833 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
1834 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
1835 #define PDE_BASE 0xFFFFF6FB40000000ULL
1836 #define PTE_BASE 0xFFFFF68000000000ULL
1837 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
1838 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
1839 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
1840 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
1842 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1843 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1844 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
1846 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1847 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1848 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1849 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1850 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
1851 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
1853 #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
1854 #define SharedInterruptTime (&SharedUserData->InterruptTime)
1855 #define SharedSystemTime (&SharedUserData->SystemTime)
1856 #define SharedTickCount (&SharedUserData->TickCount)
1858 #define KeQueryInterruptTime() \
1859 (*(volatile ULONG64*)SharedInterruptTime)
1860 #define KeQuerySystemTime(CurrentCount) \
1861 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
1862 #define KeQueryTickCount(CurrentCount) \
1863 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
1865 typedef struct _KPCR
1867 __GNU_EXTENSION
union
1870 __GNU_EXTENSION
struct
1872 union _KGDTENTRY64
*GdtBase
;
1873 struct _KTSS64
*TssBase
;
1876 struct _KPRCB
*CurrentPrcb
;
1877 PKSPIN_LOCK_QUEUE LockArray
;
1881 union _KIDTENTRY64
*IdtBase
;
1884 UCHAR SecondLevelCacheAssociativity
;
1885 UCHAR ObsoleteNumber
;
1888 USHORT MajorVersion
;
1889 USHORT MinorVersion
;
1890 ULONG StallScaleFactor
;
1892 ULONG KernelReserved
[15];
1893 ULONG SecondLevelCacheSize
;
1894 ULONG HalReserved
[16];
1896 PVOID KdVersionBlock
;
1898 ULONG PcrAlign1
[24];
1901 typedef struct _KFLOATING_SAVE
{
1903 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
1909 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
1914 KeGetCurrentProcessorNumber(VOID
)
1916 return (ULONG
)__readgsword(0x184);
1919 #elif defined(__PowerPC__)
1922 // Used to contain PFNs and PFN counts
1924 typedef ULONG PFN_COUNT
;
1925 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
1926 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
1928 #define PASSIVE_LEVEL 0
1931 #define DISPATCH_LEVEL 2
1932 #define PROFILE_LEVEL 27
1933 #define CLOCK1_LEVEL 28
1934 #define CLOCK2_LEVEL 28
1935 #define IPI_LEVEL 29
1936 #define POWER_LEVEL 30
1937 #define HIGH_LEVEL 31
1939 typedef struct _KFLOATING_SAVE
{
1941 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
1943 typedef struct _KPCR_TIB
{
1944 PVOID ExceptionList
; /* 00 */
1945 PVOID StackBase
; /* 04 */
1946 PVOID StackLimit
; /* 08 */
1947 PVOID SubSystemTib
; /* 0C */
1948 _ANONYMOUS_UNION
union {
1949 PVOID FiberData
; /* 10 */
1950 ULONG Version
; /* 10 */
1952 PVOID ArbitraryUserPointer
; /* 14 */
1953 struct _KPCR_TIB
*Self
; /* 18 */
1954 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
1956 #define PCR_MINOR_VERSION 1
1957 #define PCR_MAJOR_VERSION 1
1959 typedef struct _KPCR
{
1960 KPCR_TIB Tib
; /* 00 */
1961 struct _KPCR
*Self
; /* 1C */
1962 struct _KPRCB
*Prcb
; /* 20 */
1963 KIRQL Irql
; /* 24 */
1965 ULONG IrrActive
; /* 2C */
1967 PVOID KdVersionBlock
; /* 34 */
1968 PUSHORT IDT
; /* 38 */
1969 PUSHORT GDT
; /* 3C */
1970 struct _KTSS
*TSS
; /* 40 */
1971 USHORT MajorVersion
; /* 44 */
1972 USHORT MinorVersion
; /* 46 */
1973 KAFFINITY SetMember
; /* 48 */
1974 ULONG StallScaleFactor
; /* 4C */
1975 UCHAR SpareUnused
; /* 50 */
1976 UCHAR Number
; /* 51 */
1977 } KPCR
, *PKPCR
; /* 54 */
1979 #define KeGetPcr() PCR
1984 KeGetCurrentProcessorNumber(VOID
)
1987 __asm__
__volatile__ (
1990 : "i" (FIELD_OFFSET(KPCR
, Number
))
1995 #elif defined(_MIPS_)
1997 #error MIPS Headers are totally incorrect
2000 // Used to contain PFNs and PFN counts
2002 typedef ULONG PFN_COUNT
;
2003 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
2004 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
2006 #define PASSIVE_LEVEL 0
2008 #define DISPATCH_LEVEL 2
2009 #define PROFILE_LEVEL 27
2010 #define IPI_LEVEL 29
2011 #define HIGH_LEVEL 31
2013 typedef struct _KPCR
{
2014 struct _KPRCB
*Prcb
; /* 20 */
2015 KIRQL Irql
; /* 24 */
2020 #define KeGetPcr() PCR
2022 typedef struct _KFLOATING_SAVE
{
2023 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
2028 KeGetCurrentProcessorNumber(VOID
)
2033 #elif defined(_M_ARM)
2036 // NT-ARM is not documented, need DDK-ARM
2041 #error Unknown architecture
2044 typedef enum _INTERLOCKED_RESULT
{
2045 ResultNegative
= RESULT_NEGATIVE
,
2046 ResultZero
= RESULT_ZERO
,
2047 ResultPositive
= RESULT_POSITIVE
2048 } INTERLOCKED_RESULT
;
2051 (NTAPI
*PciPin2Line
)(
2052 IN
struct _BUS_HANDLER
*BusHandler
,
2053 IN
struct _BUS_HANDLER
*RootHandler
,
2054 IN PCI_SLOT_NUMBER SlotNumber
,
2055 IN PPCI_COMMON_CONFIG PciData
2059 (NTAPI
*PciLine2Pin
)(
2060 IN
struct _BUS_HANDLER
*BusHandler
,
2061 IN
struct _BUS_HANDLER
*RootHandler
,
2062 IN PCI_SLOT_NUMBER SlotNumber
,
2063 IN PPCI_COMMON_CONFIG PciNewData
,
2064 IN PPCI_COMMON_CONFIG PciOldData
2068 (NTAPI
*PciReadWriteConfig
)(
2069 IN
struct _BUS_HANDLER
*BusHandler
,
2070 IN PCI_SLOT_NUMBER Slot
,
2076 #define PCI_DATA_TAG ' ICP'
2077 #define PCI_DATA_VERSION 1
2079 typedef struct _PCIBUSDATA
2083 PciReadWriteConfig ReadConfig
;
2084 PciReadWriteConfig WriteConfig
;
2085 PciPin2Line Pin2Line
;
2086 PciLine2Pin Line2Pin
;
2087 PCI_SLOT_NUMBER ParentSlot
;
2089 } PCIBUSDATA
, *PPCIBUSDATA
;
2092 /** SPINLOCK FUNCTIONS ********************************************************/
2096 #if defined(WIN9X_COMPAT_SPINLOCK)
2101 KeInitializeSpinLock(
2102 IN PKSPIN_LOCK SpinLock
2109 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
2111 /* Clear the lock */
2121 IN PKSPIN_LOCK SpinLock
);
2127 IN PKSPIN_LOCK SpinLock
,
2133 KefAcquireSpinLockAtDpcLevel(
2134 IN PKSPIN_LOCK SpinLock
);
2139 KefReleaseSpinLockFromDpcLevel(
2140 IN PKSPIN_LOCK SpinLock
);
2142 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
2143 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
2144 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
2145 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
2147 #define KeGetDcacheFillSize() 1L
2149 #elif defined(_M_ARM) // !defined (_X86_)
2153 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
2155 /* Clear the lock */
2163 IN PKSPIN_LOCK SpinLock
);
2169 IN PKSPIN_LOCK SpinLock
,
2176 KefAcquireSpinLockAtDpcLevel(
2177 IN PKSPIN_LOCK SpinLock
);
2182 KefReleaseSpinLockFromDpcLevel(
2183 IN PKSPIN_LOCK SpinLock
);
2186 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
2187 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
2188 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
2189 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
2194 KeInitializeSpinLock(
2195 IN PKSPIN_LOCK SpinLock
);
2202 KeInitializeSpinLock(
2203 PKSPIN_LOCK SpinLock
)
2211 IN PKSPIN_LOCK SpinLock
,
2216 KeAcquireSpinLockAtDpcLevel(
2217 IN PKSPIN_LOCK SpinLock
);
2221 KeReleaseSpinLockFromDpcLevel(
2222 IN PKSPIN_LOCK SpinLock
);
2226 KeAcquireSpinLockRaiseToDpc(
2227 IN PKSPIN_LOCK SpinLock
);
2229 #define KeAcquireSpinLock(SpinLock, OldIrql) \
2230 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
2232 #endif // !defined (_X86_)
2234 #define ARGUMENT_PRESENT(ArgumentPointer) \
2235 ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL)
2242 IN ULONG Base OPTIONAL
,
2243 IN OUT PULONG Value
);
2251 BOOLEAN CaseInSensitive
);
2253 #if !defined(MIDL_PASS)
2258 RtlConvertLongToLuid(
2264 Temp
.QuadPart
= Val
;
2265 Luid
.LowPart
= Temp
.u
.LowPart
;
2266 Luid
.HighPart
= Temp
.u
.HighPart
;
2274 RtlConvertUlongToLuid(
2291 IN VOID UNALIGNED
*Destination
,
2292 IN CONST VOID UNALIGNED
*Source
,
2299 IN OUT PSTRING DestinationString
,
2300 IN PSTRING SourceString OPTIONAL
);
2308 IN BOOLEAN CaseInSensitive
);
2310 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
2311 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
2312 *CallersAddress = (PVOID)_ReturnAddress(); \
2313 *CallersCaller = NULL;
2318 RtlGetCallersAddress(
2319 OUT PVOID
*CallersAddress
,
2320 OUT PVOID
*CallersCaller
);
2327 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
2333 IN OUT PACCESS_MASK AccessMask
,
2334 IN PGENERIC_MAPPING GenericMapping
);
2339 RtlPrefixUnicodeString(
2340 IN PCUNICODE_STRING String1
,
2341 IN PCUNICODE_STRING String2
,
2342 IN BOOLEAN CaseInSensitive
);
2347 RtlUpcaseUnicodeString(
2348 IN OUT PUNICODE_STRING DestinationString OPTIONAL
,
2349 IN PCUNICODE_STRING SourceString
,
2350 IN BOOLEAN AllocateDestinationString
);
2362 IN OUT PSTRING DestinationString
,
2363 IN PSTRING SourceString
);
2368 RtlVerifyVersionInfo(
2369 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
2371 IN ULONGLONG ConditionMask
);
2376 RtlVolumeDeviceToDosName(
2377 IN PVOID VolumeDeviceObject
,
2378 OUT PUNICODE_STRING DosName
);
2388 /******************************************************************************
2390 ******************************************************************************/
2392 typedef struct _ZONE_SEGMENT_HEADER
{
2393 SINGLE_LIST_ENTRY SegmentList
;
2395 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
2397 typedef struct _ZONE_HEADER
{
2398 SINGLE_LIST_ENTRY FreeList
;
2399 SINGLE_LIST_ENTRY SegmentList
;
2401 ULONG TotalSegmentSize
;
2402 } ZONE_HEADER
, *PZONE_HEADER
;
2404 #define PROTECTED_POOL 0x80000000
2406 /******************************************************************************
2407 * Executive Functions *
2408 ******************************************************************************/
2414 IN PZONE_HEADER Zone
,
2416 IN ULONG SegmentSize
);
2418 static __inline PVOID
2420 IN PZONE_HEADER Zone
)
2422 if (Zone
->FreeList
.Next
)
2423 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
2424 return (PVOID
) Zone
->FreeList
.Next
;
2427 static __inline PVOID
2429 IN PZONE_HEADER Zone
,
2432 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
2433 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
2434 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
2441 IN PZONE_HEADER Zone
,
2443 IN PVOID InitialSegment
,
2444 IN ULONG InitialSegmentSize
);
2448 * ExInterlockedAllocateFromZone(
2449 * IN PZONE_HEADER Zone,
2450 * IN PKSPIN_LOCK Lock)
2452 #define ExInterlockedAllocateFromZone(Zone, Lock) \
2453 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
2458 ExInterlockedExtendZone(
2459 IN PZONE_HEADER Zone
,
2461 IN ULONG SegmentSize
,
2462 IN PKSPIN_LOCK Lock
);
2465 * ExInterlockedFreeToZone(
2466 * IN PZONE_HEADER Zone,
2468 * IN PKSPIN_LOCK Lock);
2470 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
2471 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
2476 * IN PZONE_HEADER Zone)
2478 #define ExIsFullZone(Zone) \
2479 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
2482 * ExIsObjectInFirstZoneSegment(
2483 * IN PZONE_HEADER Zone,
2486 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
2487 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
2488 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
2489 (Zone)->TotalSegmentSize)) )
2495 ExRaiseAccessViolation(
2502 ExRaiseDatatypeMisalignment(
2511 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
2512 #define ExAcquireResourceShared ExAcquireResourceSharedLite
2513 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
2514 #define ExDeleteResource ExDeleteResourceLite
2515 #define ExInitializeResource ExInitializeResourceLite
2516 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
2517 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
2518 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
2519 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
2521 /** Filesystem runtime library routines **/
2526 FsRtlIsTotalDeviceFailure(
2527 IN NTSTATUS Status
);
2529 /** Hardware abstraction layer routines **/
2535 IN ULONG Frequency
);
2541 IN PDEVICE_OBJECT DeviceObject
,
2542 IN ULONG SectorSize
,
2543 IN ULONG MBRTypeIdentifier
,
2549 PADAPTER_OBJECT AdapterObject
2552 /** I/O manager routines **/
2554 #ifndef DMA_MACROS_DEFINED
2558 IoAllocateAdapterChannel(
2559 IN PADAPTER_OBJECT AdapterObject
,
2560 IN PDEVICE_OBJECT DeviceObject
,
2561 IN ULONG NumberOfMapRegisters
,
2562 IN PDRIVER_CONTROL ExecutionRoutine
,
2569 IoAllocateController(
2570 IN PCONTROLLER_OBJECT ControllerObject
,
2571 IN PDEVICE_OBJECT DeviceObject
,
2572 IN PDRIVER_CONTROL ExecutionRoutine
,
2576 * VOID IoAssignArcName(
2577 * IN PUNICODE_STRING ArcName,
2578 * IN PUNICODE_STRING DeviceName);
2580 #define IoAssignArcName(_ArcName, _DeviceName) ( \
2581 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
2587 IN PDEVICE_OBJECT DeviceObject
,
2588 IN PFILE_OBJECT FileObject
);
2600 IN PDEVICE_OBJECT DeviceObject
,
2601 IN PCREATE_DISK Disk
);
2607 IN PCONTROLLER_OBJECT ControllerObject
);
2611 * IoDeassignArcName(
2612 * IN PUNICODE_STRING ArcName)
2614 #define IoDeassignArcName IoDeleteSymbolicLink
2620 IN PCONTROLLER_OBJECT ControllerObject
);
2623 PCONFIGURATION_INFORMATION
2625 IoGetConfigurationInformation(
2631 IoGetDeviceToVerify(
2632 IN PETHREAD Thread
);
2637 IoGetFileObjectGenericMapping(
2643 IoMakeAssociatedIrp(
2645 IN CCHAR StackSize
);
2650 IoQueryDeviceDescription(
2651 IN PINTERFACE_TYPE BusType OPTIONAL
,
2652 IN PULONG BusNumber OPTIONAL
,
2653 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
2654 IN PULONG ControllerNumber OPTIONAL
,
2655 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
2656 IN PULONG PeripheralNumber OPTIONAL
,
2657 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
2665 IN PVPB Vpb OPTIONAL
,
2666 IN PDEVICE_OBJECT RealDeviceObject
);
2671 IoRaiseInformationalHardError(
2672 IN NTSTATUS ErrorStatus
,
2673 IN PUNICODE_STRING String OPTIONAL
,
2674 IN PKTHREAD Thread OPTIONAL
);
2679 IoReadDiskSignature(
2680 IN PDEVICE_OBJECT DeviceObject
,
2681 IN ULONG BytesPerSector
,
2682 OUT PDISK_SIGNATURE Signature
);
2687 IoReadPartitionTable(
2688 IN PDEVICE_OBJECT DeviceObject
,
2689 IN ULONG SectorSize
,
2690 IN BOOLEAN ReturnRecognizedPartitions
,
2691 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2696 IoReadPartitionTableEx(
2697 IN PDEVICE_OBJECT DeviceObject
,
2698 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
2703 IoRegisterBootDriverReinitialization(
2704 IN PDRIVER_OBJECT DriverObject
,
2705 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2711 IoRegisterBootDriverReinitialization(
2712 IN PDRIVER_OBJECT DriverObject
,
2713 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2719 IoRegisterDriverReinitialization(
2720 IN PDRIVER_OBJECT DriverObject
,
2721 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2727 IoReportDetectedDevice(
2728 IN PDRIVER_OBJECT DriverObject
,
2729 IN INTERFACE_TYPE LegacyBusType
,
2731 IN ULONG SlotNumber
,
2732 IN PCM_RESOURCE_LIST ResourceList
,
2733 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
2734 IN BOOLEAN ResourceAssigned
,
2735 IN OUT PDEVICE_OBJECT
*DeviceObject
);
2740 IoReportResourceForDetection(
2741 IN PDRIVER_OBJECT DriverObject
,
2742 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2743 IN ULONG DriverListSize OPTIONAL
,
2744 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2745 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2746 IN ULONG DeviceListSize OPTIONAL
,
2747 OUT PBOOLEAN ConflictDetected
);
2752 IoReportResourceUsage(
2753 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2754 IN PDRIVER_OBJECT DriverObject
,
2755 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2756 IN ULONG DriverListSize OPTIONAL
,
2757 IN PDEVICE_OBJECT DeviceObject
,
2758 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2759 IN ULONG DeviceListSize OPTIONAL
,
2760 IN BOOLEAN OverrideConflict
,
2761 OUT PBOOLEAN ConflictDetected
);
2766 IoSetHardErrorOrVerifyDevice(
2768 IN PDEVICE_OBJECT DeviceObject
);
2773 IoSetPartitionInformation(
2774 IN PDEVICE_OBJECT DeviceObject
,
2775 IN ULONG SectorSize
,
2776 IN ULONG PartitionNumber
,
2777 IN ULONG PartitionType
);
2782 IoSetPartitionInformationEx(
2783 IN PDEVICE_OBJECT DeviceObject
,
2784 IN ULONG PartitionNumber
,
2785 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
2790 IoSetSystemPartition(
2791 IN PUNICODE_STRING VolumeNameString
);
2796 IoSetThreadHardErrorMode(
2797 IN BOOLEAN EnableHardErrors
);
2802 IoVerifyPartitionTable(
2803 IN PDEVICE_OBJECT DeviceObject
,
2804 IN BOOLEAN FixErrors
);
2809 IoVolumeDeviceToDosName(
2810 IN PVOID VolumeDeviceObject
,
2811 OUT PUNICODE_STRING DosName
);
2816 IoWritePartitionTable(
2817 IN PDEVICE_OBJECT DeviceObject
,
2818 IN ULONG SectorSize
,
2819 IN ULONG SectorsPerTrack
,
2820 IN ULONG NumberOfHeads
,
2821 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2826 IoWritePartitionTableEx(
2827 IN PDEVICE_OBJECT DeviceObject
,
2828 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*PartitionBuffer
);
2830 /** Kernel routines **/
2837 IN ULONG BugCheckCode
);
2846 volatile LONG Barrier
;
2847 #if defined(__GNUC__)
2848 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
2849 #elif defined(_MSC_VER)
2850 __asm xchg
[Barrier
], eax
2861 IN KPRIORITY Increment
,
2867 KeQueryActiveProcessors(
2874 KeQueryPerformanceCounter(
2875 OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL
);
2880 KeQueryPriorityThread(
2881 IN PRKTHREAD Thread
);
2886 KeQueryRuntimeThread(
2888 OUT PULONG UserTime
);
2890 #if !defined(_M_AMD64)
2894 KeQueryInterruptTime(
2901 OUT PLARGE_INTEGER CurrentTime
);
2907 OUT PLARGE_INTEGER TickCount
);
2913 KeQueryTimeIncrement(
2932 KeReadStateSemaphore(
2933 IN PRKSEMAPHORE Semaphore
);
2944 KeRegisterBugCheckCallback(
2945 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
2946 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
2949 IN PUCHAR Component
);
2954 KeRegisterNmiCallback(
2955 IN PNMI_CALLBACK CallbackRoutine
,
2962 KeDeregisterNmiCallback(
2969 KeReleaseInStackQueuedSpinLockFromDpcLevel(
2970 IN PKLOCK_QUEUE_HANDLE LockHandle
);
2975 KeReleaseInterruptSpinLock(
2976 IN PKINTERRUPT Interrupt
,
2990 IN PRKSEMAPHORE Semaphore
,
2991 IN KPRIORITY Increment
,
2996 PKDEVICE_QUEUE_ENTRY
2998 KeRemoveByKeyDeviceQueue(
2999 IN PKDEVICE_QUEUE DeviceQueue
,
3003 PKDEVICE_QUEUE_ENTRY
3005 KeRemoveDeviceQueue(
3006 IN PKDEVICE_QUEUE DeviceQueue
);
3011 KeRemoveEntryDeviceQueue(
3012 IN PKDEVICE_QUEUE DeviceQueue
,
3013 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
3030 KeRestoreFloatingPointState(
3031 IN PKFLOATING_SAVE FloatSave
);
3036 KeRevertToUserAffinityThread(VOID
);
3041 KeSaveFloatingPointState(
3042 OUT PKFLOATING_SAVE FloatSave
);
3047 KeSetBasePriorityThread(
3048 IN PRKTHREAD Thread
,
3056 IN KPRIORITY Increment
,
3064 IN KDPC_IMPORTANCE Importance
);
3069 KeSetPriorityThread(
3071 IN KPRIORITY Priority
);
3076 KeSetSystemAffinityThread(
3077 IN KAFFINITY Affinity
);
3082 KeSetTargetProcessorDpc(
3091 IN LARGE_INTEGER DueTime
,
3092 IN PKDPC Dpc OPTIONAL
);
3099 IN LARGE_INTEGER DueTime
,
3100 IN LONG Period OPTIONAL
,
3101 IN PKDPC Dpc OPTIONAL
);
3106 KeSetTimeUpdateNotifyRoutine(
3107 IN PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine
);
3112 KeStallExecutionProcessor(
3113 IN ULONG MicroSeconds
);
3118 KeSynchronizeExecution(
3119 IN PKINTERRUPT Interrupt
,
3120 IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
3121 IN PVOID SynchronizeContext
);
3126 KeWaitForMultipleObjects(
3129 IN WAIT_TYPE WaitType
,
3130 IN KWAIT_REASON WaitReason
,
3131 IN KPROCESSOR_MODE WaitMode
,
3132 IN BOOLEAN Alertable
,
3133 IN PLARGE_INTEGER Timeout OPTIONAL
,
3134 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL
);
3139 KeWaitForMutexObject(
3141 IN KWAIT_REASON WaitReason
,
3142 IN KPROCESSOR_MODE WaitMode
,
3143 IN BOOLEAN Alertable
,
3144 IN PLARGE_INTEGER Timeout OPTIONAL
);
3149 KeWaitForSingleObject(
3151 IN KWAIT_REASON WaitReason
,
3152 IN KPROCESSOR_MODE WaitMode
,
3153 IN BOOLEAN Alertable
,
3154 IN PLARGE_INTEGER Timeout OPTIONAL
);
3158 (NTAPI
*PKIPI_BROADCAST_WORKER
)(
3159 IN ULONG_PTR Argument
3166 IN PKIPI_BROADCAST_WORKER BroadcastFunction
,
3167 IN ULONG_PTR Context
3187 KeRaiseIrqlToDpcLevel(
3193 KeRaiseIrqlToSynchLevel(
3196 #define KeLowerIrql(a) KfLowerIrql(a)
3197 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
3199 #elif defined(_M_AMD64)
3203 KeGetCurrentIrql(VOID
)
3205 return (KIRQL
)__readcr8();
3210 KeLowerIrql(IN KIRQL NewIrql
)
3212 ASSERT(KeGetCurrentIrql() >= NewIrql
);
3213 __writecr8(NewIrql
);
3218 KfRaiseIrql(IN KIRQL NewIrql
)
3222 OldIrql
= __readcr8();
3223 ASSERT(OldIrql
<= NewIrql
);
3224 __writecr8(NewIrql
);
3227 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
3231 KeRaiseIrqlToDpcLevel(VOID
)
3233 return KfRaiseIrql(DISPATCH_LEVEL
);
3238 KeRaiseIrqlToSynchLevel(VOID
)
3240 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
3243 #elif defined(__PowerPC__)
3260 KeRaiseIrqlToDpcLevel(
3266 KeRaiseIrqlToSynchLevel(
3269 #define KeLowerIrql(a) KfLowerIrql(a)
3270 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
3272 #elif defined(_M_MIPS)
3274 #define KeLowerIrql(a) KfLowerIrql(a)
3275 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
3292 KeRaiseIrqlToDpcLevel(
3298 KeRaiseIrqlToSynchLevel(
3301 #elif defined(_M_ARM)
3318 OUT PKIRQL OldIrql
);
3323 KeRaiseIrqlToDpcLevel(
3329 KeRaiseIrqlToSynchLevel(
3334 /** Memory manager routines **/
3341 IN ULONG NumberOfBytes
);
3346 MmAllocateContiguousMemory(
3347 IN ULONG NumberOfBytes
,
3348 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
3353 MmAllocateContiguousMemorySpecifyCache(
3354 IN SIZE_T NumberOfBytes
,
3355 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
3356 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
3357 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
3358 IN MEMORY_CACHING_TYPE CacheType
);
3363 MmAllocateMappingAddress(
3364 IN SIZE_T NumberOfBytes
,
3370 MmAllocateNonCachedMemory(
3371 IN ULONG NumberOfBytes
);
3376 MmAllocatePagesForMdl(
3377 IN PHYSICAL_ADDRESS LowAddress
,
3378 IN PHYSICAL_ADDRESS HighAddress
,
3379 IN PHYSICAL_ADDRESS SkipBytes
,
3380 IN SIZE_T TotalBytes
);
3382 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
3386 MmAllocatePagesForMdlEx(
3387 IN PHYSICAL_ADDRESS LowAddress
,
3388 IN PHYSICAL_ADDRESS HighAddress
,
3389 IN PHYSICAL_ADDRESS SkipBytes
,
3390 IN SIZE_T TotalBytes
,
3391 IN MEMORY_CACHING_TYPE CacheType
,
3398 MmBuildMdlForNonPagedPool(
3399 IN OUT PMDL MemoryDescriptorList
);
3401 typedef enum _MMFLUSH_TYPE
{
3409 MmFlushImageSection(
3410 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
3411 IN MMFLUSH_TYPE FlushType
);
3416 MmFreeContiguousMemory(
3417 IN PVOID BaseAddress
);
3422 MmFreeContiguousMemorySpecifyCache(
3423 IN PVOID BaseAddress
,
3424 IN SIZE_T NumberOfBytes
,
3425 IN MEMORY_CACHING_TYPE CacheType
);
3430 MmFreeMappingAddress(
3431 IN PVOID BaseAddress
,
3437 MmFreeNonCachedMemory(
3438 IN PVOID BaseAddress
,
3439 IN SIZE_T NumberOfBytes
);
3445 IN PMDL MemoryDescriptorList
);
3449 * MmGetMdlByteCount(
3452 #define MmGetMdlByteCount(_Mdl) \
3457 * MmGetMdlByteOffset(
3460 #define MmGetMdlByteOffset(_Mdl) \
3461 ((_Mdl)->ByteOffset)
3468 #define MmGetMdlPfnArray(_Mdl) \
3469 ((PPFN_NUMBER) ((_Mdl) + 1))
3473 * MmGetMdlVirtualAddress(
3476 #define MmGetMdlVirtualAddress(_Mdl) \
3477 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
3482 MmGetPhysicalAddress(
3483 IN PVOID BaseAddress
);
3486 PPHYSICAL_MEMORY_RANGE
3488 MmGetPhysicalMemoryRanges(
3494 MmGetVirtualForPhysical(
3495 IN PHYSICAL_ADDRESS PhysicalAddress
);
3500 MmMapLockedPagesSpecifyCache(
3501 IN PMDL MemoryDescriptorList
,
3502 IN KPROCESSOR_MODE AccessMode
,
3503 IN MEMORY_CACHING_TYPE CacheType
,
3504 IN PVOID BaseAddress
,
3505 IN ULONG BugCheckOnFailure
,
3506 IN MM_PAGE_PRIORITY Priority
);
3511 MmMapLockedPagesWithReservedMapping(
3512 IN PVOID MappingAddress
,
3514 IN PMDL MemoryDescriptorList
,
3515 IN MEMORY_CACHING_TYPE CacheType
);
3520 MmMapUserAddressesToPage(
3521 IN PVOID BaseAddress
,
3522 IN SIZE_T NumberOfBytes
,
3523 IN PVOID PageAddress
);
3529 IN PHYSICAL_ADDRESS PhysicalAddress
,
3530 IN SIZE_T NumberOfBytes
,
3531 IN MEMORY_CACHING_TYPE CacheType
);
3536 MmMapViewInSessionSpace(
3538 OUT PVOID
*MappedBase
,
3539 IN OUT PSIZE_T ViewSize
);
3544 MmMapViewInSystemSpace(
3546 OUT PVOID
*MappedBase
,
3547 IN PSIZE_T ViewSize
);
3552 MmMarkPhysicalMemoryAsBad(
3553 IN PPHYSICAL_ADDRESS StartAddress
,
3554 IN OUT PLARGE_INTEGER NumberOfBytes
);
3559 MmMarkPhysicalMemoryAsGood(
3560 IN PPHYSICAL_ADDRESS StartAddress
,
3561 IN OUT PLARGE_INTEGER NumberOfBytes
);
3566 MmGetSystemRoutineAddress(
3567 IN PUNICODE_STRING SystemRoutineName
);
3571 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
3575 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, \
3577 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
3578 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
3583 * IN PMDL MemoryDescriptorList,
3587 #define MmInitializeMdl(_MemoryDescriptorList, \
3591 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
3592 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
3593 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
3594 (_MemoryDescriptorList)->MdlFlags = 0; \
3595 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
3596 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
3597 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
3604 IN PVOID VirtualAddress
);
3609 MmIsDriverVerifying(
3610 IN PDRIVER_OBJECT DriverObject
);
3615 MmIsThisAnNtAsSystem(
3621 MmIsVerifierEnabled(
3622 OUT PULONG VerifierFlags
);
3627 MmLockPagableDataSection(
3628 IN PVOID AddressWithinSection
);
3633 MmLockPagableImageSection(
3634 IN PVOID AddressWithinSection
);
3638 * MmLockPagableCodeSection(
3639 * IN PVOID AddressWithinSection)
3641 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
3646 MmLockPagableSectionByHandle(
3647 IN PVOID ImageSectionHandle
);
3653 IN PHYSICAL_ADDRESS PhysicalAddress
,
3654 IN ULONG NumberOfBytes
,
3655 IN MEMORY_CACHING_TYPE CacheEnable
);
3661 IN PMDL MemoryDescriptorList
,
3662 IN KPROCESSOR_MODE AccessMode
);
3667 MmLockPageableDataSection (
3668 IN PVOID AddressWithinSection
3674 MmUnlockPageableImageSection(
3675 IN PVOID ImageSectionHandle
3682 IN PVOID AddressWithinSection
);
3687 MmProbeAndLockProcessPages(
3688 IN OUT PMDL MemoryDescriptorList
,
3689 IN PEPROCESS Process
,
3690 IN KPROCESSOR_MODE AccessMode
,
3691 IN LOCK_OPERATION Operation
);
3696 MmProtectMdlSystemAddress(
3697 IN PMDL MemoryDescriptorList
,
3698 IN ULONG NewProtect
);
3704 IN PVOID BaseAddress
,
3705 IN PMDL MemoryDescriptorList
);
3710 MmUnmapViewInSessionSpace(
3711 IN PVOID MappedBase
);
3716 MmUnmapViewInSystemSpace(
3717 IN PVOID MappedBase
);
3722 MmUnsecureVirtualMemory(
3723 IN HANDLE SecureHandle
);
3727 * MmPrepareMdlForReuse(
3730 #define MmPrepareMdlForReuse(_Mdl) \
3732 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
3733 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
3734 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
3735 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
3736 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
3740 #define MmGetProcedureAddress(Address) (Address)
3745 MmProbeAndLockPages(
3746 IN OUT PMDL MemoryDescriptorList
,
3747 IN KPROCESSOR_MODE AccessMode
,
3748 IN LOCK_OPERATION Operation
);
3759 MmRemovePhysicalMemory(
3760 IN PPHYSICAL_ADDRESS StartAddress
,
3761 IN OUT PLARGE_INTEGER NumberOfBytes
);
3766 MmResetDriverPaging(
3767 IN PVOID AddressWithinSection
);
3772 MmSecureVirtualMemory(
3775 IN ULONG ProbeMode
);
3787 MmUnlockPagableImageSection(
3788 IN PVOID ImageSectionHandle
);
3794 IN PMDL MemoryDescriptorList
);
3800 IN PVOID BaseAddress
,
3801 IN SIZE_T NumberOfBytes
);
3806 MmUnmapReservedMapping(
3807 IN PVOID BaseAddress
,
3809 IN PMDL MemoryDescriptorList
);
3814 MmUnmapVideoDisplay(
3815 IN PVOID BaseAddress
,
3816 IN SIZE_T NumberOfBytes
);
3820 /** Object manager routines **/
3826 IN PACCESS_STATE AccessState
,
3827 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3829 IN POBJECT_TYPE Type
);
3834 ObDereferenceSecurityDescriptor(
3835 PSECURITY_DESCRIPTOR SecurityDescriptor
,
3841 ObfDereferenceObject(
3846 * ObDereferenceObject(
3849 #define ObDereferenceObject ObfDereferenceObject
3854 ObGetObjectSecurity(
3856 OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
3857 OUT PBOOLEAN MemoryAllocated
);
3864 IN PACCESS_STATE PassedAccessState OPTIONAL
,
3865 IN ACCESS_MASK DesiredAccess
,
3866 IN ULONG AdditionalReferences
,
3867 OUT PVOID
* ReferencedObject OPTIONAL
,
3868 OUT PHANDLE Handle
);
3879 ObLogSecurityDescriptor(
3880 IN PSECURITY_DESCRIPTOR InputSecurityDescriptor
,
3881 OUT PSECURITY_DESCRIPTOR
*OutputSecurityDescriptor
,
3885 * ObReferenceObject(
3888 #define ObReferenceObject ObfReferenceObject
3893 ObMakeTemporaryObject(
3900 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3901 IN POBJECT_TYPE ObjectType
,
3902 IN KPROCESSOR_MODE AccessMode
,
3903 IN PACCESS_STATE PassedAccessState
,
3904 IN ACCESS_MASK DesiredAccess
,
3905 IN OUT PVOID ParseContext OPTIONAL
,
3906 OUT PHANDLE Handle
);
3911 ObOpenObjectByPointer(
3913 IN ULONG HandleAttributes
,
3914 IN PACCESS_STATE PassedAccessState OPTIONAL
,
3915 IN ACCESS_MASK DesiredAccess OPTIONAL
,
3916 IN POBJECT_TYPE ObjectType OPTIONAL
,
3917 IN KPROCESSOR_MODE AccessMode
,
3918 OUT PHANDLE Handle
);
3923 ObQueryObjectAuditingByHandle(
3925 OUT PBOOLEAN GenerateOnClose
);
3930 ObReferenceObjectByHandle(
3932 IN ACCESS_MASK DesiredAccess
,
3933 IN POBJECT_TYPE ObjectType OPTIONAL
,
3934 IN KPROCESSOR_MODE AccessMode
,
3936 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
);
3941 ObReferenceObjectByName(
3942 IN PUNICODE_STRING ObjectPath
,
3943 IN ULONG Attributes
,
3944 IN PACCESS_STATE PassedAccessState OPTIONAL
,
3945 IN ACCESS_MASK DesiredAccess OPTIONAL
,
3946 IN POBJECT_TYPE ObjectType
,
3947 IN KPROCESSOR_MODE AccessMode
,
3948 IN OUT PVOID ParseContext OPTIONAL
,
3954 ObReferenceObjectByPointer(
3956 IN ACCESS_MASK DesiredAccess
,
3957 IN POBJECT_TYPE ObjectType
,
3958 IN KPROCESSOR_MODE AccessMode
);
3963 ObReferenceSecurityDescriptor(
3964 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3970 ObReleaseObjectSecurity(
3971 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3972 IN BOOLEAN MemoryAllocated
);
3976 /** Process manager routines **/
3981 PsCreateSystemProcess(
3982 IN PHANDLE ProcessHandle
,
3983 IN ACCESS_MASK DesiredAccess
,
3984 IN POBJECT_ATTRIBUTES ObjectAttributes
);
3989 PsCreateSystemThread(
3990 OUT PHANDLE ThreadHandle
,
3991 IN ULONG DesiredAccess
,
3992 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
3993 IN HANDLE ProcessHandle OPTIONAL
,
3994 OUT PCLIENT_ID ClientId OPTIONAL
,
3995 IN PKSTART_ROUTINE StartRoutine
,
3996 IN PVOID StartContext
);
4000 * PsGetCurrentProcess(VOID)
4002 #define PsGetCurrentProcess IoGetCurrentProcess
4007 PsGetCurrentProcessId(
4012 * PsGetCurrentThread(VOID)
4014 #define PsGetCurrentThread() \
4015 ((PETHREAD) KeGetCurrentThread())
4020 PsGetCurrentThreadId(
4026 PsGetProcessId(PEPROCESS Process
);
4032 PULONG MajorVersion OPTIONAL
,
4033 PULONG MinorVersion OPTIONAL
,
4034 PULONG BuildNumber OPTIONAL
,
4035 PUNICODE_STRING CSDVersion OPTIONAL
);
4040 PsRemoveCreateThreadNotifyRoutine(
4041 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4046 PsRemoveLoadImageNotifyRoutine(
4047 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4052 PsSetCreateProcessNotifyRoutine(
4053 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
4059 PsSetCreateThreadNotifyRoutine(
4060 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4065 PsSetLoadImageNotifyRoutine(
4066 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4071 PsTerminateSystemThread(
4072 IN NTSTATUS ExitStatus
);
4074 extern NTSYSAPI PEPROCESS PsInitialSystemProcess
;
4077 /** Security reference monitor routines **/
4083 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4084 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
4085 IN BOOLEAN SubjectContextLocked
,
4086 IN ACCESS_MASK DesiredAccess
,
4087 IN ACCESS_MASK PreviouslyGrantedAccess
,
4088 OUT PPRIVILEGE_SET
*Privileges OPTIONAL
,
4089 IN PGENERIC_MAPPING GenericMapping
,
4090 IN KPROCESSOR_MODE AccessMode
,
4091 OUT PACCESS_MASK GrantedAccess
,
4092 OUT PNTSTATUS AccessStatus
);
4098 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
4099 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
4100 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
4101 IN BOOLEAN IsDirectoryObject
,
4102 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
4103 IN PGENERIC_MAPPING GenericMapping
,
4104 IN POOL_TYPE PoolType
);
4110 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
4111 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
4112 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
4113 IN GUID
*ObjectType OPTIONAL
,
4114 IN BOOLEAN IsDirectoryObject
,
4115 IN ULONG AutoInheritFlags
,
4116 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
4117 IN PGENERIC_MAPPING GenericMapping
,
4118 IN POOL_TYPE PoolType
);
4124 IN OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
);
4129 SeSinglePrivilegeCheck(
4130 LUID PrivilegeValue
,
4131 KPROCESSOR_MODE PreviousMode
);
4136 SeValidSecurityDescriptor(
4138 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
4142 /** NtXxx routines **/
4148 OUT PHANDLE ProcessHandle
,
4149 IN ACCESS_MASK DesiredAccess
,
4150 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4151 IN PCLIENT_ID ClientId OPTIONAL
);
4156 NtQueryInformationProcess(
4157 IN HANDLE ProcessHandle
,
4158 IN PROCESSINFOCLASS ProcessInformationClass
,
4159 OUT PVOID ProcessInformation
,
4160 IN ULONG ProcessInformationLength
,
4161 OUT PULONG ReturnLength OPTIONAL
);
4165 /** NtXxx and ZwXxx routines **/
4171 IN HANDLE TimerHandle
,
4172 OUT PBOOLEAN CurrentState OPTIONAL
);
4189 ZwCreateDirectoryObject(
4190 OUT PHANDLE DirectoryHandle
,
4191 IN ACCESS_MASK DesiredAccess
,
4192 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4198 OUT PHANDLE EventHandle
,
4199 IN ACCESS_MASK DesiredAccess
,
4200 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
4201 IN EVENT_TYPE EventType
,
4202 IN BOOLEAN InitialState
);
4208 OUT PHANDLE EventHandle
,
4209 IN ACCESS_MASK DesiredAccess
,
4210 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
4211 IN EVENT_TYPE EventType
,
4212 IN BOOLEAN InitialState
);
4218 OUT PHANDLE FileHandle
,
4219 IN ACCESS_MASK DesiredAccess
,
4220 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4221 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4222 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
4223 IN ULONG FileAttributes
,
4224 IN ULONG ShareAccess
,
4225 IN ULONG CreateDisposition
,
4226 IN ULONG CreateOptions
,
4227 IN PVOID EaBuffer OPTIONAL
,
4234 OUT PHANDLE KeyHandle
,
4235 IN ACCESS_MASK DesiredAccess
,
4236 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4237 IN ULONG TitleIndex
,
4238 IN PUNICODE_STRING Class OPTIONAL
,
4239 IN ULONG CreateOptions
,
4240 OUT PULONG Disposition OPTIONAL
);
4246 OUT PHANDLE TimerHandle
,
4247 IN ACCESS_MASK DesiredAccess
,
4248 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
4249 IN TIMER_TYPE TimerType
);
4255 IN HANDLE KeyHandle
);
4261 IN HANDLE KeyHandle
,
4262 IN PUNICODE_STRING ValueName
);
4267 NtDeviceIoControlFile(
4268 IN HANDLE DeviceHandle
,
4269 IN HANDLE Event OPTIONAL
,
4270 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
4271 IN PVOID UserApcContext OPTIONAL
,
4272 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4273 IN ULONG IoControlCode
,
4274 IN PVOID InputBuffer
,
4275 IN ULONG InputBufferSize
,
4276 OUT PVOID OutputBuffer
,
4277 IN ULONG OutputBufferSize
);
4282 ZwDeviceIoControlFile(
4283 IN HANDLE DeviceHandle
,
4284 IN HANDLE Event OPTIONAL
,
4285 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
4286 IN PVOID UserApcContext OPTIONAL
,
4287 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4288 IN ULONG IoControlCode
,
4289 IN PVOID InputBuffer
,
4290 IN ULONG InputBufferSize
,
4291 OUT PVOID OutputBuffer
,
4292 IN ULONG OutputBufferSize
);
4298 IN HANDLE KeyHandle
,
4300 IN KEY_INFORMATION_CLASS KeyInformationClass
,
4301 OUT PVOID KeyInformation
,
4303 OUT PULONG ResultLength
);
4308 ZwEnumerateValueKey(
4309 IN HANDLE KeyHandle
,
4311 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
4312 OUT PVOID KeyValueInformation
,
4314 OUT PULONG ResultLength
);
4320 IN HANDLE KeyHandle
);
4325 ZwMakeTemporaryObject(
4332 IN HANDLE SectionHandle
,
4333 IN HANDLE ProcessHandle
,
4334 IN OUT PVOID
*BaseAddress
,
4335 IN ULONG_PTR ZeroBits
,
4336 IN SIZE_T CommitSize
,
4337 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
4338 IN OUT PSIZE_T ViewSize
,
4339 IN SECTION_INHERIT InheritDisposition
,
4340 IN ULONG AllocationType
,
4347 IN HANDLE SectionHandle
,
4348 IN HANDLE ProcessHandle
,
4349 IN OUT PVOID
*BaseAddress
,
4350 IN ULONG_PTR ZeroBits
,
4351 IN SIZE_T CommitSize
,
4352 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
4353 IN OUT PSIZE_T ViewSize
,
4354 IN SECTION_INHERIT InheritDisposition
,
4355 IN ULONG AllocationType
,
4362 OUT PHANDLE FileHandle
,
4363 IN ACCESS_MASK DesiredAccess
,
4364 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4365 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4366 IN ULONG ShareAccess
,
4367 IN ULONG OpenOptions
);
4373 OUT PHANDLE FileHandle
,
4374 IN ACCESS_MASK DesiredAccess
,
4375 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4376 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4377 IN ULONG ShareAccess
,
4378 IN ULONG OpenOptions
);
4384 OUT PHANDLE KeyHandle
,
4385 IN ACCESS_MASK DesiredAccess
,
4386 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4392 OUT PHANDLE SectionHandle
,
4393 IN ACCESS_MASK DesiredAccess
,
4394 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4399 ZwOpenSymbolicLinkObject(
4400 OUT PHANDLE LinkHandle
,
4401 IN ACCESS_MASK DesiredAccess
,
4402 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4408 OUT PHANDLE TimerHandle
,
4409 IN ACCESS_MASK DesiredAccess
,
4410 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4415 ZwQueryInformationFile(
4416 IN HANDLE FileHandle
,
4417 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4418 OUT PVOID FileInformation
,
4420 IN FILE_INFORMATION_CLASS FileInformationClass
);
4426 IN HANDLE KeyHandle
,
4427 IN KEY_INFORMATION_CLASS KeyInformationClass
,
4428 OUT PVOID KeyInformation
,
4430 OUT PULONG ResultLength
);
4435 ZwQuerySymbolicLinkObject(
4436 IN HANDLE LinkHandle
,
4437 IN OUT PUNICODE_STRING LinkTarget
,
4438 OUT PULONG ReturnedLength OPTIONAL
);
4444 IN HANDLE KeyHandle
,
4445 IN PUNICODE_STRING ValueName
,
4446 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
4447 OUT PVOID KeyValueInformation
,
4449 OUT PULONG ResultLength
);
4455 IN HANDLE FileHandle
,
4456 IN HANDLE Event OPTIONAL
,
4457 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4458 IN PVOID ApcContext OPTIONAL
,
4459 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4462 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
4463 IN PULONG Key OPTIONAL
);
4469 IN HANDLE FileHandle
,
4470 IN HANDLE Event OPTIONAL
,
4471 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4472 IN PVOID ApcContext OPTIONAL
,
4473 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4476 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
4477 IN PULONG Key OPTIONAL
);
4483 IN HANDLE EventHandle
,
4484 OUT PLONG PreviousState OPTIONAL
);
4490 IN HANDLE EventHandle
,
4491 OUT PLONG PreviousState OPTIONAL
);
4496 ZwSetInformationFile(
4497 IN HANDLE FileHandle
,
4498 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4499 IN PVOID FileInformation
,
4501 IN FILE_INFORMATION_CLASS FileInformationClass
);
4506 ZwSetInformationThread(
4507 IN HANDLE ThreadHandle
,
4508 IN THREADINFOCLASS ThreadInformationClass
,
4509 IN PVOID ThreadInformation
,
4510 IN ULONG ThreadInformationLength
);
4516 IN HANDLE TimerHandle
,
4517 IN PLARGE_INTEGER DueTime
,
4518 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
4519 IN PVOID TimerContext OPTIONAL
,
4520 IN BOOLEAN WakeTimer
,
4521 IN LONG Period OPTIONAL
,
4522 OUT PBOOLEAN PreviousState OPTIONAL
);
4528 IN HANDLE KeyHandle
,
4529 IN PUNICODE_STRING ValueName
,
4530 IN ULONG TitleIndex OPTIONAL
,
4535 /* [Nt|Zw]MapViewOfSection.InheritDisposition constants */
4536 #define AT_EXTENDABLE_FILE 0x00002000
4537 #define AT_RESERVED 0x20000000
4538 #define AT_ROUND_TO_PAGE 0x40000000
4543 NtUnmapViewOfSection(
4544 IN HANDLE ProcessHandle
,
4545 IN PVOID BaseAddress
);
4550 ZwUnmapViewOfSection(
4551 IN HANDLE ProcessHandle
,
4552 IN PVOID BaseAddress
);
4557 NtWaitForSingleObject(
4558 IN HANDLE ObjectHandle
,
4559 IN BOOLEAN Alertable
,
4560 IN PLARGE_INTEGER TimeOut OPTIONAL
);
4565 ZwWaitForSingleObject(
4566 IN HANDLE ObjectHandle
,
4567 IN BOOLEAN Alertable
,
4568 IN PLARGE_INTEGER TimeOut OPTIONAL
);
4574 IN HANDLE FileHandle
,
4575 IN HANDLE Event OPTIONAL
,
4576 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4577 IN PVOID ApcContext OPTIONAL
,
4578 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4581 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
4582 IN PULONG Key OPTIONAL
);
4588 IN HANDLE FileHandle
,
4589 IN HANDLE Event OPTIONAL
,
4590 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4591 IN PVOID ApcContext OPTIONAL
,
4592 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4595 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
4596 IN PULONG Key OPTIONAL
);
4600 /** Power management support routines **/
4606 IN PDEVICE_OBJECT DeviceObject
,
4612 PoRegisterDeviceForIdleDetection(
4613 IN PDEVICE_OBJECT DeviceObject
,
4614 IN ULONG ConservationIdleTime
,
4615 IN ULONG PerformanceIdleTime
,
4616 IN DEVICE_POWER_STATE State
);
4621 PoRegisterSystemState(
4622 IN PVOID StateHandle
,
4623 IN EXECUTION_STATE Flags
);
4629 IN PDEVICE_OBJECT DeviceObject
,
4630 IN UCHAR MinorFunction
,
4631 IN POWER_STATE PowerState
,
4632 IN PREQUEST_POWER_COMPLETE CompletionFunction
,
4634 OUT PIRP
*Irp OPTIONAL
);
4639 PoRequestShutdownEvent(
4646 PULONG IdlePointer
);
4648 #define PoSetDeviceBusy(IdlePointer) \
4649 ((void)(*(IdlePointer) = 0))
4655 IN PDEVICE_OBJECT DeviceObject
,
4656 IN POWER_STATE_TYPE Type
,
4657 IN POWER_STATE State
);
4663 IN EXECUTION_STATE Flags
);
4668 PoStartNextPowerIrp(
4674 PoUnregisterSystemState(
4675 IN PVOID StateHandle
);
4679 /** WMI library support routines **/
4684 IN PDEVICE_OBJECT DeviceObject
,
4687 IN ULONG BufferUsed
,
4688 IN CCHAR PriorityBoost
);
4693 IN PDEVICE_OBJECT DeviceObject
,
4695 IN ULONG InstanceIndex
,
4696 IN ULONG EventDataSize
,
4697 IN PVOID EventData
);
4702 WmiQueryTraceInformation(
4703 IN TRACE_INFORMATION_CLASS TraceInformationClass
,
4704 OUT PVOID TraceInformation
,
4705 IN ULONG TraceInformationLength
,
4706 OUT PULONG RequiredLength OPTIONAL
,
4707 IN PVOID Buffer OPTIONAL
);
4712 IN PWMILIB_CONTEXT WmiLibInfo
,
4713 IN PDEVICE_OBJECT DeviceObject
,
4715 OUT PSYSCTL_IRP_DISPOSITION IrpDisposition
);
4721 IN TRACEHANDLE LoggerHandle
,
4722 IN ULONG MessageFlags
,
4723 IN LPGUID MessageGuid
,
4724 IN USHORT MessageNumber
,
4728 /* FIXME: Get va_list from where? */
4733 IN TRACEHANDLE LoggerHandle
,
4734 IN ULONG MessageFlags
,
4735 IN LPGUID MessageGuid
,
4736 IN USHORT MessageNumber
,
4737 IN
va_list MessageArgList
);
4741 /** Kernel debugger routines **/
4758 KdRefreshDebuggerNotPresent(
4762 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
4767 IN KD_OPTION Option
,
4768 IN ULONG InBufferBytes OPTIONAL
,
4770 IN ULONG OutBufferBytes OPTIONAL
,
4771 OUT PVOID OutBuffer
,
4772 OUT PULONG OutBufferNeeded OPTIONAL
);
4783 DbgBreakPointWithStatus(
4796 IN ULONG ComponentId
,
4804 IN ULONG ComponentId
,
4811 vDbgPrintExWithPrefix(
4813 IN ULONG ComponentId
,
4821 DbgPrintReturnControlC(
4830 IN ULONG MaximumResponseLength
4836 DbgQueryDebugFilterState(
4837 IN ULONG ComponentId
,
4843 DbgSetDebugFilterState(
4844 IN ULONG ComponentId
,
4850 #define KdPrint(_x_) DbgPrint _x_
4851 #define KdPrintEx(_x_) DbgPrintEx _x_
4852 #define KdBreakPoint() DbgBreakPoint()
4853 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
4857 #define KdPrint(_x_)
4858 #define KdPrintEx(_x_)
4859 #define KdBreakPoint()
4860 #define KdBreakPointWithStatus(s)
4864 #if defined(__GNUC__)
4866 extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent
;
4867 extern NTKERNELAPI BOOLEAN KdDebuggerEnabled
;
4868 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
4869 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
4871 #elif defined(_NTDDK_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
4873 extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent
;
4874 extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled
;
4875 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
4876 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
4880 extern BOOLEAN KdDebuggerNotPresent
;
4881 extern BOOLEAN KdDebuggerEnabled
;
4882 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
4883 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
4887 /** Stuff from winnt4.h */
4889 #ifndef DMA_MACROS_DEFINED
4891 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4893 //DECLSPEC_DEPRECATED_DDK
4897 IoFlushAdapterBuffers(
4898 IN PADAPTER_OBJECT AdapterObject
,
4900 IN PVOID MapRegisterBase
,
4903 IN BOOLEAN WriteToDevice
);
4905 //DECLSPEC_DEPRECATED_DDK
4909 IoFreeAdapterChannel(
4910 IN PADAPTER_OBJECT AdapterObject
);
4912 //DECLSPEC_DEPRECATED_DDK
4917 IN PADAPTER_OBJECT AdapterObject
,
4918 IN PVOID MapRegisterBase
,
4919 IN ULONG NumberOfMapRegisters
);
4921 //DECLSPEC_DEPRECATED_DDK
4926 IN PADAPTER_OBJECT AdapterObject
,
4928 IN PVOID MapRegisterBase
,
4930 IN OUT PULONG Length
,
4931 IN BOOLEAN WriteToDevice
);
4934 #endif // (NTDDI_VERSION >= NTDDI_WIN2K)
4935 #endif // !defined(DMA_MACROS_DEFINED)
4941 IN PUNICODE_STRING RegistryPath
,
4942 IN PUNICODE_STRING DriverClassName OPTIONAL
,
4943 IN PDRIVER_OBJECT DriverObject
,
4944 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
4945 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources
,
4946 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
4951 IoAttachDeviceByPointer(
4952 IN PDEVICE_OBJECT SourceDevice
,
4953 IN PDEVICE_OBJECT TargetDevice
);
4958 MmIsNonPagedSystemAddressValid(
4959 IN PVOID VirtualAddress
);
4961 #if defined(_AMD64_) || defined(_IA64_)
4962 //DECLSPEC_DEPRECATED_DDK_WINXP
4966 RtlLargeIntegerDivide(
4967 IN LARGE_INTEGER Dividend
,
4968 IN LARGE_INTEGER Divisor
,
4969 IN OUT PLARGE_INTEGER Remainder
)
4972 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
4974 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
4981 RtlLargeIntegerDivide(
4982 IN LARGE_INTEGER Dividend
,
4983 IN LARGE_INTEGER Divisor
,
4984 IN OUT PLARGE_INTEGER Remainder
);
4990 ExInterlockedDecrementLong(
4992 IN PKSPIN_LOCK Lock
);
4997 ExInterlockedExchangeUlong(
5000 IN PKSPIN_LOCK Lock
);
5005 ExInterlockedIncrementLong(
5007 IN PKSPIN_LOCK Lock
);
5012 HalAcquireDisplayOwnership(
5013 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
5018 HalAllocateAdapterChannel(
5019 IN PADAPTER_OBJECT AdapterObject
,
5020 IN PWAIT_CONTEXT_BLOCK Wcb
,
5021 IN ULONG NumberOfMapRegisters
,
5022 IN PDRIVER_CONTROL ExecutionRoutine
);
5027 HalAllocateCommonBuffer(
5028 IN PADAPTER_OBJECT AdapterObject
,
5030 OUT PPHYSICAL_ADDRESS LogicalAddress
,
5031 IN BOOLEAN CacheEnabled
);
5036 HalAssignSlotResources(
5037 IN PUNICODE_STRING RegistryPath
,
5038 IN PUNICODE_STRING DriverClassName
,
5039 IN PDRIVER_OBJECT DriverObject
,
5040 IN PDEVICE_OBJECT DeviceObject
,
5041 IN INTERFACE_TYPE BusType
,
5043 IN ULONG SlotNumber
,
5044 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
5049 HalFreeCommonBuffer(
5050 IN PADAPTER_OBJECT AdapterObject
,
5052 IN PHYSICAL_ADDRESS LogicalAddress
,
5053 IN PVOID VirtualAddress
,
5054 IN BOOLEAN CacheEnabled
);
5060 IN PDEVICE_DESCRIPTION DeviceDescription
,
5061 IN OUT PULONG NumberOfMapRegisters
);
5067 IN BUS_DATA_TYPE BusDataType
,
5069 IN ULONG SlotNumber
,
5076 HalGetBusDataByOffset(
5077 IN BUS_DATA_TYPE BusDataType
,
5079 IN ULONG SlotNumber
,
5087 HalGetDmaAlignmentRequirement(
5093 HalGetInterruptVector(
5094 IN INTERFACE_TYPE InterfaceType
,
5096 IN ULONG BusInterruptLevel
,
5097 IN ULONG BusInterruptVector
,
5099 OUT PKAFFINITY Affinity
);
5105 IN PADAPTER_OBJECT AdapterObject
);
5111 IN BUS_DATA_TYPE BusDataType
,
5113 IN ULONG SlotNumber
,
5120 HalSetBusDataByOffset(
5121 IN BUS_DATA_TYPE BusDataType
,
5123 IN ULONG SlotNumber
,
5131 HalTranslateBusAddress(
5132 IN INTERFACE_TYPE InterfaceType
,
5134 IN PHYSICAL_ADDRESS BusAddress
,
5135 IN OUT PULONG AddressSpace
,
5136 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
5141 RtlLargeIntegerEqualToZero(
5142 IN LARGE_INTEGER Operand
);
5147 RtlLargeIntegerGreaterOrEqualToZero(
5148 IN LARGE_INTEGER Operand
);
5153 RtlLargeIntegerGreaterThan(
5154 IN LARGE_INTEGER Operand1
,
5155 IN LARGE_INTEGER Operand2
);
5160 RtlLargeIntegerGreaterThanOrEqualTo(
5161 IN LARGE_INTEGER Operand1
,
5162 IN LARGE_INTEGER Operand2
);
5167 RtlLargeIntegerGreaterThanZero(
5168 IN LARGE_INTEGER Operand
);
5173 RtlLargeIntegerLessOrEqualToZero(
5174 IN LARGE_INTEGER Operand
);
5179 RtlLargeIntegerLessThan(
5180 IN LARGE_INTEGER Operand1
,
5181 IN LARGE_INTEGER Operand2
);
5186 RtlLargeIntegerLessThanOrEqualTo(
5187 IN LARGE_INTEGER Operand1
,
5188 IN LARGE_INTEGER Operand2
);
5193 RtlLargeIntegerLessThanZero(
5194 IN LARGE_INTEGER Operand
);
5199 RtlLargeIntegerNegate(
5200 IN LARGE_INTEGER Subtrahend
);
5205 RtlLargeIntegerNotEqualTo(
5206 IN LARGE_INTEGER Operand1
,
5207 IN LARGE_INTEGER Operand2
);
5212 RtlLargeIntegerNotEqualToZero(
5213 IN LARGE_INTEGER Operand
);
5218 RtlLargeIntegerShiftLeft(
5219 IN LARGE_INTEGER LargeInteger
,
5220 IN CCHAR ShiftCount
);
5225 RtlLargeIntegerShiftRight(
5226 IN LARGE_INTEGER LargeInteger
,
5227 IN CCHAR ShiftCount
);
5232 RtlLargeIntegerSubtract(
5233 IN LARGE_INTEGER Minuend
,
5234 IN LARGE_INTEGER Subtrahend
);
5239 * COMPUTE_PAGES_SPANNED(
5243 #define COMPUTE_PAGES_SPANNED(Va, \
5245 (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
5249 ** Architecture specific structures
5257 Exfi386InterlockedIncrementLong(
5263 Exfi386InterlockedDecrementLong(
5269 Exfi386InterlockedExchangeUlong(
5273 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
5274 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
5275 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
5281 // NT-ARM is not documented
5290 #endif /* __WINDDK_H */