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))
424 typedef enum _TIMER_TYPE
{
429 #define KEYBOARD_INSERT_ON 0x08
430 #define KEYBOARD_CAPS_LOCK_ON 0x04
431 #define KEYBOARD_NUM_LOCK_ON 0x02
432 #define KEYBOARD_SCROLL_LOCK_ON 0x01
433 #define KEYBOARD_ALT_KEY_DOWN 0x80
434 #define KEYBOARD_CTRL_KEY_DOWN 0x40
435 #define KEYBOARD_LEFT_SHIFT_DOWN 0x20
436 #define KEYBOARD_RIGHT_SHIFT_DOWN 0x10
438 typedef struct _IO_COUNTERS
{
439 ULONGLONG ReadOperationCount
;
440 ULONGLONG WriteOperationCount
;
441 ULONGLONG OtherOperationCount
;
442 ULONGLONG ReadTransferCount
;
443 ULONGLONG WriteTransferCount
;
444 ULONGLONG OtherTransferCount
;
445 } IO_COUNTERS
, *PIO_COUNTERS
;
447 typedef struct _VM_COUNTERS
449 SIZE_T PeakVirtualSize
;
451 ULONG PageFaultCount
;
452 SIZE_T PeakWorkingSetSize
;
453 SIZE_T WorkingSetSize
;
454 SIZE_T QuotaPeakPagedPoolUsage
;
455 SIZE_T QuotaPagedPoolUsage
;
456 SIZE_T QuotaPeakNonPagedPoolUsage
;
457 SIZE_T QuotaNonPagedPoolUsage
;
458 SIZE_T PagefileUsage
;
459 SIZE_T PeakPagefileUsage
;
460 } VM_COUNTERS
, *PVM_COUNTERS
;
462 typedef struct _VM_COUNTERS_EX
464 SIZE_T PeakVirtualSize
;
466 ULONG PageFaultCount
;
467 SIZE_T PeakWorkingSetSize
;
468 SIZE_T WorkingSetSize
;
469 SIZE_T QuotaPeakPagedPoolUsage
;
470 SIZE_T QuotaPagedPoolUsage
;
471 SIZE_T QuotaPeakNonPagedPoolUsage
;
472 SIZE_T QuotaNonPagedPoolUsage
;
473 SIZE_T PagefileUsage
;
474 SIZE_T PeakPagefileUsage
;
476 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
478 typedef struct _POOLED_USAGE_AND_LIMITS
480 SIZE_T PeakPagedPoolUsage
;
481 SIZE_T PagedPoolUsage
;
482 SIZE_T PagedPoolLimit
;
483 SIZE_T PeakNonPagedPoolUsage
;
484 SIZE_T NonPagedPoolUsage
;
485 SIZE_T NonPagedPoolLimit
;
486 SIZE_T PeakPagefileUsage
;
487 SIZE_T PagefileUsage
;
488 SIZE_T PagefileLimit
;
489 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
491 typedef struct _CONTROLLER_OBJECT
{
494 PVOID ControllerExtension
;
495 KDEVICE_QUEUE DeviceWaitQueue
;
497 LARGE_INTEGER Spare2
;
498 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
500 /* DEVICE_OBJECT.Flags */
502 #define DO_DEVICE_HAS_NAME 0x00000040
503 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
504 #define DO_LONG_TERM_REQUESTS 0x00000200
505 #define DO_NEVER_LAST_DEVICE 0x00000400
506 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
507 #define DO_XIP 0x00020000
509 #define DRVO_REINIT_REGISTERED 0x00000008
510 #define DRVO_INITIALIZED 0x00000010
511 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
512 #define DRVO_LEGACY_RESOURCES 0x00000040
514 typedef enum _ARBITER_REQUEST_SOURCE
{
515 ArbiterRequestUndefined
= -1,
516 ArbiterRequestLegacyReported
,
517 ArbiterRequestHalReported
,
518 ArbiterRequestLegacyAssigned
,
519 ArbiterRequestPnpDetected
,
520 ArbiterRequestPnpEnumerated
521 } ARBITER_REQUEST_SOURCE
;
523 typedef enum _ARBITER_RESULT
{
524 ArbiterResultUndefined
= -1,
525 ArbiterResultSuccess
,
526 ArbiterResultExternalConflict
,
527 ArbiterResultNullRequest
530 typedef enum _ARBITER_ACTION
{
531 ArbiterActionTestAllocation
,
532 ArbiterActionRetestAllocation
,
533 ArbiterActionCommitAllocation
,
534 ArbiterActionRollbackAllocation
,
535 ArbiterActionQueryAllocatedResources
,
536 ArbiterActionWriteReservedResources
,
537 ArbiterActionQueryConflict
,
538 ArbiterActionQueryArbitrate
,
539 ArbiterActionAddReserved
,
540 ArbiterActionBootAllocation
541 } ARBITER_ACTION
, *PARBITER_ACTION
;
543 typedef struct _ARBITER_CONFLICT_INFO
{
544 PDEVICE_OBJECT OwningObject
;
547 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
549 typedef struct _ARBITER_PARAMETERS
{
552 IN OUT PLIST_ENTRY ArbitrationList
;
553 IN ULONG AllocateFromCount
;
554 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
558 IN OUT PLIST_ENTRY ArbitrationList
;
559 IN ULONG AllocateFromCount
;
560 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
564 IN OUT PLIST_ENTRY ArbitrationList
;
568 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
569 } QueryAllocatedResources
;
572 IN PDEVICE_OBJECT PhysicalDeviceObject
;
573 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
574 OUT PULONG ConflictCount
;
575 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
579 IN PLIST_ENTRY ArbitrationList
;
583 IN PDEVICE_OBJECT ReserveDevice
;
586 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
588 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
590 typedef struct _ARBITER_LIST_ENTRY
{
591 LIST_ENTRY ListEntry
;
592 ULONG AlternativeCount
;
593 PIO_RESOURCE_DESCRIPTOR Alternatives
;
594 PDEVICE_OBJECT PhysicalDeviceObject
;
595 ARBITER_REQUEST_SOURCE RequestSource
;
598 INTERFACE_TYPE InterfaceType
;
601 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
602 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
603 ARBITER_RESULT Result
;
604 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
607 (DDKAPI
*PARBITER_HANDLER
)(
609 IN ARBITER_ACTION Action
,
610 IN OUT PARBITER_PARAMETERS Parameters
);
612 #define ARBITER_PARTIAL 0x00000001
614 typedef struct _ARBITER_INTERFACE
{
618 PINTERFACE_REFERENCE InterfaceReference
;
619 PINTERFACE_DEREFERENCE InterfaceDereference
;
620 PARBITER_HANDLER ArbiterHandler
;
622 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
624 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
625 HalInstalledBusInformation
,
626 HalProfileSourceInformation
,
627 HalInformationClassUnused1
,
629 HalProcessorSpeedInformation
,
630 HalCallbackInformation
,
631 HalMapRegisterInformation
,
632 HalMcaLogInformation
,
633 HalFrameBufferCachingInformation
,
634 HalDisplayBiosInformation
,
635 HalProcessorFeatureInformation
,
636 HalNumaTopologyInterface
,
638 HalCmcLogInformation
,
639 HalCpeLogInformation
,
640 HalQueryMcaInterface
,
641 HalQueryAMLIIllegalIOPortAddresses
,
642 HalQueryMaxHotPlugMemoryAddress
,
643 HalPartitionIpiInterface
,
644 HalPlatformInformation
,
645 HalQueryProfileSourceList
646 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
648 typedef enum _HAL_SET_INFORMATION_CLASS
{
649 HalProfileSourceInterval
,
650 HalProfileSourceInterruptHandler
,
651 HalMcaRegisterDriver
,
652 HalKernelErrorHandler
,
653 HalCmcRegisterDriver
,
654 HalCpeRegisterDriver
,
658 HalGenerateCmcInterrupt
659 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
661 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
663 KPROFILE_SOURCE Source
;
665 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
667 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
669 KPROFILE_SOURCE Source
;
672 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
674 typedef struct _MAP_REGISTER_ENTRY
677 BOOLEAN WriteToDevice
;
678 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
685 PUCHAR TranslatedAddress
;
687 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
691 PHYSICAL_ADDRESS Start
;
692 PHYSICAL_ADDRESS MaxEnd
;
693 PVOID VirtualAddress
;
697 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
709 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
710 DEBUG_MEMORY_REQUIREMENTS Memory
;
711 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
713 /* Function Type Defintions for Dispatch Functions */
714 struct _DEVICE_CONTROL_CONTEXT
;
717 (DDKAPI
*PDEVICE_CONTROL_COMPLETION
)(
718 IN
struct _DEVICE_CONTROL_CONTEXT
*ControlContext
);
720 typedef struct _DEVICE_CONTROL_CONTEXT
{
722 PDEVICE_HANDLER_OBJECT DeviceHandler
;
723 PDEVICE_OBJECT DeviceObject
;
728 } DEVICE_CONTROL_CONTEXT
, *PDEVICE_CONTROL_CONTEXT
;
730 typedef struct _PM_DISPATCH_TABLE
{
734 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
736 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
737 TranslateChildToParent
,
738 TranslateParentToChild
739 } RESOURCE_TRANSLATION_DIRECTION
;
742 (DDKAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
744 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
745 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
746 IN ULONG AlternativesCount
,
747 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
748 IN PDEVICE_OBJECT PhysicalDeviceObject
,
749 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
752 (DDKAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
754 IN PIO_RESOURCE_DESCRIPTOR Source
,
755 IN PDEVICE_OBJECT PhysicalDeviceObject
,
756 OUT PULONG TargetCount
,
757 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
759 typedef struct _TRANSLATOR_INTERFACE
{
763 PINTERFACE_REFERENCE InterfaceReference
;
764 PINTERFACE_DEREFERENCE InterfaceDereference
;
765 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
766 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
767 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
770 (DDKAPI
*pHalDeviceControl
)(
771 IN PDEVICE_HANDLER_OBJECT DeviceHandler
,
772 IN PDEVICE_OBJECT DeviceObject
,
773 IN ULONG ControlCode
,
774 IN OUT PVOID Buffer OPTIONAL
,
775 IN OUT PULONG BufferLength OPTIONAL
,
777 IN PDEVICE_CONTROL_COMPLETION CompletionRoutine
);
780 (FASTCALL
*pHalExamineMBR
)(
781 IN PDEVICE_OBJECT DeviceObject
,
783 IN ULONG MBRTypeIdentifier
,
787 (FASTCALL
*pHalIoAssignDriveLetters
)(
788 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
789 IN PSTRING NtDeviceName
,
790 OUT PUCHAR NtSystemPath
,
791 OUT PSTRING NtSystemPathString
);
794 (FASTCALL
*pHalIoReadPartitionTable
)(
795 IN PDEVICE_OBJECT DeviceObject
,
797 IN BOOLEAN ReturnRecognizedPartitions
,
798 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
801 (FASTCALL
*pHalIoSetPartitionInformation
)(
802 IN PDEVICE_OBJECT DeviceObject
,
804 IN ULONG PartitionNumber
,
805 IN ULONG PartitionType
);
808 (FASTCALL
*pHalIoWritePartitionTable
)(
809 IN PDEVICE_OBJECT DeviceObject
,
811 IN ULONG SectorsPerTrack
,
812 IN ULONG NumberOfHeads
,
813 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
816 (FASTCALL
*pHalHandlerForBus
)(
817 IN INTERFACE_TYPE InterfaceType
,
821 (FASTCALL
*pHalReferenceBusHandler
)(
822 IN PBUS_HANDLER BusHandler
);
825 (DDKAPI
*pHalQuerySystemInformation
)(
826 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
829 OUT PULONG ReturnedLength
);
832 (DDKAPI
*pHalSetSystemInformation
)(
833 IN HAL_SET_INFORMATION_CLASS InformationClass
,
838 (DDKAPI
*pHalQueryBusSlots
)(
839 IN PBUS_HANDLER BusHandler
,
841 OUT PULONG SlotNumbers
,
842 OUT PULONG ReturnedLength
);
845 (DDKAPI
*pHalInitPnpDriver
)(
849 (DDKAPI
*pHalInitPowerManagement
)(
850 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
851 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
853 typedef struct _DMA_ADAPTER
*
854 (DDKAPI
*pHalGetDmaAdapter
)(
856 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
857 OUT PULONG NumberOfMapRegisters
);
860 (DDKAPI
*pHalGetInterruptTranslator
)(
861 IN INTERFACE_TYPE ParentInterfaceType
,
862 IN ULONG ParentBusNumber
,
863 IN INTERFACE_TYPE BridgeInterfaceType
,
866 OUT PTRANSLATOR_INTERFACE Translator
,
867 OUT PULONG BridgeBusNumber
);
870 (DDKAPI
*pHalStartMirroring
)(
874 (DDKAPI
*pHalEndMirroring
)(
875 IN ULONG PassNumber
);
878 (DDKAPI
*pHalMirrorPhysicalMemory
)(
879 IN PHYSICAL_ADDRESS PhysicalAddress
,
880 IN LARGE_INTEGER NumberOfBytes
);
883 (DDKAPI
*pHalMirrorVerify
)(
884 IN PHYSICAL_ADDRESS PhysicalAddress
,
885 IN LARGE_INTEGER NumberOfBytes
);
888 (DDKAPI
*pHalEndOfBoot
)(
893 (DDKAPI
*pHalTranslateBusAddress
)(
894 IN INTERFACE_TYPE InterfaceType
,
896 IN PHYSICAL_ADDRESS BusAddress
,
897 IN OUT PULONG AddressSpace
,
898 OUT PPHYSICAL_ADDRESS TranslatedAddress
903 (DDKAPI
*pHalAssignSlotResources
)(
904 IN PUNICODE_STRING RegistryPath
,
905 IN PUNICODE_STRING DriverClassName OPTIONAL
,
906 IN PDRIVER_OBJECT DriverObject
,
907 IN PDEVICE_OBJECT DeviceObject
,
908 IN INTERFACE_TYPE BusType
,
911 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
916 (DDKAPI
*pHalHaltSystem
)(
922 (DDKAPI
*pHalResetDisplay
)(
928 (DDKAPI
*pHalVectorToIDTEntry
)(
934 (DDKAPI
*pHalFindBusAddressTranslation
)(
935 IN PHYSICAL_ADDRESS BusAddress
,
936 IN OUT PULONG AddressSpace
,
937 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
938 IN OUT PULONG_PTR Context
,
944 (DDKAPI
*pKdSetupPciDeviceForDebugging
)(
945 IN PVOID LoaderBlock OPTIONAL
,
946 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
951 (DDKAPI
*pKdReleasePciDeviceForDebugging
)(
952 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
957 (DDKAPI
*pKdGetAcpiTablePhase0
)(
958 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
964 (DDKAPI
*pKdCheckPowerButton
)(
970 (DDKAPI
*pHalGetInterruptVector
)(
971 IN INTERFACE_TYPE InterfaceType
,
973 IN ULONG BusInterruptLevel
,
974 IN ULONG BusInterruptVector
,
976 OUT PKAFFINITY Affinity
981 (DDKAPI
*pHalGetVectorInput
)(
983 IN KAFFINITY Affinity
,
985 OUT PKINTERRUPT_POLARITY Polarity
990 (DDKAPI
*pKdMapPhysicalMemory64
)(
991 IN PHYSICAL_ADDRESS PhysicalAddress
,
997 (DDKAPI
*pKdUnmapVirtualAddress
)(
998 IN PVOID VirtualAddress
,
1004 (DDKAPI
*pKdGetPciDataByOffset
)(
1006 IN ULONG SlotNumber
,
1014 (DDKAPI
*pKdSetPciDataByOffset
)(
1016 IN ULONG SlotNumber
,
1023 (DDKAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
1024 ULONG Columns
, ULONG Rows
);
1028 pHalQuerySystemInformation HalQuerySystemInformation
;
1029 pHalSetSystemInformation HalSetSystemInformation
;
1030 pHalQueryBusSlots HalQueryBusSlots
;
1032 pHalExamineMBR HalExamineMBR
;
1033 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
1034 pHalIoReadPartitionTable HalIoReadPartitionTable
;
1035 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
1036 pHalIoWritePartitionTable HalIoWritePartitionTable
;
1037 pHalHandlerForBus HalReferenceHandlerForBus
;
1038 pHalReferenceBusHandler HalReferenceBusHandler
;
1039 pHalReferenceBusHandler HalDereferenceBusHandler
;
1040 pHalInitPnpDriver HalInitPnpDriver
;
1041 pHalInitPowerManagement HalInitPowerManagement
;
1042 pHalGetDmaAdapter HalGetDmaAdapter
;
1043 pHalGetInterruptTranslator HalGetInterruptTranslator
;
1044 pHalStartMirroring HalStartMirroring
;
1045 pHalEndMirroring HalEndMirroring
;
1046 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
1047 pHalEndOfBoot HalEndOfBoot
;
1048 pHalMirrorVerify HalMirrorVerify
;
1049 } HAL_DISPATCH
, *PHAL_DISPATCH
;
1051 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTHAL_)
1052 extern NTSYSAPI PHAL_DISPATCH HalDispatchTable
;
1053 #define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable)
1055 extern __declspec(dllexport
) HAL_DISPATCH HalDispatchTable
;
1056 #define HALDISPATCH (&HalDispatchTable)
1059 #define HAL_DISPATCH_VERSION 3
1060 #define HalDispatchTableVersion HALDISPATCH->Version
1061 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
1062 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
1063 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
1064 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
1065 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
1066 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
1067 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
1068 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
1069 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
1070 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
1071 #define HalStartMirroring HALDISPATCH->HalStartMirroring
1072 #define HalEndMirroring HALDISPATCH->HalEndMirroring
1073 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
1074 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
1075 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
1077 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1078 ULONG AlignmentRequirement
;
1079 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1081 typedef struct _FILE_NAME_INFORMATION
{
1082 ULONG FileNameLength
;
1084 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1087 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1088 ULONG FileAttributes
;
1090 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1092 typedef struct _FILE_DISPOSITION_INFORMATION
{
1094 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1096 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1097 LARGE_INTEGER EndOfFile
;
1098 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1100 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1101 LARGE_INTEGER ValidDataLength
;
1102 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1104 typedef union _FILE_SEGMENT_ELEMENT
{
1106 ULONGLONG Alignment
;
1107 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1109 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
1111 typedef struct _KEY_USER_FLAGS_INFORMATION
{
1113 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
1115 #define PCI_ADDRESS_MEMORY_SPACE 0x00000000
1117 typedef struct _OSVERSIONINFOA
{
1118 ULONG dwOSVersionInfoSize
;
1119 ULONG dwMajorVersion
;
1120 ULONG dwMinorVersion
;
1121 ULONG dwBuildNumber
;
1123 CHAR szCSDVersion
[128];
1124 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
1126 typedef struct _OSVERSIONINFOW
{
1127 ULONG dwOSVersionInfoSize
;
1128 ULONG dwMajorVersion
;
1129 ULONG dwMinorVersion
;
1130 ULONG dwBuildNumber
;
1132 WCHAR szCSDVersion
[128];
1133 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
1136 typedef OSVERSIONINFOW OSVERSIONINFO
;
1137 typedef POSVERSIONINFOW POSVERSIONINFO
;
1138 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
1140 typedef OSVERSIONINFOA OSVERSIONINFO
;
1141 typedef POSVERSIONINFOA POSVERSIONINFO
;
1142 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
1145 typedef struct _OSVERSIONINFOEXA
{
1146 ULONG dwOSVersionInfoSize
;
1147 ULONG dwMajorVersion
;
1148 ULONG dwMinorVersion
;
1149 ULONG dwBuildNumber
;
1151 CHAR szCSDVersion
[128];
1152 USHORT wServicePackMajor
;
1153 USHORT wServicePackMinor
;
1157 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
1159 typedef struct _OSVERSIONINFOEXW
{
1160 ULONG dwOSVersionInfoSize
;
1161 ULONG dwMajorVersion
;
1162 ULONG dwMinorVersion
;
1163 ULONG dwBuildNumber
;
1165 WCHAR szCSDVersion
[128];
1166 USHORT wServicePackMajor
;
1167 USHORT wServicePackMinor
;
1171 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
1174 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
1175 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
1176 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
1178 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
1179 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
1180 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
1186 VerSetConditionMask(
1187 IN ULONGLONG ConditionMask
,
1189 IN UCHAR Condition
);
1191 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
1192 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
1193 (TypeBitMask), (ComparisonType)))
1195 /* RtlVerifyVersionInfo() TypeMask */
1197 #define VER_MINORVERSION 0x0000001
1198 #define VER_MAJORVERSION 0x0000002
1199 #define VER_BUILDNUMBER 0x0000004
1200 #define VER_PLATFORMID 0x0000008
1201 #define VER_SERVICEPACKMINOR 0x0000010
1202 #define VER_SERVICEPACKMAJOR 0x0000020
1203 #define VER_SUITENAME 0x0000040
1204 #define VER_PRODUCT_TYPE 0x0000080
1206 /* RtlVerifyVersionInfo() ComparisonType */
1209 #define VER_GREATER 2
1210 #define VER_GREATER_EQUAL 3
1212 #define VER_LESS_EQUAL 5
1216 #define VER_CONDITION_MASK 7
1217 #define VER_NUM_BITS_PER_CONDITION_MASK 3
1222 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
) (
1224 struct _RTL_RANGE
*Range
1227 typedef struct _CONFIGURATION_INFORMATION
{
1232 ULONG ScsiPortCount
;
1234 ULONG ParallelCount
;
1235 BOOLEAN AtDiskPrimaryAddressClaimed
;
1236 BOOLEAN AtDiskSecondaryAddressClaimed
;
1238 ULONG MediumChangerCount
;
1239 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
1241 typedef enum _CONFIGURATION_TYPE
{
1244 FloatingPointProcessor
,
1254 MultiFunctionAdapter
,
1268 FloppyDiskPeripheral
,
1281 RealModeIrqRoutingTable
,
1282 RealModePCIEnumeration
,
1284 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
1287 (DDKAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
1289 IN PUNICODE_STRING PathName
,
1290 IN INTERFACE_TYPE BusType
,
1292 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
1293 IN CONFIGURATION_TYPE ControllerType
,
1294 IN ULONG ControllerNumber
,
1295 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
1296 IN CONFIGURATION_TYPE PeripheralType
,
1297 IN ULONG PeripheralNumber
,
1298 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
1300 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
1301 IoQueryDeviceIdentifier
= 0,
1302 IoQueryDeviceConfigurationData
,
1303 IoQueryDeviceComponentInformation
,
1304 IoQueryDeviceMaxData
1305 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
1308 (DDKAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
1310 IN HANDLE ProcessId
,
1314 (DDKAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
1315 IN HANDLE ProcessId
,
1319 typedef struct _IMAGE_INFO
{
1320 _ANONYMOUS_UNION
union {
1322 _ANONYMOUS_STRUCT
struct {
1323 ULONG ImageAddressingMode
: 8;
1324 ULONG SystemModeImage
: 1;
1325 ULONG ImageMappedToAllPids
: 1;
1326 ULONG Reserved
: 22;
1330 ULONG ImageSelector
;
1332 ULONG ImageSectionNumber
;
1333 } IMAGE_INFO
, *PIMAGE_INFO
;
1335 #define IMAGE_ADDRESSING_MODE_32BIT 3
1338 (DDKAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
1339 IN PUNICODE_STRING FullImageName
,
1340 IN HANDLE ProcessId
,
1341 IN PIMAGE_INFO ImageInfo
);
1343 #pragma pack(push,4)
1344 typedef enum _BUS_DATA_TYPE
{
1345 ConfigurationSpaceUndefined
= -1,
1353 PCMCIAConfiguration
,
1356 PNPISAConfiguration
,
1357 SgiInternalConfiguration
,
1359 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
1362 typedef struct _NT_TIB
{
1363 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
1367 _ANONYMOUS_UNION
union {
1371 PVOID ArbitraryUserPointer
;
1372 struct _NT_TIB
*Self
;
1375 typedef struct _NT_TIB32
{
1376 ULONG ExceptionList
;
1380 __GNU_EXTENSION
union {
1384 ULONG ArbitraryUserPointer
;
1386 } NT_TIB32
,*PNT_TIB32
;
1388 typedef struct _NT_TIB64
{
1389 ULONG64 ExceptionList
;
1392 ULONG64 SubSystemTib
;
1393 __GNU_EXTENSION
union {
1397 ULONG64 ArbitraryUserPointer
;
1399 } NT_TIB64
,*PNT_TIB64
;
1401 typedef enum _PROCESSINFOCLASS
{
1402 ProcessBasicInformation
,
1407 ProcessBasePriority
,
1408 ProcessRaisePriority
,
1410 ProcessExceptionPort
,
1412 ProcessLdtInformation
,
1414 ProcessDefaultHardErrorMode
,
1415 ProcessIoPortHandlers
,
1416 ProcessPooledUsageAndLimits
,
1417 ProcessWorkingSetWatch
,
1418 ProcessUserModeIOPL
,
1419 ProcessEnableAlignmentFaultFixup
,
1420 ProcessPriorityClass
,
1421 ProcessWx86Information
,
1423 ProcessAffinityMask
,
1424 ProcessPriorityBoost
,
1426 ProcessSessionInformation
,
1427 ProcessForegroundInformation
,
1428 ProcessWow64Information
,
1429 ProcessImageFileName
,
1430 ProcessLUIDDeviceMapsEnabled
,
1431 ProcessBreakOnTermination
,
1432 ProcessDebugObjectHandle
,
1434 ProcessHandleTracing
,
1436 ProcessExecuteFlags
,
1437 ProcessTlsInformation
,
1439 ProcessImageInformation
,
1441 ProcessPagePriority
,
1442 ProcessInstrumentationCallback
,
1446 typedef enum _THREADINFOCLASS
{
1447 ThreadBasicInformation
,
1452 ThreadImpersonationToken
,
1453 ThreadDescriptorTableEntry
,
1454 ThreadEnableAlignmentFaultFixup
,
1455 ThreadEventPair_Reusable
,
1456 ThreadQuerySetWin32StartAddress
,
1458 ThreadPerformanceCount
,
1459 ThreadAmILastThread
,
1460 ThreadIdealProcessor
,
1461 ThreadPriorityBoost
,
1462 ThreadSetTlsArrayAddress
,
1464 ThreadHideFromDebugger
,
1465 ThreadBreakOnTermination
,
1466 ThreadSwitchLegacyState
,
1468 ThreadLastSystemCall
,
1472 ThreadActualBasePriority
,
1476 typedef struct _PROCESS_BASIC_INFORMATION
1478 NTSTATUS ExitStatus
;
1479 struct _PEB
*PebBaseAddress
;
1480 ULONG_PTR AffinityMask
;
1481 KPRIORITY BasePriority
;
1482 ULONG_PTR UniqueProcessId
;
1483 ULONG_PTR InheritedFromUniqueProcessId
;
1484 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
1486 typedef struct _PROCESS_WS_WATCH_INFORMATION
1490 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
1492 typedef struct _PROCESS_DEVICEMAP_INFORMATION
1494 __GNU_EXTENSION
union
1498 HANDLE DirectoryHandle
;
1503 UCHAR DriveType
[32];
1506 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
1508 typedef struct _KERNEL_USER_TIMES
1510 LARGE_INTEGER CreateTime
;
1511 LARGE_INTEGER ExitTime
;
1512 LARGE_INTEGER KernelTime
;
1513 LARGE_INTEGER UserTime
;
1514 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1516 typedef struct _PROCESS_ACCESS_TOKEN
1520 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1522 typedef struct _PROCESS_SESSION_INFORMATION
1525 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1528 ** Storage structures
1530 typedef enum _PARTITION_STYLE
{
1531 PARTITION_STYLE_MBR
,
1532 PARTITION_STYLE_GPT
,
1536 typedef struct _CREATE_DISK_MBR
{
1538 } CREATE_DISK_MBR
, *PCREATE_DISK_MBR
;
1540 typedef struct _CREATE_DISK_GPT
{
1542 ULONG MaxPartitionCount
;
1543 } CREATE_DISK_GPT
, *PCREATE_DISK_GPT
;
1545 typedef struct _CREATE_DISK
{
1546 PARTITION_STYLE PartitionStyle
;
1547 _ANONYMOUS_UNION
union {
1548 CREATE_DISK_MBR Mbr
;
1549 CREATE_DISK_GPT Gpt
;
1551 } CREATE_DISK
, *PCREATE_DISK
;
1553 typedef struct _DISK_SIGNATURE
{
1554 ULONG PartitionStyle
;
1555 _ANONYMOUS_UNION
union {
1564 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
1567 (FASTCALL
*PTIME_UPDATE_NOTIFY_ROUTINE
)(
1569 IN KPROCESSOR_MODE Mode
);
1571 typedef struct _PHYSICAL_MEMORY_RANGE
{
1572 PHYSICAL_ADDRESS BaseAddress
;
1573 LARGE_INTEGER NumberOfBytes
;
1574 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
1577 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
1580 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
1581 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
1582 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
1583 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
1585 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1586 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1587 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1588 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1589 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1592 (DDKAPI
*PTIMER_APC_ROUTINE
)(
1593 IN PVOID TimerContext
,
1594 IN ULONG TimerLowValue
,
1595 IN LONG TimerHighValue
);
1598 ** Architecture specific structures
1600 #define PCR_MINOR_VERSION 1
1601 #define PCR_MAJOR_VERSION 1
1605 #define SIZE_OF_80387_REGISTERS 80
1606 #define CONTEXT_i386 0x10000
1607 #define CONTEXT_i486 0x10000
1608 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
1609 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
1610 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
1611 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
1612 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
1613 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
1614 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
1616 typedef struct _FLOATING_SAVE_AREA
{
1621 ULONG ErrorSelector
;
1624 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
1626 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
1628 typedef struct _CONTEXT
{
1636 FLOATING_SAVE_AREA FloatSave
;
1653 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
1656 typedef struct _KPCR_TIB
{
1657 PVOID ExceptionList
; /* 00 */
1658 PVOID StackBase
; /* 04 */
1659 PVOID StackLimit
; /* 08 */
1660 PVOID SubSystemTib
; /* 0C */
1661 _ANONYMOUS_UNION
union {
1662 PVOID FiberData
; /* 10 */
1663 ULONG Version
; /* 10 */
1665 PVOID ArbitraryUserPointer
; /* 14 */
1666 struct _KPCR_TIB
*Self
; /* 18 */
1667 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
1669 typedef struct _KPCR
{
1670 KPCR_TIB Tib
; /* 00 */
1671 struct _KPCR
*Self
; /* 1C */
1672 struct _KPRCB
*Prcb
; /* 20 */
1673 KIRQL Irql
; /* 24 */
1675 ULONG IrrActive
; /* 2C */
1677 PVOID KdVersionBlock
; /* 34 */
1678 PUSHORT IDT
; /* 38 */
1679 PUSHORT GDT
; /* 3C */
1680 struct _KTSS
*TSS
; /* 40 */
1681 USHORT MajorVersion
; /* 44 */
1682 USHORT MinorVersion
; /* 46 */
1683 KAFFINITY SetMember
; /* 48 */
1684 ULONG StallScaleFactor
; /* 4C */
1685 UCHAR SpareUnused
; /* 50 */
1686 UCHAR Number
; /* 51 */
1688 UCHAR SecondLevelCacheAssociativity
;
1690 ULONG KernelReserved
[14]; // For use by the kernel
1691 ULONG SecondLevelCacheSize
;
1692 ULONG HalReserved
[16]; // For use by Hal
1693 } KPCR
, *PKPCR
; /* 54 */
1695 #define KeGetPcr() PCR
1699 KeGetCurrentProcessorNumber(VOID
)
1701 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
1704 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1705 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1706 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
1708 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1709 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1710 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1711 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1712 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
1714 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
1715 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
1717 #elif defined(__x86_64__)
1719 #define CONTEXT_AMD64 0x100000
1720 #if !defined(RC_INVOKED)
1721 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
1722 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
1723 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
1724 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
1725 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
1727 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1728 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1730 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1731 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1732 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1733 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1736 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
1786 /* Floating point */
1788 XMM_SAVE_AREA32 FltSave
;
1812 M128A VectorRegister
[26];
1813 ULONG64 VectorControl
;
1816 ULONG64 DebugControl
;
1817 ULONG64 LastBranchToRip
;
1818 ULONG64 LastBranchFromRip
;
1819 ULONG64 LastExceptionToRip
;
1820 ULONG64 LastExceptionFromRip
;
1823 #define PAGE_SIZE 0x1000
1824 #define PAGE_SHIFT 12L
1825 #define PTI_SHIFT 12L
1826 #define PDI_SHIFT 21L
1827 #define PPI_SHIFT 30L
1828 #define PXI_SHIFT 39L
1829 #define PTE_PER_PAGE 512
1830 #define PDE_PER_PAGE 512
1831 #define PPE_PER_PAGE 512
1832 #define PXE_PER_PAGE 512
1833 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
1834 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
1835 #define PPI_MASK (PPE_PER_PAGE - 1)
1836 #define PXI_MASK (PXE_PER_PAGE - 1)
1838 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
1839 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
1840 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
1841 #define PDE_BASE 0xFFFFF6FB40000000ULL
1842 #define PTE_BASE 0xFFFFF68000000000ULL
1843 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
1844 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
1845 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
1846 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
1848 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1849 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1850 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
1852 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1853 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1854 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1855 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1856 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
1857 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
1859 #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
1860 #define SharedInterruptTime (&SharedUserData->InterruptTime)
1861 #define SharedSystemTime (&SharedUserData->SystemTime)
1862 #define SharedTickCount (&SharedUserData->TickCount)
1864 #define KeQueryInterruptTime() \
1865 (*(volatile ULONG64*)SharedInterruptTime)
1866 #define KeQuerySystemTime(CurrentCount) \
1867 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
1868 #define KeQueryTickCount(CurrentCount) \
1869 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
1871 typedef struct _KPCR
1873 __GNU_EXTENSION
union
1876 __GNU_EXTENSION
struct
1878 union _KGDTENTRY64
*GdtBase
;
1879 struct _KTSS64
*TssBase
;
1882 struct _KPRCB
*CurrentPrcb
;
1883 PKSPIN_LOCK_QUEUE LockArray
;
1887 union _KIDTENTRY64
*IdtBase
;
1890 UCHAR SecondLevelCacheAssociativity
;
1891 UCHAR ObsoleteNumber
;
1894 USHORT MajorVersion
;
1895 USHORT MinorVersion
;
1896 ULONG StallScaleFactor
;
1898 ULONG KernelReserved
[15];
1899 ULONG SecondLevelCacheSize
;
1900 ULONG HalReserved
[16];
1902 PVOID KdVersionBlock
;
1904 ULONG PcrAlign1
[24];
1907 typedef struct _KFLOATING_SAVE
{
1909 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
1915 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
1920 KeGetCurrentProcessorNumber(VOID
)
1922 return (ULONG
)__readgsword(0x184);
1925 #elif defined(__PowerPC__)
1928 // Used to contain PFNs and PFN counts
1930 typedef ULONG PFN_COUNT
;
1931 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
1932 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
1934 #define PASSIVE_LEVEL 0
1937 #define DISPATCH_LEVEL 2
1938 #define PROFILE_LEVEL 27
1939 #define CLOCK1_LEVEL 28
1940 #define CLOCK2_LEVEL 28
1941 #define IPI_LEVEL 29
1942 #define POWER_LEVEL 30
1943 #define HIGH_LEVEL 31
1945 typedef struct _KFLOATING_SAVE
{
1947 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
1949 typedef struct _KPCR_TIB
{
1950 PVOID ExceptionList
; /* 00 */
1951 PVOID StackBase
; /* 04 */
1952 PVOID StackLimit
; /* 08 */
1953 PVOID SubSystemTib
; /* 0C */
1954 _ANONYMOUS_UNION
union {
1955 PVOID FiberData
; /* 10 */
1956 ULONG Version
; /* 10 */
1958 PVOID ArbitraryUserPointer
; /* 14 */
1959 struct _KPCR_TIB
*Self
; /* 18 */
1960 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
1962 #define PCR_MINOR_VERSION 1
1963 #define PCR_MAJOR_VERSION 1
1965 typedef struct _KPCR
{
1966 KPCR_TIB Tib
; /* 00 */
1967 struct _KPCR
*Self
; /* 1C */
1968 struct _KPRCB
*Prcb
; /* 20 */
1969 KIRQL Irql
; /* 24 */
1971 ULONG IrrActive
; /* 2C */
1973 PVOID KdVersionBlock
; /* 34 */
1974 PUSHORT IDT
; /* 38 */
1975 PUSHORT GDT
; /* 3C */
1976 struct _KTSS
*TSS
; /* 40 */
1977 USHORT MajorVersion
; /* 44 */
1978 USHORT MinorVersion
; /* 46 */
1979 KAFFINITY SetMember
; /* 48 */
1980 ULONG StallScaleFactor
; /* 4C */
1981 UCHAR SpareUnused
; /* 50 */
1982 UCHAR Number
; /* 51 */
1983 } KPCR
, *PKPCR
; /* 54 */
1985 #define KeGetPcr() PCR
1990 KeGetCurrentProcessorNumber(VOID
)
1993 __asm__
__volatile__ (
1996 : "i" (FIELD_OFFSET(KPCR
, Number
))
2001 #elif defined(_MIPS_)
2003 #error MIPS Headers are totally incorrect
2006 // Used to contain PFNs and PFN counts
2008 typedef ULONG PFN_COUNT
;
2009 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
2010 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
2012 #define PASSIVE_LEVEL 0
2014 #define DISPATCH_LEVEL 2
2015 #define PROFILE_LEVEL 27
2016 #define IPI_LEVEL 29
2017 #define HIGH_LEVEL 31
2019 typedef struct _KPCR
{
2020 struct _KPRCB
*Prcb
; /* 20 */
2021 KIRQL Irql
; /* 24 */
2026 #define KeGetPcr() PCR
2028 typedef struct _KFLOATING_SAVE
{
2029 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
2034 KeGetCurrentProcessorNumber(VOID
)
2039 #elif defined(_M_ARM)
2042 // NT-ARM is not documented, need DDK-ARM
2047 #error Unknown architecture
2050 typedef enum _INTERLOCKED_RESULT
{
2051 ResultNegative
= RESULT_NEGATIVE
,
2052 ResultZero
= RESULT_ZERO
,
2053 ResultPositive
= RESULT_POSITIVE
2054 } INTERLOCKED_RESULT
;
2057 (NTAPI
*PciPin2Line
)(
2058 IN
struct _BUS_HANDLER
*BusHandler
,
2059 IN
struct _BUS_HANDLER
*RootHandler
,
2060 IN PCI_SLOT_NUMBER SlotNumber
,
2061 IN PPCI_COMMON_CONFIG PciData
2065 (NTAPI
*PciLine2Pin
)(
2066 IN
struct _BUS_HANDLER
*BusHandler
,
2067 IN
struct _BUS_HANDLER
*RootHandler
,
2068 IN PCI_SLOT_NUMBER SlotNumber
,
2069 IN PPCI_COMMON_CONFIG PciNewData
,
2070 IN PPCI_COMMON_CONFIG PciOldData
2074 (NTAPI
*PciReadWriteConfig
)(
2075 IN
struct _BUS_HANDLER
*BusHandler
,
2076 IN PCI_SLOT_NUMBER Slot
,
2082 #define PCI_DATA_TAG ' ICP'
2083 #define PCI_DATA_VERSION 1
2085 typedef struct _PCIBUSDATA
2089 PciReadWriteConfig ReadConfig
;
2090 PciReadWriteConfig WriteConfig
;
2091 PciPin2Line Pin2Line
;
2092 PciLine2Pin Line2Pin
;
2093 PCI_SLOT_NUMBER ParentSlot
;
2095 } PCIBUSDATA
, *PPCIBUSDATA
;
2098 /** SPINLOCK FUNCTIONS ********************************************************/
2102 #if defined(WIN9X_COMPAT_SPINLOCK)
2107 KeInitializeSpinLock(
2108 IN PKSPIN_LOCK SpinLock
2115 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
2117 /* Clear the lock */
2127 IN PKSPIN_LOCK SpinLock
);
2133 IN PKSPIN_LOCK SpinLock
,
2139 KefAcquireSpinLockAtDpcLevel(
2140 IN PKSPIN_LOCK SpinLock
);
2145 KefReleaseSpinLockFromDpcLevel(
2146 IN PKSPIN_LOCK SpinLock
);
2148 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
2149 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
2150 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
2151 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
2153 #define KeGetDcacheFillSize() 1L
2155 #elif defined(_M_ARM) // !defined (_X86_)
2159 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
2161 /* Clear the lock */
2169 IN PKSPIN_LOCK SpinLock
);
2175 IN PKSPIN_LOCK SpinLock
,
2182 KefAcquireSpinLockAtDpcLevel(
2183 IN PKSPIN_LOCK SpinLock
);
2188 KefReleaseSpinLockFromDpcLevel(
2189 IN PKSPIN_LOCK SpinLock
);
2192 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
2193 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
2194 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
2195 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
2200 KeInitializeSpinLock(
2201 IN PKSPIN_LOCK SpinLock
);
2208 KeInitializeSpinLock(
2209 PKSPIN_LOCK SpinLock
)
2217 IN PKSPIN_LOCK SpinLock
,
2222 KeAcquireSpinLockAtDpcLevel(
2223 IN PKSPIN_LOCK SpinLock
);
2227 KeReleaseSpinLockFromDpcLevel(
2228 IN PKSPIN_LOCK SpinLock
);
2232 KeAcquireSpinLockRaiseToDpc(
2233 IN PKSPIN_LOCK SpinLock
);
2235 #define KeAcquireSpinLock(SpinLock, OldIrql) \
2236 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
2238 #endif // !defined (_X86_)
2240 #define ARGUMENT_PRESENT(ArgumentPointer) \
2241 ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL)
2248 IN ULONG Base OPTIONAL
,
2249 IN OUT PULONG Value
);
2257 BOOLEAN CaseInSensitive
);
2259 #if !defined(MIDL_PASS)
2264 RtlConvertLongToLuid(
2270 Temp
.QuadPart
= Val
;
2271 Luid
.LowPart
= Temp
.u
.LowPart
;
2272 Luid
.HighPart
= Temp
.u
.HighPart
;
2280 RtlConvertUlongToLuid(
2297 IN VOID UNALIGNED
*Destination
,
2298 IN CONST VOID UNALIGNED
*Source
,
2305 IN OUT PSTRING DestinationString
,
2306 IN PSTRING SourceString OPTIONAL
);
2314 IN BOOLEAN CaseInSensitive
);
2316 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
2317 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
2318 *CallersAddress = (PVOID)_ReturnAddress(); \
2319 *CallersCaller = NULL;
2324 RtlGetCallersAddress(
2325 OUT PVOID
*CallersAddress
,
2326 OUT PVOID
*CallersCaller
);
2333 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
2339 IN OUT PACCESS_MASK AccessMask
,
2340 IN PGENERIC_MAPPING GenericMapping
);
2345 RtlPrefixUnicodeString(
2346 IN PCUNICODE_STRING String1
,
2347 IN PCUNICODE_STRING String2
,
2348 IN BOOLEAN CaseInSensitive
);
2353 RtlUpcaseUnicodeString(
2354 IN OUT PUNICODE_STRING DestinationString OPTIONAL
,
2355 IN PCUNICODE_STRING SourceString
,
2356 IN BOOLEAN AllocateDestinationString
);
2368 IN OUT PSTRING DestinationString
,
2369 IN PSTRING SourceString
);
2374 RtlVerifyVersionInfo(
2375 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
2377 IN ULONGLONG ConditionMask
);
2382 RtlVolumeDeviceToDosName(
2383 IN PVOID VolumeDeviceObject
,
2384 OUT PUNICODE_STRING DosName
);
2394 /******************************************************************************
2396 ******************************************************************************/
2398 typedef struct _ZONE_SEGMENT_HEADER
{
2399 SINGLE_LIST_ENTRY SegmentList
;
2401 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
2403 typedef struct _ZONE_HEADER
{
2404 SINGLE_LIST_ENTRY FreeList
;
2405 SINGLE_LIST_ENTRY SegmentList
;
2407 ULONG TotalSegmentSize
;
2408 } ZONE_HEADER
, *PZONE_HEADER
;
2410 #define PROTECTED_POOL 0x80000000
2412 /******************************************************************************
2413 * Executive Functions *
2414 ******************************************************************************/
2420 IN PZONE_HEADER Zone
,
2422 IN ULONG SegmentSize
);
2424 static __inline PVOID
2426 IN PZONE_HEADER Zone
)
2428 if (Zone
->FreeList
.Next
)
2429 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
2430 return (PVOID
) Zone
->FreeList
.Next
;
2433 static __inline PVOID
2435 IN PZONE_HEADER Zone
,
2438 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
2439 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
2440 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
2447 IN PZONE_HEADER Zone
,
2449 IN PVOID InitialSegment
,
2450 IN ULONG InitialSegmentSize
);
2454 * ExInterlockedAllocateFromZone(
2455 * IN PZONE_HEADER Zone,
2456 * IN PKSPIN_LOCK Lock)
2458 #define ExInterlockedAllocateFromZone(Zone, Lock) \
2459 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
2464 ExInterlockedExtendZone(
2465 IN PZONE_HEADER Zone
,
2467 IN ULONG SegmentSize
,
2468 IN PKSPIN_LOCK Lock
);
2471 * ExInterlockedFreeToZone(
2472 * IN PZONE_HEADER Zone,
2474 * IN PKSPIN_LOCK Lock);
2476 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
2477 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
2482 * IN PZONE_HEADER Zone)
2484 #define ExIsFullZone(Zone) \
2485 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
2488 * ExIsObjectInFirstZoneSegment(
2489 * IN PZONE_HEADER Zone,
2492 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
2493 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
2494 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
2495 (Zone)->TotalSegmentSize)) )
2501 ExRaiseAccessViolation(
2508 ExRaiseDatatypeMisalignment(
2517 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
2518 #define ExAcquireResourceShared ExAcquireResourceSharedLite
2519 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
2520 #define ExDeleteResource ExDeleteResourceLite
2521 #define ExInitializeResource ExInitializeResourceLite
2522 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
2523 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
2524 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
2525 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
2527 /** Filesystem runtime library routines **/
2532 FsRtlIsTotalDeviceFailure(
2533 IN NTSTATUS Status
);
2535 /** Hardware abstraction layer routines **/
2541 IN ULONG Frequency
);
2547 IN PDEVICE_OBJECT DeviceObject
,
2548 IN ULONG SectorSize
,
2549 IN ULONG MBRTypeIdentifier
,
2555 PADAPTER_OBJECT AdapterObject
2558 /** I/O manager routines **/
2563 IoAllocateController(
2564 IN PCONTROLLER_OBJECT ControllerObject
,
2565 IN PDEVICE_OBJECT DeviceObject
,
2566 IN PDRIVER_CONTROL ExecutionRoutine
,
2570 * VOID IoAssignArcName(
2571 * IN PUNICODE_STRING ArcName,
2572 * IN PUNICODE_STRING DeviceName);
2574 #define IoAssignArcName(_ArcName, _DeviceName) ( \
2575 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
2581 IN PDEVICE_OBJECT DeviceObject
,
2582 IN PFILE_OBJECT FileObject
);
2594 IN PDEVICE_OBJECT DeviceObject
,
2595 IN PCREATE_DISK Disk
);
2601 OUT PHANDLE FileHandle
,
2602 IN ACCESS_MASK DesiredAccess
,
2603 IN POBJECT_ATTRIBUTES ObjectAttributes
,
2604 OUT PIO_STATUS_BLOCK IoStatusBlock
,
2605 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
2606 IN ULONG FileAttributes
,
2607 IN ULONG ShareAccess
,
2608 IN ULONG Disposition
,
2609 IN ULONG CreateOptions
,
2610 IN PVOID EaBuffer OPTIONAL
,
2612 IN CREATE_FILE_TYPE CreateFileType
,
2613 IN PVOID ExtraCreateParameters OPTIONAL
,
2619 IoCreateNotificationEvent(
2620 IN PUNICODE_STRING EventName
,
2621 OUT PHANDLE EventHandle
);
2626 IoCreateSymbolicLink(
2627 IN PUNICODE_STRING SymbolicLinkName
,
2628 IN PUNICODE_STRING DeviceName
);
2633 IoCreateSynchronizationEvent(
2634 IN PUNICODE_STRING EventName
,
2635 OUT PHANDLE EventHandle
);
2640 IoCreateUnprotectedSymbolicLink(
2641 IN PUNICODE_STRING SymbolicLinkName
,
2642 IN PUNICODE_STRING DeviceName
);
2649 IN PIO_CSQ_INSERT_IRP CsqInsertIrp
,
2650 IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
2651 IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
2652 IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
2653 IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
2654 IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
2662 IN PIO_CSQ_IRP_CONTEXT Context
);
2669 IN PIO_CSQ_IRP_CONTEXT Context
);
2676 IN PVOID PeekContext
);
2682 IN PCONTROLLER_OBJECT ControllerObject
);
2688 IN PDEVICE_OBJECT DeviceObject
);
2693 IoDeleteSymbolicLink(
2694 IN PUNICODE_STRING SymbolicLinkName
);
2698 * IoDeassignArcName(
2699 * IN PUNICODE_STRING ArcName)
2701 #define IoDeassignArcName IoDeleteSymbolicLink
2707 IN OUT PDEVICE_OBJECT TargetDevice
);
2712 IoDisconnectInterrupt(
2713 IN PKINTERRUPT InterruptObject
);
2718 IoForwardIrpSynchronously(
2719 IN PDEVICE_OBJECT DeviceObject
,
2722 #define IoForwardAndCatchIrp IoForwardIrpSynchronously
2728 IN PCONTROLLER_OBJECT ControllerObject
);
2733 IoFreeErrorLogEntry(
2752 IN PIO_WORKITEM pIOWorkItem
);
2757 IoGetAttachedDevice(
2758 IN PDEVICE_OBJECT DeviceObject
);
2763 IoGetAttachedDeviceReference(
2764 IN PDEVICE_OBJECT DeviceObject
);
2769 IoGetBootDiskInformation(
2770 IN OUT PBOOTDISK_INFORMATION BootDiskInformation
,
2774 PCONFIGURATION_INFORMATION
2776 IoGetConfigurationInformation(
2782 IoGetCurrentProcess(
2788 IoGetDeviceInterfaceAlias(
2789 IN PUNICODE_STRING SymbolicLinkName
,
2790 IN CONST GUID
*AliasInterfaceClassGuid
,
2791 OUT PUNICODE_STRING AliasSymbolicLinkName
);
2793 #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
2798 IoGetDeviceInterfaces(
2799 IN CONST GUID
*InterfaceClassGuid
,
2800 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
2802 OUT PWSTR
*SymbolicLinkList
);
2807 IoGetDeviceObjectPointer(
2808 IN PUNICODE_STRING ObjectName
,
2809 IN ACCESS_MASK DesiredAccess
,
2810 OUT PFILE_OBJECT
*FileObject
,
2811 OUT PDEVICE_OBJECT
*DeviceObject
);
2816 IoGetDeviceProperty(
2817 IN PDEVICE_OBJECT DeviceObject
,
2818 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
2819 IN ULONG BufferLength
,
2820 OUT PVOID PropertyBuffer
,
2821 OUT PULONG ResultLength
);
2826 IoGetDeviceToVerify(
2827 IN PETHREAD Thread
);
2833 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2834 IN PDEVICE_DESCRIPTION DeviceDescription
,
2835 IN OUT PULONG NumberOfMapRegisters
);
2840 IoGetDriverObjectExtension(
2841 IN PDRIVER_OBJECT DriverObject
,
2842 IN PVOID ClientIdentificationAddress
);
2847 IoGetFileObjectGenericMapping(
2852 * IoGetFunctionCodeFromCtlCode(
2853 * IN ULONG ControlCode)
2855 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \
2856 (((_ControlCode) >> 2) & 0x00000FFF)
2867 IoGetRelatedDeviceObject(
2868 IN PFILE_OBJECT FileObject
);
2874 OUT PULONG_PTR LowLimit
,
2875 OUT PULONG_PTR HighLimit
);
2879 IoGetRemainingStackSize(
2883 ULONG_PTR End
, Begin
;
2886 IoGetStackLimits(&Begin
, &End
);
2887 Result
= (ULONG_PTR
)(&End
) - Begin
;
2896 IN PKDEFERRED_ROUTINE DeferredRoutine
,
2897 IN PVOID DeferredContext
);
2901 * IoInitializeDpcRequest(
2902 * IN PDEVICE_OBJECT DeviceObject,
2903 * IN PIO_DPC_ROUTINE DpcRoutine)
2905 #define IoInitializeDpcRequest(_DeviceObject, \
2907 KeInitializeDpc(&(_DeviceObject)->Dpc, \
2908 (PKDEFERRED_ROUTINE) (_DpcRoutine), \
2916 IN USHORT PacketSize
,
2917 IN CCHAR StackSize
);
2922 IoInitializeRemoveLockEx(
2923 IN PIO_REMOVE_LOCK Lock
,
2924 IN ULONG AllocateTag
,
2925 IN ULONG MaxLockedMinutes
,
2926 IN ULONG HighWatermark
,
2927 IN ULONG RemlockSize
);
2930 * IoInitializeRemoveLock(
2931 * IN PIO_REMOVE_LOCK Lock,
2932 * IN ULONG AllocateTag,
2933 * IN ULONG MaxLockedMinutes,
2934 * IN ULONG HighWatermark)
2936 #define IoInitializeRemoveLock( \
2937 Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
2938 IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
2939 HighWatermark, sizeof(IO_REMOVE_LOCK))
2945 IN PDEVICE_OBJECT DeviceObject
,
2946 IN PIO_TIMER_ROUTINE TimerRoutine
,
2952 IoInvalidateDeviceRelations(
2953 IN PDEVICE_OBJECT DeviceObject
,
2954 IN DEVICE_RELATION_TYPE Type
);
2959 IoInvalidateDeviceState(
2960 IN PDEVICE_OBJECT PhysicalDeviceObject
);
2966 IN PIRP Irp OPTIONAL
);
2970 * IoIsErrorUserInduced(
2971 * IN NTSTATUS Status);
2973 #define IoIsErrorUserInduced(Status) \
2974 ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
2975 ((Status) == STATUS_IO_TIMEOUT) || \
2976 ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
2977 ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
2978 ((Status) == STATUS_VERIFY_REQUIRED) || \
2979 ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
2980 ((Status) == STATUS_WRONG_VOLUME)))
2985 IoIsWdmVersionAvailable(
2986 IN UCHAR MajorVersion
,
2987 IN UCHAR MinorVersion
);
2992 IoMakeAssociatedIrp(
2994 IN CCHAR StackSize
);
3001 #define IoMarkIrpPending(_Irp) \
3002 (IoGetCurrentIrpStackLocation(_Irp)->Control |= SL_PENDING_RETURNED)
3007 IoOpenDeviceInterfaceRegistryKey(
3008 IN PUNICODE_STRING SymbolicLinkName
,
3009 IN ACCESS_MASK DesiredAccess
,
3010 OUT PHANDLE DeviceInterfaceKey
);
3012 #define PLUGPLAY_REGKEY_DEVICE 1
3013 #define PLUGPLAY_REGKEY_DRIVER 2
3014 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
3019 IoOpenDeviceRegistryKey(
3020 IN PDEVICE_OBJECT DeviceObject
,
3021 IN ULONG DevInstKeyType
,
3022 IN ACCESS_MASK DesiredAccess
,
3023 OUT PHANDLE DevInstRegKey
);
3028 IoQueryDeviceDescription(
3029 IN PINTERFACE_TYPE BusType OPTIONAL
,
3030 IN PULONG BusNumber OPTIONAL
,
3031 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
3032 IN PULONG ControllerNumber OPTIONAL
,
3033 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
3034 IN PULONG PeripheralNumber OPTIONAL
,
3035 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
3042 IN PIO_WORKITEM pIOWorkItem
,
3043 IN PIO_WORKITEM_ROUTINE Routine
,
3044 IN WORK_QUEUE_TYPE QueueType
,
3052 IN PVPB Vpb OPTIONAL
,
3053 IN PDEVICE_OBJECT RealDeviceObject
);
3058 IoRaiseInformationalHardError(
3059 IN NTSTATUS ErrorStatus
,
3060 IN PUNICODE_STRING String OPTIONAL
,
3061 IN PKTHREAD Thread OPTIONAL
);
3066 IoReadDiskSignature(
3067 IN PDEVICE_OBJECT DeviceObject
,
3068 IN ULONG BytesPerSector
,
3069 OUT PDISK_SIGNATURE Signature
);
3074 IoReadPartitionTable(
3075 IN PDEVICE_OBJECT DeviceObject
,
3076 IN ULONG SectorSize
,
3077 IN BOOLEAN ReturnRecognizedPartitions
,
3078 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
3083 IoReadPartitionTableEx(
3084 IN PDEVICE_OBJECT DeviceObject
,
3085 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
3090 IoRegisterBootDriverReinitialization(
3091 IN PDRIVER_OBJECT DriverObject
,
3092 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
3098 IoRegisterBootDriverReinitialization(
3099 IN PDRIVER_OBJECT DriverObject
,
3100 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
3106 IoRegisterDeviceInterface(
3107 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3108 IN CONST GUID
*InterfaceClassGuid
,
3109 IN PUNICODE_STRING ReferenceString OPTIONAL
,
3110 OUT PUNICODE_STRING SymbolicLinkName
);
3115 IoRegisterDriverReinitialization(
3116 IN PDRIVER_OBJECT DriverObject
,
3117 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
3123 IoRegisterPlugPlayNotification(
3124 IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory
,
3125 IN ULONG EventCategoryFlags
,
3126 IN PVOID EventCategoryData OPTIONAL
,
3127 IN PDRIVER_OBJECT DriverObject
,
3128 IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine
,
3130 OUT PVOID
*NotificationEntry
);
3135 IoRegisterShutdownNotification(
3136 IN PDEVICE_OBJECT DeviceObject
);
3141 IoReleaseCancelSpinLock(
3147 IoReleaseRemoveLockAndWaitEx(
3148 IN PIO_REMOVE_LOCK RemoveLock
,
3150 IN ULONG RemlockSize
);
3155 IoReleaseRemoveLockEx(
3156 IN PIO_REMOVE_LOCK RemoveLock
,
3158 IN ULONG RemlockSize
);
3162 * IoReleaseRemoveLock(
3163 * IN PIO_REMOVE_LOCK RemoveLock,
3166 #define IoReleaseRemoveLock(_RemoveLock, \
3168 IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
3172 * IoReleaseRemoveLockAndWait(
3173 * IN PIO_REMOVE_LOCK RemoveLock,
3176 #define IoReleaseRemoveLockAndWait(_RemoveLock, \
3178 IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
3183 IoRemoveShareAccess(
3184 IN PFILE_OBJECT FileObject
,
3185 IN OUT PSHARE_ACCESS ShareAccess
);
3190 IoReportDetectedDevice(
3191 IN PDRIVER_OBJECT DriverObject
,
3192 IN INTERFACE_TYPE LegacyBusType
,
3194 IN ULONG SlotNumber
,
3195 IN PCM_RESOURCE_LIST ResourceList
,
3196 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
3197 IN BOOLEAN ResourceAssigned
,
3198 IN OUT PDEVICE_OBJECT
*DeviceObject
);
3203 IoReportResourceForDetection(
3204 IN PDRIVER_OBJECT DriverObject
,
3205 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
3206 IN ULONG DriverListSize OPTIONAL
,
3207 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
3208 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
3209 IN ULONG DeviceListSize OPTIONAL
,
3210 OUT PBOOLEAN ConflictDetected
);
3215 IoReportResourceUsage(
3216 IN PUNICODE_STRING DriverClassName OPTIONAL
,
3217 IN PDRIVER_OBJECT DriverObject
,
3218 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
3219 IN ULONG DriverListSize OPTIONAL
,
3220 IN PDEVICE_OBJECT DeviceObject
,
3221 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
3222 IN ULONG DeviceListSize OPTIONAL
,
3223 IN BOOLEAN OverrideConflict
,
3224 OUT PBOOLEAN ConflictDetected
);
3229 IoReportTargetDeviceChange(
3230 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3231 IN PVOID NotificationStructure
);
3236 IoReportTargetDeviceChangeAsynchronous(
3237 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3238 IN PVOID NotificationStructure
,
3239 IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL
,
3240 IN PVOID Context OPTIONAL
);
3245 IoRequestDeviceEject(
3246 IN PDEVICE_OBJECT PhysicalDeviceObject
);
3251 * IN PDEVICE_OBJECT DeviceObject,
3253 * IN PVOID Context);
3255 #define IoRequestDpc(DeviceObject, Irp, Context)( \
3256 KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
3263 IN NTSTATUS Status
);
3267 * IoSetCancelRoutine(
3269 * IN PDRIVER_CANCEL CancelRoutine)
3271 #define IoSetCancelRoutine(_Irp, \
3273 ((PDRIVER_CANCEL) InterlockedExchangePointer( \
3274 (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (_CancelRoutine)))
3278 * IoSetCompletionRoutine(
3280 * IN PIO_COMPLETION_ROUTINE CompletionRoutine,
3282 * IN BOOLEAN InvokeOnSuccess,
3283 * IN BOOLEAN InvokeOnError,
3284 * IN BOOLEAN InvokeOnCancel)
3286 #define IoSetCompletionRoutine(_Irp, \
3287 _CompletionRoutine, \
3293 PIO_STACK_LOCATION _IrpSp; \
3294 ASSERT((_InvokeOnSuccess) || (_InvokeOnError) || (_InvokeOnCancel) ? \
3295 (_CompletionRoutine) != NULL : TRUE); \
3296 _IrpSp = IoGetNextIrpStackLocation(_Irp); \
3297 _IrpSp->CompletionRoutine = (PIO_COMPLETION_ROUTINE)(_CompletionRoutine); \
3298 _IrpSp->Context = (_Context); \
3299 _IrpSp->Control = 0; \
3300 if (_InvokeOnSuccess) _IrpSp->Control = SL_INVOKE_ON_SUCCESS; \
3301 if (_InvokeOnError) _IrpSp->Control |= SL_INVOKE_ON_ERROR; \
3302 if (_InvokeOnCancel) _IrpSp->Control |= SL_INVOKE_ON_CANCEL; \
3308 IoSetCompletionRoutineEx(
3309 IN PDEVICE_OBJECT DeviceObject
,
3311 IN PIO_COMPLETION_ROUTINE CompletionRoutine
,
3313 IN BOOLEAN InvokeOnSuccess
,
3314 IN BOOLEAN InvokeOnError
,
3315 IN BOOLEAN InvokeOnCancel
);
3320 IoSetDeviceInterfaceState(
3321 IN PUNICODE_STRING SymbolicLinkName
,
3327 IoSetHardErrorOrVerifyDevice(
3329 IN PDEVICE_OBJECT DeviceObject
);
3333 * IoSetNextIrpStackLocation(
3336 #define IoSetNextIrpStackLocation(_Irp) \
3338 (_Irp)->CurrentLocation--; \
3339 (_Irp)->Tail.Overlay.CurrentStackLocation--; \
3345 IoSetPartitionInformation(
3346 IN PDEVICE_OBJECT DeviceObject
,
3347 IN ULONG SectorSize
,
3348 IN ULONG PartitionNumber
,
3349 IN ULONG PartitionType
);
3354 IoSetPartitionInformationEx(
3355 IN PDEVICE_OBJECT DeviceObject
,
3356 IN ULONG PartitionNumber
,
3357 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
3363 IN ACCESS_MASK DesiredAccess
,
3364 IN ULONG DesiredShareAccess
,
3365 IN OUT PFILE_OBJECT FileObject
,
3366 OUT PSHARE_ACCESS ShareAccess
);
3371 IoSetStartIoAttributes(
3372 IN PDEVICE_OBJECT DeviceObject
,
3373 IN BOOLEAN DeferredStartIo
,
3374 IN BOOLEAN NonCancelable
);
3379 IoSetSystemPartition(
3380 IN PUNICODE_STRING VolumeNameString
);
3385 IoSetThreadHardErrorMode(
3386 IN BOOLEAN EnableHardErrors
);
3391 * IN CCHAR StackSize)
3393 #define IoSizeOfIrp(_StackSize) \
3394 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
3398 * IoSkipCurrentIrpStackLocation(
3401 #define IoSkipCurrentIrpStackLocation(_Irp) \
3403 (_Irp)->CurrentLocation++; \
3404 (_Irp)->Tail.Overlay.CurrentStackLocation++; \
3411 IN PDEVICE_OBJECT DeviceObject
,
3412 IN BOOLEAN Cancelable
);
3417 IoStartNextPacketByKey(
3418 IN PDEVICE_OBJECT DeviceObject
,
3419 IN BOOLEAN Cancelable
,
3426 IN PDEVICE_OBJECT DeviceObject
,
3428 IN PULONG Key OPTIONAL
,
3429 IN PDRIVER_CANCEL CancelFunction OPTIONAL
);
3435 IN PDEVICE_OBJECT DeviceObject
);
3441 IN PDEVICE_OBJECT DeviceObject
);
3446 IoUnregisterPlugPlayNotification(
3447 IN PVOID NotificationEntry
);
3452 IoUnregisterShutdownNotification(
3453 IN PDEVICE_OBJECT DeviceObject
);
3458 IoUpdateShareAccess(
3459 IN PFILE_OBJECT FileObject
,
3460 IN OUT PSHARE_ACCESS ShareAccess
);
3465 IoVerifyPartitionTable(
3466 IN PDEVICE_OBJECT DeviceObject
,
3467 IN BOOLEAN FixErrors
);
3472 IoVolumeDeviceToDosName(
3473 IN PVOID VolumeDeviceObject
,
3474 OUT PUNICODE_STRING DosName
);
3479 IoWMIAllocateInstanceIds(
3481 IN ULONG InstanceCount
,
3482 OUT ULONG
*FirstInstanceId
);
3487 IoWMIDeviceObjectToProviderId(
3488 IN PDEVICE_OBJECT DeviceObject
);
3493 IoWMIDeviceObjectToInstanceName(
3494 IN PVOID DataBlockObject
,
3495 IN PDEVICE_OBJECT DeviceObject
,
3496 OUT PUNICODE_STRING InstanceName
);
3502 IN PVOID DataBlockObject
,
3503 IN PUNICODE_STRING InstanceName
,
3505 IN ULONG InBufferSize
,
3506 IN OUT PULONG OutBufferSize
,
3507 IN OUT PUCHAR InOutBuffer
);
3512 IoWMIHandleToInstanceName(
3513 IN PVOID DataBlockObject
,
3514 IN HANDLE FileHandle
,
3515 OUT PUNICODE_STRING InstanceName
);
3521 IN GUID
*DataBlockGuid
,
3522 IN ULONG DesiredAccess
,
3523 OUT PVOID
*DataBlockObject
);
3529 IN PVOID DataBlockObject
,
3530 IN OUT ULONG
*InOutBufferSize
,
3531 OUT PVOID OutBuffer
);
3536 IoWMIQueryAllDataMultiple(
3537 IN PVOID
*DataBlockObjectList
,
3538 IN ULONG ObjectCount
,
3539 IN OUT ULONG
*InOutBufferSize
,
3540 OUT PVOID OutBuffer
);
3545 IoWMIQuerySingleInstance(
3546 IN PVOID DataBlockObject
,
3547 IN PUNICODE_STRING InstanceName
,
3548 IN OUT ULONG
*InOutBufferSize
,
3549 OUT PVOID OutBuffer
);
3554 IoWMIQuerySingleInstanceMultiple(
3555 IN PVOID
*DataBlockObjectList
,
3556 IN PUNICODE_STRING InstanceNames
,
3557 IN ULONG ObjectCount
,
3558 IN OUT ULONG
*InOutBufferSize
,
3559 OUT PVOID OutBuffer
);
3564 IoWMIRegistrationControl(
3565 IN PDEVICE_OBJECT DeviceObject
,
3571 IoWMISetNotificationCallback(
3573 IN WMI_NOTIFICATION_CALLBACK Callback
,
3579 IoWMISetSingleInstance(
3580 IN PVOID DataBlockObject
,
3581 IN PUNICODE_STRING InstanceName
,
3583 IN ULONG ValueBufferSize
,
3584 IN PVOID ValueBuffer
);
3590 IN PVOID DataBlockObject
,
3591 IN PUNICODE_STRING InstanceName
,
3592 IN ULONG DataItemId
,
3594 IN ULONG ValueBufferSize
,
3595 IN PVOID ValueBuffer
);
3600 IoWMISuggestInstanceName(
3601 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
3602 IN PUNICODE_STRING SymbolicLinkName OPTIONAL
,
3603 IN BOOLEAN CombineNames
,
3604 OUT PUNICODE_STRING SuggestedInstanceName
);
3610 IN PVOID WnodeEventItem
);
3615 IoWriteErrorLogEntry(
3621 IoWritePartitionTable(
3622 IN PDEVICE_OBJECT DeviceObject
,
3623 IN ULONG SectorSize
,
3624 IN ULONG SectorsPerTrack
,
3625 IN ULONG NumberOfHeads
,
3626 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
3631 IoWritePartitionTableEx(
3632 IN PDEVICE_OBJECT DeviceObject
,
3633 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*PartitionBuffer
);
3637 /** Kernel routines **/
3639 #if defined (_M_AMD64)
3643 KeAcquireInStackQueuedSpinLock(
3644 IN PKSPIN_LOCK SpinLock
,
3645 IN PKLOCK_QUEUE_HANDLE LockHandle
);
3650 KeReleaseInStackQueuedSpinLock(
3651 IN PKLOCK_QUEUE_HANDLE LockHandle
);
3656 KeAcquireInStackQueuedSpinLock(
3657 IN PKSPIN_LOCK SpinLock
,
3658 IN PKLOCK_QUEUE_HANDLE LockHandle
);
3663 KeReleaseInStackQueuedSpinLock(
3664 IN PKLOCK_QUEUE_HANDLE LockHandle
);
3670 KeAcquireInStackQueuedSpinLockAtDpcLevel(
3671 IN PKSPIN_LOCK SpinLock
,
3672 IN PKLOCK_QUEUE_HANDLE LockHandle
);
3677 KeAcquireInterruptSpinLock(
3678 IN PKINTERRUPT Interrupt
);
3691 IN ULONG BugCheckCode
);
3698 IN ULONG BugCheckCode
,
3699 IN ULONG_PTR BugCheckParameter1
,
3700 IN ULONG_PTR BugCheckParameter2
,
3701 IN ULONG_PTR BugCheckParameter3
,
3702 IN ULONG_PTR BugCheckParameter4
);
3719 KeDelayExecutionThread(
3720 IN KPROCESSOR_MODE WaitMode
,
3721 IN BOOLEAN Alertable
,
3722 IN PLARGE_INTEGER Interval
);
3727 KeDeregisterBugCheckCallback(
3728 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
3733 KeEnterCriticalRegion(
3740 * IN BOOLEAN ReadOperation,
3741 * IN BOOLEAN DmaOperation)
3743 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
3745 #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
3746 #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
3747 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
3748 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
3760 KeFlushWriteBuffer(VOID
);
3765 KeGetRecommendedSharedDataAlignment(
3771 KeInitializeDeviceQueue(
3772 IN PKDEVICE_QUEUE DeviceQueue
);
3784 KeInitializeSemaphore(
3785 IN PRKSEMAPHORE Semaphore
,
3798 KeInitializeTimerEx(
3800 IN TIMER_TYPE Type
);
3805 KeInsertByKeyDeviceQueue(
3806 IN PKDEVICE_QUEUE DeviceQueue
,
3807 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
3813 KeInsertDeviceQueue(
3814 IN PKDEVICE_QUEUE DeviceQueue
,
3815 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
3822 IN PVOID SystemArgument1
,
3823 IN PVOID SystemArgument2
);
3828 KeLeaveCriticalRegion(
3838 volatile LONG Barrier
;
3839 #if defined(__GNUC__)
3840 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
3841 #elif defined(_MSC_VER)
3842 __asm xchg
[Barrier
], eax
3853 IN KPRIORITY Increment
,
3859 KeQueryActiveProcessors(
3866 KeQueryPerformanceCounter(
3867 OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL
);
3872 KeQueryPriorityThread(
3873 IN PRKTHREAD Thread
);
3878 KeQueryRuntimeThread(
3880 OUT PULONG UserTime
);
3882 #if !defined(_M_AMD64)
3886 KeQueryInterruptTime(
3893 OUT PLARGE_INTEGER CurrentTime
);
3899 OUT PLARGE_INTEGER TickCount
);
3905 KeQueryTimeIncrement(
3924 KeReadStateSemaphore(
3925 IN PRKSEMAPHORE Semaphore
);
3936 KeRegisterBugCheckCallback(
3937 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
3938 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
3941 IN PUCHAR Component
);
3946 KeRegisterNmiCallback(
3947 IN PNMI_CALLBACK CallbackRoutine
,
3954 KeDeregisterNmiCallback(
3961 KeReleaseInStackQueuedSpinLockFromDpcLevel(
3962 IN PKLOCK_QUEUE_HANDLE LockHandle
);
3967 KeReleaseInterruptSpinLock(
3968 IN PKINTERRUPT Interrupt
,
3982 IN PRKSEMAPHORE Semaphore
,
3983 IN KPRIORITY Increment
,
3988 PKDEVICE_QUEUE_ENTRY
3990 KeRemoveByKeyDeviceQueue(
3991 IN PKDEVICE_QUEUE DeviceQueue
,
3995 PKDEVICE_QUEUE_ENTRY
3997 KeRemoveDeviceQueue(
3998 IN PKDEVICE_QUEUE DeviceQueue
);
4003 KeRemoveEntryDeviceQueue(
4004 IN PKDEVICE_QUEUE DeviceQueue
,
4005 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
4022 KeRestoreFloatingPointState(
4023 IN PKFLOATING_SAVE FloatSave
);
4028 KeRevertToUserAffinityThread(VOID
);
4033 KeSaveFloatingPointState(
4034 OUT PKFLOATING_SAVE FloatSave
);
4039 KeSetBasePriorityThread(
4040 IN PRKTHREAD Thread
,
4048 IN KPRIORITY Increment
,
4056 IN KDPC_IMPORTANCE Importance
);
4061 KeSetPriorityThread(
4063 IN KPRIORITY Priority
);
4068 KeSetSystemAffinityThread(
4069 IN KAFFINITY Affinity
);
4074 KeSetTargetProcessorDpc(
4083 IN LARGE_INTEGER DueTime
,
4084 IN PKDPC Dpc OPTIONAL
);
4091 IN LARGE_INTEGER DueTime
,
4092 IN LONG Period OPTIONAL
,
4093 IN PKDPC Dpc OPTIONAL
);
4098 KeSetTimeUpdateNotifyRoutine(
4099 IN PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine
);
4104 KeStallExecutionProcessor(
4105 IN ULONG MicroSeconds
);
4110 KeSynchronizeExecution(
4111 IN PKINTERRUPT Interrupt
,
4112 IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
4113 IN PVOID SynchronizeContext
);
4118 KeWaitForMultipleObjects(
4121 IN WAIT_TYPE WaitType
,
4122 IN KWAIT_REASON WaitReason
,
4123 IN KPROCESSOR_MODE WaitMode
,
4124 IN BOOLEAN Alertable
,
4125 IN PLARGE_INTEGER Timeout OPTIONAL
,
4126 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL
);
4131 KeWaitForMutexObject(
4133 IN KWAIT_REASON WaitReason
,
4134 IN KPROCESSOR_MODE WaitMode
,
4135 IN BOOLEAN Alertable
,
4136 IN PLARGE_INTEGER Timeout OPTIONAL
);
4141 KeWaitForSingleObject(
4143 IN KWAIT_REASON WaitReason
,
4144 IN KPROCESSOR_MODE WaitMode
,
4145 IN BOOLEAN Alertable
,
4146 IN PLARGE_INTEGER Timeout OPTIONAL
);
4150 (NTAPI
*PKIPI_BROADCAST_WORKER
)(
4151 IN ULONG_PTR Argument
4158 IN PKIPI_BROADCAST_WORKER BroadcastFunction
,
4159 IN ULONG_PTR Context
4179 KeRaiseIrqlToDpcLevel(
4185 KeRaiseIrqlToSynchLevel(
4188 #define KeLowerIrql(a) KfLowerIrql(a)
4189 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
4191 #elif defined(_M_AMD64)
4195 KeGetCurrentIrql(VOID
)
4197 return (KIRQL
)__readcr8();
4202 KeLowerIrql(IN KIRQL NewIrql
)
4204 ASSERT(KeGetCurrentIrql() >= NewIrql
);
4205 __writecr8(NewIrql
);
4210 KfRaiseIrql(IN KIRQL NewIrql
)
4214 OldIrql
= __readcr8();
4215 ASSERT(OldIrql
<= NewIrql
);
4216 __writecr8(NewIrql
);
4219 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
4223 KeRaiseIrqlToDpcLevel(VOID
)
4225 return KfRaiseIrql(DISPATCH_LEVEL
);
4230 KeRaiseIrqlToSynchLevel(VOID
)
4232 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
4235 #elif defined(__PowerPC__)
4252 KeRaiseIrqlToDpcLevel(
4258 KeRaiseIrqlToSynchLevel(
4261 #define KeLowerIrql(a) KfLowerIrql(a)
4262 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
4264 #elif defined(_M_MIPS)
4266 #define KeLowerIrql(a) KfLowerIrql(a)
4267 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
4284 KeRaiseIrqlToDpcLevel(
4290 KeRaiseIrqlToSynchLevel(
4293 #elif defined(_M_ARM)
4310 OUT PKIRQL OldIrql
);
4315 KeRaiseIrqlToDpcLevel(
4321 KeRaiseIrqlToSynchLevel(
4326 /** Memory manager routines **/
4333 IN ULONG NumberOfBytes
);
4338 MmAllocateContiguousMemory(
4339 IN ULONG NumberOfBytes
,
4340 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
4345 MmAllocateContiguousMemorySpecifyCache(
4346 IN SIZE_T NumberOfBytes
,
4347 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
4348 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
4349 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
4350 IN MEMORY_CACHING_TYPE CacheType
);
4355 MmAllocateMappingAddress(
4356 IN SIZE_T NumberOfBytes
,
4362 MmAllocateNonCachedMemory(
4363 IN ULONG NumberOfBytes
);
4368 MmAllocatePagesForMdl(
4369 IN PHYSICAL_ADDRESS LowAddress
,
4370 IN PHYSICAL_ADDRESS HighAddress
,
4371 IN PHYSICAL_ADDRESS SkipBytes
,
4372 IN SIZE_T TotalBytes
);
4374 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
4378 MmAllocatePagesForMdlEx(
4379 IN PHYSICAL_ADDRESS LowAddress
,
4380 IN PHYSICAL_ADDRESS HighAddress
,
4381 IN PHYSICAL_ADDRESS SkipBytes
,
4382 IN SIZE_T TotalBytes
,
4383 IN MEMORY_CACHING_TYPE CacheType
,
4390 MmBuildMdlForNonPagedPool(
4391 IN OUT PMDL MemoryDescriptorList
);
4393 typedef enum _MMFLUSH_TYPE
{
4401 MmFlushImageSection(
4402 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
4403 IN MMFLUSH_TYPE FlushType
);
4408 MmFreeContiguousMemory(
4409 IN PVOID BaseAddress
);
4414 MmFreeContiguousMemorySpecifyCache(
4415 IN PVOID BaseAddress
,
4416 IN SIZE_T NumberOfBytes
,
4417 IN MEMORY_CACHING_TYPE CacheType
);
4422 MmFreeMappingAddress(
4423 IN PVOID BaseAddress
,
4429 MmFreeNonCachedMemory(
4430 IN PVOID BaseAddress
,
4431 IN SIZE_T NumberOfBytes
);
4437 IN PMDL MemoryDescriptorList
);
4441 * MmGetMdlByteCount(
4444 #define MmGetMdlByteCount(_Mdl) \
4449 * MmGetMdlByteOffset(
4452 #define MmGetMdlByteOffset(_Mdl) \
4453 ((_Mdl)->ByteOffset)
4460 #define MmGetMdlPfnArray(_Mdl) \
4461 ((PPFN_NUMBER) ((_Mdl) + 1))
4465 * MmGetMdlVirtualAddress(
4468 #define MmGetMdlVirtualAddress(_Mdl) \
4469 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
4474 MmGetPhysicalAddress(
4475 IN PVOID BaseAddress
);
4478 PPHYSICAL_MEMORY_RANGE
4480 MmGetPhysicalMemoryRanges(
4486 MmGetVirtualForPhysical(
4487 IN PHYSICAL_ADDRESS PhysicalAddress
);
4492 MmMapLockedPagesSpecifyCache(
4493 IN PMDL MemoryDescriptorList
,
4494 IN KPROCESSOR_MODE AccessMode
,
4495 IN MEMORY_CACHING_TYPE CacheType
,
4496 IN PVOID BaseAddress
,
4497 IN ULONG BugCheckOnFailure
,
4498 IN MM_PAGE_PRIORITY Priority
);
4503 MmMapLockedPagesWithReservedMapping(
4504 IN PVOID MappingAddress
,
4506 IN PMDL MemoryDescriptorList
,
4507 IN MEMORY_CACHING_TYPE CacheType
);
4512 MmMapUserAddressesToPage(
4513 IN PVOID BaseAddress
,
4514 IN SIZE_T NumberOfBytes
,
4515 IN PVOID PageAddress
);
4521 IN PHYSICAL_ADDRESS PhysicalAddress
,
4522 IN SIZE_T NumberOfBytes
,
4523 IN MEMORY_CACHING_TYPE CacheType
);
4528 MmMapViewInSessionSpace(
4530 OUT PVOID
*MappedBase
,
4531 IN OUT PSIZE_T ViewSize
);
4536 MmMapViewInSystemSpace(
4538 OUT PVOID
*MappedBase
,
4539 IN PSIZE_T ViewSize
);
4544 MmMarkPhysicalMemoryAsBad(
4545 IN PPHYSICAL_ADDRESS StartAddress
,
4546 IN OUT PLARGE_INTEGER NumberOfBytes
);
4551 MmMarkPhysicalMemoryAsGood(
4552 IN PPHYSICAL_ADDRESS StartAddress
,
4553 IN OUT PLARGE_INTEGER NumberOfBytes
);
4558 MmGetSystemRoutineAddress(
4559 IN PUNICODE_STRING SystemRoutineName
);
4563 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
4567 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, \
4569 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
4570 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
4575 * IN PMDL MemoryDescriptorList,
4579 #define MmInitializeMdl(_MemoryDescriptorList, \
4583 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
4584 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
4585 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
4586 (_MemoryDescriptorList)->MdlFlags = 0; \
4587 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
4588 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
4589 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
4596 IN PVOID VirtualAddress
);
4601 MmIsDriverVerifying(
4602 IN PDRIVER_OBJECT DriverObject
);
4607 MmIsThisAnNtAsSystem(
4613 MmIsVerifierEnabled(
4614 OUT PULONG VerifierFlags
);
4619 MmLockPagableDataSection(
4620 IN PVOID AddressWithinSection
);
4625 MmLockPagableImageSection(
4626 IN PVOID AddressWithinSection
);
4630 * MmLockPagableCodeSection(
4631 * IN PVOID AddressWithinSection)
4633 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
4638 MmLockPagableSectionByHandle(
4639 IN PVOID ImageSectionHandle
);
4645 IN PHYSICAL_ADDRESS PhysicalAddress
,
4646 IN ULONG NumberOfBytes
,
4647 IN MEMORY_CACHING_TYPE CacheEnable
);
4653 IN PMDL MemoryDescriptorList
,
4654 IN KPROCESSOR_MODE AccessMode
);
4659 MmLockPageableDataSection (
4660 IN PVOID AddressWithinSection
4666 MmUnlockPageableImageSection(
4667 IN PVOID ImageSectionHandle
4674 IN PVOID AddressWithinSection
);
4679 MmProbeAndLockProcessPages(
4680 IN OUT PMDL MemoryDescriptorList
,
4681 IN PEPROCESS Process
,
4682 IN KPROCESSOR_MODE AccessMode
,
4683 IN LOCK_OPERATION Operation
);
4688 MmProtectMdlSystemAddress(
4689 IN PMDL MemoryDescriptorList
,
4690 IN ULONG NewProtect
);
4696 IN PVOID BaseAddress
,
4697 IN PMDL MemoryDescriptorList
);
4702 MmUnmapViewInSessionSpace(
4703 IN PVOID MappedBase
);
4708 MmUnmapViewInSystemSpace(
4709 IN PVOID MappedBase
);
4714 MmUnsecureVirtualMemory(
4715 IN HANDLE SecureHandle
);
4719 * MmPrepareMdlForReuse(
4722 #define MmPrepareMdlForReuse(_Mdl) \
4724 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
4725 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
4726 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
4727 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
4728 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
4732 #define MmGetProcedureAddress(Address) (Address)
4737 MmProbeAndLockPages(
4738 IN OUT PMDL MemoryDescriptorList
,
4739 IN KPROCESSOR_MODE AccessMode
,
4740 IN LOCK_OPERATION Operation
);
4751 MmRemovePhysicalMemory(
4752 IN PPHYSICAL_ADDRESS StartAddress
,
4753 IN OUT PLARGE_INTEGER NumberOfBytes
);
4758 MmResetDriverPaging(
4759 IN PVOID AddressWithinSection
);
4764 MmSecureVirtualMemory(
4767 IN ULONG ProbeMode
);
4779 MmUnlockPagableImageSection(
4780 IN PVOID ImageSectionHandle
);
4786 IN PMDL MemoryDescriptorList
);
4792 IN PVOID BaseAddress
,
4793 IN SIZE_T NumberOfBytes
);
4798 MmUnmapReservedMapping(
4799 IN PVOID BaseAddress
,
4801 IN PMDL MemoryDescriptorList
);
4806 MmUnmapVideoDisplay(
4807 IN PVOID BaseAddress
,
4808 IN SIZE_T NumberOfBytes
);
4812 /** Object manager routines **/
4818 IN PACCESS_STATE AccessState
,
4819 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4821 IN POBJECT_TYPE Type
);
4826 ObDereferenceSecurityDescriptor(
4827 PSECURITY_DESCRIPTOR SecurityDescriptor
,
4833 ObfDereferenceObject(
4838 * ObDereferenceObject(
4841 #define ObDereferenceObject ObfDereferenceObject
4846 ObGetObjectSecurity(
4848 OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
4849 OUT PBOOLEAN MemoryAllocated
);
4856 IN PACCESS_STATE PassedAccessState OPTIONAL
,
4857 IN ACCESS_MASK DesiredAccess
,
4858 IN ULONG AdditionalReferences
,
4859 OUT PVOID
* ReferencedObject OPTIONAL
,
4860 OUT PHANDLE Handle
);
4871 ObLogSecurityDescriptor(
4872 IN PSECURITY_DESCRIPTOR InputSecurityDescriptor
,
4873 OUT PSECURITY_DESCRIPTOR
*OutputSecurityDescriptor
,
4877 * ObReferenceObject(
4880 #define ObReferenceObject ObfReferenceObject
4885 ObMakeTemporaryObject(
4892 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4893 IN POBJECT_TYPE ObjectType
,
4894 IN KPROCESSOR_MODE AccessMode
,
4895 IN PACCESS_STATE PassedAccessState
,
4896 IN ACCESS_MASK DesiredAccess
,
4897 IN OUT PVOID ParseContext OPTIONAL
,
4898 OUT PHANDLE Handle
);
4903 ObOpenObjectByPointer(
4905 IN ULONG HandleAttributes
,
4906 IN PACCESS_STATE PassedAccessState OPTIONAL
,
4907 IN ACCESS_MASK DesiredAccess OPTIONAL
,
4908 IN POBJECT_TYPE ObjectType OPTIONAL
,
4909 IN KPROCESSOR_MODE AccessMode
,
4910 OUT PHANDLE Handle
);
4915 ObQueryObjectAuditingByHandle(
4917 OUT PBOOLEAN GenerateOnClose
);
4922 ObReferenceObjectByHandle(
4924 IN ACCESS_MASK DesiredAccess
,
4925 IN POBJECT_TYPE ObjectType OPTIONAL
,
4926 IN KPROCESSOR_MODE AccessMode
,
4928 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
);
4933 ObReferenceObjectByName(
4934 IN PUNICODE_STRING ObjectPath
,
4935 IN ULONG Attributes
,
4936 IN PACCESS_STATE PassedAccessState OPTIONAL
,
4937 IN ACCESS_MASK DesiredAccess OPTIONAL
,
4938 IN POBJECT_TYPE ObjectType
,
4939 IN KPROCESSOR_MODE AccessMode
,
4940 IN OUT PVOID ParseContext OPTIONAL
,
4946 ObReferenceObjectByPointer(
4948 IN ACCESS_MASK DesiredAccess
,
4949 IN POBJECT_TYPE ObjectType
,
4950 IN KPROCESSOR_MODE AccessMode
);
4955 ObReferenceSecurityDescriptor(
4956 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4962 ObReleaseObjectSecurity(
4963 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4964 IN BOOLEAN MemoryAllocated
);
4968 /** Process manager routines **/
4973 PsCreateSystemProcess(
4974 IN PHANDLE ProcessHandle
,
4975 IN ACCESS_MASK DesiredAccess
,
4976 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4981 PsCreateSystemThread(
4982 OUT PHANDLE ThreadHandle
,
4983 IN ULONG DesiredAccess
,
4984 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
4985 IN HANDLE ProcessHandle OPTIONAL
,
4986 OUT PCLIENT_ID ClientId OPTIONAL
,
4987 IN PKSTART_ROUTINE StartRoutine
,
4988 IN PVOID StartContext
);
4992 * PsGetCurrentProcess(VOID)
4994 #define PsGetCurrentProcess IoGetCurrentProcess
4999 PsGetCurrentProcessId(
5004 * PsGetCurrentThread(VOID)
5006 #define PsGetCurrentThread() \
5007 ((PETHREAD) KeGetCurrentThread())
5012 PsGetCurrentThreadId(
5018 PsGetProcessId(PEPROCESS Process
);
5024 PULONG MajorVersion OPTIONAL
,
5025 PULONG MinorVersion OPTIONAL
,
5026 PULONG BuildNumber OPTIONAL
,
5027 PUNICODE_STRING CSDVersion OPTIONAL
);
5032 PsRemoveCreateThreadNotifyRoutine(
5033 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
5038 PsRemoveLoadImageNotifyRoutine(
5039 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
5044 PsSetCreateProcessNotifyRoutine(
5045 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
5051 PsSetCreateThreadNotifyRoutine(
5052 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
5057 PsSetLoadImageNotifyRoutine(
5058 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
5063 PsTerminateSystemThread(
5064 IN NTSTATUS ExitStatus
);
5066 extern NTSYSAPI PEPROCESS PsInitialSystemProcess
;
5069 /** Security reference monitor routines **/
5075 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5076 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
5077 IN BOOLEAN SubjectContextLocked
,
5078 IN ACCESS_MASK DesiredAccess
,
5079 IN ACCESS_MASK PreviouslyGrantedAccess
,
5080 OUT PPRIVILEGE_SET
*Privileges OPTIONAL
,
5081 IN PGENERIC_MAPPING GenericMapping
,
5082 IN KPROCESSOR_MODE AccessMode
,
5083 OUT PACCESS_MASK GrantedAccess
,
5084 OUT PNTSTATUS AccessStatus
);
5090 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
5091 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
5092 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
5093 IN BOOLEAN IsDirectoryObject
,
5094 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
5095 IN PGENERIC_MAPPING GenericMapping
,
5096 IN POOL_TYPE PoolType
);
5102 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
5103 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
5104 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
5105 IN GUID
*ObjectType OPTIONAL
,
5106 IN BOOLEAN IsDirectoryObject
,
5107 IN ULONG AutoInheritFlags
,
5108 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
5109 IN PGENERIC_MAPPING GenericMapping
,
5110 IN POOL_TYPE PoolType
);
5116 IN OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
);
5121 SeSinglePrivilegeCheck(
5122 LUID PrivilegeValue
,
5123 KPROCESSOR_MODE PreviousMode
);
5128 SeValidSecurityDescriptor(
5130 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
5134 /** NtXxx routines **/
5140 OUT PHANDLE ProcessHandle
,
5141 IN ACCESS_MASK DesiredAccess
,
5142 IN POBJECT_ATTRIBUTES ObjectAttributes
,
5143 IN PCLIENT_ID ClientId OPTIONAL
);
5148 NtQueryInformationProcess(
5149 IN HANDLE ProcessHandle
,
5150 IN PROCESSINFOCLASS ProcessInformationClass
,
5151 OUT PVOID ProcessInformation
,
5152 IN ULONG ProcessInformationLength
,
5153 OUT PULONG ReturnLength OPTIONAL
);
5157 /** NtXxx and ZwXxx routines **/
5163 IN HANDLE TimerHandle
,
5164 OUT PBOOLEAN CurrentState OPTIONAL
);
5181 ZwCreateDirectoryObject(
5182 OUT PHANDLE DirectoryHandle
,
5183 IN ACCESS_MASK DesiredAccess
,
5184 IN POBJECT_ATTRIBUTES ObjectAttributes
);
5190 OUT PHANDLE EventHandle
,
5191 IN ACCESS_MASK DesiredAccess
,
5192 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
5193 IN EVENT_TYPE EventType
,
5194 IN BOOLEAN InitialState
);
5200 OUT PHANDLE EventHandle
,
5201 IN ACCESS_MASK DesiredAccess
,
5202 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
5203 IN EVENT_TYPE EventType
,
5204 IN BOOLEAN InitialState
);
5210 OUT PHANDLE FileHandle
,
5211 IN ACCESS_MASK DesiredAccess
,
5212 IN POBJECT_ATTRIBUTES ObjectAttributes
,
5213 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5214 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
5215 IN ULONG FileAttributes
,
5216 IN ULONG ShareAccess
,
5217 IN ULONG CreateDisposition
,
5218 IN ULONG CreateOptions
,
5219 IN PVOID EaBuffer OPTIONAL
,
5226 OUT PHANDLE KeyHandle
,
5227 IN ACCESS_MASK DesiredAccess
,
5228 IN POBJECT_ATTRIBUTES ObjectAttributes
,
5229 IN ULONG TitleIndex
,
5230 IN PUNICODE_STRING Class OPTIONAL
,
5231 IN ULONG CreateOptions
,
5232 OUT PULONG Disposition OPTIONAL
);
5238 OUT PHANDLE TimerHandle
,
5239 IN ACCESS_MASK DesiredAccess
,
5240 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
5241 IN TIMER_TYPE TimerType
);
5247 IN HANDLE KeyHandle
);
5253 IN HANDLE KeyHandle
,
5254 IN PUNICODE_STRING ValueName
);
5259 NtDeviceIoControlFile(
5260 IN HANDLE DeviceHandle
,
5261 IN HANDLE Event OPTIONAL
,
5262 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
5263 IN PVOID UserApcContext OPTIONAL
,
5264 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5265 IN ULONG IoControlCode
,
5266 IN PVOID InputBuffer
,
5267 IN ULONG InputBufferSize
,
5268 OUT PVOID OutputBuffer
,
5269 IN ULONG OutputBufferSize
);
5274 ZwDeviceIoControlFile(
5275 IN HANDLE DeviceHandle
,
5276 IN HANDLE Event OPTIONAL
,
5277 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
5278 IN PVOID UserApcContext OPTIONAL
,
5279 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5280 IN ULONG IoControlCode
,
5281 IN PVOID InputBuffer
,
5282 IN ULONG InputBufferSize
,
5283 OUT PVOID OutputBuffer
,
5284 IN ULONG OutputBufferSize
);
5290 IN HANDLE KeyHandle
,
5292 IN KEY_INFORMATION_CLASS KeyInformationClass
,
5293 OUT PVOID KeyInformation
,
5295 OUT PULONG ResultLength
);
5300 ZwEnumerateValueKey(
5301 IN HANDLE KeyHandle
,
5303 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
5304 OUT PVOID KeyValueInformation
,
5306 OUT PULONG ResultLength
);
5312 IN HANDLE KeyHandle
);
5317 ZwMakeTemporaryObject(
5324 IN HANDLE SectionHandle
,
5325 IN HANDLE ProcessHandle
,
5326 IN OUT PVOID
*BaseAddress
,
5327 IN ULONG_PTR ZeroBits
,
5328 IN SIZE_T CommitSize
,
5329 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
5330 IN OUT PSIZE_T ViewSize
,
5331 IN SECTION_INHERIT InheritDisposition
,
5332 IN ULONG AllocationType
,
5339 IN HANDLE SectionHandle
,
5340 IN HANDLE ProcessHandle
,
5341 IN OUT PVOID
*BaseAddress
,
5342 IN ULONG_PTR ZeroBits
,
5343 IN SIZE_T CommitSize
,
5344 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
5345 IN OUT PSIZE_T ViewSize
,
5346 IN SECTION_INHERIT InheritDisposition
,
5347 IN ULONG AllocationType
,
5354 OUT PHANDLE FileHandle
,
5355 IN ACCESS_MASK DesiredAccess
,
5356 IN POBJECT_ATTRIBUTES ObjectAttributes
,
5357 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5358 IN ULONG ShareAccess
,
5359 IN ULONG OpenOptions
);
5365 OUT PHANDLE FileHandle
,
5366 IN ACCESS_MASK DesiredAccess
,
5367 IN POBJECT_ATTRIBUTES ObjectAttributes
,
5368 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5369 IN ULONG ShareAccess
,
5370 IN ULONG OpenOptions
);
5376 OUT PHANDLE KeyHandle
,
5377 IN ACCESS_MASK DesiredAccess
,
5378 IN POBJECT_ATTRIBUTES ObjectAttributes
);
5384 OUT PHANDLE SectionHandle
,
5385 IN ACCESS_MASK DesiredAccess
,
5386 IN POBJECT_ATTRIBUTES ObjectAttributes
);
5391 ZwOpenSymbolicLinkObject(
5392 OUT PHANDLE LinkHandle
,
5393 IN ACCESS_MASK DesiredAccess
,
5394 IN POBJECT_ATTRIBUTES ObjectAttributes
);
5400 OUT PHANDLE TimerHandle
,
5401 IN ACCESS_MASK DesiredAccess
,
5402 IN POBJECT_ATTRIBUTES ObjectAttributes
);
5407 ZwQueryInformationFile(
5408 IN HANDLE FileHandle
,
5409 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5410 OUT PVOID FileInformation
,
5412 IN FILE_INFORMATION_CLASS FileInformationClass
);
5418 IN HANDLE KeyHandle
,
5419 IN KEY_INFORMATION_CLASS KeyInformationClass
,
5420 OUT PVOID KeyInformation
,
5422 OUT PULONG ResultLength
);
5427 ZwQuerySymbolicLinkObject(
5428 IN HANDLE LinkHandle
,
5429 IN OUT PUNICODE_STRING LinkTarget
,
5430 OUT PULONG ReturnedLength OPTIONAL
);
5436 IN HANDLE KeyHandle
,
5437 IN PUNICODE_STRING ValueName
,
5438 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
5439 OUT PVOID KeyValueInformation
,
5441 OUT PULONG ResultLength
);
5447 IN HANDLE FileHandle
,
5448 IN HANDLE Event OPTIONAL
,
5449 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
5450 IN PVOID ApcContext OPTIONAL
,
5451 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5454 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
5455 IN PULONG Key OPTIONAL
);
5461 IN HANDLE FileHandle
,
5462 IN HANDLE Event OPTIONAL
,
5463 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
5464 IN PVOID ApcContext OPTIONAL
,
5465 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5468 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
5469 IN PULONG Key OPTIONAL
);
5475 IN HANDLE EventHandle
,
5476 OUT PLONG PreviousState OPTIONAL
);
5482 IN HANDLE EventHandle
,
5483 OUT PLONG PreviousState OPTIONAL
);
5488 ZwSetInformationFile(
5489 IN HANDLE FileHandle
,
5490 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5491 IN PVOID FileInformation
,
5493 IN FILE_INFORMATION_CLASS FileInformationClass
);
5498 ZwSetInformationThread(
5499 IN HANDLE ThreadHandle
,
5500 IN THREADINFOCLASS ThreadInformationClass
,
5501 IN PVOID ThreadInformation
,
5502 IN ULONG ThreadInformationLength
);
5508 IN HANDLE TimerHandle
,
5509 IN PLARGE_INTEGER DueTime
,
5510 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
5511 IN PVOID TimerContext OPTIONAL
,
5512 IN BOOLEAN WakeTimer
,
5513 IN LONG Period OPTIONAL
,
5514 OUT PBOOLEAN PreviousState OPTIONAL
);
5520 IN HANDLE KeyHandle
,
5521 IN PUNICODE_STRING ValueName
,
5522 IN ULONG TitleIndex OPTIONAL
,
5527 /* [Nt|Zw]MapViewOfSection.InheritDisposition constants */
5528 #define AT_EXTENDABLE_FILE 0x00002000
5529 #define AT_RESERVED 0x20000000
5530 #define AT_ROUND_TO_PAGE 0x40000000
5535 NtUnmapViewOfSection(
5536 IN HANDLE ProcessHandle
,
5537 IN PVOID BaseAddress
);
5542 ZwUnmapViewOfSection(
5543 IN HANDLE ProcessHandle
,
5544 IN PVOID BaseAddress
);
5549 NtWaitForSingleObject(
5550 IN HANDLE ObjectHandle
,
5551 IN BOOLEAN Alertable
,
5552 IN PLARGE_INTEGER TimeOut OPTIONAL
);
5557 ZwWaitForSingleObject(
5558 IN HANDLE ObjectHandle
,
5559 IN BOOLEAN Alertable
,
5560 IN PLARGE_INTEGER TimeOut OPTIONAL
);
5566 IN HANDLE FileHandle
,
5567 IN HANDLE Event OPTIONAL
,
5568 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
5569 IN PVOID ApcContext OPTIONAL
,
5570 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5573 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
5574 IN PULONG Key OPTIONAL
);
5580 IN HANDLE FileHandle
,
5581 IN HANDLE Event OPTIONAL
,
5582 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
5583 IN PVOID ApcContext OPTIONAL
,
5584 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5587 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
5588 IN PULONG Key OPTIONAL
);
5592 /** Power management support routines **/
5598 IN PDEVICE_OBJECT DeviceObject
,
5604 PoRegisterDeviceForIdleDetection(
5605 IN PDEVICE_OBJECT DeviceObject
,
5606 IN ULONG ConservationIdleTime
,
5607 IN ULONG PerformanceIdleTime
,
5608 IN DEVICE_POWER_STATE State
);
5613 PoRegisterSystemState(
5614 IN PVOID StateHandle
,
5615 IN EXECUTION_STATE Flags
);
5621 IN PDEVICE_OBJECT DeviceObject
,
5622 IN UCHAR MinorFunction
,
5623 IN POWER_STATE PowerState
,
5624 IN PREQUEST_POWER_COMPLETE CompletionFunction
,
5626 OUT PIRP
*Irp OPTIONAL
);
5631 PoRequestShutdownEvent(
5638 PULONG IdlePointer
);
5640 #define PoSetDeviceBusy(IdlePointer) \
5641 ((void)(*(IdlePointer) = 0))
5647 IN PDEVICE_OBJECT DeviceObject
,
5648 IN POWER_STATE_TYPE Type
,
5649 IN POWER_STATE State
);
5655 IN EXECUTION_STATE Flags
);
5660 PoStartNextPowerIrp(
5666 PoUnregisterSystemState(
5667 IN PVOID StateHandle
);
5671 /** WMI library support routines **/
5676 IN PDEVICE_OBJECT DeviceObject
,
5679 IN ULONG BufferUsed
,
5680 IN CCHAR PriorityBoost
);
5685 IN PDEVICE_OBJECT DeviceObject
,
5687 IN ULONG InstanceIndex
,
5688 IN ULONG EventDataSize
,
5689 IN PVOID EventData
);
5694 WmiQueryTraceInformation(
5695 IN TRACE_INFORMATION_CLASS TraceInformationClass
,
5696 OUT PVOID TraceInformation
,
5697 IN ULONG TraceInformationLength
,
5698 OUT PULONG RequiredLength OPTIONAL
,
5699 IN PVOID Buffer OPTIONAL
);
5704 IN PWMILIB_CONTEXT WmiLibInfo
,
5705 IN PDEVICE_OBJECT DeviceObject
,
5707 OUT PSYSCTL_IRP_DISPOSITION IrpDisposition
);
5713 IN TRACEHANDLE LoggerHandle
,
5714 IN ULONG MessageFlags
,
5715 IN LPGUID MessageGuid
,
5716 IN USHORT MessageNumber
,
5720 /* FIXME: Get va_list from where? */
5725 IN TRACEHANDLE LoggerHandle
,
5726 IN ULONG MessageFlags
,
5727 IN LPGUID MessageGuid
,
5728 IN USHORT MessageNumber
,
5729 IN
va_list MessageArgList
);
5733 /** Kernel debugger routines **/
5750 KdRefreshDebuggerNotPresent(
5754 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
5759 IN KD_OPTION Option
,
5760 IN ULONG InBufferBytes OPTIONAL
,
5762 IN ULONG OutBufferBytes OPTIONAL
,
5763 OUT PVOID OutBuffer
,
5764 OUT PULONG OutBufferNeeded OPTIONAL
);
5775 DbgBreakPointWithStatus(
5788 IN ULONG ComponentId
,
5796 IN ULONG ComponentId
,
5803 vDbgPrintExWithPrefix(
5805 IN ULONG ComponentId
,
5813 DbgPrintReturnControlC(
5822 IN ULONG MaximumResponseLength
5828 DbgQueryDebugFilterState(
5829 IN ULONG ComponentId
,
5835 DbgSetDebugFilterState(
5836 IN ULONG ComponentId
,
5842 #define KdPrint(_x_) DbgPrint _x_
5843 #define KdPrintEx(_x_) DbgPrintEx _x_
5844 #define KdBreakPoint() DbgBreakPoint()
5845 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
5849 #define KdPrint(_x_)
5850 #define KdPrintEx(_x_)
5851 #define KdBreakPoint()
5852 #define KdBreakPointWithStatus(s)
5856 #if defined(__GNUC__)
5858 extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent
;
5859 extern NTKERNELAPI BOOLEAN KdDebuggerEnabled
;
5860 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
5861 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
5863 #elif defined(_NTDDK_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
5865 extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent
;
5866 extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled
;
5867 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
5868 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
5872 extern BOOLEAN KdDebuggerNotPresent
;
5873 extern BOOLEAN KdDebuggerEnabled
;
5874 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
5875 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
5879 /** Stuff from winnt4.h */
5881 #ifndef DMA_MACROS_DEFINED
5883 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5885 //DECLSPEC_DEPRECATED_DDK
5889 IoFlushAdapterBuffers(
5890 IN PADAPTER_OBJECT AdapterObject
,
5892 IN PVOID MapRegisterBase
,
5895 IN BOOLEAN WriteToDevice
);
5897 //DECLSPEC_DEPRECATED_DDK
5901 IoFreeAdapterChannel(
5902 IN PADAPTER_OBJECT AdapterObject
);
5904 //DECLSPEC_DEPRECATED_DDK
5909 IN PADAPTER_OBJECT AdapterObject
,
5910 IN PVOID MapRegisterBase
,
5911 IN ULONG NumberOfMapRegisters
);
5913 //DECLSPEC_DEPRECATED_DDK
5918 IN PADAPTER_OBJECT AdapterObject
,
5920 IN PVOID MapRegisterBase
,
5922 IN OUT PULONG Length
,
5923 IN BOOLEAN WriteToDevice
);
5926 #endif // (NTDDI_VERSION >= NTDDI_WIN2K)
5927 #endif // !defined(DMA_MACROS_DEFINED)
5933 IN PUNICODE_STRING RegistryPath
,
5934 IN PUNICODE_STRING DriverClassName OPTIONAL
,
5935 IN PDRIVER_OBJECT DriverObject
,
5936 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
5937 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources
,
5938 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
5943 IoAttachDeviceByPointer(
5944 IN PDEVICE_OBJECT SourceDevice
,
5945 IN PDEVICE_OBJECT TargetDevice
);
5950 MmIsNonPagedSystemAddressValid(
5951 IN PVOID VirtualAddress
);
5953 #if defined(_AMD64_) || defined(_IA64_)
5954 //DECLSPEC_DEPRECATED_DDK_WINXP
5958 RtlLargeIntegerDivide(
5959 IN LARGE_INTEGER Dividend
,
5960 IN LARGE_INTEGER Divisor
,
5961 IN OUT PLARGE_INTEGER Remainder
)
5964 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
5966 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
5973 RtlLargeIntegerDivide(
5974 IN LARGE_INTEGER Dividend
,
5975 IN LARGE_INTEGER Divisor
,
5976 IN OUT PLARGE_INTEGER Remainder
);
5982 ExInterlockedDecrementLong(
5984 IN PKSPIN_LOCK Lock
);
5989 ExInterlockedExchangeUlong(
5992 IN PKSPIN_LOCK Lock
);
5997 ExInterlockedIncrementLong(
5999 IN PKSPIN_LOCK Lock
);
6004 HalAcquireDisplayOwnership(
6005 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
6010 HalAllocateAdapterChannel(
6011 IN PADAPTER_OBJECT AdapterObject
,
6012 IN PWAIT_CONTEXT_BLOCK Wcb
,
6013 IN ULONG NumberOfMapRegisters
,
6014 IN PDRIVER_CONTROL ExecutionRoutine
);
6019 HalAllocateCommonBuffer(
6020 IN PADAPTER_OBJECT AdapterObject
,
6022 OUT PPHYSICAL_ADDRESS LogicalAddress
,
6023 IN BOOLEAN CacheEnabled
);
6028 HalAssignSlotResources(
6029 IN PUNICODE_STRING RegistryPath
,
6030 IN PUNICODE_STRING DriverClassName
,
6031 IN PDRIVER_OBJECT DriverObject
,
6032 IN PDEVICE_OBJECT DeviceObject
,
6033 IN INTERFACE_TYPE BusType
,
6035 IN ULONG SlotNumber
,
6036 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
6041 HalFreeCommonBuffer(
6042 IN PADAPTER_OBJECT AdapterObject
,
6044 IN PHYSICAL_ADDRESS LogicalAddress
,
6045 IN PVOID VirtualAddress
,
6046 IN BOOLEAN CacheEnabled
);
6052 IN PDEVICE_DESCRIPTION DeviceDescription
,
6053 IN OUT PULONG NumberOfMapRegisters
);
6059 IN BUS_DATA_TYPE BusDataType
,
6061 IN ULONG SlotNumber
,
6068 HalGetBusDataByOffset(
6069 IN BUS_DATA_TYPE BusDataType
,
6071 IN ULONG SlotNumber
,
6079 HalGetDmaAlignmentRequirement(
6085 HalGetInterruptVector(
6086 IN INTERFACE_TYPE InterfaceType
,
6088 IN ULONG BusInterruptLevel
,
6089 IN ULONG BusInterruptVector
,
6091 OUT PKAFFINITY Affinity
);
6097 IN PADAPTER_OBJECT AdapterObject
);
6103 IN BUS_DATA_TYPE BusDataType
,
6105 IN ULONG SlotNumber
,
6112 HalSetBusDataByOffset(
6113 IN BUS_DATA_TYPE BusDataType
,
6115 IN ULONG SlotNumber
,
6123 HalTranslateBusAddress(
6124 IN INTERFACE_TYPE InterfaceType
,
6126 IN PHYSICAL_ADDRESS BusAddress
,
6127 IN OUT PULONG AddressSpace
,
6128 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
6133 RtlLargeIntegerEqualToZero(
6134 IN LARGE_INTEGER Operand
);
6139 RtlLargeIntegerGreaterOrEqualToZero(
6140 IN LARGE_INTEGER Operand
);
6145 RtlLargeIntegerGreaterThan(
6146 IN LARGE_INTEGER Operand1
,
6147 IN LARGE_INTEGER Operand2
);
6152 RtlLargeIntegerGreaterThanOrEqualTo(
6153 IN LARGE_INTEGER Operand1
,
6154 IN LARGE_INTEGER Operand2
);
6159 RtlLargeIntegerGreaterThanZero(
6160 IN LARGE_INTEGER Operand
);
6165 RtlLargeIntegerLessOrEqualToZero(
6166 IN LARGE_INTEGER Operand
);
6171 RtlLargeIntegerLessThan(
6172 IN LARGE_INTEGER Operand1
,
6173 IN LARGE_INTEGER Operand2
);
6178 RtlLargeIntegerLessThanOrEqualTo(
6179 IN LARGE_INTEGER Operand1
,
6180 IN LARGE_INTEGER Operand2
);
6185 RtlLargeIntegerLessThanZero(
6186 IN LARGE_INTEGER Operand
);
6191 RtlLargeIntegerNegate(
6192 IN LARGE_INTEGER Subtrahend
);
6197 RtlLargeIntegerNotEqualTo(
6198 IN LARGE_INTEGER Operand1
,
6199 IN LARGE_INTEGER Operand2
);
6204 RtlLargeIntegerNotEqualToZero(
6205 IN LARGE_INTEGER Operand
);
6210 RtlLargeIntegerShiftLeft(
6211 IN LARGE_INTEGER LargeInteger
,
6212 IN CCHAR ShiftCount
);
6217 RtlLargeIntegerShiftRight(
6218 IN LARGE_INTEGER LargeInteger
,
6219 IN CCHAR ShiftCount
);
6224 RtlLargeIntegerSubtract(
6225 IN LARGE_INTEGER Minuend
,
6226 IN LARGE_INTEGER Subtrahend
);
6231 * COMPUTE_PAGES_SPANNED(
6235 #define COMPUTE_PAGES_SPANNED(Va, \
6237 (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
6241 ** Architecture specific structures
6249 Exfi386InterlockedIncrementLong(
6255 Exfi386InterlockedDecrementLong(
6261 Exfi386InterlockedExchangeUlong(
6265 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
6266 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
6267 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
6273 // NT-ARM is not documented
6282 #endif /* __WINDDK_H */