4 * Windows Device Driver Kit
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
26 /* Helper macro to enable gcc's extension. */
27 #ifndef __GNU_EXTENSION
29 #define __GNU_EXTENSION __extension__
31 #define __GNU_EXTENSION
45 /* Pseudo modifiers for parameters */
61 #define RESTRICTED_POINTER
63 #define DECLSPEC_ADDRSAFE
65 #ifdef NONAMELESSUNION
66 # define _DDK_DUMMYUNION_MEMBER(name) DUMMYUNIONNAME.name
67 # define _DDK_DUMMYUNION_N_MEMBER(n, name) DUMMYUNIONNAME##n.name
69 # define _DDK_DUMMYUNION_MEMBER(name) name
70 # define _DDK_DUMMYUNION_N_MEMBER(n, name) name
74 ** Forward declarations
80 struct _DRIVE_LAYOUT_INFORMATION_EX
;
81 struct _LOADER_PARAMETER_BLOCK
;
85 /* FIXME: Unknown definitions */
86 struct _SET_PARTITION_INFORMATION_EX
;
87 typedef ULONG WAIT_TYPE
;
90 typedef HANDLE TRACEHANDLE
;
91 typedef PVOID PWMILIB_CONTEXT
;
92 typedef ULONG LOGICAL
;
96 ** WmiLib specific structure
100 IrpProcessed
, // Irp was processed and possibly completed
101 IrpNotCompleted
, // Irp was process and NOT completed
102 IrpNotWmi
, // Irp is not a WMI irp
103 IrpForward
// Irp is wmi irp, but targeted at another device object
104 } SYSCTL_IRP_DISPOSITION
, *PSYSCTL_IRP_DISPOSITION
;
109 struct _COMPRESSED_DATA_INFO
;
111 #define KERNEL_STACK_SIZE 12288
112 #define KERNEL_LARGE_STACK_SIZE 61440
113 #define KERNEL_LARGE_STACK_COMMIT 12288
115 #define EXCEPTION_READ_FAULT 0
116 #define EXCEPTION_WRITE_FAULT 1
117 #define EXCEPTION_EXECUTE_FAULT 8
119 #define DPFLTR_ERROR_LEVEL 0
120 #define DPFLTR_WARNING_LEVEL 1
121 #define DPFLTR_TRACE_LEVEL 2
122 #define DPFLTR_INFO_LEVEL 3
123 #define DPFLTR_MASK 0x80000000
125 typedef enum _DPFLTR_TYPE
127 DPFLTR_SYSTEM_ID
= 0,
132 DPFLTR_CRASHDUMP_ID
= 5,
133 DPFLTR_CDAUDIO_ID
= 6,
135 DPFLTR_CLASSPNP_ID
= 8,
137 DPFLTR_REDBOOK_ID
= 10,
138 DPFLTR_STORPROP_ID
= 11,
139 DPFLTR_SCSIPORT_ID
= 12,
140 DPFLTR_SCSIMINIPORT_ID
= 13,
141 DPFLTR_CONFIG_ID
= 14,
142 DPFLTR_I8042PRT_ID
= 15,
143 DPFLTR_SERMOUSE_ID
= 16,
144 DPFLTR_LSERMOUS_ID
= 17,
145 DPFLTR_KBDHID_ID
= 18,
146 DPFLTR_MOUHID_ID
= 19,
147 DPFLTR_KBDCLASS_ID
= 20,
148 DPFLTR_MOUCLASS_ID
= 21,
149 DPFLTR_TWOTRACK_ID
= 22,
150 DPFLTR_WMILIB_ID
= 23,
153 DPFLTR_HALIA64_ID
= 26,
154 DPFLTR_VIDEO_ID
= 27,
155 DPFLTR_SVCHOST_ID
= 28,
156 DPFLTR_VIDEOPRT_ID
= 29,
157 DPFLTR_TCPIP_ID
= 30,
158 DPFLTR_DMSYNTH_ID
= 31,
159 DPFLTR_NTOSPNP_ID
= 32,
160 DPFLTR_FASTFAT_ID
= 33,
161 DPFLTR_SAMSS_ID
= 34,
162 DPFLTR_PNPMGR_ID
= 35,
163 DPFLTR_NETAPI_ID
= 36,
164 DPFLTR_SCSERVER_ID
= 37,
165 DPFLTR_SCCLIENT_ID
= 38,
166 DPFLTR_SERIAL_ID
= 39,
167 DPFLTR_SERENUM_ID
= 40,
169 DPFLTR_BOOTOK_ID
= 42,
170 DPFLTR_BOOTVRFY_ID
= 43,
171 DPFLTR_RPCPROXY_ID
= 44,
172 DPFLTR_AUTOCHK_ID
= 45,
173 DPFLTR_DCOMSS_ID
= 46,
174 DPFLTR_UNIMODEM_ID
= 47,
176 DPFLTR_FLTMGR_ID
= 49,
177 DPFLTR_WMICORE_ID
= 50,
178 DPFLTR_BURNENG_ID
= 51,
179 DPFLTR_IMAPI_ID
= 52,
181 DPFLTR_FUSION_ID
= 54,
182 DPFLTR_IDLETASK_ID
= 55,
183 DPFLTR_SOFTPCI_ID
= 56,
185 DPFLTR_MCHGR_ID
= 58,
187 DPFLTR_PCIIDE_ID
= 60,
188 DPFLTR_FLOPPY_ID
= 61,
190 DPFLTR_TERMSRV_ID
= 63,
191 DPFLTR_W32TIME_ID
= 64,
192 DPFLTR_PREFETCHER_ID
= 65,
193 DPFLTR_RSFILTER_ID
= 66,
194 DPFLTR_FCPORT_ID
= 67,
197 DPFLTR_DMCONFIG_ID
= 70,
198 DPFLTR_DMADMIN_ID
= 71,
199 DPFLTR_WSOCKTRANSPORT_ID
= 72,
201 DPFLTR_PNPMEM_ID
= 74,
202 DPFLTR_PROCESSOR_ID
= 75,
203 DPFLTR_DMSERVER_ID
= 76,
205 DPFLTR_INFINIBAND_ID
= 78,
206 DPFLTR_IHVDRIVER_ID
= 79,
207 DPFLTR_IHVVIDEO_ID
= 80,
208 DPFLTR_IHVAUDIO_ID
= 81,
209 DPFLTR_IHVNETWORK_ID
= 82,
210 DPFLTR_IHVSTREAMING_ID
= 83,
211 DPFLTR_IHVBUS_ID
= 84,
213 DPFLTR_RTLTHREADPOOL_ID
= 86,
215 DPFLTR_TCPIP6_ID
= 88,
216 DPFLTR_ISAPNP_ID
= 89,
218 DPFLTR_STORPORT_ID
= 91,
219 DPFLTR_STORMINIPORT_ID
= 92,
220 DPFLTR_PRINTSPOOLER_ID
= 93,
222 DPFLTR_VDSBAS_ID
= 95,
223 DPFLTR_VDSDYNDR_ID
= 96,
224 DPFLTR_VDSUTIL_ID
= 97,
225 DPFLTR_DFRGIFC_ID
= 98,
226 DPFLTR_DEFAULT_ID
= 99,
228 DPFLTR_DFSC_ID
= 101,
229 DPFLTR_WOW64_ID
= 102,
233 /* also in winnt.h */
235 #define FILE_COPY_STRUCTURED_STORAGE 0x00000041
236 #define FILE_STRUCTURED_STORAGE 0x00000441
240 #define THREAD_ALERT (0x0004)
242 /* Exported object types */
243 extern POBJECT_TYPE NTSYSAPI ExDesktopObjectType
;
244 extern POBJECT_TYPE NTSYSAPI ExEventObjectType
;
245 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType
;
246 extern POBJECT_TYPE NTSYSAPI ExWindowStationObjectType
;
247 extern ULONG NTSYSAPI IoDeviceHandlerObjectSize
;
248 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType
;
249 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType
;
250 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType
;
251 extern POBJECT_TYPE NTSYSAPI IoFileObjectType
;
252 extern POBJECT_TYPE NTSYSAPI PsThreadType
;
253 extern POBJECT_TYPE NTSYSAPI LpcPortObjectType
;
254 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType
;
255 extern POBJECT_TYPE NTSYSAPI PsProcessType
;
257 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
258 extern volatile CCHAR NTSYSAPI KeNumberProcessors
;
260 #if (NTDDI_VERSION >= NTDDI_WINXP)
261 extern CCHAR NTSYSAPI KeNumberProcessors
;
263 //extern PCCHAR KeNumberProcessors;
264 extern NTSYSAPI CCHAR KeNumberProcessors
; //FIXME: Note to Alex: I won't fix this atm, since I prefer to discuss this with you first.
268 #define MAX_WOW64_SHARED_ENTRIES 16
270 extern volatile KSYSTEM_TIME KeTickCount
;
272 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
273 #define NX_SUPPORT_POLICY_ALWAYSON 1
274 #define NX_SUPPORT_POLICY_OPTIN 2
275 #define NX_SUPPORT_POLICY_OPTOUT 3
277 typedef struct _KUSER_SHARED_DATA
279 ULONG TickCountLowDeprecated
;
280 ULONG TickCountMultiplier
;
281 volatile KSYSTEM_TIME InterruptTime
;
282 volatile KSYSTEM_TIME SystemTime
;
283 volatile KSYSTEM_TIME TimeZoneBias
;
284 USHORT ImageNumberLow
;
285 USHORT ImageNumberHigh
;
286 WCHAR NtSystemRoot
[260];
287 ULONG MaxStackTraceDepth
;
288 ULONG CryptoExponent
;
290 ULONG LargePageMinimum
;
292 NT_PRODUCT_TYPE NtProductType
;
293 BOOLEAN ProductTypeIsValid
;
294 ULONG NtMajorVersion
;
295 ULONG NtMinorVersion
;
296 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
299 volatile ULONG TimeSlip
;
300 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
301 LARGE_INTEGER SystemExpirationDate
;
303 BOOLEAN KdDebuggerEnabled
;
304 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
305 UCHAR NXSupportPolicy
;
307 volatile ULONG ActiveConsoleId
;
308 volatile ULONG DismountCount
;
309 ULONG ComPlusPackage
;
310 ULONG LastSystemRITEventTickCount
;
311 ULONG NumberOfPhysicalPages
;
312 BOOLEAN SafeBootMode
;
315 ULONGLONG TestRetInstruction
;
317 ULONG SystemCallReturn
;
318 ULONGLONG SystemCallPad
[3];
319 __GNU_EXTENSION
union {
320 volatile KSYSTEM_TIME TickCount
;
321 volatile ULONG64 TickCountQuad
;
324 #if (NTDDI_VERSION >= NTDDI_WS03)
325 LONGLONG ConsoleSessionForegroundProcessId
;
326 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
328 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
329 USHORT UserModeGlobalLogger
[8];
330 ULONG HeapTracingPid
[2];
331 ULONG CritSecTracingPid
[2];
332 __GNU_EXTENSION
union
334 ULONG SharedDataFlags
;
335 __GNU_EXTENSION
struct
337 ULONG DbgErrorPortPresent
:1;
338 ULONG DbgElevationEnabled
:1;
339 ULONG DbgVirtEnabled
:1;
340 ULONG DbgInstallerDetectEnabled
:1;
344 ULONG ImageFileExecutionOptions
;
345 KAFFINITY ActiveProcessorAffinity
;
347 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
350 ** IRP function codes
353 #define IRP_MN_QUERY_DIRECTORY 0x01
354 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
356 #define IRP_MN_USER_FS_REQUEST 0x00
357 #define IRP_MN_MOUNT_VOLUME 0x01
358 #define IRP_MN_VERIFY_VOLUME 0x02
359 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
360 #define IRP_MN_TRACK_LINK 0x04
361 #define IRP_MN_KERNEL_CALL 0x04
363 #define IRP_MN_LOCK 0x01
364 #define IRP_MN_UNLOCK_SINGLE 0x02
365 #define IRP_MN_UNLOCK_ALL 0x03
366 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
368 #define IRP_MN_NORMAL 0x00
369 #define IRP_MN_DPC 0x01
370 #define IRP_MN_MDL 0x02
371 #define IRP_MN_COMPLETE 0x04
372 #define IRP_MN_COMPRESSED 0x08
374 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
375 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
376 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
378 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
380 typedef EXCEPTION_DISPOSITION
381 (DDKAPI
*PEXCEPTION_ROUTINE
)(
382 IN
struct _EXCEPTION_RECORD
*ExceptionRecord
,
383 IN PVOID EstablisherFrame
,
384 IN OUT
struct _CONTEXT
*ContextRecord
,
385 IN OUT PVOID DispatcherContext
);
388 (DDKAPI
*PDRIVER_ENTRY
)(
389 IN
struct _DRIVER_OBJECT
*DriverObject
,
390 IN PUNICODE_STRING RegistryPath
);
393 (DDKAPI
*PDRIVER_REINITIALIZE
)(
394 IN
struct _DRIVER_OBJECT
*DriverObject
,
399 (DDKAPI
*PKTRANSFER_ROUTINE
)(
402 #define ASSERT_GATE(object) \
403 ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
404 (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
406 #define TIMER_TABLE_SIZE 512
407 #define TIMER_TABLE_SHIFT 9
409 #define ASSERT_TIMER(E) \
410 ASSERT(((E)->Header.Type == TimerNotificationObject) || \
411 ((E)->Header.Type == TimerSynchronizationObject))
413 #define ASSERT_MUTANT(E) \
414 ASSERT((E)->Header.Type == MutantObject)
416 #define ASSERT_SEMAPHORE(E) \
417 ASSERT((E)->Header.Type == SemaphoreObject)
419 #define ASSERT_EVENT(E) \
420 ASSERT(((E)->Header.Type == NotificationEvent) || \
421 ((E)->Header.Type == SynchronizationEvent))
424 typedef enum _TIMER_TYPE
{
429 #define KEYBOARD_INSERT_ON 0x08
430 #define KEYBOARD_CAPS_LOCK_ON 0x04
431 #define KEYBOARD_NUM_LOCK_ON 0x02
432 #define KEYBOARD_SCROLL_LOCK_ON 0x01
433 #define KEYBOARD_ALT_KEY_DOWN 0x80
434 #define KEYBOARD_CTRL_KEY_DOWN 0x40
435 #define KEYBOARD_LEFT_SHIFT_DOWN 0x20
436 #define KEYBOARD_RIGHT_SHIFT_DOWN 0x10
438 typedef struct _IO_COUNTERS
{
439 ULONGLONG ReadOperationCount
;
440 ULONGLONG WriteOperationCount
;
441 ULONGLONG OtherOperationCount
;
442 ULONGLONG ReadTransferCount
;
443 ULONGLONG WriteTransferCount
;
444 ULONGLONG OtherTransferCount
;
445 } IO_COUNTERS
, *PIO_COUNTERS
;
447 typedef struct _VM_COUNTERS
449 SIZE_T PeakVirtualSize
;
451 ULONG PageFaultCount
;
452 SIZE_T PeakWorkingSetSize
;
453 SIZE_T WorkingSetSize
;
454 SIZE_T QuotaPeakPagedPoolUsage
;
455 SIZE_T QuotaPagedPoolUsage
;
456 SIZE_T QuotaPeakNonPagedPoolUsage
;
457 SIZE_T QuotaNonPagedPoolUsage
;
458 SIZE_T PagefileUsage
;
459 SIZE_T PeakPagefileUsage
;
460 } VM_COUNTERS
, *PVM_COUNTERS
;
462 typedef struct _VM_COUNTERS_EX
464 SIZE_T PeakVirtualSize
;
466 ULONG PageFaultCount
;
467 SIZE_T PeakWorkingSetSize
;
468 SIZE_T WorkingSetSize
;
469 SIZE_T QuotaPeakPagedPoolUsage
;
470 SIZE_T QuotaPagedPoolUsage
;
471 SIZE_T QuotaPeakNonPagedPoolUsage
;
472 SIZE_T QuotaNonPagedPoolUsage
;
473 SIZE_T PagefileUsage
;
474 SIZE_T PeakPagefileUsage
;
476 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
478 typedef struct _POOLED_USAGE_AND_LIMITS
480 SIZE_T PeakPagedPoolUsage
;
481 SIZE_T PagedPoolUsage
;
482 SIZE_T PagedPoolLimit
;
483 SIZE_T PeakNonPagedPoolUsage
;
484 SIZE_T NonPagedPoolUsage
;
485 SIZE_T NonPagedPoolLimit
;
486 SIZE_T PeakPagefileUsage
;
487 SIZE_T PagefileUsage
;
488 SIZE_T PagefileLimit
;
489 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
491 typedef struct _CONTROLLER_OBJECT
{
494 PVOID ControllerExtension
;
495 KDEVICE_QUEUE DeviceWaitQueue
;
497 LARGE_INTEGER Spare2
;
498 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
500 /* DEVICE_OBJECT.Flags */
502 #define DO_DEVICE_HAS_NAME 0x00000040
503 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
504 #define DO_LONG_TERM_REQUESTS 0x00000200
505 #define DO_NEVER_LAST_DEVICE 0x00000400
506 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
507 #define DO_XIP 0x00020000
509 #define DRVO_REINIT_REGISTERED 0x00000008
510 #define DRVO_INITIALIZED 0x00000010
511 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
512 #define DRVO_LEGACY_RESOURCES 0x00000040
514 typedef enum _ARBITER_REQUEST_SOURCE
{
515 ArbiterRequestUndefined
= -1,
516 ArbiterRequestLegacyReported
,
517 ArbiterRequestHalReported
,
518 ArbiterRequestLegacyAssigned
,
519 ArbiterRequestPnpDetected
,
520 ArbiterRequestPnpEnumerated
521 } ARBITER_REQUEST_SOURCE
;
523 typedef enum _ARBITER_RESULT
{
524 ArbiterResultUndefined
= -1,
525 ArbiterResultSuccess
,
526 ArbiterResultExternalConflict
,
527 ArbiterResultNullRequest
530 typedef enum _ARBITER_ACTION
{
531 ArbiterActionTestAllocation
,
532 ArbiterActionRetestAllocation
,
533 ArbiterActionCommitAllocation
,
534 ArbiterActionRollbackAllocation
,
535 ArbiterActionQueryAllocatedResources
,
536 ArbiterActionWriteReservedResources
,
537 ArbiterActionQueryConflict
,
538 ArbiterActionQueryArbitrate
,
539 ArbiterActionAddReserved
,
540 ArbiterActionBootAllocation
541 } ARBITER_ACTION
, *PARBITER_ACTION
;
543 typedef struct _ARBITER_CONFLICT_INFO
{
544 PDEVICE_OBJECT OwningObject
;
547 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
549 typedef struct _ARBITER_PARAMETERS
{
552 IN OUT PLIST_ENTRY ArbitrationList
;
553 IN ULONG AllocateFromCount
;
554 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
558 IN OUT PLIST_ENTRY ArbitrationList
;
559 IN ULONG AllocateFromCount
;
560 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
564 IN OUT PLIST_ENTRY ArbitrationList
;
568 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
569 } QueryAllocatedResources
;
572 IN PDEVICE_OBJECT PhysicalDeviceObject
;
573 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
574 OUT PULONG ConflictCount
;
575 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
579 IN PLIST_ENTRY ArbitrationList
;
583 IN PDEVICE_OBJECT ReserveDevice
;
586 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
588 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
590 typedef struct _ARBITER_LIST_ENTRY
{
591 LIST_ENTRY ListEntry
;
592 ULONG AlternativeCount
;
593 PIO_RESOURCE_DESCRIPTOR Alternatives
;
594 PDEVICE_OBJECT PhysicalDeviceObject
;
595 ARBITER_REQUEST_SOURCE RequestSource
;
598 INTERFACE_TYPE InterfaceType
;
601 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
602 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
603 ARBITER_RESULT Result
;
604 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
607 (DDKAPI
*PARBITER_HANDLER
)(
609 IN ARBITER_ACTION Action
,
610 IN OUT PARBITER_PARAMETERS Parameters
);
612 #define ARBITER_PARTIAL 0x00000001
614 typedef struct _ARBITER_INTERFACE
{
618 PINTERFACE_REFERENCE InterfaceReference
;
619 PINTERFACE_DEREFERENCE InterfaceDereference
;
620 PARBITER_HANDLER ArbiterHandler
;
622 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
624 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
625 HalInstalledBusInformation
,
626 HalProfileSourceInformation
,
627 HalInformationClassUnused1
,
629 HalProcessorSpeedInformation
,
630 HalCallbackInformation
,
631 HalMapRegisterInformation
,
632 HalMcaLogInformation
,
633 HalFrameBufferCachingInformation
,
634 HalDisplayBiosInformation
,
635 HalProcessorFeatureInformation
,
636 HalNumaTopologyInterface
,
638 HalCmcLogInformation
,
639 HalCpeLogInformation
,
640 HalQueryMcaInterface
,
641 HalQueryAMLIIllegalIOPortAddresses
,
642 HalQueryMaxHotPlugMemoryAddress
,
643 HalPartitionIpiInterface
,
644 HalPlatformInformation
,
645 HalQueryProfileSourceList
646 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
648 typedef enum _HAL_SET_INFORMATION_CLASS
{
649 HalProfileSourceInterval
,
650 HalProfileSourceInterruptHandler
,
651 HalMcaRegisterDriver
,
652 HalKernelErrorHandler
,
653 HalCmcRegisterDriver
,
654 HalCpeRegisterDriver
,
658 HalGenerateCmcInterrupt
659 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
661 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
663 KPROFILE_SOURCE Source
;
665 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
667 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
669 KPROFILE_SOURCE Source
;
672 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
674 typedef struct _MAP_REGISTER_ENTRY
677 BOOLEAN WriteToDevice
;
678 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
685 PUCHAR TranslatedAddress
;
687 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
691 PHYSICAL_ADDRESS Start
;
692 PHYSICAL_ADDRESS MaxEnd
;
693 PVOID VirtualAddress
;
697 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
709 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
710 DEBUG_MEMORY_REQUIREMENTS Memory
;
711 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
713 /* Function Type Defintions for Dispatch Functions */
714 struct _DEVICE_CONTROL_CONTEXT
;
717 (DDKAPI
*PDEVICE_CONTROL_COMPLETION
)(
718 IN
struct _DEVICE_CONTROL_CONTEXT
*ControlContext
);
720 typedef struct _DEVICE_CONTROL_CONTEXT
{
722 PDEVICE_HANDLER_OBJECT DeviceHandler
;
723 PDEVICE_OBJECT DeviceObject
;
728 } DEVICE_CONTROL_CONTEXT
, *PDEVICE_CONTROL_CONTEXT
;
730 typedef struct _PM_DISPATCH_TABLE
{
734 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
736 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
737 TranslateChildToParent
,
738 TranslateParentToChild
739 } RESOURCE_TRANSLATION_DIRECTION
;
742 (DDKAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
744 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
745 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
746 IN ULONG AlternativesCount
,
747 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
748 IN PDEVICE_OBJECT PhysicalDeviceObject
,
749 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
752 (DDKAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
754 IN PIO_RESOURCE_DESCRIPTOR Source
,
755 IN PDEVICE_OBJECT PhysicalDeviceObject
,
756 OUT PULONG TargetCount
,
757 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
759 typedef struct _TRANSLATOR_INTERFACE
{
763 PINTERFACE_REFERENCE InterfaceReference
;
764 PINTERFACE_DEREFERENCE InterfaceDereference
;
765 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
766 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
767 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
770 (DDKAPI
*pHalDeviceControl
)(
771 IN PDEVICE_HANDLER_OBJECT DeviceHandler
,
772 IN PDEVICE_OBJECT DeviceObject
,
773 IN ULONG ControlCode
,
774 IN OUT PVOID Buffer OPTIONAL
,
775 IN OUT PULONG BufferLength OPTIONAL
,
777 IN PDEVICE_CONTROL_COMPLETION CompletionRoutine
);
780 (FASTCALL
*pHalExamineMBR
)(
781 IN PDEVICE_OBJECT DeviceObject
,
783 IN ULONG MBRTypeIdentifier
,
787 (FASTCALL
*pHalIoAssignDriveLetters
)(
788 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
789 IN PSTRING NtDeviceName
,
790 OUT PUCHAR NtSystemPath
,
791 OUT PSTRING NtSystemPathString
);
794 (FASTCALL
*pHalIoReadPartitionTable
)(
795 IN PDEVICE_OBJECT DeviceObject
,
797 IN BOOLEAN ReturnRecognizedPartitions
,
798 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
801 (FASTCALL
*pHalIoSetPartitionInformation
)(
802 IN PDEVICE_OBJECT DeviceObject
,
804 IN ULONG PartitionNumber
,
805 IN ULONG PartitionType
);
808 (FASTCALL
*pHalIoWritePartitionTable
)(
809 IN PDEVICE_OBJECT DeviceObject
,
811 IN ULONG SectorsPerTrack
,
812 IN ULONG NumberOfHeads
,
813 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
816 (FASTCALL
*pHalHandlerForBus
)(
817 IN INTERFACE_TYPE InterfaceType
,
821 (FASTCALL
*pHalReferenceBusHandler
)(
822 IN PBUS_HANDLER BusHandler
);
825 (DDKAPI
*pHalQuerySystemInformation
)(
826 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
829 OUT PULONG ReturnedLength
);
832 (DDKAPI
*pHalSetSystemInformation
)(
833 IN HAL_SET_INFORMATION_CLASS InformationClass
,
838 (DDKAPI
*pHalQueryBusSlots
)(
839 IN PBUS_HANDLER BusHandler
,
841 OUT PULONG SlotNumbers
,
842 OUT PULONG ReturnedLength
);
845 (DDKAPI
*pHalInitPnpDriver
)(
849 (DDKAPI
*pHalInitPowerManagement
)(
850 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
851 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
853 typedef struct _DMA_ADAPTER
*
854 (DDKAPI
*pHalGetDmaAdapter
)(
856 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
857 OUT PULONG NumberOfMapRegisters
);
860 (DDKAPI
*pHalGetInterruptTranslator
)(
861 IN INTERFACE_TYPE ParentInterfaceType
,
862 IN ULONG ParentBusNumber
,
863 IN INTERFACE_TYPE BridgeInterfaceType
,
866 OUT PTRANSLATOR_INTERFACE Translator
,
867 OUT PULONG BridgeBusNumber
);
870 (DDKAPI
*pHalStartMirroring
)(
874 (DDKAPI
*pHalEndMirroring
)(
875 IN ULONG PassNumber
);
878 (DDKAPI
*pHalMirrorPhysicalMemory
)(
879 IN PHYSICAL_ADDRESS PhysicalAddress
,
880 IN LARGE_INTEGER NumberOfBytes
);
883 (DDKAPI
*pHalMirrorVerify
)(
884 IN PHYSICAL_ADDRESS PhysicalAddress
,
885 IN LARGE_INTEGER NumberOfBytes
);
888 (DDKAPI
*pHalEndOfBoot
)(
893 (DDKAPI
*pHalTranslateBusAddress
)(
894 IN INTERFACE_TYPE InterfaceType
,
896 IN PHYSICAL_ADDRESS BusAddress
,
897 IN OUT PULONG AddressSpace
,
898 OUT PPHYSICAL_ADDRESS TranslatedAddress
903 (DDKAPI
*pHalAssignSlotResources
)(
904 IN PUNICODE_STRING RegistryPath
,
905 IN PUNICODE_STRING DriverClassName OPTIONAL
,
906 IN PDRIVER_OBJECT DriverObject
,
907 IN PDEVICE_OBJECT DeviceObject
,
908 IN INTERFACE_TYPE BusType
,
911 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
916 (DDKAPI
*pHalHaltSystem
)(
922 (DDKAPI
*pHalResetDisplay
)(
928 (DDKAPI
*pHalVectorToIDTEntry
)(
934 (DDKAPI
*pHalFindBusAddressTranslation
)(
935 IN PHYSICAL_ADDRESS BusAddress
,
936 IN OUT PULONG AddressSpace
,
937 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
938 IN OUT PULONG_PTR Context
,
944 (DDKAPI
*pKdSetupPciDeviceForDebugging
)(
945 IN PVOID LoaderBlock OPTIONAL
,
946 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
951 (DDKAPI
*pKdReleasePciDeviceForDebugging
)(
952 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
957 (DDKAPI
*pKdGetAcpiTablePhase0
)(
958 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
964 (DDKAPI
*pKdCheckPowerButton
)(
970 (DDKAPI
*pHalGetInterruptVector
)(
971 IN INTERFACE_TYPE InterfaceType
,
973 IN ULONG BusInterruptLevel
,
974 IN ULONG BusInterruptVector
,
976 OUT PKAFFINITY Affinity
981 (DDKAPI
*pHalGetVectorInput
)(
983 IN KAFFINITY Affinity
,
985 OUT PKINTERRUPT_POLARITY Polarity
990 (DDKAPI
*pKdMapPhysicalMemory64
)(
991 IN PHYSICAL_ADDRESS PhysicalAddress
,
997 (DDKAPI
*pKdUnmapVirtualAddress
)(
998 IN PVOID VirtualAddress
,
1004 (DDKAPI
*pKdGetPciDataByOffset
)(
1006 IN ULONG SlotNumber
,
1014 (DDKAPI
*pKdSetPciDataByOffset
)(
1016 IN ULONG SlotNumber
,
1023 (DDKAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
1024 ULONG Columns
, ULONG Rows
);
1028 pHalQuerySystemInformation HalQuerySystemInformation
;
1029 pHalSetSystemInformation HalSetSystemInformation
;
1030 pHalQueryBusSlots HalQueryBusSlots
;
1032 pHalExamineMBR HalExamineMBR
;
1033 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
1034 pHalIoReadPartitionTable HalIoReadPartitionTable
;
1035 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
1036 pHalIoWritePartitionTable HalIoWritePartitionTable
;
1037 pHalHandlerForBus HalReferenceHandlerForBus
;
1038 pHalReferenceBusHandler HalReferenceBusHandler
;
1039 pHalReferenceBusHandler HalDereferenceBusHandler
;
1040 pHalInitPnpDriver HalInitPnpDriver
;
1041 pHalInitPowerManagement HalInitPowerManagement
;
1042 pHalGetDmaAdapter HalGetDmaAdapter
;
1043 pHalGetInterruptTranslator HalGetInterruptTranslator
;
1044 pHalStartMirroring HalStartMirroring
;
1045 pHalEndMirroring HalEndMirroring
;
1046 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
1047 pHalEndOfBoot HalEndOfBoot
;
1048 pHalMirrorVerify HalMirrorVerify
;
1049 } HAL_DISPATCH
, *PHAL_DISPATCH
;
1051 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTHAL_)
1052 extern NTSYSAPI PHAL_DISPATCH HalDispatchTable
;
1053 #define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable)
1055 extern __declspec(dllexport
) HAL_DISPATCH HalDispatchTable
;
1056 #define HALDISPATCH (&HalDispatchTable)
1059 #define HAL_DISPATCH_VERSION 3
1060 #define HalDispatchTableVersion HALDISPATCH->Version
1061 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
1062 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
1063 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
1064 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
1065 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
1066 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
1067 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
1068 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
1069 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
1070 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
1071 #define HalStartMirroring HALDISPATCH->HalStartMirroring
1072 #define HalEndMirroring HALDISPATCH->HalEndMirroring
1073 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
1074 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
1075 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
1077 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1078 ULONG AlignmentRequirement
;
1079 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1081 typedef struct _FILE_NAME_INFORMATION
{
1082 ULONG FileNameLength
;
1084 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1087 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1088 ULONG FileAttributes
;
1090 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1092 typedef struct _FILE_DISPOSITION_INFORMATION
{
1094 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1096 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1097 LARGE_INTEGER EndOfFile
;
1098 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1100 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1101 LARGE_INTEGER ValidDataLength
;
1102 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1104 typedef union _FILE_SEGMENT_ELEMENT
{
1106 ULONGLONG Alignment
;
1107 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1109 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
1111 typedef struct _KEY_USER_FLAGS_INFORMATION
{
1113 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
1115 #define PCI_ADDRESS_MEMORY_SPACE 0x00000000
1117 typedef struct _OSVERSIONINFOA
{
1118 ULONG dwOSVersionInfoSize
;
1119 ULONG dwMajorVersion
;
1120 ULONG dwMinorVersion
;
1121 ULONG dwBuildNumber
;
1123 CHAR szCSDVersion
[128];
1124 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
1126 typedef struct _OSVERSIONINFOW
{
1127 ULONG dwOSVersionInfoSize
;
1128 ULONG dwMajorVersion
;
1129 ULONG dwMinorVersion
;
1130 ULONG dwBuildNumber
;
1132 WCHAR szCSDVersion
[128];
1133 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
1136 typedef OSVERSIONINFOW OSVERSIONINFO
;
1137 typedef POSVERSIONINFOW POSVERSIONINFO
;
1138 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
1140 typedef OSVERSIONINFOA OSVERSIONINFO
;
1141 typedef POSVERSIONINFOA POSVERSIONINFO
;
1142 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
1145 typedef struct _OSVERSIONINFOEXA
{
1146 ULONG dwOSVersionInfoSize
;
1147 ULONG dwMajorVersion
;
1148 ULONG dwMinorVersion
;
1149 ULONG dwBuildNumber
;
1151 CHAR szCSDVersion
[128];
1152 USHORT wServicePackMajor
;
1153 USHORT wServicePackMinor
;
1157 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
1159 typedef struct _OSVERSIONINFOEXW
{
1160 ULONG dwOSVersionInfoSize
;
1161 ULONG dwMajorVersion
;
1162 ULONG dwMinorVersion
;
1163 ULONG dwBuildNumber
;
1165 WCHAR szCSDVersion
[128];
1166 USHORT wServicePackMajor
;
1167 USHORT wServicePackMinor
;
1171 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
1174 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
1175 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
1176 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
1178 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
1179 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
1180 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
1186 VerSetConditionMask(
1187 IN ULONGLONG ConditionMask
,
1189 IN UCHAR Condition
);
1191 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
1192 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
1193 (TypeBitMask), (ComparisonType)))
1195 /* RtlVerifyVersionInfo() TypeMask */
1197 #define VER_MINORVERSION 0x0000001
1198 #define VER_MAJORVERSION 0x0000002
1199 #define VER_BUILDNUMBER 0x0000004
1200 #define VER_PLATFORMID 0x0000008
1201 #define VER_SERVICEPACKMINOR 0x0000010
1202 #define VER_SERVICEPACKMAJOR 0x0000020
1203 #define VER_SUITENAME 0x0000040
1204 #define VER_PRODUCT_TYPE 0x0000080
1206 /* RtlVerifyVersionInfo() ComparisonType */
1209 #define VER_GREATER 2
1210 #define VER_GREATER_EQUAL 3
1212 #define VER_LESS_EQUAL 5
1216 #define VER_CONDITION_MASK 7
1217 #define VER_NUM_BITS_PER_CONDITION_MASK 3
1222 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
) (
1224 struct _RTL_RANGE
*Range
1227 typedef struct _CONFIGURATION_INFORMATION
{
1232 ULONG ScsiPortCount
;
1234 ULONG ParallelCount
;
1235 BOOLEAN AtDiskPrimaryAddressClaimed
;
1236 BOOLEAN AtDiskSecondaryAddressClaimed
;
1238 ULONG MediumChangerCount
;
1239 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
1241 typedef enum _CONFIGURATION_TYPE
{
1244 FloatingPointProcessor
,
1254 MultiFunctionAdapter
,
1268 FloppyDiskPeripheral
,
1281 RealModeIrqRoutingTable
,
1282 RealModePCIEnumeration
,
1284 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
1287 (DDKAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
1289 IN PUNICODE_STRING PathName
,
1290 IN INTERFACE_TYPE BusType
,
1292 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
1293 IN CONFIGURATION_TYPE ControllerType
,
1294 IN ULONG ControllerNumber
,
1295 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
1296 IN CONFIGURATION_TYPE PeripheralType
,
1297 IN ULONG PeripheralNumber
,
1298 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
1300 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
1301 IoQueryDeviceIdentifier
= 0,
1302 IoQueryDeviceConfigurationData
,
1303 IoQueryDeviceComponentInformation
,
1304 IoQueryDeviceMaxData
1305 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
1308 (DDKAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
1310 IN HANDLE ProcessId
,
1314 (DDKAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
1315 IN HANDLE ProcessId
,
1319 typedef struct _IMAGE_INFO
{
1320 _ANONYMOUS_UNION
union {
1322 _ANONYMOUS_STRUCT
struct {
1323 ULONG ImageAddressingMode
: 8;
1324 ULONG SystemModeImage
: 1;
1325 ULONG ImageMappedToAllPids
: 1;
1326 ULONG Reserved
: 22;
1330 ULONG ImageSelector
;
1332 ULONG ImageSectionNumber
;
1333 } IMAGE_INFO
, *PIMAGE_INFO
;
1335 #define IMAGE_ADDRESSING_MODE_32BIT 3
1338 (DDKAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
1339 IN PUNICODE_STRING FullImageName
,
1340 IN HANDLE ProcessId
,
1341 IN PIMAGE_INFO ImageInfo
);
1343 #pragma pack(push,4)
1344 typedef enum _BUS_DATA_TYPE
{
1345 ConfigurationSpaceUndefined
= -1,
1353 PCMCIAConfiguration
,
1356 PNPISAConfiguration
,
1357 SgiInternalConfiguration
,
1359 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
1362 typedef struct _NT_TIB
{
1363 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
1367 _ANONYMOUS_UNION
union {
1371 PVOID ArbitraryUserPointer
;
1372 struct _NT_TIB
*Self
;
1375 typedef struct _NT_TIB32
{
1376 ULONG ExceptionList
;
1380 __GNU_EXTENSION
union {
1384 ULONG ArbitraryUserPointer
;
1386 } NT_TIB32
,*PNT_TIB32
;
1388 typedef struct _NT_TIB64
{
1389 ULONG64 ExceptionList
;
1392 ULONG64 SubSystemTib
;
1393 __GNU_EXTENSION
union {
1397 ULONG64 ArbitraryUserPointer
;
1399 } NT_TIB64
,*PNT_TIB64
;
1401 typedef enum _PROCESSINFOCLASS
{
1402 ProcessBasicInformation
,
1407 ProcessBasePriority
,
1408 ProcessRaisePriority
,
1410 ProcessExceptionPort
,
1412 ProcessLdtInformation
,
1414 ProcessDefaultHardErrorMode
,
1415 ProcessIoPortHandlers
,
1416 ProcessPooledUsageAndLimits
,
1417 ProcessWorkingSetWatch
,
1418 ProcessUserModeIOPL
,
1419 ProcessEnableAlignmentFaultFixup
,
1420 ProcessPriorityClass
,
1421 ProcessWx86Information
,
1423 ProcessAffinityMask
,
1424 ProcessPriorityBoost
,
1426 ProcessSessionInformation
,
1427 ProcessForegroundInformation
,
1428 ProcessWow64Information
,
1429 ProcessImageFileName
,
1430 ProcessLUIDDeviceMapsEnabled
,
1431 ProcessBreakOnTermination
,
1432 ProcessDebugObjectHandle
,
1434 ProcessHandleTracing
,
1436 ProcessExecuteFlags
,
1437 ProcessTlsInformation
,
1439 ProcessImageInformation
,
1441 ProcessPagePriority
,
1442 ProcessInstrumentationCallback
,
1446 typedef enum _THREADINFOCLASS
{
1447 ThreadBasicInformation
,
1452 ThreadImpersonationToken
,
1453 ThreadDescriptorTableEntry
,
1454 ThreadEnableAlignmentFaultFixup
,
1455 ThreadEventPair_Reusable
,
1456 ThreadQuerySetWin32StartAddress
,
1458 ThreadPerformanceCount
,
1459 ThreadAmILastThread
,
1460 ThreadIdealProcessor
,
1461 ThreadPriorityBoost
,
1462 ThreadSetTlsArrayAddress
,
1464 ThreadHideFromDebugger
,
1465 ThreadBreakOnTermination
,
1466 ThreadSwitchLegacyState
,
1468 ThreadLastSystemCall
,
1472 ThreadActualBasePriority
,
1476 typedef struct _PROCESS_BASIC_INFORMATION
1478 NTSTATUS ExitStatus
;
1479 struct _PEB
*PebBaseAddress
;
1480 ULONG_PTR AffinityMask
;
1481 KPRIORITY BasePriority
;
1482 ULONG_PTR UniqueProcessId
;
1483 ULONG_PTR InheritedFromUniqueProcessId
;
1484 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
1486 typedef struct _PROCESS_WS_WATCH_INFORMATION
1490 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
1492 typedef struct _PROCESS_DEVICEMAP_INFORMATION
1494 __GNU_EXTENSION
union
1498 HANDLE DirectoryHandle
;
1503 UCHAR DriveType
[32];
1506 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
1508 typedef struct _KERNEL_USER_TIMES
1510 LARGE_INTEGER CreateTime
;
1511 LARGE_INTEGER ExitTime
;
1512 LARGE_INTEGER KernelTime
;
1513 LARGE_INTEGER UserTime
;
1514 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1516 typedef struct _PROCESS_ACCESS_TOKEN
1520 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1522 typedef struct _PROCESS_SESSION_INFORMATION
1525 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1528 ** Storage structures
1530 typedef enum _PARTITION_STYLE
{
1531 PARTITION_STYLE_MBR
,
1532 PARTITION_STYLE_GPT
,
1536 typedef struct _CREATE_DISK_MBR
{
1538 } CREATE_DISK_MBR
, *PCREATE_DISK_MBR
;
1540 typedef struct _CREATE_DISK_GPT
{
1542 ULONG MaxPartitionCount
;
1543 } CREATE_DISK_GPT
, *PCREATE_DISK_GPT
;
1545 typedef struct _CREATE_DISK
{
1546 PARTITION_STYLE PartitionStyle
;
1547 _ANONYMOUS_UNION
union {
1548 CREATE_DISK_MBR Mbr
;
1549 CREATE_DISK_GPT Gpt
;
1551 } CREATE_DISK
, *PCREATE_DISK
;
1553 typedef struct _DISK_SIGNATURE
{
1554 ULONG PartitionStyle
;
1555 _ANONYMOUS_UNION
union {
1564 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
1567 (FASTCALL
*PTIME_UPDATE_NOTIFY_ROUTINE
)(
1569 IN KPROCESSOR_MODE Mode
);
1571 typedef struct _PHYSICAL_MEMORY_RANGE
{
1572 PHYSICAL_ADDRESS BaseAddress
;
1573 LARGE_INTEGER NumberOfBytes
;
1574 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
1577 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
1580 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
1581 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
1582 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
1583 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
1585 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1586 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1587 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1588 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1589 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1592 (DDKAPI
*PTIMER_APC_ROUTINE
)(
1593 IN PVOID TimerContext
,
1594 IN ULONG TimerLowValue
,
1595 IN LONG TimerHighValue
);
1598 ** Architecture specific structures
1600 #define PCR_MINOR_VERSION 1
1601 #define PCR_MAJOR_VERSION 1
1605 #define SIZE_OF_80387_REGISTERS 80
1606 #define CONTEXT_i386 0x10000
1607 #define CONTEXT_i486 0x10000
1608 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
1609 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
1610 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
1611 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
1612 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
1613 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
1614 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
1616 typedef struct _FLOATING_SAVE_AREA
{
1621 ULONG ErrorSelector
;
1624 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
1626 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
1628 typedef struct _CONTEXT
{
1636 FLOATING_SAVE_AREA FloatSave
;
1653 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
1656 typedef struct _KPCR_TIB
{
1657 PVOID ExceptionList
; /* 00 */
1658 PVOID StackBase
; /* 04 */
1659 PVOID StackLimit
; /* 08 */
1660 PVOID SubSystemTib
; /* 0C */
1661 _ANONYMOUS_UNION
union {
1662 PVOID FiberData
; /* 10 */
1663 ULONG Version
; /* 10 */
1665 PVOID ArbitraryUserPointer
; /* 14 */
1666 struct _KPCR_TIB
*Self
; /* 18 */
1667 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
1669 typedef struct _KPCR
{
1670 KPCR_TIB Tib
; /* 00 */
1671 struct _KPCR
*Self
; /* 1C */
1672 struct _KPRCB
*Prcb
; /* 20 */
1673 KIRQL Irql
; /* 24 */
1675 ULONG IrrActive
; /* 2C */
1677 PVOID KdVersionBlock
; /* 34 */
1678 PUSHORT IDT
; /* 38 */
1679 PUSHORT GDT
; /* 3C */
1680 struct _KTSS
*TSS
; /* 40 */
1681 USHORT MajorVersion
; /* 44 */
1682 USHORT MinorVersion
; /* 46 */
1683 KAFFINITY SetMember
; /* 48 */
1684 ULONG StallScaleFactor
; /* 4C */
1685 UCHAR SpareUnused
; /* 50 */
1686 UCHAR Number
; /* 51 */
1688 UCHAR SecondLevelCacheAssociativity
;
1690 ULONG KernelReserved
[14]; // For use by the kernel
1691 ULONG SecondLevelCacheSize
;
1692 ULONG HalReserved
[16]; // For use by Hal
1693 } KPCR
, *PKPCR
; /* 54 */
1695 #define KeGetPcr() PCR
1699 KeGetCurrentProcessorNumber(VOID
)
1701 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
1704 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1705 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1706 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
1708 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1709 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1710 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1711 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1712 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
1714 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
1715 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
1717 #elif defined(__x86_64__)
1719 #define CONTEXT_AMD64 0x100000
1720 #if !defined(RC_INVOKED)
1721 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
1722 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
1723 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
1724 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
1725 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
1727 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1728 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1730 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1731 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1732 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1733 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1736 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
1786 /* Floating point */
1788 XMM_SAVE_AREA32 FltSave
;
1812 M128A VectorRegister
[26];
1813 ULONG64 VectorControl
;
1816 ULONG64 DebugControl
;
1817 ULONG64 LastBranchToRip
;
1818 ULONG64 LastBranchFromRip
;
1819 ULONG64 LastExceptionToRip
;
1820 ULONG64 LastExceptionFromRip
;
1823 #define PAGE_SIZE 0x1000
1824 #define PAGE_SHIFT 12L
1825 #define PTI_SHIFT 12L
1826 #define PDI_SHIFT 21L
1827 #define PPI_SHIFT 30L
1828 #define PXI_SHIFT 39L
1829 #define PTE_PER_PAGE 512
1830 #define PDE_PER_PAGE 512
1831 #define PPE_PER_PAGE 512
1832 #define PXE_PER_PAGE 512
1833 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
1834 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
1835 #define PPI_MASK (PPE_PER_PAGE - 1)
1836 #define PXI_MASK (PXE_PER_PAGE - 1)
1838 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
1839 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
1840 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
1841 #define PDE_BASE 0xFFFFF6FB40000000ULL
1842 #define PTE_BASE 0xFFFFF68000000000ULL
1843 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
1844 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
1845 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
1846 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
1848 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1849 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1850 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
1852 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1853 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1854 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1855 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1856 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
1857 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
1859 #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
1860 #define SharedInterruptTime (&SharedUserData->InterruptTime)
1861 #define SharedSystemTime (&SharedUserData->SystemTime)
1862 #define SharedTickCount (&SharedUserData->TickCount)
1864 #define KeQueryInterruptTime() \
1865 (*(volatile ULONG64*)SharedInterruptTime)
1866 #define KeQuerySystemTime(CurrentCount) \
1867 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
1868 #define KeQueryTickCount(CurrentCount) \
1869 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
1871 typedef struct _KPCR
1873 __GNU_EXTENSION
union
1876 __GNU_EXTENSION
struct
1878 union _KGDTENTRY64
*GdtBase
;
1879 struct _KTSS64
*TssBase
;
1882 struct _KPRCB
*CurrentPrcb
;
1883 PKSPIN_LOCK_QUEUE LockArray
;
1887 union _KIDTENTRY64
*IdtBase
;
1890 UCHAR SecondLevelCacheAssociativity
;
1891 UCHAR ObsoleteNumber
;
1894 USHORT MajorVersion
;
1895 USHORT MinorVersion
;
1896 ULONG StallScaleFactor
;
1898 ULONG KernelReserved
[15];
1899 ULONG SecondLevelCacheSize
;
1900 ULONG HalReserved
[16];
1902 PVOID KdVersionBlock
;
1904 ULONG PcrAlign1
[24];
1907 typedef struct _KFLOATING_SAVE
{
1909 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
1915 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
1920 KeGetCurrentProcessorNumber(VOID
)
1922 return (ULONG
)__readgsword(0x184);
1925 #elif defined(__PowerPC__)
1928 // Used to contain PFNs and PFN counts
1930 typedef ULONG PFN_COUNT
;
1931 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
1932 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
1934 #define PASSIVE_LEVEL 0
1937 #define DISPATCH_LEVEL 2
1938 #define PROFILE_LEVEL 27
1939 #define CLOCK1_LEVEL 28
1940 #define CLOCK2_LEVEL 28
1941 #define IPI_LEVEL 29
1942 #define POWER_LEVEL 30
1943 #define HIGH_LEVEL 31
1945 typedef struct _KFLOATING_SAVE
{
1947 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
1949 typedef struct _KPCR_TIB
{
1950 PVOID ExceptionList
; /* 00 */
1951 PVOID StackBase
; /* 04 */
1952 PVOID StackLimit
; /* 08 */
1953 PVOID SubSystemTib
; /* 0C */
1954 _ANONYMOUS_UNION
union {
1955 PVOID FiberData
; /* 10 */
1956 ULONG Version
; /* 10 */
1958 PVOID ArbitraryUserPointer
; /* 14 */
1959 struct _KPCR_TIB
*Self
; /* 18 */
1960 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
1962 #define PCR_MINOR_VERSION 1
1963 #define PCR_MAJOR_VERSION 1
1965 typedef struct _KPCR
{
1966 KPCR_TIB Tib
; /* 00 */
1967 struct _KPCR
*Self
; /* 1C */
1968 struct _KPRCB
*Prcb
; /* 20 */
1969 KIRQL Irql
; /* 24 */
1971 ULONG IrrActive
; /* 2C */
1973 PVOID KdVersionBlock
; /* 34 */
1974 PUSHORT IDT
; /* 38 */
1975 PUSHORT GDT
; /* 3C */
1976 struct _KTSS
*TSS
; /* 40 */
1977 USHORT MajorVersion
; /* 44 */
1978 USHORT MinorVersion
; /* 46 */
1979 KAFFINITY SetMember
; /* 48 */
1980 ULONG StallScaleFactor
; /* 4C */
1981 UCHAR SpareUnused
; /* 50 */
1982 UCHAR Number
; /* 51 */
1983 } KPCR
, *PKPCR
; /* 54 */
1985 #define KeGetPcr() PCR
1990 KeGetCurrentProcessorNumber(VOID
)
1993 __asm__
__volatile__ (
1996 : "i" (FIELD_OFFSET(KPCR
, Number
))
2001 #elif defined(_MIPS_)
2003 #error MIPS Headers are totally incorrect
2006 // Used to contain PFNs and PFN counts
2008 typedef ULONG PFN_COUNT
;
2009 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
2010 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
2012 #define PASSIVE_LEVEL 0
2014 #define DISPATCH_LEVEL 2
2015 #define PROFILE_LEVEL 27
2016 #define IPI_LEVEL 29
2017 #define HIGH_LEVEL 31
2019 typedef struct _KPCR
{
2020 struct _KPRCB
*Prcb
; /* 20 */
2021 KIRQL Irql
; /* 24 */
2026 #define KeGetPcr() PCR
2028 typedef struct _KFLOATING_SAVE
{
2029 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
2034 KeGetCurrentProcessorNumber(VOID
)
2039 #elif defined(_M_ARM)
2042 // NT-ARM is not documented, need DDK-ARM
2047 #error Unknown architecture
2050 typedef enum _INTERLOCKED_RESULT
{
2051 ResultNegative
= RESULT_NEGATIVE
,
2052 ResultZero
= RESULT_ZERO
,
2053 ResultPositive
= RESULT_POSITIVE
2054 } INTERLOCKED_RESULT
;
2057 (NTAPI
*PciPin2Line
)(
2058 IN
struct _BUS_HANDLER
*BusHandler
,
2059 IN
struct _BUS_HANDLER
*RootHandler
,
2060 IN PCI_SLOT_NUMBER SlotNumber
,
2061 IN PPCI_COMMON_CONFIG PciData
2065 (NTAPI
*PciLine2Pin
)(
2066 IN
struct _BUS_HANDLER
*BusHandler
,
2067 IN
struct _BUS_HANDLER
*RootHandler
,
2068 IN PCI_SLOT_NUMBER SlotNumber
,
2069 IN PPCI_COMMON_CONFIG PciNewData
,
2070 IN PPCI_COMMON_CONFIG PciOldData
2074 (NTAPI
*PciReadWriteConfig
)(
2075 IN
struct _BUS_HANDLER
*BusHandler
,
2076 IN PCI_SLOT_NUMBER Slot
,
2082 #define PCI_DATA_TAG ' ICP'
2083 #define PCI_DATA_VERSION 1
2085 typedef struct _PCIBUSDATA
2089 PciReadWriteConfig ReadConfig
;
2090 PciReadWriteConfig WriteConfig
;
2091 PciPin2Line Pin2Line
;
2092 PciLine2Pin Line2Pin
;
2093 PCI_SLOT_NUMBER ParentSlot
;
2095 } PCIBUSDATA
, *PPCIBUSDATA
;
2098 /** SPINLOCK FUNCTIONS ********************************************************/
2102 #if defined(WIN9X_COMPAT_SPINLOCK)
2107 KeInitializeSpinLock(
2108 IN PKSPIN_LOCK SpinLock
2115 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
2117 /* Clear the lock */
2127 IN PKSPIN_LOCK SpinLock
);
2133 IN PKSPIN_LOCK SpinLock
,
2139 KefAcquireSpinLockAtDpcLevel(
2140 IN PKSPIN_LOCK SpinLock
);
2145 KefReleaseSpinLockFromDpcLevel(
2146 IN PKSPIN_LOCK SpinLock
);
2148 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
2149 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
2150 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
2151 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
2153 #define KeGetDcacheFillSize() 1L
2155 #elif defined(_M_ARM) // !defined (_X86_)
2159 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
2161 /* Clear the lock */
2169 IN PKSPIN_LOCK SpinLock
);
2175 IN PKSPIN_LOCK SpinLock
,
2182 KefAcquireSpinLockAtDpcLevel(
2183 IN PKSPIN_LOCK SpinLock
);
2188 KefReleaseSpinLockFromDpcLevel(
2189 IN PKSPIN_LOCK SpinLock
);
2192 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
2193 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
2194 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
2195 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
2200 KeInitializeSpinLock(
2201 IN PKSPIN_LOCK SpinLock
);
2208 KeInitializeSpinLock(
2209 PKSPIN_LOCK SpinLock
)
2217 IN PKSPIN_LOCK SpinLock
,
2222 KeAcquireSpinLockAtDpcLevel(
2223 IN PKSPIN_LOCK SpinLock
);
2227 KeReleaseSpinLockFromDpcLevel(
2228 IN PKSPIN_LOCK SpinLock
);
2232 KeAcquireSpinLockRaiseToDpc(
2233 IN PKSPIN_LOCK SpinLock
);
2235 #define KeAcquireSpinLock(SpinLock, OldIrql) \
2236 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
2238 #endif // !defined (_X86_)
2240 #define ARGUMENT_PRESENT(ArgumentPointer) \
2241 ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL)
2248 IN ULONG Base OPTIONAL
,
2249 IN OUT PULONG Value
);
2257 BOOLEAN CaseInSensitive
);
2259 #if !defined(MIDL_PASS)
2264 RtlConvertLongToLuid(
2270 Temp
.QuadPart
= Val
;
2271 Luid
.LowPart
= Temp
.u
.LowPart
;
2272 Luid
.HighPart
= Temp
.u
.HighPart
;
2280 RtlConvertUlongToLuid(
2297 IN VOID UNALIGNED
*Destination
,
2298 IN CONST VOID UNALIGNED
*Source
,
2305 IN OUT PSTRING DestinationString
,
2306 IN PSTRING SourceString OPTIONAL
);
2314 IN BOOLEAN CaseInSensitive
);
2316 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
2317 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
2318 *CallersAddress = (PVOID)_ReturnAddress(); \
2319 *CallersCaller = NULL;
2324 RtlGetCallersAddress(
2325 OUT PVOID
*CallersAddress
,
2326 OUT PVOID
*CallersCaller
);
2333 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
2339 IN OUT PACCESS_MASK AccessMask
,
2340 IN PGENERIC_MAPPING GenericMapping
);
2345 RtlPrefixUnicodeString(
2346 IN PCUNICODE_STRING String1
,
2347 IN PCUNICODE_STRING String2
,
2348 IN BOOLEAN CaseInSensitive
);
2353 RtlUpcaseUnicodeString(
2354 IN OUT PUNICODE_STRING DestinationString OPTIONAL
,
2355 IN PCUNICODE_STRING SourceString
,
2356 IN BOOLEAN AllocateDestinationString
);
2368 IN OUT PSTRING DestinationString
,
2369 IN PSTRING SourceString
);
2374 RtlVerifyVersionInfo(
2375 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
2377 IN ULONGLONG ConditionMask
);
2382 RtlVolumeDeviceToDosName(
2383 IN PVOID VolumeDeviceObject
,
2384 OUT PUNICODE_STRING DosName
);
2394 /******************************************************************************
2396 ******************************************************************************/
2398 typedef struct _ZONE_SEGMENT_HEADER
{
2399 SINGLE_LIST_ENTRY SegmentList
;
2401 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
2403 typedef struct _ZONE_HEADER
{
2404 SINGLE_LIST_ENTRY FreeList
;
2405 SINGLE_LIST_ENTRY SegmentList
;
2407 ULONG TotalSegmentSize
;
2408 } ZONE_HEADER
, *PZONE_HEADER
;
2410 #define PROTECTED_POOL 0x80000000
2412 /******************************************************************************
2413 * Executive Functions *
2414 ******************************************************************************/
2420 IN PZONE_HEADER Zone
,
2422 IN ULONG SegmentSize
);
2424 static __inline PVOID
2426 IN PZONE_HEADER Zone
)
2428 if (Zone
->FreeList
.Next
)
2429 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
2430 return (PVOID
) Zone
->FreeList
.Next
;
2433 static __inline PVOID
2435 IN PZONE_HEADER Zone
,
2438 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
2439 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
2440 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
2447 IN PZONE_HEADER Zone
,
2449 IN PVOID InitialSegment
,
2450 IN ULONG InitialSegmentSize
);
2454 * ExInterlockedAllocateFromZone(
2455 * IN PZONE_HEADER Zone,
2456 * IN PKSPIN_LOCK Lock)
2458 #define ExInterlockedAllocateFromZone(Zone, Lock) \
2459 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
2464 ExInterlockedExtendZone(
2465 IN PZONE_HEADER Zone
,
2467 IN ULONG SegmentSize
,
2468 IN PKSPIN_LOCK Lock
);
2471 * ExInterlockedFreeToZone(
2472 * IN PZONE_HEADER Zone,
2474 * IN PKSPIN_LOCK Lock);
2476 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
2477 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
2482 * IN PZONE_HEADER Zone)
2484 #define ExIsFullZone(Zone) \
2485 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
2488 * ExIsObjectInFirstZoneSegment(
2489 * IN PZONE_HEADER Zone,
2492 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
2493 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
2494 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
2495 (Zone)->TotalSegmentSize)) )
2501 ExRaiseAccessViolation(
2508 ExRaiseDatatypeMisalignment(
2517 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
2518 #define ExAcquireResourceShared ExAcquireResourceSharedLite
2519 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
2520 #define ExDeleteResource ExDeleteResourceLite
2521 #define ExInitializeResource ExInitializeResourceLite
2522 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
2523 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
2524 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
2525 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
2527 /** Filesystem runtime library routines **/
2532 FsRtlIsTotalDeviceFailure(
2533 IN NTSTATUS Status
);
2535 /** Hardware abstraction layer routines **/
2541 IN ULONG Frequency
);
2547 IN PDEVICE_OBJECT DeviceObject
,
2548 IN ULONG SectorSize
,
2549 IN ULONG MBRTypeIdentifier
,
2555 PADAPTER_OBJECT AdapterObject
2558 /** I/O manager routines **/
2563 IoAllocateController(
2564 IN PCONTROLLER_OBJECT ControllerObject
,
2565 IN PDEVICE_OBJECT DeviceObject
,
2566 IN PDRIVER_CONTROL ExecutionRoutine
,
2570 * VOID IoAssignArcName(
2571 * IN PUNICODE_STRING ArcName,
2572 * IN PUNICODE_STRING DeviceName);
2574 #define IoAssignArcName(_ArcName, _DeviceName) ( \
2575 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
2581 IN PDEVICE_OBJECT DeviceObject
,
2582 IN PFILE_OBJECT FileObject
);
2594 IN PDEVICE_OBJECT DeviceObject
,
2595 IN PCREATE_DISK Disk
);
2601 IN PCONTROLLER_OBJECT ControllerObject
);
2605 * IoDeassignArcName(
2606 * IN PUNICODE_STRING ArcName)
2608 #define IoDeassignArcName IoDeleteSymbolicLink
2614 IN PCONTROLLER_OBJECT ControllerObject
);
2617 PCONFIGURATION_INFORMATION
2619 IoGetConfigurationInformation(
2625 IoGetDeviceToVerify(
2626 IN PETHREAD Thread
);
2631 IoGetFileObjectGenericMapping(
2637 IoMakeAssociatedIrp(
2639 IN CCHAR StackSize
);
2644 IoQueryDeviceDescription(
2645 IN PINTERFACE_TYPE BusType OPTIONAL
,
2646 IN PULONG BusNumber OPTIONAL
,
2647 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
2648 IN PULONG ControllerNumber OPTIONAL
,
2649 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
2650 IN PULONG PeripheralNumber OPTIONAL
,
2651 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
2659 IN PVPB Vpb OPTIONAL
,
2660 IN PDEVICE_OBJECT RealDeviceObject
);
2665 IoRaiseInformationalHardError(
2666 IN NTSTATUS ErrorStatus
,
2667 IN PUNICODE_STRING String OPTIONAL
,
2668 IN PKTHREAD Thread OPTIONAL
);
2673 IoReadDiskSignature(
2674 IN PDEVICE_OBJECT DeviceObject
,
2675 IN ULONG BytesPerSector
,
2676 OUT PDISK_SIGNATURE Signature
);
2681 IoReadPartitionTable(
2682 IN PDEVICE_OBJECT DeviceObject
,
2683 IN ULONG SectorSize
,
2684 IN BOOLEAN ReturnRecognizedPartitions
,
2685 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2690 IoReadPartitionTableEx(
2691 IN PDEVICE_OBJECT DeviceObject
,
2692 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
2697 IoRegisterBootDriverReinitialization(
2698 IN PDRIVER_OBJECT DriverObject
,
2699 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2705 IoRegisterBootDriverReinitialization(
2706 IN PDRIVER_OBJECT DriverObject
,
2707 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2713 IoRegisterDriverReinitialization(
2714 IN PDRIVER_OBJECT DriverObject
,
2715 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2721 IoReportDetectedDevice(
2722 IN PDRIVER_OBJECT DriverObject
,
2723 IN INTERFACE_TYPE LegacyBusType
,
2725 IN ULONG SlotNumber
,
2726 IN PCM_RESOURCE_LIST ResourceList
,
2727 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
2728 IN BOOLEAN ResourceAssigned
,
2729 IN OUT PDEVICE_OBJECT
*DeviceObject
);
2734 IoReportResourceForDetection(
2735 IN PDRIVER_OBJECT DriverObject
,
2736 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2737 IN ULONG DriverListSize OPTIONAL
,
2738 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2739 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2740 IN ULONG DeviceListSize OPTIONAL
,
2741 OUT PBOOLEAN ConflictDetected
);
2746 IoReportResourceUsage(
2747 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2748 IN PDRIVER_OBJECT DriverObject
,
2749 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2750 IN ULONG DriverListSize OPTIONAL
,
2751 IN PDEVICE_OBJECT DeviceObject
,
2752 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2753 IN ULONG DeviceListSize OPTIONAL
,
2754 IN BOOLEAN OverrideConflict
,
2755 OUT PBOOLEAN ConflictDetected
);
2760 IoReportTargetDeviceChange(
2761 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2762 IN PVOID NotificationStructure
);
2767 IoReportTargetDeviceChangeAsynchronous(
2768 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2769 IN PVOID NotificationStructure
,
2770 IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL
,
2771 IN PVOID Context OPTIONAL
);
2776 IoRequestDeviceEject(
2777 IN PDEVICE_OBJECT PhysicalDeviceObject
);
2782 * IN PDEVICE_OBJECT DeviceObject,
2784 * IN PVOID Context);
2786 #define IoRequestDpc(DeviceObject, Irp, Context)( \
2787 KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
2794 IN NTSTATUS Status
);
2798 * IoSetCancelRoutine(
2800 * IN PDRIVER_CANCEL CancelRoutine)
2802 #define IoSetCancelRoutine(_Irp, \
2804 ((PDRIVER_CANCEL) InterlockedExchangePointer( \
2805 (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (_CancelRoutine)))
2809 * IoSetCompletionRoutine(
2811 * IN PIO_COMPLETION_ROUTINE CompletionRoutine,
2813 * IN BOOLEAN InvokeOnSuccess,
2814 * IN BOOLEAN InvokeOnError,
2815 * IN BOOLEAN InvokeOnCancel)
2817 #define IoSetCompletionRoutine(_Irp, \
2818 _CompletionRoutine, \
2824 PIO_STACK_LOCATION _IrpSp; \
2825 ASSERT((_InvokeOnSuccess) || (_InvokeOnError) || (_InvokeOnCancel) ? \
2826 (_CompletionRoutine) != NULL : TRUE); \
2827 _IrpSp = IoGetNextIrpStackLocation(_Irp); \
2828 _IrpSp->CompletionRoutine = (PIO_COMPLETION_ROUTINE)(_CompletionRoutine); \
2829 _IrpSp->Context = (_Context); \
2830 _IrpSp->Control = 0; \
2831 if (_InvokeOnSuccess) _IrpSp->Control = SL_INVOKE_ON_SUCCESS; \
2832 if (_InvokeOnError) _IrpSp->Control |= SL_INVOKE_ON_ERROR; \
2833 if (_InvokeOnCancel) _IrpSp->Control |= SL_INVOKE_ON_CANCEL; \
2839 IoSetCompletionRoutineEx(
2840 IN PDEVICE_OBJECT DeviceObject
,
2842 IN PIO_COMPLETION_ROUTINE CompletionRoutine
,
2844 IN BOOLEAN InvokeOnSuccess
,
2845 IN BOOLEAN InvokeOnError
,
2846 IN BOOLEAN InvokeOnCancel
);
2851 IoSetDeviceInterfaceState(
2852 IN PUNICODE_STRING SymbolicLinkName
,
2858 IoSetHardErrorOrVerifyDevice(
2860 IN PDEVICE_OBJECT DeviceObject
);
2864 * IoSetNextIrpStackLocation(
2867 #define IoSetNextIrpStackLocation(_Irp) \
2869 (_Irp)->CurrentLocation--; \
2870 (_Irp)->Tail.Overlay.CurrentStackLocation--; \
2876 IoSetPartitionInformation(
2877 IN PDEVICE_OBJECT DeviceObject
,
2878 IN ULONG SectorSize
,
2879 IN ULONG PartitionNumber
,
2880 IN ULONG PartitionType
);
2885 IoSetPartitionInformationEx(
2886 IN PDEVICE_OBJECT DeviceObject
,
2887 IN ULONG PartitionNumber
,
2888 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
2894 IN ACCESS_MASK DesiredAccess
,
2895 IN ULONG DesiredShareAccess
,
2896 IN OUT PFILE_OBJECT FileObject
,
2897 OUT PSHARE_ACCESS ShareAccess
);
2902 IoSetStartIoAttributes(
2903 IN PDEVICE_OBJECT DeviceObject
,
2904 IN BOOLEAN DeferredStartIo
,
2905 IN BOOLEAN NonCancelable
);
2910 IoSetSystemPartition(
2911 IN PUNICODE_STRING VolumeNameString
);
2916 IoSetThreadHardErrorMode(
2917 IN BOOLEAN EnableHardErrors
);
2922 * IN CCHAR StackSize)
2924 #define IoSizeOfIrp(_StackSize) \
2925 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
2929 * IoSkipCurrentIrpStackLocation(
2932 #define IoSkipCurrentIrpStackLocation(_Irp) \
2934 (_Irp)->CurrentLocation++; \
2935 (_Irp)->Tail.Overlay.CurrentStackLocation++; \
2942 IN PDEVICE_OBJECT DeviceObject
,
2943 IN BOOLEAN Cancelable
);
2948 IoStartNextPacketByKey(
2949 IN PDEVICE_OBJECT DeviceObject
,
2950 IN BOOLEAN Cancelable
,
2957 IN PDEVICE_OBJECT DeviceObject
,
2959 IN PULONG Key OPTIONAL
,
2960 IN PDRIVER_CANCEL CancelFunction OPTIONAL
);
2966 IN PDEVICE_OBJECT DeviceObject
);
2972 IN PDEVICE_OBJECT DeviceObject
);
2977 IoUnregisterPlugPlayNotification(
2978 IN PVOID NotificationEntry
);
2983 IoUnregisterShutdownNotification(
2984 IN PDEVICE_OBJECT DeviceObject
);
2989 IoUpdateShareAccess(
2990 IN PFILE_OBJECT FileObject
,
2991 IN OUT PSHARE_ACCESS ShareAccess
);
2996 IoVerifyPartitionTable(
2997 IN PDEVICE_OBJECT DeviceObject
,
2998 IN BOOLEAN FixErrors
);
3003 IoVolumeDeviceToDosName(
3004 IN PVOID VolumeDeviceObject
,
3005 OUT PUNICODE_STRING DosName
);
3010 IoWMIAllocateInstanceIds(
3012 IN ULONG InstanceCount
,
3013 OUT ULONG
*FirstInstanceId
);
3018 IoWMIDeviceObjectToProviderId(
3019 IN PDEVICE_OBJECT DeviceObject
);
3024 IoWMIDeviceObjectToInstanceName(
3025 IN PVOID DataBlockObject
,
3026 IN PDEVICE_OBJECT DeviceObject
,
3027 OUT PUNICODE_STRING InstanceName
);
3033 IN PVOID DataBlockObject
,
3034 IN PUNICODE_STRING InstanceName
,
3036 IN ULONG InBufferSize
,
3037 IN OUT PULONG OutBufferSize
,
3038 IN OUT PUCHAR InOutBuffer
);
3043 IoWMIHandleToInstanceName(
3044 IN PVOID DataBlockObject
,
3045 IN HANDLE FileHandle
,
3046 OUT PUNICODE_STRING InstanceName
);
3052 IN GUID
*DataBlockGuid
,
3053 IN ULONG DesiredAccess
,
3054 OUT PVOID
*DataBlockObject
);
3060 IN PVOID DataBlockObject
,
3061 IN OUT ULONG
*InOutBufferSize
,
3062 OUT PVOID OutBuffer
);
3067 IoWMIQueryAllDataMultiple(
3068 IN PVOID
*DataBlockObjectList
,
3069 IN ULONG ObjectCount
,
3070 IN OUT ULONG
*InOutBufferSize
,
3071 OUT PVOID OutBuffer
);
3076 IoWMIQuerySingleInstance(
3077 IN PVOID DataBlockObject
,
3078 IN PUNICODE_STRING InstanceName
,
3079 IN OUT ULONG
*InOutBufferSize
,
3080 OUT PVOID OutBuffer
);
3085 IoWMIQuerySingleInstanceMultiple(
3086 IN PVOID
*DataBlockObjectList
,
3087 IN PUNICODE_STRING InstanceNames
,
3088 IN ULONG ObjectCount
,
3089 IN OUT ULONG
*InOutBufferSize
,
3090 OUT PVOID OutBuffer
);
3095 IoWMIRegistrationControl(
3096 IN PDEVICE_OBJECT DeviceObject
,
3102 IoWMISetNotificationCallback(
3104 IN WMI_NOTIFICATION_CALLBACK Callback
,
3110 IoWMISetSingleInstance(
3111 IN PVOID DataBlockObject
,
3112 IN PUNICODE_STRING InstanceName
,
3114 IN ULONG ValueBufferSize
,
3115 IN PVOID ValueBuffer
);
3121 IN PVOID DataBlockObject
,
3122 IN PUNICODE_STRING InstanceName
,
3123 IN ULONG DataItemId
,
3125 IN ULONG ValueBufferSize
,
3126 IN PVOID ValueBuffer
);
3131 IoWMISuggestInstanceName(
3132 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
3133 IN PUNICODE_STRING SymbolicLinkName OPTIONAL
,
3134 IN BOOLEAN CombineNames
,
3135 OUT PUNICODE_STRING SuggestedInstanceName
);
3141 IN PVOID WnodeEventItem
);
3146 IoWriteErrorLogEntry(
3152 IoWritePartitionTable(
3153 IN PDEVICE_OBJECT DeviceObject
,
3154 IN ULONG SectorSize
,
3155 IN ULONG SectorsPerTrack
,
3156 IN ULONG NumberOfHeads
,
3157 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
3162 IoWritePartitionTableEx(
3163 IN PDEVICE_OBJECT DeviceObject
,
3164 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*PartitionBuffer
);
3168 /** Kernel routines **/
3170 #if defined (_M_AMD64)
3174 KeAcquireInStackQueuedSpinLock(
3175 IN PKSPIN_LOCK SpinLock
,
3176 IN PKLOCK_QUEUE_HANDLE LockHandle
);
3181 KeReleaseInStackQueuedSpinLock(
3182 IN PKLOCK_QUEUE_HANDLE LockHandle
);
3187 KeAcquireInStackQueuedSpinLock(
3188 IN PKSPIN_LOCK SpinLock
,
3189 IN PKLOCK_QUEUE_HANDLE LockHandle
);
3194 KeReleaseInStackQueuedSpinLock(
3195 IN PKLOCK_QUEUE_HANDLE LockHandle
);
3201 KeAcquireInStackQueuedSpinLockAtDpcLevel(
3202 IN PKSPIN_LOCK SpinLock
,
3203 IN PKLOCK_QUEUE_HANDLE LockHandle
);
3208 KeAcquireInterruptSpinLock(
3209 IN PKINTERRUPT Interrupt
);
3222 IN ULONG BugCheckCode
);
3229 IN ULONG BugCheckCode
,
3230 IN ULONG_PTR BugCheckParameter1
,
3231 IN ULONG_PTR BugCheckParameter2
,
3232 IN ULONG_PTR BugCheckParameter3
,
3233 IN ULONG_PTR BugCheckParameter4
);
3250 KeDelayExecutionThread(
3251 IN KPROCESSOR_MODE WaitMode
,
3252 IN BOOLEAN Alertable
,
3253 IN PLARGE_INTEGER Interval
);
3258 KeDeregisterBugCheckCallback(
3259 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
3264 KeEnterCriticalRegion(
3271 * IN BOOLEAN ReadOperation,
3272 * IN BOOLEAN DmaOperation)
3274 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
3276 #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
3277 #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
3278 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
3279 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
3291 KeFlushWriteBuffer(VOID
);
3296 KeGetRecommendedSharedDataAlignment(
3302 KeInitializeDeviceQueue(
3303 IN PKDEVICE_QUEUE DeviceQueue
);
3315 KeInitializeSemaphore(
3316 IN PRKSEMAPHORE Semaphore
,
3329 KeInitializeTimerEx(
3331 IN TIMER_TYPE Type
);
3336 KeInsertByKeyDeviceQueue(
3337 IN PKDEVICE_QUEUE DeviceQueue
,
3338 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
3344 KeInsertDeviceQueue(
3345 IN PKDEVICE_QUEUE DeviceQueue
,
3346 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
3353 IN PVOID SystemArgument1
,
3354 IN PVOID SystemArgument2
);
3359 KeLeaveCriticalRegion(
3369 volatile LONG Barrier
;
3370 #if defined(__GNUC__)
3371 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
3372 #elif defined(_MSC_VER)
3373 __asm xchg
[Barrier
], eax
3384 IN KPRIORITY Increment
,
3390 KeQueryActiveProcessors(
3397 KeQueryPerformanceCounter(
3398 OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL
);
3403 KeQueryPriorityThread(
3404 IN PRKTHREAD Thread
);
3409 KeQueryRuntimeThread(
3411 OUT PULONG UserTime
);
3413 #if !defined(_M_AMD64)
3417 KeQueryInterruptTime(
3424 OUT PLARGE_INTEGER CurrentTime
);
3430 OUT PLARGE_INTEGER TickCount
);
3436 KeQueryTimeIncrement(
3455 KeReadStateSemaphore(
3456 IN PRKSEMAPHORE Semaphore
);
3467 KeRegisterBugCheckCallback(
3468 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
3469 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
3472 IN PUCHAR Component
);
3477 KeRegisterNmiCallback(
3478 IN PNMI_CALLBACK CallbackRoutine
,
3485 KeDeregisterNmiCallback(
3492 KeReleaseInStackQueuedSpinLockFromDpcLevel(
3493 IN PKLOCK_QUEUE_HANDLE LockHandle
);
3498 KeReleaseInterruptSpinLock(
3499 IN PKINTERRUPT Interrupt
,
3513 IN PRKSEMAPHORE Semaphore
,
3514 IN KPRIORITY Increment
,
3519 PKDEVICE_QUEUE_ENTRY
3521 KeRemoveByKeyDeviceQueue(
3522 IN PKDEVICE_QUEUE DeviceQueue
,
3526 PKDEVICE_QUEUE_ENTRY
3528 KeRemoveDeviceQueue(
3529 IN PKDEVICE_QUEUE DeviceQueue
);
3534 KeRemoveEntryDeviceQueue(
3535 IN PKDEVICE_QUEUE DeviceQueue
,
3536 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
3553 KeRestoreFloatingPointState(
3554 IN PKFLOATING_SAVE FloatSave
);
3559 KeRevertToUserAffinityThread(VOID
);
3564 KeSaveFloatingPointState(
3565 OUT PKFLOATING_SAVE FloatSave
);
3570 KeSetBasePriorityThread(
3571 IN PRKTHREAD Thread
,
3579 IN KPRIORITY Increment
,
3587 IN KDPC_IMPORTANCE Importance
);
3592 KeSetPriorityThread(
3594 IN KPRIORITY Priority
);
3599 KeSetSystemAffinityThread(
3600 IN KAFFINITY Affinity
);
3605 KeSetTargetProcessorDpc(
3614 IN LARGE_INTEGER DueTime
,
3615 IN PKDPC Dpc OPTIONAL
);
3622 IN LARGE_INTEGER DueTime
,
3623 IN LONG Period OPTIONAL
,
3624 IN PKDPC Dpc OPTIONAL
);
3629 KeSetTimeUpdateNotifyRoutine(
3630 IN PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine
);
3635 KeStallExecutionProcessor(
3636 IN ULONG MicroSeconds
);
3641 KeSynchronizeExecution(
3642 IN PKINTERRUPT Interrupt
,
3643 IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
3644 IN PVOID SynchronizeContext
);
3649 KeWaitForMultipleObjects(
3652 IN WAIT_TYPE WaitType
,
3653 IN KWAIT_REASON WaitReason
,
3654 IN KPROCESSOR_MODE WaitMode
,
3655 IN BOOLEAN Alertable
,
3656 IN PLARGE_INTEGER Timeout OPTIONAL
,
3657 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL
);
3662 KeWaitForMutexObject(
3664 IN KWAIT_REASON WaitReason
,
3665 IN KPROCESSOR_MODE WaitMode
,
3666 IN BOOLEAN Alertable
,
3667 IN PLARGE_INTEGER Timeout OPTIONAL
);
3672 KeWaitForSingleObject(
3674 IN KWAIT_REASON WaitReason
,
3675 IN KPROCESSOR_MODE WaitMode
,
3676 IN BOOLEAN Alertable
,
3677 IN PLARGE_INTEGER Timeout OPTIONAL
);
3681 (NTAPI
*PKIPI_BROADCAST_WORKER
)(
3682 IN ULONG_PTR Argument
3689 IN PKIPI_BROADCAST_WORKER BroadcastFunction
,
3690 IN ULONG_PTR Context
3710 KeRaiseIrqlToDpcLevel(
3716 KeRaiseIrqlToSynchLevel(
3719 #define KeLowerIrql(a) KfLowerIrql(a)
3720 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
3722 #elif defined(_M_AMD64)
3726 KeGetCurrentIrql(VOID
)
3728 return (KIRQL
)__readcr8();
3733 KeLowerIrql(IN KIRQL NewIrql
)
3735 ASSERT(KeGetCurrentIrql() >= NewIrql
);
3736 __writecr8(NewIrql
);
3741 KfRaiseIrql(IN KIRQL NewIrql
)
3745 OldIrql
= __readcr8();
3746 ASSERT(OldIrql
<= NewIrql
);
3747 __writecr8(NewIrql
);
3750 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
3754 KeRaiseIrqlToDpcLevel(VOID
)
3756 return KfRaiseIrql(DISPATCH_LEVEL
);
3761 KeRaiseIrqlToSynchLevel(VOID
)
3763 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
3766 #elif defined(__PowerPC__)
3783 KeRaiseIrqlToDpcLevel(
3789 KeRaiseIrqlToSynchLevel(
3792 #define KeLowerIrql(a) KfLowerIrql(a)
3793 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
3795 #elif defined(_M_MIPS)
3797 #define KeLowerIrql(a) KfLowerIrql(a)
3798 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
3815 KeRaiseIrqlToDpcLevel(
3821 KeRaiseIrqlToSynchLevel(
3824 #elif defined(_M_ARM)
3841 OUT PKIRQL OldIrql
);
3846 KeRaiseIrqlToDpcLevel(
3852 KeRaiseIrqlToSynchLevel(
3857 /** Memory manager routines **/
3864 IN ULONG NumberOfBytes
);
3869 MmAllocateContiguousMemory(
3870 IN ULONG NumberOfBytes
,
3871 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
3876 MmAllocateContiguousMemorySpecifyCache(
3877 IN SIZE_T NumberOfBytes
,
3878 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
3879 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
3880 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
3881 IN MEMORY_CACHING_TYPE CacheType
);
3886 MmAllocateMappingAddress(
3887 IN SIZE_T NumberOfBytes
,
3893 MmAllocateNonCachedMemory(
3894 IN ULONG NumberOfBytes
);
3899 MmAllocatePagesForMdl(
3900 IN PHYSICAL_ADDRESS LowAddress
,
3901 IN PHYSICAL_ADDRESS HighAddress
,
3902 IN PHYSICAL_ADDRESS SkipBytes
,
3903 IN SIZE_T TotalBytes
);
3905 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
3909 MmAllocatePagesForMdlEx(
3910 IN PHYSICAL_ADDRESS LowAddress
,
3911 IN PHYSICAL_ADDRESS HighAddress
,
3912 IN PHYSICAL_ADDRESS SkipBytes
,
3913 IN SIZE_T TotalBytes
,
3914 IN MEMORY_CACHING_TYPE CacheType
,
3921 MmBuildMdlForNonPagedPool(
3922 IN OUT PMDL MemoryDescriptorList
);
3924 typedef enum _MMFLUSH_TYPE
{
3932 MmFlushImageSection(
3933 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
3934 IN MMFLUSH_TYPE FlushType
);
3939 MmFreeContiguousMemory(
3940 IN PVOID BaseAddress
);
3945 MmFreeContiguousMemorySpecifyCache(
3946 IN PVOID BaseAddress
,
3947 IN SIZE_T NumberOfBytes
,
3948 IN MEMORY_CACHING_TYPE CacheType
);
3953 MmFreeMappingAddress(
3954 IN PVOID BaseAddress
,
3960 MmFreeNonCachedMemory(
3961 IN PVOID BaseAddress
,
3962 IN SIZE_T NumberOfBytes
);
3968 IN PMDL MemoryDescriptorList
);
3972 * MmGetMdlByteCount(
3975 #define MmGetMdlByteCount(_Mdl) \
3980 * MmGetMdlByteOffset(
3983 #define MmGetMdlByteOffset(_Mdl) \
3984 ((_Mdl)->ByteOffset)
3991 #define MmGetMdlPfnArray(_Mdl) \
3992 ((PPFN_NUMBER) ((_Mdl) + 1))
3996 * MmGetMdlVirtualAddress(
3999 #define MmGetMdlVirtualAddress(_Mdl) \
4000 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
4005 MmGetPhysicalAddress(
4006 IN PVOID BaseAddress
);
4009 PPHYSICAL_MEMORY_RANGE
4011 MmGetPhysicalMemoryRanges(
4017 MmGetVirtualForPhysical(
4018 IN PHYSICAL_ADDRESS PhysicalAddress
);
4023 MmMapLockedPagesSpecifyCache(
4024 IN PMDL MemoryDescriptorList
,
4025 IN KPROCESSOR_MODE AccessMode
,
4026 IN MEMORY_CACHING_TYPE CacheType
,
4027 IN PVOID BaseAddress
,
4028 IN ULONG BugCheckOnFailure
,
4029 IN MM_PAGE_PRIORITY Priority
);
4034 MmMapLockedPagesWithReservedMapping(
4035 IN PVOID MappingAddress
,
4037 IN PMDL MemoryDescriptorList
,
4038 IN MEMORY_CACHING_TYPE CacheType
);
4043 MmMapUserAddressesToPage(
4044 IN PVOID BaseAddress
,
4045 IN SIZE_T NumberOfBytes
,
4046 IN PVOID PageAddress
);
4052 IN PHYSICAL_ADDRESS PhysicalAddress
,
4053 IN SIZE_T NumberOfBytes
,
4054 IN MEMORY_CACHING_TYPE CacheType
);
4059 MmMapViewInSessionSpace(
4061 OUT PVOID
*MappedBase
,
4062 IN OUT PSIZE_T ViewSize
);
4067 MmMapViewInSystemSpace(
4069 OUT PVOID
*MappedBase
,
4070 IN PSIZE_T ViewSize
);
4075 MmMarkPhysicalMemoryAsBad(
4076 IN PPHYSICAL_ADDRESS StartAddress
,
4077 IN OUT PLARGE_INTEGER NumberOfBytes
);
4082 MmMarkPhysicalMemoryAsGood(
4083 IN PPHYSICAL_ADDRESS StartAddress
,
4084 IN OUT PLARGE_INTEGER NumberOfBytes
);
4089 MmGetSystemRoutineAddress(
4090 IN PUNICODE_STRING SystemRoutineName
);
4094 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
4098 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, \
4100 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
4101 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
4106 * IN PMDL MemoryDescriptorList,
4110 #define MmInitializeMdl(_MemoryDescriptorList, \
4114 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
4115 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
4116 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
4117 (_MemoryDescriptorList)->MdlFlags = 0; \
4118 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
4119 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
4120 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
4127 IN PVOID VirtualAddress
);
4132 MmIsDriverVerifying(
4133 IN PDRIVER_OBJECT DriverObject
);
4138 MmIsThisAnNtAsSystem(
4144 MmIsVerifierEnabled(
4145 OUT PULONG VerifierFlags
);
4150 MmLockPagableDataSection(
4151 IN PVOID AddressWithinSection
);
4156 MmLockPagableImageSection(
4157 IN PVOID AddressWithinSection
);
4161 * MmLockPagableCodeSection(
4162 * IN PVOID AddressWithinSection)
4164 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
4169 MmLockPagableSectionByHandle(
4170 IN PVOID ImageSectionHandle
);
4176 IN PHYSICAL_ADDRESS PhysicalAddress
,
4177 IN ULONG NumberOfBytes
,
4178 IN MEMORY_CACHING_TYPE CacheEnable
);
4184 IN PMDL MemoryDescriptorList
,
4185 IN KPROCESSOR_MODE AccessMode
);
4190 MmLockPageableDataSection (
4191 IN PVOID AddressWithinSection
4197 MmUnlockPageableImageSection(
4198 IN PVOID ImageSectionHandle
4205 IN PVOID AddressWithinSection
);
4210 MmProbeAndLockProcessPages(
4211 IN OUT PMDL MemoryDescriptorList
,
4212 IN PEPROCESS Process
,
4213 IN KPROCESSOR_MODE AccessMode
,
4214 IN LOCK_OPERATION Operation
);
4219 MmProtectMdlSystemAddress(
4220 IN PMDL MemoryDescriptorList
,
4221 IN ULONG NewProtect
);
4227 IN PVOID BaseAddress
,
4228 IN PMDL MemoryDescriptorList
);
4233 MmUnmapViewInSessionSpace(
4234 IN PVOID MappedBase
);
4239 MmUnmapViewInSystemSpace(
4240 IN PVOID MappedBase
);
4245 MmUnsecureVirtualMemory(
4246 IN HANDLE SecureHandle
);
4250 * MmPrepareMdlForReuse(
4253 #define MmPrepareMdlForReuse(_Mdl) \
4255 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
4256 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
4257 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
4258 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
4259 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
4263 #define MmGetProcedureAddress(Address) (Address)
4268 MmProbeAndLockPages(
4269 IN OUT PMDL MemoryDescriptorList
,
4270 IN KPROCESSOR_MODE AccessMode
,
4271 IN LOCK_OPERATION Operation
);
4282 MmRemovePhysicalMemory(
4283 IN PPHYSICAL_ADDRESS StartAddress
,
4284 IN OUT PLARGE_INTEGER NumberOfBytes
);
4289 MmResetDriverPaging(
4290 IN PVOID AddressWithinSection
);
4295 MmSecureVirtualMemory(
4298 IN ULONG ProbeMode
);
4310 MmUnlockPagableImageSection(
4311 IN PVOID ImageSectionHandle
);
4317 IN PMDL MemoryDescriptorList
);
4323 IN PVOID BaseAddress
,
4324 IN SIZE_T NumberOfBytes
);
4329 MmUnmapReservedMapping(
4330 IN PVOID BaseAddress
,
4332 IN PMDL MemoryDescriptorList
);
4337 MmUnmapVideoDisplay(
4338 IN PVOID BaseAddress
,
4339 IN SIZE_T NumberOfBytes
);
4343 /** Object manager routines **/
4349 IN PACCESS_STATE AccessState
,
4350 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4352 IN POBJECT_TYPE Type
);
4357 ObDereferenceSecurityDescriptor(
4358 PSECURITY_DESCRIPTOR SecurityDescriptor
,
4364 ObfDereferenceObject(
4369 * ObDereferenceObject(
4372 #define ObDereferenceObject ObfDereferenceObject
4377 ObGetObjectSecurity(
4379 OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
4380 OUT PBOOLEAN MemoryAllocated
);
4387 IN PACCESS_STATE PassedAccessState OPTIONAL
,
4388 IN ACCESS_MASK DesiredAccess
,
4389 IN ULONG AdditionalReferences
,
4390 OUT PVOID
* ReferencedObject OPTIONAL
,
4391 OUT PHANDLE Handle
);
4402 ObLogSecurityDescriptor(
4403 IN PSECURITY_DESCRIPTOR InputSecurityDescriptor
,
4404 OUT PSECURITY_DESCRIPTOR
*OutputSecurityDescriptor
,
4408 * ObReferenceObject(
4411 #define ObReferenceObject ObfReferenceObject
4416 ObMakeTemporaryObject(
4423 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4424 IN POBJECT_TYPE ObjectType
,
4425 IN KPROCESSOR_MODE AccessMode
,
4426 IN PACCESS_STATE PassedAccessState
,
4427 IN ACCESS_MASK DesiredAccess
,
4428 IN OUT PVOID ParseContext OPTIONAL
,
4429 OUT PHANDLE Handle
);
4434 ObOpenObjectByPointer(
4436 IN ULONG HandleAttributes
,
4437 IN PACCESS_STATE PassedAccessState OPTIONAL
,
4438 IN ACCESS_MASK DesiredAccess OPTIONAL
,
4439 IN POBJECT_TYPE ObjectType OPTIONAL
,
4440 IN KPROCESSOR_MODE AccessMode
,
4441 OUT PHANDLE Handle
);
4446 ObQueryObjectAuditingByHandle(
4448 OUT PBOOLEAN GenerateOnClose
);
4453 ObReferenceObjectByHandle(
4455 IN ACCESS_MASK DesiredAccess
,
4456 IN POBJECT_TYPE ObjectType OPTIONAL
,
4457 IN KPROCESSOR_MODE AccessMode
,
4459 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
);
4464 ObReferenceObjectByName(
4465 IN PUNICODE_STRING ObjectPath
,
4466 IN ULONG Attributes
,
4467 IN PACCESS_STATE PassedAccessState OPTIONAL
,
4468 IN ACCESS_MASK DesiredAccess OPTIONAL
,
4469 IN POBJECT_TYPE ObjectType
,
4470 IN KPROCESSOR_MODE AccessMode
,
4471 IN OUT PVOID ParseContext OPTIONAL
,
4477 ObReferenceObjectByPointer(
4479 IN ACCESS_MASK DesiredAccess
,
4480 IN POBJECT_TYPE ObjectType
,
4481 IN KPROCESSOR_MODE AccessMode
);
4486 ObReferenceSecurityDescriptor(
4487 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4493 ObReleaseObjectSecurity(
4494 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4495 IN BOOLEAN MemoryAllocated
);
4499 /** Process manager routines **/
4504 PsCreateSystemProcess(
4505 IN PHANDLE ProcessHandle
,
4506 IN ACCESS_MASK DesiredAccess
,
4507 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4512 PsCreateSystemThread(
4513 OUT PHANDLE ThreadHandle
,
4514 IN ULONG DesiredAccess
,
4515 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
4516 IN HANDLE ProcessHandle OPTIONAL
,
4517 OUT PCLIENT_ID ClientId OPTIONAL
,
4518 IN PKSTART_ROUTINE StartRoutine
,
4519 IN PVOID StartContext
);
4523 * PsGetCurrentProcess(VOID)
4525 #define PsGetCurrentProcess IoGetCurrentProcess
4530 PsGetCurrentProcessId(
4535 * PsGetCurrentThread(VOID)
4537 #define PsGetCurrentThread() \
4538 ((PETHREAD) KeGetCurrentThread())
4543 PsGetCurrentThreadId(
4549 PsGetProcessId(PEPROCESS Process
);
4555 PULONG MajorVersion OPTIONAL
,
4556 PULONG MinorVersion OPTIONAL
,
4557 PULONG BuildNumber OPTIONAL
,
4558 PUNICODE_STRING CSDVersion OPTIONAL
);
4563 PsRemoveCreateThreadNotifyRoutine(
4564 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4569 PsRemoveLoadImageNotifyRoutine(
4570 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4575 PsSetCreateProcessNotifyRoutine(
4576 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
4582 PsSetCreateThreadNotifyRoutine(
4583 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4588 PsSetLoadImageNotifyRoutine(
4589 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4594 PsTerminateSystemThread(
4595 IN NTSTATUS ExitStatus
);
4597 extern NTSYSAPI PEPROCESS PsInitialSystemProcess
;
4600 /** Security reference monitor routines **/
4606 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4607 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
4608 IN BOOLEAN SubjectContextLocked
,
4609 IN ACCESS_MASK DesiredAccess
,
4610 IN ACCESS_MASK PreviouslyGrantedAccess
,
4611 OUT PPRIVILEGE_SET
*Privileges OPTIONAL
,
4612 IN PGENERIC_MAPPING GenericMapping
,
4613 IN KPROCESSOR_MODE AccessMode
,
4614 OUT PACCESS_MASK GrantedAccess
,
4615 OUT PNTSTATUS AccessStatus
);
4621 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
4622 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
4623 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
4624 IN BOOLEAN IsDirectoryObject
,
4625 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
4626 IN PGENERIC_MAPPING GenericMapping
,
4627 IN POOL_TYPE PoolType
);
4633 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
4634 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
4635 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
4636 IN GUID
*ObjectType OPTIONAL
,
4637 IN BOOLEAN IsDirectoryObject
,
4638 IN ULONG AutoInheritFlags
,
4639 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
4640 IN PGENERIC_MAPPING GenericMapping
,
4641 IN POOL_TYPE PoolType
);
4647 IN OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
);
4652 SeSinglePrivilegeCheck(
4653 LUID PrivilegeValue
,
4654 KPROCESSOR_MODE PreviousMode
);
4659 SeValidSecurityDescriptor(
4661 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
4665 /** NtXxx routines **/
4671 OUT PHANDLE ProcessHandle
,
4672 IN ACCESS_MASK DesiredAccess
,
4673 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4674 IN PCLIENT_ID ClientId OPTIONAL
);
4679 NtQueryInformationProcess(
4680 IN HANDLE ProcessHandle
,
4681 IN PROCESSINFOCLASS ProcessInformationClass
,
4682 OUT PVOID ProcessInformation
,
4683 IN ULONG ProcessInformationLength
,
4684 OUT PULONG ReturnLength OPTIONAL
);
4688 /** NtXxx and ZwXxx routines **/
4694 IN HANDLE TimerHandle
,
4695 OUT PBOOLEAN CurrentState OPTIONAL
);
4712 ZwCreateDirectoryObject(
4713 OUT PHANDLE DirectoryHandle
,
4714 IN ACCESS_MASK DesiredAccess
,
4715 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4721 OUT PHANDLE EventHandle
,
4722 IN ACCESS_MASK DesiredAccess
,
4723 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
4724 IN EVENT_TYPE EventType
,
4725 IN BOOLEAN InitialState
);
4731 OUT PHANDLE EventHandle
,
4732 IN ACCESS_MASK DesiredAccess
,
4733 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
4734 IN EVENT_TYPE EventType
,
4735 IN BOOLEAN InitialState
);
4741 OUT PHANDLE FileHandle
,
4742 IN ACCESS_MASK DesiredAccess
,
4743 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4744 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4745 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
4746 IN ULONG FileAttributes
,
4747 IN ULONG ShareAccess
,
4748 IN ULONG CreateDisposition
,
4749 IN ULONG CreateOptions
,
4750 IN PVOID EaBuffer OPTIONAL
,
4757 OUT PHANDLE KeyHandle
,
4758 IN ACCESS_MASK DesiredAccess
,
4759 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4760 IN ULONG TitleIndex
,
4761 IN PUNICODE_STRING Class OPTIONAL
,
4762 IN ULONG CreateOptions
,
4763 OUT PULONG Disposition OPTIONAL
);
4769 OUT PHANDLE TimerHandle
,
4770 IN ACCESS_MASK DesiredAccess
,
4771 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
4772 IN TIMER_TYPE TimerType
);
4778 IN HANDLE KeyHandle
);
4784 IN HANDLE KeyHandle
,
4785 IN PUNICODE_STRING ValueName
);
4790 NtDeviceIoControlFile(
4791 IN HANDLE DeviceHandle
,
4792 IN HANDLE Event OPTIONAL
,
4793 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
4794 IN PVOID UserApcContext OPTIONAL
,
4795 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4796 IN ULONG IoControlCode
,
4797 IN PVOID InputBuffer
,
4798 IN ULONG InputBufferSize
,
4799 OUT PVOID OutputBuffer
,
4800 IN ULONG OutputBufferSize
);
4805 ZwDeviceIoControlFile(
4806 IN HANDLE DeviceHandle
,
4807 IN HANDLE Event OPTIONAL
,
4808 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
4809 IN PVOID UserApcContext OPTIONAL
,
4810 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4811 IN ULONG IoControlCode
,
4812 IN PVOID InputBuffer
,
4813 IN ULONG InputBufferSize
,
4814 OUT PVOID OutputBuffer
,
4815 IN ULONG OutputBufferSize
);
4821 IN HANDLE KeyHandle
,
4823 IN KEY_INFORMATION_CLASS KeyInformationClass
,
4824 OUT PVOID KeyInformation
,
4826 OUT PULONG ResultLength
);
4831 ZwEnumerateValueKey(
4832 IN HANDLE KeyHandle
,
4834 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
4835 OUT PVOID KeyValueInformation
,
4837 OUT PULONG ResultLength
);
4843 IN HANDLE KeyHandle
);
4848 ZwMakeTemporaryObject(
4855 IN HANDLE SectionHandle
,
4856 IN HANDLE ProcessHandle
,
4857 IN OUT PVOID
*BaseAddress
,
4858 IN ULONG_PTR ZeroBits
,
4859 IN SIZE_T CommitSize
,
4860 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
4861 IN OUT PSIZE_T ViewSize
,
4862 IN SECTION_INHERIT InheritDisposition
,
4863 IN ULONG AllocationType
,
4870 IN HANDLE SectionHandle
,
4871 IN HANDLE ProcessHandle
,
4872 IN OUT PVOID
*BaseAddress
,
4873 IN ULONG_PTR ZeroBits
,
4874 IN SIZE_T CommitSize
,
4875 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
4876 IN OUT PSIZE_T ViewSize
,
4877 IN SECTION_INHERIT InheritDisposition
,
4878 IN ULONG AllocationType
,
4885 OUT PHANDLE FileHandle
,
4886 IN ACCESS_MASK DesiredAccess
,
4887 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4888 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4889 IN ULONG ShareAccess
,
4890 IN ULONG OpenOptions
);
4896 OUT PHANDLE FileHandle
,
4897 IN ACCESS_MASK DesiredAccess
,
4898 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4899 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4900 IN ULONG ShareAccess
,
4901 IN ULONG OpenOptions
);
4907 OUT PHANDLE KeyHandle
,
4908 IN ACCESS_MASK DesiredAccess
,
4909 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4915 OUT PHANDLE SectionHandle
,
4916 IN ACCESS_MASK DesiredAccess
,
4917 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4922 ZwOpenSymbolicLinkObject(
4923 OUT PHANDLE LinkHandle
,
4924 IN ACCESS_MASK DesiredAccess
,
4925 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4931 OUT PHANDLE TimerHandle
,
4932 IN ACCESS_MASK DesiredAccess
,
4933 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4938 ZwQueryInformationFile(
4939 IN HANDLE FileHandle
,
4940 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4941 OUT PVOID FileInformation
,
4943 IN FILE_INFORMATION_CLASS FileInformationClass
);
4949 IN HANDLE KeyHandle
,
4950 IN KEY_INFORMATION_CLASS KeyInformationClass
,
4951 OUT PVOID KeyInformation
,
4953 OUT PULONG ResultLength
);
4958 ZwQuerySymbolicLinkObject(
4959 IN HANDLE LinkHandle
,
4960 IN OUT PUNICODE_STRING LinkTarget
,
4961 OUT PULONG ReturnedLength OPTIONAL
);
4967 IN HANDLE KeyHandle
,
4968 IN PUNICODE_STRING ValueName
,
4969 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
4970 OUT PVOID KeyValueInformation
,
4972 OUT PULONG ResultLength
);
4978 IN HANDLE FileHandle
,
4979 IN HANDLE Event OPTIONAL
,
4980 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4981 IN PVOID ApcContext OPTIONAL
,
4982 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4985 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
4986 IN PULONG Key OPTIONAL
);
4992 IN HANDLE FileHandle
,
4993 IN HANDLE Event OPTIONAL
,
4994 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4995 IN PVOID ApcContext OPTIONAL
,
4996 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4999 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
5000 IN PULONG Key OPTIONAL
);
5006 IN HANDLE EventHandle
,
5007 OUT PLONG PreviousState OPTIONAL
);
5013 IN HANDLE EventHandle
,
5014 OUT PLONG PreviousState OPTIONAL
);
5019 ZwSetInformationFile(
5020 IN HANDLE FileHandle
,
5021 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5022 IN PVOID FileInformation
,
5024 IN FILE_INFORMATION_CLASS FileInformationClass
);
5029 ZwSetInformationThread(
5030 IN HANDLE ThreadHandle
,
5031 IN THREADINFOCLASS ThreadInformationClass
,
5032 IN PVOID ThreadInformation
,
5033 IN ULONG ThreadInformationLength
);
5039 IN HANDLE TimerHandle
,
5040 IN PLARGE_INTEGER DueTime
,
5041 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
5042 IN PVOID TimerContext OPTIONAL
,
5043 IN BOOLEAN WakeTimer
,
5044 IN LONG Period OPTIONAL
,
5045 OUT PBOOLEAN PreviousState OPTIONAL
);
5051 IN HANDLE KeyHandle
,
5052 IN PUNICODE_STRING ValueName
,
5053 IN ULONG TitleIndex OPTIONAL
,
5058 /* [Nt|Zw]MapViewOfSection.InheritDisposition constants */
5059 #define AT_EXTENDABLE_FILE 0x00002000
5060 #define AT_RESERVED 0x20000000
5061 #define AT_ROUND_TO_PAGE 0x40000000
5066 NtUnmapViewOfSection(
5067 IN HANDLE ProcessHandle
,
5068 IN PVOID BaseAddress
);
5073 ZwUnmapViewOfSection(
5074 IN HANDLE ProcessHandle
,
5075 IN PVOID BaseAddress
);
5080 NtWaitForSingleObject(
5081 IN HANDLE ObjectHandle
,
5082 IN BOOLEAN Alertable
,
5083 IN PLARGE_INTEGER TimeOut OPTIONAL
);
5088 ZwWaitForSingleObject(
5089 IN HANDLE ObjectHandle
,
5090 IN BOOLEAN Alertable
,
5091 IN PLARGE_INTEGER TimeOut OPTIONAL
);
5097 IN HANDLE FileHandle
,
5098 IN HANDLE Event OPTIONAL
,
5099 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
5100 IN PVOID ApcContext OPTIONAL
,
5101 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5104 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
5105 IN PULONG Key OPTIONAL
);
5111 IN HANDLE FileHandle
,
5112 IN HANDLE Event OPTIONAL
,
5113 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
5114 IN PVOID ApcContext OPTIONAL
,
5115 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5118 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
5119 IN PULONG Key OPTIONAL
);
5123 /** Power management support routines **/
5129 IN PDEVICE_OBJECT DeviceObject
,
5135 PoRegisterDeviceForIdleDetection(
5136 IN PDEVICE_OBJECT DeviceObject
,
5137 IN ULONG ConservationIdleTime
,
5138 IN ULONG PerformanceIdleTime
,
5139 IN DEVICE_POWER_STATE State
);
5144 PoRegisterSystemState(
5145 IN PVOID StateHandle
,
5146 IN EXECUTION_STATE Flags
);
5152 IN PDEVICE_OBJECT DeviceObject
,
5153 IN UCHAR MinorFunction
,
5154 IN POWER_STATE PowerState
,
5155 IN PREQUEST_POWER_COMPLETE CompletionFunction
,
5157 OUT PIRP
*Irp OPTIONAL
);
5162 PoRequestShutdownEvent(
5169 PULONG IdlePointer
);
5171 #define PoSetDeviceBusy(IdlePointer) \
5172 ((void)(*(IdlePointer) = 0))
5178 IN PDEVICE_OBJECT DeviceObject
,
5179 IN POWER_STATE_TYPE Type
,
5180 IN POWER_STATE State
);
5186 IN EXECUTION_STATE Flags
);
5191 PoStartNextPowerIrp(
5197 PoUnregisterSystemState(
5198 IN PVOID StateHandle
);
5202 /** WMI library support routines **/
5207 IN PDEVICE_OBJECT DeviceObject
,
5210 IN ULONG BufferUsed
,
5211 IN CCHAR PriorityBoost
);
5216 IN PDEVICE_OBJECT DeviceObject
,
5218 IN ULONG InstanceIndex
,
5219 IN ULONG EventDataSize
,
5220 IN PVOID EventData
);
5225 WmiQueryTraceInformation(
5226 IN TRACE_INFORMATION_CLASS TraceInformationClass
,
5227 OUT PVOID TraceInformation
,
5228 IN ULONG TraceInformationLength
,
5229 OUT PULONG RequiredLength OPTIONAL
,
5230 IN PVOID Buffer OPTIONAL
);
5235 IN PWMILIB_CONTEXT WmiLibInfo
,
5236 IN PDEVICE_OBJECT DeviceObject
,
5238 OUT PSYSCTL_IRP_DISPOSITION IrpDisposition
);
5244 IN TRACEHANDLE LoggerHandle
,
5245 IN ULONG MessageFlags
,
5246 IN LPGUID MessageGuid
,
5247 IN USHORT MessageNumber
,
5251 /* FIXME: Get va_list from where? */
5256 IN TRACEHANDLE LoggerHandle
,
5257 IN ULONG MessageFlags
,
5258 IN LPGUID MessageGuid
,
5259 IN USHORT MessageNumber
,
5260 IN
va_list MessageArgList
);
5264 /** Kernel debugger routines **/
5281 KdRefreshDebuggerNotPresent(
5285 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
5290 IN KD_OPTION Option
,
5291 IN ULONG InBufferBytes OPTIONAL
,
5293 IN ULONG OutBufferBytes OPTIONAL
,
5294 OUT PVOID OutBuffer
,
5295 OUT PULONG OutBufferNeeded OPTIONAL
);
5306 DbgBreakPointWithStatus(
5319 IN ULONG ComponentId
,
5327 IN ULONG ComponentId
,
5334 vDbgPrintExWithPrefix(
5336 IN ULONG ComponentId
,
5344 DbgPrintReturnControlC(
5353 IN ULONG MaximumResponseLength
5359 DbgQueryDebugFilterState(
5360 IN ULONG ComponentId
,
5366 DbgSetDebugFilterState(
5367 IN ULONG ComponentId
,
5373 #define KdPrint(_x_) DbgPrint _x_
5374 #define KdPrintEx(_x_) DbgPrintEx _x_
5375 #define KdBreakPoint() DbgBreakPoint()
5376 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
5380 #define KdPrint(_x_)
5381 #define KdPrintEx(_x_)
5382 #define KdBreakPoint()
5383 #define KdBreakPointWithStatus(s)
5387 #if defined(__GNUC__)
5389 extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent
;
5390 extern NTKERNELAPI BOOLEAN KdDebuggerEnabled
;
5391 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
5392 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
5394 #elif defined(_NTDDK_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
5396 extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent
;
5397 extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled
;
5398 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
5399 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
5403 extern BOOLEAN KdDebuggerNotPresent
;
5404 extern BOOLEAN KdDebuggerEnabled
;
5405 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
5406 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
5410 /** Stuff from winnt4.h */
5412 #ifndef DMA_MACROS_DEFINED
5414 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5416 //DECLSPEC_DEPRECATED_DDK
5420 IoFlushAdapterBuffers(
5421 IN PADAPTER_OBJECT AdapterObject
,
5423 IN PVOID MapRegisterBase
,
5426 IN BOOLEAN WriteToDevice
);
5428 //DECLSPEC_DEPRECATED_DDK
5432 IoFreeAdapterChannel(
5433 IN PADAPTER_OBJECT AdapterObject
);
5435 //DECLSPEC_DEPRECATED_DDK
5440 IN PADAPTER_OBJECT AdapterObject
,
5441 IN PVOID MapRegisterBase
,
5442 IN ULONG NumberOfMapRegisters
);
5444 //DECLSPEC_DEPRECATED_DDK
5449 IN PADAPTER_OBJECT AdapterObject
,
5451 IN PVOID MapRegisterBase
,
5453 IN OUT PULONG Length
,
5454 IN BOOLEAN WriteToDevice
);
5457 #endif // (NTDDI_VERSION >= NTDDI_WIN2K)
5458 #endif // !defined(DMA_MACROS_DEFINED)
5464 IN PUNICODE_STRING RegistryPath
,
5465 IN PUNICODE_STRING DriverClassName OPTIONAL
,
5466 IN PDRIVER_OBJECT DriverObject
,
5467 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
5468 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources
,
5469 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
5474 IoAttachDeviceByPointer(
5475 IN PDEVICE_OBJECT SourceDevice
,
5476 IN PDEVICE_OBJECT TargetDevice
);
5481 MmIsNonPagedSystemAddressValid(
5482 IN PVOID VirtualAddress
);
5484 #if defined(_AMD64_) || defined(_IA64_)
5485 //DECLSPEC_DEPRECATED_DDK_WINXP
5489 RtlLargeIntegerDivide(
5490 IN LARGE_INTEGER Dividend
,
5491 IN LARGE_INTEGER Divisor
,
5492 IN OUT PLARGE_INTEGER Remainder
)
5495 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
5497 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
5504 RtlLargeIntegerDivide(
5505 IN LARGE_INTEGER Dividend
,
5506 IN LARGE_INTEGER Divisor
,
5507 IN OUT PLARGE_INTEGER Remainder
);
5513 ExInterlockedDecrementLong(
5515 IN PKSPIN_LOCK Lock
);
5520 ExInterlockedExchangeUlong(
5523 IN PKSPIN_LOCK Lock
);
5528 ExInterlockedIncrementLong(
5530 IN PKSPIN_LOCK Lock
);
5535 HalAcquireDisplayOwnership(
5536 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
5541 HalAllocateAdapterChannel(
5542 IN PADAPTER_OBJECT AdapterObject
,
5543 IN PWAIT_CONTEXT_BLOCK Wcb
,
5544 IN ULONG NumberOfMapRegisters
,
5545 IN PDRIVER_CONTROL ExecutionRoutine
);
5550 HalAllocateCommonBuffer(
5551 IN PADAPTER_OBJECT AdapterObject
,
5553 OUT PPHYSICAL_ADDRESS LogicalAddress
,
5554 IN BOOLEAN CacheEnabled
);
5559 HalAssignSlotResources(
5560 IN PUNICODE_STRING RegistryPath
,
5561 IN PUNICODE_STRING DriverClassName
,
5562 IN PDRIVER_OBJECT DriverObject
,
5563 IN PDEVICE_OBJECT DeviceObject
,
5564 IN INTERFACE_TYPE BusType
,
5566 IN ULONG SlotNumber
,
5567 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
5572 HalFreeCommonBuffer(
5573 IN PADAPTER_OBJECT AdapterObject
,
5575 IN PHYSICAL_ADDRESS LogicalAddress
,
5576 IN PVOID VirtualAddress
,
5577 IN BOOLEAN CacheEnabled
);
5583 IN PDEVICE_DESCRIPTION DeviceDescription
,
5584 IN OUT PULONG NumberOfMapRegisters
);
5590 IN BUS_DATA_TYPE BusDataType
,
5592 IN ULONG SlotNumber
,
5599 HalGetBusDataByOffset(
5600 IN BUS_DATA_TYPE BusDataType
,
5602 IN ULONG SlotNumber
,
5610 HalGetDmaAlignmentRequirement(
5616 HalGetInterruptVector(
5617 IN INTERFACE_TYPE InterfaceType
,
5619 IN ULONG BusInterruptLevel
,
5620 IN ULONG BusInterruptVector
,
5622 OUT PKAFFINITY Affinity
);
5628 IN PADAPTER_OBJECT AdapterObject
);
5634 IN BUS_DATA_TYPE BusDataType
,
5636 IN ULONG SlotNumber
,
5643 HalSetBusDataByOffset(
5644 IN BUS_DATA_TYPE BusDataType
,
5646 IN ULONG SlotNumber
,
5654 HalTranslateBusAddress(
5655 IN INTERFACE_TYPE InterfaceType
,
5657 IN PHYSICAL_ADDRESS BusAddress
,
5658 IN OUT PULONG AddressSpace
,
5659 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
5664 RtlLargeIntegerEqualToZero(
5665 IN LARGE_INTEGER Operand
);
5670 RtlLargeIntegerGreaterOrEqualToZero(
5671 IN LARGE_INTEGER Operand
);
5676 RtlLargeIntegerGreaterThan(
5677 IN LARGE_INTEGER Operand1
,
5678 IN LARGE_INTEGER Operand2
);
5683 RtlLargeIntegerGreaterThanOrEqualTo(
5684 IN LARGE_INTEGER Operand1
,
5685 IN LARGE_INTEGER Operand2
);
5690 RtlLargeIntegerGreaterThanZero(
5691 IN LARGE_INTEGER Operand
);
5696 RtlLargeIntegerLessOrEqualToZero(
5697 IN LARGE_INTEGER Operand
);
5702 RtlLargeIntegerLessThan(
5703 IN LARGE_INTEGER Operand1
,
5704 IN LARGE_INTEGER Operand2
);
5709 RtlLargeIntegerLessThanOrEqualTo(
5710 IN LARGE_INTEGER Operand1
,
5711 IN LARGE_INTEGER Operand2
);
5716 RtlLargeIntegerLessThanZero(
5717 IN LARGE_INTEGER Operand
);
5722 RtlLargeIntegerNegate(
5723 IN LARGE_INTEGER Subtrahend
);
5728 RtlLargeIntegerNotEqualTo(
5729 IN LARGE_INTEGER Operand1
,
5730 IN LARGE_INTEGER Operand2
);
5735 RtlLargeIntegerNotEqualToZero(
5736 IN LARGE_INTEGER Operand
);
5741 RtlLargeIntegerShiftLeft(
5742 IN LARGE_INTEGER LargeInteger
,
5743 IN CCHAR ShiftCount
);
5748 RtlLargeIntegerShiftRight(
5749 IN LARGE_INTEGER LargeInteger
,
5750 IN CCHAR ShiftCount
);
5755 RtlLargeIntegerSubtract(
5756 IN LARGE_INTEGER Minuend
,
5757 IN LARGE_INTEGER Subtrahend
);
5762 * COMPUTE_PAGES_SPANNED(
5766 #define COMPUTE_PAGES_SPANNED(Va, \
5768 (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
5772 ** Architecture specific structures
5780 Exfi386InterlockedIncrementLong(
5786 Exfi386InterlockedDecrementLong(
5792 Exfi386InterlockedExchangeUlong(
5796 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
5797 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
5798 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
5804 // NT-ARM is not documented
5813 #endif /* __WINDDK_H */