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
46 #define NTHALAPI DECLSPEC_IMPORT
51 /* Pseudo modifiers for parameters */
67 #define RESTRICTED_POINTER
70 #define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
72 #define POINTER_ALIGNMENT
75 #define DECLSPEC_ADDRSAFE
77 #ifdef NONAMELESSUNION
78 # define _DDK_DUMMYUNION_MEMBER(name) DUMMYUNIONNAME.name
79 # define _DDK_DUMMYUNION_N_MEMBER(n, name) DUMMYUNIONNAME##n.name
81 # define _DDK_DUMMYUNION_MEMBER(name) name
82 # define _DDK_DUMMYUNION_N_MEMBER(n, name) name
86 ** Forward declarations
92 struct _DRIVE_LAYOUT_INFORMATION_EX
;
93 struct _LOADER_PARAMETER_BLOCK
;
97 /* FIXME: Unknown definitions */
98 struct _SET_PARTITION_INFORMATION_EX
;
99 typedef ULONG WAIT_TYPE
;
102 typedef HANDLE TRACEHANDLE
;
103 typedef PVOID PWMILIB_CONTEXT
;
104 typedef ULONG LOGICAL
;
108 ** WmiLib specific structure
112 IrpProcessed
, // Irp was processed and possibly completed
113 IrpNotCompleted
, // Irp was process and NOT completed
114 IrpNotWmi
, // Irp is not a WMI irp
115 IrpForward
// Irp is wmi irp, but targeted at another device object
116 } SYSCTL_IRP_DISPOSITION
, *PSYSCTL_IRP_DISPOSITION
;
121 struct _COMPRESSED_DATA_INFO
;
123 #define KERNEL_STACK_SIZE 12288
124 #define KERNEL_LARGE_STACK_SIZE 61440
125 #define KERNEL_LARGE_STACK_COMMIT 12288
127 #define EXCEPTION_READ_FAULT 0
128 #define EXCEPTION_WRITE_FAULT 1
129 #define EXCEPTION_EXECUTE_FAULT 8
131 #define DPFLTR_ERROR_LEVEL 0
132 #define DPFLTR_WARNING_LEVEL 1
133 #define DPFLTR_TRACE_LEVEL 2
134 #define DPFLTR_INFO_LEVEL 3
135 #define DPFLTR_MASK 0x80000000
137 typedef enum _DPFLTR_TYPE
139 DPFLTR_SYSTEM_ID
= 0,
144 DPFLTR_CRASHDUMP_ID
= 5,
145 DPFLTR_CDAUDIO_ID
= 6,
147 DPFLTR_CLASSPNP_ID
= 8,
149 DPFLTR_REDBOOK_ID
= 10,
150 DPFLTR_STORPROP_ID
= 11,
151 DPFLTR_SCSIPORT_ID
= 12,
152 DPFLTR_SCSIMINIPORT_ID
= 13,
153 DPFLTR_CONFIG_ID
= 14,
154 DPFLTR_I8042PRT_ID
= 15,
155 DPFLTR_SERMOUSE_ID
= 16,
156 DPFLTR_LSERMOUS_ID
= 17,
157 DPFLTR_KBDHID_ID
= 18,
158 DPFLTR_MOUHID_ID
= 19,
159 DPFLTR_KBDCLASS_ID
= 20,
160 DPFLTR_MOUCLASS_ID
= 21,
161 DPFLTR_TWOTRACK_ID
= 22,
162 DPFLTR_WMILIB_ID
= 23,
165 DPFLTR_HALIA64_ID
= 26,
166 DPFLTR_VIDEO_ID
= 27,
167 DPFLTR_SVCHOST_ID
= 28,
168 DPFLTR_VIDEOPRT_ID
= 29,
169 DPFLTR_TCPIP_ID
= 30,
170 DPFLTR_DMSYNTH_ID
= 31,
171 DPFLTR_NTOSPNP_ID
= 32,
172 DPFLTR_FASTFAT_ID
= 33,
173 DPFLTR_SAMSS_ID
= 34,
174 DPFLTR_PNPMGR_ID
= 35,
175 DPFLTR_NETAPI_ID
= 36,
176 DPFLTR_SCSERVER_ID
= 37,
177 DPFLTR_SCCLIENT_ID
= 38,
178 DPFLTR_SERIAL_ID
= 39,
179 DPFLTR_SERENUM_ID
= 40,
181 DPFLTR_BOOTOK_ID
= 42,
182 DPFLTR_BOOTVRFY_ID
= 43,
183 DPFLTR_RPCPROXY_ID
= 44,
184 DPFLTR_AUTOCHK_ID
= 45,
185 DPFLTR_DCOMSS_ID
= 46,
186 DPFLTR_UNIMODEM_ID
= 47,
188 DPFLTR_FLTMGR_ID
= 49,
189 DPFLTR_WMICORE_ID
= 50,
190 DPFLTR_BURNENG_ID
= 51,
191 DPFLTR_IMAPI_ID
= 52,
193 DPFLTR_FUSION_ID
= 54,
194 DPFLTR_IDLETASK_ID
= 55,
195 DPFLTR_SOFTPCI_ID
= 56,
197 DPFLTR_MCHGR_ID
= 58,
199 DPFLTR_PCIIDE_ID
= 60,
200 DPFLTR_FLOPPY_ID
= 61,
202 DPFLTR_TERMSRV_ID
= 63,
203 DPFLTR_W32TIME_ID
= 64,
204 DPFLTR_PREFETCHER_ID
= 65,
205 DPFLTR_RSFILTER_ID
= 66,
206 DPFLTR_FCPORT_ID
= 67,
209 DPFLTR_DMCONFIG_ID
= 70,
210 DPFLTR_DMADMIN_ID
= 71,
211 DPFLTR_WSOCKTRANSPORT_ID
= 72,
213 DPFLTR_PNPMEM_ID
= 74,
214 DPFLTR_PROCESSOR_ID
= 75,
215 DPFLTR_DMSERVER_ID
= 76,
217 DPFLTR_INFINIBAND_ID
= 78,
218 DPFLTR_IHVDRIVER_ID
= 79,
219 DPFLTR_IHVVIDEO_ID
= 80,
220 DPFLTR_IHVAUDIO_ID
= 81,
221 DPFLTR_IHVNETWORK_ID
= 82,
222 DPFLTR_IHVSTREAMING_ID
= 83,
223 DPFLTR_IHVBUS_ID
= 84,
225 DPFLTR_RTLTHREADPOOL_ID
= 86,
227 DPFLTR_TCPIP6_ID
= 88,
228 DPFLTR_ISAPNP_ID
= 89,
230 DPFLTR_STORPORT_ID
= 91,
231 DPFLTR_STORMINIPORT_ID
= 92,
232 DPFLTR_PRINTSPOOLER_ID
= 93,
234 DPFLTR_VDSBAS_ID
= 95,
235 DPFLTR_VDSDYNDR_ID
= 96,
236 DPFLTR_VDSUTIL_ID
= 97,
237 DPFLTR_DFRGIFC_ID
= 98,
238 DPFLTR_DEFAULT_ID
= 99,
240 DPFLTR_DFSC_ID
= 101,
241 DPFLTR_WOW64_ID
= 102,
245 /* also in winnt.h */
247 #define FILE_COPY_STRUCTURED_STORAGE 0x00000041
248 #define FILE_STRUCTURED_STORAGE 0x00000441
252 #define THREAD_ALERT (0x0004)
254 /* Exported object types */
255 extern POBJECT_TYPE NTSYSAPI ExDesktopObjectType
;
256 extern POBJECT_TYPE NTSYSAPI ExEventObjectType
;
257 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType
;
258 extern POBJECT_TYPE NTSYSAPI ExWindowStationObjectType
;
259 extern ULONG NTSYSAPI IoDeviceHandlerObjectSize
;
260 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType
;
261 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType
;
262 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType
;
263 extern POBJECT_TYPE NTSYSAPI IoFileObjectType
;
264 extern POBJECT_TYPE NTSYSAPI PsThreadType
;
265 extern POBJECT_TYPE NTSYSAPI LpcPortObjectType
;
266 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType
;
267 extern POBJECT_TYPE NTSYSAPI PsProcessType
;
269 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
270 extern volatile CCHAR NTSYSAPI KeNumberProcessors
;
272 #if (NTDDI_VERSION >= NTDDI_WINXP)
273 extern CCHAR NTSYSAPI KeNumberProcessors
;
275 //extern PCCHAR KeNumberProcessors;
276 extern NTSYSAPI CCHAR KeNumberProcessors
; //FIXME: Note to Alex: I won't fix this atm, since I prefer to discuss this with you first.
280 #define MAX_WOW64_SHARED_ENTRIES 16
282 extern volatile KSYSTEM_TIME KeTickCount
;
284 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
285 #define NX_SUPPORT_POLICY_ALWAYSON 1
286 #define NX_SUPPORT_POLICY_OPTIN 2
287 #define NX_SUPPORT_POLICY_OPTOUT 3
289 typedef struct _KUSER_SHARED_DATA
291 ULONG TickCountLowDeprecated
;
292 ULONG TickCountMultiplier
;
293 volatile KSYSTEM_TIME InterruptTime
;
294 volatile KSYSTEM_TIME SystemTime
;
295 volatile KSYSTEM_TIME TimeZoneBias
;
296 USHORT ImageNumberLow
;
297 USHORT ImageNumberHigh
;
298 WCHAR NtSystemRoot
[260];
299 ULONG MaxStackTraceDepth
;
300 ULONG CryptoExponent
;
302 ULONG LargePageMinimum
;
304 NT_PRODUCT_TYPE NtProductType
;
305 BOOLEAN ProductTypeIsValid
;
306 ULONG NtMajorVersion
;
307 ULONG NtMinorVersion
;
308 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
311 volatile ULONG TimeSlip
;
312 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
313 LARGE_INTEGER SystemExpirationDate
;
315 BOOLEAN KdDebuggerEnabled
;
316 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
317 UCHAR NXSupportPolicy
;
319 volatile ULONG ActiveConsoleId
;
320 volatile ULONG DismountCount
;
321 ULONG ComPlusPackage
;
322 ULONG LastSystemRITEventTickCount
;
323 ULONG NumberOfPhysicalPages
;
324 BOOLEAN SafeBootMode
;
327 ULONGLONG TestRetInstruction
;
329 ULONG SystemCallReturn
;
330 ULONGLONG SystemCallPad
[3];
331 __GNU_EXTENSION
union {
332 volatile KSYSTEM_TIME TickCount
;
333 volatile ULONG64 TickCountQuad
;
336 #if (NTDDI_VERSION >= NTDDI_WS03)
337 LONGLONG ConsoleSessionForegroundProcessId
;
338 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
340 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
341 USHORT UserModeGlobalLogger
[8];
342 ULONG HeapTracingPid
[2];
343 ULONG CritSecTracingPid
[2];
344 __GNU_EXTENSION
union
346 ULONG SharedDataFlags
;
347 __GNU_EXTENSION
struct
349 ULONG DbgErrorPortPresent
:1;
350 ULONG DbgElevationEnabled
:1;
351 ULONG DbgVirtEnabled
:1;
352 ULONG DbgInstallerDetectEnabled
:1;
356 ULONG ImageFileExecutionOptions
;
357 KAFFINITY ActiveProcessorAffinity
;
359 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
362 ** IRP function codes
365 #define IRP_MN_QUERY_DIRECTORY 0x01
366 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
368 #define IRP_MN_USER_FS_REQUEST 0x00
369 #define IRP_MN_MOUNT_VOLUME 0x01
370 #define IRP_MN_VERIFY_VOLUME 0x02
371 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
372 #define IRP_MN_TRACK_LINK 0x04
373 #define IRP_MN_KERNEL_CALL 0x04
375 #define IRP_MN_LOCK 0x01
376 #define IRP_MN_UNLOCK_SINGLE 0x02
377 #define IRP_MN_UNLOCK_ALL 0x03
378 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
380 #define IRP_MN_NORMAL 0x00
381 #define IRP_MN_DPC 0x01
382 #define IRP_MN_MDL 0x02
383 #define IRP_MN_COMPLETE 0x04
384 #define IRP_MN_COMPRESSED 0x08
386 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
387 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
388 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
390 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
392 typedef EXCEPTION_DISPOSITION
393 (DDKAPI
*PEXCEPTION_ROUTINE
)(
394 IN
struct _EXCEPTION_RECORD
*ExceptionRecord
,
395 IN PVOID EstablisherFrame
,
396 IN OUT
struct _CONTEXT
*ContextRecord
,
397 IN OUT PVOID DispatcherContext
);
400 (DDKAPI
*PDRIVER_ENTRY
)(
401 IN
struct _DRIVER_OBJECT
*DriverObject
,
402 IN PUNICODE_STRING RegistryPath
);
405 (DDKAPI
*PDRIVER_REINITIALIZE
)(
406 IN
struct _DRIVER_OBJECT
*DriverObject
,
411 (DDKAPI
*PKTRANSFER_ROUTINE
)(
414 #define ASSERT_GATE(object) \
415 ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
416 (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
418 #define TIMER_TABLE_SIZE 512
419 #define TIMER_TABLE_SHIFT 9
421 #define ASSERT_TIMER(E) \
422 ASSERT(((E)->Header.Type == TimerNotificationObject) || \
423 ((E)->Header.Type == TimerSynchronizationObject))
425 #define ASSERT_MUTANT(E) \
426 ASSERT((E)->Header.Type == MutantObject)
428 #define ASSERT_SEMAPHORE(E) \
429 ASSERT((E)->Header.Type == SemaphoreObject)
431 #define ASSERT_EVENT(E) \
432 ASSERT(((E)->Header.Type == NotificationEvent) || \
433 ((E)->Header.Type == SynchronizationEvent))
436 typedef enum _TIMER_TYPE
{
441 #define KEYBOARD_INSERT_ON 0x08
442 #define KEYBOARD_CAPS_LOCK_ON 0x04
443 #define KEYBOARD_NUM_LOCK_ON 0x02
444 #define KEYBOARD_SCROLL_LOCK_ON 0x01
445 #define KEYBOARD_ALT_KEY_DOWN 0x80
446 #define KEYBOARD_CTRL_KEY_DOWN 0x40
447 #define KEYBOARD_LEFT_SHIFT_DOWN 0x20
448 #define KEYBOARD_RIGHT_SHIFT_DOWN 0x10
450 typedef struct _IO_COUNTERS
{
451 ULONGLONG ReadOperationCount
;
452 ULONGLONG WriteOperationCount
;
453 ULONGLONG OtherOperationCount
;
454 ULONGLONG ReadTransferCount
;
455 ULONGLONG WriteTransferCount
;
456 ULONGLONG OtherTransferCount
;
457 } IO_COUNTERS
, *PIO_COUNTERS
;
459 typedef struct _VM_COUNTERS
461 SIZE_T PeakVirtualSize
;
463 ULONG PageFaultCount
;
464 SIZE_T PeakWorkingSetSize
;
465 SIZE_T WorkingSetSize
;
466 SIZE_T QuotaPeakPagedPoolUsage
;
467 SIZE_T QuotaPagedPoolUsage
;
468 SIZE_T QuotaPeakNonPagedPoolUsage
;
469 SIZE_T QuotaNonPagedPoolUsage
;
470 SIZE_T PagefileUsage
;
471 SIZE_T PeakPagefileUsage
;
472 } VM_COUNTERS
, *PVM_COUNTERS
;
474 typedef struct _VM_COUNTERS_EX
476 SIZE_T PeakVirtualSize
;
478 ULONG PageFaultCount
;
479 SIZE_T PeakWorkingSetSize
;
480 SIZE_T WorkingSetSize
;
481 SIZE_T QuotaPeakPagedPoolUsage
;
482 SIZE_T QuotaPagedPoolUsage
;
483 SIZE_T QuotaPeakNonPagedPoolUsage
;
484 SIZE_T QuotaNonPagedPoolUsage
;
485 SIZE_T PagefileUsage
;
486 SIZE_T PeakPagefileUsage
;
488 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
490 typedef struct _POOLED_USAGE_AND_LIMITS
492 SIZE_T PeakPagedPoolUsage
;
493 SIZE_T PagedPoolUsage
;
494 SIZE_T PagedPoolLimit
;
495 SIZE_T PeakNonPagedPoolUsage
;
496 SIZE_T NonPagedPoolUsage
;
497 SIZE_T NonPagedPoolLimit
;
498 SIZE_T PeakPagefileUsage
;
499 SIZE_T PagefileUsage
;
500 SIZE_T PagefileLimit
;
501 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
503 typedef struct _CONTROLLER_OBJECT
{
506 PVOID ControllerExtension
;
507 KDEVICE_QUEUE DeviceWaitQueue
;
509 LARGE_INTEGER Spare2
;
510 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
512 /* DEVICE_OBJECT.Flags */
514 #define DO_DEVICE_HAS_NAME 0x00000040
515 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
516 #define DO_LONG_TERM_REQUESTS 0x00000200
517 #define DO_NEVER_LAST_DEVICE 0x00000400
518 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
519 #define DO_XIP 0x00020000
521 #define DRVO_REINIT_REGISTERED 0x00000008
522 #define DRVO_INITIALIZED 0x00000010
523 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
524 #define DRVO_LEGACY_RESOURCES 0x00000040
526 typedef enum _ARBITER_REQUEST_SOURCE
{
527 ArbiterRequestUndefined
= -1,
528 ArbiterRequestLegacyReported
,
529 ArbiterRequestHalReported
,
530 ArbiterRequestLegacyAssigned
,
531 ArbiterRequestPnpDetected
,
532 ArbiterRequestPnpEnumerated
533 } ARBITER_REQUEST_SOURCE
;
535 typedef enum _ARBITER_RESULT
{
536 ArbiterResultUndefined
= -1,
537 ArbiterResultSuccess
,
538 ArbiterResultExternalConflict
,
539 ArbiterResultNullRequest
542 typedef enum _ARBITER_ACTION
{
543 ArbiterActionTestAllocation
,
544 ArbiterActionRetestAllocation
,
545 ArbiterActionCommitAllocation
,
546 ArbiterActionRollbackAllocation
,
547 ArbiterActionQueryAllocatedResources
,
548 ArbiterActionWriteReservedResources
,
549 ArbiterActionQueryConflict
,
550 ArbiterActionQueryArbitrate
,
551 ArbiterActionAddReserved
,
552 ArbiterActionBootAllocation
553 } ARBITER_ACTION
, *PARBITER_ACTION
;
555 typedef struct _ARBITER_CONFLICT_INFO
{
556 PDEVICE_OBJECT OwningObject
;
559 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
561 typedef struct _ARBITER_PARAMETERS
{
564 IN OUT PLIST_ENTRY ArbitrationList
;
565 IN ULONG AllocateFromCount
;
566 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
570 IN OUT PLIST_ENTRY ArbitrationList
;
571 IN ULONG AllocateFromCount
;
572 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
576 IN OUT PLIST_ENTRY ArbitrationList
;
580 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
581 } QueryAllocatedResources
;
584 IN PDEVICE_OBJECT PhysicalDeviceObject
;
585 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
586 OUT PULONG ConflictCount
;
587 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
591 IN PLIST_ENTRY ArbitrationList
;
595 IN PDEVICE_OBJECT ReserveDevice
;
598 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
600 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
602 typedef struct _ARBITER_LIST_ENTRY
{
603 LIST_ENTRY ListEntry
;
604 ULONG AlternativeCount
;
605 PIO_RESOURCE_DESCRIPTOR Alternatives
;
606 PDEVICE_OBJECT PhysicalDeviceObject
;
607 ARBITER_REQUEST_SOURCE RequestSource
;
610 INTERFACE_TYPE InterfaceType
;
613 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
614 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
615 ARBITER_RESULT Result
;
616 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
619 (DDKAPI
*PARBITER_HANDLER
)(
621 IN ARBITER_ACTION Action
,
622 IN OUT PARBITER_PARAMETERS Parameters
);
624 #define ARBITER_PARTIAL 0x00000001
626 typedef struct _ARBITER_INTERFACE
{
630 PINTERFACE_REFERENCE InterfaceReference
;
631 PINTERFACE_DEREFERENCE InterfaceDereference
;
632 PARBITER_HANDLER ArbiterHandler
;
634 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
636 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
637 HalInstalledBusInformation
,
638 HalProfileSourceInformation
,
639 HalInformationClassUnused1
,
641 HalProcessorSpeedInformation
,
642 HalCallbackInformation
,
643 HalMapRegisterInformation
,
644 HalMcaLogInformation
,
645 HalFrameBufferCachingInformation
,
646 HalDisplayBiosInformation
,
647 HalProcessorFeatureInformation
,
648 HalNumaTopologyInterface
,
650 HalCmcLogInformation
,
651 HalCpeLogInformation
,
652 HalQueryMcaInterface
,
653 HalQueryAMLIIllegalIOPortAddresses
,
654 HalQueryMaxHotPlugMemoryAddress
,
655 HalPartitionIpiInterface
,
656 HalPlatformInformation
,
657 HalQueryProfileSourceList
658 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
660 typedef enum _HAL_SET_INFORMATION_CLASS
{
661 HalProfileSourceInterval
,
662 HalProfileSourceInterruptHandler
,
663 HalMcaRegisterDriver
,
664 HalKernelErrorHandler
,
665 HalCmcRegisterDriver
,
666 HalCpeRegisterDriver
,
670 HalGenerateCmcInterrupt
671 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
673 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
675 KPROFILE_SOURCE Source
;
677 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
679 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
681 KPROFILE_SOURCE Source
;
684 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
686 typedef struct _MAP_REGISTER_ENTRY
689 BOOLEAN WriteToDevice
;
690 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
697 PUCHAR TranslatedAddress
;
699 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
703 PHYSICAL_ADDRESS Start
;
704 PHYSICAL_ADDRESS MaxEnd
;
705 PVOID VirtualAddress
;
709 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
721 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
722 DEBUG_MEMORY_REQUIREMENTS Memory
;
723 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
725 /* Function Type Defintions for Dispatch Functions */
726 struct _DEVICE_CONTROL_CONTEXT
;
729 (DDKAPI
*PDEVICE_CONTROL_COMPLETION
)(
730 IN
struct _DEVICE_CONTROL_CONTEXT
*ControlContext
);
732 typedef struct _DEVICE_CONTROL_CONTEXT
{
734 PDEVICE_HANDLER_OBJECT DeviceHandler
;
735 PDEVICE_OBJECT DeviceObject
;
740 } DEVICE_CONTROL_CONTEXT
, *PDEVICE_CONTROL_CONTEXT
;
742 typedef struct _PM_DISPATCH_TABLE
{
746 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
748 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
749 TranslateChildToParent
,
750 TranslateParentToChild
751 } RESOURCE_TRANSLATION_DIRECTION
;
754 (DDKAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
756 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
757 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
758 IN ULONG AlternativesCount
,
759 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
760 IN PDEVICE_OBJECT PhysicalDeviceObject
,
761 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
764 (DDKAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
766 IN PIO_RESOURCE_DESCRIPTOR Source
,
767 IN PDEVICE_OBJECT PhysicalDeviceObject
,
768 OUT PULONG TargetCount
,
769 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
771 typedef struct _TRANSLATOR_INTERFACE
{
775 PINTERFACE_REFERENCE InterfaceReference
;
776 PINTERFACE_DEREFERENCE InterfaceDereference
;
777 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
778 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
779 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
782 (DDKAPI
*pHalDeviceControl
)(
783 IN PDEVICE_HANDLER_OBJECT DeviceHandler
,
784 IN PDEVICE_OBJECT DeviceObject
,
785 IN ULONG ControlCode
,
786 IN OUT PVOID Buffer OPTIONAL
,
787 IN OUT PULONG BufferLength OPTIONAL
,
789 IN PDEVICE_CONTROL_COMPLETION CompletionRoutine
);
792 (FASTCALL
*pHalExamineMBR
)(
793 IN PDEVICE_OBJECT DeviceObject
,
795 IN ULONG MBRTypeIdentifier
,
799 (FASTCALL
*pHalIoAssignDriveLetters
)(
800 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
801 IN PSTRING NtDeviceName
,
802 OUT PUCHAR NtSystemPath
,
803 OUT PSTRING NtSystemPathString
);
806 (FASTCALL
*pHalIoReadPartitionTable
)(
807 IN PDEVICE_OBJECT DeviceObject
,
809 IN BOOLEAN ReturnRecognizedPartitions
,
810 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
813 (FASTCALL
*pHalIoSetPartitionInformation
)(
814 IN PDEVICE_OBJECT DeviceObject
,
816 IN ULONG PartitionNumber
,
817 IN ULONG PartitionType
);
820 (FASTCALL
*pHalIoWritePartitionTable
)(
821 IN PDEVICE_OBJECT DeviceObject
,
823 IN ULONG SectorsPerTrack
,
824 IN ULONG NumberOfHeads
,
825 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
828 (FASTCALL
*pHalHandlerForBus
)(
829 IN INTERFACE_TYPE InterfaceType
,
833 (FASTCALL
*pHalReferenceBusHandler
)(
834 IN PBUS_HANDLER BusHandler
);
837 (DDKAPI
*pHalQuerySystemInformation
)(
838 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
841 OUT PULONG ReturnedLength
);
844 (DDKAPI
*pHalSetSystemInformation
)(
845 IN HAL_SET_INFORMATION_CLASS InformationClass
,
850 (DDKAPI
*pHalQueryBusSlots
)(
851 IN PBUS_HANDLER BusHandler
,
853 OUT PULONG SlotNumbers
,
854 OUT PULONG ReturnedLength
);
857 (DDKAPI
*pHalInitPnpDriver
)(
861 (DDKAPI
*pHalInitPowerManagement
)(
862 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
863 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
865 typedef struct _DMA_ADAPTER
*
866 (DDKAPI
*pHalGetDmaAdapter
)(
868 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
869 OUT PULONG NumberOfMapRegisters
);
872 (DDKAPI
*pHalGetInterruptTranslator
)(
873 IN INTERFACE_TYPE ParentInterfaceType
,
874 IN ULONG ParentBusNumber
,
875 IN INTERFACE_TYPE BridgeInterfaceType
,
878 OUT PTRANSLATOR_INTERFACE Translator
,
879 OUT PULONG BridgeBusNumber
);
882 (DDKAPI
*pHalStartMirroring
)(
886 (DDKAPI
*pHalEndMirroring
)(
887 IN ULONG PassNumber
);
890 (DDKAPI
*pHalMirrorPhysicalMemory
)(
891 IN PHYSICAL_ADDRESS PhysicalAddress
,
892 IN LARGE_INTEGER NumberOfBytes
);
895 (DDKAPI
*pHalMirrorVerify
)(
896 IN PHYSICAL_ADDRESS PhysicalAddress
,
897 IN LARGE_INTEGER NumberOfBytes
);
900 (DDKAPI
*pHalEndOfBoot
)(
905 (DDKAPI
*pHalTranslateBusAddress
)(
906 IN INTERFACE_TYPE InterfaceType
,
908 IN PHYSICAL_ADDRESS BusAddress
,
909 IN OUT PULONG AddressSpace
,
910 OUT PPHYSICAL_ADDRESS TranslatedAddress
915 (DDKAPI
*pHalAssignSlotResources
)(
916 IN PUNICODE_STRING RegistryPath
,
917 IN PUNICODE_STRING DriverClassName OPTIONAL
,
918 IN PDRIVER_OBJECT DriverObject
,
919 IN PDEVICE_OBJECT DeviceObject
,
920 IN INTERFACE_TYPE BusType
,
923 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
928 (DDKAPI
*pHalHaltSystem
)(
934 (DDKAPI
*pHalResetDisplay
)(
940 (DDKAPI
*pHalVectorToIDTEntry
)(
946 (DDKAPI
*pHalFindBusAddressTranslation
)(
947 IN PHYSICAL_ADDRESS BusAddress
,
948 IN OUT PULONG AddressSpace
,
949 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
950 IN OUT PULONG_PTR Context
,
956 (DDKAPI
*pKdSetupPciDeviceForDebugging
)(
957 IN PVOID LoaderBlock OPTIONAL
,
958 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
963 (DDKAPI
*pKdReleasePciDeviceForDebugging
)(
964 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
969 (DDKAPI
*pKdGetAcpiTablePhase0
)(
970 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
976 (DDKAPI
*pKdCheckPowerButton
)(
982 (DDKAPI
*pHalGetInterruptVector
)(
983 IN INTERFACE_TYPE InterfaceType
,
985 IN ULONG BusInterruptLevel
,
986 IN ULONG BusInterruptVector
,
988 OUT PKAFFINITY Affinity
993 (DDKAPI
*pHalGetVectorInput
)(
995 IN KAFFINITY Affinity
,
997 OUT PKINTERRUPT_POLARITY Polarity
1002 (DDKAPI
*pKdMapPhysicalMemory64
)(
1003 IN PHYSICAL_ADDRESS PhysicalAddress
,
1004 IN ULONG NumberPages
1009 (DDKAPI
*pKdUnmapVirtualAddress
)(
1010 IN PVOID VirtualAddress
,
1011 IN ULONG NumberPages
1016 (DDKAPI
*pKdGetPciDataByOffset
)(
1018 IN ULONG SlotNumber
,
1026 (DDKAPI
*pKdSetPciDataByOffset
)(
1028 IN ULONG SlotNumber
,
1035 (DDKAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
1036 ULONG Columns
, ULONG Rows
);
1040 pHalQuerySystemInformation HalQuerySystemInformation
;
1041 pHalSetSystemInformation HalSetSystemInformation
;
1042 pHalQueryBusSlots HalQueryBusSlots
;
1044 pHalExamineMBR HalExamineMBR
;
1045 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
1046 pHalIoReadPartitionTable HalIoReadPartitionTable
;
1047 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
1048 pHalIoWritePartitionTable HalIoWritePartitionTable
;
1049 pHalHandlerForBus HalReferenceHandlerForBus
;
1050 pHalReferenceBusHandler HalReferenceBusHandler
;
1051 pHalReferenceBusHandler HalDereferenceBusHandler
;
1052 pHalInitPnpDriver HalInitPnpDriver
;
1053 pHalInitPowerManagement HalInitPowerManagement
;
1054 pHalGetDmaAdapter HalGetDmaAdapter
;
1055 pHalGetInterruptTranslator HalGetInterruptTranslator
;
1056 pHalStartMirroring HalStartMirroring
;
1057 pHalEndMirroring HalEndMirroring
;
1058 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
1059 pHalEndOfBoot HalEndOfBoot
;
1060 pHalMirrorVerify HalMirrorVerify
;
1061 } HAL_DISPATCH
, *PHAL_DISPATCH
;
1063 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTHAL_)
1064 extern NTSYSAPI PHAL_DISPATCH HalDispatchTable
;
1065 #define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable)
1067 extern __declspec(dllexport
) HAL_DISPATCH HalDispatchTable
;
1068 #define HALDISPATCH (&HalDispatchTable)
1071 #define HAL_DISPATCH_VERSION 3
1072 #define HalDispatchTableVersion HALDISPATCH->Version
1073 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
1074 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
1075 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
1076 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
1077 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
1078 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
1079 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
1080 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
1081 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
1082 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
1083 #define HalStartMirroring HALDISPATCH->HalStartMirroring
1084 #define HalEndMirroring HALDISPATCH->HalEndMirroring
1085 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
1086 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
1087 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
1089 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1090 ULONG AlignmentRequirement
;
1091 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1093 typedef struct _FILE_NAME_INFORMATION
{
1094 ULONG FileNameLength
;
1096 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1099 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1100 ULONG FileAttributes
;
1102 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1104 typedef struct _FILE_DISPOSITION_INFORMATION
{
1106 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1108 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1109 LARGE_INTEGER EndOfFile
;
1110 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1112 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1113 LARGE_INTEGER ValidDataLength
;
1114 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1116 typedef union _FILE_SEGMENT_ELEMENT
{
1118 ULONGLONG Alignment
;
1119 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1121 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
1123 typedef struct _KEY_USER_FLAGS_INFORMATION
{
1125 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
1127 typedef struct _PCI_COMMON_CONFIG
{
1136 UCHAR CacheLineSize
;
1141 struct _PCI_HEADER_TYPE_0
{
1142 ULONG BaseAddresses
[PCI_TYPE0_ADDRESSES
];
1146 ULONG ROMBaseAddress
;
1147 UCHAR CapabilitiesPtr
;
1150 UCHAR InterruptLine
;
1153 UCHAR MaximumLatency
;
1155 struct _PCI_HEADER_TYPE_1
{
1156 ULONG BaseAddresses
[PCI_TYPE1_ADDRESSES
];
1159 UCHAR SubordinateBus
;
1160 UCHAR SecondaryLatency
;
1163 USHORT SecondaryStatus
;
1166 USHORT PrefetchBase
;
1167 USHORT PrefetchLimit
;
1168 ULONG PrefetchBaseUpper32
;
1169 ULONG PrefetchLimitUpper32
;
1170 USHORT IOBaseUpper16
;
1171 USHORT IOLimitUpper16
;
1172 UCHAR CapabilitiesPtr
;
1174 ULONG ROMBaseAddress
;
1175 UCHAR InterruptLine
;
1177 USHORT BridgeControl
;
1179 struct _PCI_HEADER_TYPE_2
{
1180 ULONG SocketRegistersBaseAddress
;
1181 UCHAR CapabilitiesPtr
;
1183 USHORT SecondaryStatus
;
1186 UCHAR SubordinateBus
;
1187 UCHAR SecondaryLatency
;
1191 } Range
[PCI_TYPE2_ADDRESSES
- 1];
1192 UCHAR InterruptLine
;
1194 USHORT BridgeControl
;
1197 UCHAR DeviceSpecific
[192];
1198 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
1201 #define PCI_ADDRESS_MEMORY_SPACE 0x00000000
1203 typedef struct _OSVERSIONINFOA
{
1204 ULONG dwOSVersionInfoSize
;
1205 ULONG dwMajorVersion
;
1206 ULONG dwMinorVersion
;
1207 ULONG dwBuildNumber
;
1209 CHAR szCSDVersion
[128];
1210 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
1212 typedef struct _OSVERSIONINFOW
{
1213 ULONG dwOSVersionInfoSize
;
1214 ULONG dwMajorVersion
;
1215 ULONG dwMinorVersion
;
1216 ULONG dwBuildNumber
;
1218 WCHAR szCSDVersion
[128];
1219 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
1222 typedef OSVERSIONINFOW OSVERSIONINFO
;
1223 typedef POSVERSIONINFOW POSVERSIONINFO
;
1224 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
1226 typedef OSVERSIONINFOA OSVERSIONINFO
;
1227 typedef POSVERSIONINFOA POSVERSIONINFO
;
1228 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
1231 typedef struct _OSVERSIONINFOEXA
{
1232 ULONG dwOSVersionInfoSize
;
1233 ULONG dwMajorVersion
;
1234 ULONG dwMinorVersion
;
1235 ULONG dwBuildNumber
;
1237 CHAR szCSDVersion
[128];
1238 USHORT wServicePackMajor
;
1239 USHORT wServicePackMinor
;
1243 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
1245 typedef struct _OSVERSIONINFOEXW
{
1246 ULONG dwOSVersionInfoSize
;
1247 ULONG dwMajorVersion
;
1248 ULONG dwMinorVersion
;
1249 ULONG dwBuildNumber
;
1251 WCHAR szCSDVersion
[128];
1252 USHORT wServicePackMajor
;
1253 USHORT wServicePackMinor
;
1257 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
1260 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
1261 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
1262 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
1264 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
1265 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
1266 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
1272 VerSetConditionMask(
1273 IN ULONGLONG ConditionMask
,
1275 IN UCHAR Condition
);
1277 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
1278 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
1279 (TypeBitMask), (ComparisonType)))
1281 /* RtlVerifyVersionInfo() TypeMask */
1283 #define VER_MINORVERSION 0x0000001
1284 #define VER_MAJORVERSION 0x0000002
1285 #define VER_BUILDNUMBER 0x0000004
1286 #define VER_PLATFORMID 0x0000008
1287 #define VER_SERVICEPACKMINOR 0x0000010
1288 #define VER_SERVICEPACKMAJOR 0x0000020
1289 #define VER_SUITENAME 0x0000040
1290 #define VER_PRODUCT_TYPE 0x0000080
1292 /* RtlVerifyVersionInfo() ComparisonType */
1295 #define VER_GREATER 2
1296 #define VER_GREATER_EQUAL 3
1298 #define VER_LESS_EQUAL 5
1302 #define VER_CONDITION_MASK 7
1303 #define VER_NUM_BITS_PER_CONDITION_MASK 3
1308 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
) (
1310 struct _RTL_RANGE
*Range
1313 typedef enum _EVENT_TYPE
{
1315 SynchronizationEvent
1318 typedef enum _KWAIT_REASON
{
1356 typedef struct _KWAIT_BLOCK
{
1357 LIST_ENTRY WaitListEntry
;
1358 struct _KTHREAD
* RESTRICTED_POINTER Thread
;
1360 struct _KWAIT_BLOCK
* RESTRICTED_POINTER NextWaitBlock
;
1364 } KWAIT_BLOCK
, *PKWAIT_BLOCK
, *RESTRICTED_POINTER PRKWAIT_BLOCK
;
1366 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK
* PIO_REMOVE_LOCK_TRACKING_BLOCK
;
1368 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK
{
1370 BOOLEAN Reserved
[3];
1371 volatile LONG IoCount
;
1373 } IO_REMOVE_LOCK_COMMON_BLOCK
;
1375 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK
{
1378 LONGLONG MaxLockedTicks
;
1380 LIST_ENTRY LockList
;
1382 volatile LONG LowMemoryCount
;
1385 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks
;
1386 } IO_REMOVE_LOCK_DBG_BLOCK
;
1388 typedef struct _IO_REMOVE_LOCK
{
1389 IO_REMOVE_LOCK_COMMON_BLOCK Common
;
1391 IO_REMOVE_LOCK_DBG_BLOCK Dbg
;
1393 } IO_REMOVE_LOCK
, *PIO_REMOVE_LOCK
;
1395 typedef struct _IO_WORKITEM
*PIO_WORKITEM
;
1398 (DDKAPI IO_WORKITEM_ROUTINE
)(
1399 IN PDEVICE_OBJECT DeviceObject
,
1401 typedef IO_WORKITEM_ROUTINE
*PIO_WORKITEM_ROUTINE
;
1403 typedef struct _SHARE_ACCESS
{
1411 } SHARE_ACCESS
, *PSHARE_ACCESS
;
1413 typedef enum _KINTERRUPT_MODE
{
1418 #define THREAD_WAIT_OBJECTS 3
1421 (DDKAPI
*PKINTERRUPT_ROUTINE
)(
1424 typedef enum _CREATE_FILE_TYPE
{
1426 CreateFileTypeNamedPipe
,
1427 CreateFileTypeMailslot
1430 typedef struct _CONFIGURATION_INFORMATION
{
1435 ULONG ScsiPortCount
;
1437 ULONG ParallelCount
;
1438 BOOLEAN AtDiskPrimaryAddressClaimed
;
1439 BOOLEAN AtDiskSecondaryAddressClaimed
;
1441 ULONG MediumChangerCount
;
1442 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
1444 typedef enum _CONFIGURATION_TYPE
{
1447 FloatingPointProcessor
,
1457 MultiFunctionAdapter
,
1471 FloppyDiskPeripheral
,
1484 RealModeIrqRoutingTable
,
1485 RealModePCIEnumeration
,
1487 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
1489 #define IO_FORCE_ACCESS_CHECK 0x001
1490 #define IO_NO_PARAMETER_CHECKING 0x100
1492 #define IO_REPARSE 0x0
1493 #define IO_REMOUNT 0x1
1496 (DDKAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
1498 IN PUNICODE_STRING PathName
,
1499 IN INTERFACE_TYPE BusType
,
1501 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
1502 IN CONFIGURATION_TYPE ControllerType
,
1503 IN ULONG ControllerNumber
,
1504 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
1505 IN CONFIGURATION_TYPE PeripheralType
,
1506 IN ULONG PeripheralNumber
,
1507 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
1509 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
1510 IoQueryDeviceIdentifier
= 0,
1511 IoQueryDeviceConfigurationData
,
1512 IoQueryDeviceComponentInformation
,
1513 IoQueryDeviceMaxData
1514 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
1516 typedef enum _KBUGCHECK_CALLBACK_REASON
{
1518 KbCallbackReserved1
,
1519 KbCallbackSecondaryDumpData
,
1521 } KBUGCHECK_CALLBACK_REASON
;
1523 struct _KBUGCHECK_REASON_CALLBACK_RECORD
;
1526 (DDKAPI
*PKBUGCHECK_REASON_CALLBACK_ROUTINE
)(
1527 IN KBUGCHECK_CALLBACK_REASON Reason
,
1528 IN
struct _KBUGCHECK_REASON_CALLBACK_RECORD
*Record
,
1529 IN OUT PVOID ReasonSpecificData
,
1530 IN ULONG ReasonSpecificDataLength
);
1532 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD
{
1534 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
;
1537 KBUGCHECK_CALLBACK_REASON Reason
;
1539 } KBUGCHECK_REASON_CALLBACK_RECORD
, *PKBUGCHECK_REASON_CALLBACK_RECORD
;
1541 typedef enum _KBUGCHECK_BUFFER_DUMP_STATE
{
1547 } KBUGCHECK_BUFFER_DUMP_STATE
;
1550 (DDKAPI
*PKBUGCHECK_CALLBACK_ROUTINE
)(
1554 typedef struct _KBUGCHECK_CALLBACK_RECORD
{
1556 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
;
1562 } KBUGCHECK_CALLBACK_RECORD
, *PKBUGCHECK_CALLBACK_RECORD
;
1565 (DDKAPI
*PNMI_CALLBACK
)(
1567 IN BOOLEAN Handled
);
1571 * KeInitializeCallbackRecord(
1572 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
1574 #define KeInitializeCallbackRecord(CallbackRecord) \
1575 CallbackRecord->State = BufferEmpty;
1577 typedef enum _KDPC_IMPORTANCE
{
1583 typedef enum _MEMORY_CACHING_TYPE_ORIG
{
1584 MmFrameBufferCached
= 2
1585 } MEMORY_CACHING_TYPE_ORIG
;
1587 typedef enum _MEMORY_CACHING_TYPE
{
1588 MmNonCached
= FALSE
,
1590 MmWriteCombined
= MmFrameBufferCached
,
1591 MmHardwareCoherentCached
,
1592 MmNonCachedUnordered
,
1595 } MEMORY_CACHING_TYPE
;
1597 typedef enum _MM_PAGE_PRIORITY
{
1599 NormalPagePriority
= 16,
1600 HighPagePriority
= 32
1603 typedef enum _LOCK_OPERATION
{
1609 #define FLUSH_MULTIPLE_MAXIMUM 32
1611 typedef enum _MM_SYSTEM_SIZE
{
1617 typedef struct _OBJECT_HANDLE_INFORMATION
{
1618 ULONG HandleAttributes
;
1619 ACCESS_MASK GrantedAccess
;
1620 } OBJECT_HANDLE_INFORMATION
, *POBJECT_HANDLE_INFORMATION
;
1622 typedef struct _CLIENT_ID
{
1623 HANDLE UniqueProcess
;
1624 HANDLE UniqueThread
;
1625 } CLIENT_ID
, *PCLIENT_ID
;
1628 (DDKAPI
*PKSTART_ROUTINE
)(
1629 IN PVOID StartContext
);
1632 (DDKAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
1634 IN HANDLE ProcessId
,
1638 (DDKAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
1639 IN HANDLE ProcessId
,
1643 typedef struct _IMAGE_INFO
{
1644 _ANONYMOUS_UNION
union {
1646 _ANONYMOUS_STRUCT
struct {
1647 ULONG ImageAddressingMode
: 8;
1648 ULONG SystemModeImage
: 1;
1649 ULONG ImageMappedToAllPids
: 1;
1650 ULONG Reserved
: 22;
1654 ULONG ImageSelector
;
1656 ULONG ImageSectionNumber
;
1657 } IMAGE_INFO
, *PIMAGE_INFO
;
1659 #define IMAGE_ADDRESSING_MODE_32BIT 3
1662 (DDKAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
1663 IN PUNICODE_STRING FullImageName
,
1664 IN HANDLE ProcessId
,
1665 IN PIMAGE_INFO ImageInfo
);
1667 #pragma pack(push,4)
1668 typedef enum _BUS_DATA_TYPE
{
1669 ConfigurationSpaceUndefined
= -1,
1677 PCMCIAConfiguration
,
1680 PNPISAConfiguration
,
1681 SgiInternalConfiguration
,
1683 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
1686 typedef struct _NT_TIB
{
1687 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
1691 _ANONYMOUS_UNION
union {
1695 PVOID ArbitraryUserPointer
;
1696 struct _NT_TIB
*Self
;
1699 typedef struct _NT_TIB32
{
1700 ULONG ExceptionList
;
1704 __GNU_EXTENSION
union {
1708 ULONG ArbitraryUserPointer
;
1710 } NT_TIB32
,*PNT_TIB32
;
1712 typedef struct _NT_TIB64
{
1713 ULONG64 ExceptionList
;
1716 ULONG64 SubSystemTib
;
1717 __GNU_EXTENSION
union {
1721 ULONG64 ArbitraryUserPointer
;
1723 } NT_TIB64
,*PNT_TIB64
;
1725 typedef enum _PROCESSINFOCLASS
{
1726 ProcessBasicInformation
,
1731 ProcessBasePriority
,
1732 ProcessRaisePriority
,
1734 ProcessExceptionPort
,
1736 ProcessLdtInformation
,
1738 ProcessDefaultHardErrorMode
,
1739 ProcessIoPortHandlers
,
1740 ProcessPooledUsageAndLimits
,
1741 ProcessWorkingSetWatch
,
1742 ProcessUserModeIOPL
,
1743 ProcessEnableAlignmentFaultFixup
,
1744 ProcessPriorityClass
,
1745 ProcessWx86Information
,
1747 ProcessAffinityMask
,
1748 ProcessPriorityBoost
,
1750 ProcessSessionInformation
,
1751 ProcessForegroundInformation
,
1752 ProcessWow64Information
,
1753 ProcessImageFileName
,
1754 ProcessLUIDDeviceMapsEnabled
,
1755 ProcessBreakOnTermination
,
1756 ProcessDebugObjectHandle
,
1758 ProcessHandleTracing
,
1760 ProcessExecuteFlags
,
1761 ProcessTlsInformation
,
1763 ProcessImageInformation
,
1765 ProcessPagePriority
,
1766 ProcessInstrumentationCallback
,
1770 typedef enum _THREADINFOCLASS
{
1771 ThreadBasicInformation
,
1776 ThreadImpersonationToken
,
1777 ThreadDescriptorTableEntry
,
1778 ThreadEnableAlignmentFaultFixup
,
1779 ThreadEventPair_Reusable
,
1780 ThreadQuerySetWin32StartAddress
,
1782 ThreadPerformanceCount
,
1783 ThreadAmILastThread
,
1784 ThreadIdealProcessor
,
1785 ThreadPriorityBoost
,
1786 ThreadSetTlsArrayAddress
,
1788 ThreadHideFromDebugger
,
1789 ThreadBreakOnTermination
,
1790 ThreadSwitchLegacyState
,
1792 ThreadLastSystemCall
,
1796 ThreadActualBasePriority
,
1800 typedef struct _PROCESS_BASIC_INFORMATION
1802 NTSTATUS ExitStatus
;
1803 struct _PEB
*PebBaseAddress
;
1804 ULONG_PTR AffinityMask
;
1805 KPRIORITY BasePriority
;
1806 ULONG_PTR UniqueProcessId
;
1807 ULONG_PTR InheritedFromUniqueProcessId
;
1808 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
1810 typedef struct _PROCESS_WS_WATCH_INFORMATION
1814 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
1816 typedef struct _PROCESS_DEVICEMAP_INFORMATION
1818 __GNU_EXTENSION
union
1822 HANDLE DirectoryHandle
;
1827 UCHAR DriveType
[32];
1830 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
1832 typedef struct _KERNEL_USER_TIMES
1834 LARGE_INTEGER CreateTime
;
1835 LARGE_INTEGER ExitTime
;
1836 LARGE_INTEGER KernelTime
;
1837 LARGE_INTEGER UserTime
;
1838 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1840 typedef struct _PROCESS_ACCESS_TOKEN
1844 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1846 typedef struct _PROCESS_SESSION_INFORMATION
1849 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1852 (DDKAPI
*PREQUEST_POWER_COMPLETE
)(
1853 IN PDEVICE_OBJECT DeviceObject
,
1854 IN UCHAR MinorFunction
,
1855 IN POWER_STATE PowerState
,
1857 IN PIO_STATUS_BLOCK IoStatus
);
1859 typedef enum _TRACE_INFORMATION_CLASS
{
1862 TraceEnableFlagsClass
,
1863 TraceEnableLevelClass
,
1864 GlobalLoggerHandleClass
,
1865 EventLoggerHandleClass
,
1866 AllLoggerHandlesClass
,
1867 TraceHandleByNameClass
1868 } TRACE_INFORMATION_CLASS
;
1870 typedef enum _REG_NOTIFY_CLASS
1873 RegNtPreDeleteKey
= RegNtDeleteKey
,
1875 RegNtPreSetValueKey
= RegNtSetValueKey
,
1876 RegNtDeleteValueKey
,
1877 RegNtPreDeleteValueKey
= RegNtDeleteValueKey
,
1878 RegNtSetInformationKey
,
1879 RegNtPreSetInformationKey
= RegNtSetInformationKey
,
1881 RegNtPreRenameKey
= RegNtRenameKey
,
1883 RegNtPreEnumerateKey
= RegNtEnumerateKey
,
1884 RegNtEnumerateValueKey
,
1885 RegNtPreEnumerateValueKey
= RegNtEnumerateValueKey
,
1887 RegNtPreQueryKey
= RegNtQueryKey
,
1889 RegNtPreQueryValueKey
= RegNtQueryValueKey
,
1890 RegNtQueryMultipleValueKey
,
1891 RegNtPreQueryMultipleValueKey
= RegNtQueryMultipleValueKey
,
1896 RegNtKeyHandleClose
,
1897 RegNtPreKeyHandleClose
= RegNtKeyHandleClose
,
1899 RegNtPostSetValueKey
,
1900 RegNtPostDeleteValueKey
,
1901 RegNtPostSetInformationKey
,
1903 RegNtPostEnumerateKey
,
1904 RegNtPostEnumerateValueKey
,
1906 RegNtPostQueryValueKey
,
1907 RegNtPostQueryMultipleValueKey
,
1908 RegNtPostKeyHandleClose
,
1909 RegNtPreCreateKeyEx
,
1910 RegNtPostCreateKeyEx
,
1913 } REG_NOTIFY_CLASS
, *PREG_NOTIFY_CLASS
;
1916 (NTAPI
*PEX_CALLBACK_FUNCTION
)(
1917 IN PVOID CallbackContext
,
1922 typedef struct _REG_DELETE_KEY_INFORMATION
1925 } REG_DELETE_KEY_INFORMATION
, *PREG_DELETE_KEY_INFORMATION
;
1927 typedef struct _REG_SET_VALUE_KEY_INFORMATION
1930 PUNICODE_STRING ValueName
;
1935 } REG_SET_VALUE_KEY_INFORMATION
, *PREG_SET_VALUE_KEY_INFORMATION
;
1937 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION
1940 PUNICODE_STRING ValueName
;
1941 } REG_DELETE_VALUE_KEY_INFORMATION
, *PREG_DELETE_VALUE_KEY_INFORMATION
;
1943 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION
1946 KEY_SET_INFORMATION_CLASS KeySetInformationClass
;
1947 PVOID KeySetInformation
;
1948 ULONG KeySetInformationLength
;
1949 } REG_SET_INFORMATION_KEY_INFORMATION
, *PREG_SET_INFORMATION_KEY_INFORMATION
;
1951 typedef struct _REG_ENUMERATE_KEY_INFORMATION
1955 KEY_INFORMATION_CLASS KeyInformationClass
;
1956 PVOID KeyInformation
;
1958 PULONG ResultLength
;
1959 } REG_ENUMERATE_KEY_INFORMATION
, *PREG_ENUMERATE_KEY_INFORMATION
;
1961 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION
1965 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
1966 PVOID KeyValueInformation
;
1968 PULONG ResultLength
;
1969 } REG_ENUMERATE_VALUE_KEY_INFORMATION
, *PREG_ENUMERATE_VALUE_KEY_INFORMATION
;
1971 typedef struct _REG_QUERY_KEY_INFORMATION
1974 KEY_INFORMATION_CLASS KeyInformationClass
;
1975 PVOID KeyInformation
;
1977 PULONG ResultLength
;
1978 } REG_QUERY_KEY_INFORMATION
, *PREG_QUERY_KEY_INFORMATION
;
1980 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION
1983 PUNICODE_STRING ValueName
;
1984 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
1985 PVOID KeyValueInformation
;
1987 PULONG ResultLength
;
1988 } REG_QUERY_VALUE_KEY_INFORMATION
, *PREG_QUERY_VALUE_KEY_INFORMATION
;
1990 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
1993 PKEY_VALUE_ENTRY ValueEntries
;
1996 PULONG BufferLength
;
1997 PULONG RequiredBufferLength
;
1998 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
;
2000 typedef struct _REG_PRE_CREATE_KEY_INFORMATION
2002 PUNICODE_STRING CompleteName
;
2003 } REG_PRE_CREATE_KEY_INFORMATION
, *PREG_PRE_CREATE_KEY_INFORMATION
;
2005 typedef struct _REG_POST_CREATE_KEY_INFORMATION
2007 PUNICODE_STRING CompleteName
;
2010 } REG_POST_CREATE_KEY_INFORMATION
, *PREG_POST_CREATE_KEY_INFORMATION
;
2012 typedef struct _REG_PRE_OPEN_KEY_INFORMATION
2014 PUNICODE_STRING CompleteName
;
2015 } REG_PRE_OPEN_KEY_INFORMATION
, *PREG_PRE_OPEN_KEY_INFORMATION
;
2017 typedef struct _REG_POST_OPEN_KEY_INFORMATION
2019 PUNICODE_STRING CompleteName
;
2022 } REG_POST_OPEN_KEY_INFORMATION
, *PREG_POST_OPEN_KEY_INFORMATION
;
2024 typedef struct _REG_POST_OPERATION_INFORMATION
2028 } REG_POST_OPERATION_INFORMATION
,*PREG_POST_OPERATION_INFORMATION
;
2030 typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION
2033 } REG_KEY_HANDLE_CLOSE_INFORMATION
, *PREG_KEY_HANDLE_CLOSE_INFORMATION
;
2036 ** Storage structures
2038 typedef enum _PARTITION_STYLE
{
2039 PARTITION_STYLE_MBR
,
2040 PARTITION_STYLE_GPT
,
2044 typedef struct _CREATE_DISK_MBR
{
2046 } CREATE_DISK_MBR
, *PCREATE_DISK_MBR
;
2048 typedef struct _CREATE_DISK_GPT
{
2050 ULONG MaxPartitionCount
;
2051 } CREATE_DISK_GPT
, *PCREATE_DISK_GPT
;
2053 typedef struct _CREATE_DISK
{
2054 PARTITION_STYLE PartitionStyle
;
2055 _ANONYMOUS_UNION
union {
2056 CREATE_DISK_MBR Mbr
;
2057 CREATE_DISK_GPT Gpt
;
2059 } CREATE_DISK
, *PCREATE_DISK
;
2061 typedef struct _DISK_SIGNATURE
{
2062 ULONG PartitionStyle
;
2063 _ANONYMOUS_UNION
union {
2072 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
2075 (FASTCALL
*PTIME_UPDATE_NOTIFY_ROUTINE
)(
2077 IN KPROCESSOR_MODE Mode
);
2079 #define DBG_STATUS_CONTROL_C 1
2080 #define DBG_STATUS_SYSRQ 2
2081 #define DBG_STATUS_BUGCHECK_FIRST 3
2082 #define DBG_STATUS_BUGCHECK_SECOND 4
2083 #define DBG_STATUS_FATAL 5
2084 #define DBG_STATUS_DEBUG_CONTROL 6
2085 #define DBG_STATUS_WORKER 7
2087 typedef struct _PHYSICAL_MEMORY_RANGE
{
2088 PHYSICAL_ADDRESS BaseAddress
;
2089 LARGE_INTEGER NumberOfBytes
;
2090 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
2093 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
2096 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
2097 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
2098 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
2099 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
2101 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
2102 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
2103 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
2104 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
2105 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
2107 #define HASH_STRING_ALGORITHM_DEFAULT 0
2108 #define HASH_STRING_ALGORITHM_X65599 1
2109 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
2112 (DDKAPI
*PTIMER_APC_ROUTINE
)(
2113 IN PVOID TimerContext
,
2114 IN ULONG TimerLowValue
,
2115 IN LONG TimerHighValue
);
2124 (DDKAPI
*WMI_NOTIFICATION_CALLBACK
)(
2130 ** Architecture specific structures
2132 #define PCR_MINOR_VERSION 1
2133 #define PCR_MAJOR_VERSION 1
2137 #define SIZE_OF_80387_REGISTERS 80
2138 #define CONTEXT_i386 0x10000
2139 #define CONTEXT_i486 0x10000
2140 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
2141 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
2142 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
2143 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
2144 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
2145 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
2146 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
2147 #define MAXIMUM_SUPPORTED_EXTENSION 512
2149 typedef struct _FLOATING_SAVE_AREA
{
2154 ULONG ErrorSelector
;
2157 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
2159 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
2161 typedef struct _CONTEXT
{
2169 FLOATING_SAVE_AREA FloatSave
;
2186 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
2190 // Used to contain PFNs and PFN counts
2192 typedef ULONG PFN_COUNT
;
2193 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
2194 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
2196 #define PASSIVE_LEVEL 0
2199 #define DISPATCH_LEVEL 2
2200 #define PROFILE_LEVEL 27
2201 #define CLOCK1_LEVEL 28
2202 #define CLOCK2_LEVEL 28
2203 #define IPI_LEVEL 29
2204 #define POWER_LEVEL 30
2205 #define HIGH_LEVEL 31
2207 typedef struct _KPCR_TIB
{
2208 PVOID ExceptionList
; /* 00 */
2209 PVOID StackBase
; /* 04 */
2210 PVOID StackLimit
; /* 08 */
2211 PVOID SubSystemTib
; /* 0C */
2212 _ANONYMOUS_UNION
union {
2213 PVOID FiberData
; /* 10 */
2214 ULONG Version
; /* 10 */
2216 PVOID ArbitraryUserPointer
; /* 14 */
2217 struct _KPCR_TIB
*Self
; /* 18 */
2218 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
2220 typedef struct _KPCR
{
2221 KPCR_TIB Tib
; /* 00 */
2222 struct _KPCR
*Self
; /* 1C */
2223 struct _KPRCB
*Prcb
; /* 20 */
2224 KIRQL Irql
; /* 24 */
2226 ULONG IrrActive
; /* 2C */
2228 PVOID KdVersionBlock
; /* 34 */
2229 PUSHORT IDT
; /* 38 */
2230 PUSHORT GDT
; /* 3C */
2231 struct _KTSS
*TSS
; /* 40 */
2232 USHORT MajorVersion
; /* 44 */
2233 USHORT MinorVersion
; /* 46 */
2234 KAFFINITY SetMember
; /* 48 */
2235 ULONG StallScaleFactor
; /* 4C */
2236 UCHAR SpareUnused
; /* 50 */
2237 UCHAR Number
; /* 51 */
2239 UCHAR SecondLevelCacheAssociativity
;
2241 ULONG KernelReserved
[14]; // For use by the kernel
2242 ULONG SecondLevelCacheSize
;
2243 ULONG HalReserved
[16]; // For use by Hal
2244 } KPCR
, *PKPCR
; /* 54 */
2246 #define KeGetPcr() PCR
2248 typedef struct _KFLOATING_SAVE
{
2252 ULONG ErrorSelector
;
2257 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
2261 KeGetCurrentProcessorNumber(VOID
)
2263 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
2278 #define KI_USER_SHARED_DATA 0xffdf0000
2280 #define PAGE_SIZE 0x1000
2281 #define PAGE_SHIFT 12L
2283 #define SharedUserData ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
2285 extern NTKERNELAPI PVOID MmHighestUserAddress
;
2286 extern NTKERNELAPI PVOID MmSystemRangeStart
;
2287 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
2289 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
2290 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
2291 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
2292 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
2293 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
2295 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
2296 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
2298 #elif defined(__x86_64__)
2300 #define CONTEXT_AMD64 0x100000
2301 #if !defined(RC_INVOKED)
2302 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
2303 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
2304 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
2305 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
2306 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
2308 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
2309 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
2311 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
2312 #define CONTEXT_SERVICE_ACTIVE 0x10000000
2313 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
2314 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
2317 typedef struct DECLSPEC_ALIGN(16) _M128A
{
2322 typedef struct _XMM_SAVE_AREA32
{
2329 USHORT ErrorSelector
;
2332 USHORT DataSelector
;
2336 M128A FloatRegisters
[8];
2337 M128A XmmRegisters
[16];
2338 UCHAR Reserved4
[96];
2339 } XMM_SAVE_AREA32
, *PXMM_SAVE_AREA32
;
2341 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
2391 /* Floating point */
2393 XMM_SAVE_AREA32 FltSave
;
2417 M128A VectorRegister
[26];
2418 ULONG64 VectorControl
;
2421 ULONG64 DebugControl
;
2422 ULONG64 LastBranchToRip
;
2423 ULONG64 LastBranchFromRip
;
2424 ULONG64 LastExceptionToRip
;
2425 ULONG64 LastExceptionFromRip
;
2429 // Used to contain PFNs and PFN counts
2431 typedef ULONG PFN_COUNT
;
2432 typedef ULONG64 PFN_NUMBER
, *PPFN_NUMBER
;
2433 typedef LONG64 SPFN_NUMBER
, *PSPFN_NUMBER
;
2435 #define PASSIVE_LEVEL 0
2438 #define DISPATCH_LEVEL 2
2439 #define CLOCK_LEVEL 13
2440 #define IPI_LEVEL 14
2441 #define POWER_LEVEL 14
2442 #define PROFILE_LEVEL 15
2443 #define HIGH_LEVEL 15
2445 #define PAGE_SIZE 0x1000
2446 #define PAGE_SHIFT 12L
2447 #define PTI_SHIFT 12L
2448 #define PDI_SHIFT 21L
2449 #define PPI_SHIFT 30L
2450 #define PXI_SHIFT 39L
2451 #define PTE_PER_PAGE 512
2452 #define PDE_PER_PAGE 512
2453 #define PPE_PER_PAGE 512
2454 #define PXE_PER_PAGE 512
2455 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
2456 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
2457 #define PPI_MASK (PPE_PER_PAGE - 1)
2458 #define PXI_MASK (PXE_PER_PAGE - 1)
2460 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
2461 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
2462 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
2463 #define PDE_BASE 0xFFFFF6FB40000000ULL
2464 #define PTE_BASE 0xFFFFF68000000000ULL
2465 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
2466 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
2467 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
2468 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
2470 extern NTKERNELAPI PVOID MmHighestUserAddress
;
2471 extern NTKERNELAPI PVOID MmSystemRangeStart
;
2472 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
2474 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
2475 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
2476 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
2477 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
2478 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
2479 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
2481 #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
2482 #define SharedInterruptTime (&SharedUserData->InterruptTime)
2483 #define SharedSystemTime (&SharedUserData->SystemTime)
2484 #define SharedTickCount (&SharedUserData->TickCount)
2486 #define KeQueryInterruptTime() \
2487 (*(volatile ULONG64*)SharedInterruptTime)
2488 #define KeQuerySystemTime(CurrentCount) \
2489 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
2490 #define KeQueryTickCount(CurrentCount) \
2491 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
2493 typedef struct _KPCR
2495 __GNU_EXTENSION
union
2498 __GNU_EXTENSION
struct
2500 union _KGDTENTRY64
*GdtBase
;
2501 struct _KTSS64
*TssBase
;
2504 struct _KPRCB
*CurrentPrcb
;
2505 PKSPIN_LOCK_QUEUE LockArray
;
2509 union _KIDTENTRY64
*IdtBase
;
2512 UCHAR SecondLevelCacheAssociativity
;
2513 UCHAR ObsoleteNumber
;
2516 USHORT MajorVersion
;
2517 USHORT MinorVersion
;
2518 ULONG StallScaleFactor
;
2520 ULONG KernelReserved
[15];
2521 ULONG SecondLevelCacheSize
;
2522 ULONG HalReserved
[16];
2524 PVOID KdVersionBlock
;
2526 ULONG PcrAlign1
[24];
2529 typedef struct _KFLOATING_SAVE
{
2531 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
2543 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
2548 KeGetCurrentProcessorNumber(VOID
)
2550 return (ULONG
)__readgsword(0x184);
2553 #elif defined(__PowerPC__)
2556 // Used to contain PFNs and PFN counts
2558 typedef ULONG PFN_COUNT
;
2559 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
2560 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
2562 #define PASSIVE_LEVEL 0
2565 #define DISPATCH_LEVEL 2
2566 #define PROFILE_LEVEL 27
2567 #define CLOCK1_LEVEL 28
2568 #define CLOCK2_LEVEL 28
2569 #define IPI_LEVEL 29
2570 #define POWER_LEVEL 30
2571 #define HIGH_LEVEL 31
2573 typedef struct _KFLOATING_SAVE
{
2575 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
2577 typedef struct _KPCR_TIB
{
2578 PVOID ExceptionList
; /* 00 */
2579 PVOID StackBase
; /* 04 */
2580 PVOID StackLimit
; /* 08 */
2581 PVOID SubSystemTib
; /* 0C */
2582 _ANONYMOUS_UNION
union {
2583 PVOID FiberData
; /* 10 */
2584 ULONG Version
; /* 10 */
2586 PVOID ArbitraryUserPointer
; /* 14 */
2587 struct _KPCR_TIB
*Self
; /* 18 */
2588 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
2590 #define PCR_MINOR_VERSION 1
2591 #define PCR_MAJOR_VERSION 1
2593 typedef struct _KPCR
{
2594 KPCR_TIB Tib
; /* 00 */
2595 struct _KPCR
*Self
; /* 1C */
2596 struct _KPRCB
*Prcb
; /* 20 */
2597 KIRQL Irql
; /* 24 */
2599 ULONG IrrActive
; /* 2C */
2601 PVOID KdVersionBlock
; /* 34 */
2602 PUSHORT IDT
; /* 38 */
2603 PUSHORT GDT
; /* 3C */
2604 struct _KTSS
*TSS
; /* 40 */
2605 USHORT MajorVersion
; /* 44 */
2606 USHORT MinorVersion
; /* 46 */
2607 KAFFINITY SetMember
; /* 48 */
2608 ULONG StallScaleFactor
; /* 4C */
2609 UCHAR SpareUnused
; /* 50 */
2610 UCHAR Number
; /* 51 */
2611 } KPCR
, *PKPCR
; /* 54 */
2613 #define KeGetPcr() PCR
2618 KeGetCurrentProcessorNumber(VOID
)
2621 __asm__
__volatile__ (
2624 : "i" (FIELD_OFFSET(KPCR
, Number
))
2629 #elif defined(_MIPS_)
2631 #error MIPS Headers are totally incorrect
2634 // Used to contain PFNs and PFN counts
2636 typedef ULONG PFN_COUNT
;
2637 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
2638 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
2640 #define PASSIVE_LEVEL 0
2642 #define DISPATCH_LEVEL 2
2643 #define PROFILE_LEVEL 27
2644 #define IPI_LEVEL 29
2645 #define HIGH_LEVEL 31
2647 typedef struct _KPCR
{
2648 struct _KPRCB
*Prcb
; /* 20 */
2649 KIRQL Irql
; /* 24 */
2654 #define KeGetPcr() PCR
2656 typedef struct _KFLOATING_SAVE
{
2657 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
2662 KeGetCurrentProcessorNumber(VOID
)
2667 #elif defined(_M_ARM)
2670 // NT-ARM is not documented, need DDK-ARM
2675 #error Unknown architecture
2678 #define MM_DONT_ZERO_ALLOCATION 0x00000001
2679 #define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002
2682 #define EFLAG_SIGN 0x8000
2683 #define EFLAG_ZERO 0x4000
2684 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
2686 #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
2687 #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
2688 #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
2690 typedef enum _INTERLOCKED_RESULT
{
2691 ResultNegative
= RESULT_NEGATIVE
,
2692 ResultZero
= RESULT_ZERO
,
2693 ResultPositive
= RESULT_POSITIVE
2694 } INTERLOCKED_RESULT
;
2697 (NTAPI
*PciPin2Line
)(
2698 IN
struct _BUS_HANDLER
*BusHandler
,
2699 IN
struct _BUS_HANDLER
*RootHandler
,
2700 IN PCI_SLOT_NUMBER SlotNumber
,
2701 IN PPCI_COMMON_CONFIG PciData
2705 (NTAPI
*PciLine2Pin
)(
2706 IN
struct _BUS_HANDLER
*BusHandler
,
2707 IN
struct _BUS_HANDLER
*RootHandler
,
2708 IN PCI_SLOT_NUMBER SlotNumber
,
2709 IN PPCI_COMMON_CONFIG PciNewData
,
2710 IN PPCI_COMMON_CONFIG PciOldData
2714 (NTAPI
*PciReadWriteConfig
)(
2715 IN
struct _BUS_HANDLER
*BusHandler
,
2716 IN PCI_SLOT_NUMBER Slot
,
2722 #define PCI_DATA_TAG ' ICP'
2723 #define PCI_DATA_VERSION 1
2725 typedef struct _PCIBUSDATA
2729 PciReadWriteConfig ReadConfig
;
2730 PciReadWriteConfig WriteConfig
;
2731 PciPin2Line Pin2Line
;
2732 PciLine2Pin Line2Pin
;
2733 PCI_SLOT_NUMBER ParentSlot
;
2735 } PCIBUSDATA
, *PPCIBUSDATA
;
2738 /** SPINLOCK FUNCTIONS ********************************************************/
2743 KeTryToAcquireSpinLockAtDpcLevel(
2744 IN OUT PKSPIN_LOCK SpinLock
2751 IN PKSPIN_LOCK SpinLock
2756 #if defined(WIN9X_COMPAT_SPINLOCK)
2761 KeInitializeSpinLock(
2762 IN PKSPIN_LOCK SpinLock
2769 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
2771 /* Clear the lock */
2781 IN PKSPIN_LOCK SpinLock
);
2787 IN PKSPIN_LOCK SpinLock
,
2793 KefAcquireSpinLockAtDpcLevel(
2794 IN PKSPIN_LOCK SpinLock
);
2799 KefReleaseSpinLockFromDpcLevel(
2800 IN PKSPIN_LOCK SpinLock
);
2802 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
2803 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
2804 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
2805 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
2807 #define KeGetDcacheFillSize() 1L
2809 #elif defined(_M_ARM) // !defined (_X86_)
2813 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
2815 /* Clear the lock */
2823 IN PKSPIN_LOCK SpinLock
);
2829 IN PKSPIN_LOCK SpinLock
,
2836 KefAcquireSpinLockAtDpcLevel(
2837 IN PKSPIN_LOCK SpinLock
);
2842 KefReleaseSpinLockFromDpcLevel(
2843 IN PKSPIN_LOCK SpinLock
);
2846 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
2847 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
2848 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
2849 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
2854 KeInitializeSpinLock(
2855 IN PKSPIN_LOCK SpinLock
);
2862 KeInitializeSpinLock(
2863 PKSPIN_LOCK SpinLock
)
2871 IN PKSPIN_LOCK SpinLock
,
2876 KeAcquireSpinLockAtDpcLevel(
2877 IN PKSPIN_LOCK SpinLock
);
2881 KeReleaseSpinLockFromDpcLevel(
2882 IN PKSPIN_LOCK SpinLock
);
2886 KeAcquireSpinLockRaiseToDpc(
2887 IN PKSPIN_LOCK SpinLock
);
2889 #define KeAcquireSpinLock(SpinLock, OldIrql) \
2890 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
2892 #endif // !defined (_X86_)
2895 ** Utillity functions
2898 #define ARGUMENT_PRESENT(ArgumentPointer) \
2899 ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL)
2906 #define BYTE_OFFSET(Va) \
2907 ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
2914 #define BYTES_TO_PAGES(Size) \
2915 ((ULONG) ((ULONG_PTR) (Size) >> PAGE_SHIFT) + (((ULONG) (Size) & (PAGE_SIZE - 1)) != 0))
2922 #define PAGE_ALIGN(Va) \
2923 ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
2928 * IN ULONG_PTR Size)
2930 #define ROUND_TO_PAGES(Size) \
2931 ((ULONG_PTR) (((ULONG_PTR) Size + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)))
2935 #if defined(_X86_) || defined(_AMD64_)
2938 // x86 and x64 performs a 0x2C interrupt
2940 #define DbgRaiseAssertionFailure __int2c
2942 #elif defined(_ARM_)
2949 #error Unsupported Architecture
2954 #define ASSERT(exp) \
2956 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
2958 #define ASSERTMSG(msg, exp) \
2960 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, msg ), FALSE : TRUE)
2962 #define RTL_SOFT_ASSERT(exp) \
2964 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
2966 #define RTL_SOFT_ASSERTMSG(msg, exp) \
2968 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
2970 #define RTL_VERIFY(exp) ASSERT(exp)
2971 #define RTL_VERIFYMSG(msg, exp) ASSERT(msg, exp)
2973 #define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp)
2974 #define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp)
2976 #if defined(_MSC_VER)
2978 #define NT_ASSERT(exp) \
2980 (__annotation(L"Debug", L"AssertFail", L#exp), \
2981 DbgRaiseAssertionFailure(), FALSE) : TRUE)
2983 #define NT_ASSERTMSG(msg, exp) \
2985 (__annotation(L"Debug", L"AssertFail", L##msg), \
2986 DbgRaiseAssertionFailure(), FALSE) : TRUE)
2988 #define NT_ASSERTMSGW(msg, exp) \
2990 (__annotation(L"Debug", L"AssertFail", msg), \
2991 DbgRaiseAssertionFailure(), FALSE) : TRUE)
2996 // GCC doesn't support __annotation (nor PDB)
2998 #define NT_ASSERT(exp) \
2999 (VOID)((!(exp)) ? (DbgRaiseAssertionFailure(), FALSE) : TRUE)
3001 #define NT_ASSERTMSG NT_ASSERT
3002 #define NT_ASSERTMSGW NT_ASSERT
3008 #define ASSERT(exp) ((VOID) 0)
3009 #define ASSERTMSG(msg, exp) ((VOID) 0)
3011 #define RTL_SOFT_ASSERT(exp) ((VOID) 0)
3012 #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
3014 #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
3015 #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
3017 #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
3018 #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
3020 #define NT_ASSERT(exp) ((VOID)0)
3021 #define NT_ASSERTMSG(exp) ((VOID)0)
3022 #define NT_ASSERTMSGW(exp) ((VOID)0)
3026 /* HACK HACK HACK - GCC (or perhaps LD) is messing this up */
3027 #if defined(_NTSYSTEM_) || defined(__GNUC__)
3028 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
3029 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
3031 #define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag)
3032 #define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag)
3033 #endif /* _NT_SYSTEM */
3035 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG
;
3036 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG
;
3039 ** Driver support routines
3042 /** Runtime library routines **/
3044 static __inline VOID
3046 IN PLIST_ENTRY ListHead
)
3048 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
3051 static __inline VOID
3053 IN PLIST_ENTRY ListHead
,
3054 IN PLIST_ENTRY Entry
)
3056 PLIST_ENTRY OldFlink
;
3057 OldFlink
= ListHead
->Flink
;
3058 Entry
->Flink
= OldFlink
;
3059 Entry
->Blink
= ListHead
;
3060 OldFlink
->Blink
= Entry
;
3061 ListHead
->Flink
= Entry
;
3064 static __inline VOID
3066 IN PLIST_ENTRY ListHead
,
3067 IN PLIST_ENTRY Entry
)
3069 PLIST_ENTRY OldBlink
;
3070 OldBlink
= ListHead
->Blink
;
3071 Entry
->Flink
= ListHead
;
3072 Entry
->Blink
= OldBlink
;
3073 OldBlink
->Flink
= Entry
;
3074 ListHead
->Blink
= Entry
;
3080 * IN PLIST_ENTRY ListHead)
3082 #define IsListEmpty(_ListHead) \
3083 ((_ListHead)->Flink == (_ListHead))
3086 * PSINGLE_LIST_ENTRY
3088 * IN PSINGLE_LIST_ENTRY ListHead)
3090 #define PopEntryList(ListHead) \
3093 PSINGLE_LIST_ENTRY _FirstEntry; \
3094 _FirstEntry = (ListHead)->Next; \
3095 if (_FirstEntry != NULL) \
3096 (ListHead)->Next = _FirstEntry->Next; \
3102 * IN PSINGLE_LIST_ENTRY ListHead,
3103 * IN PSINGLE_LIST_ENTRY Entry)
3105 #define PushEntryList(_ListHead, _Entry) \
3106 (_Entry)->Next = (_ListHead)->Next; \
3107 (_ListHead)->Next = (_Entry); \
3109 static __inline BOOLEAN
3111 IN PLIST_ENTRY Entry
)
3113 PLIST_ENTRY OldFlink
;
3114 PLIST_ENTRY OldBlink
;
3116 OldFlink
= Entry
->Flink
;
3117 OldBlink
= Entry
->Blink
;
3118 OldFlink
->Blink
= OldBlink
;
3119 OldBlink
->Flink
= OldFlink
;
3120 return (BOOLEAN
)(OldFlink
== OldBlink
);
3123 static __inline PLIST_ENTRY
3125 IN PLIST_ENTRY ListHead
)
3130 Entry
= ListHead
->Flink
;
3131 Flink
= Entry
->Flink
;
3132 ListHead
->Flink
= Flink
;
3133 Flink
->Blink
= ListHead
;
3137 static __inline PLIST_ENTRY
3139 IN PLIST_ENTRY ListHead
)
3144 Entry
= ListHead
->Blink
;
3145 Blink
= Entry
->Blink
;
3146 ListHead
->Blink
= Blink
;
3147 Blink
->Flink
= ListHead
;
3156 IN ULONG Base OPTIONAL
,
3157 IN OUT PULONG Value
);
3165 BOOLEAN CaseInSensitive
);
3167 #if !defined(MIDL_PASS)
3172 RtlConvertLongToLuid(
3178 Temp
.QuadPart
= Val
;
3179 Luid
.LowPart
= Temp
.u
.LowPart
;
3180 Luid
.HighPart
= Temp
.u
.HighPart
;
3188 RtlConvertUlongToLuid(
3205 IN VOID UNALIGNED
*Destination
,
3206 IN CONST VOID UNALIGNED
*Source
,
3213 IN OUT PSTRING DestinationString
,
3214 IN PSTRING SourceString OPTIONAL
);
3222 IN BOOLEAN CaseInSensitive
);
3224 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
3225 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
3226 *CallersAddress = (PVOID)_ReturnAddress(); \
3227 *CallersCaller = NULL;
3232 RtlGetCallersAddress(
3233 OUT PVOID
*CallersAddress
,
3234 OUT PVOID
*CallersCaller
);
3241 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
3247 IN OUT PACCESS_MASK AccessMask
,
3248 IN PGENERIC_MAPPING GenericMapping
);
3253 RtlPrefixUnicodeString(
3254 IN PCUNICODE_STRING String1
,
3255 IN PCUNICODE_STRING String2
,
3256 IN BOOLEAN CaseInSensitive
);
3261 RtlUpcaseUnicodeString(
3262 IN OUT PUNICODE_STRING DestinationString OPTIONAL
,
3263 IN PCUNICODE_STRING SourceString
,
3264 IN BOOLEAN AllocateDestinationString
);
3276 IN OUT PSTRING DestinationString
,
3277 IN PSTRING SourceString
);
3282 RtlVerifyVersionInfo(
3283 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
3285 IN ULONGLONG ConditionMask
);
3290 RtlVolumeDeviceToDosName(
3291 IN PVOID VolumeDeviceObject
,
3292 OUT PUNICODE_STRING DosName
);
3305 KeAreAllApcsDisabled(
3309 /* Guarded Mutex routines */
3314 KeAcquireGuardedMutex(
3315 IN OUT PKGUARDED_MUTEX GuardedMutex
3321 KeAcquireGuardedMutexUnsafe(
3322 IN OUT PKGUARDED_MUTEX GuardedMutex
3328 KeEnterGuardedRegion(
3335 KeLeaveGuardedRegion(
3342 KeInitializeGuardedMutex(
3343 OUT PKGUARDED_MUTEX GuardedMutex
3349 KeReleaseGuardedMutexUnsafe(
3350 IN OUT PKGUARDED_MUTEX GuardedMutex
3356 KeReleaseGuardedMutex(
3357 IN OUT PKGUARDED_MUTEX GuardedMutex
3363 KeTryToAcquireGuardedMutex(
3364 IN OUT PKGUARDED_MUTEX GuardedMutex
3368 #define ExInitializeFastMutex(_FastMutex) \
3370 (_FastMutex)->Count = FM_LOCK_BIT; \
3371 (_FastMutex)->Owner = NULL; \
3372 (_FastMutex)->Contention = 0; \
3373 KeInitializeEvent(&(_FastMutex)->Gate, SynchronizationEvent, FALSE); \
3384 /******************************************************************************
3386 ******************************************************************************/
3388 typedef struct _ZONE_SEGMENT_HEADER
{
3389 SINGLE_LIST_ENTRY SegmentList
;
3391 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
3393 typedef struct _ZONE_HEADER
{
3394 SINGLE_LIST_ENTRY FreeList
;
3395 SINGLE_LIST_ENTRY SegmentList
;
3397 ULONG TotalSegmentSize
;
3398 } ZONE_HEADER
, *PZONE_HEADER
;
3400 #define PROTECTED_POOL 0x80000000
3402 /******************************************************************************
3403 * Executive Functions *
3404 ******************************************************************************/
3410 IN PZONE_HEADER Zone
,
3412 IN ULONG SegmentSize
);
3414 static __inline PVOID
3416 IN PZONE_HEADER Zone
)
3418 if (Zone
->FreeList
.Next
)
3419 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
3420 return (PVOID
) Zone
->FreeList
.Next
;
3423 static __inline PVOID
3425 IN PZONE_HEADER Zone
,
3428 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
3429 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
3430 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
3437 IN PZONE_HEADER Zone
,
3439 IN PVOID InitialSegment
,
3440 IN ULONG InitialSegmentSize
);
3444 * ExInterlockedAllocateFromZone(
3445 * IN PZONE_HEADER Zone,
3446 * IN PKSPIN_LOCK Lock)
3448 #define ExInterlockedAllocateFromZone(Zone, Lock) \
3449 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
3454 ExInterlockedExtendZone(
3455 IN PZONE_HEADER Zone
,
3457 IN ULONG SegmentSize
,
3458 IN PKSPIN_LOCK Lock
);
3461 * ExInterlockedFreeToZone(
3462 * IN PZONE_HEADER Zone,
3464 * IN PKSPIN_LOCK Lock);
3466 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
3467 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
3471 * InitializeSListHead(
3472 * IN PSLIST_HEADER SListHead)
3474 #define InitializeSListHead(_SListHead) \
3475 (_SListHead)->Alignment = 0
3477 #define ExInitializeSListHead InitializeSListHead
3482 * IN PZONE_HEADER Zone)
3484 #define ExIsFullZone(Zone) \
3485 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
3488 * ExIsObjectInFirstZoneSegment(
3489 * IN PZONE_HEADER Zone,
3492 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
3493 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
3494 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
3495 (Zone)->TotalSegmentSize)) )
3501 ExRaiseAccessViolation(
3508 ExRaiseDatatypeMisalignment(
3517 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
3518 #define ExAcquireResourceShared ExAcquireResourceSharedLite
3519 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
3520 #define ExDeleteResource ExDeleteResourceLite
3521 #define ExInitializeResource ExInitializeResourceLite
3522 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
3523 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
3524 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
3525 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
3530 #define PAGED_CODE() { \
3531 if (KeGetCurrentIrql() > APC_LEVEL) { \
3532 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
3539 #define PAGED_CODE()
3547 IN CONST VOID
*Address
,
3549 IN ULONG Alignment
);
3557 IN ULONG Alignment
);
3561 /** Configuration manager routines **/
3567 IN PEX_CALLBACK_FUNCTION Function
,
3569 IN OUT PLARGE_INTEGER Cookie
);
3574 CmUnRegisterCallback(
3575 IN LARGE_INTEGER Cookie
);
3579 /** Filesystem runtime library routines **/
3584 FsRtlIsTotalDeviceFailure(
3585 IN NTSTATUS Status
);
3589 /** Hardware abstraction layer routines **/
3595 IN ULONG Frequency
);
3601 IN PDEVICE_OBJECT DeviceObject
,
3602 IN ULONG SectorSize
,
3603 IN ULONG MBRTypeIdentifier
,
3609 PADAPTER_OBJECT AdapterObject
3613 /** Io access routines **/
3615 #if !defined(_M_AMD64)
3619 READ_PORT_BUFFER_UCHAR(
3627 READ_PORT_BUFFER_ULONG(
3635 READ_PORT_BUFFER_USHORT(
3661 READ_REGISTER_BUFFER_UCHAR(
3669 READ_REGISTER_BUFFER_ULONG(
3677 READ_REGISTER_BUFFER_USHORT(
3678 IN PUSHORT Register
,
3685 READ_REGISTER_UCHAR(
3686 IN PUCHAR Register
);
3691 READ_REGISTER_ULONG(
3692 IN PULONG Register
);
3697 READ_REGISTER_USHORT(
3698 IN PUSHORT Register
);
3703 WRITE_PORT_BUFFER_UCHAR(
3711 WRITE_PORT_BUFFER_ULONG(
3719 WRITE_PORT_BUFFER_USHORT(
3748 WRITE_REGISTER_BUFFER_UCHAR(
3756 WRITE_REGISTER_BUFFER_ULONG(
3764 WRITE_REGISTER_BUFFER_USHORT(
3765 IN PUSHORT Register
,
3772 WRITE_REGISTER_UCHAR(
3779 WRITE_REGISTER_ULONG(
3786 WRITE_REGISTER_USHORT(
3787 IN PUSHORT Register
,
3794 READ_PORT_BUFFER_UCHAR(
3799 __inbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
3804 READ_PORT_BUFFER_ULONG(
3809 __indwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
3814 READ_PORT_BUFFER_USHORT(
3819 __inwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
3827 return __inbyte((USHORT
)(ULONG_PTR
)Port
);
3835 return __indword((USHORT
)(ULONG_PTR
)Port
);
3843 return __inword((USHORT
)(ULONG_PTR
)Port
);
3848 READ_REGISTER_BUFFER_UCHAR(
3853 __movsb(Register
, Buffer
, Count
);
3858 READ_REGISTER_BUFFER_ULONG(
3863 __movsd(Register
, Buffer
, Count
);
3868 READ_REGISTER_BUFFER_USHORT(
3869 IN PUSHORT Register
,
3873 __movsw(Register
, Buffer
, Count
);
3878 READ_REGISTER_UCHAR(
3886 READ_REGISTER_ULONG(
3894 READ_REGISTER_USHORT(
3895 IN PUSHORT Register
)
3902 WRITE_PORT_BUFFER_UCHAR(
3907 __outbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
3912 WRITE_PORT_BUFFER_ULONG(
3917 __outdwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
3922 WRITE_PORT_BUFFER_USHORT(
3927 __outwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
3936 __outbyte((USHORT
)(ULONG_PTR
)Port
, Value
);
3945 __outdword((USHORT
)(ULONG_PTR
)Port
, Value
);
3954 __outword((USHORT
)(ULONG_PTR
)Port
, Value
);
3959 WRITE_REGISTER_BUFFER_UCHAR(
3965 __movsb(Register
, Buffer
, Count
);
3966 InterlockedOr(&Synch
, 1);
3971 WRITE_REGISTER_BUFFER_ULONG(
3977 __movsd(Register
, Buffer
, Count
);
3978 InterlockedOr(&Synch
, 1);
3983 WRITE_REGISTER_BUFFER_USHORT(
3984 IN PUSHORT Register
,
3989 __movsw(Register
, Buffer
, Count
);
3990 InterlockedOr(&Synch
, 1);
3995 WRITE_REGISTER_UCHAR(
4001 InterlockedOr(&Synch
, 1);
4006 WRITE_REGISTER_ULONG(
4012 InterlockedOr(&Synch
, 1);
4017 WRITE_REGISTER_USHORT(
4018 IN PUSHORT Register
,
4023 InterlockedOr(&Sync
, 1);
4028 /** I/O manager routines **/
4033 IoAcquireCancelSpinLock(
4039 IoAcquireRemoveLockEx(
4040 IN PIO_REMOVE_LOCK RemoveLock
,
4041 IN OPTIONAL PVOID Tag OPTIONAL
,
4044 IN ULONG RemlockSize
);
4048 * IoAcquireRemoveLock(
4049 * IN PIO_REMOVE_LOCK RemoveLock,
4050 * IN OPTIONAL PVOID Tag)
4052 #define IoAcquireRemoveLock(_RemoveLock, \
4054 IoAcquireRemoveLockEx(_RemoveLock, _Tag, __FILE__, __LINE__, sizeof(IO_REMOVE_LOCK))
4058 * IoAdjustPagingPathCount(
4060 * IN BOOLEAN Increment)
4062 #define IoAdjustPagingPathCount(_Count, \
4067 InterlockedIncrement(_Count); \
4071 InterlockedDecrement(_Count); \
4075 #ifndef DMA_MACROS_DEFINED
4079 IoAllocateAdapterChannel(
4080 IN PADAPTER_OBJECT AdapterObject
,
4081 IN PDEVICE_OBJECT DeviceObject
,
4082 IN ULONG NumberOfMapRegisters
,
4083 IN PDRIVER_CONTROL ExecutionRoutine
,
4090 IoAllocateController(
4091 IN PCONTROLLER_OBJECT ControllerObject
,
4092 IN PDEVICE_OBJECT DeviceObject
,
4093 IN PDRIVER_CONTROL ExecutionRoutine
,
4099 IoAllocateDriverObjectExtension(
4100 IN PDRIVER_OBJECT DriverObject
,
4101 IN PVOID ClientIdentificationAddress
,
4102 IN ULONG DriverObjectExtensionSize
,
4103 OUT PVOID
*DriverObjectExtension
);
4108 IoAllocateErrorLogEntry(
4110 IN UCHAR EntrySize
);
4117 IN BOOLEAN ChargeQuota
);
4123 IN PVOID VirtualAddress
,
4125 IN BOOLEAN SecondaryBuffer
,
4126 IN BOOLEAN ChargeQuota
,
4127 IN OUT PIRP Irp OPTIONAL
);
4133 IN PDEVICE_OBJECT DeviceObject
);
4136 * VOID IoAssignArcName(
4137 * IN PUNICODE_STRING ArcName,
4138 * IN PUNICODE_STRING DeviceName);
4140 #define IoAssignArcName(_ArcName, _DeviceName) ( \
4141 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
4147 IN PDEVICE_OBJECT SourceDevice
,
4148 IN PUNICODE_STRING TargetDevice
,
4149 OUT PDEVICE_OBJECT
*AttachedDevice
);
4154 IoAttachDeviceToDeviceStack(
4155 IN PDEVICE_OBJECT SourceDevice
,
4156 IN PDEVICE_OBJECT TargetDevice
);
4161 IoBuildAsynchronousFsdRequest(
4162 IN ULONG MajorFunction
,
4163 IN PDEVICE_OBJECT DeviceObject
,
4164 IN OUT PVOID Buffer OPTIONAL
,
4165 IN ULONG Length OPTIONAL
,
4166 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
4167 IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL
);
4172 IoBuildDeviceIoControlRequest(
4173 IN ULONG IoControlCode
,
4174 IN PDEVICE_OBJECT DeviceObject
,
4175 IN PVOID InputBuffer OPTIONAL
,
4176 IN ULONG InputBufferLength
,
4177 OUT PVOID OutputBuffer OPTIONAL
,
4178 IN ULONG OutputBufferLength
,
4179 IN BOOLEAN InternalDeviceIoControl
,
4181 OUT PIO_STATUS_BLOCK IoStatusBlock
);
4188 IN OUT PMDL TargetMdl
,
4189 IN PVOID VirtualAddress
,
4195 IoBuildSynchronousFsdRequest(
4196 IN ULONG MajorFunction
,
4197 IN PDEVICE_OBJECT DeviceObject
,
4198 IN OUT PVOID Buffer OPTIONAL
,
4199 IN ULONG Length OPTIONAL
,
4200 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
4202 OUT PIO_STATUS_BLOCK IoStatusBlock
);
4208 IN PDEVICE_OBJECT DeviceObject
,
4214 * IN PDEVICE_OBJECT DeviceObject,
4217 #define IoCallDriver IofCallDriver
4223 IN PDEVICE_OBJECT DeviceObject
,
4224 IN PFILE_OBJECT FileObject
);
4236 IN ACCESS_MASK DesiredAccess
,
4237 IN ULONG DesiredShareAccess
,
4238 IN OUT PFILE_OBJECT FileObject
,
4239 IN OUT PSHARE_ACCESS ShareAccess
,
4247 IN CCHAR PriorityBoost
);
4251 * IoCompleteRequest(
4253 * IN CCHAR PriorityBoost)
4255 #define IoCompleteRequest IofCompleteRequest
4261 OUT PKINTERRUPT
*InterruptObject
,
4262 IN PKSERVICE_ROUTINE ServiceRoutine
,
4263 IN PVOID ServiceContext
,
4264 IN PKSPIN_LOCK SpinLock OPTIONAL
,
4267 IN KIRQL SynchronizeIrql
,
4268 IN KINTERRUPT_MODE InterruptMode
,
4269 IN BOOLEAN ShareVector
,
4270 IN KAFFINITY ProcessorEnableMask
,
4271 IN BOOLEAN FloatingSave
);
4274 * PIO_STACK_LOCATION
4275 * IoGetCurrentIrpStackLocation(
4278 #define IoGetCurrentIrpStackLocation(_Irp) \
4279 ((_Irp)->Tail.Overlay.CurrentStackLocation)
4282 * PIO_STACK_LOCATION
4283 * IoGetNextIrpStackLocation(
4286 #define IoGetNextIrpStackLocation(_Irp) \
4287 ((_Irp)->Tail.Overlay.CurrentStackLocation - 1)
4291 * IoCopyCurrentIrpStackLocationToNext(
4294 #define IoCopyCurrentIrpStackLocationToNext(_Irp) \
4296 PIO_STACK_LOCATION _IrpSp; \
4297 PIO_STACK_LOCATION _NextIrpSp; \
4298 _IrpSp = IoGetCurrentIrpStackLocation(_Irp); \
4299 _NextIrpSp = IoGetNextIrpStackLocation(_Irp); \
4300 RtlCopyMemory(_NextIrpSp, _IrpSp, \
4301 FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); \
4302 _NextIrpSp->Control = 0; \
4315 IN PDRIVER_OBJECT DriverObject
,
4316 IN ULONG DeviceExtensionSize
,
4317 IN PUNICODE_STRING DeviceName OPTIONAL
,
4318 IN DEVICE_TYPE DeviceType
,
4319 IN ULONG DeviceCharacteristics
,
4320 IN BOOLEAN Exclusive
,
4321 OUT PDEVICE_OBJECT
*DeviceObject
);
4327 IN PDEVICE_OBJECT DeviceObject
,
4328 IN PCREATE_DISK Disk
);
4334 OUT PHANDLE FileHandle
,
4335 IN ACCESS_MASK DesiredAccess
,
4336 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4337 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4338 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
4339 IN ULONG FileAttributes
,
4340 IN ULONG ShareAccess
,
4341 IN ULONG Disposition
,
4342 IN ULONG CreateOptions
,
4343 IN PVOID EaBuffer OPTIONAL
,
4345 IN CREATE_FILE_TYPE CreateFileType
,
4346 IN PVOID ExtraCreateParameters OPTIONAL
,
4352 IoCreateNotificationEvent(
4353 IN PUNICODE_STRING EventName
,
4354 OUT PHANDLE EventHandle
);
4359 IoCreateSymbolicLink(
4360 IN PUNICODE_STRING SymbolicLinkName
,
4361 IN PUNICODE_STRING DeviceName
);
4366 IoCreateSynchronizationEvent(
4367 IN PUNICODE_STRING EventName
,
4368 OUT PHANDLE EventHandle
);
4373 IoCreateUnprotectedSymbolicLink(
4374 IN PUNICODE_STRING SymbolicLinkName
,
4375 IN PUNICODE_STRING DeviceName
);
4382 IN PIO_CSQ_INSERT_IRP CsqInsertIrp
,
4383 IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
4384 IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
4385 IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
4386 IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
4387 IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
4395 IN PIO_CSQ_IRP_CONTEXT Context
);
4402 IN PIO_CSQ_IRP_CONTEXT Context
);
4409 IN PVOID PeekContext
);
4415 IN PCONTROLLER_OBJECT ControllerObject
);
4421 IN PDEVICE_OBJECT DeviceObject
);
4426 IoDeleteSymbolicLink(
4427 IN PUNICODE_STRING SymbolicLinkName
);
4431 * IoDeassignArcName(
4432 * IN PUNICODE_STRING ArcName)
4434 #define IoDeassignArcName IoDeleteSymbolicLink
4440 IN OUT PDEVICE_OBJECT TargetDevice
);
4445 IoDisconnectInterrupt(
4446 IN PKINTERRUPT InterruptObject
);
4451 IoForwardIrpSynchronously(
4452 IN PDEVICE_OBJECT DeviceObject
,
4455 #define IoForwardAndCatchIrp IoForwardIrpSynchronously
4461 IN PCONTROLLER_OBJECT ControllerObject
);
4466 IoFreeErrorLogEntry(
4485 IN PIO_WORKITEM pIOWorkItem
);
4490 IoGetAttachedDevice(
4491 IN PDEVICE_OBJECT DeviceObject
);
4496 IoGetAttachedDeviceReference(
4497 IN PDEVICE_OBJECT DeviceObject
);
4502 IoGetBootDiskInformation(
4503 IN OUT PBOOTDISK_INFORMATION BootDiskInformation
,
4507 PCONFIGURATION_INFORMATION
4509 IoGetConfigurationInformation(
4515 IoGetCurrentProcess(
4521 IoGetDeviceInterfaceAlias(
4522 IN PUNICODE_STRING SymbolicLinkName
,
4523 IN CONST GUID
*AliasInterfaceClassGuid
,
4524 OUT PUNICODE_STRING AliasSymbolicLinkName
);
4526 #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
4531 IoGetDeviceInterfaces(
4532 IN CONST GUID
*InterfaceClassGuid
,
4533 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
4535 OUT PWSTR
*SymbolicLinkList
);
4540 IoGetDeviceObjectPointer(
4541 IN PUNICODE_STRING ObjectName
,
4542 IN ACCESS_MASK DesiredAccess
,
4543 OUT PFILE_OBJECT
*FileObject
,
4544 OUT PDEVICE_OBJECT
*DeviceObject
);
4549 IoGetDeviceProperty(
4550 IN PDEVICE_OBJECT DeviceObject
,
4551 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
4552 IN ULONG BufferLength
,
4553 OUT PVOID PropertyBuffer
,
4554 OUT PULONG ResultLength
);
4559 IoGetDeviceToVerify(
4560 IN PETHREAD Thread
);
4566 IN PDEVICE_OBJECT PhysicalDeviceObject
,
4567 IN PDEVICE_DESCRIPTION DeviceDescription
,
4568 IN OUT PULONG NumberOfMapRegisters
);
4573 IoGetDriverObjectExtension(
4574 IN PDRIVER_OBJECT DriverObject
,
4575 IN PVOID ClientIdentificationAddress
);
4580 IoGetFileObjectGenericMapping(
4585 * IoGetFunctionCodeFromCtlCode(
4586 * IN ULONG ControlCode)
4588 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \
4589 (((_ControlCode) >> 2) & 0x00000FFF)
4600 IoGetRelatedDeviceObject(
4601 IN PFILE_OBJECT FileObject
);
4607 OUT PULONG_PTR LowLimit
,
4608 OUT PULONG_PTR HighLimit
);
4612 IoGetRemainingStackSize(
4616 ULONG_PTR End
, Begin
;
4619 IoGetStackLimits(&Begin
, &End
);
4620 Result
= (ULONG_PTR
)(&End
) - Begin
;
4629 IN PKDEFERRED_ROUTINE DeferredRoutine
,
4630 IN PVOID DeferredContext
);
4634 * IoInitializeDpcRequest(
4635 * IN PDEVICE_OBJECT DeviceObject,
4636 * IN PIO_DPC_ROUTINE DpcRoutine)
4638 #define IoInitializeDpcRequest(_DeviceObject, \
4640 KeInitializeDpc(&(_DeviceObject)->Dpc, \
4641 (PKDEFERRED_ROUTINE) (_DpcRoutine), \
4649 IN USHORT PacketSize
,
4650 IN CCHAR StackSize
);
4655 IoInitializeRemoveLockEx(
4656 IN PIO_REMOVE_LOCK Lock
,
4657 IN ULONG AllocateTag
,
4658 IN ULONG MaxLockedMinutes
,
4659 IN ULONG HighWatermark
,
4660 IN ULONG RemlockSize
);
4663 * IoInitializeRemoveLock(
4664 * IN PIO_REMOVE_LOCK Lock,
4665 * IN ULONG AllocateTag,
4666 * IN ULONG MaxLockedMinutes,
4667 * IN ULONG HighWatermark)
4669 #define IoInitializeRemoveLock( \
4670 Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
4671 IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
4672 HighWatermark, sizeof(IO_REMOVE_LOCK))
4678 IN PDEVICE_OBJECT DeviceObject
,
4679 IN PIO_TIMER_ROUTINE TimerRoutine
,
4685 IoInvalidateDeviceRelations(
4686 IN PDEVICE_OBJECT DeviceObject
,
4687 IN DEVICE_RELATION_TYPE Type
);
4692 IoInvalidateDeviceState(
4693 IN PDEVICE_OBJECT PhysicalDeviceObject
);
4699 IN PIRP Irp OPTIONAL
);
4703 * IoIsErrorUserInduced(
4704 * IN NTSTATUS Status);
4706 #define IoIsErrorUserInduced(Status) \
4707 ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
4708 ((Status) == STATUS_IO_TIMEOUT) || \
4709 ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
4710 ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
4711 ((Status) == STATUS_VERIFY_REQUIRED) || \
4712 ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
4713 ((Status) == STATUS_WRONG_VOLUME)))
4718 IoIsWdmVersionAvailable(
4719 IN UCHAR MajorVersion
,
4720 IN UCHAR MinorVersion
);
4725 IoMakeAssociatedIrp(
4727 IN CCHAR StackSize
);
4734 #define IoMarkIrpPending(_Irp) \
4735 (IoGetCurrentIrpStackLocation(_Irp)->Control |= SL_PENDING_RETURNED)
4740 IoOpenDeviceInterfaceRegistryKey(
4741 IN PUNICODE_STRING SymbolicLinkName
,
4742 IN ACCESS_MASK DesiredAccess
,
4743 OUT PHANDLE DeviceInterfaceKey
);
4745 #define PLUGPLAY_REGKEY_DEVICE 1
4746 #define PLUGPLAY_REGKEY_DRIVER 2
4747 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
4752 IoOpenDeviceRegistryKey(
4753 IN PDEVICE_OBJECT DeviceObject
,
4754 IN ULONG DevInstKeyType
,
4755 IN ACCESS_MASK DesiredAccess
,
4756 OUT PHANDLE DevInstRegKey
);
4761 IoQueryDeviceDescription(
4762 IN PINTERFACE_TYPE BusType OPTIONAL
,
4763 IN PULONG BusNumber OPTIONAL
,
4764 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
4765 IN PULONG ControllerNumber OPTIONAL
,
4766 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
4767 IN PULONG PeripheralNumber OPTIONAL
,
4768 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
4775 IN PIO_WORKITEM pIOWorkItem
,
4776 IN PIO_WORKITEM_ROUTINE Routine
,
4777 IN WORK_QUEUE_TYPE QueueType
,
4785 IN PVPB Vpb OPTIONAL
,
4786 IN PDEVICE_OBJECT RealDeviceObject
);
4791 IoRaiseInformationalHardError(
4792 IN NTSTATUS ErrorStatus
,
4793 IN PUNICODE_STRING String OPTIONAL
,
4794 IN PKTHREAD Thread OPTIONAL
);
4799 IoReadDiskSignature(
4800 IN PDEVICE_OBJECT DeviceObject
,
4801 IN ULONG BytesPerSector
,
4802 OUT PDISK_SIGNATURE Signature
);
4807 IoReadPartitionTable(
4808 IN PDEVICE_OBJECT DeviceObject
,
4809 IN ULONG SectorSize
,
4810 IN BOOLEAN ReturnRecognizedPartitions
,
4811 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
4816 IoReadPartitionTableEx(
4817 IN PDEVICE_OBJECT DeviceObject
,
4818 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
4823 IoRegisterBootDriverReinitialization(
4824 IN PDRIVER_OBJECT DriverObject
,
4825 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
4831 IoRegisterBootDriverReinitialization(
4832 IN PDRIVER_OBJECT DriverObject
,
4833 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
4839 IoRegisterDeviceInterface(
4840 IN PDEVICE_OBJECT PhysicalDeviceObject
,
4841 IN CONST GUID
*InterfaceClassGuid
,
4842 IN PUNICODE_STRING ReferenceString OPTIONAL
,
4843 OUT PUNICODE_STRING SymbolicLinkName
);
4848 IoRegisterDriverReinitialization(
4849 IN PDRIVER_OBJECT DriverObject
,
4850 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
4856 IoRegisterPlugPlayNotification(
4857 IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory
,
4858 IN ULONG EventCategoryFlags
,
4859 IN PVOID EventCategoryData OPTIONAL
,
4860 IN PDRIVER_OBJECT DriverObject
,
4861 IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine
,
4863 OUT PVOID
*NotificationEntry
);
4868 IoRegisterShutdownNotification(
4869 IN PDEVICE_OBJECT DeviceObject
);
4874 IoReleaseCancelSpinLock(
4880 IoReleaseRemoveLockAndWaitEx(
4881 IN PIO_REMOVE_LOCK RemoveLock
,
4883 IN ULONG RemlockSize
);
4888 IoReleaseRemoveLockEx(
4889 IN PIO_REMOVE_LOCK RemoveLock
,
4891 IN ULONG RemlockSize
);
4895 * IoReleaseRemoveLock(
4896 * IN PIO_REMOVE_LOCK RemoveLock,
4899 #define IoReleaseRemoveLock(_RemoveLock, \
4901 IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
4905 * IoReleaseRemoveLockAndWait(
4906 * IN PIO_REMOVE_LOCK RemoveLock,
4909 #define IoReleaseRemoveLockAndWait(_RemoveLock, \
4911 IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
4916 IoRemoveShareAccess(
4917 IN PFILE_OBJECT FileObject
,
4918 IN OUT PSHARE_ACCESS ShareAccess
);
4923 IoReportDetectedDevice(
4924 IN PDRIVER_OBJECT DriverObject
,
4925 IN INTERFACE_TYPE LegacyBusType
,
4927 IN ULONG SlotNumber
,
4928 IN PCM_RESOURCE_LIST ResourceList
,
4929 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
4930 IN BOOLEAN ResourceAssigned
,
4931 IN OUT PDEVICE_OBJECT
*DeviceObject
);
4936 IoReportResourceForDetection(
4937 IN PDRIVER_OBJECT DriverObject
,
4938 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
4939 IN ULONG DriverListSize OPTIONAL
,
4940 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
4941 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
4942 IN ULONG DeviceListSize OPTIONAL
,
4943 OUT PBOOLEAN ConflictDetected
);
4948 IoReportResourceUsage(
4949 IN PUNICODE_STRING DriverClassName OPTIONAL
,
4950 IN PDRIVER_OBJECT DriverObject
,
4951 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
4952 IN ULONG DriverListSize OPTIONAL
,
4953 IN PDEVICE_OBJECT DeviceObject
,
4954 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
4955 IN ULONG DeviceListSize OPTIONAL
,
4956 IN BOOLEAN OverrideConflict
,
4957 OUT PBOOLEAN ConflictDetected
);
4962 IoReportTargetDeviceChange(
4963 IN PDEVICE_OBJECT PhysicalDeviceObject
,
4964 IN PVOID NotificationStructure
);
4969 IoReportTargetDeviceChangeAsynchronous(
4970 IN PDEVICE_OBJECT PhysicalDeviceObject
,
4971 IN PVOID NotificationStructure
,
4972 IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL
,
4973 IN PVOID Context OPTIONAL
);
4978 IoRequestDeviceEject(
4979 IN PDEVICE_OBJECT PhysicalDeviceObject
);
4984 * IN PDEVICE_OBJECT DeviceObject,
4986 * IN PVOID Context);
4988 #define IoRequestDpc(DeviceObject, Irp, Context)( \
4989 KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
4996 IN NTSTATUS Status
);
5000 * IoSetCancelRoutine(
5002 * IN PDRIVER_CANCEL CancelRoutine)
5004 #define IoSetCancelRoutine(_Irp, \
5006 ((PDRIVER_CANCEL) InterlockedExchangePointer( \
5007 (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (_CancelRoutine)))
5011 * IoSetCompletionRoutine(
5013 * IN PIO_COMPLETION_ROUTINE CompletionRoutine,
5015 * IN BOOLEAN InvokeOnSuccess,
5016 * IN BOOLEAN InvokeOnError,
5017 * IN BOOLEAN InvokeOnCancel)
5019 #define IoSetCompletionRoutine(_Irp, \
5020 _CompletionRoutine, \
5026 PIO_STACK_LOCATION _IrpSp; \
5027 ASSERT((_InvokeOnSuccess) || (_InvokeOnError) || (_InvokeOnCancel) ? \
5028 (_CompletionRoutine) != NULL : TRUE); \
5029 _IrpSp = IoGetNextIrpStackLocation(_Irp); \
5030 _IrpSp->CompletionRoutine = (PIO_COMPLETION_ROUTINE)(_CompletionRoutine); \
5031 _IrpSp->Context = (_Context); \
5032 _IrpSp->Control = 0; \
5033 if (_InvokeOnSuccess) _IrpSp->Control = SL_INVOKE_ON_SUCCESS; \
5034 if (_InvokeOnError) _IrpSp->Control |= SL_INVOKE_ON_ERROR; \
5035 if (_InvokeOnCancel) _IrpSp->Control |= SL_INVOKE_ON_CANCEL; \
5041 IoSetCompletionRoutineEx(
5042 IN PDEVICE_OBJECT DeviceObject
,
5044 IN PIO_COMPLETION_ROUTINE CompletionRoutine
,
5046 IN BOOLEAN InvokeOnSuccess
,
5047 IN BOOLEAN InvokeOnError
,
5048 IN BOOLEAN InvokeOnCancel
);
5053 IoSetDeviceInterfaceState(
5054 IN PUNICODE_STRING SymbolicLinkName
,
5060 IoSetHardErrorOrVerifyDevice(
5062 IN PDEVICE_OBJECT DeviceObject
);
5066 * IoSetNextIrpStackLocation(
5069 #define IoSetNextIrpStackLocation(_Irp) \
5071 (_Irp)->CurrentLocation--; \
5072 (_Irp)->Tail.Overlay.CurrentStackLocation--; \
5078 IoSetPartitionInformation(
5079 IN PDEVICE_OBJECT DeviceObject
,
5080 IN ULONG SectorSize
,
5081 IN ULONG PartitionNumber
,
5082 IN ULONG PartitionType
);
5087 IoSetPartitionInformationEx(
5088 IN PDEVICE_OBJECT DeviceObject
,
5089 IN ULONG PartitionNumber
,
5090 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
5096 IN ACCESS_MASK DesiredAccess
,
5097 IN ULONG DesiredShareAccess
,
5098 IN OUT PFILE_OBJECT FileObject
,
5099 OUT PSHARE_ACCESS ShareAccess
);
5104 IoSetStartIoAttributes(
5105 IN PDEVICE_OBJECT DeviceObject
,
5106 IN BOOLEAN DeferredStartIo
,
5107 IN BOOLEAN NonCancelable
);
5112 IoSetSystemPartition(
5113 IN PUNICODE_STRING VolumeNameString
);
5118 IoSetThreadHardErrorMode(
5119 IN BOOLEAN EnableHardErrors
);
5124 * IN CCHAR StackSize)
5126 #define IoSizeOfIrp(_StackSize) \
5127 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
5131 * IoSkipCurrentIrpStackLocation(
5134 #define IoSkipCurrentIrpStackLocation(_Irp) \
5136 (_Irp)->CurrentLocation++; \
5137 (_Irp)->Tail.Overlay.CurrentStackLocation++; \
5144 IN PDEVICE_OBJECT DeviceObject
,
5145 IN BOOLEAN Cancelable
);
5150 IoStartNextPacketByKey(
5151 IN PDEVICE_OBJECT DeviceObject
,
5152 IN BOOLEAN Cancelable
,
5159 IN PDEVICE_OBJECT DeviceObject
,
5161 IN PULONG Key OPTIONAL
,
5162 IN PDRIVER_CANCEL CancelFunction OPTIONAL
);
5168 IN PDEVICE_OBJECT DeviceObject
);
5174 IN PDEVICE_OBJECT DeviceObject
);
5179 IoUnregisterPlugPlayNotification(
5180 IN PVOID NotificationEntry
);
5185 IoUnregisterShutdownNotification(
5186 IN PDEVICE_OBJECT DeviceObject
);
5191 IoUpdateShareAccess(
5192 IN PFILE_OBJECT FileObject
,
5193 IN OUT PSHARE_ACCESS ShareAccess
);
5198 IoVerifyPartitionTable(
5199 IN PDEVICE_OBJECT DeviceObject
,
5200 IN BOOLEAN FixErrors
);
5205 IoVolumeDeviceToDosName(
5206 IN PVOID VolumeDeviceObject
,
5207 OUT PUNICODE_STRING DosName
);
5212 IoWMIAllocateInstanceIds(
5214 IN ULONG InstanceCount
,
5215 OUT ULONG
*FirstInstanceId
);
5220 IoWMIDeviceObjectToProviderId(
5221 IN PDEVICE_OBJECT DeviceObject
);
5226 IoWMIDeviceObjectToInstanceName(
5227 IN PVOID DataBlockObject
,
5228 IN PDEVICE_OBJECT DeviceObject
,
5229 OUT PUNICODE_STRING InstanceName
);
5235 IN PVOID DataBlockObject
,
5236 IN PUNICODE_STRING InstanceName
,
5238 IN ULONG InBufferSize
,
5239 IN OUT PULONG OutBufferSize
,
5240 IN OUT PUCHAR InOutBuffer
);
5245 IoWMIHandleToInstanceName(
5246 IN PVOID DataBlockObject
,
5247 IN HANDLE FileHandle
,
5248 OUT PUNICODE_STRING InstanceName
);
5254 IN GUID
*DataBlockGuid
,
5255 IN ULONG DesiredAccess
,
5256 OUT PVOID
*DataBlockObject
);
5262 IN PVOID DataBlockObject
,
5263 IN OUT ULONG
*InOutBufferSize
,
5264 OUT PVOID OutBuffer
);
5269 IoWMIQueryAllDataMultiple(
5270 IN PVOID
*DataBlockObjectList
,
5271 IN ULONG ObjectCount
,
5272 IN OUT ULONG
*InOutBufferSize
,
5273 OUT PVOID OutBuffer
);
5278 IoWMIQuerySingleInstance(
5279 IN PVOID DataBlockObject
,
5280 IN PUNICODE_STRING InstanceName
,
5281 IN OUT ULONG
*InOutBufferSize
,
5282 OUT PVOID OutBuffer
);
5287 IoWMIQuerySingleInstanceMultiple(
5288 IN PVOID
*DataBlockObjectList
,
5289 IN PUNICODE_STRING InstanceNames
,
5290 IN ULONG ObjectCount
,
5291 IN OUT ULONG
*InOutBufferSize
,
5292 OUT PVOID OutBuffer
);
5297 IoWMIRegistrationControl(
5298 IN PDEVICE_OBJECT DeviceObject
,
5304 IoWMISetNotificationCallback(
5306 IN WMI_NOTIFICATION_CALLBACK Callback
,
5312 IoWMISetSingleInstance(
5313 IN PVOID DataBlockObject
,
5314 IN PUNICODE_STRING InstanceName
,
5316 IN ULONG ValueBufferSize
,
5317 IN PVOID ValueBuffer
);
5323 IN PVOID DataBlockObject
,
5324 IN PUNICODE_STRING InstanceName
,
5325 IN ULONG DataItemId
,
5327 IN ULONG ValueBufferSize
,
5328 IN PVOID ValueBuffer
);
5333 IoWMISuggestInstanceName(
5334 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
5335 IN PUNICODE_STRING SymbolicLinkName OPTIONAL
,
5336 IN BOOLEAN CombineNames
,
5337 OUT PUNICODE_STRING SuggestedInstanceName
);
5343 IN PVOID WnodeEventItem
);
5348 IoWriteErrorLogEntry(
5354 IoWritePartitionTable(
5355 IN PDEVICE_OBJECT DeviceObject
,
5356 IN ULONG SectorSize
,
5357 IN ULONG SectorsPerTrack
,
5358 IN ULONG NumberOfHeads
,
5359 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
5364 IoWritePartitionTableEx(
5365 IN PDEVICE_OBJECT DeviceObject
,
5366 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*PartitionBuffer
);
5370 /** Kernel routines **/
5372 #if defined (_M_AMD64)
5376 KeAcquireInStackQueuedSpinLock(
5377 IN PKSPIN_LOCK SpinLock
,
5378 IN PKLOCK_QUEUE_HANDLE LockHandle
);
5383 KeReleaseInStackQueuedSpinLock(
5384 IN PKLOCK_QUEUE_HANDLE LockHandle
);
5389 KeAcquireInStackQueuedSpinLock(
5390 IN PKSPIN_LOCK SpinLock
,
5391 IN PKLOCK_QUEUE_HANDLE LockHandle
);
5396 KeReleaseInStackQueuedSpinLock(
5397 IN PKLOCK_QUEUE_HANDLE LockHandle
);
5403 KeAcquireInStackQueuedSpinLockAtDpcLevel(
5404 IN PKSPIN_LOCK SpinLock
,
5405 IN PKLOCK_QUEUE_HANDLE LockHandle
);
5410 KeAcquireInterruptSpinLock(
5411 IN PKINTERRUPT Interrupt
);
5424 IN ULONG BugCheckCode
);
5431 IN ULONG BugCheckCode
,
5432 IN ULONG_PTR BugCheckParameter1
,
5433 IN ULONG_PTR BugCheckParameter2
,
5434 IN ULONG_PTR BugCheckParameter3
,
5435 IN ULONG_PTR BugCheckParameter4
);
5452 KeDelayExecutionThread(
5453 IN KPROCESSOR_MODE WaitMode
,
5454 IN BOOLEAN Alertable
,
5455 IN PLARGE_INTEGER Interval
);
5460 KeDeregisterBugCheckCallback(
5461 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
5466 KeEnterCriticalRegion(
5473 * IN BOOLEAN ReadOperation,
5474 * IN BOOLEAN DmaOperation)
5476 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
5478 #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
5479 #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
5480 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
5481 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
5493 KeFlushWriteBuffer(VOID
);
5498 KeGetRecommendedSharedDataAlignment(
5504 KeInitializeDeviceQueue(
5505 IN PKDEVICE_QUEUE DeviceQueue
);
5517 KeInitializeSemaphore(
5518 IN PRKSEMAPHORE Semaphore
,
5531 KeInitializeTimerEx(
5533 IN TIMER_TYPE Type
);
5538 KeInsertByKeyDeviceQueue(
5539 IN PKDEVICE_QUEUE DeviceQueue
,
5540 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
5546 KeInsertDeviceQueue(
5547 IN PKDEVICE_QUEUE DeviceQueue
,
5548 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
5555 IN PVOID SystemArgument1
,
5556 IN PVOID SystemArgument2
);
5561 KeLeaveCriticalRegion(
5571 volatile LONG Barrier
;
5572 #if defined(__GNUC__)
5573 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
5574 #elif defined(_MSC_VER)
5575 __asm xchg
[Barrier
], eax
5586 IN KPRIORITY Increment
,
5592 KeQueryActiveProcessors(
5599 KeQueryPerformanceCounter(
5600 OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL
);
5605 KeQueryPriorityThread(
5606 IN PRKTHREAD Thread
);
5611 KeQueryRuntimeThread(
5613 OUT PULONG UserTime
);
5615 #if !defined(_M_AMD64)
5619 KeQueryInterruptTime(
5626 OUT PLARGE_INTEGER CurrentTime
);
5632 OUT PLARGE_INTEGER TickCount
);
5638 KeQueryTimeIncrement(
5657 KeReadStateSemaphore(
5658 IN PRKSEMAPHORE Semaphore
);
5669 KeRegisterBugCheckCallback(
5670 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
5671 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
5674 IN PUCHAR Component
);
5679 KeRegisterNmiCallback(
5680 IN PNMI_CALLBACK CallbackRoutine
,
5687 KeDeregisterNmiCallback(
5694 KeReleaseInStackQueuedSpinLockFromDpcLevel(
5695 IN PKLOCK_QUEUE_HANDLE LockHandle
);
5700 KeReleaseInterruptSpinLock(
5701 IN PKINTERRUPT Interrupt
,
5715 IN PRKSEMAPHORE Semaphore
,
5716 IN KPRIORITY Increment
,
5721 PKDEVICE_QUEUE_ENTRY
5723 KeRemoveByKeyDeviceQueue(
5724 IN PKDEVICE_QUEUE DeviceQueue
,
5728 PKDEVICE_QUEUE_ENTRY
5730 KeRemoveDeviceQueue(
5731 IN PKDEVICE_QUEUE DeviceQueue
);
5736 KeRemoveEntryDeviceQueue(
5737 IN PKDEVICE_QUEUE DeviceQueue
,
5738 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
5755 KeRestoreFloatingPointState(
5756 IN PKFLOATING_SAVE FloatSave
);
5761 KeRevertToUserAffinityThread(VOID
);
5766 KeSaveFloatingPointState(
5767 OUT PKFLOATING_SAVE FloatSave
);
5772 KeSetBasePriorityThread(
5773 IN PRKTHREAD Thread
,
5781 IN KPRIORITY Increment
,
5789 IN KDPC_IMPORTANCE Importance
);
5794 KeSetPriorityThread(
5796 IN KPRIORITY Priority
);
5801 KeSetSystemAffinityThread(
5802 IN KAFFINITY Affinity
);
5807 KeSetTargetProcessorDpc(
5816 IN LARGE_INTEGER DueTime
,
5817 IN PKDPC Dpc OPTIONAL
);
5824 IN LARGE_INTEGER DueTime
,
5825 IN LONG Period OPTIONAL
,
5826 IN PKDPC Dpc OPTIONAL
);
5831 KeSetTimeUpdateNotifyRoutine(
5832 IN PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine
);
5837 KeStallExecutionProcessor(
5838 IN ULONG MicroSeconds
);
5843 KeSynchronizeExecution(
5844 IN PKINTERRUPT Interrupt
,
5845 IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
5846 IN PVOID SynchronizeContext
);
5851 KeWaitForMultipleObjects(
5854 IN WAIT_TYPE WaitType
,
5855 IN KWAIT_REASON WaitReason
,
5856 IN KPROCESSOR_MODE WaitMode
,
5857 IN BOOLEAN Alertable
,
5858 IN PLARGE_INTEGER Timeout OPTIONAL
,
5859 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL
);
5864 KeWaitForMutexObject(
5866 IN KWAIT_REASON WaitReason
,
5867 IN KPROCESSOR_MODE WaitMode
,
5868 IN BOOLEAN Alertable
,
5869 IN PLARGE_INTEGER Timeout OPTIONAL
);
5874 KeWaitForSingleObject(
5876 IN KWAIT_REASON WaitReason
,
5877 IN KPROCESSOR_MODE WaitMode
,
5878 IN BOOLEAN Alertable
,
5879 IN PLARGE_INTEGER Timeout OPTIONAL
);
5883 (NTAPI
*PKIPI_BROADCAST_WORKER
)(
5884 IN ULONG_PTR Argument
5891 IN PKIPI_BROADCAST_WORKER BroadcastFunction
,
5892 IN ULONG_PTR Context
5912 KeRaiseIrqlToDpcLevel(
5918 KeRaiseIrqlToSynchLevel(
5921 #define KeLowerIrql(a) KfLowerIrql(a)
5922 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
5924 #elif defined(_M_AMD64)
5928 KeGetCurrentIrql(VOID
)
5930 return (KIRQL
)__readcr8();
5935 KeLowerIrql(IN KIRQL NewIrql
)
5937 ASSERT(KeGetCurrentIrql() >= NewIrql
);
5938 __writecr8(NewIrql
);
5943 KfRaiseIrql(IN KIRQL NewIrql
)
5947 OldIrql
= __readcr8();
5948 ASSERT(OldIrql
<= NewIrql
);
5949 __writecr8(NewIrql
);
5952 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
5956 KeRaiseIrqlToDpcLevel(VOID
)
5958 return KfRaiseIrql(DISPATCH_LEVEL
);
5963 KeRaiseIrqlToSynchLevel(VOID
)
5965 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
5968 #elif defined(__PowerPC__)
5985 KeRaiseIrqlToDpcLevel(
5991 KeRaiseIrqlToSynchLevel(
5994 #define KeLowerIrql(a) KfLowerIrql(a)
5995 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
5997 #elif defined(_M_MIPS)
5999 #define KeLowerIrql(a) KfLowerIrql(a)
6000 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
6017 KeRaiseIrqlToDpcLevel(
6023 KeRaiseIrqlToSynchLevel(
6026 #elif defined(_M_ARM)
6043 OUT PKIRQL OldIrql
);
6048 KeRaiseIrqlToDpcLevel(
6054 KeRaiseIrqlToSynchLevel(
6059 /** Memory manager routines **/
6066 IN ULONG NumberOfBytes
);
6071 MmAllocateContiguousMemory(
6072 IN ULONG NumberOfBytes
,
6073 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
6078 MmAllocateContiguousMemorySpecifyCache(
6079 IN SIZE_T NumberOfBytes
,
6080 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
6081 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
6082 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
6083 IN MEMORY_CACHING_TYPE CacheType
);
6088 MmAllocateMappingAddress(
6089 IN SIZE_T NumberOfBytes
,
6095 MmAllocateNonCachedMemory(
6096 IN ULONG NumberOfBytes
);
6101 MmAllocatePagesForMdl(
6102 IN PHYSICAL_ADDRESS LowAddress
,
6103 IN PHYSICAL_ADDRESS HighAddress
,
6104 IN PHYSICAL_ADDRESS SkipBytes
,
6105 IN SIZE_T TotalBytes
);
6107 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
6111 MmAllocatePagesForMdlEx(
6112 IN PHYSICAL_ADDRESS LowAddress
,
6113 IN PHYSICAL_ADDRESS HighAddress
,
6114 IN PHYSICAL_ADDRESS SkipBytes
,
6115 IN SIZE_T TotalBytes
,
6116 IN MEMORY_CACHING_TYPE CacheType
,
6123 MmBuildMdlForNonPagedPool(
6124 IN OUT PMDL MemoryDescriptorList
);
6126 typedef enum _MMFLUSH_TYPE
{
6134 MmFlushImageSection(
6135 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
6136 IN MMFLUSH_TYPE FlushType
);
6141 MmFreeContiguousMemory(
6142 IN PVOID BaseAddress
);
6147 MmFreeContiguousMemorySpecifyCache(
6148 IN PVOID BaseAddress
,
6149 IN SIZE_T NumberOfBytes
,
6150 IN MEMORY_CACHING_TYPE CacheType
);
6155 MmFreeMappingAddress(
6156 IN PVOID BaseAddress
,
6162 MmFreeNonCachedMemory(
6163 IN PVOID BaseAddress
,
6164 IN SIZE_T NumberOfBytes
);
6170 IN PMDL MemoryDescriptorList
);
6174 * MmGetMdlByteCount(
6177 #define MmGetMdlByteCount(_Mdl) \
6182 * MmGetMdlByteOffset(
6185 #define MmGetMdlByteOffset(_Mdl) \
6186 ((_Mdl)->ByteOffset)
6193 #define MmGetMdlPfnArray(_Mdl) \
6194 ((PPFN_NUMBER) ((_Mdl) + 1))
6198 * MmGetMdlVirtualAddress(
6201 #define MmGetMdlVirtualAddress(_Mdl) \
6202 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
6207 MmGetPhysicalAddress(
6208 IN PVOID BaseAddress
);
6211 PPHYSICAL_MEMORY_RANGE
6213 MmGetPhysicalMemoryRanges(
6219 MmGetVirtualForPhysical(
6220 IN PHYSICAL_ADDRESS PhysicalAddress
);
6225 MmMapLockedPagesSpecifyCache(
6226 IN PMDL MemoryDescriptorList
,
6227 IN KPROCESSOR_MODE AccessMode
,
6228 IN MEMORY_CACHING_TYPE CacheType
,
6229 IN PVOID BaseAddress
,
6230 IN ULONG BugCheckOnFailure
,
6231 IN MM_PAGE_PRIORITY Priority
);
6236 MmMapLockedPagesWithReservedMapping(
6237 IN PVOID MappingAddress
,
6239 IN PMDL MemoryDescriptorList
,
6240 IN MEMORY_CACHING_TYPE CacheType
);
6245 MmMapUserAddressesToPage(
6246 IN PVOID BaseAddress
,
6247 IN SIZE_T NumberOfBytes
,
6248 IN PVOID PageAddress
);
6254 IN PHYSICAL_ADDRESS PhysicalAddress
,
6255 IN SIZE_T NumberOfBytes
,
6256 IN MEMORY_CACHING_TYPE CacheType
);
6261 MmMapViewInSessionSpace(
6263 OUT PVOID
*MappedBase
,
6264 IN OUT PSIZE_T ViewSize
);
6269 MmMapViewInSystemSpace(
6271 OUT PVOID
*MappedBase
,
6272 IN PSIZE_T ViewSize
);
6277 MmMarkPhysicalMemoryAsBad(
6278 IN PPHYSICAL_ADDRESS StartAddress
,
6279 IN OUT PLARGE_INTEGER NumberOfBytes
);
6284 MmMarkPhysicalMemoryAsGood(
6285 IN PPHYSICAL_ADDRESS StartAddress
,
6286 IN OUT PLARGE_INTEGER NumberOfBytes
);
6291 MmGetSystemRoutineAddress(
6292 IN PUNICODE_STRING SystemRoutineName
);
6296 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
6300 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, \
6302 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
6303 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
6308 * IN PMDL MemoryDescriptorList,
6312 #define MmInitializeMdl(_MemoryDescriptorList, \
6316 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
6317 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
6318 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
6319 (_MemoryDescriptorList)->MdlFlags = 0; \
6320 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
6321 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
6322 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
6329 IN PVOID VirtualAddress
);
6334 MmIsDriverVerifying(
6335 IN PDRIVER_OBJECT DriverObject
);
6340 MmIsThisAnNtAsSystem(
6346 MmIsVerifierEnabled(
6347 OUT PULONG VerifierFlags
);
6352 MmLockPagableDataSection(
6353 IN PVOID AddressWithinSection
);
6358 MmLockPagableImageSection(
6359 IN PVOID AddressWithinSection
);
6363 * MmLockPagableCodeSection(
6364 * IN PVOID AddressWithinSection)
6366 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
6371 MmLockPagableSectionByHandle(
6372 IN PVOID ImageSectionHandle
);
6378 IN PHYSICAL_ADDRESS PhysicalAddress
,
6379 IN ULONG NumberOfBytes
,
6380 IN MEMORY_CACHING_TYPE CacheEnable
);
6386 IN PMDL MemoryDescriptorList
,
6387 IN KPROCESSOR_MODE AccessMode
);
6392 MmLockPageableDataSection (
6393 IN PVOID AddressWithinSection
6399 MmUnlockPageableImageSection(
6400 IN PVOID ImageSectionHandle
6407 IN PVOID AddressWithinSection
);
6412 MmProbeAndLockProcessPages(
6413 IN OUT PMDL MemoryDescriptorList
,
6414 IN PEPROCESS Process
,
6415 IN KPROCESSOR_MODE AccessMode
,
6416 IN LOCK_OPERATION Operation
);
6421 MmProtectMdlSystemAddress(
6422 IN PMDL MemoryDescriptorList
,
6423 IN ULONG NewProtect
);
6429 IN PVOID BaseAddress
,
6430 IN PMDL MemoryDescriptorList
);
6435 MmUnmapViewInSessionSpace(
6436 IN PVOID MappedBase
);
6441 MmUnmapViewInSystemSpace(
6442 IN PVOID MappedBase
);
6447 MmUnsecureVirtualMemory(
6448 IN HANDLE SecureHandle
);
6452 * MmPrepareMdlForReuse(
6455 #define MmPrepareMdlForReuse(_Mdl) \
6457 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
6458 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
6459 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
6460 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
6461 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
6465 #define MmGetProcedureAddress(Address) (Address)
6470 MmProbeAndLockPages(
6471 IN OUT PMDL MemoryDescriptorList
,
6472 IN KPROCESSOR_MODE AccessMode
,
6473 IN LOCK_OPERATION Operation
);
6484 MmRemovePhysicalMemory(
6485 IN PPHYSICAL_ADDRESS StartAddress
,
6486 IN OUT PLARGE_INTEGER NumberOfBytes
);
6491 MmResetDriverPaging(
6492 IN PVOID AddressWithinSection
);
6497 MmSecureVirtualMemory(
6500 IN ULONG ProbeMode
);
6512 MmUnlockPagableImageSection(
6513 IN PVOID ImageSectionHandle
);
6519 IN PMDL MemoryDescriptorList
);
6525 IN PVOID BaseAddress
,
6526 IN SIZE_T NumberOfBytes
);
6531 MmUnmapReservedMapping(
6532 IN PVOID BaseAddress
,
6534 IN PMDL MemoryDescriptorList
);
6539 MmUnmapVideoDisplay(
6540 IN PVOID BaseAddress
,
6541 IN SIZE_T NumberOfBytes
);
6545 /** Object manager routines **/
6551 IN PACCESS_STATE AccessState
,
6552 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
6554 IN POBJECT_TYPE Type
);
6559 ObDereferenceSecurityDescriptor(
6560 PSECURITY_DESCRIPTOR SecurityDescriptor
,
6566 ObfDereferenceObject(
6571 * ObDereferenceObject(
6574 #define ObDereferenceObject ObfDereferenceObject
6579 ObGetObjectSecurity(
6581 OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
6582 OUT PBOOLEAN MemoryAllocated
);
6589 IN PACCESS_STATE PassedAccessState OPTIONAL
,
6590 IN ACCESS_MASK DesiredAccess
,
6591 IN ULONG AdditionalReferences
,
6592 OUT PVOID
* ReferencedObject OPTIONAL
,
6593 OUT PHANDLE Handle
);
6604 ObLogSecurityDescriptor(
6605 IN PSECURITY_DESCRIPTOR InputSecurityDescriptor
,
6606 OUT PSECURITY_DESCRIPTOR
*OutputSecurityDescriptor
,
6610 * ObReferenceObject(
6613 #define ObReferenceObject ObfReferenceObject
6618 ObMakeTemporaryObject(
6625 IN POBJECT_ATTRIBUTES ObjectAttributes
,
6626 IN POBJECT_TYPE ObjectType
,
6627 IN KPROCESSOR_MODE AccessMode
,
6628 IN PACCESS_STATE PassedAccessState
,
6629 IN ACCESS_MASK DesiredAccess
,
6630 IN OUT PVOID ParseContext OPTIONAL
,
6631 OUT PHANDLE Handle
);
6636 ObOpenObjectByPointer(
6638 IN ULONG HandleAttributes
,
6639 IN PACCESS_STATE PassedAccessState OPTIONAL
,
6640 IN ACCESS_MASK DesiredAccess OPTIONAL
,
6641 IN POBJECT_TYPE ObjectType OPTIONAL
,
6642 IN KPROCESSOR_MODE AccessMode
,
6643 OUT PHANDLE Handle
);
6648 ObQueryObjectAuditingByHandle(
6650 OUT PBOOLEAN GenerateOnClose
);
6655 ObReferenceObjectByHandle(
6657 IN ACCESS_MASK DesiredAccess
,
6658 IN POBJECT_TYPE ObjectType OPTIONAL
,
6659 IN KPROCESSOR_MODE AccessMode
,
6661 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
);
6666 ObReferenceObjectByName(
6667 IN PUNICODE_STRING ObjectPath
,
6668 IN ULONG Attributes
,
6669 IN PACCESS_STATE PassedAccessState OPTIONAL
,
6670 IN ACCESS_MASK DesiredAccess OPTIONAL
,
6671 IN POBJECT_TYPE ObjectType
,
6672 IN KPROCESSOR_MODE AccessMode
,
6673 IN OUT PVOID ParseContext OPTIONAL
,
6679 ObReferenceObjectByPointer(
6681 IN ACCESS_MASK DesiredAccess
,
6682 IN POBJECT_TYPE ObjectType
,
6683 IN KPROCESSOR_MODE AccessMode
);
6688 ObReferenceSecurityDescriptor(
6689 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
6695 ObReleaseObjectSecurity(
6696 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
6697 IN BOOLEAN MemoryAllocated
);
6701 /** Process manager routines **/
6706 PsCreateSystemProcess(
6707 IN PHANDLE ProcessHandle
,
6708 IN ACCESS_MASK DesiredAccess
,
6709 IN POBJECT_ATTRIBUTES ObjectAttributes
);
6714 PsCreateSystemThread(
6715 OUT PHANDLE ThreadHandle
,
6716 IN ULONG DesiredAccess
,
6717 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
6718 IN HANDLE ProcessHandle OPTIONAL
,
6719 OUT PCLIENT_ID ClientId OPTIONAL
,
6720 IN PKSTART_ROUTINE StartRoutine
,
6721 IN PVOID StartContext
);
6725 * PsGetCurrentProcess(VOID)
6727 #define PsGetCurrentProcess IoGetCurrentProcess
6732 PsGetCurrentProcessId(
6737 * PsGetCurrentThread(VOID)
6739 #define PsGetCurrentThread() \
6740 ((PETHREAD) KeGetCurrentThread())
6745 PsGetCurrentThreadId(
6751 PsGetProcessId(PEPROCESS Process
);
6757 PULONG MajorVersion OPTIONAL
,
6758 PULONG MinorVersion OPTIONAL
,
6759 PULONG BuildNumber OPTIONAL
,
6760 PUNICODE_STRING CSDVersion OPTIONAL
);
6765 PsRemoveCreateThreadNotifyRoutine(
6766 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
6771 PsRemoveLoadImageNotifyRoutine(
6772 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
6777 PsSetCreateProcessNotifyRoutine(
6778 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
6784 PsSetCreateThreadNotifyRoutine(
6785 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
6790 PsSetLoadImageNotifyRoutine(
6791 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
6796 PsTerminateSystemThread(
6797 IN NTSTATUS ExitStatus
);
6799 extern NTSYSAPI PEPROCESS PsInitialSystemProcess
;
6802 /** Security reference monitor routines **/
6808 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
6809 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
6810 IN BOOLEAN SubjectContextLocked
,
6811 IN ACCESS_MASK DesiredAccess
,
6812 IN ACCESS_MASK PreviouslyGrantedAccess
,
6813 OUT PPRIVILEGE_SET
*Privileges OPTIONAL
,
6814 IN PGENERIC_MAPPING GenericMapping
,
6815 IN KPROCESSOR_MODE AccessMode
,
6816 OUT PACCESS_MASK GrantedAccess
,
6817 OUT PNTSTATUS AccessStatus
);
6823 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
6824 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
6825 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
6826 IN BOOLEAN IsDirectoryObject
,
6827 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
6828 IN PGENERIC_MAPPING GenericMapping
,
6829 IN POOL_TYPE PoolType
);
6835 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
6836 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
6837 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
6838 IN GUID
*ObjectType OPTIONAL
,
6839 IN BOOLEAN IsDirectoryObject
,
6840 IN ULONG AutoInheritFlags
,
6841 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
6842 IN PGENERIC_MAPPING GenericMapping
,
6843 IN POOL_TYPE PoolType
);
6849 IN OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
);
6854 SeSinglePrivilegeCheck(
6855 LUID PrivilegeValue
,
6856 KPROCESSOR_MODE PreviousMode
);
6861 SeValidSecurityDescriptor(
6863 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
6867 /** NtXxx routines **/
6873 OUT PHANDLE ProcessHandle
,
6874 IN ACCESS_MASK DesiredAccess
,
6875 IN POBJECT_ATTRIBUTES ObjectAttributes
,
6876 IN PCLIENT_ID ClientId OPTIONAL
);
6881 NtQueryInformationProcess(
6882 IN HANDLE ProcessHandle
,
6883 IN PROCESSINFOCLASS ProcessInformationClass
,
6884 OUT PVOID ProcessInformation
,
6885 IN ULONG ProcessInformationLength
,
6886 OUT PULONG ReturnLength OPTIONAL
);
6890 /** NtXxx and ZwXxx routines **/
6896 IN HANDLE TimerHandle
,
6897 OUT PBOOLEAN CurrentState OPTIONAL
);
6914 ZwCreateDirectoryObject(
6915 OUT PHANDLE DirectoryHandle
,
6916 IN ACCESS_MASK DesiredAccess
,
6917 IN POBJECT_ATTRIBUTES ObjectAttributes
);
6923 OUT PHANDLE EventHandle
,
6924 IN ACCESS_MASK DesiredAccess
,
6925 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
6926 IN EVENT_TYPE EventType
,
6927 IN BOOLEAN InitialState
);
6933 OUT PHANDLE EventHandle
,
6934 IN ACCESS_MASK DesiredAccess
,
6935 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
6936 IN EVENT_TYPE EventType
,
6937 IN BOOLEAN InitialState
);
6943 OUT PHANDLE FileHandle
,
6944 IN ACCESS_MASK DesiredAccess
,
6945 IN POBJECT_ATTRIBUTES ObjectAttributes
,
6946 OUT PIO_STATUS_BLOCK IoStatusBlock
,
6947 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
6948 IN ULONG FileAttributes
,
6949 IN ULONG ShareAccess
,
6950 IN ULONG CreateDisposition
,
6951 IN ULONG CreateOptions
,
6952 IN PVOID EaBuffer OPTIONAL
,
6959 OUT PHANDLE KeyHandle
,
6960 IN ACCESS_MASK DesiredAccess
,
6961 IN POBJECT_ATTRIBUTES ObjectAttributes
,
6962 IN ULONG TitleIndex
,
6963 IN PUNICODE_STRING Class OPTIONAL
,
6964 IN ULONG CreateOptions
,
6965 OUT PULONG Disposition OPTIONAL
);
6971 OUT PHANDLE TimerHandle
,
6972 IN ACCESS_MASK DesiredAccess
,
6973 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
6974 IN TIMER_TYPE TimerType
);
6980 IN HANDLE KeyHandle
);
6986 IN HANDLE KeyHandle
,
6987 IN PUNICODE_STRING ValueName
);
6992 NtDeviceIoControlFile(
6993 IN HANDLE DeviceHandle
,
6994 IN HANDLE Event OPTIONAL
,
6995 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
6996 IN PVOID UserApcContext OPTIONAL
,
6997 OUT PIO_STATUS_BLOCK IoStatusBlock
,
6998 IN ULONG IoControlCode
,
6999 IN PVOID InputBuffer
,
7000 IN ULONG InputBufferSize
,
7001 OUT PVOID OutputBuffer
,
7002 IN ULONG OutputBufferSize
);
7007 ZwDeviceIoControlFile(
7008 IN HANDLE DeviceHandle
,
7009 IN HANDLE Event OPTIONAL
,
7010 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
7011 IN PVOID UserApcContext OPTIONAL
,
7012 OUT PIO_STATUS_BLOCK IoStatusBlock
,
7013 IN ULONG IoControlCode
,
7014 IN PVOID InputBuffer
,
7015 IN ULONG InputBufferSize
,
7016 OUT PVOID OutputBuffer
,
7017 IN ULONG OutputBufferSize
);
7023 IN HANDLE KeyHandle
,
7025 IN KEY_INFORMATION_CLASS KeyInformationClass
,
7026 OUT PVOID KeyInformation
,
7028 OUT PULONG ResultLength
);
7033 ZwEnumerateValueKey(
7034 IN HANDLE KeyHandle
,
7036 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
7037 OUT PVOID KeyValueInformation
,
7039 OUT PULONG ResultLength
);
7045 IN HANDLE KeyHandle
);
7050 ZwMakeTemporaryObject(
7057 IN HANDLE SectionHandle
,
7058 IN HANDLE ProcessHandle
,
7059 IN OUT PVOID
*BaseAddress
,
7060 IN ULONG_PTR ZeroBits
,
7061 IN SIZE_T CommitSize
,
7062 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
7063 IN OUT PSIZE_T ViewSize
,
7064 IN SECTION_INHERIT InheritDisposition
,
7065 IN ULONG AllocationType
,
7072 IN HANDLE SectionHandle
,
7073 IN HANDLE ProcessHandle
,
7074 IN OUT PVOID
*BaseAddress
,
7075 IN ULONG_PTR ZeroBits
,
7076 IN SIZE_T CommitSize
,
7077 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
7078 IN OUT PSIZE_T ViewSize
,
7079 IN SECTION_INHERIT InheritDisposition
,
7080 IN ULONG AllocationType
,
7087 OUT PHANDLE FileHandle
,
7088 IN ACCESS_MASK DesiredAccess
,
7089 IN POBJECT_ATTRIBUTES ObjectAttributes
,
7090 OUT PIO_STATUS_BLOCK IoStatusBlock
,
7091 IN ULONG ShareAccess
,
7092 IN ULONG OpenOptions
);
7098 OUT PHANDLE FileHandle
,
7099 IN ACCESS_MASK DesiredAccess
,
7100 IN POBJECT_ATTRIBUTES ObjectAttributes
,
7101 OUT PIO_STATUS_BLOCK IoStatusBlock
,
7102 IN ULONG ShareAccess
,
7103 IN ULONG OpenOptions
);
7109 OUT PHANDLE KeyHandle
,
7110 IN ACCESS_MASK DesiredAccess
,
7111 IN POBJECT_ATTRIBUTES ObjectAttributes
);
7117 OUT PHANDLE SectionHandle
,
7118 IN ACCESS_MASK DesiredAccess
,
7119 IN POBJECT_ATTRIBUTES ObjectAttributes
);
7124 ZwOpenSymbolicLinkObject(
7125 OUT PHANDLE LinkHandle
,
7126 IN ACCESS_MASK DesiredAccess
,
7127 IN POBJECT_ATTRIBUTES ObjectAttributes
);
7133 OUT PHANDLE TimerHandle
,
7134 IN ACCESS_MASK DesiredAccess
,
7135 IN POBJECT_ATTRIBUTES ObjectAttributes
);
7140 ZwQueryInformationFile(
7141 IN HANDLE FileHandle
,
7142 OUT PIO_STATUS_BLOCK IoStatusBlock
,
7143 OUT PVOID FileInformation
,
7145 IN FILE_INFORMATION_CLASS FileInformationClass
);
7151 IN HANDLE KeyHandle
,
7152 IN KEY_INFORMATION_CLASS KeyInformationClass
,
7153 OUT PVOID KeyInformation
,
7155 OUT PULONG ResultLength
);
7160 ZwQuerySymbolicLinkObject(
7161 IN HANDLE LinkHandle
,
7162 IN OUT PUNICODE_STRING LinkTarget
,
7163 OUT PULONG ReturnedLength OPTIONAL
);
7169 IN HANDLE KeyHandle
,
7170 IN PUNICODE_STRING ValueName
,
7171 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
7172 OUT PVOID KeyValueInformation
,
7174 OUT PULONG ResultLength
);
7180 IN HANDLE FileHandle
,
7181 IN HANDLE Event OPTIONAL
,
7182 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
7183 IN PVOID ApcContext OPTIONAL
,
7184 OUT PIO_STATUS_BLOCK IoStatusBlock
,
7187 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
7188 IN PULONG Key OPTIONAL
);
7194 IN HANDLE FileHandle
,
7195 IN HANDLE Event OPTIONAL
,
7196 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
7197 IN PVOID ApcContext OPTIONAL
,
7198 OUT PIO_STATUS_BLOCK IoStatusBlock
,
7201 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
7202 IN PULONG Key OPTIONAL
);
7208 IN HANDLE EventHandle
,
7209 OUT PLONG PreviousState OPTIONAL
);
7215 IN HANDLE EventHandle
,
7216 OUT PLONG PreviousState OPTIONAL
);
7221 ZwSetInformationFile(
7222 IN HANDLE FileHandle
,
7223 OUT PIO_STATUS_BLOCK IoStatusBlock
,
7224 IN PVOID FileInformation
,
7226 IN FILE_INFORMATION_CLASS FileInformationClass
);
7231 ZwSetInformationThread(
7232 IN HANDLE ThreadHandle
,
7233 IN THREADINFOCLASS ThreadInformationClass
,
7234 IN PVOID ThreadInformation
,
7235 IN ULONG ThreadInformationLength
);
7241 IN HANDLE TimerHandle
,
7242 IN PLARGE_INTEGER DueTime
,
7243 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
7244 IN PVOID TimerContext OPTIONAL
,
7245 IN BOOLEAN WakeTimer
,
7246 IN LONG Period OPTIONAL
,
7247 OUT PBOOLEAN PreviousState OPTIONAL
);
7253 IN HANDLE KeyHandle
,
7254 IN PUNICODE_STRING ValueName
,
7255 IN ULONG TitleIndex OPTIONAL
,
7260 /* [Nt|Zw]MapViewOfSection.InheritDisposition constants */
7261 #define AT_EXTENDABLE_FILE 0x00002000
7262 #define AT_RESERVED 0x20000000
7263 #define AT_ROUND_TO_PAGE 0x40000000
7268 NtUnmapViewOfSection(
7269 IN HANDLE ProcessHandle
,
7270 IN PVOID BaseAddress
);
7275 ZwUnmapViewOfSection(
7276 IN HANDLE ProcessHandle
,
7277 IN PVOID BaseAddress
);
7282 NtWaitForSingleObject(
7283 IN HANDLE ObjectHandle
,
7284 IN BOOLEAN Alertable
,
7285 IN PLARGE_INTEGER TimeOut OPTIONAL
);
7290 ZwWaitForSingleObject(
7291 IN HANDLE ObjectHandle
,
7292 IN BOOLEAN Alertable
,
7293 IN PLARGE_INTEGER TimeOut OPTIONAL
);
7299 IN HANDLE FileHandle
,
7300 IN HANDLE Event OPTIONAL
,
7301 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
7302 IN PVOID ApcContext OPTIONAL
,
7303 OUT PIO_STATUS_BLOCK IoStatusBlock
,
7306 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
7307 IN PULONG Key OPTIONAL
);
7313 IN HANDLE FileHandle
,
7314 IN HANDLE Event OPTIONAL
,
7315 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
7316 IN PVOID ApcContext OPTIONAL
,
7317 OUT PIO_STATUS_BLOCK IoStatusBlock
,
7320 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
7321 IN PULONG Key OPTIONAL
);
7325 /** Power management support routines **/
7331 IN PDEVICE_OBJECT DeviceObject
,
7337 PoRegisterDeviceForIdleDetection(
7338 IN PDEVICE_OBJECT DeviceObject
,
7339 IN ULONG ConservationIdleTime
,
7340 IN ULONG PerformanceIdleTime
,
7341 IN DEVICE_POWER_STATE State
);
7346 PoRegisterSystemState(
7347 IN PVOID StateHandle
,
7348 IN EXECUTION_STATE Flags
);
7354 IN PDEVICE_OBJECT DeviceObject
,
7355 IN UCHAR MinorFunction
,
7356 IN POWER_STATE PowerState
,
7357 IN PREQUEST_POWER_COMPLETE CompletionFunction
,
7359 OUT PIRP
*Irp OPTIONAL
);
7364 PoRequestShutdownEvent(
7371 PULONG IdlePointer
);
7373 #define PoSetDeviceBusy(IdlePointer) \
7374 ((void)(*(IdlePointer) = 0))
7380 IN PDEVICE_OBJECT DeviceObject
,
7381 IN POWER_STATE_TYPE Type
,
7382 IN POWER_STATE State
);
7388 IN EXECUTION_STATE Flags
);
7393 PoStartNextPowerIrp(
7399 PoUnregisterSystemState(
7400 IN PVOID StateHandle
);
7404 /** WMI library support routines **/
7409 IN PDEVICE_OBJECT DeviceObject
,
7412 IN ULONG BufferUsed
,
7413 IN CCHAR PriorityBoost
);
7418 IN PDEVICE_OBJECT DeviceObject
,
7420 IN ULONG InstanceIndex
,
7421 IN ULONG EventDataSize
,
7422 IN PVOID EventData
);
7427 WmiQueryTraceInformation(
7428 IN TRACE_INFORMATION_CLASS TraceInformationClass
,
7429 OUT PVOID TraceInformation
,
7430 IN ULONG TraceInformationLength
,
7431 OUT PULONG RequiredLength OPTIONAL
,
7432 IN PVOID Buffer OPTIONAL
);
7437 IN PWMILIB_CONTEXT WmiLibInfo
,
7438 IN PDEVICE_OBJECT DeviceObject
,
7440 OUT PSYSCTL_IRP_DISPOSITION IrpDisposition
);
7446 IN TRACEHANDLE LoggerHandle
,
7447 IN ULONG MessageFlags
,
7448 IN LPGUID MessageGuid
,
7449 IN USHORT MessageNumber
,
7453 /* FIXME: Get va_list from where? */
7458 IN TRACEHANDLE LoggerHandle
,
7459 IN ULONG MessageFlags
,
7460 IN LPGUID MessageGuid
,
7461 IN USHORT MessageNumber
,
7462 IN
va_list MessageArgList
);
7466 /** Kernel debugger routines **/
7483 KdRefreshDebuggerNotPresent(
7487 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
7492 IN KD_OPTION Option
,
7493 IN ULONG InBufferBytes OPTIONAL
,
7495 IN ULONG OutBufferBytes OPTIONAL
,
7496 OUT PVOID OutBuffer
,
7497 OUT PULONG OutBufferNeeded OPTIONAL
);
7508 DbgBreakPointWithStatus(
7521 IN ULONG ComponentId
,
7529 IN ULONG ComponentId
,
7536 vDbgPrintExWithPrefix(
7538 IN ULONG ComponentId
,
7546 DbgPrintReturnControlC(
7555 IN ULONG MaximumResponseLength
7561 DbgQueryDebugFilterState(
7562 IN ULONG ComponentId
,
7568 DbgSetDebugFilterState(
7569 IN ULONG ComponentId
,
7575 #define KdPrint(_x_) DbgPrint _x_
7576 #define KdPrintEx(_x_) DbgPrintEx _x_
7577 #define KdBreakPoint() DbgBreakPoint()
7578 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
7582 #define KdPrint(_x_)
7583 #define KdPrintEx(_x_)
7584 #define KdBreakPoint()
7585 #define KdBreakPointWithStatus(s)
7589 #if defined(__GNUC__)
7591 extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent
;
7592 extern NTKERNELAPI BOOLEAN KdDebuggerEnabled
;
7593 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
7594 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
7596 #elif defined(_NTDDK_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
7598 extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent
;
7599 extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled
;
7600 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
7601 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
7605 extern BOOLEAN KdDebuggerNotPresent
;
7606 extern BOOLEAN KdDebuggerEnabled
;
7607 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
7608 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
7612 /** Stuff from winnt4.h */
7614 #ifndef DMA_MACROS_DEFINED
7616 #if (NTDDI_VERSION >= NTDDI_WIN2K)
7618 //DECLSPEC_DEPRECATED_DDK
7622 IoFlushAdapterBuffers(
7623 IN PADAPTER_OBJECT AdapterObject
,
7625 IN PVOID MapRegisterBase
,
7628 IN BOOLEAN WriteToDevice
);
7630 //DECLSPEC_DEPRECATED_DDK
7634 IoFreeAdapterChannel(
7635 IN PADAPTER_OBJECT AdapterObject
);
7637 //DECLSPEC_DEPRECATED_DDK
7642 IN PADAPTER_OBJECT AdapterObject
,
7643 IN PVOID MapRegisterBase
,
7644 IN ULONG NumberOfMapRegisters
);
7646 //DECLSPEC_DEPRECATED_DDK
7651 IN PADAPTER_OBJECT AdapterObject
,
7653 IN PVOID MapRegisterBase
,
7655 IN OUT PULONG Length
,
7656 IN BOOLEAN WriteToDevice
);
7659 #endif // (NTDDI_VERSION >= NTDDI_WIN2K)
7660 #endif // !defined(DMA_MACROS_DEFINED)
7666 IN PUNICODE_STRING RegistryPath
,
7667 IN PUNICODE_STRING DriverClassName OPTIONAL
,
7668 IN PDRIVER_OBJECT DriverObject
,
7669 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
7670 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources
,
7671 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
7676 IoAttachDeviceByPointer(
7677 IN PDEVICE_OBJECT SourceDevice
,
7678 IN PDEVICE_OBJECT TargetDevice
);
7683 MmIsNonPagedSystemAddressValid(
7684 IN PVOID VirtualAddress
);
7686 #if defined(_AMD64_) || defined(_IA64_)
7687 //DECLSPEC_DEPRECATED_DDK_WINXP
7691 RtlLargeIntegerDivide(
7692 IN LARGE_INTEGER Dividend
,
7693 IN LARGE_INTEGER Divisor
,
7694 IN OUT PLARGE_INTEGER Remainder
)
7697 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
7699 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
7706 RtlLargeIntegerDivide(
7707 IN LARGE_INTEGER Dividend
,
7708 IN LARGE_INTEGER Divisor
,
7709 IN OUT PLARGE_INTEGER Remainder
);
7715 ExInterlockedDecrementLong(
7717 IN PKSPIN_LOCK Lock
);
7722 ExInterlockedExchangeUlong(
7725 IN PKSPIN_LOCK Lock
);
7730 ExInterlockedIncrementLong(
7732 IN PKSPIN_LOCK Lock
);
7737 HalAcquireDisplayOwnership(
7738 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
7743 HalAllocateAdapterChannel(
7744 IN PADAPTER_OBJECT AdapterObject
,
7745 IN PWAIT_CONTEXT_BLOCK Wcb
,
7746 IN ULONG NumberOfMapRegisters
,
7747 IN PDRIVER_CONTROL ExecutionRoutine
);
7752 HalAllocateCommonBuffer(
7753 IN PADAPTER_OBJECT AdapterObject
,
7755 OUT PPHYSICAL_ADDRESS LogicalAddress
,
7756 IN BOOLEAN CacheEnabled
);
7761 HalAssignSlotResources(
7762 IN PUNICODE_STRING RegistryPath
,
7763 IN PUNICODE_STRING DriverClassName
,
7764 IN PDRIVER_OBJECT DriverObject
,
7765 IN PDEVICE_OBJECT DeviceObject
,
7766 IN INTERFACE_TYPE BusType
,
7768 IN ULONG SlotNumber
,
7769 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
7774 HalFreeCommonBuffer(
7775 IN PADAPTER_OBJECT AdapterObject
,
7777 IN PHYSICAL_ADDRESS LogicalAddress
,
7778 IN PVOID VirtualAddress
,
7779 IN BOOLEAN CacheEnabled
);
7785 IN PDEVICE_DESCRIPTION DeviceDescription
,
7786 IN OUT PULONG NumberOfMapRegisters
);
7792 IN BUS_DATA_TYPE BusDataType
,
7794 IN ULONG SlotNumber
,
7801 HalGetBusDataByOffset(
7802 IN BUS_DATA_TYPE BusDataType
,
7804 IN ULONG SlotNumber
,
7812 HalGetDmaAlignmentRequirement(
7818 HalGetInterruptVector(
7819 IN INTERFACE_TYPE InterfaceType
,
7821 IN ULONG BusInterruptLevel
,
7822 IN ULONG BusInterruptVector
,
7824 OUT PKAFFINITY Affinity
);
7830 IN PADAPTER_OBJECT AdapterObject
);
7836 IN BUS_DATA_TYPE BusDataType
,
7838 IN ULONG SlotNumber
,
7845 HalSetBusDataByOffset(
7846 IN BUS_DATA_TYPE BusDataType
,
7848 IN ULONG SlotNumber
,
7856 HalTranslateBusAddress(
7857 IN INTERFACE_TYPE InterfaceType
,
7859 IN PHYSICAL_ADDRESS BusAddress
,
7860 IN OUT PULONG AddressSpace
,
7861 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
7866 RtlLargeIntegerEqualToZero(
7867 IN LARGE_INTEGER Operand
);
7872 RtlLargeIntegerGreaterOrEqualToZero(
7873 IN LARGE_INTEGER Operand
);
7878 RtlLargeIntegerGreaterThan(
7879 IN LARGE_INTEGER Operand1
,
7880 IN LARGE_INTEGER Operand2
);
7885 RtlLargeIntegerGreaterThanOrEqualTo(
7886 IN LARGE_INTEGER Operand1
,
7887 IN LARGE_INTEGER Operand2
);
7892 RtlLargeIntegerGreaterThanZero(
7893 IN LARGE_INTEGER Operand
);
7898 RtlLargeIntegerLessOrEqualToZero(
7899 IN LARGE_INTEGER Operand
);
7904 RtlLargeIntegerLessThan(
7905 IN LARGE_INTEGER Operand1
,
7906 IN LARGE_INTEGER Operand2
);
7911 RtlLargeIntegerLessThanOrEqualTo(
7912 IN LARGE_INTEGER Operand1
,
7913 IN LARGE_INTEGER Operand2
);
7918 RtlLargeIntegerLessThanZero(
7919 IN LARGE_INTEGER Operand
);
7924 RtlLargeIntegerNegate(
7925 IN LARGE_INTEGER Subtrahend
);
7930 RtlLargeIntegerNotEqualTo(
7931 IN LARGE_INTEGER Operand1
,
7932 IN LARGE_INTEGER Operand2
);
7937 RtlLargeIntegerNotEqualToZero(
7938 IN LARGE_INTEGER Operand
);
7943 RtlLargeIntegerShiftLeft(
7944 IN LARGE_INTEGER LargeInteger
,
7945 IN CCHAR ShiftCount
);
7950 RtlLargeIntegerShiftRight(
7951 IN LARGE_INTEGER LargeInteger
,
7952 IN CCHAR ShiftCount
);
7957 RtlLargeIntegerSubtract(
7958 IN LARGE_INTEGER Minuend
,
7959 IN LARGE_INTEGER Subtrahend
);
7964 * COMPUTE_PAGES_SPANNED(
7968 #define COMPUTE_PAGES_SPANNED(Va, \
7970 (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
7974 ** Architecture specific structures
7982 Exfi386InterlockedIncrementLong(
7988 Exfi386InterlockedDecrementLong(
7994 Exfi386InterlockedExchangeUlong(
7998 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
7999 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
8000 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
8006 // NT-ARM is not documented
8015 #endif /* __WINDDK_H */