4 * Windows Device Driver Kit
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
26 /* Helper macro to enable gcc's extension. */
27 #ifndef __GNU_EXTENSION
29 #define __GNU_EXTENSION __extension__
31 #define __GNU_EXTENSION
45 /* Pseudo modifiers for parameters */
61 #define RESTRICTED_POINTER
63 #define DECLSPEC_ADDRSAFE
65 #ifdef NONAMELESSUNION
66 # define _DDK_DUMMYUNION_MEMBER(name) DUMMYUNIONNAME.name
67 # define _DDK_DUMMYUNION_N_MEMBER(n, name) DUMMYUNIONNAME##n.name
69 # define _DDK_DUMMYUNION_MEMBER(name) name
70 # define _DDK_DUMMYUNION_N_MEMBER(n, name) name
74 ** Forward declarations
80 struct _DRIVE_LAYOUT_INFORMATION_EX
;
81 struct _LOADER_PARAMETER_BLOCK
;
85 /* FIXME: Unknown definitions */
86 struct _SET_PARTITION_INFORMATION_EX
;
87 typedef ULONG WAIT_TYPE
;
90 typedef HANDLE TRACEHANDLE
;
91 typedef PVOID PWMILIB_CONTEXT
;
92 typedef ULONG LOGICAL
;
96 ** WmiLib specific structure
100 IrpProcessed
, // Irp was processed and possibly completed
101 IrpNotCompleted
, // Irp was process and NOT completed
102 IrpNotWmi
, // Irp is not a WMI irp
103 IrpForward
// Irp is wmi irp, but targeted at another device object
104 } SYSCTL_IRP_DISPOSITION
, *PSYSCTL_IRP_DISPOSITION
;
109 struct _COMPRESSED_DATA_INFO
;
111 #define KERNEL_STACK_SIZE 12288
112 #define KERNEL_LARGE_STACK_SIZE 61440
113 #define KERNEL_LARGE_STACK_COMMIT 12288
115 #define EXCEPTION_READ_FAULT 0
116 #define EXCEPTION_WRITE_FAULT 1
117 #define EXCEPTION_EXECUTE_FAULT 8
119 #define DPFLTR_ERROR_LEVEL 0
120 #define DPFLTR_WARNING_LEVEL 1
121 #define DPFLTR_TRACE_LEVEL 2
122 #define DPFLTR_INFO_LEVEL 3
123 #define DPFLTR_MASK 0x80000000
125 typedef enum _DPFLTR_TYPE
127 DPFLTR_SYSTEM_ID
= 0,
132 DPFLTR_CRASHDUMP_ID
= 5,
133 DPFLTR_CDAUDIO_ID
= 6,
135 DPFLTR_CLASSPNP_ID
= 8,
137 DPFLTR_REDBOOK_ID
= 10,
138 DPFLTR_STORPROP_ID
= 11,
139 DPFLTR_SCSIPORT_ID
= 12,
140 DPFLTR_SCSIMINIPORT_ID
= 13,
141 DPFLTR_CONFIG_ID
= 14,
142 DPFLTR_I8042PRT_ID
= 15,
143 DPFLTR_SERMOUSE_ID
= 16,
144 DPFLTR_LSERMOUS_ID
= 17,
145 DPFLTR_KBDHID_ID
= 18,
146 DPFLTR_MOUHID_ID
= 19,
147 DPFLTR_KBDCLASS_ID
= 20,
148 DPFLTR_MOUCLASS_ID
= 21,
149 DPFLTR_TWOTRACK_ID
= 22,
150 DPFLTR_WMILIB_ID
= 23,
153 DPFLTR_HALIA64_ID
= 26,
154 DPFLTR_VIDEO_ID
= 27,
155 DPFLTR_SVCHOST_ID
= 28,
156 DPFLTR_VIDEOPRT_ID
= 29,
157 DPFLTR_TCPIP_ID
= 30,
158 DPFLTR_DMSYNTH_ID
= 31,
159 DPFLTR_NTOSPNP_ID
= 32,
160 DPFLTR_FASTFAT_ID
= 33,
161 DPFLTR_SAMSS_ID
= 34,
162 DPFLTR_PNPMGR_ID
= 35,
163 DPFLTR_NETAPI_ID
= 36,
164 DPFLTR_SCSERVER_ID
= 37,
165 DPFLTR_SCCLIENT_ID
= 38,
166 DPFLTR_SERIAL_ID
= 39,
167 DPFLTR_SERENUM_ID
= 40,
169 DPFLTR_BOOTOK_ID
= 42,
170 DPFLTR_BOOTVRFY_ID
= 43,
171 DPFLTR_RPCPROXY_ID
= 44,
172 DPFLTR_AUTOCHK_ID
= 45,
173 DPFLTR_DCOMSS_ID
= 46,
174 DPFLTR_UNIMODEM_ID
= 47,
176 DPFLTR_FLTMGR_ID
= 49,
177 DPFLTR_WMICORE_ID
= 50,
178 DPFLTR_BURNENG_ID
= 51,
179 DPFLTR_IMAPI_ID
= 52,
181 DPFLTR_FUSION_ID
= 54,
182 DPFLTR_IDLETASK_ID
= 55,
183 DPFLTR_SOFTPCI_ID
= 56,
185 DPFLTR_MCHGR_ID
= 58,
187 DPFLTR_PCIIDE_ID
= 60,
188 DPFLTR_FLOPPY_ID
= 61,
190 DPFLTR_TERMSRV_ID
= 63,
191 DPFLTR_W32TIME_ID
= 64,
192 DPFLTR_PREFETCHER_ID
= 65,
193 DPFLTR_RSFILTER_ID
= 66,
194 DPFLTR_FCPORT_ID
= 67,
197 DPFLTR_DMCONFIG_ID
= 70,
198 DPFLTR_DMADMIN_ID
= 71,
199 DPFLTR_WSOCKTRANSPORT_ID
= 72,
201 DPFLTR_PNPMEM_ID
= 74,
202 DPFLTR_PROCESSOR_ID
= 75,
203 DPFLTR_DMSERVER_ID
= 76,
205 DPFLTR_INFINIBAND_ID
= 78,
206 DPFLTR_IHVDRIVER_ID
= 79,
207 DPFLTR_IHVVIDEO_ID
= 80,
208 DPFLTR_IHVAUDIO_ID
= 81,
209 DPFLTR_IHVNETWORK_ID
= 82,
210 DPFLTR_IHVSTREAMING_ID
= 83,
211 DPFLTR_IHVBUS_ID
= 84,
213 DPFLTR_RTLTHREADPOOL_ID
= 86,
215 DPFLTR_TCPIP6_ID
= 88,
216 DPFLTR_ISAPNP_ID
= 89,
218 DPFLTR_STORPORT_ID
= 91,
219 DPFLTR_STORMINIPORT_ID
= 92,
220 DPFLTR_PRINTSPOOLER_ID
= 93,
222 DPFLTR_VDSBAS_ID
= 95,
223 DPFLTR_VDSDYNDR_ID
= 96,
224 DPFLTR_VDSUTIL_ID
= 97,
225 DPFLTR_DFRGIFC_ID
= 98,
226 DPFLTR_DEFAULT_ID
= 99,
228 DPFLTR_DFSC_ID
= 101,
229 DPFLTR_WOW64_ID
= 102,
233 /* also in winnt.h */
235 #define FILE_COPY_STRUCTURED_STORAGE 0x00000041
236 #define FILE_STRUCTURED_STORAGE 0x00000441
240 #define THREAD_ALERT (0x0004)
242 /* Exported object types */
243 extern POBJECT_TYPE NTSYSAPI ExDesktopObjectType
;
244 extern POBJECT_TYPE NTSYSAPI ExEventObjectType
;
245 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType
;
246 extern POBJECT_TYPE NTSYSAPI ExWindowStationObjectType
;
247 extern ULONG NTSYSAPI IoDeviceHandlerObjectSize
;
248 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType
;
249 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType
;
250 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType
;
251 extern POBJECT_TYPE NTSYSAPI IoFileObjectType
;
252 extern POBJECT_TYPE NTSYSAPI PsThreadType
;
253 extern POBJECT_TYPE NTSYSAPI LpcPortObjectType
;
254 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType
;
255 extern POBJECT_TYPE NTSYSAPI PsProcessType
;
257 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
258 extern volatile CCHAR NTSYSAPI KeNumberProcessors
;
260 #if (NTDDI_VERSION >= NTDDI_WINXP)
261 extern CCHAR NTSYSAPI KeNumberProcessors
;
263 //extern PCCHAR KeNumberProcessors;
264 extern NTSYSAPI CCHAR KeNumberProcessors
; //FIXME: Note to Alex: I won't fix this atm, since I prefer to discuss this with you first.
268 #define MAX_WOW64_SHARED_ENTRIES 16
270 extern volatile KSYSTEM_TIME KeTickCount
;
272 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
273 #define NX_SUPPORT_POLICY_ALWAYSON 1
274 #define NX_SUPPORT_POLICY_OPTIN 2
275 #define NX_SUPPORT_POLICY_OPTOUT 3
277 typedef struct _KUSER_SHARED_DATA
279 ULONG TickCountLowDeprecated
;
280 ULONG TickCountMultiplier
;
281 volatile KSYSTEM_TIME InterruptTime
;
282 volatile KSYSTEM_TIME SystemTime
;
283 volatile KSYSTEM_TIME TimeZoneBias
;
284 USHORT ImageNumberLow
;
285 USHORT ImageNumberHigh
;
286 WCHAR NtSystemRoot
[260];
287 ULONG MaxStackTraceDepth
;
288 ULONG CryptoExponent
;
290 ULONG LargePageMinimum
;
292 NT_PRODUCT_TYPE NtProductType
;
293 BOOLEAN ProductTypeIsValid
;
294 ULONG NtMajorVersion
;
295 ULONG NtMinorVersion
;
296 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
299 volatile ULONG TimeSlip
;
300 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
301 LARGE_INTEGER SystemExpirationDate
;
303 BOOLEAN KdDebuggerEnabled
;
304 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
305 UCHAR NXSupportPolicy
;
307 volatile ULONG ActiveConsoleId
;
308 volatile ULONG DismountCount
;
309 ULONG ComPlusPackage
;
310 ULONG LastSystemRITEventTickCount
;
311 ULONG NumberOfPhysicalPages
;
312 BOOLEAN SafeBootMode
;
315 ULONGLONG TestRetInstruction
;
317 ULONG SystemCallReturn
;
318 ULONGLONG SystemCallPad
[3];
319 __GNU_EXTENSION
union {
320 volatile KSYSTEM_TIME TickCount
;
321 volatile ULONG64 TickCountQuad
;
324 #if (NTDDI_VERSION >= NTDDI_WS03)
325 LONGLONG ConsoleSessionForegroundProcessId
;
326 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
328 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
329 USHORT UserModeGlobalLogger
[8];
330 ULONG HeapTracingPid
[2];
331 ULONG CritSecTracingPid
[2];
332 __GNU_EXTENSION
union
334 ULONG SharedDataFlags
;
335 __GNU_EXTENSION
struct
337 ULONG DbgErrorPortPresent
:1;
338 ULONG DbgElevationEnabled
:1;
339 ULONG DbgVirtEnabled
:1;
340 ULONG DbgInstallerDetectEnabled
:1;
344 ULONG ImageFileExecutionOptions
;
345 KAFFINITY ActiveProcessorAffinity
;
347 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
350 ** IRP function codes
353 #define IRP_MN_QUERY_DIRECTORY 0x01
354 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
356 #define IRP_MN_USER_FS_REQUEST 0x00
357 #define IRP_MN_MOUNT_VOLUME 0x01
358 #define IRP_MN_VERIFY_VOLUME 0x02
359 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
360 #define IRP_MN_TRACK_LINK 0x04
361 #define IRP_MN_KERNEL_CALL 0x04
363 #define IRP_MN_LOCK 0x01
364 #define IRP_MN_UNLOCK_SINGLE 0x02
365 #define IRP_MN_UNLOCK_ALL 0x03
366 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
368 #define IRP_MN_NORMAL 0x00
369 #define IRP_MN_DPC 0x01
370 #define IRP_MN_MDL 0x02
371 #define IRP_MN_COMPLETE 0x04
372 #define IRP_MN_COMPRESSED 0x08
374 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
375 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
376 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
378 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
380 typedef EXCEPTION_DISPOSITION
381 (DDKAPI
*PEXCEPTION_ROUTINE
)(
382 IN
struct _EXCEPTION_RECORD
*ExceptionRecord
,
383 IN PVOID EstablisherFrame
,
384 IN OUT
struct _CONTEXT
*ContextRecord
,
385 IN OUT PVOID DispatcherContext
);
388 (DDKAPI
*PDRIVER_ENTRY
)(
389 IN
struct _DRIVER_OBJECT
*DriverObject
,
390 IN PUNICODE_STRING RegistryPath
);
393 (DDKAPI
*PDRIVER_REINITIALIZE
)(
394 IN
struct _DRIVER_OBJECT
*DriverObject
,
399 (DDKAPI
*PKTRANSFER_ROUTINE
)(
402 #define ASSERT_GATE(object) \
403 ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
404 (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
406 #define TIMER_TABLE_SIZE 512
407 #define TIMER_TABLE_SHIFT 9
409 #define ASSERT_TIMER(E) \
410 ASSERT(((E)->Header.Type == TimerNotificationObject) || \
411 ((E)->Header.Type == TimerSynchronizationObject))
413 #define ASSERT_MUTANT(E) \
414 ASSERT((E)->Header.Type == MutantObject)
416 #define ASSERT_SEMAPHORE(E) \
417 ASSERT((E)->Header.Type == SemaphoreObject)
419 #define ASSERT_EVENT(E) \
420 ASSERT(((E)->Header.Type == NotificationEvent) || \
421 ((E)->Header.Type == SynchronizationEvent))
423 #define KEYBOARD_INSERT_ON 0x08
424 #define KEYBOARD_CAPS_LOCK_ON 0x04
425 #define KEYBOARD_NUM_LOCK_ON 0x02
426 #define KEYBOARD_SCROLL_LOCK_ON 0x01
427 #define KEYBOARD_ALT_KEY_DOWN 0x80
428 #define KEYBOARD_CTRL_KEY_DOWN 0x40
429 #define KEYBOARD_LEFT_SHIFT_DOWN 0x20
430 #define KEYBOARD_RIGHT_SHIFT_DOWN 0x10
432 typedef struct _IO_COUNTERS
{
433 ULONGLONG ReadOperationCount
;
434 ULONGLONG WriteOperationCount
;
435 ULONGLONG OtherOperationCount
;
436 ULONGLONG ReadTransferCount
;
437 ULONGLONG WriteTransferCount
;
438 ULONGLONG OtherTransferCount
;
439 } IO_COUNTERS
, *PIO_COUNTERS
;
441 typedef struct _VM_COUNTERS
443 SIZE_T PeakVirtualSize
;
445 ULONG PageFaultCount
;
446 SIZE_T PeakWorkingSetSize
;
447 SIZE_T WorkingSetSize
;
448 SIZE_T QuotaPeakPagedPoolUsage
;
449 SIZE_T QuotaPagedPoolUsage
;
450 SIZE_T QuotaPeakNonPagedPoolUsage
;
451 SIZE_T QuotaNonPagedPoolUsage
;
452 SIZE_T PagefileUsage
;
453 SIZE_T PeakPagefileUsage
;
454 } VM_COUNTERS
, *PVM_COUNTERS
;
456 typedef struct _VM_COUNTERS_EX
458 SIZE_T PeakVirtualSize
;
460 ULONG PageFaultCount
;
461 SIZE_T PeakWorkingSetSize
;
462 SIZE_T WorkingSetSize
;
463 SIZE_T QuotaPeakPagedPoolUsage
;
464 SIZE_T QuotaPagedPoolUsage
;
465 SIZE_T QuotaPeakNonPagedPoolUsage
;
466 SIZE_T QuotaNonPagedPoolUsage
;
467 SIZE_T PagefileUsage
;
468 SIZE_T PeakPagefileUsage
;
470 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
472 typedef struct _POOLED_USAGE_AND_LIMITS
474 SIZE_T PeakPagedPoolUsage
;
475 SIZE_T PagedPoolUsage
;
476 SIZE_T PagedPoolLimit
;
477 SIZE_T PeakNonPagedPoolUsage
;
478 SIZE_T NonPagedPoolUsage
;
479 SIZE_T NonPagedPoolLimit
;
480 SIZE_T PeakPagefileUsage
;
481 SIZE_T PagefileUsage
;
482 SIZE_T PagefileLimit
;
483 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
485 typedef struct _CONTROLLER_OBJECT
{
488 PVOID ControllerExtension
;
489 KDEVICE_QUEUE DeviceWaitQueue
;
491 LARGE_INTEGER Spare2
;
492 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
494 /* DEVICE_OBJECT.Flags */
496 #define DO_DEVICE_HAS_NAME 0x00000040
497 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
498 #define DO_LONG_TERM_REQUESTS 0x00000200
499 #define DO_NEVER_LAST_DEVICE 0x00000400
500 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
501 #define DO_XIP 0x00020000
503 #define DRVO_REINIT_REGISTERED 0x00000008
504 #define DRVO_INITIALIZED 0x00000010
505 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
506 #define DRVO_LEGACY_RESOURCES 0x00000040
508 typedef enum _ARBITER_REQUEST_SOURCE
{
509 ArbiterRequestUndefined
= -1,
510 ArbiterRequestLegacyReported
,
511 ArbiterRequestHalReported
,
512 ArbiterRequestLegacyAssigned
,
513 ArbiterRequestPnpDetected
,
514 ArbiterRequestPnpEnumerated
515 } ARBITER_REQUEST_SOURCE
;
517 typedef enum _ARBITER_RESULT
{
518 ArbiterResultUndefined
= -1,
519 ArbiterResultSuccess
,
520 ArbiterResultExternalConflict
,
521 ArbiterResultNullRequest
524 typedef enum _ARBITER_ACTION
{
525 ArbiterActionTestAllocation
,
526 ArbiterActionRetestAllocation
,
527 ArbiterActionCommitAllocation
,
528 ArbiterActionRollbackAllocation
,
529 ArbiterActionQueryAllocatedResources
,
530 ArbiterActionWriteReservedResources
,
531 ArbiterActionQueryConflict
,
532 ArbiterActionQueryArbitrate
,
533 ArbiterActionAddReserved
,
534 ArbiterActionBootAllocation
535 } ARBITER_ACTION
, *PARBITER_ACTION
;
537 typedef struct _ARBITER_CONFLICT_INFO
{
538 PDEVICE_OBJECT OwningObject
;
541 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
543 typedef struct _ARBITER_PARAMETERS
{
546 IN OUT PLIST_ENTRY ArbitrationList
;
547 IN ULONG AllocateFromCount
;
548 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
552 IN OUT PLIST_ENTRY ArbitrationList
;
553 IN ULONG AllocateFromCount
;
554 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
558 IN OUT PLIST_ENTRY ArbitrationList
;
562 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
563 } QueryAllocatedResources
;
566 IN PDEVICE_OBJECT PhysicalDeviceObject
;
567 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
568 OUT PULONG ConflictCount
;
569 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
573 IN PLIST_ENTRY ArbitrationList
;
577 IN PDEVICE_OBJECT ReserveDevice
;
580 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
582 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
584 typedef struct _ARBITER_LIST_ENTRY
{
585 LIST_ENTRY ListEntry
;
586 ULONG AlternativeCount
;
587 PIO_RESOURCE_DESCRIPTOR Alternatives
;
588 PDEVICE_OBJECT PhysicalDeviceObject
;
589 ARBITER_REQUEST_SOURCE RequestSource
;
592 INTERFACE_TYPE InterfaceType
;
595 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
596 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
597 ARBITER_RESULT Result
;
598 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
601 (DDKAPI
*PARBITER_HANDLER
)(
603 IN ARBITER_ACTION Action
,
604 IN OUT PARBITER_PARAMETERS Parameters
);
606 #define ARBITER_PARTIAL 0x00000001
608 typedef struct _ARBITER_INTERFACE
{
612 PINTERFACE_REFERENCE InterfaceReference
;
613 PINTERFACE_DEREFERENCE InterfaceDereference
;
614 PARBITER_HANDLER ArbiterHandler
;
616 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
618 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
619 HalInstalledBusInformation
,
620 HalProfileSourceInformation
,
621 HalInformationClassUnused1
,
623 HalProcessorSpeedInformation
,
624 HalCallbackInformation
,
625 HalMapRegisterInformation
,
626 HalMcaLogInformation
,
627 HalFrameBufferCachingInformation
,
628 HalDisplayBiosInformation
,
629 HalProcessorFeatureInformation
,
630 HalNumaTopologyInterface
,
632 HalCmcLogInformation
,
633 HalCpeLogInformation
,
634 HalQueryMcaInterface
,
635 HalQueryAMLIIllegalIOPortAddresses
,
636 HalQueryMaxHotPlugMemoryAddress
,
637 HalPartitionIpiInterface
,
638 HalPlatformInformation
,
639 HalQueryProfileSourceList
640 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
642 typedef enum _HAL_SET_INFORMATION_CLASS
{
643 HalProfileSourceInterval
,
644 HalProfileSourceInterruptHandler
,
645 HalMcaRegisterDriver
,
646 HalKernelErrorHandler
,
647 HalCmcRegisterDriver
,
648 HalCpeRegisterDriver
,
652 HalGenerateCmcInterrupt
653 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
655 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
657 KPROFILE_SOURCE Source
;
659 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
661 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
663 KPROFILE_SOURCE Source
;
666 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
668 typedef struct _MAP_REGISTER_ENTRY
671 BOOLEAN WriteToDevice
;
672 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
679 PUCHAR TranslatedAddress
;
681 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
685 PHYSICAL_ADDRESS Start
;
686 PHYSICAL_ADDRESS MaxEnd
;
687 PVOID VirtualAddress
;
691 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
703 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
704 DEBUG_MEMORY_REQUIREMENTS Memory
;
705 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
707 /* Function Type Defintions for Dispatch Functions */
708 struct _DEVICE_CONTROL_CONTEXT
;
711 (DDKAPI
*PDEVICE_CONTROL_COMPLETION
)(
712 IN
struct _DEVICE_CONTROL_CONTEXT
*ControlContext
);
714 typedef struct _DEVICE_CONTROL_CONTEXT
{
716 PDEVICE_HANDLER_OBJECT DeviceHandler
;
717 PDEVICE_OBJECT DeviceObject
;
722 } DEVICE_CONTROL_CONTEXT
, *PDEVICE_CONTROL_CONTEXT
;
724 typedef struct _PM_DISPATCH_TABLE
{
728 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
730 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
731 TranslateChildToParent
,
732 TranslateParentToChild
733 } RESOURCE_TRANSLATION_DIRECTION
;
736 (DDKAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
738 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
739 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
740 IN ULONG AlternativesCount
,
741 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
742 IN PDEVICE_OBJECT PhysicalDeviceObject
,
743 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
746 (DDKAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
748 IN PIO_RESOURCE_DESCRIPTOR Source
,
749 IN PDEVICE_OBJECT PhysicalDeviceObject
,
750 OUT PULONG TargetCount
,
751 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
753 typedef struct _TRANSLATOR_INTERFACE
{
757 PINTERFACE_REFERENCE InterfaceReference
;
758 PINTERFACE_DEREFERENCE InterfaceDereference
;
759 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
760 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
761 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
764 (DDKAPI
*pHalDeviceControl
)(
765 IN PDEVICE_HANDLER_OBJECT DeviceHandler
,
766 IN PDEVICE_OBJECT DeviceObject
,
767 IN ULONG ControlCode
,
768 IN OUT PVOID Buffer OPTIONAL
,
769 IN OUT PULONG BufferLength OPTIONAL
,
771 IN PDEVICE_CONTROL_COMPLETION CompletionRoutine
);
774 (FASTCALL
*pHalExamineMBR
)(
775 IN PDEVICE_OBJECT DeviceObject
,
777 IN ULONG MBRTypeIdentifier
,
781 (FASTCALL
*pHalIoAssignDriveLetters
)(
782 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
783 IN PSTRING NtDeviceName
,
784 OUT PUCHAR NtSystemPath
,
785 OUT PSTRING NtSystemPathString
);
788 (FASTCALL
*pHalIoReadPartitionTable
)(
789 IN PDEVICE_OBJECT DeviceObject
,
791 IN BOOLEAN ReturnRecognizedPartitions
,
792 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
795 (FASTCALL
*pHalIoSetPartitionInformation
)(
796 IN PDEVICE_OBJECT DeviceObject
,
798 IN ULONG PartitionNumber
,
799 IN ULONG PartitionType
);
802 (FASTCALL
*pHalIoWritePartitionTable
)(
803 IN PDEVICE_OBJECT DeviceObject
,
805 IN ULONG SectorsPerTrack
,
806 IN ULONG NumberOfHeads
,
807 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
810 (FASTCALL
*pHalHandlerForBus
)(
811 IN INTERFACE_TYPE InterfaceType
,
815 (FASTCALL
*pHalReferenceBusHandler
)(
816 IN PBUS_HANDLER BusHandler
);
819 (DDKAPI
*pHalQuerySystemInformation
)(
820 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
823 OUT PULONG ReturnedLength
);
826 (DDKAPI
*pHalSetSystemInformation
)(
827 IN HAL_SET_INFORMATION_CLASS InformationClass
,
832 (DDKAPI
*pHalQueryBusSlots
)(
833 IN PBUS_HANDLER BusHandler
,
835 OUT PULONG SlotNumbers
,
836 OUT PULONG ReturnedLength
);
839 (DDKAPI
*pHalInitPnpDriver
)(
843 (DDKAPI
*pHalInitPowerManagement
)(
844 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
845 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
847 typedef struct _DMA_ADAPTER
*
848 (DDKAPI
*pHalGetDmaAdapter
)(
850 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
851 OUT PULONG NumberOfMapRegisters
);
854 (DDKAPI
*pHalGetInterruptTranslator
)(
855 IN INTERFACE_TYPE ParentInterfaceType
,
856 IN ULONG ParentBusNumber
,
857 IN INTERFACE_TYPE BridgeInterfaceType
,
860 OUT PTRANSLATOR_INTERFACE Translator
,
861 OUT PULONG BridgeBusNumber
);
864 (DDKAPI
*pHalStartMirroring
)(
868 (DDKAPI
*pHalEndMirroring
)(
869 IN ULONG PassNumber
);
872 (DDKAPI
*pHalMirrorPhysicalMemory
)(
873 IN PHYSICAL_ADDRESS PhysicalAddress
,
874 IN LARGE_INTEGER NumberOfBytes
);
877 (DDKAPI
*pHalMirrorVerify
)(
878 IN PHYSICAL_ADDRESS PhysicalAddress
,
879 IN LARGE_INTEGER NumberOfBytes
);
882 (DDKAPI
*pHalEndOfBoot
)(
887 (DDKAPI
*pHalTranslateBusAddress
)(
888 IN INTERFACE_TYPE InterfaceType
,
890 IN PHYSICAL_ADDRESS BusAddress
,
891 IN OUT PULONG AddressSpace
,
892 OUT PPHYSICAL_ADDRESS TranslatedAddress
897 (DDKAPI
*pHalAssignSlotResources
)(
898 IN PUNICODE_STRING RegistryPath
,
899 IN PUNICODE_STRING DriverClassName OPTIONAL
,
900 IN PDRIVER_OBJECT DriverObject
,
901 IN PDEVICE_OBJECT DeviceObject
,
902 IN INTERFACE_TYPE BusType
,
905 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
910 (DDKAPI
*pHalHaltSystem
)(
916 (DDKAPI
*pHalResetDisplay
)(
922 (DDKAPI
*pHalVectorToIDTEntry
)(
928 (DDKAPI
*pHalFindBusAddressTranslation
)(
929 IN PHYSICAL_ADDRESS BusAddress
,
930 IN OUT PULONG AddressSpace
,
931 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
932 IN OUT PULONG_PTR Context
,
938 (DDKAPI
*pKdSetupPciDeviceForDebugging
)(
939 IN PVOID LoaderBlock OPTIONAL
,
940 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
945 (DDKAPI
*pKdReleasePciDeviceForDebugging
)(
946 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
951 (DDKAPI
*pKdGetAcpiTablePhase0
)(
952 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
958 (DDKAPI
*pKdCheckPowerButton
)(
964 (DDKAPI
*pHalGetInterruptVector
)(
965 IN INTERFACE_TYPE InterfaceType
,
967 IN ULONG BusInterruptLevel
,
968 IN ULONG BusInterruptVector
,
970 OUT PKAFFINITY Affinity
975 (DDKAPI
*pHalGetVectorInput
)(
977 IN KAFFINITY Affinity
,
979 OUT PKINTERRUPT_POLARITY Polarity
984 (DDKAPI
*pKdMapPhysicalMemory64
)(
985 IN PHYSICAL_ADDRESS PhysicalAddress
,
991 (DDKAPI
*pKdUnmapVirtualAddress
)(
992 IN PVOID VirtualAddress
,
998 (DDKAPI
*pKdGetPciDataByOffset
)(
1000 IN ULONG SlotNumber
,
1008 (DDKAPI
*pKdSetPciDataByOffset
)(
1010 IN ULONG SlotNumber
,
1017 (DDKAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
1018 ULONG Columns
, ULONG Rows
);
1022 pHalQuerySystemInformation HalQuerySystemInformation
;
1023 pHalSetSystemInformation HalSetSystemInformation
;
1024 pHalQueryBusSlots HalQueryBusSlots
;
1026 pHalExamineMBR HalExamineMBR
;
1027 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
1028 pHalIoReadPartitionTable HalIoReadPartitionTable
;
1029 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
1030 pHalIoWritePartitionTable HalIoWritePartitionTable
;
1031 pHalHandlerForBus HalReferenceHandlerForBus
;
1032 pHalReferenceBusHandler HalReferenceBusHandler
;
1033 pHalReferenceBusHandler HalDereferenceBusHandler
;
1034 pHalInitPnpDriver HalInitPnpDriver
;
1035 pHalInitPowerManagement HalInitPowerManagement
;
1036 pHalGetDmaAdapter HalGetDmaAdapter
;
1037 pHalGetInterruptTranslator HalGetInterruptTranslator
;
1038 pHalStartMirroring HalStartMirroring
;
1039 pHalEndMirroring HalEndMirroring
;
1040 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
1041 pHalEndOfBoot HalEndOfBoot
;
1042 pHalMirrorVerify HalMirrorVerify
;
1043 } HAL_DISPATCH
, *PHAL_DISPATCH
;
1045 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTHAL_)
1046 extern NTSYSAPI PHAL_DISPATCH HalDispatchTable
;
1047 #define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable)
1049 extern __declspec(dllexport
) HAL_DISPATCH HalDispatchTable
;
1050 #define HALDISPATCH (&HalDispatchTable)
1053 #define HAL_DISPATCH_VERSION 3
1054 #define HalDispatchTableVersion HALDISPATCH->Version
1055 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
1056 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
1057 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
1058 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
1059 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
1060 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
1061 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
1062 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
1063 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
1064 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
1065 #define HalStartMirroring HALDISPATCH->HalStartMirroring
1066 #define HalEndMirroring HALDISPATCH->HalEndMirroring
1067 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
1068 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
1069 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
1071 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1072 ULONG AlignmentRequirement
;
1073 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1075 typedef struct _FILE_NAME_INFORMATION
{
1076 ULONG FileNameLength
;
1078 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1081 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1082 ULONG FileAttributes
;
1084 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1086 typedef struct _FILE_DISPOSITION_INFORMATION
{
1088 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1090 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1091 LARGE_INTEGER EndOfFile
;
1092 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1094 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1095 LARGE_INTEGER ValidDataLength
;
1096 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1098 typedef union _FILE_SEGMENT_ELEMENT
{
1100 ULONGLONG Alignment
;
1101 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1103 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
1105 typedef struct _KEY_USER_FLAGS_INFORMATION
{
1107 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
1109 #define PCI_ADDRESS_MEMORY_SPACE 0x00000000
1111 typedef struct _OSVERSIONINFOA
{
1112 ULONG dwOSVersionInfoSize
;
1113 ULONG dwMajorVersion
;
1114 ULONG dwMinorVersion
;
1115 ULONG dwBuildNumber
;
1117 CHAR szCSDVersion
[128];
1118 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
1120 typedef struct _OSVERSIONINFOW
{
1121 ULONG dwOSVersionInfoSize
;
1122 ULONG dwMajorVersion
;
1123 ULONG dwMinorVersion
;
1124 ULONG dwBuildNumber
;
1126 WCHAR szCSDVersion
[128];
1127 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
1130 typedef OSVERSIONINFOW OSVERSIONINFO
;
1131 typedef POSVERSIONINFOW POSVERSIONINFO
;
1132 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
1134 typedef OSVERSIONINFOA OSVERSIONINFO
;
1135 typedef POSVERSIONINFOA POSVERSIONINFO
;
1136 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
1139 typedef struct _OSVERSIONINFOEXA
{
1140 ULONG dwOSVersionInfoSize
;
1141 ULONG dwMajorVersion
;
1142 ULONG dwMinorVersion
;
1143 ULONG dwBuildNumber
;
1145 CHAR szCSDVersion
[128];
1146 USHORT wServicePackMajor
;
1147 USHORT wServicePackMinor
;
1151 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
1153 typedef struct _OSVERSIONINFOEXW
{
1154 ULONG dwOSVersionInfoSize
;
1155 ULONG dwMajorVersion
;
1156 ULONG dwMinorVersion
;
1157 ULONG dwBuildNumber
;
1159 WCHAR szCSDVersion
[128];
1160 USHORT wServicePackMajor
;
1161 USHORT wServicePackMinor
;
1165 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
1168 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
1169 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
1170 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
1172 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
1173 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
1174 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
1180 VerSetConditionMask(
1181 IN ULONGLONG ConditionMask
,
1183 IN UCHAR Condition
);
1185 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
1186 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
1187 (TypeBitMask), (ComparisonType)))
1189 /* RtlVerifyVersionInfo() TypeMask */
1191 #define VER_MINORVERSION 0x0000001
1192 #define VER_MAJORVERSION 0x0000002
1193 #define VER_BUILDNUMBER 0x0000004
1194 #define VER_PLATFORMID 0x0000008
1195 #define VER_SERVICEPACKMINOR 0x0000010
1196 #define VER_SERVICEPACKMAJOR 0x0000020
1197 #define VER_SUITENAME 0x0000040
1198 #define VER_PRODUCT_TYPE 0x0000080
1200 /* RtlVerifyVersionInfo() ComparisonType */
1203 #define VER_GREATER 2
1204 #define VER_GREATER_EQUAL 3
1206 #define VER_LESS_EQUAL 5
1210 #define VER_CONDITION_MASK 7
1211 #define VER_NUM_BITS_PER_CONDITION_MASK 3
1216 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
) (
1218 struct _RTL_RANGE
*Range
1221 typedef struct _CONFIGURATION_INFORMATION
{
1226 ULONG ScsiPortCount
;
1228 ULONG ParallelCount
;
1229 BOOLEAN AtDiskPrimaryAddressClaimed
;
1230 BOOLEAN AtDiskSecondaryAddressClaimed
;
1232 ULONG MediumChangerCount
;
1233 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
1235 typedef enum _CONFIGURATION_TYPE
{
1238 FloatingPointProcessor
,
1248 MultiFunctionAdapter
,
1262 FloppyDiskPeripheral
,
1275 RealModeIrqRoutingTable
,
1276 RealModePCIEnumeration
,
1278 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
1281 (DDKAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
1283 IN PUNICODE_STRING PathName
,
1284 IN INTERFACE_TYPE BusType
,
1286 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
1287 IN CONFIGURATION_TYPE ControllerType
,
1288 IN ULONG ControllerNumber
,
1289 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
1290 IN CONFIGURATION_TYPE PeripheralType
,
1291 IN ULONG PeripheralNumber
,
1292 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
1294 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
1295 IoQueryDeviceIdentifier
= 0,
1296 IoQueryDeviceConfigurationData
,
1297 IoQueryDeviceComponentInformation
,
1298 IoQueryDeviceMaxData
1299 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
1302 (DDKAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
1304 IN HANDLE ProcessId
,
1308 (DDKAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
1309 IN HANDLE ProcessId
,
1313 typedef struct _IMAGE_INFO
{
1314 _ANONYMOUS_UNION
union {
1316 _ANONYMOUS_STRUCT
struct {
1317 ULONG ImageAddressingMode
: 8;
1318 ULONG SystemModeImage
: 1;
1319 ULONG ImageMappedToAllPids
: 1;
1320 ULONG Reserved
: 22;
1324 ULONG ImageSelector
;
1326 ULONG ImageSectionNumber
;
1327 } IMAGE_INFO
, *PIMAGE_INFO
;
1329 #define IMAGE_ADDRESSING_MODE_32BIT 3
1332 (DDKAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
1333 IN PUNICODE_STRING FullImageName
,
1334 IN HANDLE ProcessId
,
1335 IN PIMAGE_INFO ImageInfo
);
1337 #pragma pack(push,4)
1338 typedef enum _BUS_DATA_TYPE
{
1339 ConfigurationSpaceUndefined
= -1,
1347 PCMCIAConfiguration
,
1350 PNPISAConfiguration
,
1351 SgiInternalConfiguration
,
1353 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
1356 typedef struct _NT_TIB
{
1357 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
1361 _ANONYMOUS_UNION
union {
1365 PVOID ArbitraryUserPointer
;
1366 struct _NT_TIB
*Self
;
1369 typedef struct _NT_TIB32
{
1370 ULONG ExceptionList
;
1374 __GNU_EXTENSION
union {
1378 ULONG ArbitraryUserPointer
;
1380 } NT_TIB32
,*PNT_TIB32
;
1382 typedef struct _NT_TIB64
{
1383 ULONG64 ExceptionList
;
1386 ULONG64 SubSystemTib
;
1387 __GNU_EXTENSION
union {
1391 ULONG64 ArbitraryUserPointer
;
1393 } NT_TIB64
,*PNT_TIB64
;
1395 typedef enum _PROCESSINFOCLASS
{
1396 ProcessBasicInformation
,
1401 ProcessBasePriority
,
1402 ProcessRaisePriority
,
1404 ProcessExceptionPort
,
1406 ProcessLdtInformation
,
1408 ProcessDefaultHardErrorMode
,
1409 ProcessIoPortHandlers
,
1410 ProcessPooledUsageAndLimits
,
1411 ProcessWorkingSetWatch
,
1412 ProcessUserModeIOPL
,
1413 ProcessEnableAlignmentFaultFixup
,
1414 ProcessPriorityClass
,
1415 ProcessWx86Information
,
1417 ProcessAffinityMask
,
1418 ProcessPriorityBoost
,
1420 ProcessSessionInformation
,
1421 ProcessForegroundInformation
,
1422 ProcessWow64Information
,
1423 ProcessImageFileName
,
1424 ProcessLUIDDeviceMapsEnabled
,
1425 ProcessBreakOnTermination
,
1426 ProcessDebugObjectHandle
,
1428 ProcessHandleTracing
,
1430 ProcessExecuteFlags
,
1431 ProcessTlsInformation
,
1433 ProcessImageInformation
,
1435 ProcessPagePriority
,
1436 ProcessInstrumentationCallback
,
1440 typedef enum _THREADINFOCLASS
{
1441 ThreadBasicInformation
,
1446 ThreadImpersonationToken
,
1447 ThreadDescriptorTableEntry
,
1448 ThreadEnableAlignmentFaultFixup
,
1449 ThreadEventPair_Reusable
,
1450 ThreadQuerySetWin32StartAddress
,
1452 ThreadPerformanceCount
,
1453 ThreadAmILastThread
,
1454 ThreadIdealProcessor
,
1455 ThreadPriorityBoost
,
1456 ThreadSetTlsArrayAddress
,
1458 ThreadHideFromDebugger
,
1459 ThreadBreakOnTermination
,
1460 ThreadSwitchLegacyState
,
1462 ThreadLastSystemCall
,
1466 ThreadActualBasePriority
,
1470 typedef struct _PROCESS_BASIC_INFORMATION
1472 NTSTATUS ExitStatus
;
1473 struct _PEB
*PebBaseAddress
;
1474 ULONG_PTR AffinityMask
;
1475 KPRIORITY BasePriority
;
1476 ULONG_PTR UniqueProcessId
;
1477 ULONG_PTR InheritedFromUniqueProcessId
;
1478 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
1480 typedef struct _PROCESS_WS_WATCH_INFORMATION
1484 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
1486 typedef struct _PROCESS_DEVICEMAP_INFORMATION
1488 __GNU_EXTENSION
union
1492 HANDLE DirectoryHandle
;
1497 UCHAR DriveType
[32];
1500 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
1502 typedef struct _KERNEL_USER_TIMES
1504 LARGE_INTEGER CreateTime
;
1505 LARGE_INTEGER ExitTime
;
1506 LARGE_INTEGER KernelTime
;
1507 LARGE_INTEGER UserTime
;
1508 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1510 typedef struct _PROCESS_ACCESS_TOKEN
1514 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1516 typedef struct _PROCESS_SESSION_INFORMATION
1519 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1522 ** Storage structures
1524 typedef enum _PARTITION_STYLE
{
1525 PARTITION_STYLE_MBR
,
1526 PARTITION_STYLE_GPT
,
1530 typedef struct _CREATE_DISK_MBR
{
1532 } CREATE_DISK_MBR
, *PCREATE_DISK_MBR
;
1534 typedef struct _CREATE_DISK_GPT
{
1536 ULONG MaxPartitionCount
;
1537 } CREATE_DISK_GPT
, *PCREATE_DISK_GPT
;
1539 typedef struct _CREATE_DISK
{
1540 PARTITION_STYLE PartitionStyle
;
1541 _ANONYMOUS_UNION
union {
1542 CREATE_DISK_MBR Mbr
;
1543 CREATE_DISK_GPT Gpt
;
1545 } CREATE_DISK
, *PCREATE_DISK
;
1547 typedef struct _DISK_SIGNATURE
{
1548 ULONG PartitionStyle
;
1549 _ANONYMOUS_UNION
union {
1558 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
1561 (FASTCALL
*PTIME_UPDATE_NOTIFY_ROUTINE
)(
1563 IN KPROCESSOR_MODE Mode
);
1565 typedef struct _PHYSICAL_MEMORY_RANGE
{
1566 PHYSICAL_ADDRESS BaseAddress
;
1567 LARGE_INTEGER NumberOfBytes
;
1568 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
1571 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
1574 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
1575 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
1576 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
1577 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
1579 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1580 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1581 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1582 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1583 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1586 (DDKAPI
*PTIMER_APC_ROUTINE
)(
1587 IN PVOID TimerContext
,
1588 IN ULONG TimerLowValue
,
1589 IN LONG TimerHighValue
);
1592 ** Architecture specific structures
1594 #define PCR_MINOR_VERSION 1
1595 #define PCR_MAJOR_VERSION 1
1599 #define SIZE_OF_80387_REGISTERS 80
1600 #define CONTEXT_i386 0x10000
1601 #define CONTEXT_i486 0x10000
1602 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
1603 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
1604 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
1605 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
1606 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
1607 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
1608 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
1610 typedef struct _FLOATING_SAVE_AREA
{
1615 ULONG ErrorSelector
;
1618 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
1620 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
1622 typedef struct _CONTEXT
{
1630 FLOATING_SAVE_AREA FloatSave
;
1647 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
1650 typedef struct _KPCR_TIB
{
1651 PVOID ExceptionList
; /* 00 */
1652 PVOID StackBase
; /* 04 */
1653 PVOID StackLimit
; /* 08 */
1654 PVOID SubSystemTib
; /* 0C */
1655 _ANONYMOUS_UNION
union {
1656 PVOID FiberData
; /* 10 */
1657 ULONG Version
; /* 10 */
1659 PVOID ArbitraryUserPointer
; /* 14 */
1660 struct _KPCR_TIB
*Self
; /* 18 */
1661 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
1663 typedef struct _KPCR
{
1664 KPCR_TIB Tib
; /* 00 */
1665 struct _KPCR
*Self
; /* 1C */
1666 struct _KPRCB
*Prcb
; /* 20 */
1667 KIRQL Irql
; /* 24 */
1669 ULONG IrrActive
; /* 2C */
1671 PVOID KdVersionBlock
; /* 34 */
1672 PUSHORT IDT
; /* 38 */
1673 PUSHORT GDT
; /* 3C */
1674 struct _KTSS
*TSS
; /* 40 */
1675 USHORT MajorVersion
; /* 44 */
1676 USHORT MinorVersion
; /* 46 */
1677 KAFFINITY SetMember
; /* 48 */
1678 ULONG StallScaleFactor
; /* 4C */
1679 UCHAR SpareUnused
; /* 50 */
1680 UCHAR Number
; /* 51 */
1682 UCHAR SecondLevelCacheAssociativity
;
1684 ULONG KernelReserved
[14]; // For use by the kernel
1685 ULONG SecondLevelCacheSize
;
1686 ULONG HalReserved
[16]; // For use by Hal
1687 } KPCR
, *PKPCR
; /* 54 */
1689 #define KeGetPcr() PCR
1693 KeGetCurrentProcessorNumber(VOID
)
1695 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
1698 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1699 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1700 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
1702 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1703 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1704 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1705 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1706 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
1708 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
1709 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
1711 #elif defined(__x86_64__)
1713 #define CONTEXT_AMD64 0x100000
1714 #if !defined(RC_INVOKED)
1715 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
1716 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
1717 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
1718 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
1719 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
1721 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1722 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1724 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1725 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1726 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1727 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1730 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
1780 /* Floating point */
1782 XMM_SAVE_AREA32 FltSave
;
1806 M128A VectorRegister
[26];
1807 ULONG64 VectorControl
;
1810 ULONG64 DebugControl
;
1811 ULONG64 LastBranchToRip
;
1812 ULONG64 LastBranchFromRip
;
1813 ULONG64 LastExceptionToRip
;
1814 ULONG64 LastExceptionFromRip
;
1817 #define PAGE_SIZE 0x1000
1818 #define PAGE_SHIFT 12L
1819 #define PTI_SHIFT 12L
1820 #define PDI_SHIFT 21L
1821 #define PPI_SHIFT 30L
1822 #define PXI_SHIFT 39L
1823 #define PTE_PER_PAGE 512
1824 #define PDE_PER_PAGE 512
1825 #define PPE_PER_PAGE 512
1826 #define PXE_PER_PAGE 512
1827 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
1828 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
1829 #define PPI_MASK (PPE_PER_PAGE - 1)
1830 #define PXI_MASK (PXE_PER_PAGE - 1)
1832 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
1833 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
1834 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
1835 #define PDE_BASE 0xFFFFF6FB40000000ULL
1836 #define PTE_BASE 0xFFFFF68000000000ULL
1837 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
1838 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
1839 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
1840 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
1842 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1843 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1844 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
1846 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1847 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1848 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1849 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1850 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
1851 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
1853 #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
1854 #define SharedInterruptTime (&SharedUserData->InterruptTime)
1855 #define SharedSystemTime (&SharedUserData->SystemTime)
1856 #define SharedTickCount (&SharedUserData->TickCount)
1858 #define KeQueryInterruptTime() \
1859 (*(volatile ULONG64*)SharedInterruptTime)
1860 #define KeQuerySystemTime(CurrentCount) \
1861 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
1862 #define KeQueryTickCount(CurrentCount) \
1863 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
1865 typedef struct _KPCR
1867 __GNU_EXTENSION
union
1870 __GNU_EXTENSION
struct
1872 union _KGDTENTRY64
*GdtBase
;
1873 struct _KTSS64
*TssBase
;
1876 struct _KPRCB
*CurrentPrcb
;
1877 PKSPIN_LOCK_QUEUE LockArray
;
1881 union _KIDTENTRY64
*IdtBase
;
1884 UCHAR SecondLevelCacheAssociativity
;
1885 UCHAR ObsoleteNumber
;
1888 USHORT MajorVersion
;
1889 USHORT MinorVersion
;
1890 ULONG StallScaleFactor
;
1892 ULONG KernelReserved
[15];
1893 ULONG SecondLevelCacheSize
;
1894 ULONG HalReserved
[16];
1896 PVOID KdVersionBlock
;
1898 ULONG PcrAlign1
[24];
1901 typedef struct _KFLOATING_SAVE
{
1903 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
1909 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
1914 KeGetCurrentProcessorNumber(VOID
)
1916 return (ULONG
)__readgsword(0x184);
1919 #elif defined(__PowerPC__)
1922 // Used to contain PFNs and PFN counts
1924 typedef ULONG PFN_COUNT
;
1925 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
1926 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
1928 #define PASSIVE_LEVEL 0
1931 #define DISPATCH_LEVEL 2
1932 #define PROFILE_LEVEL 27
1933 #define CLOCK1_LEVEL 28
1934 #define CLOCK2_LEVEL 28
1935 #define IPI_LEVEL 29
1936 #define POWER_LEVEL 30
1937 #define HIGH_LEVEL 31
1939 typedef struct _KFLOATING_SAVE
{
1941 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
1943 typedef struct _KPCR_TIB
{
1944 PVOID ExceptionList
; /* 00 */
1945 PVOID StackBase
; /* 04 */
1946 PVOID StackLimit
; /* 08 */
1947 PVOID SubSystemTib
; /* 0C */
1948 _ANONYMOUS_UNION
union {
1949 PVOID FiberData
; /* 10 */
1950 ULONG Version
; /* 10 */
1952 PVOID ArbitraryUserPointer
; /* 14 */
1953 struct _KPCR_TIB
*Self
; /* 18 */
1954 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
1956 #define PCR_MINOR_VERSION 1
1957 #define PCR_MAJOR_VERSION 1
1959 typedef struct _KPCR
{
1960 KPCR_TIB Tib
; /* 00 */
1961 struct _KPCR
*Self
; /* 1C */
1962 struct _KPRCB
*Prcb
; /* 20 */
1963 KIRQL Irql
; /* 24 */
1965 ULONG IrrActive
; /* 2C */
1967 PVOID KdVersionBlock
; /* 34 */
1968 PUSHORT IDT
; /* 38 */
1969 PUSHORT GDT
; /* 3C */
1970 struct _KTSS
*TSS
; /* 40 */
1971 USHORT MajorVersion
; /* 44 */
1972 USHORT MinorVersion
; /* 46 */
1973 KAFFINITY SetMember
; /* 48 */
1974 ULONG StallScaleFactor
; /* 4C */
1975 UCHAR SpareUnused
; /* 50 */
1976 UCHAR Number
; /* 51 */
1977 } KPCR
, *PKPCR
; /* 54 */
1979 #define KeGetPcr() PCR
1984 KeGetCurrentProcessorNumber(VOID
)
1987 __asm__
__volatile__ (
1990 : "i" (FIELD_OFFSET(KPCR
, Number
))
1995 #elif defined(_MIPS_)
1997 #error MIPS Headers are totally incorrect
2000 // Used to contain PFNs and PFN counts
2002 typedef ULONG PFN_COUNT
;
2003 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
2004 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
2006 #define PASSIVE_LEVEL 0
2008 #define DISPATCH_LEVEL 2
2009 #define PROFILE_LEVEL 27
2010 #define IPI_LEVEL 29
2011 #define HIGH_LEVEL 31
2013 typedef struct _KPCR
{
2014 struct _KPRCB
*Prcb
; /* 20 */
2015 KIRQL Irql
; /* 24 */
2020 #define KeGetPcr() PCR
2022 typedef struct _KFLOATING_SAVE
{
2023 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
2028 KeGetCurrentProcessorNumber(VOID
)
2033 #elif defined(_M_ARM)
2036 // NT-ARM is not documented, need DDK-ARM
2041 #error Unknown architecture
2044 typedef enum _INTERLOCKED_RESULT
{
2045 ResultNegative
= RESULT_NEGATIVE
,
2046 ResultZero
= RESULT_ZERO
,
2047 ResultPositive
= RESULT_POSITIVE
2048 } INTERLOCKED_RESULT
;
2051 (NTAPI
*PciPin2Line
)(
2052 IN
struct _BUS_HANDLER
*BusHandler
,
2053 IN
struct _BUS_HANDLER
*RootHandler
,
2054 IN PCI_SLOT_NUMBER SlotNumber
,
2055 IN PPCI_COMMON_CONFIG PciData
2059 (NTAPI
*PciLine2Pin
)(
2060 IN
struct _BUS_HANDLER
*BusHandler
,
2061 IN
struct _BUS_HANDLER
*RootHandler
,
2062 IN PCI_SLOT_NUMBER SlotNumber
,
2063 IN PPCI_COMMON_CONFIG PciNewData
,
2064 IN PPCI_COMMON_CONFIG PciOldData
2068 (NTAPI
*PciReadWriteConfig
)(
2069 IN
struct _BUS_HANDLER
*BusHandler
,
2070 IN PCI_SLOT_NUMBER Slot
,
2076 #define PCI_DATA_TAG ' ICP'
2077 #define PCI_DATA_VERSION 1
2079 typedef struct _PCIBUSDATA
2083 PciReadWriteConfig ReadConfig
;
2084 PciReadWriteConfig WriteConfig
;
2085 PciPin2Line Pin2Line
;
2086 PciLine2Pin Line2Pin
;
2087 PCI_SLOT_NUMBER ParentSlot
;
2089 } PCIBUSDATA
, *PPCIBUSDATA
;
2092 /** SPINLOCK FUNCTIONS ********************************************************/
2096 #if defined(WIN9X_COMPAT_SPINLOCK)
2101 KeInitializeSpinLock(
2102 IN PKSPIN_LOCK SpinLock
2109 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
2111 /* Clear the lock */
2121 IN PKSPIN_LOCK SpinLock
);
2127 IN PKSPIN_LOCK SpinLock
,
2133 KefAcquireSpinLockAtDpcLevel(
2134 IN PKSPIN_LOCK SpinLock
);
2139 KefReleaseSpinLockFromDpcLevel(
2140 IN PKSPIN_LOCK SpinLock
);
2142 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
2143 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
2144 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
2145 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
2147 #define KeGetDcacheFillSize() 1L
2149 #elif defined(_M_ARM) // !defined (_X86_)
2153 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
2155 /* Clear the lock */
2163 IN PKSPIN_LOCK SpinLock
);
2169 IN PKSPIN_LOCK SpinLock
,
2176 KefAcquireSpinLockAtDpcLevel(
2177 IN PKSPIN_LOCK SpinLock
);
2182 KefReleaseSpinLockFromDpcLevel(
2183 IN PKSPIN_LOCK SpinLock
);
2186 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
2187 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
2188 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
2189 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
2194 KeInitializeSpinLock(
2195 IN PKSPIN_LOCK SpinLock
);
2202 KeInitializeSpinLock(
2203 PKSPIN_LOCK SpinLock
)
2211 IN PKSPIN_LOCK SpinLock
,
2216 KeAcquireSpinLockAtDpcLevel(
2217 IN PKSPIN_LOCK SpinLock
);
2221 KeReleaseSpinLockFromDpcLevel(
2222 IN PKSPIN_LOCK SpinLock
);
2226 KeAcquireSpinLockRaiseToDpc(
2227 IN PKSPIN_LOCK SpinLock
);
2229 #define KeAcquireSpinLock(SpinLock, OldIrql) \
2230 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
2232 #endif // !defined (_X86_)
2234 #define ARGUMENT_PRESENT(ArgumentPointer) \
2235 ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL)
2242 IN ULONG Base OPTIONAL
,
2243 IN OUT PULONG Value
);
2251 BOOLEAN CaseInSensitive
);
2253 #if !defined(MIDL_PASS)
2258 RtlConvertLongToLuid(
2264 Temp
.QuadPart
= Val
;
2265 Luid
.LowPart
= Temp
.u
.LowPart
;
2266 Luid
.HighPart
= Temp
.u
.HighPart
;
2274 RtlConvertUlongToLuid(
2291 IN VOID UNALIGNED
*Destination
,
2292 IN CONST VOID UNALIGNED
*Source
,
2299 IN OUT PSTRING DestinationString
,
2300 IN PSTRING SourceString OPTIONAL
);
2308 IN BOOLEAN CaseInSensitive
);
2310 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
2311 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
2312 *CallersAddress = (PVOID)_ReturnAddress(); \
2313 *CallersCaller = NULL;
2318 RtlGetCallersAddress(
2319 OUT PVOID
*CallersAddress
,
2320 OUT PVOID
*CallersCaller
);
2327 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
2333 IN OUT PACCESS_MASK AccessMask
,
2334 IN PGENERIC_MAPPING GenericMapping
);
2339 RtlPrefixUnicodeString(
2340 IN PCUNICODE_STRING String1
,
2341 IN PCUNICODE_STRING String2
,
2342 IN BOOLEAN CaseInSensitive
);
2347 RtlUpcaseUnicodeString(
2348 IN OUT PUNICODE_STRING DestinationString OPTIONAL
,
2349 IN PCUNICODE_STRING SourceString
,
2350 IN BOOLEAN AllocateDestinationString
);
2362 IN OUT PSTRING DestinationString
,
2363 IN PSTRING SourceString
);
2368 RtlVerifyVersionInfo(
2369 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
2371 IN ULONGLONG ConditionMask
);
2376 RtlVolumeDeviceToDosName(
2377 IN PVOID VolumeDeviceObject
,
2378 OUT PUNICODE_STRING DosName
);
2388 /******************************************************************************
2390 ******************************************************************************/
2392 typedef struct _ZONE_SEGMENT_HEADER
{
2393 SINGLE_LIST_ENTRY SegmentList
;
2395 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
2397 typedef struct _ZONE_HEADER
{
2398 SINGLE_LIST_ENTRY FreeList
;
2399 SINGLE_LIST_ENTRY SegmentList
;
2401 ULONG TotalSegmentSize
;
2402 } ZONE_HEADER
, *PZONE_HEADER
;
2404 #define PROTECTED_POOL 0x80000000
2406 /******************************************************************************
2407 * Executive Functions *
2408 ******************************************************************************/
2414 IN PZONE_HEADER Zone
,
2416 IN ULONG SegmentSize
);
2418 static __inline PVOID
2420 IN PZONE_HEADER Zone
)
2422 if (Zone
->FreeList
.Next
)
2423 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
2424 return (PVOID
) Zone
->FreeList
.Next
;
2427 static __inline PVOID
2429 IN PZONE_HEADER Zone
,
2432 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
2433 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
2434 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
2441 IN PZONE_HEADER Zone
,
2443 IN PVOID InitialSegment
,
2444 IN ULONG InitialSegmentSize
);
2448 * ExInterlockedAllocateFromZone(
2449 * IN PZONE_HEADER Zone,
2450 * IN PKSPIN_LOCK Lock)
2452 #define ExInterlockedAllocateFromZone(Zone, Lock) \
2453 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
2458 ExInterlockedExtendZone(
2459 IN PZONE_HEADER Zone
,
2461 IN ULONG SegmentSize
,
2462 IN PKSPIN_LOCK Lock
);
2465 * ExInterlockedFreeToZone(
2466 * IN PZONE_HEADER Zone,
2468 * IN PKSPIN_LOCK Lock);
2470 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
2471 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
2476 * IN PZONE_HEADER Zone)
2478 #define ExIsFullZone(Zone) \
2479 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
2482 * ExIsObjectInFirstZoneSegment(
2483 * IN PZONE_HEADER Zone,
2486 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
2487 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
2488 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
2489 (Zone)->TotalSegmentSize)) )
2495 ExRaiseAccessViolation(
2502 ExRaiseDatatypeMisalignment(
2511 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
2512 #define ExAcquireResourceShared ExAcquireResourceSharedLite
2513 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
2514 #define ExDeleteResource ExDeleteResourceLite
2515 #define ExInitializeResource ExInitializeResourceLite
2516 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
2517 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
2518 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
2519 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
2521 /** Filesystem runtime library routines **/
2526 FsRtlIsTotalDeviceFailure(
2527 IN NTSTATUS Status
);
2529 /** Hardware abstraction layer routines **/
2535 IN ULONG Frequency
);
2541 IN PDEVICE_OBJECT DeviceObject
,
2542 IN ULONG SectorSize
,
2543 IN ULONG MBRTypeIdentifier
,
2549 PADAPTER_OBJECT AdapterObject
2552 /** I/O manager routines **/
2557 IoAllocateController(
2558 IN PCONTROLLER_OBJECT ControllerObject
,
2559 IN PDEVICE_OBJECT DeviceObject
,
2560 IN PDRIVER_CONTROL ExecutionRoutine
,
2564 * VOID IoAssignArcName(
2565 * IN PUNICODE_STRING ArcName,
2566 * IN PUNICODE_STRING DeviceName);
2568 #define IoAssignArcName(_ArcName, _DeviceName) ( \
2569 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
2575 IN PDEVICE_OBJECT DeviceObject
,
2576 IN PFILE_OBJECT FileObject
);
2588 IN PDEVICE_OBJECT DeviceObject
,
2589 IN PCREATE_DISK Disk
);
2595 IN PCONTROLLER_OBJECT ControllerObject
);
2599 * IoDeassignArcName(
2600 * IN PUNICODE_STRING ArcName)
2602 #define IoDeassignArcName IoDeleteSymbolicLink
2608 IN PCONTROLLER_OBJECT ControllerObject
);
2611 PCONFIGURATION_INFORMATION
2613 IoGetConfigurationInformation(
2619 IoGetDeviceToVerify(
2620 IN PETHREAD Thread
);
2625 IoGetFileObjectGenericMapping(
2631 IoMakeAssociatedIrp(
2633 IN CCHAR StackSize
);
2638 IoQueryDeviceDescription(
2639 IN PINTERFACE_TYPE BusType OPTIONAL
,
2640 IN PULONG BusNumber OPTIONAL
,
2641 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
2642 IN PULONG ControllerNumber OPTIONAL
,
2643 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
2644 IN PULONG PeripheralNumber OPTIONAL
,
2645 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
2653 IN PVPB Vpb OPTIONAL
,
2654 IN PDEVICE_OBJECT RealDeviceObject
);
2659 IoRaiseInformationalHardError(
2660 IN NTSTATUS ErrorStatus
,
2661 IN PUNICODE_STRING String OPTIONAL
,
2662 IN PKTHREAD Thread OPTIONAL
);
2667 IoReadDiskSignature(
2668 IN PDEVICE_OBJECT DeviceObject
,
2669 IN ULONG BytesPerSector
,
2670 OUT PDISK_SIGNATURE Signature
);
2675 IoReadPartitionTable(
2676 IN PDEVICE_OBJECT DeviceObject
,
2677 IN ULONG SectorSize
,
2678 IN BOOLEAN ReturnRecognizedPartitions
,
2679 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2684 IoReadPartitionTableEx(
2685 IN PDEVICE_OBJECT DeviceObject
,
2686 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
2691 IoRegisterBootDriverReinitialization(
2692 IN PDRIVER_OBJECT DriverObject
,
2693 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2699 IoRegisterBootDriverReinitialization(
2700 IN PDRIVER_OBJECT DriverObject
,
2701 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2707 IoRegisterDriverReinitialization(
2708 IN PDRIVER_OBJECT DriverObject
,
2709 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2715 IoReportDetectedDevice(
2716 IN PDRIVER_OBJECT DriverObject
,
2717 IN INTERFACE_TYPE LegacyBusType
,
2719 IN ULONG SlotNumber
,
2720 IN PCM_RESOURCE_LIST ResourceList
,
2721 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
2722 IN BOOLEAN ResourceAssigned
,
2723 IN OUT PDEVICE_OBJECT
*DeviceObject
);
2728 IoReportResourceForDetection(
2729 IN PDRIVER_OBJECT DriverObject
,
2730 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2731 IN ULONG DriverListSize OPTIONAL
,
2732 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2733 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2734 IN ULONG DeviceListSize OPTIONAL
,
2735 OUT PBOOLEAN ConflictDetected
);
2740 IoReportResourceUsage(
2741 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2742 IN PDRIVER_OBJECT DriverObject
,
2743 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2744 IN ULONG DriverListSize OPTIONAL
,
2745 IN PDEVICE_OBJECT DeviceObject
,
2746 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2747 IN ULONG DeviceListSize OPTIONAL
,
2748 IN BOOLEAN OverrideConflict
,
2749 OUT PBOOLEAN ConflictDetected
);
2754 IoSetHardErrorOrVerifyDevice(
2756 IN PDEVICE_OBJECT DeviceObject
);
2761 IoSetPartitionInformation(
2762 IN PDEVICE_OBJECT DeviceObject
,
2763 IN ULONG SectorSize
,
2764 IN ULONG PartitionNumber
,
2765 IN ULONG PartitionType
);
2770 IoSetPartitionInformationEx(
2771 IN PDEVICE_OBJECT DeviceObject
,
2772 IN ULONG PartitionNumber
,
2773 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
2778 IoSetSystemPartition(
2779 IN PUNICODE_STRING VolumeNameString
);
2784 IoSetThreadHardErrorMode(
2785 IN BOOLEAN EnableHardErrors
);
2790 IoVerifyPartitionTable(
2791 IN PDEVICE_OBJECT DeviceObject
,
2792 IN BOOLEAN FixErrors
);
2797 IoVolumeDeviceToDosName(
2798 IN PVOID VolumeDeviceObject
,
2799 OUT PUNICODE_STRING DosName
);
2804 IoWritePartitionTable(
2805 IN PDEVICE_OBJECT DeviceObject
,
2806 IN ULONG SectorSize
,
2807 IN ULONG SectorsPerTrack
,
2808 IN ULONG NumberOfHeads
,
2809 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2814 IoWritePartitionTableEx(
2815 IN PDEVICE_OBJECT DeviceObject
,
2816 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*PartitionBuffer
);
2818 /** Kernel routines **/
2825 IN ULONG BugCheckCode
);
2834 volatile LONG Barrier
;
2835 #if defined(__GNUC__)
2836 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
2837 #elif defined(_MSC_VER)
2838 __asm xchg
[Barrier
], eax
2849 IN KPRIORITY Increment
,
2855 KeQueryActiveProcessors(
2862 KeQueryPerformanceCounter(
2863 OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL
);
2868 KeQueryPriorityThread(
2869 IN PRKTHREAD Thread
);
2874 KeQueryRuntimeThread(
2876 OUT PULONG UserTime
);
2878 #if !defined(_M_AMD64)
2882 KeQueryInterruptTime(
2889 OUT PLARGE_INTEGER CurrentTime
);
2895 OUT PLARGE_INTEGER TickCount
);
2901 KeQueryTimeIncrement(
2920 KeReadStateSemaphore(
2921 IN PRKSEMAPHORE Semaphore
);
2932 KeRegisterBugCheckCallback(
2933 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
2934 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
2937 IN PUCHAR Component
);
2942 KeRegisterNmiCallback(
2943 IN PNMI_CALLBACK CallbackRoutine
,
2950 KeDeregisterNmiCallback(
2957 KeReleaseInStackQueuedSpinLockFromDpcLevel(
2958 IN PKLOCK_QUEUE_HANDLE LockHandle
);
2963 KeReleaseInterruptSpinLock(
2964 IN PKINTERRUPT Interrupt
,
2978 IN PRKSEMAPHORE Semaphore
,
2979 IN KPRIORITY Increment
,
2984 PKDEVICE_QUEUE_ENTRY
2986 KeRemoveByKeyDeviceQueue(
2987 IN PKDEVICE_QUEUE DeviceQueue
,
2991 PKDEVICE_QUEUE_ENTRY
2993 KeRemoveDeviceQueue(
2994 IN PKDEVICE_QUEUE DeviceQueue
);
2999 KeRemoveEntryDeviceQueue(
3000 IN PKDEVICE_QUEUE DeviceQueue
,
3001 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
3018 KeRestoreFloatingPointState(
3019 IN PKFLOATING_SAVE FloatSave
);
3024 KeRevertToUserAffinityThread(VOID
);
3029 KeSaveFloatingPointState(
3030 OUT PKFLOATING_SAVE FloatSave
);
3035 KeSetBasePriorityThread(
3036 IN PRKTHREAD Thread
,
3044 IN KPRIORITY Increment
,
3052 IN KDPC_IMPORTANCE Importance
);
3057 KeSetPriorityThread(
3059 IN KPRIORITY Priority
);
3064 KeSetSystemAffinityThread(
3065 IN KAFFINITY Affinity
);
3070 KeSetTargetProcessorDpc(
3079 IN LARGE_INTEGER DueTime
,
3080 IN PKDPC Dpc OPTIONAL
);
3087 IN LARGE_INTEGER DueTime
,
3088 IN LONG Period OPTIONAL
,
3089 IN PKDPC Dpc OPTIONAL
);
3094 KeSetTimeUpdateNotifyRoutine(
3095 IN PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine
);
3100 KeStallExecutionProcessor(
3101 IN ULONG MicroSeconds
);
3106 KeSynchronizeExecution(
3107 IN PKINTERRUPT Interrupt
,
3108 IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
3109 IN PVOID SynchronizeContext
);
3114 KeWaitForMultipleObjects(
3117 IN WAIT_TYPE WaitType
,
3118 IN KWAIT_REASON WaitReason
,
3119 IN KPROCESSOR_MODE WaitMode
,
3120 IN BOOLEAN Alertable
,
3121 IN PLARGE_INTEGER Timeout OPTIONAL
,
3122 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL
);
3127 KeWaitForMutexObject(
3129 IN KWAIT_REASON WaitReason
,
3130 IN KPROCESSOR_MODE WaitMode
,
3131 IN BOOLEAN Alertable
,
3132 IN PLARGE_INTEGER Timeout OPTIONAL
);
3137 KeWaitForSingleObject(
3139 IN KWAIT_REASON WaitReason
,
3140 IN KPROCESSOR_MODE WaitMode
,
3141 IN BOOLEAN Alertable
,
3142 IN PLARGE_INTEGER Timeout OPTIONAL
);
3146 (NTAPI
*PKIPI_BROADCAST_WORKER
)(
3147 IN ULONG_PTR Argument
3154 IN PKIPI_BROADCAST_WORKER BroadcastFunction
,
3155 IN ULONG_PTR Context
3175 KeRaiseIrqlToDpcLevel(
3181 KeRaiseIrqlToSynchLevel(
3184 #define KeLowerIrql(a) KfLowerIrql(a)
3185 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
3187 #elif defined(_M_AMD64)
3191 KeGetCurrentIrql(VOID
)
3193 return (KIRQL
)__readcr8();
3198 KeLowerIrql(IN KIRQL NewIrql
)
3200 ASSERT(KeGetCurrentIrql() >= NewIrql
);
3201 __writecr8(NewIrql
);
3206 KfRaiseIrql(IN KIRQL NewIrql
)
3210 OldIrql
= __readcr8();
3211 ASSERT(OldIrql
<= NewIrql
);
3212 __writecr8(NewIrql
);
3215 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
3219 KeRaiseIrqlToDpcLevel(VOID
)
3221 return KfRaiseIrql(DISPATCH_LEVEL
);
3226 KeRaiseIrqlToSynchLevel(VOID
)
3228 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
3231 #elif defined(__PowerPC__)
3248 KeRaiseIrqlToDpcLevel(
3254 KeRaiseIrqlToSynchLevel(
3257 #define KeLowerIrql(a) KfLowerIrql(a)
3258 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
3260 #elif defined(_M_MIPS)
3262 #define KeLowerIrql(a) KfLowerIrql(a)
3263 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
3280 KeRaiseIrqlToDpcLevel(
3286 KeRaiseIrqlToSynchLevel(
3289 #elif defined(_M_ARM)
3306 OUT PKIRQL OldIrql
);
3311 KeRaiseIrqlToDpcLevel(
3317 KeRaiseIrqlToSynchLevel(
3322 /** Memory manager routines **/
3329 IN ULONG NumberOfBytes
);
3334 MmAllocateContiguousMemory(
3335 IN ULONG NumberOfBytes
,
3336 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
3341 MmAllocateContiguousMemorySpecifyCache(
3342 IN SIZE_T NumberOfBytes
,
3343 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
3344 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
3345 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
3346 IN MEMORY_CACHING_TYPE CacheType
);
3351 MmAllocateMappingAddress(
3352 IN SIZE_T NumberOfBytes
,
3358 MmAllocateNonCachedMemory(
3359 IN ULONG NumberOfBytes
);
3364 MmAllocatePagesForMdl(
3365 IN PHYSICAL_ADDRESS LowAddress
,
3366 IN PHYSICAL_ADDRESS HighAddress
,
3367 IN PHYSICAL_ADDRESS SkipBytes
,
3368 IN SIZE_T TotalBytes
);
3370 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
3374 MmAllocatePagesForMdlEx(
3375 IN PHYSICAL_ADDRESS LowAddress
,
3376 IN PHYSICAL_ADDRESS HighAddress
,
3377 IN PHYSICAL_ADDRESS SkipBytes
,
3378 IN SIZE_T TotalBytes
,
3379 IN MEMORY_CACHING_TYPE CacheType
,
3386 MmBuildMdlForNonPagedPool(
3387 IN OUT PMDL MemoryDescriptorList
);
3389 typedef enum _MMFLUSH_TYPE
{
3397 MmFlushImageSection(
3398 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
3399 IN MMFLUSH_TYPE FlushType
);
3404 MmFreeContiguousMemory(
3405 IN PVOID BaseAddress
);
3410 MmFreeContiguousMemorySpecifyCache(
3411 IN PVOID BaseAddress
,
3412 IN SIZE_T NumberOfBytes
,
3413 IN MEMORY_CACHING_TYPE CacheType
);
3418 MmFreeMappingAddress(
3419 IN PVOID BaseAddress
,
3425 MmFreeNonCachedMemory(
3426 IN PVOID BaseAddress
,
3427 IN SIZE_T NumberOfBytes
);
3433 IN PMDL MemoryDescriptorList
);
3437 * MmGetMdlByteCount(
3440 #define MmGetMdlByteCount(_Mdl) \
3445 * MmGetMdlByteOffset(
3448 #define MmGetMdlByteOffset(_Mdl) \
3449 ((_Mdl)->ByteOffset)
3456 #define MmGetMdlPfnArray(_Mdl) \
3457 ((PPFN_NUMBER) ((_Mdl) + 1))
3461 * MmGetMdlVirtualAddress(
3464 #define MmGetMdlVirtualAddress(_Mdl) \
3465 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
3470 MmGetPhysicalAddress(
3471 IN PVOID BaseAddress
);
3474 PPHYSICAL_MEMORY_RANGE
3476 MmGetPhysicalMemoryRanges(
3482 MmGetVirtualForPhysical(
3483 IN PHYSICAL_ADDRESS PhysicalAddress
);
3488 MmMapLockedPagesSpecifyCache(
3489 IN PMDL MemoryDescriptorList
,
3490 IN KPROCESSOR_MODE AccessMode
,
3491 IN MEMORY_CACHING_TYPE CacheType
,
3492 IN PVOID BaseAddress
,
3493 IN ULONG BugCheckOnFailure
,
3494 IN MM_PAGE_PRIORITY Priority
);
3499 MmMapLockedPagesWithReservedMapping(
3500 IN PVOID MappingAddress
,
3502 IN PMDL MemoryDescriptorList
,
3503 IN MEMORY_CACHING_TYPE CacheType
);
3508 MmMapUserAddressesToPage(
3509 IN PVOID BaseAddress
,
3510 IN SIZE_T NumberOfBytes
,
3511 IN PVOID PageAddress
);
3517 IN PHYSICAL_ADDRESS PhysicalAddress
,
3518 IN SIZE_T NumberOfBytes
,
3519 IN MEMORY_CACHING_TYPE CacheType
);
3524 MmMapViewInSessionSpace(
3526 OUT PVOID
*MappedBase
,
3527 IN OUT PSIZE_T ViewSize
);
3532 MmMapViewInSystemSpace(
3534 OUT PVOID
*MappedBase
,
3535 IN PSIZE_T ViewSize
);
3540 MmMarkPhysicalMemoryAsBad(
3541 IN PPHYSICAL_ADDRESS StartAddress
,
3542 IN OUT PLARGE_INTEGER NumberOfBytes
);
3547 MmMarkPhysicalMemoryAsGood(
3548 IN PPHYSICAL_ADDRESS StartAddress
,
3549 IN OUT PLARGE_INTEGER NumberOfBytes
);
3554 MmGetSystemRoutineAddress(
3555 IN PUNICODE_STRING SystemRoutineName
);
3559 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
3563 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, \
3565 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
3566 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
3571 * IN PMDL MemoryDescriptorList,
3575 #define MmInitializeMdl(_MemoryDescriptorList, \
3579 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
3580 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
3581 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
3582 (_MemoryDescriptorList)->MdlFlags = 0; \
3583 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
3584 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
3585 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
3592 IN PVOID VirtualAddress
);
3597 MmIsDriverVerifying(
3598 IN PDRIVER_OBJECT DriverObject
);
3603 MmIsThisAnNtAsSystem(
3609 MmIsVerifierEnabled(
3610 OUT PULONG VerifierFlags
);
3615 MmLockPagableDataSection(
3616 IN PVOID AddressWithinSection
);
3621 MmLockPagableImageSection(
3622 IN PVOID AddressWithinSection
);
3626 * MmLockPagableCodeSection(
3627 * IN PVOID AddressWithinSection)
3629 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
3634 MmLockPagableSectionByHandle(
3635 IN PVOID ImageSectionHandle
);
3641 IN PHYSICAL_ADDRESS PhysicalAddress
,
3642 IN ULONG NumberOfBytes
,
3643 IN MEMORY_CACHING_TYPE CacheEnable
);
3649 IN PMDL MemoryDescriptorList
,
3650 IN KPROCESSOR_MODE AccessMode
);
3655 MmLockPageableDataSection (
3656 IN PVOID AddressWithinSection
3662 MmUnlockPageableImageSection(
3663 IN PVOID ImageSectionHandle
3670 IN PVOID AddressWithinSection
);
3675 MmProbeAndLockProcessPages(
3676 IN OUT PMDL MemoryDescriptorList
,
3677 IN PEPROCESS Process
,
3678 IN KPROCESSOR_MODE AccessMode
,
3679 IN LOCK_OPERATION Operation
);
3684 MmProtectMdlSystemAddress(
3685 IN PMDL MemoryDescriptorList
,
3686 IN ULONG NewProtect
);
3692 IN PVOID BaseAddress
,
3693 IN PMDL MemoryDescriptorList
);
3698 MmUnmapViewInSessionSpace(
3699 IN PVOID MappedBase
);
3704 MmUnmapViewInSystemSpace(
3705 IN PVOID MappedBase
);
3710 MmUnsecureVirtualMemory(
3711 IN HANDLE SecureHandle
);
3715 * MmPrepareMdlForReuse(
3718 #define MmPrepareMdlForReuse(_Mdl) \
3720 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
3721 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
3722 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
3723 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
3724 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
3728 #define MmGetProcedureAddress(Address) (Address)
3733 MmProbeAndLockPages(
3734 IN OUT PMDL MemoryDescriptorList
,
3735 IN KPROCESSOR_MODE AccessMode
,
3736 IN LOCK_OPERATION Operation
);
3747 MmRemovePhysicalMemory(
3748 IN PPHYSICAL_ADDRESS StartAddress
,
3749 IN OUT PLARGE_INTEGER NumberOfBytes
);
3754 MmResetDriverPaging(
3755 IN PVOID AddressWithinSection
);
3760 MmSecureVirtualMemory(
3763 IN ULONG ProbeMode
);
3775 MmUnlockPagableImageSection(
3776 IN PVOID ImageSectionHandle
);
3782 IN PMDL MemoryDescriptorList
);
3788 IN PVOID BaseAddress
,
3789 IN SIZE_T NumberOfBytes
);
3794 MmUnmapReservedMapping(
3795 IN PVOID BaseAddress
,
3797 IN PMDL MemoryDescriptorList
);
3802 MmUnmapVideoDisplay(
3803 IN PVOID BaseAddress
,
3804 IN SIZE_T NumberOfBytes
);
3808 /** Object manager routines **/
3814 IN PACCESS_STATE AccessState
,
3815 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3817 IN POBJECT_TYPE Type
);
3822 ObDereferenceSecurityDescriptor(
3823 PSECURITY_DESCRIPTOR SecurityDescriptor
,
3829 ObfDereferenceObject(
3834 * ObDereferenceObject(
3837 #define ObDereferenceObject ObfDereferenceObject
3842 ObGetObjectSecurity(
3844 OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
3845 OUT PBOOLEAN MemoryAllocated
);
3852 IN PACCESS_STATE PassedAccessState OPTIONAL
,
3853 IN ACCESS_MASK DesiredAccess
,
3854 IN ULONG AdditionalReferences
,
3855 OUT PVOID
* ReferencedObject OPTIONAL
,
3856 OUT PHANDLE Handle
);
3867 ObLogSecurityDescriptor(
3868 IN PSECURITY_DESCRIPTOR InputSecurityDescriptor
,
3869 OUT PSECURITY_DESCRIPTOR
*OutputSecurityDescriptor
,
3873 * ObReferenceObject(
3876 #define ObReferenceObject ObfReferenceObject
3881 ObMakeTemporaryObject(
3888 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3889 IN POBJECT_TYPE ObjectType
,
3890 IN KPROCESSOR_MODE AccessMode
,
3891 IN PACCESS_STATE PassedAccessState
,
3892 IN ACCESS_MASK DesiredAccess
,
3893 IN OUT PVOID ParseContext OPTIONAL
,
3894 OUT PHANDLE Handle
);
3899 ObOpenObjectByPointer(
3901 IN ULONG HandleAttributes
,
3902 IN PACCESS_STATE PassedAccessState OPTIONAL
,
3903 IN ACCESS_MASK DesiredAccess OPTIONAL
,
3904 IN POBJECT_TYPE ObjectType OPTIONAL
,
3905 IN KPROCESSOR_MODE AccessMode
,
3906 OUT PHANDLE Handle
);
3911 ObQueryObjectAuditingByHandle(
3913 OUT PBOOLEAN GenerateOnClose
);
3918 ObReferenceObjectByHandle(
3920 IN ACCESS_MASK DesiredAccess
,
3921 IN POBJECT_TYPE ObjectType OPTIONAL
,
3922 IN KPROCESSOR_MODE AccessMode
,
3924 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
);
3929 ObReferenceObjectByName(
3930 IN PUNICODE_STRING ObjectPath
,
3931 IN ULONG Attributes
,
3932 IN PACCESS_STATE PassedAccessState OPTIONAL
,
3933 IN ACCESS_MASK DesiredAccess OPTIONAL
,
3934 IN POBJECT_TYPE ObjectType
,
3935 IN KPROCESSOR_MODE AccessMode
,
3936 IN OUT PVOID ParseContext OPTIONAL
,
3942 ObReferenceObjectByPointer(
3944 IN ACCESS_MASK DesiredAccess
,
3945 IN POBJECT_TYPE ObjectType
,
3946 IN KPROCESSOR_MODE AccessMode
);
3951 ObReferenceSecurityDescriptor(
3952 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3958 ObReleaseObjectSecurity(
3959 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3960 IN BOOLEAN MemoryAllocated
);
3964 /** Process manager routines **/
3969 PsCreateSystemProcess(
3970 IN PHANDLE ProcessHandle
,
3971 IN ACCESS_MASK DesiredAccess
,
3972 IN POBJECT_ATTRIBUTES ObjectAttributes
);
3977 PsCreateSystemThread(
3978 OUT PHANDLE ThreadHandle
,
3979 IN ULONG DesiredAccess
,
3980 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
3981 IN HANDLE ProcessHandle OPTIONAL
,
3982 OUT PCLIENT_ID ClientId OPTIONAL
,
3983 IN PKSTART_ROUTINE StartRoutine
,
3984 IN PVOID StartContext
);
3988 * PsGetCurrentProcess(VOID)
3990 #define PsGetCurrentProcess IoGetCurrentProcess
3995 PsGetCurrentProcessId(
4000 * PsGetCurrentThread(VOID)
4002 #define PsGetCurrentThread() \
4003 ((PETHREAD) KeGetCurrentThread())
4008 PsGetCurrentThreadId(
4014 PsGetProcessId(PEPROCESS Process
);
4020 PULONG MajorVersion OPTIONAL
,
4021 PULONG MinorVersion OPTIONAL
,
4022 PULONG BuildNumber OPTIONAL
,
4023 PUNICODE_STRING CSDVersion OPTIONAL
);
4028 PsRemoveCreateThreadNotifyRoutine(
4029 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4034 PsRemoveLoadImageNotifyRoutine(
4035 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4040 PsSetCreateProcessNotifyRoutine(
4041 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
4047 PsSetCreateThreadNotifyRoutine(
4048 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4053 PsSetLoadImageNotifyRoutine(
4054 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4059 PsTerminateSystemThread(
4060 IN NTSTATUS ExitStatus
);
4062 extern NTSYSAPI PEPROCESS PsInitialSystemProcess
;
4065 /** Security reference monitor routines **/
4071 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4072 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
4073 IN BOOLEAN SubjectContextLocked
,
4074 IN ACCESS_MASK DesiredAccess
,
4075 IN ACCESS_MASK PreviouslyGrantedAccess
,
4076 OUT PPRIVILEGE_SET
*Privileges OPTIONAL
,
4077 IN PGENERIC_MAPPING GenericMapping
,
4078 IN KPROCESSOR_MODE AccessMode
,
4079 OUT PACCESS_MASK GrantedAccess
,
4080 OUT PNTSTATUS AccessStatus
);
4086 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
4087 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
4088 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
4089 IN BOOLEAN IsDirectoryObject
,
4090 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
4091 IN PGENERIC_MAPPING GenericMapping
,
4092 IN POOL_TYPE PoolType
);
4098 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
4099 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
4100 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
4101 IN GUID
*ObjectType OPTIONAL
,
4102 IN BOOLEAN IsDirectoryObject
,
4103 IN ULONG AutoInheritFlags
,
4104 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
4105 IN PGENERIC_MAPPING GenericMapping
,
4106 IN POOL_TYPE PoolType
);
4112 IN OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
);
4117 SeSinglePrivilegeCheck(
4118 LUID PrivilegeValue
,
4119 KPROCESSOR_MODE PreviousMode
);
4124 SeValidSecurityDescriptor(
4126 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
4130 /** NtXxx routines **/
4136 OUT PHANDLE ProcessHandle
,
4137 IN ACCESS_MASK DesiredAccess
,
4138 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4139 IN PCLIENT_ID ClientId OPTIONAL
);
4144 NtQueryInformationProcess(
4145 IN HANDLE ProcessHandle
,
4146 IN PROCESSINFOCLASS ProcessInformationClass
,
4147 OUT PVOID ProcessInformation
,
4148 IN ULONG ProcessInformationLength
,
4149 OUT PULONG ReturnLength OPTIONAL
);
4153 /** NtXxx and ZwXxx routines **/
4159 IN HANDLE TimerHandle
,
4160 OUT PBOOLEAN CurrentState OPTIONAL
);
4177 ZwCreateDirectoryObject(
4178 OUT PHANDLE DirectoryHandle
,
4179 IN ACCESS_MASK DesiredAccess
,
4180 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4186 OUT PHANDLE EventHandle
,
4187 IN ACCESS_MASK DesiredAccess
,
4188 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
4189 IN EVENT_TYPE EventType
,
4190 IN BOOLEAN InitialState
);
4196 OUT PHANDLE EventHandle
,
4197 IN ACCESS_MASK DesiredAccess
,
4198 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
4199 IN EVENT_TYPE EventType
,
4200 IN BOOLEAN InitialState
);
4206 OUT PHANDLE FileHandle
,
4207 IN ACCESS_MASK DesiredAccess
,
4208 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4209 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4210 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
4211 IN ULONG FileAttributes
,
4212 IN ULONG ShareAccess
,
4213 IN ULONG CreateDisposition
,
4214 IN ULONG CreateOptions
,
4215 IN PVOID EaBuffer OPTIONAL
,
4222 OUT PHANDLE KeyHandle
,
4223 IN ACCESS_MASK DesiredAccess
,
4224 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4225 IN ULONG TitleIndex
,
4226 IN PUNICODE_STRING Class OPTIONAL
,
4227 IN ULONG CreateOptions
,
4228 OUT PULONG Disposition OPTIONAL
);
4234 OUT PHANDLE TimerHandle
,
4235 IN ACCESS_MASK DesiredAccess
,
4236 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
4237 IN TIMER_TYPE TimerType
);
4243 IN HANDLE KeyHandle
);
4249 IN HANDLE KeyHandle
,
4250 IN PUNICODE_STRING ValueName
);
4255 NtDeviceIoControlFile(
4256 IN HANDLE DeviceHandle
,
4257 IN HANDLE Event OPTIONAL
,
4258 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
4259 IN PVOID UserApcContext OPTIONAL
,
4260 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4261 IN ULONG IoControlCode
,
4262 IN PVOID InputBuffer
,
4263 IN ULONG InputBufferSize
,
4264 OUT PVOID OutputBuffer
,
4265 IN ULONG OutputBufferSize
);
4270 ZwDeviceIoControlFile(
4271 IN HANDLE DeviceHandle
,
4272 IN HANDLE Event OPTIONAL
,
4273 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
4274 IN PVOID UserApcContext OPTIONAL
,
4275 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4276 IN ULONG IoControlCode
,
4277 IN PVOID InputBuffer
,
4278 IN ULONG InputBufferSize
,
4279 OUT PVOID OutputBuffer
,
4280 IN ULONG OutputBufferSize
);
4286 IN HANDLE KeyHandle
,
4288 IN KEY_INFORMATION_CLASS KeyInformationClass
,
4289 OUT PVOID KeyInformation
,
4291 OUT PULONG ResultLength
);
4296 ZwEnumerateValueKey(
4297 IN HANDLE KeyHandle
,
4299 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
4300 OUT PVOID KeyValueInformation
,
4302 OUT PULONG ResultLength
);
4308 IN HANDLE KeyHandle
);
4313 ZwMakeTemporaryObject(
4320 IN HANDLE SectionHandle
,
4321 IN HANDLE ProcessHandle
,
4322 IN OUT PVOID
*BaseAddress
,
4323 IN ULONG_PTR ZeroBits
,
4324 IN SIZE_T CommitSize
,
4325 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
4326 IN OUT PSIZE_T ViewSize
,
4327 IN SECTION_INHERIT InheritDisposition
,
4328 IN ULONG AllocationType
,
4335 IN HANDLE SectionHandle
,
4336 IN HANDLE ProcessHandle
,
4337 IN OUT PVOID
*BaseAddress
,
4338 IN ULONG_PTR ZeroBits
,
4339 IN SIZE_T CommitSize
,
4340 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
4341 IN OUT PSIZE_T ViewSize
,
4342 IN SECTION_INHERIT InheritDisposition
,
4343 IN ULONG AllocationType
,
4350 OUT PHANDLE FileHandle
,
4351 IN ACCESS_MASK DesiredAccess
,
4352 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4353 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4354 IN ULONG ShareAccess
,
4355 IN ULONG OpenOptions
);
4361 OUT PHANDLE FileHandle
,
4362 IN ACCESS_MASK DesiredAccess
,
4363 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4364 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4365 IN ULONG ShareAccess
,
4366 IN ULONG OpenOptions
);
4372 OUT PHANDLE KeyHandle
,
4373 IN ACCESS_MASK DesiredAccess
,
4374 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4380 OUT PHANDLE SectionHandle
,
4381 IN ACCESS_MASK DesiredAccess
,
4382 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4387 ZwOpenSymbolicLinkObject(
4388 OUT PHANDLE LinkHandle
,
4389 IN ACCESS_MASK DesiredAccess
,
4390 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4396 OUT PHANDLE TimerHandle
,
4397 IN ACCESS_MASK DesiredAccess
,
4398 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4403 ZwQueryInformationFile(
4404 IN HANDLE FileHandle
,
4405 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4406 OUT PVOID FileInformation
,
4408 IN FILE_INFORMATION_CLASS FileInformationClass
);
4414 IN HANDLE KeyHandle
,
4415 IN KEY_INFORMATION_CLASS KeyInformationClass
,
4416 OUT PVOID KeyInformation
,
4418 OUT PULONG ResultLength
);
4423 ZwQuerySymbolicLinkObject(
4424 IN HANDLE LinkHandle
,
4425 IN OUT PUNICODE_STRING LinkTarget
,
4426 OUT PULONG ReturnedLength OPTIONAL
);
4432 IN HANDLE KeyHandle
,
4433 IN PUNICODE_STRING ValueName
,
4434 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
4435 OUT PVOID KeyValueInformation
,
4437 OUT PULONG ResultLength
);
4443 IN HANDLE FileHandle
,
4444 IN HANDLE Event OPTIONAL
,
4445 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4446 IN PVOID ApcContext OPTIONAL
,
4447 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4450 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
4451 IN PULONG Key OPTIONAL
);
4457 IN HANDLE FileHandle
,
4458 IN HANDLE Event OPTIONAL
,
4459 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4460 IN PVOID ApcContext OPTIONAL
,
4461 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4464 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
4465 IN PULONG Key OPTIONAL
);
4471 IN HANDLE EventHandle
,
4472 OUT PLONG PreviousState OPTIONAL
);
4478 IN HANDLE EventHandle
,
4479 OUT PLONG PreviousState OPTIONAL
);
4484 ZwSetInformationFile(
4485 IN HANDLE FileHandle
,
4486 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4487 IN PVOID FileInformation
,
4489 IN FILE_INFORMATION_CLASS FileInformationClass
);
4494 ZwSetInformationThread(
4495 IN HANDLE ThreadHandle
,
4496 IN THREADINFOCLASS ThreadInformationClass
,
4497 IN PVOID ThreadInformation
,
4498 IN ULONG ThreadInformationLength
);
4504 IN HANDLE TimerHandle
,
4505 IN PLARGE_INTEGER DueTime
,
4506 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
4507 IN PVOID TimerContext OPTIONAL
,
4508 IN BOOLEAN WakeTimer
,
4509 IN LONG Period OPTIONAL
,
4510 OUT PBOOLEAN PreviousState OPTIONAL
);
4516 IN HANDLE KeyHandle
,
4517 IN PUNICODE_STRING ValueName
,
4518 IN ULONG TitleIndex OPTIONAL
,
4523 /* [Nt|Zw]MapViewOfSection.InheritDisposition constants */
4524 #define AT_EXTENDABLE_FILE 0x00002000
4525 #define AT_RESERVED 0x20000000
4526 #define AT_ROUND_TO_PAGE 0x40000000
4531 NtUnmapViewOfSection(
4532 IN HANDLE ProcessHandle
,
4533 IN PVOID BaseAddress
);
4538 ZwUnmapViewOfSection(
4539 IN HANDLE ProcessHandle
,
4540 IN PVOID BaseAddress
);
4545 NtWaitForSingleObject(
4546 IN HANDLE ObjectHandle
,
4547 IN BOOLEAN Alertable
,
4548 IN PLARGE_INTEGER TimeOut OPTIONAL
);
4553 ZwWaitForSingleObject(
4554 IN HANDLE ObjectHandle
,
4555 IN BOOLEAN Alertable
,
4556 IN PLARGE_INTEGER TimeOut OPTIONAL
);
4562 IN HANDLE FileHandle
,
4563 IN HANDLE Event OPTIONAL
,
4564 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4565 IN PVOID ApcContext OPTIONAL
,
4566 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4569 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
4570 IN PULONG Key OPTIONAL
);
4576 IN HANDLE FileHandle
,
4577 IN HANDLE Event OPTIONAL
,
4578 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4579 IN PVOID ApcContext OPTIONAL
,
4580 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4583 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
4584 IN PULONG Key OPTIONAL
);
4588 /** Power management support routines **/
4594 IN PDEVICE_OBJECT DeviceObject
,
4600 PoRegisterDeviceForIdleDetection(
4601 IN PDEVICE_OBJECT DeviceObject
,
4602 IN ULONG ConservationIdleTime
,
4603 IN ULONG PerformanceIdleTime
,
4604 IN DEVICE_POWER_STATE State
);
4609 PoRegisterSystemState(
4610 IN PVOID StateHandle
,
4611 IN EXECUTION_STATE Flags
);
4617 IN PDEVICE_OBJECT DeviceObject
,
4618 IN UCHAR MinorFunction
,
4619 IN POWER_STATE PowerState
,
4620 IN PREQUEST_POWER_COMPLETE CompletionFunction
,
4622 OUT PIRP
*Irp OPTIONAL
);
4627 PoRequestShutdownEvent(
4634 PULONG IdlePointer
);
4636 #define PoSetDeviceBusy(IdlePointer) \
4637 ((void)(*(IdlePointer) = 0))
4643 IN PDEVICE_OBJECT DeviceObject
,
4644 IN POWER_STATE_TYPE Type
,
4645 IN POWER_STATE State
);
4651 IN EXECUTION_STATE Flags
);
4656 PoStartNextPowerIrp(
4662 PoUnregisterSystemState(
4663 IN PVOID StateHandle
);
4667 /** WMI library support routines **/
4672 IN PDEVICE_OBJECT DeviceObject
,
4675 IN ULONG BufferUsed
,
4676 IN CCHAR PriorityBoost
);
4681 IN PDEVICE_OBJECT DeviceObject
,
4683 IN ULONG InstanceIndex
,
4684 IN ULONG EventDataSize
,
4685 IN PVOID EventData
);
4690 WmiQueryTraceInformation(
4691 IN TRACE_INFORMATION_CLASS TraceInformationClass
,
4692 OUT PVOID TraceInformation
,
4693 IN ULONG TraceInformationLength
,
4694 OUT PULONG RequiredLength OPTIONAL
,
4695 IN PVOID Buffer OPTIONAL
);
4700 IN PWMILIB_CONTEXT WmiLibInfo
,
4701 IN PDEVICE_OBJECT DeviceObject
,
4703 OUT PSYSCTL_IRP_DISPOSITION IrpDisposition
);
4709 IN TRACEHANDLE LoggerHandle
,
4710 IN ULONG MessageFlags
,
4711 IN LPGUID MessageGuid
,
4712 IN USHORT MessageNumber
,
4716 /* FIXME: Get va_list from where? */
4721 IN TRACEHANDLE LoggerHandle
,
4722 IN ULONG MessageFlags
,
4723 IN LPGUID MessageGuid
,
4724 IN USHORT MessageNumber
,
4725 IN
va_list MessageArgList
);
4729 /** Kernel debugger routines **/
4746 KdRefreshDebuggerNotPresent(
4750 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
4755 IN KD_OPTION Option
,
4756 IN ULONG InBufferBytes OPTIONAL
,
4758 IN ULONG OutBufferBytes OPTIONAL
,
4759 OUT PVOID OutBuffer
,
4760 OUT PULONG OutBufferNeeded OPTIONAL
);
4771 DbgBreakPointWithStatus(
4784 IN ULONG ComponentId
,
4792 IN ULONG ComponentId
,
4799 vDbgPrintExWithPrefix(
4801 IN ULONG ComponentId
,
4809 DbgPrintReturnControlC(
4818 IN ULONG MaximumResponseLength
4824 DbgQueryDebugFilterState(
4825 IN ULONG ComponentId
,
4831 DbgSetDebugFilterState(
4832 IN ULONG ComponentId
,
4838 #define KdPrint(_x_) DbgPrint _x_
4839 #define KdPrintEx(_x_) DbgPrintEx _x_
4840 #define KdBreakPoint() DbgBreakPoint()
4841 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
4845 #define KdPrint(_x_)
4846 #define KdPrintEx(_x_)
4847 #define KdBreakPoint()
4848 #define KdBreakPointWithStatus(s)
4852 #if defined(__GNUC__)
4854 extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent
;
4855 extern NTKERNELAPI BOOLEAN KdDebuggerEnabled
;
4856 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
4857 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
4859 #elif defined(_NTDDK_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
4861 extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent
;
4862 extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled
;
4863 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
4864 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
4868 extern BOOLEAN KdDebuggerNotPresent
;
4869 extern BOOLEAN KdDebuggerEnabled
;
4870 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
4871 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
4875 /** Stuff from winnt4.h */
4877 #ifndef DMA_MACROS_DEFINED
4879 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4881 //DECLSPEC_DEPRECATED_DDK
4885 IoFlushAdapterBuffers(
4886 IN PADAPTER_OBJECT AdapterObject
,
4888 IN PVOID MapRegisterBase
,
4891 IN BOOLEAN WriteToDevice
);
4893 //DECLSPEC_DEPRECATED_DDK
4897 IoFreeAdapterChannel(
4898 IN PADAPTER_OBJECT AdapterObject
);
4900 //DECLSPEC_DEPRECATED_DDK
4905 IN PADAPTER_OBJECT AdapterObject
,
4906 IN PVOID MapRegisterBase
,
4907 IN ULONG NumberOfMapRegisters
);
4909 //DECLSPEC_DEPRECATED_DDK
4914 IN PADAPTER_OBJECT AdapterObject
,
4916 IN PVOID MapRegisterBase
,
4918 IN OUT PULONG Length
,
4919 IN BOOLEAN WriteToDevice
);
4922 #endif // (NTDDI_VERSION >= NTDDI_WIN2K)
4923 #endif // !defined(DMA_MACROS_DEFINED)
4929 IN PUNICODE_STRING RegistryPath
,
4930 IN PUNICODE_STRING DriverClassName OPTIONAL
,
4931 IN PDRIVER_OBJECT DriverObject
,
4932 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
4933 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources
,
4934 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
4939 IoAttachDeviceByPointer(
4940 IN PDEVICE_OBJECT SourceDevice
,
4941 IN PDEVICE_OBJECT TargetDevice
);
4946 MmIsNonPagedSystemAddressValid(
4947 IN PVOID VirtualAddress
);
4949 #if defined(_AMD64_) || defined(_IA64_)
4950 //DECLSPEC_DEPRECATED_DDK_WINXP
4954 RtlLargeIntegerDivide(
4955 IN LARGE_INTEGER Dividend
,
4956 IN LARGE_INTEGER Divisor
,
4957 IN OUT PLARGE_INTEGER Remainder
)
4960 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
4962 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
4969 RtlLargeIntegerDivide(
4970 IN LARGE_INTEGER Dividend
,
4971 IN LARGE_INTEGER Divisor
,
4972 IN OUT PLARGE_INTEGER Remainder
);
4978 ExInterlockedDecrementLong(
4980 IN PKSPIN_LOCK Lock
);
4985 ExInterlockedExchangeUlong(
4988 IN PKSPIN_LOCK Lock
);
4993 ExInterlockedIncrementLong(
4995 IN PKSPIN_LOCK Lock
);
5000 HalAcquireDisplayOwnership(
5001 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
5006 HalAllocateAdapterChannel(
5007 IN PADAPTER_OBJECT AdapterObject
,
5008 IN PWAIT_CONTEXT_BLOCK Wcb
,
5009 IN ULONG NumberOfMapRegisters
,
5010 IN PDRIVER_CONTROL ExecutionRoutine
);
5015 HalAllocateCommonBuffer(
5016 IN PADAPTER_OBJECT AdapterObject
,
5018 OUT PPHYSICAL_ADDRESS LogicalAddress
,
5019 IN BOOLEAN CacheEnabled
);
5024 HalAssignSlotResources(
5025 IN PUNICODE_STRING RegistryPath
,
5026 IN PUNICODE_STRING DriverClassName
,
5027 IN PDRIVER_OBJECT DriverObject
,
5028 IN PDEVICE_OBJECT DeviceObject
,
5029 IN INTERFACE_TYPE BusType
,
5031 IN ULONG SlotNumber
,
5032 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
5037 HalFreeCommonBuffer(
5038 IN PADAPTER_OBJECT AdapterObject
,
5040 IN PHYSICAL_ADDRESS LogicalAddress
,
5041 IN PVOID VirtualAddress
,
5042 IN BOOLEAN CacheEnabled
);
5048 IN PDEVICE_DESCRIPTION DeviceDescription
,
5049 IN OUT PULONG NumberOfMapRegisters
);
5055 IN BUS_DATA_TYPE BusDataType
,
5057 IN ULONG SlotNumber
,
5064 HalGetBusDataByOffset(
5065 IN BUS_DATA_TYPE BusDataType
,
5067 IN ULONG SlotNumber
,
5075 HalGetDmaAlignmentRequirement(
5081 HalGetInterruptVector(
5082 IN INTERFACE_TYPE InterfaceType
,
5084 IN ULONG BusInterruptLevel
,
5085 IN ULONG BusInterruptVector
,
5087 OUT PKAFFINITY Affinity
);
5093 IN PADAPTER_OBJECT AdapterObject
);
5099 IN BUS_DATA_TYPE BusDataType
,
5101 IN ULONG SlotNumber
,
5108 HalSetBusDataByOffset(
5109 IN BUS_DATA_TYPE BusDataType
,
5111 IN ULONG SlotNumber
,
5119 HalTranslateBusAddress(
5120 IN INTERFACE_TYPE InterfaceType
,
5122 IN PHYSICAL_ADDRESS BusAddress
,
5123 IN OUT PULONG AddressSpace
,
5124 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
5129 RtlLargeIntegerEqualToZero(
5130 IN LARGE_INTEGER Operand
);
5135 RtlLargeIntegerGreaterOrEqualToZero(
5136 IN LARGE_INTEGER Operand
);
5141 RtlLargeIntegerGreaterThan(
5142 IN LARGE_INTEGER Operand1
,
5143 IN LARGE_INTEGER Operand2
);
5148 RtlLargeIntegerGreaterThanOrEqualTo(
5149 IN LARGE_INTEGER Operand1
,
5150 IN LARGE_INTEGER Operand2
);
5155 RtlLargeIntegerGreaterThanZero(
5156 IN LARGE_INTEGER Operand
);
5161 RtlLargeIntegerLessOrEqualToZero(
5162 IN LARGE_INTEGER Operand
);
5167 RtlLargeIntegerLessThan(
5168 IN LARGE_INTEGER Operand1
,
5169 IN LARGE_INTEGER Operand2
);
5174 RtlLargeIntegerLessThanOrEqualTo(
5175 IN LARGE_INTEGER Operand1
,
5176 IN LARGE_INTEGER Operand2
);
5181 RtlLargeIntegerLessThanZero(
5182 IN LARGE_INTEGER Operand
);
5187 RtlLargeIntegerNegate(
5188 IN LARGE_INTEGER Subtrahend
);
5193 RtlLargeIntegerNotEqualTo(
5194 IN LARGE_INTEGER Operand1
,
5195 IN LARGE_INTEGER Operand2
);
5200 RtlLargeIntegerNotEqualToZero(
5201 IN LARGE_INTEGER Operand
);
5206 RtlLargeIntegerShiftLeft(
5207 IN LARGE_INTEGER LargeInteger
,
5208 IN CCHAR ShiftCount
);
5213 RtlLargeIntegerShiftRight(
5214 IN LARGE_INTEGER LargeInteger
,
5215 IN CCHAR ShiftCount
);
5220 RtlLargeIntegerSubtract(
5221 IN LARGE_INTEGER Minuend
,
5222 IN LARGE_INTEGER Subtrahend
);
5227 * COMPUTE_PAGES_SPANNED(
5231 #define COMPUTE_PAGES_SPANNED(Va, \
5233 (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
5237 ** Architecture specific structures
5245 Exfi386InterlockedIncrementLong(
5251 Exfi386InterlockedDecrementLong(
5257 Exfi386InterlockedExchangeUlong(
5261 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
5262 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
5263 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
5269 // NT-ARM is not documented
5278 #endif /* __WINDDK_H */