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 enum _EVENT_TYPE
{
1229 SynchronizationEvent
1232 typedef struct _CONFIGURATION_INFORMATION
{
1237 ULONG ScsiPortCount
;
1239 ULONG ParallelCount
;
1240 BOOLEAN AtDiskPrimaryAddressClaimed
;
1241 BOOLEAN AtDiskSecondaryAddressClaimed
;
1243 ULONG MediumChangerCount
;
1244 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
1246 typedef enum _CONFIGURATION_TYPE
{
1249 FloatingPointProcessor
,
1259 MultiFunctionAdapter
,
1273 FloppyDiskPeripheral
,
1286 RealModeIrqRoutingTable
,
1287 RealModePCIEnumeration
,
1289 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
1292 (DDKAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
1294 IN PUNICODE_STRING PathName
,
1295 IN INTERFACE_TYPE BusType
,
1297 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
1298 IN CONFIGURATION_TYPE ControllerType
,
1299 IN ULONG ControllerNumber
,
1300 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
1301 IN CONFIGURATION_TYPE PeripheralType
,
1302 IN ULONG PeripheralNumber
,
1303 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
1305 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
1306 IoQueryDeviceIdentifier
= 0,
1307 IoQueryDeviceConfigurationData
,
1308 IoQueryDeviceComponentInformation
,
1309 IoQueryDeviceMaxData
1310 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
1313 (DDKAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
1315 IN HANDLE ProcessId
,
1319 (DDKAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
1320 IN HANDLE ProcessId
,
1324 typedef struct _IMAGE_INFO
{
1325 _ANONYMOUS_UNION
union {
1327 _ANONYMOUS_STRUCT
struct {
1328 ULONG ImageAddressingMode
: 8;
1329 ULONG SystemModeImage
: 1;
1330 ULONG ImageMappedToAllPids
: 1;
1331 ULONG Reserved
: 22;
1335 ULONG ImageSelector
;
1337 ULONG ImageSectionNumber
;
1338 } IMAGE_INFO
, *PIMAGE_INFO
;
1340 #define IMAGE_ADDRESSING_MODE_32BIT 3
1343 (DDKAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
1344 IN PUNICODE_STRING FullImageName
,
1345 IN HANDLE ProcessId
,
1346 IN PIMAGE_INFO ImageInfo
);
1348 #pragma pack(push,4)
1349 typedef enum _BUS_DATA_TYPE
{
1350 ConfigurationSpaceUndefined
= -1,
1358 PCMCIAConfiguration
,
1361 PNPISAConfiguration
,
1362 SgiInternalConfiguration
,
1364 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
1367 typedef struct _NT_TIB
{
1368 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
1372 _ANONYMOUS_UNION
union {
1376 PVOID ArbitraryUserPointer
;
1377 struct _NT_TIB
*Self
;
1380 typedef struct _NT_TIB32
{
1381 ULONG ExceptionList
;
1385 __GNU_EXTENSION
union {
1389 ULONG ArbitraryUserPointer
;
1391 } NT_TIB32
,*PNT_TIB32
;
1393 typedef struct _NT_TIB64
{
1394 ULONG64 ExceptionList
;
1397 ULONG64 SubSystemTib
;
1398 __GNU_EXTENSION
union {
1402 ULONG64 ArbitraryUserPointer
;
1404 } NT_TIB64
,*PNT_TIB64
;
1406 typedef enum _PROCESSINFOCLASS
{
1407 ProcessBasicInformation
,
1412 ProcessBasePriority
,
1413 ProcessRaisePriority
,
1415 ProcessExceptionPort
,
1417 ProcessLdtInformation
,
1419 ProcessDefaultHardErrorMode
,
1420 ProcessIoPortHandlers
,
1421 ProcessPooledUsageAndLimits
,
1422 ProcessWorkingSetWatch
,
1423 ProcessUserModeIOPL
,
1424 ProcessEnableAlignmentFaultFixup
,
1425 ProcessPriorityClass
,
1426 ProcessWx86Information
,
1428 ProcessAffinityMask
,
1429 ProcessPriorityBoost
,
1431 ProcessSessionInformation
,
1432 ProcessForegroundInformation
,
1433 ProcessWow64Information
,
1434 ProcessImageFileName
,
1435 ProcessLUIDDeviceMapsEnabled
,
1436 ProcessBreakOnTermination
,
1437 ProcessDebugObjectHandle
,
1439 ProcessHandleTracing
,
1441 ProcessExecuteFlags
,
1442 ProcessTlsInformation
,
1444 ProcessImageInformation
,
1446 ProcessPagePriority
,
1447 ProcessInstrumentationCallback
,
1451 typedef enum _THREADINFOCLASS
{
1452 ThreadBasicInformation
,
1457 ThreadImpersonationToken
,
1458 ThreadDescriptorTableEntry
,
1459 ThreadEnableAlignmentFaultFixup
,
1460 ThreadEventPair_Reusable
,
1461 ThreadQuerySetWin32StartAddress
,
1463 ThreadPerformanceCount
,
1464 ThreadAmILastThread
,
1465 ThreadIdealProcessor
,
1466 ThreadPriorityBoost
,
1467 ThreadSetTlsArrayAddress
,
1469 ThreadHideFromDebugger
,
1470 ThreadBreakOnTermination
,
1471 ThreadSwitchLegacyState
,
1473 ThreadLastSystemCall
,
1477 ThreadActualBasePriority
,
1481 typedef struct _PROCESS_BASIC_INFORMATION
1483 NTSTATUS ExitStatus
;
1484 struct _PEB
*PebBaseAddress
;
1485 ULONG_PTR AffinityMask
;
1486 KPRIORITY BasePriority
;
1487 ULONG_PTR UniqueProcessId
;
1488 ULONG_PTR InheritedFromUniqueProcessId
;
1489 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
1491 typedef struct _PROCESS_WS_WATCH_INFORMATION
1495 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
1497 typedef struct _PROCESS_DEVICEMAP_INFORMATION
1499 __GNU_EXTENSION
union
1503 HANDLE DirectoryHandle
;
1508 UCHAR DriveType
[32];
1511 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
1513 typedef struct _KERNEL_USER_TIMES
1515 LARGE_INTEGER CreateTime
;
1516 LARGE_INTEGER ExitTime
;
1517 LARGE_INTEGER KernelTime
;
1518 LARGE_INTEGER UserTime
;
1519 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1521 typedef struct _PROCESS_ACCESS_TOKEN
1525 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1527 typedef struct _PROCESS_SESSION_INFORMATION
1530 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1533 ** Storage structures
1535 typedef enum _PARTITION_STYLE
{
1536 PARTITION_STYLE_MBR
,
1537 PARTITION_STYLE_GPT
,
1541 typedef struct _CREATE_DISK_MBR
{
1543 } CREATE_DISK_MBR
, *PCREATE_DISK_MBR
;
1545 typedef struct _CREATE_DISK_GPT
{
1547 ULONG MaxPartitionCount
;
1548 } CREATE_DISK_GPT
, *PCREATE_DISK_GPT
;
1550 typedef struct _CREATE_DISK
{
1551 PARTITION_STYLE PartitionStyle
;
1552 _ANONYMOUS_UNION
union {
1553 CREATE_DISK_MBR Mbr
;
1554 CREATE_DISK_GPT Gpt
;
1556 } CREATE_DISK
, *PCREATE_DISK
;
1558 typedef struct _DISK_SIGNATURE
{
1559 ULONG PartitionStyle
;
1560 _ANONYMOUS_UNION
union {
1569 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
1572 (FASTCALL
*PTIME_UPDATE_NOTIFY_ROUTINE
)(
1574 IN KPROCESSOR_MODE Mode
);
1576 typedef struct _PHYSICAL_MEMORY_RANGE
{
1577 PHYSICAL_ADDRESS BaseAddress
;
1578 LARGE_INTEGER NumberOfBytes
;
1579 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
1582 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
1585 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
1586 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
1587 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
1588 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
1590 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1591 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1592 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1593 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1594 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1597 (DDKAPI
*PTIMER_APC_ROUTINE
)(
1598 IN PVOID TimerContext
,
1599 IN ULONG TimerLowValue
,
1600 IN LONG TimerHighValue
);
1603 ** Architecture specific structures
1605 #define PCR_MINOR_VERSION 1
1606 #define PCR_MAJOR_VERSION 1
1610 #define SIZE_OF_80387_REGISTERS 80
1611 #define CONTEXT_i386 0x10000
1612 #define CONTEXT_i486 0x10000
1613 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
1614 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
1615 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
1616 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
1617 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
1618 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
1619 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
1621 typedef struct _FLOATING_SAVE_AREA
{
1626 ULONG ErrorSelector
;
1629 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
1631 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
1633 typedef struct _CONTEXT
{
1641 FLOATING_SAVE_AREA FloatSave
;
1658 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
1661 typedef struct _KPCR_TIB
{
1662 PVOID ExceptionList
; /* 00 */
1663 PVOID StackBase
; /* 04 */
1664 PVOID StackLimit
; /* 08 */
1665 PVOID SubSystemTib
; /* 0C */
1666 _ANONYMOUS_UNION
union {
1667 PVOID FiberData
; /* 10 */
1668 ULONG Version
; /* 10 */
1670 PVOID ArbitraryUserPointer
; /* 14 */
1671 struct _KPCR_TIB
*Self
; /* 18 */
1672 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
1674 typedef struct _KPCR
{
1675 KPCR_TIB Tib
; /* 00 */
1676 struct _KPCR
*Self
; /* 1C */
1677 struct _KPRCB
*Prcb
; /* 20 */
1678 KIRQL Irql
; /* 24 */
1680 ULONG IrrActive
; /* 2C */
1682 PVOID KdVersionBlock
; /* 34 */
1683 PUSHORT IDT
; /* 38 */
1684 PUSHORT GDT
; /* 3C */
1685 struct _KTSS
*TSS
; /* 40 */
1686 USHORT MajorVersion
; /* 44 */
1687 USHORT MinorVersion
; /* 46 */
1688 KAFFINITY SetMember
; /* 48 */
1689 ULONG StallScaleFactor
; /* 4C */
1690 UCHAR SpareUnused
; /* 50 */
1691 UCHAR Number
; /* 51 */
1693 UCHAR SecondLevelCacheAssociativity
;
1695 ULONG KernelReserved
[14]; // For use by the kernel
1696 ULONG SecondLevelCacheSize
;
1697 ULONG HalReserved
[16]; // For use by Hal
1698 } KPCR
, *PKPCR
; /* 54 */
1700 #define KeGetPcr() PCR
1704 KeGetCurrentProcessorNumber(VOID
)
1706 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
1709 #define KI_USER_SHARED_DATA 0xffdf0000
1711 #define PAGE_SIZE 0x1000
1712 #define PAGE_SHIFT 12L
1714 #define SharedUserData ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
1716 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1717 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1718 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
1720 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1721 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1722 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1723 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1724 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
1726 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
1727 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
1729 #elif defined(__x86_64__)
1731 #define CONTEXT_AMD64 0x100000
1732 #if !defined(RC_INVOKED)
1733 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
1734 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
1735 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
1736 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
1737 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
1739 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1740 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1742 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1743 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1744 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1745 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1748 typedef struct DECLSPEC_ALIGN(16) _M128A
{
1753 typedef struct _XMM_SAVE_AREA32
{
1760 USHORT ErrorSelector
;
1763 USHORT DataSelector
;
1767 M128A FloatRegisters
[8];
1768 M128A XmmRegisters
[16];
1769 UCHAR Reserved4
[96];
1770 } XMM_SAVE_AREA32
, *PXMM_SAVE_AREA32
;
1772 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
1822 /* Floating point */
1824 XMM_SAVE_AREA32 FltSave
;
1848 M128A VectorRegister
[26];
1849 ULONG64 VectorControl
;
1852 ULONG64 DebugControl
;
1853 ULONG64 LastBranchToRip
;
1854 ULONG64 LastBranchFromRip
;
1855 ULONG64 LastExceptionToRip
;
1856 ULONG64 LastExceptionFromRip
;
1860 // Used to contain PFNs and PFN counts
1862 typedef ULONG PFN_COUNT
;
1863 typedef ULONG64 PFN_NUMBER
, *PPFN_NUMBER
;
1864 typedef LONG64 SPFN_NUMBER
, *PSPFN_NUMBER
;
1866 #define PASSIVE_LEVEL 0
1869 #define DISPATCH_LEVEL 2
1870 #define CLOCK_LEVEL 13
1871 #define IPI_LEVEL 14
1872 #define POWER_LEVEL 14
1873 #define PROFILE_LEVEL 15
1874 #define HIGH_LEVEL 15
1876 #define PAGE_SIZE 0x1000
1877 #define PAGE_SHIFT 12L
1878 #define PTI_SHIFT 12L
1879 #define PDI_SHIFT 21L
1880 #define PPI_SHIFT 30L
1881 #define PXI_SHIFT 39L
1882 #define PTE_PER_PAGE 512
1883 #define PDE_PER_PAGE 512
1884 #define PPE_PER_PAGE 512
1885 #define PXE_PER_PAGE 512
1886 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
1887 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
1888 #define PPI_MASK (PPE_PER_PAGE - 1)
1889 #define PXI_MASK (PXE_PER_PAGE - 1)
1891 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
1892 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
1893 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
1894 #define PDE_BASE 0xFFFFF6FB40000000ULL
1895 #define PTE_BASE 0xFFFFF68000000000ULL
1896 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
1897 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
1898 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
1899 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
1901 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1902 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1903 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
1905 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1906 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1907 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1908 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1909 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
1910 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
1912 #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
1913 #define SharedInterruptTime (&SharedUserData->InterruptTime)
1914 #define SharedSystemTime (&SharedUserData->SystemTime)
1915 #define SharedTickCount (&SharedUserData->TickCount)
1917 #define KeQueryInterruptTime() \
1918 (*(volatile ULONG64*)SharedInterruptTime)
1919 #define KeQuerySystemTime(CurrentCount) \
1920 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
1921 #define KeQueryTickCount(CurrentCount) \
1922 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
1924 typedef struct _KPCR
1926 __GNU_EXTENSION
union
1929 __GNU_EXTENSION
struct
1931 union _KGDTENTRY64
*GdtBase
;
1932 struct _KTSS64
*TssBase
;
1935 struct _KPRCB
*CurrentPrcb
;
1936 PKSPIN_LOCK_QUEUE LockArray
;
1940 union _KIDTENTRY64
*IdtBase
;
1943 UCHAR SecondLevelCacheAssociativity
;
1944 UCHAR ObsoleteNumber
;
1947 USHORT MajorVersion
;
1948 USHORT MinorVersion
;
1949 ULONG StallScaleFactor
;
1951 ULONG KernelReserved
[15];
1952 ULONG SecondLevelCacheSize
;
1953 ULONG HalReserved
[16];
1955 PVOID KdVersionBlock
;
1957 ULONG PcrAlign1
[24];
1960 typedef struct _KFLOATING_SAVE
{
1962 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
1968 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
1973 KeGetCurrentProcessorNumber(VOID
)
1975 return (ULONG
)__readgsword(0x184);
1978 #elif defined(__PowerPC__)
1981 // Used to contain PFNs and PFN counts
1983 typedef ULONG PFN_COUNT
;
1984 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
1985 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
1987 #define PASSIVE_LEVEL 0
1990 #define DISPATCH_LEVEL 2
1991 #define PROFILE_LEVEL 27
1992 #define CLOCK1_LEVEL 28
1993 #define CLOCK2_LEVEL 28
1994 #define IPI_LEVEL 29
1995 #define POWER_LEVEL 30
1996 #define HIGH_LEVEL 31
1998 typedef struct _KFLOATING_SAVE
{
2000 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
2002 typedef struct _KPCR_TIB
{
2003 PVOID ExceptionList
; /* 00 */
2004 PVOID StackBase
; /* 04 */
2005 PVOID StackLimit
; /* 08 */
2006 PVOID SubSystemTib
; /* 0C */
2007 _ANONYMOUS_UNION
union {
2008 PVOID FiberData
; /* 10 */
2009 ULONG Version
; /* 10 */
2011 PVOID ArbitraryUserPointer
; /* 14 */
2012 struct _KPCR_TIB
*Self
; /* 18 */
2013 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
2015 #define PCR_MINOR_VERSION 1
2016 #define PCR_MAJOR_VERSION 1
2018 typedef struct _KPCR
{
2019 KPCR_TIB Tib
; /* 00 */
2020 struct _KPCR
*Self
; /* 1C */
2021 struct _KPRCB
*Prcb
; /* 20 */
2022 KIRQL Irql
; /* 24 */
2024 ULONG IrrActive
; /* 2C */
2026 PVOID KdVersionBlock
; /* 34 */
2027 PUSHORT IDT
; /* 38 */
2028 PUSHORT GDT
; /* 3C */
2029 struct _KTSS
*TSS
; /* 40 */
2030 USHORT MajorVersion
; /* 44 */
2031 USHORT MinorVersion
; /* 46 */
2032 KAFFINITY SetMember
; /* 48 */
2033 ULONG StallScaleFactor
; /* 4C */
2034 UCHAR SpareUnused
; /* 50 */
2035 UCHAR Number
; /* 51 */
2036 } KPCR
, *PKPCR
; /* 54 */
2038 #define KeGetPcr() PCR
2043 KeGetCurrentProcessorNumber(VOID
)
2046 __asm__
__volatile__ (
2049 : "i" (FIELD_OFFSET(KPCR
, Number
))
2054 #elif defined(_MIPS_)
2056 #error MIPS Headers are totally incorrect
2059 // Used to contain PFNs and PFN counts
2061 typedef ULONG PFN_COUNT
;
2062 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
2063 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
2065 #define PASSIVE_LEVEL 0
2067 #define DISPATCH_LEVEL 2
2068 #define PROFILE_LEVEL 27
2069 #define IPI_LEVEL 29
2070 #define HIGH_LEVEL 31
2072 typedef struct _KPCR
{
2073 struct _KPRCB
*Prcb
; /* 20 */
2074 KIRQL Irql
; /* 24 */
2079 #define KeGetPcr() PCR
2081 typedef struct _KFLOATING_SAVE
{
2082 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
2087 KeGetCurrentProcessorNumber(VOID
)
2092 #elif defined(_M_ARM)
2095 // NT-ARM is not documented, need DDK-ARM
2100 #error Unknown architecture
2103 #define MM_DONT_ZERO_ALLOCATION 0x00000001
2104 #define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002
2107 #define EFLAG_SIGN 0x8000
2108 #define EFLAG_ZERO 0x4000
2109 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
2111 #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
2112 #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
2113 #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
2115 typedef enum _INTERLOCKED_RESULT
{
2116 ResultNegative
= RESULT_NEGATIVE
,
2117 ResultZero
= RESULT_ZERO
,
2118 ResultPositive
= RESULT_POSITIVE
2119 } INTERLOCKED_RESULT
;
2122 (NTAPI
*PciPin2Line
)(
2123 IN
struct _BUS_HANDLER
*BusHandler
,
2124 IN
struct _BUS_HANDLER
*RootHandler
,
2125 IN PCI_SLOT_NUMBER SlotNumber
,
2126 IN PPCI_COMMON_CONFIG PciData
2130 (NTAPI
*PciLine2Pin
)(
2131 IN
struct _BUS_HANDLER
*BusHandler
,
2132 IN
struct _BUS_HANDLER
*RootHandler
,
2133 IN PCI_SLOT_NUMBER SlotNumber
,
2134 IN PPCI_COMMON_CONFIG PciNewData
,
2135 IN PPCI_COMMON_CONFIG PciOldData
2139 (NTAPI
*PciReadWriteConfig
)(
2140 IN
struct _BUS_HANDLER
*BusHandler
,
2141 IN PCI_SLOT_NUMBER Slot
,
2147 #define PCI_DATA_TAG ' ICP'
2148 #define PCI_DATA_VERSION 1
2150 typedef struct _PCIBUSDATA
2154 PciReadWriteConfig ReadConfig
;
2155 PciReadWriteConfig WriteConfig
;
2156 PciPin2Line Pin2Line
;
2157 PciLine2Pin Line2Pin
;
2158 PCI_SLOT_NUMBER ParentSlot
;
2160 } PCIBUSDATA
, *PPCIBUSDATA
;
2163 /** SPINLOCK FUNCTIONS ********************************************************/
2168 KeTryToAcquireSpinLockAtDpcLevel(
2169 IN OUT PKSPIN_LOCK SpinLock
2176 IN PKSPIN_LOCK SpinLock
2181 #if defined(WIN9X_COMPAT_SPINLOCK)
2186 KeInitializeSpinLock(
2187 IN PKSPIN_LOCK SpinLock
2194 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
2196 /* Clear the lock */
2206 IN PKSPIN_LOCK SpinLock
);
2212 IN PKSPIN_LOCK SpinLock
,
2218 KefAcquireSpinLockAtDpcLevel(
2219 IN PKSPIN_LOCK SpinLock
);
2224 KefReleaseSpinLockFromDpcLevel(
2225 IN PKSPIN_LOCK SpinLock
);
2227 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
2228 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
2229 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
2230 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
2232 #define KeGetDcacheFillSize() 1L
2234 #elif defined(_M_ARM) // !defined (_X86_)
2238 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
2240 /* Clear the lock */
2248 IN PKSPIN_LOCK SpinLock
);
2254 IN PKSPIN_LOCK SpinLock
,
2261 KefAcquireSpinLockAtDpcLevel(
2262 IN PKSPIN_LOCK SpinLock
);
2267 KefReleaseSpinLockFromDpcLevel(
2268 IN PKSPIN_LOCK SpinLock
);
2271 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
2272 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
2273 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
2274 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
2279 KeInitializeSpinLock(
2280 IN PKSPIN_LOCK SpinLock
);
2287 KeInitializeSpinLock(
2288 PKSPIN_LOCK SpinLock
)
2296 IN PKSPIN_LOCK SpinLock
,
2301 KeAcquireSpinLockAtDpcLevel(
2302 IN PKSPIN_LOCK SpinLock
);
2306 KeReleaseSpinLockFromDpcLevel(
2307 IN PKSPIN_LOCK SpinLock
);
2311 KeAcquireSpinLockRaiseToDpc(
2312 IN PKSPIN_LOCK SpinLock
);
2314 #define KeAcquireSpinLock(SpinLock, OldIrql) \
2315 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
2317 #endif // !defined (_X86_)
2320 ** Utillity functions
2323 #define ARGUMENT_PRESENT(ArgumentPointer) \
2324 ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL)
2331 #define BYTE_OFFSET(Va) \
2332 ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
2339 #define BYTES_TO_PAGES(Size) \
2340 ((ULONG) ((ULONG_PTR) (Size) >> PAGE_SHIFT) + (((ULONG) (Size) & (PAGE_SIZE - 1)) != 0))
2347 #define PAGE_ALIGN(Va) \
2348 ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
2353 * IN ULONG_PTR Size)
2355 #define ROUND_TO_PAGES(Size) \
2356 ((ULONG_PTR) (((ULONG_PTR) Size + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)))
2360 #if defined(_X86_) || defined(_AMD64_)
2363 // x86 and x64 performs a 0x2C interrupt
2365 #define DbgRaiseAssertionFailure __int2c
2367 #elif defined(_ARM_)
2374 #error Unsupported Architecture
2379 #define ASSERT(exp) \
2381 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
2383 #define ASSERTMSG(msg, exp) \
2385 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, msg ), FALSE : TRUE)
2387 #define RTL_SOFT_ASSERT(exp) \
2389 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
2391 #define RTL_SOFT_ASSERTMSG(msg, exp) \
2393 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
2395 #define RTL_VERIFY(exp) ASSERT(exp)
2396 #define RTL_VERIFYMSG(msg, exp) ASSERT(msg, exp)
2398 #define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp)
2399 #define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp)
2401 #if defined(_MSC_VER)
2403 #define NT_ASSERT(exp) \
2405 (__annotation(L"Debug", L"AssertFail", L#exp), \
2406 DbgRaiseAssertionFailure(), FALSE) : TRUE)
2408 #define NT_ASSERTMSG(msg, exp) \
2410 (__annotation(L"Debug", L"AssertFail", L##msg), \
2411 DbgRaiseAssertionFailure(), FALSE) : TRUE)
2413 #define NT_ASSERTMSGW(msg, exp) \
2415 (__annotation(L"Debug", L"AssertFail", msg), \
2416 DbgRaiseAssertionFailure(), FALSE) : TRUE)
2421 // GCC doesn't support __annotation (nor PDB)
2423 #define NT_ASSERT(exp) \
2424 (VOID)((!(exp)) ? (DbgRaiseAssertionFailure(), FALSE) : TRUE)
2426 #define NT_ASSERTMSG NT_ASSERT
2427 #define NT_ASSERTMSGW NT_ASSERT
2433 #define ASSERT(exp) ((VOID) 0)
2434 #define ASSERTMSG(msg, exp) ((VOID) 0)
2436 #define RTL_SOFT_ASSERT(exp) ((VOID) 0)
2437 #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
2439 #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
2440 #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
2442 #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
2443 #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
2445 #define NT_ASSERT(exp) ((VOID)0)
2446 #define NT_ASSERTMSG(exp) ((VOID)0)
2447 #define NT_ASSERTMSGW(exp) ((VOID)0)
2451 /* HACK HACK HACK - GCC (or perhaps LD) is messing this up */
2452 #if defined(_NTSYSTEM_) || defined(__GNUC__)
2453 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
2454 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
2456 #define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag)
2457 #define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag)
2458 #endif /* _NT_SYSTEM */
2460 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG
;
2461 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG
;
2464 ** Driver support routines
2467 /** Runtime library routines **/
2469 static __inline VOID
2471 IN PLIST_ENTRY ListHead
)
2473 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
2476 static __inline VOID
2478 IN PLIST_ENTRY ListHead
,
2479 IN PLIST_ENTRY Entry
)
2481 PLIST_ENTRY OldFlink
;
2482 OldFlink
= ListHead
->Flink
;
2483 Entry
->Flink
= OldFlink
;
2484 Entry
->Blink
= ListHead
;
2485 OldFlink
->Blink
= Entry
;
2486 ListHead
->Flink
= Entry
;
2489 static __inline VOID
2491 IN PLIST_ENTRY ListHead
,
2492 IN PLIST_ENTRY Entry
)
2494 PLIST_ENTRY OldBlink
;
2495 OldBlink
= ListHead
->Blink
;
2496 Entry
->Flink
= ListHead
;
2497 Entry
->Blink
= OldBlink
;
2498 OldBlink
->Flink
= Entry
;
2499 ListHead
->Blink
= Entry
;
2505 * IN PLIST_ENTRY ListHead)
2507 #define IsListEmpty(_ListHead) \
2508 ((_ListHead)->Flink == (_ListHead))
2511 * PSINGLE_LIST_ENTRY
2513 * IN PSINGLE_LIST_ENTRY ListHead)
2515 #define PopEntryList(ListHead) \
2518 PSINGLE_LIST_ENTRY _FirstEntry; \
2519 _FirstEntry = (ListHead)->Next; \
2520 if (_FirstEntry != NULL) \
2521 (ListHead)->Next = _FirstEntry->Next; \
2527 * IN PSINGLE_LIST_ENTRY ListHead,
2528 * IN PSINGLE_LIST_ENTRY Entry)
2530 #define PushEntryList(_ListHead, _Entry) \
2531 (_Entry)->Next = (_ListHead)->Next; \
2532 (_ListHead)->Next = (_Entry); \
2534 static __inline BOOLEAN
2536 IN PLIST_ENTRY Entry
)
2538 PLIST_ENTRY OldFlink
;
2539 PLIST_ENTRY OldBlink
;
2541 OldFlink
= Entry
->Flink
;
2542 OldBlink
= Entry
->Blink
;
2543 OldFlink
->Blink
= OldBlink
;
2544 OldBlink
->Flink
= OldFlink
;
2545 return (BOOLEAN
)(OldFlink
== OldBlink
);
2548 static __inline PLIST_ENTRY
2550 IN PLIST_ENTRY ListHead
)
2555 Entry
= ListHead
->Flink
;
2556 Flink
= Entry
->Flink
;
2557 ListHead
->Flink
= Flink
;
2558 Flink
->Blink
= ListHead
;
2562 static __inline PLIST_ENTRY
2564 IN PLIST_ENTRY ListHead
)
2569 Entry
= ListHead
->Blink
;
2570 Blink
= Entry
->Blink
;
2571 ListHead
->Blink
= Blink
;
2572 Blink
->Flink
= ListHead
;
2581 IN ULONG Base OPTIONAL
,
2582 IN OUT PULONG Value
);
2590 BOOLEAN CaseInSensitive
);
2592 #if !defined(MIDL_PASS)
2597 RtlConvertLongToLuid(
2603 Temp
.QuadPart
= Val
;
2604 Luid
.LowPart
= Temp
.u
.LowPart
;
2605 Luid
.HighPart
= Temp
.u
.HighPart
;
2613 RtlConvertUlongToLuid(
2630 IN VOID UNALIGNED
*Destination
,
2631 IN CONST VOID UNALIGNED
*Source
,
2638 IN OUT PSTRING DestinationString
,
2639 IN PSTRING SourceString OPTIONAL
);
2647 IN BOOLEAN CaseInSensitive
);
2649 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
2650 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
2651 *CallersAddress = (PVOID)_ReturnAddress(); \
2652 *CallersCaller = NULL;
2657 RtlGetCallersAddress(
2658 OUT PVOID
*CallersAddress
,
2659 OUT PVOID
*CallersCaller
);
2666 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
2672 IN OUT PACCESS_MASK AccessMask
,
2673 IN PGENERIC_MAPPING GenericMapping
);
2678 RtlPrefixUnicodeString(
2679 IN PCUNICODE_STRING String1
,
2680 IN PCUNICODE_STRING String2
,
2681 IN BOOLEAN CaseInSensitive
);
2686 RtlUpcaseUnicodeString(
2687 IN OUT PUNICODE_STRING DestinationString OPTIONAL
,
2688 IN PCUNICODE_STRING SourceString
,
2689 IN BOOLEAN AllocateDestinationString
);
2701 IN OUT PSTRING DestinationString
,
2702 IN PSTRING SourceString
);
2707 RtlVerifyVersionInfo(
2708 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
2710 IN ULONGLONG ConditionMask
);
2715 RtlVolumeDeviceToDosName(
2716 IN PVOID VolumeDeviceObject
,
2717 OUT PUNICODE_STRING DosName
);
2730 KeAreAllApcsDisabled(
2734 /* Guarded Mutex routines */
2739 KeAcquireGuardedMutex(
2740 IN OUT PKGUARDED_MUTEX GuardedMutex
2746 KeAcquireGuardedMutexUnsafe(
2747 IN OUT PKGUARDED_MUTEX GuardedMutex
2753 KeEnterGuardedRegion(
2760 KeLeaveGuardedRegion(
2767 KeInitializeGuardedMutex(
2768 OUT PKGUARDED_MUTEX GuardedMutex
2774 KeReleaseGuardedMutexUnsafe(
2775 IN OUT PKGUARDED_MUTEX GuardedMutex
2781 KeReleaseGuardedMutex(
2782 IN OUT PKGUARDED_MUTEX GuardedMutex
2788 KeTryToAcquireGuardedMutex(
2789 IN OUT PKGUARDED_MUTEX GuardedMutex
2793 #define ExInitializeFastMutex(_FastMutex) \
2795 (_FastMutex)->Count = FM_LOCK_BIT; \
2796 (_FastMutex)->Owner = NULL; \
2797 (_FastMutex)->Contention = 0; \
2798 KeInitializeEvent(&(_FastMutex)->Gate, SynchronizationEvent, FALSE); \
2809 /******************************************************************************
2811 ******************************************************************************/
2813 typedef struct _ZONE_SEGMENT_HEADER
{
2814 SINGLE_LIST_ENTRY SegmentList
;
2816 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
2818 typedef struct _ZONE_HEADER
{
2819 SINGLE_LIST_ENTRY FreeList
;
2820 SINGLE_LIST_ENTRY SegmentList
;
2822 ULONG TotalSegmentSize
;
2823 } ZONE_HEADER
, *PZONE_HEADER
;
2825 #define PROTECTED_POOL 0x80000000
2827 /******************************************************************************
2828 * Executive Functions *
2829 ******************************************************************************/
2835 IN PZONE_HEADER Zone
,
2837 IN ULONG SegmentSize
);
2839 static __inline PVOID
2841 IN PZONE_HEADER Zone
)
2843 if (Zone
->FreeList
.Next
)
2844 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
2845 return (PVOID
) Zone
->FreeList
.Next
;
2848 static __inline PVOID
2850 IN PZONE_HEADER Zone
,
2853 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
2854 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
2855 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
2862 IN PZONE_HEADER Zone
,
2864 IN PVOID InitialSegment
,
2865 IN ULONG InitialSegmentSize
);
2869 * ExInterlockedAllocateFromZone(
2870 * IN PZONE_HEADER Zone,
2871 * IN PKSPIN_LOCK Lock)
2873 #define ExInterlockedAllocateFromZone(Zone, Lock) \
2874 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
2879 ExInterlockedExtendZone(
2880 IN PZONE_HEADER Zone
,
2882 IN ULONG SegmentSize
,
2883 IN PKSPIN_LOCK Lock
);
2886 * ExInterlockedFreeToZone(
2887 * IN PZONE_HEADER Zone,
2889 * IN PKSPIN_LOCK Lock);
2891 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
2892 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
2896 * InitializeSListHead(
2897 * IN PSLIST_HEADER SListHead)
2899 #define InitializeSListHead(_SListHead) \
2900 (_SListHead)->Alignment = 0
2902 #define ExInitializeSListHead InitializeSListHead
2907 * IN PZONE_HEADER Zone)
2909 #define ExIsFullZone(Zone) \
2910 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
2913 * ExIsObjectInFirstZoneSegment(
2914 * IN PZONE_HEADER Zone,
2917 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
2918 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
2919 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
2920 (Zone)->TotalSegmentSize)) )
2926 ExRaiseAccessViolation(
2933 ExRaiseDatatypeMisalignment(
2942 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
2943 #define ExAcquireResourceShared ExAcquireResourceSharedLite
2944 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
2945 #define ExDeleteResource ExDeleteResourceLite
2946 #define ExInitializeResource ExInitializeResourceLite
2947 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
2948 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
2949 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
2950 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
2955 #define PAGED_CODE() { \
2956 if (KeGetCurrentIrql() > APC_LEVEL) { \
2957 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
2964 #define PAGED_CODE()
2972 IN CONST VOID
*Address
,
2974 IN ULONG Alignment
);
2982 IN ULONG Alignment
);
2986 /** Configuration manager routines **/
2992 IN PEX_CALLBACK_FUNCTION Function
,
2994 IN OUT PLARGE_INTEGER Cookie
);
2999 CmUnRegisterCallback(
3000 IN LARGE_INTEGER Cookie
);
3004 /** Filesystem runtime library routines **/
3009 FsRtlIsTotalDeviceFailure(
3010 IN NTSTATUS Status
);
3014 /** Hardware abstraction layer routines **/
3020 IN ULONG Frequency
);
3026 IN PDEVICE_OBJECT DeviceObject
,
3027 IN ULONG SectorSize
,
3028 IN ULONG MBRTypeIdentifier
,
3034 PADAPTER_OBJECT AdapterObject
3038 /** Io access routines **/
3040 #if !defined(_M_AMD64)
3044 READ_PORT_BUFFER_UCHAR(
3052 READ_PORT_BUFFER_ULONG(
3060 READ_PORT_BUFFER_USHORT(
3086 READ_REGISTER_BUFFER_UCHAR(
3094 READ_REGISTER_BUFFER_ULONG(
3102 READ_REGISTER_BUFFER_USHORT(
3103 IN PUSHORT Register
,
3110 READ_REGISTER_UCHAR(
3111 IN PUCHAR Register
);
3116 READ_REGISTER_ULONG(
3117 IN PULONG Register
);
3122 READ_REGISTER_USHORT(
3123 IN PUSHORT Register
);
3128 WRITE_PORT_BUFFER_UCHAR(
3136 WRITE_PORT_BUFFER_ULONG(
3144 WRITE_PORT_BUFFER_USHORT(
3173 WRITE_REGISTER_BUFFER_UCHAR(
3181 WRITE_REGISTER_BUFFER_ULONG(
3189 WRITE_REGISTER_BUFFER_USHORT(
3190 IN PUSHORT Register
,
3197 WRITE_REGISTER_UCHAR(
3204 WRITE_REGISTER_ULONG(
3211 WRITE_REGISTER_USHORT(
3212 IN PUSHORT Register
,
3219 READ_PORT_BUFFER_UCHAR(
3224 __inbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
3229 READ_PORT_BUFFER_ULONG(
3234 __indwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
3239 READ_PORT_BUFFER_USHORT(
3244 __inwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
3252 return __inbyte((USHORT
)(ULONG_PTR
)Port
);
3260 return __indword((USHORT
)(ULONG_PTR
)Port
);
3268 return __inword((USHORT
)(ULONG_PTR
)Port
);
3273 READ_REGISTER_BUFFER_UCHAR(
3278 __movsb(Register
, Buffer
, Count
);
3283 READ_REGISTER_BUFFER_ULONG(
3288 __movsd(Register
, Buffer
, Count
);
3293 READ_REGISTER_BUFFER_USHORT(
3294 IN PUSHORT Register
,
3298 __movsw(Register
, Buffer
, Count
);
3303 READ_REGISTER_UCHAR(
3311 READ_REGISTER_ULONG(
3319 READ_REGISTER_USHORT(
3320 IN PUSHORT Register
)
3327 WRITE_PORT_BUFFER_UCHAR(
3332 __outbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
3337 WRITE_PORT_BUFFER_ULONG(
3342 __outdwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
3347 WRITE_PORT_BUFFER_USHORT(
3352 __outwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
3361 __outbyte((USHORT
)(ULONG_PTR
)Port
, Value
);
3370 __outdword((USHORT
)(ULONG_PTR
)Port
, Value
);
3379 __outword((USHORT
)(ULONG_PTR
)Port
, Value
);
3384 WRITE_REGISTER_BUFFER_UCHAR(
3390 __movsb(Register
, Buffer
, Count
);
3391 InterlockedOr(&Synch
, 1);
3396 WRITE_REGISTER_BUFFER_ULONG(
3402 __movsd(Register
, Buffer
, Count
);
3403 InterlockedOr(&Synch
, 1);
3408 WRITE_REGISTER_BUFFER_USHORT(
3409 IN PUSHORT Register
,
3414 __movsw(Register
, Buffer
, Count
);
3415 InterlockedOr(&Synch
, 1);
3420 WRITE_REGISTER_UCHAR(
3426 InterlockedOr(&Synch
, 1);
3431 WRITE_REGISTER_ULONG(
3437 InterlockedOr(&Synch
, 1);
3442 WRITE_REGISTER_USHORT(
3443 IN PUSHORT Register
,
3448 InterlockedOr(&Sync
, 1);
3453 /** I/O manager routines **/
3458 IoAcquireCancelSpinLock(
3464 IoAcquireRemoveLockEx(
3465 IN PIO_REMOVE_LOCK RemoveLock
,
3466 IN OPTIONAL PVOID Tag OPTIONAL
,
3469 IN ULONG RemlockSize
);
3473 * IoAcquireRemoveLock(
3474 * IN PIO_REMOVE_LOCK RemoveLock,
3475 * IN OPTIONAL PVOID Tag)
3477 #define IoAcquireRemoveLock(_RemoveLock, \
3479 IoAcquireRemoveLockEx(_RemoveLock, _Tag, __FILE__, __LINE__, sizeof(IO_REMOVE_LOCK))
3483 * IoAdjustPagingPathCount(
3485 * IN BOOLEAN Increment)
3487 #define IoAdjustPagingPathCount(_Count, \
3492 InterlockedIncrement(_Count); \
3496 InterlockedDecrement(_Count); \
3500 #ifndef DMA_MACROS_DEFINED
3504 IoAllocateAdapterChannel(
3505 IN PADAPTER_OBJECT AdapterObject
,
3506 IN PDEVICE_OBJECT DeviceObject
,
3507 IN ULONG NumberOfMapRegisters
,
3508 IN PDRIVER_CONTROL ExecutionRoutine
,
3515 IoAllocateController(
3516 IN PCONTROLLER_OBJECT ControllerObject
,
3517 IN PDEVICE_OBJECT DeviceObject
,
3518 IN PDRIVER_CONTROL ExecutionRoutine
,
3524 IoAllocateDriverObjectExtension(
3525 IN PDRIVER_OBJECT DriverObject
,
3526 IN PVOID ClientIdentificationAddress
,
3527 IN ULONG DriverObjectExtensionSize
,
3528 OUT PVOID
*DriverObjectExtension
);
3533 IoAllocateErrorLogEntry(
3535 IN UCHAR EntrySize
);
3542 IN BOOLEAN ChargeQuota
);
3548 IN PVOID VirtualAddress
,
3550 IN BOOLEAN SecondaryBuffer
,
3551 IN BOOLEAN ChargeQuota
,
3552 IN OUT PIRP Irp OPTIONAL
);
3558 IN PDEVICE_OBJECT DeviceObject
);
3561 * VOID IoAssignArcName(
3562 * IN PUNICODE_STRING ArcName,
3563 * IN PUNICODE_STRING DeviceName);
3565 #define IoAssignArcName(_ArcName, _DeviceName) ( \
3566 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
3572 IN PDEVICE_OBJECT SourceDevice
,
3573 IN PUNICODE_STRING TargetDevice
,
3574 OUT PDEVICE_OBJECT
*AttachedDevice
);
3579 IoAttachDeviceToDeviceStack(
3580 IN PDEVICE_OBJECT SourceDevice
,
3581 IN PDEVICE_OBJECT TargetDevice
);
3586 IoBuildAsynchronousFsdRequest(
3587 IN ULONG MajorFunction
,
3588 IN PDEVICE_OBJECT DeviceObject
,
3589 IN OUT PVOID Buffer OPTIONAL
,
3590 IN ULONG Length OPTIONAL
,
3591 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
3592 IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL
);
3597 IoBuildDeviceIoControlRequest(
3598 IN ULONG IoControlCode
,
3599 IN PDEVICE_OBJECT DeviceObject
,
3600 IN PVOID InputBuffer OPTIONAL
,
3601 IN ULONG InputBufferLength
,
3602 OUT PVOID OutputBuffer OPTIONAL
,
3603 IN ULONG OutputBufferLength
,
3604 IN BOOLEAN InternalDeviceIoControl
,
3606 OUT PIO_STATUS_BLOCK IoStatusBlock
);
3613 IN OUT PMDL TargetMdl
,
3614 IN PVOID VirtualAddress
,
3620 IoBuildSynchronousFsdRequest(
3621 IN ULONG MajorFunction
,
3622 IN PDEVICE_OBJECT DeviceObject
,
3623 IN OUT PVOID Buffer OPTIONAL
,
3624 IN ULONG Length OPTIONAL
,
3625 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
3627 OUT PIO_STATUS_BLOCK IoStatusBlock
);
3633 IN PDEVICE_OBJECT DeviceObject
,
3639 * IN PDEVICE_OBJECT DeviceObject,
3642 #define IoCallDriver IofCallDriver
3648 IN PDEVICE_OBJECT DeviceObject
,
3649 IN PFILE_OBJECT FileObject
);
3661 IN ACCESS_MASK DesiredAccess
,
3662 IN ULONG DesiredShareAccess
,
3663 IN OUT PFILE_OBJECT FileObject
,
3664 IN OUT PSHARE_ACCESS ShareAccess
,
3672 IN CCHAR PriorityBoost
);
3676 * IoCompleteRequest(
3678 * IN CCHAR PriorityBoost)
3680 #define IoCompleteRequest IofCompleteRequest
3686 OUT PKINTERRUPT
*InterruptObject
,
3687 IN PKSERVICE_ROUTINE ServiceRoutine
,
3688 IN PVOID ServiceContext
,
3689 IN PKSPIN_LOCK SpinLock OPTIONAL
,
3692 IN KIRQL SynchronizeIrql
,
3693 IN KINTERRUPT_MODE InterruptMode
,
3694 IN BOOLEAN ShareVector
,
3695 IN KAFFINITY ProcessorEnableMask
,
3696 IN BOOLEAN FloatingSave
);
3699 * PIO_STACK_LOCATION
3700 * IoGetCurrentIrpStackLocation(
3703 #define IoGetCurrentIrpStackLocation(_Irp) \
3704 ((_Irp)->Tail.Overlay.CurrentStackLocation)
3707 * PIO_STACK_LOCATION
3708 * IoGetNextIrpStackLocation(
3711 #define IoGetNextIrpStackLocation(_Irp) \
3712 ((_Irp)->Tail.Overlay.CurrentStackLocation - 1)
3716 * IoCopyCurrentIrpStackLocationToNext(
3719 #define IoCopyCurrentIrpStackLocationToNext(_Irp) \
3721 PIO_STACK_LOCATION _IrpSp; \
3722 PIO_STACK_LOCATION _NextIrpSp; \
3723 _IrpSp = IoGetCurrentIrpStackLocation(_Irp); \
3724 _NextIrpSp = IoGetNextIrpStackLocation(_Irp); \
3725 RtlCopyMemory(_NextIrpSp, _IrpSp, \
3726 FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); \
3727 _NextIrpSp->Control = 0; \
3740 IN PDRIVER_OBJECT DriverObject
,
3741 IN ULONG DeviceExtensionSize
,
3742 IN PUNICODE_STRING DeviceName OPTIONAL
,
3743 IN DEVICE_TYPE DeviceType
,
3744 IN ULONG DeviceCharacteristics
,
3745 IN BOOLEAN Exclusive
,
3746 OUT PDEVICE_OBJECT
*DeviceObject
);
3752 IN PDEVICE_OBJECT DeviceObject
,
3753 IN PCREATE_DISK Disk
);
3759 OUT PHANDLE FileHandle
,
3760 IN ACCESS_MASK DesiredAccess
,
3761 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3762 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3763 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
3764 IN ULONG FileAttributes
,
3765 IN ULONG ShareAccess
,
3766 IN ULONG Disposition
,
3767 IN ULONG CreateOptions
,
3768 IN PVOID EaBuffer OPTIONAL
,
3770 IN CREATE_FILE_TYPE CreateFileType
,
3771 IN PVOID ExtraCreateParameters OPTIONAL
,
3777 IoCreateNotificationEvent(
3778 IN PUNICODE_STRING EventName
,
3779 OUT PHANDLE EventHandle
);
3784 IoCreateSymbolicLink(
3785 IN PUNICODE_STRING SymbolicLinkName
,
3786 IN PUNICODE_STRING DeviceName
);
3791 IoCreateSynchronizationEvent(
3792 IN PUNICODE_STRING EventName
,
3793 OUT PHANDLE EventHandle
);
3798 IoCreateUnprotectedSymbolicLink(
3799 IN PUNICODE_STRING SymbolicLinkName
,
3800 IN PUNICODE_STRING DeviceName
);
3807 IN PIO_CSQ_INSERT_IRP CsqInsertIrp
,
3808 IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
3809 IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
3810 IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
3811 IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
3812 IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
3820 IN PIO_CSQ_IRP_CONTEXT Context
);
3827 IN PIO_CSQ_IRP_CONTEXT Context
);
3834 IN PVOID PeekContext
);
3840 IN PCONTROLLER_OBJECT ControllerObject
);
3846 IN PDEVICE_OBJECT DeviceObject
);
3851 IoDeleteSymbolicLink(
3852 IN PUNICODE_STRING SymbolicLinkName
);
3856 * IoDeassignArcName(
3857 * IN PUNICODE_STRING ArcName)
3859 #define IoDeassignArcName IoDeleteSymbolicLink
3865 IN OUT PDEVICE_OBJECT TargetDevice
);
3870 IoDisconnectInterrupt(
3871 IN PKINTERRUPT InterruptObject
);
3876 IoForwardIrpSynchronously(
3877 IN PDEVICE_OBJECT DeviceObject
,
3880 #define IoForwardAndCatchIrp IoForwardIrpSynchronously
3886 IN PCONTROLLER_OBJECT ControllerObject
);
3891 IoFreeErrorLogEntry(
3910 IN PIO_WORKITEM pIOWorkItem
);
3915 IoGetAttachedDevice(
3916 IN PDEVICE_OBJECT DeviceObject
);
3921 IoGetAttachedDeviceReference(
3922 IN PDEVICE_OBJECT DeviceObject
);
3927 IoGetBootDiskInformation(
3928 IN OUT PBOOTDISK_INFORMATION BootDiskInformation
,
3932 PCONFIGURATION_INFORMATION
3934 IoGetConfigurationInformation(
3940 IoGetCurrentProcess(
3946 IoGetDeviceInterfaceAlias(
3947 IN PUNICODE_STRING SymbolicLinkName
,
3948 IN CONST GUID
*AliasInterfaceClassGuid
,
3949 OUT PUNICODE_STRING AliasSymbolicLinkName
);
3951 #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
3956 IoGetDeviceInterfaces(
3957 IN CONST GUID
*InterfaceClassGuid
,
3958 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
3960 OUT PWSTR
*SymbolicLinkList
);
3965 IoGetDeviceObjectPointer(
3966 IN PUNICODE_STRING ObjectName
,
3967 IN ACCESS_MASK DesiredAccess
,
3968 OUT PFILE_OBJECT
*FileObject
,
3969 OUT PDEVICE_OBJECT
*DeviceObject
);
3974 IoGetDeviceProperty(
3975 IN PDEVICE_OBJECT DeviceObject
,
3976 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
3977 IN ULONG BufferLength
,
3978 OUT PVOID PropertyBuffer
,
3979 OUT PULONG ResultLength
);
3984 IoGetDeviceToVerify(
3985 IN PETHREAD Thread
);
3991 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3992 IN PDEVICE_DESCRIPTION DeviceDescription
,
3993 IN OUT PULONG NumberOfMapRegisters
);
3998 IoGetDriverObjectExtension(
3999 IN PDRIVER_OBJECT DriverObject
,
4000 IN PVOID ClientIdentificationAddress
);
4005 IoGetFileObjectGenericMapping(
4010 * IoGetFunctionCodeFromCtlCode(
4011 * IN ULONG ControlCode)
4013 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \
4014 (((_ControlCode) >> 2) & 0x00000FFF)
4025 IoGetRelatedDeviceObject(
4026 IN PFILE_OBJECT FileObject
);
4032 OUT PULONG_PTR LowLimit
,
4033 OUT PULONG_PTR HighLimit
);
4037 IoGetRemainingStackSize(
4041 ULONG_PTR End
, Begin
;
4044 IoGetStackLimits(&Begin
, &End
);
4045 Result
= (ULONG_PTR
)(&End
) - Begin
;
4054 IN PKDEFERRED_ROUTINE DeferredRoutine
,
4055 IN PVOID DeferredContext
);
4059 * IoInitializeDpcRequest(
4060 * IN PDEVICE_OBJECT DeviceObject,
4061 * IN PIO_DPC_ROUTINE DpcRoutine)
4063 #define IoInitializeDpcRequest(_DeviceObject, \
4065 KeInitializeDpc(&(_DeviceObject)->Dpc, \
4066 (PKDEFERRED_ROUTINE) (_DpcRoutine), \
4074 IN USHORT PacketSize
,
4075 IN CCHAR StackSize
);
4080 IoInitializeRemoveLockEx(
4081 IN PIO_REMOVE_LOCK Lock
,
4082 IN ULONG AllocateTag
,
4083 IN ULONG MaxLockedMinutes
,
4084 IN ULONG HighWatermark
,
4085 IN ULONG RemlockSize
);
4088 * IoInitializeRemoveLock(
4089 * IN PIO_REMOVE_LOCK Lock,
4090 * IN ULONG AllocateTag,
4091 * IN ULONG MaxLockedMinutes,
4092 * IN ULONG HighWatermark)
4094 #define IoInitializeRemoveLock( \
4095 Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
4096 IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
4097 HighWatermark, sizeof(IO_REMOVE_LOCK))
4103 IN PDEVICE_OBJECT DeviceObject
,
4104 IN PIO_TIMER_ROUTINE TimerRoutine
,
4110 IoInvalidateDeviceRelations(
4111 IN PDEVICE_OBJECT DeviceObject
,
4112 IN DEVICE_RELATION_TYPE Type
);
4117 IoInvalidateDeviceState(
4118 IN PDEVICE_OBJECT PhysicalDeviceObject
);
4124 IN PIRP Irp OPTIONAL
);
4128 * IoIsErrorUserInduced(
4129 * IN NTSTATUS Status);
4131 #define IoIsErrorUserInduced(Status) \
4132 ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
4133 ((Status) == STATUS_IO_TIMEOUT) || \
4134 ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
4135 ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
4136 ((Status) == STATUS_VERIFY_REQUIRED) || \
4137 ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
4138 ((Status) == STATUS_WRONG_VOLUME)))
4143 IoIsWdmVersionAvailable(
4144 IN UCHAR MajorVersion
,
4145 IN UCHAR MinorVersion
);
4150 IoMakeAssociatedIrp(
4152 IN CCHAR StackSize
);
4159 #define IoMarkIrpPending(_Irp) \
4160 (IoGetCurrentIrpStackLocation(_Irp)->Control |= SL_PENDING_RETURNED)
4165 IoOpenDeviceInterfaceRegistryKey(
4166 IN PUNICODE_STRING SymbolicLinkName
,
4167 IN ACCESS_MASK DesiredAccess
,
4168 OUT PHANDLE DeviceInterfaceKey
);
4170 #define PLUGPLAY_REGKEY_DEVICE 1
4171 #define PLUGPLAY_REGKEY_DRIVER 2
4172 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
4177 IoOpenDeviceRegistryKey(
4178 IN PDEVICE_OBJECT DeviceObject
,
4179 IN ULONG DevInstKeyType
,
4180 IN ACCESS_MASK DesiredAccess
,
4181 OUT PHANDLE DevInstRegKey
);
4186 IoQueryDeviceDescription(
4187 IN PINTERFACE_TYPE BusType OPTIONAL
,
4188 IN PULONG BusNumber OPTIONAL
,
4189 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
4190 IN PULONG ControllerNumber OPTIONAL
,
4191 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
4192 IN PULONG PeripheralNumber OPTIONAL
,
4193 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
4200 IN PIO_WORKITEM pIOWorkItem
,
4201 IN PIO_WORKITEM_ROUTINE Routine
,
4202 IN WORK_QUEUE_TYPE QueueType
,
4210 IN PVPB Vpb OPTIONAL
,
4211 IN PDEVICE_OBJECT RealDeviceObject
);
4216 IoRaiseInformationalHardError(
4217 IN NTSTATUS ErrorStatus
,
4218 IN PUNICODE_STRING String OPTIONAL
,
4219 IN PKTHREAD Thread OPTIONAL
);
4224 IoReadDiskSignature(
4225 IN PDEVICE_OBJECT DeviceObject
,
4226 IN ULONG BytesPerSector
,
4227 OUT PDISK_SIGNATURE Signature
);
4232 IoReadPartitionTable(
4233 IN PDEVICE_OBJECT DeviceObject
,
4234 IN ULONG SectorSize
,
4235 IN BOOLEAN ReturnRecognizedPartitions
,
4236 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
4241 IoReadPartitionTableEx(
4242 IN PDEVICE_OBJECT DeviceObject
,
4243 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
4248 IoRegisterBootDriverReinitialization(
4249 IN PDRIVER_OBJECT DriverObject
,
4250 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
4256 IoRegisterBootDriverReinitialization(
4257 IN PDRIVER_OBJECT DriverObject
,
4258 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
4264 IoRegisterDeviceInterface(
4265 IN PDEVICE_OBJECT PhysicalDeviceObject
,
4266 IN CONST GUID
*InterfaceClassGuid
,
4267 IN PUNICODE_STRING ReferenceString OPTIONAL
,
4268 OUT PUNICODE_STRING SymbolicLinkName
);
4273 IoRegisterDriverReinitialization(
4274 IN PDRIVER_OBJECT DriverObject
,
4275 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
4281 IoRegisterPlugPlayNotification(
4282 IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory
,
4283 IN ULONG EventCategoryFlags
,
4284 IN PVOID EventCategoryData OPTIONAL
,
4285 IN PDRIVER_OBJECT DriverObject
,
4286 IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine
,
4288 OUT PVOID
*NotificationEntry
);
4293 IoRegisterShutdownNotification(
4294 IN PDEVICE_OBJECT DeviceObject
);
4299 IoReleaseCancelSpinLock(
4305 IoReleaseRemoveLockAndWaitEx(
4306 IN PIO_REMOVE_LOCK RemoveLock
,
4308 IN ULONG RemlockSize
);
4313 IoReleaseRemoveLockEx(
4314 IN PIO_REMOVE_LOCK RemoveLock
,
4316 IN ULONG RemlockSize
);
4320 * IoReleaseRemoveLock(
4321 * IN PIO_REMOVE_LOCK RemoveLock,
4324 #define IoReleaseRemoveLock(_RemoveLock, \
4326 IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
4330 * IoReleaseRemoveLockAndWait(
4331 * IN PIO_REMOVE_LOCK RemoveLock,
4334 #define IoReleaseRemoveLockAndWait(_RemoveLock, \
4336 IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
4341 IoRemoveShareAccess(
4342 IN PFILE_OBJECT FileObject
,
4343 IN OUT PSHARE_ACCESS ShareAccess
);
4348 IoReportDetectedDevice(
4349 IN PDRIVER_OBJECT DriverObject
,
4350 IN INTERFACE_TYPE LegacyBusType
,
4352 IN ULONG SlotNumber
,
4353 IN PCM_RESOURCE_LIST ResourceList
,
4354 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
4355 IN BOOLEAN ResourceAssigned
,
4356 IN OUT PDEVICE_OBJECT
*DeviceObject
);
4361 IoReportResourceForDetection(
4362 IN PDRIVER_OBJECT DriverObject
,
4363 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
4364 IN ULONG DriverListSize OPTIONAL
,
4365 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
4366 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
4367 IN ULONG DeviceListSize OPTIONAL
,
4368 OUT PBOOLEAN ConflictDetected
);
4373 IoReportResourceUsage(
4374 IN PUNICODE_STRING DriverClassName OPTIONAL
,
4375 IN PDRIVER_OBJECT DriverObject
,
4376 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
4377 IN ULONG DriverListSize OPTIONAL
,
4378 IN PDEVICE_OBJECT DeviceObject
,
4379 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
4380 IN ULONG DeviceListSize OPTIONAL
,
4381 IN BOOLEAN OverrideConflict
,
4382 OUT PBOOLEAN ConflictDetected
);
4387 IoReportTargetDeviceChange(
4388 IN PDEVICE_OBJECT PhysicalDeviceObject
,
4389 IN PVOID NotificationStructure
);
4394 IoReportTargetDeviceChangeAsynchronous(
4395 IN PDEVICE_OBJECT PhysicalDeviceObject
,
4396 IN PVOID NotificationStructure
,
4397 IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL
,
4398 IN PVOID Context OPTIONAL
);
4403 IoRequestDeviceEject(
4404 IN PDEVICE_OBJECT PhysicalDeviceObject
);
4409 * IN PDEVICE_OBJECT DeviceObject,
4411 * IN PVOID Context);
4413 #define IoRequestDpc(DeviceObject, Irp, Context)( \
4414 KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
4421 IN NTSTATUS Status
);
4425 * IoSetCancelRoutine(
4427 * IN PDRIVER_CANCEL CancelRoutine)
4429 #define IoSetCancelRoutine(_Irp, \
4431 ((PDRIVER_CANCEL) InterlockedExchangePointer( \
4432 (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (_CancelRoutine)))
4436 * IoSetCompletionRoutine(
4438 * IN PIO_COMPLETION_ROUTINE CompletionRoutine,
4440 * IN BOOLEAN InvokeOnSuccess,
4441 * IN BOOLEAN InvokeOnError,
4442 * IN BOOLEAN InvokeOnCancel)
4444 #define IoSetCompletionRoutine(_Irp, \
4445 _CompletionRoutine, \
4451 PIO_STACK_LOCATION _IrpSp; \
4452 ASSERT((_InvokeOnSuccess) || (_InvokeOnError) || (_InvokeOnCancel) ? \
4453 (_CompletionRoutine) != NULL : TRUE); \
4454 _IrpSp = IoGetNextIrpStackLocation(_Irp); \
4455 _IrpSp->CompletionRoutine = (PIO_COMPLETION_ROUTINE)(_CompletionRoutine); \
4456 _IrpSp->Context = (_Context); \
4457 _IrpSp->Control = 0; \
4458 if (_InvokeOnSuccess) _IrpSp->Control = SL_INVOKE_ON_SUCCESS; \
4459 if (_InvokeOnError) _IrpSp->Control |= SL_INVOKE_ON_ERROR; \
4460 if (_InvokeOnCancel) _IrpSp->Control |= SL_INVOKE_ON_CANCEL; \
4466 IoSetCompletionRoutineEx(
4467 IN PDEVICE_OBJECT DeviceObject
,
4469 IN PIO_COMPLETION_ROUTINE CompletionRoutine
,
4471 IN BOOLEAN InvokeOnSuccess
,
4472 IN BOOLEAN InvokeOnError
,
4473 IN BOOLEAN InvokeOnCancel
);
4478 IoSetDeviceInterfaceState(
4479 IN PUNICODE_STRING SymbolicLinkName
,
4485 IoSetHardErrorOrVerifyDevice(
4487 IN PDEVICE_OBJECT DeviceObject
);
4491 * IoSetNextIrpStackLocation(
4494 #define IoSetNextIrpStackLocation(_Irp) \
4496 (_Irp)->CurrentLocation--; \
4497 (_Irp)->Tail.Overlay.CurrentStackLocation--; \
4503 IoSetPartitionInformation(
4504 IN PDEVICE_OBJECT DeviceObject
,
4505 IN ULONG SectorSize
,
4506 IN ULONG PartitionNumber
,
4507 IN ULONG PartitionType
);
4512 IoSetPartitionInformationEx(
4513 IN PDEVICE_OBJECT DeviceObject
,
4514 IN ULONG PartitionNumber
,
4515 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
4521 IN ACCESS_MASK DesiredAccess
,
4522 IN ULONG DesiredShareAccess
,
4523 IN OUT PFILE_OBJECT FileObject
,
4524 OUT PSHARE_ACCESS ShareAccess
);
4529 IoSetStartIoAttributes(
4530 IN PDEVICE_OBJECT DeviceObject
,
4531 IN BOOLEAN DeferredStartIo
,
4532 IN BOOLEAN NonCancelable
);
4537 IoSetSystemPartition(
4538 IN PUNICODE_STRING VolumeNameString
);
4543 IoSetThreadHardErrorMode(
4544 IN BOOLEAN EnableHardErrors
);
4549 * IN CCHAR StackSize)
4551 #define IoSizeOfIrp(_StackSize) \
4552 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
4556 * IoSkipCurrentIrpStackLocation(
4559 #define IoSkipCurrentIrpStackLocation(_Irp) \
4561 (_Irp)->CurrentLocation++; \
4562 (_Irp)->Tail.Overlay.CurrentStackLocation++; \
4569 IN PDEVICE_OBJECT DeviceObject
,
4570 IN BOOLEAN Cancelable
);
4575 IoStartNextPacketByKey(
4576 IN PDEVICE_OBJECT DeviceObject
,
4577 IN BOOLEAN Cancelable
,
4584 IN PDEVICE_OBJECT DeviceObject
,
4586 IN PULONG Key OPTIONAL
,
4587 IN PDRIVER_CANCEL CancelFunction OPTIONAL
);
4593 IN PDEVICE_OBJECT DeviceObject
);
4599 IN PDEVICE_OBJECT DeviceObject
);
4604 IoUnregisterPlugPlayNotification(
4605 IN PVOID NotificationEntry
);
4610 IoUnregisterShutdownNotification(
4611 IN PDEVICE_OBJECT DeviceObject
);
4616 IoUpdateShareAccess(
4617 IN PFILE_OBJECT FileObject
,
4618 IN OUT PSHARE_ACCESS ShareAccess
);
4623 IoVerifyPartitionTable(
4624 IN PDEVICE_OBJECT DeviceObject
,
4625 IN BOOLEAN FixErrors
);
4630 IoVolumeDeviceToDosName(
4631 IN PVOID VolumeDeviceObject
,
4632 OUT PUNICODE_STRING DosName
);
4637 IoWMIAllocateInstanceIds(
4639 IN ULONG InstanceCount
,
4640 OUT ULONG
*FirstInstanceId
);
4645 IoWMIDeviceObjectToProviderId(
4646 IN PDEVICE_OBJECT DeviceObject
);
4651 IoWMIDeviceObjectToInstanceName(
4652 IN PVOID DataBlockObject
,
4653 IN PDEVICE_OBJECT DeviceObject
,
4654 OUT PUNICODE_STRING InstanceName
);
4660 IN PVOID DataBlockObject
,
4661 IN PUNICODE_STRING InstanceName
,
4663 IN ULONG InBufferSize
,
4664 IN OUT PULONG OutBufferSize
,
4665 IN OUT PUCHAR InOutBuffer
);
4670 IoWMIHandleToInstanceName(
4671 IN PVOID DataBlockObject
,
4672 IN HANDLE FileHandle
,
4673 OUT PUNICODE_STRING InstanceName
);
4679 IN GUID
*DataBlockGuid
,
4680 IN ULONG DesiredAccess
,
4681 OUT PVOID
*DataBlockObject
);
4687 IN PVOID DataBlockObject
,
4688 IN OUT ULONG
*InOutBufferSize
,
4689 OUT PVOID OutBuffer
);
4694 IoWMIQueryAllDataMultiple(
4695 IN PVOID
*DataBlockObjectList
,
4696 IN ULONG ObjectCount
,
4697 IN OUT ULONG
*InOutBufferSize
,
4698 OUT PVOID OutBuffer
);
4703 IoWMIQuerySingleInstance(
4704 IN PVOID DataBlockObject
,
4705 IN PUNICODE_STRING InstanceName
,
4706 IN OUT ULONG
*InOutBufferSize
,
4707 OUT PVOID OutBuffer
);
4712 IoWMIQuerySingleInstanceMultiple(
4713 IN PVOID
*DataBlockObjectList
,
4714 IN PUNICODE_STRING InstanceNames
,
4715 IN ULONG ObjectCount
,
4716 IN OUT ULONG
*InOutBufferSize
,
4717 OUT PVOID OutBuffer
);
4722 IoWMIRegistrationControl(
4723 IN PDEVICE_OBJECT DeviceObject
,
4729 IoWMISetNotificationCallback(
4731 IN WMI_NOTIFICATION_CALLBACK Callback
,
4737 IoWMISetSingleInstance(
4738 IN PVOID DataBlockObject
,
4739 IN PUNICODE_STRING InstanceName
,
4741 IN ULONG ValueBufferSize
,
4742 IN PVOID ValueBuffer
);
4748 IN PVOID DataBlockObject
,
4749 IN PUNICODE_STRING InstanceName
,
4750 IN ULONG DataItemId
,
4752 IN ULONG ValueBufferSize
,
4753 IN PVOID ValueBuffer
);
4758 IoWMISuggestInstanceName(
4759 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
4760 IN PUNICODE_STRING SymbolicLinkName OPTIONAL
,
4761 IN BOOLEAN CombineNames
,
4762 OUT PUNICODE_STRING SuggestedInstanceName
);
4768 IN PVOID WnodeEventItem
);
4773 IoWriteErrorLogEntry(
4779 IoWritePartitionTable(
4780 IN PDEVICE_OBJECT DeviceObject
,
4781 IN ULONG SectorSize
,
4782 IN ULONG SectorsPerTrack
,
4783 IN ULONG NumberOfHeads
,
4784 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
4789 IoWritePartitionTableEx(
4790 IN PDEVICE_OBJECT DeviceObject
,
4791 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*PartitionBuffer
);
4795 /** Kernel routines **/
4797 #if defined (_M_AMD64)
4801 KeAcquireInStackQueuedSpinLock(
4802 IN PKSPIN_LOCK SpinLock
,
4803 IN PKLOCK_QUEUE_HANDLE LockHandle
);
4808 KeReleaseInStackQueuedSpinLock(
4809 IN PKLOCK_QUEUE_HANDLE LockHandle
);
4814 KeAcquireInStackQueuedSpinLock(
4815 IN PKSPIN_LOCK SpinLock
,
4816 IN PKLOCK_QUEUE_HANDLE LockHandle
);
4821 KeReleaseInStackQueuedSpinLock(
4822 IN PKLOCK_QUEUE_HANDLE LockHandle
);
4828 KeAcquireInStackQueuedSpinLockAtDpcLevel(
4829 IN PKSPIN_LOCK SpinLock
,
4830 IN PKLOCK_QUEUE_HANDLE LockHandle
);
4835 KeAcquireInterruptSpinLock(
4836 IN PKINTERRUPT Interrupt
);
4849 IN ULONG BugCheckCode
);
4856 IN ULONG BugCheckCode
,
4857 IN ULONG_PTR BugCheckParameter1
,
4858 IN ULONG_PTR BugCheckParameter2
,
4859 IN ULONG_PTR BugCheckParameter3
,
4860 IN ULONG_PTR BugCheckParameter4
);
4877 KeDelayExecutionThread(
4878 IN KPROCESSOR_MODE WaitMode
,
4879 IN BOOLEAN Alertable
,
4880 IN PLARGE_INTEGER Interval
);
4885 KeDeregisterBugCheckCallback(
4886 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
4891 KeEnterCriticalRegion(
4898 * IN BOOLEAN ReadOperation,
4899 * IN BOOLEAN DmaOperation)
4901 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
4903 #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
4904 #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
4905 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
4906 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
4918 KeFlushWriteBuffer(VOID
);
4923 KeGetRecommendedSharedDataAlignment(
4929 KeInitializeDeviceQueue(
4930 IN PKDEVICE_QUEUE DeviceQueue
);
4942 KeInitializeSemaphore(
4943 IN PRKSEMAPHORE Semaphore
,
4956 KeInitializeTimerEx(
4958 IN TIMER_TYPE Type
);
4963 KeInsertByKeyDeviceQueue(
4964 IN PKDEVICE_QUEUE DeviceQueue
,
4965 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
4971 KeInsertDeviceQueue(
4972 IN PKDEVICE_QUEUE DeviceQueue
,
4973 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
4980 IN PVOID SystemArgument1
,
4981 IN PVOID SystemArgument2
);
4986 KeLeaveCriticalRegion(
4996 volatile LONG Barrier
;
4997 #if defined(__GNUC__)
4998 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
4999 #elif defined(_MSC_VER)
5000 __asm xchg
[Barrier
], eax
5011 IN KPRIORITY Increment
,
5017 KeQueryActiveProcessors(
5024 KeQueryPerformanceCounter(
5025 OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL
);
5030 KeQueryPriorityThread(
5031 IN PRKTHREAD Thread
);
5036 KeQueryRuntimeThread(
5038 OUT PULONG UserTime
);
5040 #if !defined(_M_AMD64)
5044 KeQueryInterruptTime(
5051 OUT PLARGE_INTEGER CurrentTime
);
5057 OUT PLARGE_INTEGER TickCount
);
5063 KeQueryTimeIncrement(
5082 KeReadStateSemaphore(
5083 IN PRKSEMAPHORE Semaphore
);
5094 KeRegisterBugCheckCallback(
5095 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
5096 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
5099 IN PUCHAR Component
);
5104 KeRegisterNmiCallback(
5105 IN PNMI_CALLBACK CallbackRoutine
,
5112 KeDeregisterNmiCallback(
5119 KeReleaseInStackQueuedSpinLockFromDpcLevel(
5120 IN PKLOCK_QUEUE_HANDLE LockHandle
);
5125 KeReleaseInterruptSpinLock(
5126 IN PKINTERRUPT Interrupt
,
5140 IN PRKSEMAPHORE Semaphore
,
5141 IN KPRIORITY Increment
,
5146 PKDEVICE_QUEUE_ENTRY
5148 KeRemoveByKeyDeviceQueue(
5149 IN PKDEVICE_QUEUE DeviceQueue
,
5153 PKDEVICE_QUEUE_ENTRY
5155 KeRemoveDeviceQueue(
5156 IN PKDEVICE_QUEUE DeviceQueue
);
5161 KeRemoveEntryDeviceQueue(
5162 IN PKDEVICE_QUEUE DeviceQueue
,
5163 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
5180 KeRestoreFloatingPointState(
5181 IN PKFLOATING_SAVE FloatSave
);
5186 KeRevertToUserAffinityThread(VOID
);
5191 KeSaveFloatingPointState(
5192 OUT PKFLOATING_SAVE FloatSave
);
5197 KeSetBasePriorityThread(
5198 IN PRKTHREAD Thread
,
5206 IN KPRIORITY Increment
,
5214 IN KDPC_IMPORTANCE Importance
);
5219 KeSetPriorityThread(
5221 IN KPRIORITY Priority
);
5226 KeSetSystemAffinityThread(
5227 IN KAFFINITY Affinity
);
5232 KeSetTargetProcessorDpc(
5241 IN LARGE_INTEGER DueTime
,
5242 IN PKDPC Dpc OPTIONAL
);
5249 IN LARGE_INTEGER DueTime
,
5250 IN LONG Period OPTIONAL
,
5251 IN PKDPC Dpc OPTIONAL
);
5256 KeSetTimeUpdateNotifyRoutine(
5257 IN PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine
);
5262 KeStallExecutionProcessor(
5263 IN ULONG MicroSeconds
);
5268 KeSynchronizeExecution(
5269 IN PKINTERRUPT Interrupt
,
5270 IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
5271 IN PVOID SynchronizeContext
);
5276 KeWaitForMultipleObjects(
5279 IN WAIT_TYPE WaitType
,
5280 IN KWAIT_REASON WaitReason
,
5281 IN KPROCESSOR_MODE WaitMode
,
5282 IN BOOLEAN Alertable
,
5283 IN PLARGE_INTEGER Timeout OPTIONAL
,
5284 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL
);
5289 KeWaitForMutexObject(
5291 IN KWAIT_REASON WaitReason
,
5292 IN KPROCESSOR_MODE WaitMode
,
5293 IN BOOLEAN Alertable
,
5294 IN PLARGE_INTEGER Timeout OPTIONAL
);
5299 KeWaitForSingleObject(
5301 IN KWAIT_REASON WaitReason
,
5302 IN KPROCESSOR_MODE WaitMode
,
5303 IN BOOLEAN Alertable
,
5304 IN PLARGE_INTEGER Timeout OPTIONAL
);
5308 (NTAPI
*PKIPI_BROADCAST_WORKER
)(
5309 IN ULONG_PTR Argument
5316 IN PKIPI_BROADCAST_WORKER BroadcastFunction
,
5317 IN ULONG_PTR Context
5337 KeRaiseIrqlToDpcLevel(
5343 KeRaiseIrqlToSynchLevel(
5346 #define KeLowerIrql(a) KfLowerIrql(a)
5347 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
5349 #elif defined(_M_AMD64)
5353 KeGetCurrentIrql(VOID
)
5355 return (KIRQL
)__readcr8();
5360 KeLowerIrql(IN KIRQL NewIrql
)
5362 ASSERT(KeGetCurrentIrql() >= NewIrql
);
5363 __writecr8(NewIrql
);
5368 KfRaiseIrql(IN KIRQL NewIrql
)
5372 OldIrql
= __readcr8();
5373 ASSERT(OldIrql
<= NewIrql
);
5374 __writecr8(NewIrql
);
5377 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
5381 KeRaiseIrqlToDpcLevel(VOID
)
5383 return KfRaiseIrql(DISPATCH_LEVEL
);
5388 KeRaiseIrqlToSynchLevel(VOID
)
5390 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
5393 #elif defined(__PowerPC__)
5410 KeRaiseIrqlToDpcLevel(
5416 KeRaiseIrqlToSynchLevel(
5419 #define KeLowerIrql(a) KfLowerIrql(a)
5420 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
5422 #elif defined(_M_MIPS)
5424 #define KeLowerIrql(a) KfLowerIrql(a)
5425 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
5442 KeRaiseIrqlToDpcLevel(
5448 KeRaiseIrqlToSynchLevel(
5451 #elif defined(_M_ARM)
5468 OUT PKIRQL OldIrql
);
5473 KeRaiseIrqlToDpcLevel(
5479 KeRaiseIrqlToSynchLevel(
5484 /** Memory manager routines **/
5491 IN ULONG NumberOfBytes
);
5496 MmAllocateContiguousMemory(
5497 IN ULONG NumberOfBytes
,
5498 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
5503 MmAllocateContiguousMemorySpecifyCache(
5504 IN SIZE_T NumberOfBytes
,
5505 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
5506 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
5507 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
5508 IN MEMORY_CACHING_TYPE CacheType
);
5513 MmAllocateMappingAddress(
5514 IN SIZE_T NumberOfBytes
,
5520 MmAllocateNonCachedMemory(
5521 IN ULONG NumberOfBytes
);
5526 MmAllocatePagesForMdl(
5527 IN PHYSICAL_ADDRESS LowAddress
,
5528 IN PHYSICAL_ADDRESS HighAddress
,
5529 IN PHYSICAL_ADDRESS SkipBytes
,
5530 IN SIZE_T TotalBytes
);
5532 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
5536 MmAllocatePagesForMdlEx(
5537 IN PHYSICAL_ADDRESS LowAddress
,
5538 IN PHYSICAL_ADDRESS HighAddress
,
5539 IN PHYSICAL_ADDRESS SkipBytes
,
5540 IN SIZE_T TotalBytes
,
5541 IN MEMORY_CACHING_TYPE CacheType
,
5548 MmBuildMdlForNonPagedPool(
5549 IN OUT PMDL MemoryDescriptorList
);
5551 typedef enum _MMFLUSH_TYPE
{
5559 MmFlushImageSection(
5560 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
5561 IN MMFLUSH_TYPE FlushType
);
5566 MmFreeContiguousMemory(
5567 IN PVOID BaseAddress
);
5572 MmFreeContiguousMemorySpecifyCache(
5573 IN PVOID BaseAddress
,
5574 IN SIZE_T NumberOfBytes
,
5575 IN MEMORY_CACHING_TYPE CacheType
);
5580 MmFreeMappingAddress(
5581 IN PVOID BaseAddress
,
5587 MmFreeNonCachedMemory(
5588 IN PVOID BaseAddress
,
5589 IN SIZE_T NumberOfBytes
);
5595 IN PMDL MemoryDescriptorList
);
5599 * MmGetMdlByteCount(
5602 #define MmGetMdlByteCount(_Mdl) \
5607 * MmGetMdlByteOffset(
5610 #define MmGetMdlByteOffset(_Mdl) \
5611 ((_Mdl)->ByteOffset)
5618 #define MmGetMdlPfnArray(_Mdl) \
5619 ((PPFN_NUMBER) ((_Mdl) + 1))
5623 * MmGetMdlVirtualAddress(
5626 #define MmGetMdlVirtualAddress(_Mdl) \
5627 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
5632 MmGetPhysicalAddress(
5633 IN PVOID BaseAddress
);
5636 PPHYSICAL_MEMORY_RANGE
5638 MmGetPhysicalMemoryRanges(
5644 MmGetVirtualForPhysical(
5645 IN PHYSICAL_ADDRESS PhysicalAddress
);
5650 MmMapLockedPagesSpecifyCache(
5651 IN PMDL MemoryDescriptorList
,
5652 IN KPROCESSOR_MODE AccessMode
,
5653 IN MEMORY_CACHING_TYPE CacheType
,
5654 IN PVOID BaseAddress
,
5655 IN ULONG BugCheckOnFailure
,
5656 IN MM_PAGE_PRIORITY Priority
);
5661 MmMapLockedPagesWithReservedMapping(
5662 IN PVOID MappingAddress
,
5664 IN PMDL MemoryDescriptorList
,
5665 IN MEMORY_CACHING_TYPE CacheType
);
5670 MmMapUserAddressesToPage(
5671 IN PVOID BaseAddress
,
5672 IN SIZE_T NumberOfBytes
,
5673 IN PVOID PageAddress
);
5679 IN PHYSICAL_ADDRESS PhysicalAddress
,
5680 IN SIZE_T NumberOfBytes
,
5681 IN MEMORY_CACHING_TYPE CacheType
);
5686 MmMapViewInSessionSpace(
5688 OUT PVOID
*MappedBase
,
5689 IN OUT PSIZE_T ViewSize
);
5694 MmMapViewInSystemSpace(
5696 OUT PVOID
*MappedBase
,
5697 IN PSIZE_T ViewSize
);
5702 MmMarkPhysicalMemoryAsBad(
5703 IN PPHYSICAL_ADDRESS StartAddress
,
5704 IN OUT PLARGE_INTEGER NumberOfBytes
);
5709 MmMarkPhysicalMemoryAsGood(
5710 IN PPHYSICAL_ADDRESS StartAddress
,
5711 IN OUT PLARGE_INTEGER NumberOfBytes
);
5716 MmGetSystemRoutineAddress(
5717 IN PUNICODE_STRING SystemRoutineName
);
5721 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
5725 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, \
5727 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
5728 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
5733 * IN PMDL MemoryDescriptorList,
5737 #define MmInitializeMdl(_MemoryDescriptorList, \
5741 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
5742 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
5743 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
5744 (_MemoryDescriptorList)->MdlFlags = 0; \
5745 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
5746 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
5747 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
5754 IN PVOID VirtualAddress
);
5759 MmIsDriverVerifying(
5760 IN PDRIVER_OBJECT DriverObject
);
5765 MmIsThisAnNtAsSystem(
5771 MmIsVerifierEnabled(
5772 OUT PULONG VerifierFlags
);
5777 MmLockPagableDataSection(
5778 IN PVOID AddressWithinSection
);
5783 MmLockPagableImageSection(
5784 IN PVOID AddressWithinSection
);
5788 * MmLockPagableCodeSection(
5789 * IN PVOID AddressWithinSection)
5791 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
5796 MmLockPagableSectionByHandle(
5797 IN PVOID ImageSectionHandle
);
5803 IN PHYSICAL_ADDRESS PhysicalAddress
,
5804 IN ULONG NumberOfBytes
,
5805 IN MEMORY_CACHING_TYPE CacheEnable
);
5811 IN PMDL MemoryDescriptorList
,
5812 IN KPROCESSOR_MODE AccessMode
);
5817 MmLockPageableDataSection (
5818 IN PVOID AddressWithinSection
5824 MmUnlockPageableImageSection(
5825 IN PVOID ImageSectionHandle
5832 IN PVOID AddressWithinSection
);
5837 MmProbeAndLockProcessPages(
5838 IN OUT PMDL MemoryDescriptorList
,
5839 IN PEPROCESS Process
,
5840 IN KPROCESSOR_MODE AccessMode
,
5841 IN LOCK_OPERATION Operation
);
5846 MmProtectMdlSystemAddress(
5847 IN PMDL MemoryDescriptorList
,
5848 IN ULONG NewProtect
);
5854 IN PVOID BaseAddress
,
5855 IN PMDL MemoryDescriptorList
);
5860 MmUnmapViewInSessionSpace(
5861 IN PVOID MappedBase
);
5866 MmUnmapViewInSystemSpace(
5867 IN PVOID MappedBase
);
5872 MmUnsecureVirtualMemory(
5873 IN HANDLE SecureHandle
);
5877 * MmPrepareMdlForReuse(
5880 #define MmPrepareMdlForReuse(_Mdl) \
5882 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
5883 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
5884 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
5885 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
5886 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
5890 #define MmGetProcedureAddress(Address) (Address)
5895 MmProbeAndLockPages(
5896 IN OUT PMDL MemoryDescriptorList
,
5897 IN KPROCESSOR_MODE AccessMode
,
5898 IN LOCK_OPERATION Operation
);
5909 MmRemovePhysicalMemory(
5910 IN PPHYSICAL_ADDRESS StartAddress
,
5911 IN OUT PLARGE_INTEGER NumberOfBytes
);
5916 MmResetDriverPaging(
5917 IN PVOID AddressWithinSection
);
5922 MmSecureVirtualMemory(
5925 IN ULONG ProbeMode
);
5937 MmUnlockPagableImageSection(
5938 IN PVOID ImageSectionHandle
);
5944 IN PMDL MemoryDescriptorList
);
5950 IN PVOID BaseAddress
,
5951 IN SIZE_T NumberOfBytes
);
5956 MmUnmapReservedMapping(
5957 IN PVOID BaseAddress
,
5959 IN PMDL MemoryDescriptorList
);
5964 MmUnmapVideoDisplay(
5965 IN PVOID BaseAddress
,
5966 IN SIZE_T NumberOfBytes
);
5970 /** Object manager routines **/
5976 IN PACCESS_STATE AccessState
,
5977 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5979 IN POBJECT_TYPE Type
);
5984 ObDereferenceSecurityDescriptor(
5985 PSECURITY_DESCRIPTOR SecurityDescriptor
,
5991 ObfDereferenceObject(
5996 * ObDereferenceObject(
5999 #define ObDereferenceObject ObfDereferenceObject
6004 ObGetObjectSecurity(
6006 OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
6007 OUT PBOOLEAN MemoryAllocated
);
6014 IN PACCESS_STATE PassedAccessState OPTIONAL
,
6015 IN ACCESS_MASK DesiredAccess
,
6016 IN ULONG AdditionalReferences
,
6017 OUT PVOID
* ReferencedObject OPTIONAL
,
6018 OUT PHANDLE Handle
);
6029 ObLogSecurityDescriptor(
6030 IN PSECURITY_DESCRIPTOR InputSecurityDescriptor
,
6031 OUT PSECURITY_DESCRIPTOR
*OutputSecurityDescriptor
,
6035 * ObReferenceObject(
6038 #define ObReferenceObject ObfReferenceObject
6043 ObMakeTemporaryObject(
6050 IN POBJECT_ATTRIBUTES ObjectAttributes
,
6051 IN POBJECT_TYPE ObjectType
,
6052 IN KPROCESSOR_MODE AccessMode
,
6053 IN PACCESS_STATE PassedAccessState
,
6054 IN ACCESS_MASK DesiredAccess
,
6055 IN OUT PVOID ParseContext OPTIONAL
,
6056 OUT PHANDLE Handle
);
6061 ObOpenObjectByPointer(
6063 IN ULONG HandleAttributes
,
6064 IN PACCESS_STATE PassedAccessState OPTIONAL
,
6065 IN ACCESS_MASK DesiredAccess OPTIONAL
,
6066 IN POBJECT_TYPE ObjectType OPTIONAL
,
6067 IN KPROCESSOR_MODE AccessMode
,
6068 OUT PHANDLE Handle
);
6073 ObQueryObjectAuditingByHandle(
6075 OUT PBOOLEAN GenerateOnClose
);
6080 ObReferenceObjectByHandle(
6082 IN ACCESS_MASK DesiredAccess
,
6083 IN POBJECT_TYPE ObjectType OPTIONAL
,
6084 IN KPROCESSOR_MODE AccessMode
,
6086 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
);
6091 ObReferenceObjectByName(
6092 IN PUNICODE_STRING ObjectPath
,
6093 IN ULONG Attributes
,
6094 IN PACCESS_STATE PassedAccessState OPTIONAL
,
6095 IN ACCESS_MASK DesiredAccess OPTIONAL
,
6096 IN POBJECT_TYPE ObjectType
,
6097 IN KPROCESSOR_MODE AccessMode
,
6098 IN OUT PVOID ParseContext OPTIONAL
,
6104 ObReferenceObjectByPointer(
6106 IN ACCESS_MASK DesiredAccess
,
6107 IN POBJECT_TYPE ObjectType
,
6108 IN KPROCESSOR_MODE AccessMode
);
6113 ObReferenceSecurityDescriptor(
6114 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
6120 ObReleaseObjectSecurity(
6121 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
6122 IN BOOLEAN MemoryAllocated
);
6126 /** Process manager routines **/
6131 PsCreateSystemProcess(
6132 IN PHANDLE ProcessHandle
,
6133 IN ACCESS_MASK DesiredAccess
,
6134 IN POBJECT_ATTRIBUTES ObjectAttributes
);
6139 PsCreateSystemThread(
6140 OUT PHANDLE ThreadHandle
,
6141 IN ULONG DesiredAccess
,
6142 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
6143 IN HANDLE ProcessHandle OPTIONAL
,
6144 OUT PCLIENT_ID ClientId OPTIONAL
,
6145 IN PKSTART_ROUTINE StartRoutine
,
6146 IN PVOID StartContext
);
6150 * PsGetCurrentProcess(VOID)
6152 #define PsGetCurrentProcess IoGetCurrentProcess
6157 PsGetCurrentProcessId(
6162 * PsGetCurrentThread(VOID)
6164 #define PsGetCurrentThread() \
6165 ((PETHREAD) KeGetCurrentThread())
6170 PsGetCurrentThreadId(
6176 PsGetProcessId(PEPROCESS Process
);
6182 PULONG MajorVersion OPTIONAL
,
6183 PULONG MinorVersion OPTIONAL
,
6184 PULONG BuildNumber OPTIONAL
,
6185 PUNICODE_STRING CSDVersion OPTIONAL
);
6190 PsRemoveCreateThreadNotifyRoutine(
6191 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
6196 PsRemoveLoadImageNotifyRoutine(
6197 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
6202 PsSetCreateProcessNotifyRoutine(
6203 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
6209 PsSetCreateThreadNotifyRoutine(
6210 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
6215 PsSetLoadImageNotifyRoutine(
6216 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
6221 PsTerminateSystemThread(
6222 IN NTSTATUS ExitStatus
);
6224 extern NTSYSAPI PEPROCESS PsInitialSystemProcess
;
6227 /** Security reference monitor routines **/
6233 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
6234 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
6235 IN BOOLEAN SubjectContextLocked
,
6236 IN ACCESS_MASK DesiredAccess
,
6237 IN ACCESS_MASK PreviouslyGrantedAccess
,
6238 OUT PPRIVILEGE_SET
*Privileges OPTIONAL
,
6239 IN PGENERIC_MAPPING GenericMapping
,
6240 IN KPROCESSOR_MODE AccessMode
,
6241 OUT PACCESS_MASK GrantedAccess
,
6242 OUT PNTSTATUS AccessStatus
);
6248 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
6249 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
6250 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
6251 IN BOOLEAN IsDirectoryObject
,
6252 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
6253 IN PGENERIC_MAPPING GenericMapping
,
6254 IN POOL_TYPE PoolType
);
6260 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
6261 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
6262 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
6263 IN GUID
*ObjectType OPTIONAL
,
6264 IN BOOLEAN IsDirectoryObject
,
6265 IN ULONG AutoInheritFlags
,
6266 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
6267 IN PGENERIC_MAPPING GenericMapping
,
6268 IN POOL_TYPE PoolType
);
6274 IN OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
);
6279 SeSinglePrivilegeCheck(
6280 LUID PrivilegeValue
,
6281 KPROCESSOR_MODE PreviousMode
);
6286 SeValidSecurityDescriptor(
6288 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
6292 /** NtXxx routines **/
6298 OUT PHANDLE ProcessHandle
,
6299 IN ACCESS_MASK DesiredAccess
,
6300 IN POBJECT_ATTRIBUTES ObjectAttributes
,
6301 IN PCLIENT_ID ClientId OPTIONAL
);
6306 NtQueryInformationProcess(
6307 IN HANDLE ProcessHandle
,
6308 IN PROCESSINFOCLASS ProcessInformationClass
,
6309 OUT PVOID ProcessInformation
,
6310 IN ULONG ProcessInformationLength
,
6311 OUT PULONG ReturnLength OPTIONAL
);
6315 /** NtXxx and ZwXxx routines **/
6321 IN HANDLE TimerHandle
,
6322 OUT PBOOLEAN CurrentState OPTIONAL
);
6339 ZwCreateDirectoryObject(
6340 OUT PHANDLE DirectoryHandle
,
6341 IN ACCESS_MASK DesiredAccess
,
6342 IN POBJECT_ATTRIBUTES ObjectAttributes
);
6348 OUT PHANDLE EventHandle
,
6349 IN ACCESS_MASK DesiredAccess
,
6350 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
6351 IN EVENT_TYPE EventType
,
6352 IN BOOLEAN InitialState
);
6358 OUT PHANDLE EventHandle
,
6359 IN ACCESS_MASK DesiredAccess
,
6360 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
6361 IN EVENT_TYPE EventType
,
6362 IN BOOLEAN InitialState
);
6368 OUT PHANDLE FileHandle
,
6369 IN ACCESS_MASK DesiredAccess
,
6370 IN POBJECT_ATTRIBUTES ObjectAttributes
,
6371 OUT PIO_STATUS_BLOCK IoStatusBlock
,
6372 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
6373 IN ULONG FileAttributes
,
6374 IN ULONG ShareAccess
,
6375 IN ULONG CreateDisposition
,
6376 IN ULONG CreateOptions
,
6377 IN PVOID EaBuffer OPTIONAL
,
6384 OUT PHANDLE KeyHandle
,
6385 IN ACCESS_MASK DesiredAccess
,
6386 IN POBJECT_ATTRIBUTES ObjectAttributes
,
6387 IN ULONG TitleIndex
,
6388 IN PUNICODE_STRING Class OPTIONAL
,
6389 IN ULONG CreateOptions
,
6390 OUT PULONG Disposition OPTIONAL
);
6396 OUT PHANDLE TimerHandle
,
6397 IN ACCESS_MASK DesiredAccess
,
6398 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
6399 IN TIMER_TYPE TimerType
);
6405 IN HANDLE KeyHandle
);
6411 IN HANDLE KeyHandle
,
6412 IN PUNICODE_STRING ValueName
);
6417 NtDeviceIoControlFile(
6418 IN HANDLE DeviceHandle
,
6419 IN HANDLE Event OPTIONAL
,
6420 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
6421 IN PVOID UserApcContext OPTIONAL
,
6422 OUT PIO_STATUS_BLOCK IoStatusBlock
,
6423 IN ULONG IoControlCode
,
6424 IN PVOID InputBuffer
,
6425 IN ULONG InputBufferSize
,
6426 OUT PVOID OutputBuffer
,
6427 IN ULONG OutputBufferSize
);
6432 ZwDeviceIoControlFile(
6433 IN HANDLE DeviceHandle
,
6434 IN HANDLE Event OPTIONAL
,
6435 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
6436 IN PVOID UserApcContext OPTIONAL
,
6437 OUT PIO_STATUS_BLOCK IoStatusBlock
,
6438 IN ULONG IoControlCode
,
6439 IN PVOID InputBuffer
,
6440 IN ULONG InputBufferSize
,
6441 OUT PVOID OutputBuffer
,
6442 IN ULONG OutputBufferSize
);
6448 IN HANDLE KeyHandle
,
6450 IN KEY_INFORMATION_CLASS KeyInformationClass
,
6451 OUT PVOID KeyInformation
,
6453 OUT PULONG ResultLength
);
6458 ZwEnumerateValueKey(
6459 IN HANDLE KeyHandle
,
6461 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
6462 OUT PVOID KeyValueInformation
,
6464 OUT PULONG ResultLength
);
6470 IN HANDLE KeyHandle
);
6475 ZwMakeTemporaryObject(
6482 IN HANDLE SectionHandle
,
6483 IN HANDLE ProcessHandle
,
6484 IN OUT PVOID
*BaseAddress
,
6485 IN ULONG_PTR ZeroBits
,
6486 IN SIZE_T CommitSize
,
6487 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
6488 IN OUT PSIZE_T ViewSize
,
6489 IN SECTION_INHERIT InheritDisposition
,
6490 IN ULONG AllocationType
,
6497 IN HANDLE SectionHandle
,
6498 IN HANDLE ProcessHandle
,
6499 IN OUT PVOID
*BaseAddress
,
6500 IN ULONG_PTR ZeroBits
,
6501 IN SIZE_T CommitSize
,
6502 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
6503 IN OUT PSIZE_T ViewSize
,
6504 IN SECTION_INHERIT InheritDisposition
,
6505 IN ULONG AllocationType
,
6512 OUT PHANDLE FileHandle
,
6513 IN ACCESS_MASK DesiredAccess
,
6514 IN POBJECT_ATTRIBUTES ObjectAttributes
,
6515 OUT PIO_STATUS_BLOCK IoStatusBlock
,
6516 IN ULONG ShareAccess
,
6517 IN ULONG OpenOptions
);
6523 OUT PHANDLE FileHandle
,
6524 IN ACCESS_MASK DesiredAccess
,
6525 IN POBJECT_ATTRIBUTES ObjectAttributes
,
6526 OUT PIO_STATUS_BLOCK IoStatusBlock
,
6527 IN ULONG ShareAccess
,
6528 IN ULONG OpenOptions
);
6534 OUT PHANDLE KeyHandle
,
6535 IN ACCESS_MASK DesiredAccess
,
6536 IN POBJECT_ATTRIBUTES ObjectAttributes
);
6542 OUT PHANDLE SectionHandle
,
6543 IN ACCESS_MASK DesiredAccess
,
6544 IN POBJECT_ATTRIBUTES ObjectAttributes
);
6549 ZwOpenSymbolicLinkObject(
6550 OUT PHANDLE LinkHandle
,
6551 IN ACCESS_MASK DesiredAccess
,
6552 IN POBJECT_ATTRIBUTES ObjectAttributes
);
6558 OUT PHANDLE TimerHandle
,
6559 IN ACCESS_MASK DesiredAccess
,
6560 IN POBJECT_ATTRIBUTES ObjectAttributes
);
6565 ZwQueryInformationFile(
6566 IN HANDLE FileHandle
,
6567 OUT PIO_STATUS_BLOCK IoStatusBlock
,
6568 OUT PVOID FileInformation
,
6570 IN FILE_INFORMATION_CLASS FileInformationClass
);
6576 IN HANDLE KeyHandle
,
6577 IN KEY_INFORMATION_CLASS KeyInformationClass
,
6578 OUT PVOID KeyInformation
,
6580 OUT PULONG ResultLength
);
6585 ZwQuerySymbolicLinkObject(
6586 IN HANDLE LinkHandle
,
6587 IN OUT PUNICODE_STRING LinkTarget
,
6588 OUT PULONG ReturnedLength OPTIONAL
);
6594 IN HANDLE KeyHandle
,
6595 IN PUNICODE_STRING ValueName
,
6596 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
6597 OUT PVOID KeyValueInformation
,
6599 OUT PULONG ResultLength
);
6605 IN HANDLE FileHandle
,
6606 IN HANDLE Event OPTIONAL
,
6607 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
6608 IN PVOID ApcContext OPTIONAL
,
6609 OUT PIO_STATUS_BLOCK IoStatusBlock
,
6612 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
6613 IN PULONG Key OPTIONAL
);
6619 IN HANDLE FileHandle
,
6620 IN HANDLE Event OPTIONAL
,
6621 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
6622 IN PVOID ApcContext OPTIONAL
,
6623 OUT PIO_STATUS_BLOCK IoStatusBlock
,
6626 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
6627 IN PULONG Key OPTIONAL
);
6633 IN HANDLE EventHandle
,
6634 OUT PLONG PreviousState OPTIONAL
);
6640 IN HANDLE EventHandle
,
6641 OUT PLONG PreviousState OPTIONAL
);
6646 ZwSetInformationFile(
6647 IN HANDLE FileHandle
,
6648 OUT PIO_STATUS_BLOCK IoStatusBlock
,
6649 IN PVOID FileInformation
,
6651 IN FILE_INFORMATION_CLASS FileInformationClass
);
6656 ZwSetInformationThread(
6657 IN HANDLE ThreadHandle
,
6658 IN THREADINFOCLASS ThreadInformationClass
,
6659 IN PVOID ThreadInformation
,
6660 IN ULONG ThreadInformationLength
);
6666 IN HANDLE TimerHandle
,
6667 IN PLARGE_INTEGER DueTime
,
6668 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
6669 IN PVOID TimerContext OPTIONAL
,
6670 IN BOOLEAN WakeTimer
,
6671 IN LONG Period OPTIONAL
,
6672 OUT PBOOLEAN PreviousState OPTIONAL
);
6678 IN HANDLE KeyHandle
,
6679 IN PUNICODE_STRING ValueName
,
6680 IN ULONG TitleIndex OPTIONAL
,
6685 /* [Nt|Zw]MapViewOfSection.InheritDisposition constants */
6686 #define AT_EXTENDABLE_FILE 0x00002000
6687 #define AT_RESERVED 0x20000000
6688 #define AT_ROUND_TO_PAGE 0x40000000
6693 NtUnmapViewOfSection(
6694 IN HANDLE ProcessHandle
,
6695 IN PVOID BaseAddress
);
6700 ZwUnmapViewOfSection(
6701 IN HANDLE ProcessHandle
,
6702 IN PVOID BaseAddress
);
6707 NtWaitForSingleObject(
6708 IN HANDLE ObjectHandle
,
6709 IN BOOLEAN Alertable
,
6710 IN PLARGE_INTEGER TimeOut OPTIONAL
);
6715 ZwWaitForSingleObject(
6716 IN HANDLE ObjectHandle
,
6717 IN BOOLEAN Alertable
,
6718 IN PLARGE_INTEGER TimeOut OPTIONAL
);
6724 IN HANDLE FileHandle
,
6725 IN HANDLE Event OPTIONAL
,
6726 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
6727 IN PVOID ApcContext OPTIONAL
,
6728 OUT PIO_STATUS_BLOCK IoStatusBlock
,
6731 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
6732 IN PULONG Key OPTIONAL
);
6738 IN HANDLE FileHandle
,
6739 IN HANDLE Event OPTIONAL
,
6740 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
6741 IN PVOID ApcContext OPTIONAL
,
6742 OUT PIO_STATUS_BLOCK IoStatusBlock
,
6745 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
6746 IN PULONG Key OPTIONAL
);
6750 /** Power management support routines **/
6756 IN PDEVICE_OBJECT DeviceObject
,
6762 PoRegisterDeviceForIdleDetection(
6763 IN PDEVICE_OBJECT DeviceObject
,
6764 IN ULONG ConservationIdleTime
,
6765 IN ULONG PerformanceIdleTime
,
6766 IN DEVICE_POWER_STATE State
);
6771 PoRegisterSystemState(
6772 IN PVOID StateHandle
,
6773 IN EXECUTION_STATE Flags
);
6779 IN PDEVICE_OBJECT DeviceObject
,
6780 IN UCHAR MinorFunction
,
6781 IN POWER_STATE PowerState
,
6782 IN PREQUEST_POWER_COMPLETE CompletionFunction
,
6784 OUT PIRP
*Irp OPTIONAL
);
6789 PoRequestShutdownEvent(
6796 PULONG IdlePointer
);
6798 #define PoSetDeviceBusy(IdlePointer) \
6799 ((void)(*(IdlePointer) = 0))
6805 IN PDEVICE_OBJECT DeviceObject
,
6806 IN POWER_STATE_TYPE Type
,
6807 IN POWER_STATE State
);
6813 IN EXECUTION_STATE Flags
);
6818 PoStartNextPowerIrp(
6824 PoUnregisterSystemState(
6825 IN PVOID StateHandle
);
6829 /** WMI library support routines **/
6834 IN PDEVICE_OBJECT DeviceObject
,
6837 IN ULONG BufferUsed
,
6838 IN CCHAR PriorityBoost
);
6843 IN PDEVICE_OBJECT DeviceObject
,
6845 IN ULONG InstanceIndex
,
6846 IN ULONG EventDataSize
,
6847 IN PVOID EventData
);
6852 WmiQueryTraceInformation(
6853 IN TRACE_INFORMATION_CLASS TraceInformationClass
,
6854 OUT PVOID TraceInformation
,
6855 IN ULONG TraceInformationLength
,
6856 OUT PULONG RequiredLength OPTIONAL
,
6857 IN PVOID Buffer OPTIONAL
);
6862 IN PWMILIB_CONTEXT WmiLibInfo
,
6863 IN PDEVICE_OBJECT DeviceObject
,
6865 OUT PSYSCTL_IRP_DISPOSITION IrpDisposition
);
6871 IN TRACEHANDLE LoggerHandle
,
6872 IN ULONG MessageFlags
,
6873 IN LPGUID MessageGuid
,
6874 IN USHORT MessageNumber
,
6878 /* FIXME: Get va_list from where? */
6883 IN TRACEHANDLE LoggerHandle
,
6884 IN ULONG MessageFlags
,
6885 IN LPGUID MessageGuid
,
6886 IN USHORT MessageNumber
,
6887 IN
va_list MessageArgList
);
6891 /** Kernel debugger routines **/
6908 KdRefreshDebuggerNotPresent(
6912 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
6917 IN KD_OPTION Option
,
6918 IN ULONG InBufferBytes OPTIONAL
,
6920 IN ULONG OutBufferBytes OPTIONAL
,
6921 OUT PVOID OutBuffer
,
6922 OUT PULONG OutBufferNeeded OPTIONAL
);
6933 DbgBreakPointWithStatus(
6946 IN ULONG ComponentId
,
6954 IN ULONG ComponentId
,
6961 vDbgPrintExWithPrefix(
6963 IN ULONG ComponentId
,
6971 DbgPrintReturnControlC(
6980 IN ULONG MaximumResponseLength
6986 DbgQueryDebugFilterState(
6987 IN ULONG ComponentId
,
6993 DbgSetDebugFilterState(
6994 IN ULONG ComponentId
,
7000 #define KdPrint(_x_) DbgPrint _x_
7001 #define KdPrintEx(_x_) DbgPrintEx _x_
7002 #define KdBreakPoint() DbgBreakPoint()
7003 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
7007 #define KdPrint(_x_)
7008 #define KdPrintEx(_x_)
7009 #define KdBreakPoint()
7010 #define KdBreakPointWithStatus(s)
7014 #if defined(__GNUC__)
7016 extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent
;
7017 extern NTKERNELAPI BOOLEAN KdDebuggerEnabled
;
7018 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
7019 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
7021 #elif defined(_NTDDK_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
7023 extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent
;
7024 extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled
;
7025 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
7026 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
7030 extern BOOLEAN KdDebuggerNotPresent
;
7031 extern BOOLEAN KdDebuggerEnabled
;
7032 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
7033 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
7037 /** Stuff from winnt4.h */
7039 #ifndef DMA_MACROS_DEFINED
7041 #if (NTDDI_VERSION >= NTDDI_WIN2K)
7043 //DECLSPEC_DEPRECATED_DDK
7047 IoFlushAdapterBuffers(
7048 IN PADAPTER_OBJECT AdapterObject
,
7050 IN PVOID MapRegisterBase
,
7053 IN BOOLEAN WriteToDevice
);
7055 //DECLSPEC_DEPRECATED_DDK
7059 IoFreeAdapterChannel(
7060 IN PADAPTER_OBJECT AdapterObject
);
7062 //DECLSPEC_DEPRECATED_DDK
7067 IN PADAPTER_OBJECT AdapterObject
,
7068 IN PVOID MapRegisterBase
,
7069 IN ULONG NumberOfMapRegisters
);
7071 //DECLSPEC_DEPRECATED_DDK
7076 IN PADAPTER_OBJECT AdapterObject
,
7078 IN PVOID MapRegisterBase
,
7080 IN OUT PULONG Length
,
7081 IN BOOLEAN WriteToDevice
);
7084 #endif // (NTDDI_VERSION >= NTDDI_WIN2K)
7085 #endif // !defined(DMA_MACROS_DEFINED)
7091 IN PUNICODE_STRING RegistryPath
,
7092 IN PUNICODE_STRING DriverClassName OPTIONAL
,
7093 IN PDRIVER_OBJECT DriverObject
,
7094 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
7095 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources
,
7096 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
7101 IoAttachDeviceByPointer(
7102 IN PDEVICE_OBJECT SourceDevice
,
7103 IN PDEVICE_OBJECT TargetDevice
);
7108 MmIsNonPagedSystemAddressValid(
7109 IN PVOID VirtualAddress
);
7111 #if defined(_AMD64_) || defined(_IA64_)
7112 //DECLSPEC_DEPRECATED_DDK_WINXP
7116 RtlLargeIntegerDivide(
7117 IN LARGE_INTEGER Dividend
,
7118 IN LARGE_INTEGER Divisor
,
7119 IN OUT PLARGE_INTEGER Remainder
)
7122 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
7124 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
7131 RtlLargeIntegerDivide(
7132 IN LARGE_INTEGER Dividend
,
7133 IN LARGE_INTEGER Divisor
,
7134 IN OUT PLARGE_INTEGER Remainder
);
7140 ExInterlockedDecrementLong(
7142 IN PKSPIN_LOCK Lock
);
7147 ExInterlockedExchangeUlong(
7150 IN PKSPIN_LOCK Lock
);
7155 ExInterlockedIncrementLong(
7157 IN PKSPIN_LOCK Lock
);
7162 HalAcquireDisplayOwnership(
7163 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
7168 HalAllocateAdapterChannel(
7169 IN PADAPTER_OBJECT AdapterObject
,
7170 IN PWAIT_CONTEXT_BLOCK Wcb
,
7171 IN ULONG NumberOfMapRegisters
,
7172 IN PDRIVER_CONTROL ExecutionRoutine
);
7177 HalAllocateCommonBuffer(
7178 IN PADAPTER_OBJECT AdapterObject
,
7180 OUT PPHYSICAL_ADDRESS LogicalAddress
,
7181 IN BOOLEAN CacheEnabled
);
7186 HalAssignSlotResources(
7187 IN PUNICODE_STRING RegistryPath
,
7188 IN PUNICODE_STRING DriverClassName
,
7189 IN PDRIVER_OBJECT DriverObject
,
7190 IN PDEVICE_OBJECT DeviceObject
,
7191 IN INTERFACE_TYPE BusType
,
7193 IN ULONG SlotNumber
,
7194 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
7199 HalFreeCommonBuffer(
7200 IN PADAPTER_OBJECT AdapterObject
,
7202 IN PHYSICAL_ADDRESS LogicalAddress
,
7203 IN PVOID VirtualAddress
,
7204 IN BOOLEAN CacheEnabled
);
7210 IN PDEVICE_DESCRIPTION DeviceDescription
,
7211 IN OUT PULONG NumberOfMapRegisters
);
7217 IN BUS_DATA_TYPE BusDataType
,
7219 IN ULONG SlotNumber
,
7226 HalGetBusDataByOffset(
7227 IN BUS_DATA_TYPE BusDataType
,
7229 IN ULONG SlotNumber
,
7237 HalGetDmaAlignmentRequirement(
7243 HalGetInterruptVector(
7244 IN INTERFACE_TYPE InterfaceType
,
7246 IN ULONG BusInterruptLevel
,
7247 IN ULONG BusInterruptVector
,
7249 OUT PKAFFINITY Affinity
);
7255 IN PADAPTER_OBJECT AdapterObject
);
7261 IN BUS_DATA_TYPE BusDataType
,
7263 IN ULONG SlotNumber
,
7270 HalSetBusDataByOffset(
7271 IN BUS_DATA_TYPE BusDataType
,
7273 IN ULONG SlotNumber
,
7281 HalTranslateBusAddress(
7282 IN INTERFACE_TYPE InterfaceType
,
7284 IN PHYSICAL_ADDRESS BusAddress
,
7285 IN OUT PULONG AddressSpace
,
7286 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
7291 RtlLargeIntegerEqualToZero(
7292 IN LARGE_INTEGER Operand
);
7297 RtlLargeIntegerGreaterOrEqualToZero(
7298 IN LARGE_INTEGER Operand
);
7303 RtlLargeIntegerGreaterThan(
7304 IN LARGE_INTEGER Operand1
,
7305 IN LARGE_INTEGER Operand2
);
7310 RtlLargeIntegerGreaterThanOrEqualTo(
7311 IN LARGE_INTEGER Operand1
,
7312 IN LARGE_INTEGER Operand2
);
7317 RtlLargeIntegerGreaterThanZero(
7318 IN LARGE_INTEGER Operand
);
7323 RtlLargeIntegerLessOrEqualToZero(
7324 IN LARGE_INTEGER Operand
);
7329 RtlLargeIntegerLessThan(
7330 IN LARGE_INTEGER Operand1
,
7331 IN LARGE_INTEGER Operand2
);
7336 RtlLargeIntegerLessThanOrEqualTo(
7337 IN LARGE_INTEGER Operand1
,
7338 IN LARGE_INTEGER Operand2
);
7343 RtlLargeIntegerLessThanZero(
7344 IN LARGE_INTEGER Operand
);
7349 RtlLargeIntegerNegate(
7350 IN LARGE_INTEGER Subtrahend
);
7355 RtlLargeIntegerNotEqualTo(
7356 IN LARGE_INTEGER Operand1
,
7357 IN LARGE_INTEGER Operand2
);
7362 RtlLargeIntegerNotEqualToZero(
7363 IN LARGE_INTEGER Operand
);
7368 RtlLargeIntegerShiftLeft(
7369 IN LARGE_INTEGER LargeInteger
,
7370 IN CCHAR ShiftCount
);
7375 RtlLargeIntegerShiftRight(
7376 IN LARGE_INTEGER LargeInteger
,
7377 IN CCHAR ShiftCount
);
7382 RtlLargeIntegerSubtract(
7383 IN LARGE_INTEGER Minuend
,
7384 IN LARGE_INTEGER Subtrahend
);
7389 * COMPUTE_PAGES_SPANNED(
7393 #define COMPUTE_PAGES_SPANNED(Va, \
7395 (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
7399 ** Architecture specific structures
7407 Exfi386InterlockedIncrementLong(
7413 Exfi386InterlockedDecrementLong(
7419 Exfi386InterlockedExchangeUlong(
7423 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
7424 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
7425 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
7431 // NT-ARM is not documented
7440 #endif /* __WINDDK_H */