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
;
106 #define KERNEL_STACK_SIZE 12288
107 #define KERNEL_LARGE_STACK_SIZE 61440
108 #define KERNEL_LARGE_STACK_COMMIT 12288
110 #define EXCEPTION_READ_FAULT 0
111 #define EXCEPTION_WRITE_FAULT 1
112 #define EXCEPTION_EXECUTE_FAULT 8
114 #define DPFLTR_ERROR_LEVEL 0
115 #define DPFLTR_WARNING_LEVEL 1
116 #define DPFLTR_TRACE_LEVEL 2
117 #define DPFLTR_INFO_LEVEL 3
118 #define DPFLTR_MASK 0x80000000
120 typedef enum _DPFLTR_TYPE
122 DPFLTR_SYSTEM_ID
= 0,
127 DPFLTR_CRASHDUMP_ID
= 5,
128 DPFLTR_CDAUDIO_ID
= 6,
130 DPFLTR_CLASSPNP_ID
= 8,
132 DPFLTR_REDBOOK_ID
= 10,
133 DPFLTR_STORPROP_ID
= 11,
134 DPFLTR_SCSIPORT_ID
= 12,
135 DPFLTR_SCSIMINIPORT_ID
= 13,
136 DPFLTR_CONFIG_ID
= 14,
137 DPFLTR_I8042PRT_ID
= 15,
138 DPFLTR_SERMOUSE_ID
= 16,
139 DPFLTR_LSERMOUS_ID
= 17,
140 DPFLTR_KBDHID_ID
= 18,
141 DPFLTR_MOUHID_ID
= 19,
142 DPFLTR_KBDCLASS_ID
= 20,
143 DPFLTR_MOUCLASS_ID
= 21,
144 DPFLTR_TWOTRACK_ID
= 22,
145 DPFLTR_WMILIB_ID
= 23,
148 DPFLTR_HALIA64_ID
= 26,
149 DPFLTR_VIDEO_ID
= 27,
150 DPFLTR_SVCHOST_ID
= 28,
151 DPFLTR_VIDEOPRT_ID
= 29,
152 DPFLTR_TCPIP_ID
= 30,
153 DPFLTR_DMSYNTH_ID
= 31,
154 DPFLTR_NTOSPNP_ID
= 32,
155 DPFLTR_FASTFAT_ID
= 33,
156 DPFLTR_SAMSS_ID
= 34,
157 DPFLTR_PNPMGR_ID
= 35,
158 DPFLTR_NETAPI_ID
= 36,
159 DPFLTR_SCSERVER_ID
= 37,
160 DPFLTR_SCCLIENT_ID
= 38,
161 DPFLTR_SERIAL_ID
= 39,
162 DPFLTR_SERENUM_ID
= 40,
164 DPFLTR_BOOTOK_ID
= 42,
165 DPFLTR_BOOTVRFY_ID
= 43,
166 DPFLTR_RPCPROXY_ID
= 44,
167 DPFLTR_AUTOCHK_ID
= 45,
168 DPFLTR_DCOMSS_ID
= 46,
169 DPFLTR_UNIMODEM_ID
= 47,
171 DPFLTR_FLTMGR_ID
= 49,
172 DPFLTR_WMICORE_ID
= 50,
173 DPFLTR_BURNENG_ID
= 51,
174 DPFLTR_IMAPI_ID
= 52,
176 DPFLTR_FUSION_ID
= 54,
177 DPFLTR_IDLETASK_ID
= 55,
178 DPFLTR_SOFTPCI_ID
= 56,
180 DPFLTR_MCHGR_ID
= 58,
182 DPFLTR_PCIIDE_ID
= 60,
183 DPFLTR_FLOPPY_ID
= 61,
185 DPFLTR_TERMSRV_ID
= 63,
186 DPFLTR_W32TIME_ID
= 64,
187 DPFLTR_PREFETCHER_ID
= 65,
188 DPFLTR_RSFILTER_ID
= 66,
189 DPFLTR_FCPORT_ID
= 67,
192 DPFLTR_DMCONFIG_ID
= 70,
193 DPFLTR_DMADMIN_ID
= 71,
194 DPFLTR_WSOCKTRANSPORT_ID
= 72,
196 DPFLTR_PNPMEM_ID
= 74,
197 DPFLTR_PROCESSOR_ID
= 75,
198 DPFLTR_DMSERVER_ID
= 76,
200 DPFLTR_INFINIBAND_ID
= 78,
201 DPFLTR_IHVDRIVER_ID
= 79,
202 DPFLTR_IHVVIDEO_ID
= 80,
203 DPFLTR_IHVAUDIO_ID
= 81,
204 DPFLTR_IHVNETWORK_ID
= 82,
205 DPFLTR_IHVSTREAMING_ID
= 83,
206 DPFLTR_IHVBUS_ID
= 84,
208 DPFLTR_RTLTHREADPOOL_ID
= 86,
210 DPFLTR_TCPIP6_ID
= 88,
211 DPFLTR_ISAPNP_ID
= 89,
213 DPFLTR_STORPORT_ID
= 91,
214 DPFLTR_STORMINIPORT_ID
= 92,
215 DPFLTR_PRINTSPOOLER_ID
= 93,
217 DPFLTR_VDSBAS_ID
= 95,
218 DPFLTR_VDSDYNDR_ID
= 96,
219 DPFLTR_VDSUTIL_ID
= 97,
220 DPFLTR_DFRGIFC_ID
= 98,
221 DPFLTR_DEFAULT_ID
= 99,
223 DPFLTR_DFSC_ID
= 101,
224 DPFLTR_WOW64_ID
= 102,
228 /* also in winnt.h */
230 #define FILE_COPY_STRUCTURED_STORAGE 0x00000041
231 #define FILE_STRUCTURED_STORAGE 0x00000441
235 /* Exported object types */
236 extern POBJECT_TYPE NTSYSAPI ExDesktopObjectType
;
237 extern POBJECT_TYPE NTSYSAPI ExWindowStationObjectType
;
238 extern ULONG NTSYSAPI IoDeviceHandlerObjectSize
;
239 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType
;
240 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType
;
241 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType
;
242 extern POBJECT_TYPE NTSYSAPI LpcPortObjectType
;
243 extern POBJECT_TYPE NTSYSAPI PsProcessType
;
245 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
246 extern volatile CCHAR NTSYSAPI KeNumberProcessors
;
248 #if (NTDDI_VERSION >= NTDDI_WINXP)
249 extern CCHAR NTSYSAPI KeNumberProcessors
;
251 //extern PCCHAR KeNumberProcessors;
252 extern NTSYSAPI CCHAR KeNumberProcessors
; //FIXME: Note to Alex: I won't fix this atm, since I prefer to discuss this with you first.
256 #define MAX_WOW64_SHARED_ENTRIES 16
258 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
259 #define NX_SUPPORT_POLICY_ALWAYSON 1
260 #define NX_SUPPORT_POLICY_OPTIN 2
261 #define NX_SUPPORT_POLICY_OPTOUT 3
263 typedef struct _KUSER_SHARED_DATA
265 ULONG TickCountLowDeprecated
;
266 ULONG TickCountMultiplier
;
267 volatile KSYSTEM_TIME InterruptTime
;
268 volatile KSYSTEM_TIME SystemTime
;
269 volatile KSYSTEM_TIME TimeZoneBias
;
270 USHORT ImageNumberLow
;
271 USHORT ImageNumberHigh
;
272 WCHAR NtSystemRoot
[260];
273 ULONG MaxStackTraceDepth
;
274 ULONG CryptoExponent
;
276 ULONG LargePageMinimum
;
278 NT_PRODUCT_TYPE NtProductType
;
279 BOOLEAN ProductTypeIsValid
;
280 ULONG NtMajorVersion
;
281 ULONG NtMinorVersion
;
282 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
285 volatile ULONG TimeSlip
;
286 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
287 LARGE_INTEGER SystemExpirationDate
;
289 BOOLEAN KdDebuggerEnabled
;
290 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
291 UCHAR NXSupportPolicy
;
293 volatile ULONG ActiveConsoleId
;
294 volatile ULONG DismountCount
;
295 ULONG ComPlusPackage
;
296 ULONG LastSystemRITEventTickCount
;
297 ULONG NumberOfPhysicalPages
;
298 BOOLEAN SafeBootMode
;
301 ULONGLONG TestRetInstruction
;
303 ULONG SystemCallReturn
;
304 ULONGLONG SystemCallPad
[3];
305 __GNU_EXTENSION
union {
306 volatile KSYSTEM_TIME TickCount
;
307 volatile ULONG64 TickCountQuad
;
310 #if (NTDDI_VERSION >= NTDDI_WS03)
311 LONGLONG ConsoleSessionForegroundProcessId
;
312 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
314 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
315 USHORT UserModeGlobalLogger
[8];
316 ULONG HeapTracingPid
[2];
317 ULONG CritSecTracingPid
[2];
318 __GNU_EXTENSION
union
320 ULONG SharedDataFlags
;
321 __GNU_EXTENSION
struct
323 ULONG DbgErrorPortPresent
:1;
324 ULONG DbgElevationEnabled
:1;
325 ULONG DbgVirtEnabled
:1;
326 ULONG DbgInstallerDetectEnabled
:1;
330 ULONG ImageFileExecutionOptions
;
331 KAFFINITY ActiveProcessorAffinity
;
333 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
336 ** IRP function codes
339 #define IRP_MN_QUERY_DIRECTORY 0x01
340 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
342 #define IRP_MN_USER_FS_REQUEST 0x00
343 #define IRP_MN_MOUNT_VOLUME 0x01
344 #define IRP_MN_VERIFY_VOLUME 0x02
345 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
346 #define IRP_MN_TRACK_LINK 0x04
347 #define IRP_MN_KERNEL_CALL 0x04
349 #define IRP_MN_LOCK 0x01
350 #define IRP_MN_UNLOCK_SINGLE 0x02
351 #define IRP_MN_UNLOCK_ALL 0x03
352 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
354 #define IRP_MN_NORMAL 0x00
355 #define IRP_MN_DPC 0x01
356 #define IRP_MN_MDL 0x02
357 #define IRP_MN_COMPLETE 0x04
358 #define IRP_MN_COMPRESSED 0x08
360 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
361 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
362 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
364 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
366 typedef EXCEPTION_DISPOSITION
367 (DDKAPI
*PEXCEPTION_ROUTINE
)(
368 IN
struct _EXCEPTION_RECORD
*ExceptionRecord
,
369 IN PVOID EstablisherFrame
,
370 IN OUT
struct _CONTEXT
*ContextRecord
,
371 IN OUT PVOID DispatcherContext
);
374 (DDKAPI
*PDRIVER_ENTRY
)(
375 IN
struct _DRIVER_OBJECT
*DriverObject
,
376 IN PUNICODE_STRING RegistryPath
);
379 (DDKAPI
*PDRIVER_REINITIALIZE
)(
380 IN
struct _DRIVER_OBJECT
*DriverObject
,
385 (DDKAPI
*PKTRANSFER_ROUTINE
)(
388 #define ASSERT_GATE(object) \
389 ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
390 (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
392 #define TIMER_TABLE_SIZE 512
393 #define TIMER_TABLE_SHIFT 9
395 #define ASSERT_TIMER(E) \
396 ASSERT(((E)->Header.Type == TimerNotificationObject) || \
397 ((E)->Header.Type == TimerSynchronizationObject))
399 #define ASSERT_MUTANT(E) \
400 ASSERT((E)->Header.Type == MutantObject)
402 #define ASSERT_SEMAPHORE(E) \
403 ASSERT((E)->Header.Type == SemaphoreObject)
405 #define ASSERT_EVENT(E) \
406 ASSERT(((E)->Header.Type == NotificationEvent) || \
407 ((E)->Header.Type == SynchronizationEvent))
409 #define KEYBOARD_INSERT_ON 0x08
410 #define KEYBOARD_CAPS_LOCK_ON 0x04
411 #define KEYBOARD_NUM_LOCK_ON 0x02
412 #define KEYBOARD_SCROLL_LOCK_ON 0x01
413 #define KEYBOARD_ALT_KEY_DOWN 0x80
414 #define KEYBOARD_CTRL_KEY_DOWN 0x40
415 #define KEYBOARD_LEFT_SHIFT_DOWN 0x20
416 #define KEYBOARD_RIGHT_SHIFT_DOWN 0x10
418 typedef struct _IO_COUNTERS
{
419 ULONGLONG ReadOperationCount
;
420 ULONGLONG WriteOperationCount
;
421 ULONGLONG OtherOperationCount
;
422 ULONGLONG ReadTransferCount
;
423 ULONGLONG WriteTransferCount
;
424 ULONGLONG OtherTransferCount
;
425 } IO_COUNTERS
, *PIO_COUNTERS
;
427 typedef struct _VM_COUNTERS
429 SIZE_T PeakVirtualSize
;
431 ULONG PageFaultCount
;
432 SIZE_T PeakWorkingSetSize
;
433 SIZE_T WorkingSetSize
;
434 SIZE_T QuotaPeakPagedPoolUsage
;
435 SIZE_T QuotaPagedPoolUsage
;
436 SIZE_T QuotaPeakNonPagedPoolUsage
;
437 SIZE_T QuotaNonPagedPoolUsage
;
438 SIZE_T PagefileUsage
;
439 SIZE_T PeakPagefileUsage
;
440 } VM_COUNTERS
, *PVM_COUNTERS
;
442 typedef struct _VM_COUNTERS_EX
444 SIZE_T PeakVirtualSize
;
446 ULONG PageFaultCount
;
447 SIZE_T PeakWorkingSetSize
;
448 SIZE_T WorkingSetSize
;
449 SIZE_T QuotaPeakPagedPoolUsage
;
450 SIZE_T QuotaPagedPoolUsage
;
451 SIZE_T QuotaPeakNonPagedPoolUsage
;
452 SIZE_T QuotaNonPagedPoolUsage
;
453 SIZE_T PagefileUsage
;
454 SIZE_T PeakPagefileUsage
;
456 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
458 typedef struct _POOLED_USAGE_AND_LIMITS
460 SIZE_T PeakPagedPoolUsage
;
461 SIZE_T PagedPoolUsage
;
462 SIZE_T PagedPoolLimit
;
463 SIZE_T PeakNonPagedPoolUsage
;
464 SIZE_T NonPagedPoolUsage
;
465 SIZE_T NonPagedPoolLimit
;
466 SIZE_T PeakPagefileUsage
;
467 SIZE_T PagefileUsage
;
468 SIZE_T PagefileLimit
;
469 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
471 typedef struct _CONTROLLER_OBJECT
{
474 PVOID ControllerExtension
;
475 KDEVICE_QUEUE DeviceWaitQueue
;
477 LARGE_INTEGER Spare2
;
478 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
480 /* DEVICE_OBJECT.Flags */
482 #define DO_DEVICE_HAS_NAME 0x00000040
483 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
484 #define DO_LONG_TERM_REQUESTS 0x00000200
485 #define DO_NEVER_LAST_DEVICE 0x00000400
486 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
487 #define DO_XIP 0x00020000
489 #define DRVO_REINIT_REGISTERED 0x00000008
490 #define DRVO_INITIALIZED 0x00000010
491 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
492 #define DRVO_LEGACY_RESOURCES 0x00000040
494 typedef enum _ARBITER_REQUEST_SOURCE
{
495 ArbiterRequestUndefined
= -1,
496 ArbiterRequestLegacyReported
,
497 ArbiterRequestHalReported
,
498 ArbiterRequestLegacyAssigned
,
499 ArbiterRequestPnpDetected
,
500 ArbiterRequestPnpEnumerated
501 } ARBITER_REQUEST_SOURCE
;
503 typedef enum _ARBITER_RESULT
{
504 ArbiterResultUndefined
= -1,
505 ArbiterResultSuccess
,
506 ArbiterResultExternalConflict
,
507 ArbiterResultNullRequest
510 typedef enum _ARBITER_ACTION
{
511 ArbiterActionTestAllocation
,
512 ArbiterActionRetestAllocation
,
513 ArbiterActionCommitAllocation
,
514 ArbiterActionRollbackAllocation
,
515 ArbiterActionQueryAllocatedResources
,
516 ArbiterActionWriteReservedResources
,
517 ArbiterActionQueryConflict
,
518 ArbiterActionQueryArbitrate
,
519 ArbiterActionAddReserved
,
520 ArbiterActionBootAllocation
521 } ARBITER_ACTION
, *PARBITER_ACTION
;
523 typedef struct _ARBITER_CONFLICT_INFO
{
524 PDEVICE_OBJECT OwningObject
;
527 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
529 typedef struct _ARBITER_PARAMETERS
{
532 IN OUT PLIST_ENTRY ArbitrationList
;
533 IN ULONG AllocateFromCount
;
534 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
538 IN OUT PLIST_ENTRY ArbitrationList
;
539 IN ULONG AllocateFromCount
;
540 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
544 IN OUT PLIST_ENTRY ArbitrationList
;
548 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
549 } QueryAllocatedResources
;
552 IN PDEVICE_OBJECT PhysicalDeviceObject
;
553 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
554 OUT PULONG ConflictCount
;
555 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
559 IN PLIST_ENTRY ArbitrationList
;
563 IN PDEVICE_OBJECT ReserveDevice
;
566 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
568 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
570 typedef struct _ARBITER_LIST_ENTRY
{
571 LIST_ENTRY ListEntry
;
572 ULONG AlternativeCount
;
573 PIO_RESOURCE_DESCRIPTOR Alternatives
;
574 PDEVICE_OBJECT PhysicalDeviceObject
;
575 ARBITER_REQUEST_SOURCE RequestSource
;
578 INTERFACE_TYPE InterfaceType
;
581 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
582 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
583 ARBITER_RESULT Result
;
584 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
587 (DDKAPI
*PARBITER_HANDLER
)(
589 IN ARBITER_ACTION Action
,
590 IN OUT PARBITER_PARAMETERS Parameters
);
592 #define ARBITER_PARTIAL 0x00000001
594 typedef struct _ARBITER_INTERFACE
{
598 PINTERFACE_REFERENCE InterfaceReference
;
599 PINTERFACE_DEREFERENCE InterfaceDereference
;
600 PARBITER_HANDLER ArbiterHandler
;
602 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
604 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
605 HalInstalledBusInformation
,
606 HalProfileSourceInformation
,
607 HalInformationClassUnused1
,
609 HalProcessorSpeedInformation
,
610 HalCallbackInformation
,
611 HalMapRegisterInformation
,
612 HalMcaLogInformation
,
613 HalFrameBufferCachingInformation
,
614 HalDisplayBiosInformation
,
615 HalProcessorFeatureInformation
,
616 HalNumaTopologyInterface
,
618 HalCmcLogInformation
,
619 HalCpeLogInformation
,
620 HalQueryMcaInterface
,
621 HalQueryAMLIIllegalIOPortAddresses
,
622 HalQueryMaxHotPlugMemoryAddress
,
623 HalPartitionIpiInterface
,
624 HalPlatformInformation
,
625 HalQueryProfileSourceList
626 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
628 typedef enum _HAL_SET_INFORMATION_CLASS
{
629 HalProfileSourceInterval
,
630 HalProfileSourceInterruptHandler
,
631 HalMcaRegisterDriver
,
632 HalKernelErrorHandler
,
633 HalCmcRegisterDriver
,
634 HalCpeRegisterDriver
,
638 HalGenerateCmcInterrupt
639 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
641 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
643 KPROFILE_SOURCE Source
;
645 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
647 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
649 KPROFILE_SOURCE Source
;
652 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
654 typedef struct _MAP_REGISTER_ENTRY
657 BOOLEAN WriteToDevice
;
658 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
665 PUCHAR TranslatedAddress
;
667 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
671 PHYSICAL_ADDRESS Start
;
672 PHYSICAL_ADDRESS MaxEnd
;
673 PVOID VirtualAddress
;
677 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
689 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
690 DEBUG_MEMORY_REQUIREMENTS Memory
;
691 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
693 /* Function Type Defintions for Dispatch Functions */
694 struct _DEVICE_CONTROL_CONTEXT
;
697 (DDKAPI
*PDEVICE_CONTROL_COMPLETION
)(
698 IN
struct _DEVICE_CONTROL_CONTEXT
*ControlContext
);
700 typedef struct _DEVICE_CONTROL_CONTEXT
{
702 PDEVICE_HANDLER_OBJECT DeviceHandler
;
703 PDEVICE_OBJECT DeviceObject
;
708 } DEVICE_CONTROL_CONTEXT
, *PDEVICE_CONTROL_CONTEXT
;
710 typedef struct _PM_DISPATCH_TABLE
{
714 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
716 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
717 TranslateChildToParent
,
718 TranslateParentToChild
719 } RESOURCE_TRANSLATION_DIRECTION
;
722 (DDKAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
724 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
725 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
726 IN ULONG AlternativesCount
,
727 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
728 IN PDEVICE_OBJECT PhysicalDeviceObject
,
729 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
732 (DDKAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
734 IN PIO_RESOURCE_DESCRIPTOR Source
,
735 IN PDEVICE_OBJECT PhysicalDeviceObject
,
736 OUT PULONG TargetCount
,
737 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
739 typedef struct _TRANSLATOR_INTERFACE
{
743 PINTERFACE_REFERENCE InterfaceReference
;
744 PINTERFACE_DEREFERENCE InterfaceDereference
;
745 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
746 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
747 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
750 (DDKAPI
*pHalDeviceControl
)(
751 IN PDEVICE_HANDLER_OBJECT DeviceHandler
,
752 IN PDEVICE_OBJECT DeviceObject
,
753 IN ULONG ControlCode
,
754 IN OUT PVOID Buffer OPTIONAL
,
755 IN OUT PULONG BufferLength OPTIONAL
,
757 IN PDEVICE_CONTROL_COMPLETION CompletionRoutine
);
760 (FASTCALL
*pHalExamineMBR
)(
761 IN PDEVICE_OBJECT DeviceObject
,
763 IN ULONG MBRTypeIdentifier
,
767 (FASTCALL
*pHalIoAssignDriveLetters
)(
768 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
769 IN PSTRING NtDeviceName
,
770 OUT PUCHAR NtSystemPath
,
771 OUT PSTRING NtSystemPathString
);
774 (FASTCALL
*pHalIoReadPartitionTable
)(
775 IN PDEVICE_OBJECT DeviceObject
,
777 IN BOOLEAN ReturnRecognizedPartitions
,
778 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
781 (FASTCALL
*pHalIoSetPartitionInformation
)(
782 IN PDEVICE_OBJECT DeviceObject
,
784 IN ULONG PartitionNumber
,
785 IN ULONG PartitionType
);
788 (FASTCALL
*pHalIoWritePartitionTable
)(
789 IN PDEVICE_OBJECT DeviceObject
,
791 IN ULONG SectorsPerTrack
,
792 IN ULONG NumberOfHeads
,
793 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
796 (FASTCALL
*pHalHandlerForBus
)(
797 IN INTERFACE_TYPE InterfaceType
,
801 (FASTCALL
*pHalReferenceBusHandler
)(
802 IN PBUS_HANDLER BusHandler
);
805 (DDKAPI
*pHalQuerySystemInformation
)(
806 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
809 OUT PULONG ReturnedLength
);
812 (DDKAPI
*pHalSetSystemInformation
)(
813 IN HAL_SET_INFORMATION_CLASS InformationClass
,
818 (DDKAPI
*pHalQueryBusSlots
)(
819 IN PBUS_HANDLER BusHandler
,
821 OUT PULONG SlotNumbers
,
822 OUT PULONG ReturnedLength
);
825 (DDKAPI
*pHalInitPnpDriver
)(
829 (DDKAPI
*pHalInitPowerManagement
)(
830 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
831 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
833 typedef struct _DMA_ADAPTER
*
834 (DDKAPI
*pHalGetDmaAdapter
)(
836 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
837 OUT PULONG NumberOfMapRegisters
);
840 (DDKAPI
*pHalGetInterruptTranslator
)(
841 IN INTERFACE_TYPE ParentInterfaceType
,
842 IN ULONG ParentBusNumber
,
843 IN INTERFACE_TYPE BridgeInterfaceType
,
846 OUT PTRANSLATOR_INTERFACE Translator
,
847 OUT PULONG BridgeBusNumber
);
850 (DDKAPI
*pHalStartMirroring
)(
854 (DDKAPI
*pHalEndMirroring
)(
855 IN ULONG PassNumber
);
858 (DDKAPI
*pHalMirrorPhysicalMemory
)(
859 IN PHYSICAL_ADDRESS PhysicalAddress
,
860 IN LARGE_INTEGER NumberOfBytes
);
863 (DDKAPI
*pHalMirrorVerify
)(
864 IN PHYSICAL_ADDRESS PhysicalAddress
,
865 IN LARGE_INTEGER NumberOfBytes
);
868 (DDKAPI
*pHalEndOfBoot
)(
873 (DDKAPI
*pHalTranslateBusAddress
)(
874 IN INTERFACE_TYPE InterfaceType
,
876 IN PHYSICAL_ADDRESS BusAddress
,
877 IN OUT PULONG AddressSpace
,
878 OUT PPHYSICAL_ADDRESS TranslatedAddress
883 (DDKAPI
*pHalAssignSlotResources
)(
884 IN PUNICODE_STRING RegistryPath
,
885 IN PUNICODE_STRING DriverClassName OPTIONAL
,
886 IN PDRIVER_OBJECT DriverObject
,
887 IN PDEVICE_OBJECT DeviceObject
,
888 IN INTERFACE_TYPE BusType
,
891 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
896 (DDKAPI
*pHalHaltSystem
)(
902 (DDKAPI
*pHalResetDisplay
)(
908 (DDKAPI
*pHalVectorToIDTEntry
)(
914 (DDKAPI
*pHalFindBusAddressTranslation
)(
915 IN PHYSICAL_ADDRESS BusAddress
,
916 IN OUT PULONG AddressSpace
,
917 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
918 IN OUT PULONG_PTR Context
,
924 (DDKAPI
*pKdSetupPciDeviceForDebugging
)(
925 IN PVOID LoaderBlock OPTIONAL
,
926 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
931 (DDKAPI
*pKdReleasePciDeviceForDebugging
)(
932 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
937 (DDKAPI
*pKdGetAcpiTablePhase0
)(
938 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
944 (DDKAPI
*pKdCheckPowerButton
)(
950 (DDKAPI
*pHalGetInterruptVector
)(
951 IN INTERFACE_TYPE InterfaceType
,
953 IN ULONG BusInterruptLevel
,
954 IN ULONG BusInterruptVector
,
956 OUT PKAFFINITY Affinity
961 (DDKAPI
*pHalGetVectorInput
)(
963 IN KAFFINITY Affinity
,
965 OUT PKINTERRUPT_POLARITY Polarity
970 (DDKAPI
*pKdMapPhysicalMemory64
)(
971 IN PHYSICAL_ADDRESS PhysicalAddress
,
977 (DDKAPI
*pKdUnmapVirtualAddress
)(
978 IN PVOID VirtualAddress
,
984 (DDKAPI
*pKdGetPciDataByOffset
)(
994 (DDKAPI
*pKdSetPciDataByOffset
)(
1003 (DDKAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
1004 ULONG Columns
, ULONG Rows
);
1008 pHalQuerySystemInformation HalQuerySystemInformation
;
1009 pHalSetSystemInformation HalSetSystemInformation
;
1010 pHalQueryBusSlots HalQueryBusSlots
;
1012 pHalExamineMBR HalExamineMBR
;
1013 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
1014 pHalIoReadPartitionTable HalIoReadPartitionTable
;
1015 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
1016 pHalIoWritePartitionTable HalIoWritePartitionTable
;
1017 pHalHandlerForBus HalReferenceHandlerForBus
;
1018 pHalReferenceBusHandler HalReferenceBusHandler
;
1019 pHalReferenceBusHandler HalDereferenceBusHandler
;
1020 pHalInitPnpDriver HalInitPnpDriver
;
1021 pHalInitPowerManagement HalInitPowerManagement
;
1022 pHalGetDmaAdapter HalGetDmaAdapter
;
1023 pHalGetInterruptTranslator HalGetInterruptTranslator
;
1024 pHalStartMirroring HalStartMirroring
;
1025 pHalEndMirroring HalEndMirroring
;
1026 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
1027 pHalEndOfBoot HalEndOfBoot
;
1028 pHalMirrorVerify HalMirrorVerify
;
1029 } HAL_DISPATCH
, *PHAL_DISPATCH
;
1031 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTHAL_)
1032 extern NTSYSAPI PHAL_DISPATCH HalDispatchTable
;
1033 #define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable)
1035 extern __declspec(dllexport
) HAL_DISPATCH HalDispatchTable
;
1036 #define HALDISPATCH (&HalDispatchTable)
1039 #define HAL_DISPATCH_VERSION 3
1040 #define HalDispatchTableVersion HALDISPATCH->Version
1041 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
1042 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
1043 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
1044 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
1045 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
1046 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
1047 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
1048 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
1049 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
1050 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
1051 #define HalStartMirroring HALDISPATCH->HalStartMirroring
1052 #define HalEndMirroring HALDISPATCH->HalEndMirroring
1053 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
1054 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
1055 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
1057 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1058 ULONG AlignmentRequirement
;
1059 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1061 typedef struct _FILE_NAME_INFORMATION
{
1062 ULONG FileNameLength
;
1064 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1067 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1068 ULONG FileAttributes
;
1070 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1072 typedef struct _FILE_DISPOSITION_INFORMATION
{
1074 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1076 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1077 LARGE_INTEGER EndOfFile
;
1078 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1080 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1081 LARGE_INTEGER ValidDataLength
;
1082 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1084 typedef union _FILE_SEGMENT_ELEMENT
{
1086 ULONGLONG Alignment
;
1087 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1089 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
1091 typedef struct _KEY_USER_FLAGS_INFORMATION
{
1093 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
1095 #define PCI_ADDRESS_MEMORY_SPACE 0x00000000
1097 typedef struct _OSVERSIONINFOA
{
1098 ULONG dwOSVersionInfoSize
;
1099 ULONG dwMajorVersion
;
1100 ULONG dwMinorVersion
;
1101 ULONG dwBuildNumber
;
1103 CHAR szCSDVersion
[128];
1104 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
1106 typedef struct _OSVERSIONINFOW
{
1107 ULONG dwOSVersionInfoSize
;
1108 ULONG dwMajorVersion
;
1109 ULONG dwMinorVersion
;
1110 ULONG dwBuildNumber
;
1112 WCHAR szCSDVersion
[128];
1113 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
1116 typedef OSVERSIONINFOW OSVERSIONINFO
;
1117 typedef POSVERSIONINFOW POSVERSIONINFO
;
1118 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
1120 typedef OSVERSIONINFOA OSVERSIONINFO
;
1121 typedef POSVERSIONINFOA POSVERSIONINFO
;
1122 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
1125 typedef struct _OSVERSIONINFOEXA
{
1126 ULONG dwOSVersionInfoSize
;
1127 ULONG dwMajorVersion
;
1128 ULONG dwMinorVersion
;
1129 ULONG dwBuildNumber
;
1131 CHAR szCSDVersion
[128];
1132 USHORT wServicePackMajor
;
1133 USHORT wServicePackMinor
;
1137 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
1139 typedef struct _OSVERSIONINFOEXW
{
1140 ULONG dwOSVersionInfoSize
;
1141 ULONG dwMajorVersion
;
1142 ULONG dwMinorVersion
;
1143 ULONG dwBuildNumber
;
1145 WCHAR szCSDVersion
[128];
1146 USHORT wServicePackMajor
;
1147 USHORT wServicePackMinor
;
1151 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
1154 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
1155 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
1156 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
1158 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
1159 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
1160 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
1166 VerSetConditionMask(
1167 IN ULONGLONG ConditionMask
,
1169 IN UCHAR Condition
);
1171 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
1172 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
1173 (TypeBitMask), (ComparisonType)))
1175 /* RtlVerifyVersionInfo() TypeMask */
1177 #define VER_MINORVERSION 0x0000001
1178 #define VER_MAJORVERSION 0x0000002
1179 #define VER_BUILDNUMBER 0x0000004
1180 #define VER_PLATFORMID 0x0000008
1181 #define VER_SERVICEPACKMINOR 0x0000010
1182 #define VER_SERVICEPACKMAJOR 0x0000020
1183 #define VER_SUITENAME 0x0000040
1184 #define VER_PRODUCT_TYPE 0x0000080
1186 /* RtlVerifyVersionInfo() ComparisonType */
1189 #define VER_GREATER 2
1190 #define VER_GREATER_EQUAL 3
1192 #define VER_LESS_EQUAL 5
1196 #define VER_CONDITION_MASK 7
1197 #define VER_NUM_BITS_PER_CONDITION_MASK 3
1202 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
) (
1204 struct _RTL_RANGE
*Range
1207 typedef struct _CONFIGURATION_INFORMATION
{
1212 ULONG ScsiPortCount
;
1214 ULONG ParallelCount
;
1215 BOOLEAN AtDiskPrimaryAddressClaimed
;
1216 BOOLEAN AtDiskSecondaryAddressClaimed
;
1218 ULONG MediumChangerCount
;
1219 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
1221 typedef enum _CONFIGURATION_TYPE
{
1224 FloatingPointProcessor
,
1234 MultiFunctionAdapter
,
1248 FloppyDiskPeripheral
,
1261 RealModeIrqRoutingTable
,
1262 RealModePCIEnumeration
,
1264 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
1267 (DDKAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
1269 IN PUNICODE_STRING PathName
,
1270 IN INTERFACE_TYPE BusType
,
1272 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
1273 IN CONFIGURATION_TYPE ControllerType
,
1274 IN ULONG ControllerNumber
,
1275 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
1276 IN CONFIGURATION_TYPE PeripheralType
,
1277 IN ULONG PeripheralNumber
,
1278 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
1280 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
1281 IoQueryDeviceIdentifier
= 0,
1282 IoQueryDeviceConfigurationData
,
1283 IoQueryDeviceComponentInformation
,
1284 IoQueryDeviceMaxData
1285 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
1288 (DDKAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
1290 IN HANDLE ProcessId
,
1294 (DDKAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
1295 IN HANDLE ProcessId
,
1299 typedef struct _IMAGE_INFO
{
1300 _ANONYMOUS_UNION
union {
1302 _ANONYMOUS_STRUCT
struct {
1303 ULONG ImageAddressingMode
: 8;
1304 ULONG SystemModeImage
: 1;
1305 ULONG ImageMappedToAllPids
: 1;
1306 ULONG Reserved
: 22;
1310 ULONG ImageSelector
;
1312 ULONG ImageSectionNumber
;
1313 } IMAGE_INFO
, *PIMAGE_INFO
;
1315 #define IMAGE_ADDRESSING_MODE_32BIT 3
1318 (DDKAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
1319 IN PUNICODE_STRING FullImageName
,
1320 IN HANDLE ProcessId
,
1321 IN PIMAGE_INFO ImageInfo
);
1323 #pragma pack(push,4)
1324 typedef enum _BUS_DATA_TYPE
{
1325 ConfigurationSpaceUndefined
= -1,
1333 PCMCIAConfiguration
,
1336 PNPISAConfiguration
,
1337 SgiInternalConfiguration
,
1339 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
1342 typedef struct _NT_TIB
{
1343 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
1347 _ANONYMOUS_UNION
union {
1351 PVOID ArbitraryUserPointer
;
1352 struct _NT_TIB
*Self
;
1355 typedef struct _NT_TIB32
{
1356 ULONG ExceptionList
;
1360 __GNU_EXTENSION
union {
1364 ULONG ArbitraryUserPointer
;
1366 } NT_TIB32
,*PNT_TIB32
;
1368 typedef struct _NT_TIB64
{
1369 ULONG64 ExceptionList
;
1372 ULONG64 SubSystemTib
;
1373 __GNU_EXTENSION
union {
1377 ULONG64 ArbitraryUserPointer
;
1379 } NT_TIB64
,*PNT_TIB64
;
1381 typedef enum _PROCESSINFOCLASS
{
1382 ProcessBasicInformation
,
1387 ProcessBasePriority
,
1388 ProcessRaisePriority
,
1390 ProcessExceptionPort
,
1392 ProcessLdtInformation
,
1394 ProcessDefaultHardErrorMode
,
1395 ProcessIoPortHandlers
,
1396 ProcessPooledUsageAndLimits
,
1397 ProcessWorkingSetWatch
,
1398 ProcessUserModeIOPL
,
1399 ProcessEnableAlignmentFaultFixup
,
1400 ProcessPriorityClass
,
1401 ProcessWx86Information
,
1403 ProcessAffinityMask
,
1404 ProcessPriorityBoost
,
1406 ProcessSessionInformation
,
1407 ProcessForegroundInformation
,
1408 ProcessWow64Information
,
1409 ProcessImageFileName
,
1410 ProcessLUIDDeviceMapsEnabled
,
1411 ProcessBreakOnTermination
,
1412 ProcessDebugObjectHandle
,
1414 ProcessHandleTracing
,
1416 ProcessExecuteFlags
,
1417 ProcessTlsInformation
,
1419 ProcessImageInformation
,
1421 ProcessPagePriority
,
1422 ProcessInstrumentationCallback
,
1426 typedef enum _THREADINFOCLASS
{
1427 ThreadBasicInformation
,
1432 ThreadImpersonationToken
,
1433 ThreadDescriptorTableEntry
,
1434 ThreadEnableAlignmentFaultFixup
,
1435 ThreadEventPair_Reusable
,
1436 ThreadQuerySetWin32StartAddress
,
1438 ThreadPerformanceCount
,
1439 ThreadAmILastThread
,
1440 ThreadIdealProcessor
,
1441 ThreadPriorityBoost
,
1442 ThreadSetTlsArrayAddress
,
1444 ThreadHideFromDebugger
,
1445 ThreadBreakOnTermination
,
1446 ThreadSwitchLegacyState
,
1448 ThreadLastSystemCall
,
1452 ThreadActualBasePriority
,
1456 typedef struct _PROCESS_BASIC_INFORMATION
1458 NTSTATUS ExitStatus
;
1459 struct _PEB
*PebBaseAddress
;
1460 ULONG_PTR AffinityMask
;
1461 KPRIORITY BasePriority
;
1462 ULONG_PTR UniqueProcessId
;
1463 ULONG_PTR InheritedFromUniqueProcessId
;
1464 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
1466 typedef struct _PROCESS_WS_WATCH_INFORMATION
1470 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
1472 typedef struct _PROCESS_DEVICEMAP_INFORMATION
1474 __GNU_EXTENSION
union
1478 HANDLE DirectoryHandle
;
1483 UCHAR DriveType
[32];
1486 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
1488 typedef struct _KERNEL_USER_TIMES
1490 LARGE_INTEGER CreateTime
;
1491 LARGE_INTEGER ExitTime
;
1492 LARGE_INTEGER KernelTime
;
1493 LARGE_INTEGER UserTime
;
1494 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1496 typedef struct _PROCESS_ACCESS_TOKEN
1500 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1502 typedef struct _PROCESS_SESSION_INFORMATION
1505 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1508 ** Storage structures
1510 typedef enum _PARTITION_STYLE
{
1511 PARTITION_STYLE_MBR
,
1512 PARTITION_STYLE_GPT
,
1516 typedef struct _CREATE_DISK_MBR
{
1518 } CREATE_DISK_MBR
, *PCREATE_DISK_MBR
;
1520 typedef struct _CREATE_DISK_GPT
{
1522 ULONG MaxPartitionCount
;
1523 } CREATE_DISK_GPT
, *PCREATE_DISK_GPT
;
1525 typedef struct _CREATE_DISK
{
1526 PARTITION_STYLE PartitionStyle
;
1527 _ANONYMOUS_UNION
union {
1528 CREATE_DISK_MBR Mbr
;
1529 CREATE_DISK_GPT Gpt
;
1531 } CREATE_DISK
, *PCREATE_DISK
;
1533 typedef struct _DISK_SIGNATURE
{
1534 ULONG PartitionStyle
;
1535 _ANONYMOUS_UNION
union {
1544 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
1547 (FASTCALL
*PTIME_UPDATE_NOTIFY_ROUTINE
)(
1549 IN KPROCESSOR_MODE Mode
);
1551 typedef struct _PHYSICAL_MEMORY_RANGE
{
1552 PHYSICAL_ADDRESS BaseAddress
;
1553 LARGE_INTEGER NumberOfBytes
;
1554 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
1557 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
1560 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
1561 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
1562 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
1563 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
1565 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1566 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1567 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1568 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1569 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1572 (DDKAPI
*PTIMER_APC_ROUTINE
)(
1573 IN PVOID TimerContext
,
1574 IN ULONG TimerLowValue
,
1575 IN LONG TimerHighValue
);
1578 ** Architecture specific structures
1580 #define PCR_MINOR_VERSION 1
1581 #define PCR_MAJOR_VERSION 1
1585 #define SIZE_OF_80387_REGISTERS 80
1586 #define CONTEXT_i386 0x10000
1587 #define CONTEXT_i486 0x10000
1588 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
1589 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
1590 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
1591 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
1592 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
1593 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
1594 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
1596 typedef struct _FLOATING_SAVE_AREA
{
1601 ULONG ErrorSelector
;
1604 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
1606 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
1608 typedef struct _CONTEXT
{
1616 FLOATING_SAVE_AREA FloatSave
;
1633 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
1636 typedef struct _KPCR_TIB
{
1637 PVOID ExceptionList
; /* 00 */
1638 PVOID StackBase
; /* 04 */
1639 PVOID StackLimit
; /* 08 */
1640 PVOID SubSystemTib
; /* 0C */
1641 _ANONYMOUS_UNION
union {
1642 PVOID FiberData
; /* 10 */
1643 ULONG Version
; /* 10 */
1645 PVOID ArbitraryUserPointer
; /* 14 */
1646 struct _KPCR_TIB
*Self
; /* 18 */
1647 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
1649 typedef struct _KPCR
{
1650 KPCR_TIB Tib
; /* 00 */
1651 struct _KPCR
*Self
; /* 1C */
1652 struct _KPRCB
*Prcb
; /* 20 */
1653 KIRQL Irql
; /* 24 */
1655 ULONG IrrActive
; /* 2C */
1657 PVOID KdVersionBlock
; /* 34 */
1658 PUSHORT IDT
; /* 38 */
1659 PUSHORT GDT
; /* 3C */
1660 struct _KTSS
*TSS
; /* 40 */
1661 USHORT MajorVersion
; /* 44 */
1662 USHORT MinorVersion
; /* 46 */
1663 KAFFINITY SetMember
; /* 48 */
1664 ULONG StallScaleFactor
; /* 4C */
1665 UCHAR SpareUnused
; /* 50 */
1666 UCHAR Number
; /* 51 */
1668 UCHAR SecondLevelCacheAssociativity
;
1670 ULONG KernelReserved
[14]; // For use by the kernel
1671 ULONG SecondLevelCacheSize
;
1672 ULONG HalReserved
[16]; // For use by Hal
1673 } KPCR
, *PKPCR
; /* 54 */
1675 #define KeGetPcr() PCR
1679 KeGetCurrentProcessorNumber(VOID
)
1681 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
1684 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1685 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1686 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
1688 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1689 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1690 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1691 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1692 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
1694 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
1695 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
1697 #elif defined(__x86_64__)
1699 #define CONTEXT_AMD64 0x100000
1700 #if !defined(RC_INVOKED)
1701 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
1702 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
1703 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
1704 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
1705 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
1707 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1708 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1710 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1711 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1712 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1713 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1716 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
1766 /* Floating point */
1768 XMM_SAVE_AREA32 FltSave
;
1792 M128A VectorRegister
[26];
1793 ULONG64 VectorControl
;
1796 ULONG64 DebugControl
;
1797 ULONG64 LastBranchToRip
;
1798 ULONG64 LastBranchFromRip
;
1799 ULONG64 LastExceptionToRip
;
1800 ULONG64 LastExceptionFromRip
;
1803 #define PAGE_SIZE 0x1000
1804 #define PAGE_SHIFT 12L
1805 #define PTI_SHIFT 12L
1806 #define PDI_SHIFT 21L
1807 #define PPI_SHIFT 30L
1808 #define PXI_SHIFT 39L
1809 #define PTE_PER_PAGE 512
1810 #define PDE_PER_PAGE 512
1811 #define PPE_PER_PAGE 512
1812 #define PXE_PER_PAGE 512
1813 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
1814 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
1815 #define PPI_MASK (PPE_PER_PAGE - 1)
1816 #define PXI_MASK (PXE_PER_PAGE - 1)
1818 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
1819 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
1820 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
1821 #define PDE_BASE 0xFFFFF6FB40000000ULL
1822 #define PTE_BASE 0xFFFFF68000000000ULL
1823 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
1824 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
1825 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
1826 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
1828 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1829 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1830 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
1832 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1833 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1834 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1835 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1836 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
1837 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
1839 #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
1840 #define SharedInterruptTime (&SharedUserData->InterruptTime)
1841 #define SharedSystemTime (&SharedUserData->SystemTime)
1842 #define SharedTickCount (&SharedUserData->TickCount)
1844 #define KeQueryInterruptTime() \
1845 (*(volatile ULONG64*)SharedInterruptTime)
1846 #define KeQuerySystemTime(CurrentCount) \
1847 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
1848 #define KeQueryTickCount(CurrentCount) \
1849 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
1851 typedef struct _KPCR
1853 __GNU_EXTENSION
union
1856 __GNU_EXTENSION
struct
1858 union _KGDTENTRY64
*GdtBase
;
1859 struct _KTSS64
*TssBase
;
1862 struct _KPRCB
*CurrentPrcb
;
1863 PKSPIN_LOCK_QUEUE LockArray
;
1867 union _KIDTENTRY64
*IdtBase
;
1870 UCHAR SecondLevelCacheAssociativity
;
1871 UCHAR ObsoleteNumber
;
1874 USHORT MajorVersion
;
1875 USHORT MinorVersion
;
1876 ULONG StallScaleFactor
;
1878 ULONG KernelReserved
[15];
1879 ULONG SecondLevelCacheSize
;
1880 ULONG HalReserved
[16];
1882 PVOID KdVersionBlock
;
1884 ULONG PcrAlign1
[24];
1887 typedef struct _KFLOATING_SAVE
{
1889 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
1895 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
1900 KeGetCurrentProcessorNumber(VOID
)
1902 return (ULONG
)__readgsword(0x184);
1905 #elif defined(__PowerPC__)
1908 // Used to contain PFNs and PFN counts
1910 typedef ULONG PFN_COUNT
;
1911 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
1912 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
1914 #define PASSIVE_LEVEL 0
1917 #define DISPATCH_LEVEL 2
1918 #define PROFILE_LEVEL 27
1919 #define CLOCK1_LEVEL 28
1920 #define CLOCK2_LEVEL 28
1921 #define IPI_LEVEL 29
1922 #define POWER_LEVEL 30
1923 #define HIGH_LEVEL 31
1925 typedef struct _KFLOATING_SAVE
{
1927 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
1929 typedef struct _KPCR_TIB
{
1930 PVOID ExceptionList
; /* 00 */
1931 PVOID StackBase
; /* 04 */
1932 PVOID StackLimit
; /* 08 */
1933 PVOID SubSystemTib
; /* 0C */
1934 _ANONYMOUS_UNION
union {
1935 PVOID FiberData
; /* 10 */
1936 ULONG Version
; /* 10 */
1938 PVOID ArbitraryUserPointer
; /* 14 */
1939 struct _KPCR_TIB
*Self
; /* 18 */
1940 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
1942 #define PCR_MINOR_VERSION 1
1943 #define PCR_MAJOR_VERSION 1
1945 typedef struct _KPCR
{
1946 KPCR_TIB Tib
; /* 00 */
1947 struct _KPCR
*Self
; /* 1C */
1948 struct _KPRCB
*Prcb
; /* 20 */
1949 KIRQL Irql
; /* 24 */
1951 ULONG IrrActive
; /* 2C */
1953 PVOID KdVersionBlock
; /* 34 */
1954 PUSHORT IDT
; /* 38 */
1955 PUSHORT GDT
; /* 3C */
1956 struct _KTSS
*TSS
; /* 40 */
1957 USHORT MajorVersion
; /* 44 */
1958 USHORT MinorVersion
; /* 46 */
1959 KAFFINITY SetMember
; /* 48 */
1960 ULONG StallScaleFactor
; /* 4C */
1961 UCHAR SpareUnused
; /* 50 */
1962 UCHAR Number
; /* 51 */
1963 } KPCR
, *PKPCR
; /* 54 */
1965 #define KeGetPcr() PCR
1970 KeGetCurrentProcessorNumber(VOID
)
1973 __asm__
__volatile__ (
1976 : "i" (FIELD_OFFSET(KPCR
, Number
))
1981 #elif defined(_MIPS_)
1983 #error MIPS Headers are totally incorrect
1986 // Used to contain PFNs and PFN counts
1988 typedef ULONG PFN_COUNT
;
1989 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
1990 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
1992 #define PASSIVE_LEVEL 0
1994 #define DISPATCH_LEVEL 2
1995 #define PROFILE_LEVEL 27
1996 #define IPI_LEVEL 29
1997 #define HIGH_LEVEL 31
1999 typedef struct _KPCR
{
2000 struct _KPRCB
*Prcb
; /* 20 */
2001 KIRQL Irql
; /* 24 */
2006 #define KeGetPcr() PCR
2008 typedef struct _KFLOATING_SAVE
{
2009 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
2014 KeGetCurrentProcessorNumber(VOID
)
2019 #elif defined(_M_ARM)
2022 // NT-ARM is not documented, need DDK-ARM
2027 #error Unknown architecture
2030 typedef enum _INTERLOCKED_RESULT
{
2031 ResultNegative
= RESULT_NEGATIVE
,
2032 ResultZero
= RESULT_ZERO
,
2033 ResultPositive
= RESULT_POSITIVE
2034 } INTERLOCKED_RESULT
;
2037 (NTAPI
*PciPin2Line
)(
2038 IN
struct _BUS_HANDLER
*BusHandler
,
2039 IN
struct _BUS_HANDLER
*RootHandler
,
2040 IN PCI_SLOT_NUMBER SlotNumber
,
2041 IN PPCI_COMMON_CONFIG PciData
2045 (NTAPI
*PciLine2Pin
)(
2046 IN
struct _BUS_HANDLER
*BusHandler
,
2047 IN
struct _BUS_HANDLER
*RootHandler
,
2048 IN PCI_SLOT_NUMBER SlotNumber
,
2049 IN PPCI_COMMON_CONFIG PciNewData
,
2050 IN PPCI_COMMON_CONFIG PciOldData
2054 (NTAPI
*PciReadWriteConfig
)(
2055 IN
struct _BUS_HANDLER
*BusHandler
,
2056 IN PCI_SLOT_NUMBER Slot
,
2062 #define PCI_DATA_TAG ' ICP'
2063 #define PCI_DATA_VERSION 1
2065 typedef struct _PCIBUSDATA
2069 PciReadWriteConfig ReadConfig
;
2070 PciReadWriteConfig WriteConfig
;
2071 PciPin2Line Pin2Line
;
2072 PciLine2Pin Line2Pin
;
2073 PCI_SLOT_NUMBER ParentSlot
;
2075 } PCIBUSDATA
, *PPCIBUSDATA
;
2078 /** SPINLOCK FUNCTIONS ********************************************************/
2082 #if defined(WIN9X_COMPAT_SPINLOCK)
2087 KeInitializeSpinLock(
2088 IN PKSPIN_LOCK SpinLock
2095 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
2097 /* Clear the lock */
2107 IN PKSPIN_LOCK SpinLock
);
2113 IN PKSPIN_LOCK SpinLock
,
2119 KefAcquireSpinLockAtDpcLevel(
2120 IN PKSPIN_LOCK SpinLock
);
2125 KefReleaseSpinLockFromDpcLevel(
2126 IN PKSPIN_LOCK SpinLock
);
2128 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
2129 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
2130 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
2131 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
2133 #define KeGetDcacheFillSize() 1L
2135 #elif defined(_M_ARM) // !defined (_X86_)
2139 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
2141 /* Clear the lock */
2149 IN PKSPIN_LOCK SpinLock
);
2155 IN PKSPIN_LOCK SpinLock
,
2162 KefAcquireSpinLockAtDpcLevel(
2163 IN PKSPIN_LOCK SpinLock
);
2168 KefReleaseSpinLockFromDpcLevel(
2169 IN PKSPIN_LOCK SpinLock
);
2172 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
2173 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
2174 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
2175 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
2180 KeInitializeSpinLock(
2181 IN PKSPIN_LOCK SpinLock
);
2188 KeInitializeSpinLock(
2189 PKSPIN_LOCK SpinLock
)
2197 IN PKSPIN_LOCK SpinLock
,
2202 KeAcquireSpinLockAtDpcLevel(
2203 IN PKSPIN_LOCK SpinLock
);
2207 KeReleaseSpinLockFromDpcLevel(
2208 IN PKSPIN_LOCK SpinLock
);
2212 KeAcquireSpinLockRaiseToDpc(
2213 IN PKSPIN_LOCK SpinLock
);
2215 #define KeAcquireSpinLock(SpinLock, OldIrql) \
2216 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
2218 #endif // !defined (_X86_)
2220 #define ARGUMENT_PRESENT(ArgumentPointer) \
2221 ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL)
2228 IN ULONG Base OPTIONAL
,
2229 IN OUT PULONG Value
);
2237 BOOLEAN CaseInSensitive
);
2239 #if !defined(MIDL_PASS)
2244 RtlConvertLongToLuid(
2250 Temp
.QuadPart
= Val
;
2251 Luid
.LowPart
= Temp
.u
.LowPart
;
2252 Luid
.HighPart
= Temp
.u
.HighPart
;
2260 RtlConvertUlongToLuid(
2277 IN VOID UNALIGNED
*Destination
,
2278 IN CONST VOID UNALIGNED
*Source
,
2285 IN OUT PSTRING DestinationString
,
2286 IN PSTRING SourceString OPTIONAL
);
2294 IN BOOLEAN CaseInSensitive
);
2296 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
2297 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
2298 *CallersAddress = (PVOID)_ReturnAddress(); \
2299 *CallersCaller = NULL;
2304 RtlGetCallersAddress(
2305 OUT PVOID
*CallersAddress
,
2306 OUT PVOID
*CallersCaller
);
2313 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
2319 IN OUT PACCESS_MASK AccessMask
,
2320 IN PGENERIC_MAPPING GenericMapping
);
2325 RtlPrefixUnicodeString(
2326 IN PCUNICODE_STRING String1
,
2327 IN PCUNICODE_STRING String2
,
2328 IN BOOLEAN CaseInSensitive
);
2333 RtlUpcaseUnicodeString(
2334 IN OUT PUNICODE_STRING DestinationString OPTIONAL
,
2335 IN PCUNICODE_STRING SourceString
,
2336 IN BOOLEAN AllocateDestinationString
);
2348 IN OUT PSTRING DestinationString
,
2349 IN PSTRING SourceString
);
2354 RtlVerifyVersionInfo(
2355 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
2357 IN ULONGLONG ConditionMask
);
2362 RtlVolumeDeviceToDosName(
2363 IN PVOID VolumeDeviceObject
,
2364 OUT PUNICODE_STRING DosName
);
2374 /******************************************************************************
2376 ******************************************************************************/
2378 typedef struct _ZONE_SEGMENT_HEADER
{
2379 SINGLE_LIST_ENTRY SegmentList
;
2381 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
2383 typedef struct _ZONE_HEADER
{
2384 SINGLE_LIST_ENTRY FreeList
;
2385 SINGLE_LIST_ENTRY SegmentList
;
2387 ULONG TotalSegmentSize
;
2388 } ZONE_HEADER
, *PZONE_HEADER
;
2390 #define PROTECTED_POOL 0x80000000
2392 /******************************************************************************
2393 * Executive Functions *
2394 ******************************************************************************/
2400 IN PZONE_HEADER Zone
,
2402 IN ULONG SegmentSize
);
2404 static __inline PVOID
2406 IN PZONE_HEADER Zone
)
2408 if (Zone
->FreeList
.Next
)
2409 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
2410 return (PVOID
) Zone
->FreeList
.Next
;
2413 static __inline PVOID
2415 IN PZONE_HEADER Zone
,
2418 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
2419 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
2420 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
2427 IN PZONE_HEADER Zone
,
2429 IN PVOID InitialSegment
,
2430 IN ULONG InitialSegmentSize
);
2434 * ExInterlockedAllocateFromZone(
2435 * IN PZONE_HEADER Zone,
2436 * IN PKSPIN_LOCK Lock)
2438 #define ExInterlockedAllocateFromZone(Zone, Lock) \
2439 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
2444 ExInterlockedExtendZone(
2445 IN PZONE_HEADER Zone
,
2447 IN ULONG SegmentSize
,
2448 IN PKSPIN_LOCK Lock
);
2451 * ExInterlockedFreeToZone(
2452 * IN PZONE_HEADER Zone,
2454 * IN PKSPIN_LOCK Lock);
2456 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
2457 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
2462 * IN PZONE_HEADER Zone)
2464 #define ExIsFullZone(Zone) \
2465 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
2468 * ExIsObjectInFirstZoneSegment(
2469 * IN PZONE_HEADER Zone,
2472 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
2473 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
2474 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
2475 (Zone)->TotalSegmentSize)) )
2481 ExRaiseAccessViolation(
2488 ExRaiseDatatypeMisalignment(
2497 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
2498 #define ExAcquireResourceShared ExAcquireResourceSharedLite
2499 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
2500 #define ExDeleteResource ExDeleteResourceLite
2501 #define ExInitializeResource ExInitializeResourceLite
2502 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
2503 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
2504 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
2505 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
2507 /** Filesystem runtime library routines **/
2512 FsRtlIsTotalDeviceFailure(
2513 IN NTSTATUS Status
);
2515 /** Hardware abstraction layer routines **/
2521 IN ULONG Frequency
);
2527 IN PDEVICE_OBJECT DeviceObject
,
2528 IN ULONG SectorSize
,
2529 IN ULONG MBRTypeIdentifier
,
2535 PADAPTER_OBJECT AdapterObject
2538 /** I/O manager routines **/
2540 #ifndef DMA_MACROS_DEFINED
2544 IoAllocateAdapterChannel(
2545 IN PADAPTER_OBJECT AdapterObject
,
2546 IN PDEVICE_OBJECT DeviceObject
,
2547 IN ULONG NumberOfMapRegisters
,
2548 IN PDRIVER_CONTROL ExecutionRoutine
,
2555 IoAllocateController(
2556 IN PCONTROLLER_OBJECT ControllerObject
,
2557 IN PDEVICE_OBJECT DeviceObject
,
2558 IN PDRIVER_CONTROL ExecutionRoutine
,
2562 * VOID IoAssignArcName(
2563 * IN PUNICODE_STRING ArcName,
2564 * IN PUNICODE_STRING DeviceName);
2566 #define IoAssignArcName(_ArcName, _DeviceName) ( \
2567 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
2573 IN PDEVICE_OBJECT DeviceObject
,
2574 IN PFILE_OBJECT FileObject
);
2586 IN PDEVICE_OBJECT DeviceObject
,
2587 IN PCREATE_DISK Disk
);
2593 IN PCONTROLLER_OBJECT ControllerObject
);
2597 * IoDeassignArcName(
2598 * IN PUNICODE_STRING ArcName)
2600 #define IoDeassignArcName IoDeleteSymbolicLink
2606 IN PCONTROLLER_OBJECT ControllerObject
);
2609 PCONFIGURATION_INFORMATION
2611 IoGetConfigurationInformation(
2617 IoGetDeviceToVerify(
2618 IN PETHREAD Thread
);
2623 IoGetFileObjectGenericMapping(
2629 IoMakeAssociatedIrp(
2631 IN CCHAR StackSize
);
2636 IoQueryDeviceDescription(
2637 IN PINTERFACE_TYPE BusType OPTIONAL
,
2638 IN PULONG BusNumber OPTIONAL
,
2639 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
2640 IN PULONG ControllerNumber OPTIONAL
,
2641 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
2642 IN PULONG PeripheralNumber OPTIONAL
,
2643 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
2651 IN PVPB Vpb OPTIONAL
,
2652 IN PDEVICE_OBJECT RealDeviceObject
);
2657 IoRaiseInformationalHardError(
2658 IN NTSTATUS ErrorStatus
,
2659 IN PUNICODE_STRING String OPTIONAL
,
2660 IN PKTHREAD Thread OPTIONAL
);
2665 IoReadDiskSignature(
2666 IN PDEVICE_OBJECT DeviceObject
,
2667 IN ULONG BytesPerSector
,
2668 OUT PDISK_SIGNATURE Signature
);
2673 IoReadPartitionTable(
2674 IN PDEVICE_OBJECT DeviceObject
,
2675 IN ULONG SectorSize
,
2676 IN BOOLEAN ReturnRecognizedPartitions
,
2677 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2682 IoReadPartitionTableEx(
2683 IN PDEVICE_OBJECT DeviceObject
,
2684 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
2689 IoRegisterBootDriverReinitialization(
2690 IN PDRIVER_OBJECT DriverObject
,
2691 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2697 IoRegisterBootDriverReinitialization(
2698 IN PDRIVER_OBJECT DriverObject
,
2699 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2705 IoRegisterDriverReinitialization(
2706 IN PDRIVER_OBJECT DriverObject
,
2707 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2713 IoReportDetectedDevice(
2714 IN PDRIVER_OBJECT DriverObject
,
2715 IN INTERFACE_TYPE LegacyBusType
,
2717 IN ULONG SlotNumber
,
2718 IN PCM_RESOURCE_LIST ResourceList
,
2719 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
2720 IN BOOLEAN ResourceAssigned
,
2721 IN OUT PDEVICE_OBJECT
*DeviceObject
);
2726 IoReportResourceForDetection(
2727 IN PDRIVER_OBJECT DriverObject
,
2728 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2729 IN ULONG DriverListSize OPTIONAL
,
2730 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2731 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2732 IN ULONG DeviceListSize OPTIONAL
,
2733 OUT PBOOLEAN ConflictDetected
);
2738 IoReportResourceUsage(
2739 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2740 IN PDRIVER_OBJECT DriverObject
,
2741 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2742 IN ULONG DriverListSize OPTIONAL
,
2743 IN PDEVICE_OBJECT DeviceObject
,
2744 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2745 IN ULONG DeviceListSize OPTIONAL
,
2746 IN BOOLEAN OverrideConflict
,
2747 OUT PBOOLEAN ConflictDetected
);
2752 IoSetHardErrorOrVerifyDevice(
2754 IN PDEVICE_OBJECT DeviceObject
);
2759 IoSetPartitionInformation(
2760 IN PDEVICE_OBJECT DeviceObject
,
2761 IN ULONG SectorSize
,
2762 IN ULONG PartitionNumber
,
2763 IN ULONG PartitionType
);
2768 IoSetPartitionInformationEx(
2769 IN PDEVICE_OBJECT DeviceObject
,
2770 IN ULONG PartitionNumber
,
2771 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
2776 IoSetSystemPartition(
2777 IN PUNICODE_STRING VolumeNameString
);
2782 IoSetThreadHardErrorMode(
2783 IN BOOLEAN EnableHardErrors
);
2788 IoVerifyPartitionTable(
2789 IN PDEVICE_OBJECT DeviceObject
,
2790 IN BOOLEAN FixErrors
);
2795 IoVolumeDeviceToDosName(
2796 IN PVOID VolumeDeviceObject
,
2797 OUT PUNICODE_STRING DosName
);
2802 IoWritePartitionTable(
2803 IN PDEVICE_OBJECT DeviceObject
,
2804 IN ULONG SectorSize
,
2805 IN ULONG SectorsPerTrack
,
2806 IN ULONG NumberOfHeads
,
2807 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2812 IoWritePartitionTableEx(
2813 IN PDEVICE_OBJECT DeviceObject
,
2814 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*PartitionBuffer
);
2816 /** Kernel routines **/
2823 IN ULONG BugCheckCode
);
2832 volatile LONG Barrier
;
2833 #if defined(__GNUC__)
2834 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
2835 #elif defined(_MSC_VER)
2836 __asm xchg
[Barrier
], eax
2847 IN KPRIORITY Increment
,
2850 #if !defined(_M_AMD64)
2856 OUT PLARGE_INTEGER TickCount
);
2862 KeSetBasePriorityThread(
2863 IN PRKTHREAD Thread
,
2869 KeSetTimeUpdateNotifyRoutine(
2870 IN PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine
);
2889 KeRaiseIrqlToDpcLevel(
2895 KeRaiseIrqlToSynchLevel(
2898 #define KeLowerIrql(a) KfLowerIrql(a)
2899 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
2901 #elif defined(_M_AMD64)
2905 KeGetCurrentIrql(VOID
)
2907 return (KIRQL
)__readcr8();
2912 KeLowerIrql(IN KIRQL NewIrql
)
2914 ASSERT(KeGetCurrentIrql() >= NewIrql
);
2915 __writecr8(NewIrql
);
2920 KfRaiseIrql(IN KIRQL NewIrql
)
2924 OldIrql
= __readcr8();
2925 ASSERT(OldIrql
<= NewIrql
);
2926 __writecr8(NewIrql
);
2929 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
2933 KeRaiseIrqlToDpcLevel(VOID
)
2935 return KfRaiseIrql(DISPATCH_LEVEL
);
2940 KeRaiseIrqlToSynchLevel(VOID
)
2942 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
2945 #elif defined(__PowerPC__)
2962 KeRaiseIrqlToDpcLevel(
2968 KeRaiseIrqlToSynchLevel(
2971 #define KeLowerIrql(a) KfLowerIrql(a)
2972 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
2974 #elif defined(_M_MIPS)
2976 #define KeLowerIrql(a) KfLowerIrql(a)
2977 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
2994 KeRaiseIrqlToDpcLevel(
3000 KeRaiseIrqlToSynchLevel(
3003 #elif defined(_M_ARM)
3020 OUT PKIRQL OldIrql
);
3025 KeRaiseIrqlToDpcLevel(
3031 KeRaiseIrqlToSynchLevel(
3036 /** Memory manager routines **/
3043 IN ULONG NumberOfBytes
);
3048 MmAllocateContiguousMemory(
3049 IN ULONG NumberOfBytes
,
3050 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
3055 MmAllocateContiguousMemorySpecifyCache(
3056 IN SIZE_T NumberOfBytes
,
3057 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
3058 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
3059 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
3060 IN MEMORY_CACHING_TYPE CacheType
);
3065 MmAllocateMappingAddress(
3066 IN SIZE_T NumberOfBytes
,
3072 MmAllocateNonCachedMemory(
3073 IN ULONG NumberOfBytes
);
3078 MmAllocatePagesForMdl(
3079 IN PHYSICAL_ADDRESS LowAddress
,
3080 IN PHYSICAL_ADDRESS HighAddress
,
3081 IN PHYSICAL_ADDRESS SkipBytes
,
3082 IN SIZE_T TotalBytes
);
3084 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
3088 MmAllocatePagesForMdlEx(
3089 IN PHYSICAL_ADDRESS LowAddress
,
3090 IN PHYSICAL_ADDRESS HighAddress
,
3091 IN PHYSICAL_ADDRESS SkipBytes
,
3092 IN SIZE_T TotalBytes
,
3093 IN MEMORY_CACHING_TYPE CacheType
,
3100 MmBuildMdlForNonPagedPool(
3101 IN OUT PMDL MemoryDescriptorList
);
3103 typedef enum _MMFLUSH_TYPE
{
3111 MmFlushImageSection(
3112 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
3113 IN MMFLUSH_TYPE FlushType
);
3118 MmFreeContiguousMemory(
3119 IN PVOID BaseAddress
);
3124 MmFreeContiguousMemorySpecifyCache(
3125 IN PVOID BaseAddress
,
3126 IN SIZE_T NumberOfBytes
,
3127 IN MEMORY_CACHING_TYPE CacheType
);
3132 MmFreeMappingAddress(
3133 IN PVOID BaseAddress
,
3139 MmFreeNonCachedMemory(
3140 IN PVOID BaseAddress
,
3141 IN SIZE_T NumberOfBytes
);
3147 IN PMDL MemoryDescriptorList
);
3151 * MmGetMdlByteCount(
3154 #define MmGetMdlByteCount(_Mdl) \
3159 * MmGetMdlByteOffset(
3162 #define MmGetMdlByteOffset(_Mdl) \
3163 ((_Mdl)->ByteOffset)
3170 #define MmGetMdlPfnArray(_Mdl) \
3171 ((PPFN_NUMBER) ((_Mdl) + 1))
3175 * MmGetMdlVirtualAddress(
3178 #define MmGetMdlVirtualAddress(_Mdl) \
3179 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
3184 MmGetPhysicalAddress(
3185 IN PVOID BaseAddress
);
3188 PPHYSICAL_MEMORY_RANGE
3190 MmGetPhysicalMemoryRanges(
3196 MmGetVirtualForPhysical(
3197 IN PHYSICAL_ADDRESS PhysicalAddress
);
3202 MmMapLockedPagesSpecifyCache(
3203 IN PMDL MemoryDescriptorList
,
3204 IN KPROCESSOR_MODE AccessMode
,
3205 IN MEMORY_CACHING_TYPE CacheType
,
3206 IN PVOID BaseAddress
,
3207 IN ULONG BugCheckOnFailure
,
3208 IN MM_PAGE_PRIORITY Priority
);
3213 MmMapLockedPagesWithReservedMapping(
3214 IN PVOID MappingAddress
,
3216 IN PMDL MemoryDescriptorList
,
3217 IN MEMORY_CACHING_TYPE CacheType
);
3222 MmMapUserAddressesToPage(
3223 IN PVOID BaseAddress
,
3224 IN SIZE_T NumberOfBytes
,
3225 IN PVOID PageAddress
);
3231 IN PHYSICAL_ADDRESS PhysicalAddress
,
3232 IN SIZE_T NumberOfBytes
,
3233 IN MEMORY_CACHING_TYPE CacheType
);
3238 MmMapViewInSessionSpace(
3240 OUT PVOID
*MappedBase
,
3241 IN OUT PSIZE_T ViewSize
);
3246 MmMapViewInSystemSpace(
3248 OUT PVOID
*MappedBase
,
3249 IN PSIZE_T ViewSize
);
3254 MmMarkPhysicalMemoryAsBad(
3255 IN PPHYSICAL_ADDRESS StartAddress
,
3256 IN OUT PLARGE_INTEGER NumberOfBytes
);
3261 MmMarkPhysicalMemoryAsGood(
3262 IN PPHYSICAL_ADDRESS StartAddress
,
3263 IN OUT PLARGE_INTEGER NumberOfBytes
);
3268 MmGetSystemRoutineAddress(
3269 IN PUNICODE_STRING SystemRoutineName
);
3273 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
3277 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, \
3279 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
3280 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
3285 * IN PMDL MemoryDescriptorList,
3289 #define MmInitializeMdl(_MemoryDescriptorList, \
3293 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
3294 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
3295 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
3296 (_MemoryDescriptorList)->MdlFlags = 0; \
3297 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
3298 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
3299 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
3306 IN PVOID VirtualAddress
);
3311 MmIsDriverVerifying(
3312 IN PDRIVER_OBJECT DriverObject
);
3317 MmIsThisAnNtAsSystem(
3323 MmIsVerifierEnabled(
3324 OUT PULONG VerifierFlags
);
3329 MmLockPagableDataSection(
3330 IN PVOID AddressWithinSection
);
3335 MmLockPagableImageSection(
3336 IN PVOID AddressWithinSection
);
3340 * MmLockPagableCodeSection(
3341 * IN PVOID AddressWithinSection)
3343 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
3348 MmLockPagableSectionByHandle(
3349 IN PVOID ImageSectionHandle
);
3355 IN PHYSICAL_ADDRESS PhysicalAddress
,
3356 IN ULONG NumberOfBytes
,
3357 IN MEMORY_CACHING_TYPE CacheEnable
);
3363 IN PMDL MemoryDescriptorList
,
3364 IN KPROCESSOR_MODE AccessMode
);
3369 MmLockPageableDataSection (
3370 IN PVOID AddressWithinSection
3376 MmUnlockPageableImageSection(
3377 IN PVOID ImageSectionHandle
3384 IN PVOID AddressWithinSection
);
3389 MmProbeAndLockProcessPages(
3390 IN OUT PMDL MemoryDescriptorList
,
3391 IN PEPROCESS Process
,
3392 IN KPROCESSOR_MODE AccessMode
,
3393 IN LOCK_OPERATION Operation
);
3398 MmProtectMdlSystemAddress(
3399 IN PMDL MemoryDescriptorList
,
3400 IN ULONG NewProtect
);
3406 IN PVOID BaseAddress
,
3407 IN PMDL MemoryDescriptorList
);
3412 MmUnmapViewInSessionSpace(
3413 IN PVOID MappedBase
);
3418 MmUnmapViewInSystemSpace(
3419 IN PVOID MappedBase
);
3424 MmUnsecureVirtualMemory(
3425 IN HANDLE SecureHandle
);
3429 * MmPrepareMdlForReuse(
3432 #define MmPrepareMdlForReuse(_Mdl) \
3434 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
3435 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
3436 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
3437 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
3438 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
3442 #define MmGetProcedureAddress(Address) (Address)
3447 MmProbeAndLockPages(
3448 IN OUT PMDL MemoryDescriptorList
,
3449 IN KPROCESSOR_MODE AccessMode
,
3450 IN LOCK_OPERATION Operation
);
3461 MmRemovePhysicalMemory(
3462 IN PPHYSICAL_ADDRESS StartAddress
,
3463 IN OUT PLARGE_INTEGER NumberOfBytes
);
3468 MmResetDriverPaging(
3469 IN PVOID AddressWithinSection
);
3474 MmSecureVirtualMemory(
3477 IN ULONG ProbeMode
);
3489 MmUnlockPagableImageSection(
3490 IN PVOID ImageSectionHandle
);
3496 IN PMDL MemoryDescriptorList
);
3502 IN PVOID BaseAddress
,
3503 IN SIZE_T NumberOfBytes
);
3508 MmUnmapReservedMapping(
3509 IN PVOID BaseAddress
,
3511 IN PMDL MemoryDescriptorList
);
3516 MmUnmapVideoDisplay(
3517 IN PVOID BaseAddress
,
3518 IN SIZE_T NumberOfBytes
);
3522 /** Object manager routines **/
3528 IN PACCESS_STATE AccessState
,
3529 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3531 IN POBJECT_TYPE Type
);
3536 ObDereferenceSecurityDescriptor(
3537 PSECURITY_DESCRIPTOR SecurityDescriptor
,
3543 ObfDereferenceObject(
3548 * ObDereferenceObject(
3551 #define ObDereferenceObject ObfDereferenceObject
3556 ObGetObjectSecurity(
3558 OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
3559 OUT PBOOLEAN MemoryAllocated
);
3566 IN PACCESS_STATE PassedAccessState OPTIONAL
,
3567 IN ACCESS_MASK DesiredAccess
,
3568 IN ULONG AdditionalReferences
,
3569 OUT PVOID
* ReferencedObject OPTIONAL
,
3570 OUT PHANDLE Handle
);
3581 ObLogSecurityDescriptor(
3582 IN PSECURITY_DESCRIPTOR InputSecurityDescriptor
,
3583 OUT PSECURITY_DESCRIPTOR
*OutputSecurityDescriptor
,
3587 * ObReferenceObject(
3590 #define ObReferenceObject ObfReferenceObject
3595 ObMakeTemporaryObject(
3602 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3603 IN POBJECT_TYPE ObjectType
,
3604 IN KPROCESSOR_MODE AccessMode
,
3605 IN PACCESS_STATE PassedAccessState
,
3606 IN ACCESS_MASK DesiredAccess
,
3607 IN OUT PVOID ParseContext OPTIONAL
,
3608 OUT PHANDLE Handle
);
3613 ObOpenObjectByPointer(
3615 IN ULONG HandleAttributes
,
3616 IN PACCESS_STATE PassedAccessState OPTIONAL
,
3617 IN ACCESS_MASK DesiredAccess OPTIONAL
,
3618 IN POBJECT_TYPE ObjectType OPTIONAL
,
3619 IN KPROCESSOR_MODE AccessMode
,
3620 OUT PHANDLE Handle
);
3625 ObQueryObjectAuditingByHandle(
3627 OUT PBOOLEAN GenerateOnClose
);
3632 ObReferenceObjectByHandle(
3634 IN ACCESS_MASK DesiredAccess
,
3635 IN POBJECT_TYPE ObjectType OPTIONAL
,
3636 IN KPROCESSOR_MODE AccessMode
,
3638 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
);
3643 ObReferenceObjectByName(
3644 IN PUNICODE_STRING ObjectPath
,
3645 IN ULONG Attributes
,
3646 IN PACCESS_STATE PassedAccessState OPTIONAL
,
3647 IN ACCESS_MASK DesiredAccess OPTIONAL
,
3648 IN POBJECT_TYPE ObjectType
,
3649 IN KPROCESSOR_MODE AccessMode
,
3650 IN OUT PVOID ParseContext OPTIONAL
,
3656 ObReferenceObjectByPointer(
3658 IN ACCESS_MASK DesiredAccess
,
3659 IN POBJECT_TYPE ObjectType
,
3660 IN KPROCESSOR_MODE AccessMode
);
3665 ObReferenceSecurityDescriptor(
3666 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3672 ObReleaseObjectSecurity(
3673 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3674 IN BOOLEAN MemoryAllocated
);
3678 /** Process manager routines **/
3683 PsCreateSystemProcess(
3684 IN PHANDLE ProcessHandle
,
3685 IN ACCESS_MASK DesiredAccess
,
3686 IN POBJECT_ATTRIBUTES ObjectAttributes
);
3691 PsCreateSystemThread(
3692 OUT PHANDLE ThreadHandle
,
3693 IN ULONG DesiredAccess
,
3694 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
3695 IN HANDLE ProcessHandle OPTIONAL
,
3696 OUT PCLIENT_ID ClientId OPTIONAL
,
3697 IN PKSTART_ROUTINE StartRoutine
,
3698 IN PVOID StartContext
);
3702 * PsGetCurrentProcess(VOID)
3704 #define PsGetCurrentProcess IoGetCurrentProcess
3709 PsGetCurrentProcessId(
3714 * PsGetCurrentThread(VOID)
3716 #define PsGetCurrentThread() \
3717 ((PETHREAD) KeGetCurrentThread())
3722 PsGetCurrentThreadId(
3728 PsGetProcessId(PEPROCESS Process
);
3734 PULONG MajorVersion OPTIONAL
,
3735 PULONG MinorVersion OPTIONAL
,
3736 PULONG BuildNumber OPTIONAL
,
3737 PUNICODE_STRING CSDVersion OPTIONAL
);
3742 PsRemoveCreateThreadNotifyRoutine(
3743 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
3748 PsRemoveLoadImageNotifyRoutine(
3749 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
3754 PsSetCreateProcessNotifyRoutine(
3755 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
3761 PsSetCreateThreadNotifyRoutine(
3762 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
3767 PsSetLoadImageNotifyRoutine(
3768 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
3773 PsTerminateSystemThread(
3774 IN NTSTATUS ExitStatus
);
3776 extern NTSYSAPI PEPROCESS PsInitialSystemProcess
;
3779 /** Security reference monitor routines **/
3785 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3786 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
3787 IN BOOLEAN SubjectContextLocked
,
3788 IN ACCESS_MASK DesiredAccess
,
3789 IN ACCESS_MASK PreviouslyGrantedAccess
,
3790 OUT PPRIVILEGE_SET
*Privileges OPTIONAL
,
3791 IN PGENERIC_MAPPING GenericMapping
,
3792 IN KPROCESSOR_MODE AccessMode
,
3793 OUT PACCESS_MASK GrantedAccess
,
3794 OUT PNTSTATUS AccessStatus
);
3800 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
3801 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
3802 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
3803 IN BOOLEAN IsDirectoryObject
,
3804 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
3805 IN PGENERIC_MAPPING GenericMapping
,
3806 IN POOL_TYPE PoolType
);
3812 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
3813 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
3814 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
3815 IN GUID
*ObjectType OPTIONAL
,
3816 IN BOOLEAN IsDirectoryObject
,
3817 IN ULONG AutoInheritFlags
,
3818 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
3819 IN PGENERIC_MAPPING GenericMapping
,
3820 IN POOL_TYPE PoolType
);
3826 IN OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
);
3831 SeSinglePrivilegeCheck(
3832 LUID PrivilegeValue
,
3833 KPROCESSOR_MODE PreviousMode
);
3838 SeValidSecurityDescriptor(
3840 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
3844 /** NtXxx routines **/
3850 OUT PHANDLE ProcessHandle
,
3851 IN ACCESS_MASK DesiredAccess
,
3852 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3853 IN PCLIENT_ID ClientId OPTIONAL
);
3858 NtQueryInformationProcess(
3859 IN HANDLE ProcessHandle
,
3860 IN PROCESSINFOCLASS ProcessInformationClass
,
3861 OUT PVOID ProcessInformation
,
3862 IN ULONG ProcessInformationLength
,
3863 OUT PULONG ReturnLength OPTIONAL
);
3867 /** NtXxx and ZwXxx routines **/
3873 IN HANDLE TimerHandle
,
3874 OUT PBOOLEAN CurrentState OPTIONAL
);
3891 ZwCreateDirectoryObject(
3892 OUT PHANDLE DirectoryHandle
,
3893 IN ACCESS_MASK DesiredAccess
,
3894 IN POBJECT_ATTRIBUTES ObjectAttributes
);
3900 OUT PHANDLE EventHandle
,
3901 IN ACCESS_MASK DesiredAccess
,
3902 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
3903 IN EVENT_TYPE EventType
,
3904 IN BOOLEAN InitialState
);
3910 OUT PHANDLE EventHandle
,
3911 IN ACCESS_MASK DesiredAccess
,
3912 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
3913 IN EVENT_TYPE EventType
,
3914 IN BOOLEAN InitialState
);
3920 OUT PHANDLE FileHandle
,
3921 IN ACCESS_MASK DesiredAccess
,
3922 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3923 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3924 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
3925 IN ULONG FileAttributes
,
3926 IN ULONG ShareAccess
,
3927 IN ULONG CreateDisposition
,
3928 IN ULONG CreateOptions
,
3929 IN PVOID EaBuffer OPTIONAL
,
3936 OUT PHANDLE KeyHandle
,
3937 IN ACCESS_MASK DesiredAccess
,
3938 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3939 IN ULONG TitleIndex
,
3940 IN PUNICODE_STRING Class OPTIONAL
,
3941 IN ULONG CreateOptions
,
3942 OUT PULONG Disposition OPTIONAL
);
3948 OUT PHANDLE TimerHandle
,
3949 IN ACCESS_MASK DesiredAccess
,
3950 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
3951 IN TIMER_TYPE TimerType
);
3957 IN HANDLE KeyHandle
);
3963 IN HANDLE KeyHandle
,
3964 IN PUNICODE_STRING ValueName
);
3969 NtDeviceIoControlFile(
3970 IN HANDLE DeviceHandle
,
3971 IN HANDLE Event OPTIONAL
,
3972 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
3973 IN PVOID UserApcContext OPTIONAL
,
3974 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3975 IN ULONG IoControlCode
,
3976 IN PVOID InputBuffer
,
3977 IN ULONG InputBufferSize
,
3978 OUT PVOID OutputBuffer
,
3979 IN ULONG OutputBufferSize
);
3984 ZwDeviceIoControlFile(
3985 IN HANDLE DeviceHandle
,
3986 IN HANDLE Event OPTIONAL
,
3987 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
3988 IN PVOID UserApcContext OPTIONAL
,
3989 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3990 IN ULONG IoControlCode
,
3991 IN PVOID InputBuffer
,
3992 IN ULONG InputBufferSize
,
3993 OUT PVOID OutputBuffer
,
3994 IN ULONG OutputBufferSize
);
4000 IN HANDLE KeyHandle
,
4002 IN KEY_INFORMATION_CLASS KeyInformationClass
,
4003 OUT PVOID KeyInformation
,
4005 OUT PULONG ResultLength
);
4010 ZwEnumerateValueKey(
4011 IN HANDLE KeyHandle
,
4013 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
4014 OUT PVOID KeyValueInformation
,
4016 OUT PULONG ResultLength
);
4022 IN HANDLE KeyHandle
);
4027 ZwMakeTemporaryObject(
4034 IN HANDLE SectionHandle
,
4035 IN HANDLE ProcessHandle
,
4036 IN OUT PVOID
*BaseAddress
,
4037 IN ULONG_PTR ZeroBits
,
4038 IN SIZE_T CommitSize
,
4039 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
4040 IN OUT PSIZE_T ViewSize
,
4041 IN SECTION_INHERIT InheritDisposition
,
4042 IN ULONG AllocationType
,
4049 IN HANDLE SectionHandle
,
4050 IN HANDLE ProcessHandle
,
4051 IN OUT PVOID
*BaseAddress
,
4052 IN ULONG_PTR ZeroBits
,
4053 IN SIZE_T CommitSize
,
4054 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
4055 IN OUT PSIZE_T ViewSize
,
4056 IN SECTION_INHERIT InheritDisposition
,
4057 IN ULONG AllocationType
,
4064 OUT PHANDLE FileHandle
,
4065 IN ACCESS_MASK DesiredAccess
,
4066 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4067 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4068 IN ULONG ShareAccess
,
4069 IN ULONG OpenOptions
);
4075 OUT PHANDLE FileHandle
,
4076 IN ACCESS_MASK DesiredAccess
,
4077 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4078 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4079 IN ULONG ShareAccess
,
4080 IN ULONG OpenOptions
);
4086 OUT PHANDLE KeyHandle
,
4087 IN ACCESS_MASK DesiredAccess
,
4088 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4094 OUT PHANDLE SectionHandle
,
4095 IN ACCESS_MASK DesiredAccess
,
4096 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4101 ZwOpenSymbolicLinkObject(
4102 OUT PHANDLE LinkHandle
,
4103 IN ACCESS_MASK DesiredAccess
,
4104 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4110 OUT PHANDLE TimerHandle
,
4111 IN ACCESS_MASK DesiredAccess
,
4112 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4117 ZwQueryInformationFile(
4118 IN HANDLE FileHandle
,
4119 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4120 OUT PVOID FileInformation
,
4122 IN FILE_INFORMATION_CLASS FileInformationClass
);
4128 IN HANDLE KeyHandle
,
4129 IN KEY_INFORMATION_CLASS KeyInformationClass
,
4130 OUT PVOID KeyInformation
,
4132 OUT PULONG ResultLength
);
4137 ZwQuerySymbolicLinkObject(
4138 IN HANDLE LinkHandle
,
4139 IN OUT PUNICODE_STRING LinkTarget
,
4140 OUT PULONG ReturnedLength OPTIONAL
);
4146 IN HANDLE KeyHandle
,
4147 IN PUNICODE_STRING ValueName
,
4148 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
4149 OUT PVOID KeyValueInformation
,
4151 OUT PULONG ResultLength
);
4157 IN HANDLE FileHandle
,
4158 IN HANDLE Event OPTIONAL
,
4159 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4160 IN PVOID ApcContext OPTIONAL
,
4161 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4164 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
4165 IN PULONG Key OPTIONAL
);
4171 IN HANDLE FileHandle
,
4172 IN HANDLE Event OPTIONAL
,
4173 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4174 IN PVOID ApcContext OPTIONAL
,
4175 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4178 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
4179 IN PULONG Key OPTIONAL
);
4185 IN HANDLE EventHandle
,
4186 OUT PLONG PreviousState OPTIONAL
);
4192 IN HANDLE EventHandle
,
4193 OUT PLONG PreviousState OPTIONAL
);
4198 ZwSetInformationFile(
4199 IN HANDLE FileHandle
,
4200 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4201 IN PVOID FileInformation
,
4203 IN FILE_INFORMATION_CLASS FileInformationClass
);
4208 ZwSetInformationThread(
4209 IN HANDLE ThreadHandle
,
4210 IN THREADINFOCLASS ThreadInformationClass
,
4211 IN PVOID ThreadInformation
,
4212 IN ULONG ThreadInformationLength
);
4218 IN HANDLE TimerHandle
,
4219 IN PLARGE_INTEGER DueTime
,
4220 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
4221 IN PVOID TimerContext OPTIONAL
,
4222 IN BOOLEAN WakeTimer
,
4223 IN LONG Period OPTIONAL
,
4224 OUT PBOOLEAN PreviousState OPTIONAL
);
4230 IN HANDLE KeyHandle
,
4231 IN PUNICODE_STRING ValueName
,
4232 IN ULONG TitleIndex OPTIONAL
,
4237 /* [Nt|Zw]MapViewOfSection.InheritDisposition constants */
4238 #define AT_EXTENDABLE_FILE 0x00002000
4239 #define AT_RESERVED 0x20000000
4240 #define AT_ROUND_TO_PAGE 0x40000000
4245 NtUnmapViewOfSection(
4246 IN HANDLE ProcessHandle
,
4247 IN PVOID BaseAddress
);
4252 ZwUnmapViewOfSection(
4253 IN HANDLE ProcessHandle
,
4254 IN PVOID BaseAddress
);
4259 NtWaitForSingleObject(
4260 IN HANDLE ObjectHandle
,
4261 IN BOOLEAN Alertable
,
4262 IN PLARGE_INTEGER TimeOut OPTIONAL
);
4267 ZwWaitForSingleObject(
4268 IN HANDLE ObjectHandle
,
4269 IN BOOLEAN Alertable
,
4270 IN PLARGE_INTEGER TimeOut OPTIONAL
);
4276 IN HANDLE FileHandle
,
4277 IN HANDLE Event OPTIONAL
,
4278 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4279 IN PVOID ApcContext OPTIONAL
,
4280 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4283 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
4284 IN PULONG Key OPTIONAL
);
4290 IN HANDLE FileHandle
,
4291 IN HANDLE Event OPTIONAL
,
4292 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4293 IN PVOID ApcContext OPTIONAL
,
4294 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4297 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
4298 IN PULONG Key OPTIONAL
);
4302 /** Power management support routines **/
4308 IN PDEVICE_OBJECT DeviceObject
,
4314 PoRegisterDeviceForIdleDetection(
4315 IN PDEVICE_OBJECT DeviceObject
,
4316 IN ULONG ConservationIdleTime
,
4317 IN ULONG PerformanceIdleTime
,
4318 IN DEVICE_POWER_STATE State
);
4323 PoRegisterSystemState(
4324 IN PVOID StateHandle
,
4325 IN EXECUTION_STATE Flags
);
4331 IN PDEVICE_OBJECT DeviceObject
,
4332 IN UCHAR MinorFunction
,
4333 IN POWER_STATE PowerState
,
4334 IN PREQUEST_POWER_COMPLETE CompletionFunction
,
4336 OUT PIRP
*Irp OPTIONAL
);
4341 PoRequestShutdownEvent(
4348 PULONG IdlePointer
);
4350 #define PoSetDeviceBusy(IdlePointer) \
4351 ((void)(*(IdlePointer) = 0))
4357 IN PDEVICE_OBJECT DeviceObject
,
4358 IN POWER_STATE_TYPE Type
,
4359 IN POWER_STATE State
);
4365 IN EXECUTION_STATE Flags
);
4370 PoStartNextPowerIrp(
4376 PoUnregisterSystemState(
4377 IN PVOID StateHandle
);
4381 /** WMI library support routines **/
4386 IN PDEVICE_OBJECT DeviceObject
,
4389 IN ULONG BufferUsed
,
4390 IN CCHAR PriorityBoost
);
4395 IN PDEVICE_OBJECT DeviceObject
,
4397 IN ULONG InstanceIndex
,
4398 IN ULONG EventDataSize
,
4399 IN PVOID EventData
);
4404 WmiQueryTraceInformation(
4405 IN TRACE_INFORMATION_CLASS TraceInformationClass
,
4406 OUT PVOID TraceInformation
,
4407 IN ULONG TraceInformationLength
,
4408 OUT PULONG RequiredLength OPTIONAL
,
4409 IN PVOID Buffer OPTIONAL
);
4414 IN PWMILIB_CONTEXT WmiLibInfo
,
4415 IN PDEVICE_OBJECT DeviceObject
,
4417 OUT PSYSCTL_IRP_DISPOSITION IrpDisposition
);
4423 IN TRACEHANDLE LoggerHandle
,
4424 IN ULONG MessageFlags
,
4425 IN LPGUID MessageGuid
,
4426 IN USHORT MessageNumber
,
4430 /* FIXME: Get va_list from where? */
4435 IN TRACEHANDLE LoggerHandle
,
4436 IN ULONG MessageFlags
,
4437 IN LPGUID MessageGuid
,
4438 IN USHORT MessageNumber
,
4439 IN
va_list MessageArgList
);
4443 /** Kernel debugger routines **/
4460 KdRefreshDebuggerNotPresent(
4464 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
4469 IN KD_OPTION Option
,
4470 IN ULONG InBufferBytes OPTIONAL
,
4472 IN ULONG OutBufferBytes OPTIONAL
,
4473 OUT PVOID OutBuffer
,
4474 OUT PULONG OutBufferNeeded OPTIONAL
);
4485 DbgBreakPointWithStatus(
4498 IN ULONG ComponentId
,
4506 IN ULONG ComponentId
,
4513 vDbgPrintExWithPrefix(
4515 IN ULONG ComponentId
,
4523 DbgPrintReturnControlC(
4532 IN ULONG MaximumResponseLength
4538 DbgQueryDebugFilterState(
4539 IN ULONG ComponentId
,
4545 DbgSetDebugFilterState(
4546 IN ULONG ComponentId
,
4552 #define KdPrint(_x_) DbgPrint _x_
4553 #define KdPrintEx(_x_) DbgPrintEx _x_
4554 #define KdBreakPoint() DbgBreakPoint()
4555 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
4559 #define KdPrint(_x_)
4560 #define KdPrintEx(_x_)
4561 #define KdBreakPoint()
4562 #define KdBreakPointWithStatus(s)
4566 #if defined(__GNUC__)
4568 extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent
;
4569 extern NTKERNELAPI BOOLEAN KdDebuggerEnabled
;
4570 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
4571 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
4573 #elif defined(_NTDDK_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
4575 extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent
;
4576 extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled
;
4577 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
4578 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
4582 extern BOOLEAN KdDebuggerNotPresent
;
4583 extern BOOLEAN KdDebuggerEnabled
;
4584 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
4585 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
4589 /** Stuff from winnt4.h */
4591 #ifndef DMA_MACROS_DEFINED
4593 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4595 //DECLSPEC_DEPRECATED_DDK
4599 IoFlushAdapterBuffers(
4600 IN PADAPTER_OBJECT AdapterObject
,
4602 IN PVOID MapRegisterBase
,
4605 IN BOOLEAN WriteToDevice
);
4607 //DECLSPEC_DEPRECATED_DDK
4611 IoFreeAdapterChannel(
4612 IN PADAPTER_OBJECT AdapterObject
);
4614 //DECLSPEC_DEPRECATED_DDK
4619 IN PADAPTER_OBJECT AdapterObject
,
4620 IN PVOID MapRegisterBase
,
4621 IN ULONG NumberOfMapRegisters
);
4623 //DECLSPEC_DEPRECATED_DDK
4628 IN PADAPTER_OBJECT AdapterObject
,
4630 IN PVOID MapRegisterBase
,
4632 IN OUT PULONG Length
,
4633 IN BOOLEAN WriteToDevice
);
4636 #endif // (NTDDI_VERSION >= NTDDI_WIN2K)
4637 #endif // !defined(DMA_MACROS_DEFINED)
4643 IN PUNICODE_STRING RegistryPath
,
4644 IN PUNICODE_STRING DriverClassName OPTIONAL
,
4645 IN PDRIVER_OBJECT DriverObject
,
4646 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
4647 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources
,
4648 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
4653 IoAttachDeviceByPointer(
4654 IN PDEVICE_OBJECT SourceDevice
,
4655 IN PDEVICE_OBJECT TargetDevice
);
4660 MmIsNonPagedSystemAddressValid(
4661 IN PVOID VirtualAddress
);
4663 #if defined(_AMD64_) || defined(_IA64_)
4664 //DECLSPEC_DEPRECATED_DDK_WINXP
4668 RtlLargeIntegerDivide(
4669 IN LARGE_INTEGER Dividend
,
4670 IN LARGE_INTEGER Divisor
,
4671 IN OUT PLARGE_INTEGER Remainder
)
4674 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
4676 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
4683 RtlLargeIntegerDivide(
4684 IN LARGE_INTEGER Dividend
,
4685 IN LARGE_INTEGER Divisor
,
4686 IN OUT PLARGE_INTEGER Remainder
);
4692 ExInterlockedDecrementLong(
4694 IN PKSPIN_LOCK Lock
);
4699 ExInterlockedExchangeUlong(
4702 IN PKSPIN_LOCK Lock
);
4707 ExInterlockedIncrementLong(
4709 IN PKSPIN_LOCK Lock
);
4714 HalAcquireDisplayOwnership(
4715 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
4720 HalAllocateAdapterChannel(
4721 IN PADAPTER_OBJECT AdapterObject
,
4722 IN PWAIT_CONTEXT_BLOCK Wcb
,
4723 IN ULONG NumberOfMapRegisters
,
4724 IN PDRIVER_CONTROL ExecutionRoutine
);
4729 HalAllocateCommonBuffer(
4730 IN PADAPTER_OBJECT AdapterObject
,
4732 OUT PPHYSICAL_ADDRESS LogicalAddress
,
4733 IN BOOLEAN CacheEnabled
);
4738 HalAssignSlotResources(
4739 IN PUNICODE_STRING RegistryPath
,
4740 IN PUNICODE_STRING DriverClassName
,
4741 IN PDRIVER_OBJECT DriverObject
,
4742 IN PDEVICE_OBJECT DeviceObject
,
4743 IN INTERFACE_TYPE BusType
,
4745 IN ULONG SlotNumber
,
4746 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
4751 HalFreeCommonBuffer(
4752 IN PADAPTER_OBJECT AdapterObject
,
4754 IN PHYSICAL_ADDRESS LogicalAddress
,
4755 IN PVOID VirtualAddress
,
4756 IN BOOLEAN CacheEnabled
);
4762 IN PDEVICE_DESCRIPTION DeviceDescription
,
4763 IN OUT PULONG NumberOfMapRegisters
);
4769 IN BUS_DATA_TYPE BusDataType
,
4771 IN ULONG SlotNumber
,
4778 HalGetBusDataByOffset(
4779 IN BUS_DATA_TYPE BusDataType
,
4781 IN ULONG SlotNumber
,
4789 HalGetDmaAlignmentRequirement(
4795 HalGetInterruptVector(
4796 IN INTERFACE_TYPE InterfaceType
,
4798 IN ULONG BusInterruptLevel
,
4799 IN ULONG BusInterruptVector
,
4801 OUT PKAFFINITY Affinity
);
4807 IN PADAPTER_OBJECT AdapterObject
);
4813 IN BUS_DATA_TYPE BusDataType
,
4815 IN ULONG SlotNumber
,
4822 HalSetBusDataByOffset(
4823 IN BUS_DATA_TYPE BusDataType
,
4825 IN ULONG SlotNumber
,
4833 HalTranslateBusAddress(
4834 IN INTERFACE_TYPE InterfaceType
,
4836 IN PHYSICAL_ADDRESS BusAddress
,
4837 IN OUT PULONG AddressSpace
,
4838 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
4843 RtlLargeIntegerEqualToZero(
4844 IN LARGE_INTEGER Operand
);
4849 RtlLargeIntegerGreaterOrEqualToZero(
4850 IN LARGE_INTEGER Operand
);
4855 RtlLargeIntegerGreaterThan(
4856 IN LARGE_INTEGER Operand1
,
4857 IN LARGE_INTEGER Operand2
);
4862 RtlLargeIntegerGreaterThanOrEqualTo(
4863 IN LARGE_INTEGER Operand1
,
4864 IN LARGE_INTEGER Operand2
);
4869 RtlLargeIntegerGreaterThanZero(
4870 IN LARGE_INTEGER Operand
);
4875 RtlLargeIntegerLessOrEqualToZero(
4876 IN LARGE_INTEGER Operand
);
4881 RtlLargeIntegerLessThan(
4882 IN LARGE_INTEGER Operand1
,
4883 IN LARGE_INTEGER Operand2
);
4888 RtlLargeIntegerLessThanOrEqualTo(
4889 IN LARGE_INTEGER Operand1
,
4890 IN LARGE_INTEGER Operand2
);
4895 RtlLargeIntegerLessThanZero(
4896 IN LARGE_INTEGER Operand
);
4901 RtlLargeIntegerNegate(
4902 IN LARGE_INTEGER Subtrahend
);
4907 RtlLargeIntegerNotEqualTo(
4908 IN LARGE_INTEGER Operand1
,
4909 IN LARGE_INTEGER Operand2
);
4914 RtlLargeIntegerNotEqualToZero(
4915 IN LARGE_INTEGER Operand
);
4920 RtlLargeIntegerShiftLeft(
4921 IN LARGE_INTEGER LargeInteger
,
4922 IN CCHAR ShiftCount
);
4927 RtlLargeIntegerShiftRight(
4928 IN LARGE_INTEGER LargeInteger
,
4929 IN CCHAR ShiftCount
);
4934 RtlLargeIntegerSubtract(
4935 IN LARGE_INTEGER Minuend
,
4936 IN LARGE_INTEGER Subtrahend
);
4941 * COMPUTE_PAGES_SPANNED(
4945 #define COMPUTE_PAGES_SPANNED(Va, \
4947 (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
4951 ** Architecture specific structures
4959 Exfi386InterlockedIncrementLong(
4965 Exfi386InterlockedDecrementLong(
4971 Exfi386InterlockedExchangeUlong(
4975 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
4976 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
4977 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
4983 // NT-ARM is not documented
4992 #endif /* __WINDDK_H */