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
;
84 typedef struct _BUS_HANDLER
*PBUS_HANDLER
;
87 /* FIXME: Unknown definitions */
88 struct _SET_PARTITION_INFORMATION_EX
;
91 typedef HANDLE TRACEHANDLE
;
92 typedef PVOID PWMILIB_CONTEXT
;
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 /* GCC/MSVC and WDK compatible declaration */
1032 extern NTKERNELAPI HAL_DISPATCH HalDispatchTable
;
1034 #if defined(_NTOSKRNL_) || defined(_BLDR_)
1035 #define HALDISPATCH (&HalDispatchTable)
1037 /* This is a WDK compatibility definition */
1038 #define HalDispatchTable (&HalDispatchTable)
1039 #define HALDISPATCH HalDispatchTable
1042 #define HAL_DISPATCH_VERSION 3
1043 #define HalDispatchTableVersion HALDISPATCH->Version
1044 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
1045 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
1046 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
1047 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
1048 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
1049 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
1050 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
1051 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
1052 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
1053 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
1054 #define HalStartMirroring HALDISPATCH->HalStartMirroring
1055 #define HalEndMirroring HALDISPATCH->HalEndMirroring
1056 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
1057 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
1058 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
1060 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1061 ULONG AlignmentRequirement
;
1062 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1064 typedef struct _FILE_NAME_INFORMATION
{
1065 ULONG FileNameLength
;
1067 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1070 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1071 ULONG FileAttributes
;
1073 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1075 typedef struct _FILE_DISPOSITION_INFORMATION
{
1077 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1079 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1080 LARGE_INTEGER EndOfFile
;
1081 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1083 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1084 LARGE_INTEGER ValidDataLength
;
1085 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1087 typedef union _FILE_SEGMENT_ELEMENT
{
1089 ULONGLONG Alignment
;
1090 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1092 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
1094 typedef struct _KEY_USER_FLAGS_INFORMATION
{
1096 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
1098 #define PCI_ADDRESS_MEMORY_SPACE 0x00000000
1100 typedef struct _OSVERSIONINFOA
{
1101 ULONG dwOSVersionInfoSize
;
1102 ULONG dwMajorVersion
;
1103 ULONG dwMinorVersion
;
1104 ULONG dwBuildNumber
;
1106 CHAR szCSDVersion
[128];
1107 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
1109 typedef struct _OSVERSIONINFOW
{
1110 ULONG dwOSVersionInfoSize
;
1111 ULONG dwMajorVersion
;
1112 ULONG dwMinorVersion
;
1113 ULONG dwBuildNumber
;
1115 WCHAR szCSDVersion
[128];
1116 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
1119 typedef OSVERSIONINFOW OSVERSIONINFO
;
1120 typedef POSVERSIONINFOW POSVERSIONINFO
;
1121 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
1123 typedef OSVERSIONINFOA OSVERSIONINFO
;
1124 typedef POSVERSIONINFOA POSVERSIONINFO
;
1125 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
1128 typedef struct _OSVERSIONINFOEXA
{
1129 ULONG dwOSVersionInfoSize
;
1130 ULONG dwMajorVersion
;
1131 ULONG dwMinorVersion
;
1132 ULONG dwBuildNumber
;
1134 CHAR szCSDVersion
[128];
1135 USHORT wServicePackMajor
;
1136 USHORT wServicePackMinor
;
1140 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
1142 typedef struct _OSVERSIONINFOEXW
{
1143 ULONG dwOSVersionInfoSize
;
1144 ULONG dwMajorVersion
;
1145 ULONG dwMinorVersion
;
1146 ULONG dwBuildNumber
;
1148 WCHAR szCSDVersion
[128];
1149 USHORT wServicePackMajor
;
1150 USHORT wServicePackMinor
;
1154 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
1157 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
1158 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
1159 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
1161 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
1162 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
1163 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
1169 VerSetConditionMask(
1170 IN ULONGLONG ConditionMask
,
1172 IN UCHAR Condition
);
1174 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
1175 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
1176 (TypeBitMask), (ComparisonType)))
1178 /* RtlVerifyVersionInfo() TypeMask */
1180 #define VER_MINORVERSION 0x0000001
1181 #define VER_MAJORVERSION 0x0000002
1182 #define VER_BUILDNUMBER 0x0000004
1183 #define VER_PLATFORMID 0x0000008
1184 #define VER_SERVICEPACKMINOR 0x0000010
1185 #define VER_SERVICEPACKMAJOR 0x0000020
1186 #define VER_SUITENAME 0x0000040
1187 #define VER_PRODUCT_TYPE 0x0000080
1189 /* RtlVerifyVersionInfo() ComparisonType */
1192 #define VER_GREATER 2
1193 #define VER_GREATER_EQUAL 3
1195 #define VER_LESS_EQUAL 5
1199 #define VER_CONDITION_MASK 7
1200 #define VER_NUM_BITS_PER_CONDITION_MASK 3
1205 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
) (
1207 struct _RTL_RANGE
*Range
1210 typedef struct _CONFIGURATION_INFORMATION
{
1215 ULONG ScsiPortCount
;
1217 ULONG ParallelCount
;
1218 BOOLEAN AtDiskPrimaryAddressClaimed
;
1219 BOOLEAN AtDiskSecondaryAddressClaimed
;
1221 ULONG MediumChangerCount
;
1222 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
1224 typedef enum _CONFIGURATION_TYPE
{
1227 FloatingPointProcessor
,
1237 MultiFunctionAdapter
,
1251 FloppyDiskPeripheral
,
1264 RealModeIrqRoutingTable
,
1265 RealModePCIEnumeration
,
1267 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
1270 (DDKAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
1272 IN PUNICODE_STRING PathName
,
1273 IN INTERFACE_TYPE BusType
,
1275 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
1276 IN CONFIGURATION_TYPE ControllerType
,
1277 IN ULONG ControllerNumber
,
1278 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
1279 IN CONFIGURATION_TYPE PeripheralType
,
1280 IN ULONG PeripheralNumber
,
1281 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
1283 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
1284 IoQueryDeviceIdentifier
= 0,
1285 IoQueryDeviceConfigurationData
,
1286 IoQueryDeviceComponentInformation
,
1287 IoQueryDeviceMaxData
1288 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
1291 (DDKAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
1293 IN HANDLE ProcessId
,
1297 (DDKAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
1298 IN HANDLE ProcessId
,
1302 typedef struct _IMAGE_INFO
{
1303 _ANONYMOUS_UNION
union {
1305 _ANONYMOUS_STRUCT
struct {
1306 ULONG ImageAddressingMode
: 8;
1307 ULONG SystemModeImage
: 1;
1308 ULONG ImageMappedToAllPids
: 1;
1309 ULONG Reserved
: 22;
1313 ULONG ImageSelector
;
1315 ULONG ImageSectionNumber
;
1316 } IMAGE_INFO
, *PIMAGE_INFO
;
1318 #define IMAGE_ADDRESSING_MODE_32BIT 3
1321 (DDKAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
1322 IN PUNICODE_STRING FullImageName
,
1323 IN HANDLE ProcessId
,
1324 IN PIMAGE_INFO ImageInfo
);
1326 #pragma pack(push,4)
1327 typedef enum _BUS_DATA_TYPE
{
1328 ConfigurationSpaceUndefined
= -1,
1336 PCMCIAConfiguration
,
1339 PNPISAConfiguration
,
1340 SgiInternalConfiguration
,
1342 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
1345 typedef struct _NT_TIB
{
1346 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
1350 _ANONYMOUS_UNION
union {
1354 PVOID ArbitraryUserPointer
;
1355 struct _NT_TIB
*Self
;
1358 typedef struct _NT_TIB32
{
1359 ULONG ExceptionList
;
1363 __GNU_EXTENSION
union {
1367 ULONG ArbitraryUserPointer
;
1369 } NT_TIB32
,*PNT_TIB32
;
1371 typedef struct _NT_TIB64
{
1372 ULONG64 ExceptionList
;
1375 ULONG64 SubSystemTib
;
1376 __GNU_EXTENSION
union {
1380 ULONG64 ArbitraryUserPointer
;
1382 } NT_TIB64
,*PNT_TIB64
;
1384 typedef enum _PROCESSINFOCLASS
{
1385 ProcessBasicInformation
,
1390 ProcessBasePriority
,
1391 ProcessRaisePriority
,
1393 ProcessExceptionPort
,
1395 ProcessLdtInformation
,
1397 ProcessDefaultHardErrorMode
,
1398 ProcessIoPortHandlers
,
1399 ProcessPooledUsageAndLimits
,
1400 ProcessWorkingSetWatch
,
1401 ProcessUserModeIOPL
,
1402 ProcessEnableAlignmentFaultFixup
,
1403 ProcessPriorityClass
,
1404 ProcessWx86Information
,
1406 ProcessAffinityMask
,
1407 ProcessPriorityBoost
,
1409 ProcessSessionInformation
,
1410 ProcessForegroundInformation
,
1411 ProcessWow64Information
,
1412 ProcessImageFileName
,
1413 ProcessLUIDDeviceMapsEnabled
,
1414 ProcessBreakOnTermination
,
1415 ProcessDebugObjectHandle
,
1417 ProcessHandleTracing
,
1419 ProcessExecuteFlags
,
1420 ProcessTlsInformation
,
1422 ProcessImageInformation
,
1424 ProcessPagePriority
,
1425 ProcessInstrumentationCallback
,
1429 typedef enum _THREADINFOCLASS
{
1430 ThreadBasicInformation
,
1435 ThreadImpersonationToken
,
1436 ThreadDescriptorTableEntry
,
1437 ThreadEnableAlignmentFaultFixup
,
1438 ThreadEventPair_Reusable
,
1439 ThreadQuerySetWin32StartAddress
,
1441 ThreadPerformanceCount
,
1442 ThreadAmILastThread
,
1443 ThreadIdealProcessor
,
1444 ThreadPriorityBoost
,
1445 ThreadSetTlsArrayAddress
,
1447 ThreadHideFromDebugger
,
1448 ThreadBreakOnTermination
,
1449 ThreadSwitchLegacyState
,
1451 ThreadLastSystemCall
,
1455 ThreadActualBasePriority
,
1459 typedef struct _PROCESS_BASIC_INFORMATION
1461 NTSTATUS ExitStatus
;
1462 struct _PEB
*PebBaseAddress
;
1463 ULONG_PTR AffinityMask
;
1464 KPRIORITY BasePriority
;
1465 ULONG_PTR UniqueProcessId
;
1466 ULONG_PTR InheritedFromUniqueProcessId
;
1467 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
1469 typedef struct _PROCESS_WS_WATCH_INFORMATION
1473 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
1475 typedef struct _PROCESS_DEVICEMAP_INFORMATION
1477 __GNU_EXTENSION
union
1481 HANDLE DirectoryHandle
;
1486 UCHAR DriveType
[32];
1489 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
1491 typedef struct _KERNEL_USER_TIMES
1493 LARGE_INTEGER CreateTime
;
1494 LARGE_INTEGER ExitTime
;
1495 LARGE_INTEGER KernelTime
;
1496 LARGE_INTEGER UserTime
;
1497 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1499 typedef struct _PROCESS_ACCESS_TOKEN
1503 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1505 typedef struct _PROCESS_SESSION_INFORMATION
1508 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1511 ** Storage structures
1513 typedef enum _PARTITION_STYLE
{
1514 PARTITION_STYLE_MBR
,
1515 PARTITION_STYLE_GPT
,
1519 typedef struct _CREATE_DISK_MBR
{
1521 } CREATE_DISK_MBR
, *PCREATE_DISK_MBR
;
1523 typedef struct _CREATE_DISK_GPT
{
1525 ULONG MaxPartitionCount
;
1526 } CREATE_DISK_GPT
, *PCREATE_DISK_GPT
;
1528 typedef struct _CREATE_DISK
{
1529 PARTITION_STYLE PartitionStyle
;
1530 _ANONYMOUS_UNION
union {
1531 CREATE_DISK_MBR Mbr
;
1532 CREATE_DISK_GPT Gpt
;
1534 } CREATE_DISK
, *PCREATE_DISK
;
1536 typedef struct _DISK_SIGNATURE
{
1537 ULONG PartitionStyle
;
1538 _ANONYMOUS_UNION
union {
1547 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
1550 (FASTCALL
*PTIME_UPDATE_NOTIFY_ROUTINE
)(
1552 IN KPROCESSOR_MODE Mode
);
1554 typedef struct _PHYSICAL_MEMORY_RANGE
{
1555 PHYSICAL_ADDRESS BaseAddress
;
1556 LARGE_INTEGER NumberOfBytes
;
1557 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
1560 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
1563 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
1564 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
1565 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
1566 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
1568 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1569 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1570 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1571 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1572 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1575 (DDKAPI
*PTIMER_APC_ROUTINE
)(
1576 IN PVOID TimerContext
,
1577 IN ULONG TimerLowValue
,
1578 IN LONG TimerHighValue
);
1581 ** Architecture specific structures
1583 #define PCR_MINOR_VERSION 1
1584 #define PCR_MAJOR_VERSION 1
1588 #define SIZE_OF_80387_REGISTERS 80
1589 #define CONTEXT_i386 0x10000
1590 #define CONTEXT_i486 0x10000
1591 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
1592 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
1593 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
1594 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
1595 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
1596 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
1597 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
1599 typedef struct _FLOATING_SAVE_AREA
{
1604 ULONG ErrorSelector
;
1607 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
1609 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
1611 typedef struct _CONTEXT
{
1619 FLOATING_SAVE_AREA FloatSave
;
1636 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
1639 typedef struct _KPCR_TIB
{
1640 PVOID ExceptionList
; /* 00 */
1641 PVOID StackBase
; /* 04 */
1642 PVOID StackLimit
; /* 08 */
1643 PVOID SubSystemTib
; /* 0C */
1644 _ANONYMOUS_UNION
union {
1645 PVOID FiberData
; /* 10 */
1646 ULONG Version
; /* 10 */
1648 PVOID ArbitraryUserPointer
; /* 14 */
1649 struct _KPCR_TIB
*Self
; /* 18 */
1650 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
1652 typedef struct _KPCR
{
1653 KPCR_TIB Tib
; /* 00 */
1654 struct _KPCR
*Self
; /* 1C */
1655 struct _KPRCB
*Prcb
; /* 20 */
1656 KIRQL Irql
; /* 24 */
1658 ULONG IrrActive
; /* 2C */
1660 PVOID KdVersionBlock
; /* 34 */
1661 PUSHORT IDT
; /* 38 */
1662 PUSHORT GDT
; /* 3C */
1663 struct _KTSS
*TSS
; /* 40 */
1664 USHORT MajorVersion
; /* 44 */
1665 USHORT MinorVersion
; /* 46 */
1666 KAFFINITY SetMember
; /* 48 */
1667 ULONG StallScaleFactor
; /* 4C */
1668 UCHAR SpareUnused
; /* 50 */
1669 UCHAR Number
; /* 51 */
1671 UCHAR SecondLevelCacheAssociativity
;
1673 ULONG KernelReserved
[14]; // For use by the kernel
1674 ULONG SecondLevelCacheSize
;
1675 ULONG HalReserved
[16]; // For use by Hal
1676 } KPCR
, *PKPCR
; /* 54 */
1678 #define KeGetPcr() PCR
1682 KeGetCurrentProcessorNumber(VOID
)
1684 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
1687 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1688 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1689 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
1691 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1692 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1693 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1694 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1695 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
1697 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
1698 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
1700 #elif defined(__x86_64__)
1702 #define CONTEXT_AMD64 0x100000
1703 #if !defined(RC_INVOKED)
1704 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
1705 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
1706 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
1707 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
1708 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
1710 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1711 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1713 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1714 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1715 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1716 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1719 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
1769 /* Floating point */
1771 XMM_SAVE_AREA32 FltSave
;
1795 M128A VectorRegister
[26];
1796 ULONG64 VectorControl
;
1799 ULONG64 DebugControl
;
1800 ULONG64 LastBranchToRip
;
1801 ULONG64 LastBranchFromRip
;
1802 ULONG64 LastExceptionToRip
;
1803 ULONG64 LastExceptionFromRip
;
1806 #define PAGE_SIZE 0x1000
1807 #define PAGE_SHIFT 12L
1808 #define PTI_SHIFT 12L
1809 #define PDI_SHIFT 21L
1810 #define PPI_SHIFT 30L
1811 #define PXI_SHIFT 39L
1812 #define PTE_PER_PAGE 512
1813 #define PDE_PER_PAGE 512
1814 #define PPE_PER_PAGE 512
1815 #define PXE_PER_PAGE 512
1816 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
1817 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
1818 #define PPI_MASK (PPE_PER_PAGE - 1)
1819 #define PXI_MASK (PXE_PER_PAGE - 1)
1821 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
1822 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
1823 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
1824 #define PDE_BASE 0xFFFFF6FB40000000ULL
1825 #define PTE_BASE 0xFFFFF68000000000ULL
1826 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
1827 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
1828 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
1829 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
1831 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1832 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1833 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
1835 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1836 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1837 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1838 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1839 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
1840 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
1842 #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
1843 #define SharedInterruptTime (&SharedUserData->InterruptTime)
1844 #define SharedSystemTime (&SharedUserData->SystemTime)
1845 #define SharedTickCount (&SharedUserData->TickCount)
1847 #define KeQueryInterruptTime() \
1848 (*(volatile ULONG64*)SharedInterruptTime)
1849 #define KeQuerySystemTime(CurrentCount) \
1850 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
1851 #define KeQueryTickCount(CurrentCount) \
1852 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
1854 typedef struct _KPCR
1856 __GNU_EXTENSION
union
1859 __GNU_EXTENSION
struct
1861 union _KGDTENTRY64
*GdtBase
;
1862 struct _KTSS64
*TssBase
;
1865 struct _KPRCB
*CurrentPrcb
;
1866 PKSPIN_LOCK_QUEUE LockArray
;
1870 union _KIDTENTRY64
*IdtBase
;
1873 UCHAR SecondLevelCacheAssociativity
;
1874 UCHAR ObsoleteNumber
;
1877 USHORT MajorVersion
;
1878 USHORT MinorVersion
;
1879 ULONG StallScaleFactor
;
1881 ULONG KernelReserved
[15];
1882 ULONG SecondLevelCacheSize
;
1883 ULONG HalReserved
[16];
1885 PVOID KdVersionBlock
;
1887 ULONG PcrAlign1
[24];
1890 typedef struct _KFLOATING_SAVE
{
1892 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
1898 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
1903 KeGetCurrentProcessorNumber(VOID
)
1905 return (ULONG
)__readgsword(0x184);
1908 #elif defined(__PowerPC__)
1911 // Used to contain PFNs and PFN counts
1913 typedef ULONG PFN_COUNT
;
1914 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
1915 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
1917 #define PASSIVE_LEVEL 0
1920 #define DISPATCH_LEVEL 2
1921 #define PROFILE_LEVEL 27
1922 #define CLOCK1_LEVEL 28
1923 #define CLOCK2_LEVEL 28
1924 #define IPI_LEVEL 29
1925 #define POWER_LEVEL 30
1926 #define HIGH_LEVEL 31
1928 typedef struct _KFLOATING_SAVE
{
1930 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
1932 typedef struct _KPCR_TIB
{
1933 PVOID ExceptionList
; /* 00 */
1934 PVOID StackBase
; /* 04 */
1935 PVOID StackLimit
; /* 08 */
1936 PVOID SubSystemTib
; /* 0C */
1937 _ANONYMOUS_UNION
union {
1938 PVOID FiberData
; /* 10 */
1939 ULONG Version
; /* 10 */
1941 PVOID ArbitraryUserPointer
; /* 14 */
1942 struct _KPCR_TIB
*Self
; /* 18 */
1943 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
1945 #define PCR_MINOR_VERSION 1
1946 #define PCR_MAJOR_VERSION 1
1948 typedef struct _KPCR
{
1949 KPCR_TIB Tib
; /* 00 */
1950 struct _KPCR
*Self
; /* 1C */
1951 struct _KPRCB
*Prcb
; /* 20 */
1952 KIRQL Irql
; /* 24 */
1954 ULONG IrrActive
; /* 2C */
1956 PVOID KdVersionBlock
; /* 34 */
1957 PUSHORT IDT
; /* 38 */
1958 PUSHORT GDT
; /* 3C */
1959 struct _KTSS
*TSS
; /* 40 */
1960 USHORT MajorVersion
; /* 44 */
1961 USHORT MinorVersion
; /* 46 */
1962 KAFFINITY SetMember
; /* 48 */
1963 ULONG StallScaleFactor
; /* 4C */
1964 UCHAR SpareUnused
; /* 50 */
1965 UCHAR Number
; /* 51 */
1966 } KPCR
, *PKPCR
; /* 54 */
1968 #define KeGetPcr() PCR
1973 KeGetCurrentProcessorNumber(VOID
)
1976 __asm__
__volatile__ (
1979 : "i" (FIELD_OFFSET(KPCR
, Number
))
1984 #elif defined(_MIPS_)
1986 #error MIPS Headers are totally incorrect
1989 // Used to contain PFNs and PFN counts
1991 typedef ULONG PFN_COUNT
;
1992 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
1993 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
1995 #define PASSIVE_LEVEL 0
1997 #define DISPATCH_LEVEL 2
1998 #define PROFILE_LEVEL 27
1999 #define IPI_LEVEL 29
2000 #define HIGH_LEVEL 31
2002 typedef struct _KPCR
{
2003 struct _KPRCB
*Prcb
; /* 20 */
2004 KIRQL Irql
; /* 24 */
2009 #define KeGetPcr() PCR
2011 typedef struct _KFLOATING_SAVE
{
2012 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
2017 KeGetCurrentProcessorNumber(VOID
)
2022 #elif defined(_M_ARM)
2025 // NT-ARM is not documented, need DDK-ARM
2030 #error Unknown architecture
2033 typedef enum _INTERLOCKED_RESULT
{
2034 ResultNegative
= RESULT_NEGATIVE
,
2035 ResultZero
= RESULT_ZERO
,
2036 ResultPositive
= RESULT_POSITIVE
2037 } INTERLOCKED_RESULT
;
2040 (NTAPI
*PciPin2Line
)(
2041 IN
struct _BUS_HANDLER
*BusHandler
,
2042 IN
struct _BUS_HANDLER
*RootHandler
,
2043 IN PCI_SLOT_NUMBER SlotNumber
,
2044 IN PPCI_COMMON_CONFIG PciData
2048 (NTAPI
*PciLine2Pin
)(
2049 IN
struct _BUS_HANDLER
*BusHandler
,
2050 IN
struct _BUS_HANDLER
*RootHandler
,
2051 IN PCI_SLOT_NUMBER SlotNumber
,
2052 IN PPCI_COMMON_CONFIG PciNewData
,
2053 IN PPCI_COMMON_CONFIG PciOldData
2057 (NTAPI
*PciReadWriteConfig
)(
2058 IN
struct _BUS_HANDLER
*BusHandler
,
2059 IN PCI_SLOT_NUMBER Slot
,
2065 #define PCI_DATA_TAG ' ICP'
2066 #define PCI_DATA_VERSION 1
2068 typedef struct _PCIBUSDATA
2072 PciReadWriteConfig ReadConfig
;
2073 PciReadWriteConfig WriteConfig
;
2074 PciPin2Line Pin2Line
;
2075 PciLine2Pin Line2Pin
;
2076 PCI_SLOT_NUMBER ParentSlot
;
2078 } PCIBUSDATA
, *PPCIBUSDATA
;
2081 /** SPINLOCK FUNCTIONS ********************************************************/
2085 #if defined(WIN9X_COMPAT_SPINLOCK)
2090 KeInitializeSpinLock(
2091 IN PKSPIN_LOCK SpinLock
2098 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
2100 /* Clear the lock */
2110 IN PKSPIN_LOCK SpinLock
);
2116 IN PKSPIN_LOCK SpinLock
,
2122 KefAcquireSpinLockAtDpcLevel(
2123 IN PKSPIN_LOCK SpinLock
);
2128 KefReleaseSpinLockFromDpcLevel(
2129 IN PKSPIN_LOCK SpinLock
);
2131 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
2132 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
2133 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
2134 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
2136 #define KeGetDcacheFillSize() 1L
2138 #elif defined(_M_ARM) // !defined (_X86_)
2142 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
2144 /* Clear the lock */
2152 IN PKSPIN_LOCK SpinLock
);
2158 IN PKSPIN_LOCK SpinLock
,
2165 KefAcquireSpinLockAtDpcLevel(
2166 IN PKSPIN_LOCK SpinLock
);
2171 KefReleaseSpinLockFromDpcLevel(
2172 IN PKSPIN_LOCK SpinLock
);
2175 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
2176 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
2177 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
2178 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
2183 KeInitializeSpinLock(
2184 IN PKSPIN_LOCK SpinLock
);
2191 KeInitializeSpinLock(
2192 PKSPIN_LOCK SpinLock
)
2200 IN PKSPIN_LOCK SpinLock
,
2205 KeAcquireSpinLockAtDpcLevel(
2206 IN PKSPIN_LOCK SpinLock
);
2210 KeReleaseSpinLockFromDpcLevel(
2211 IN PKSPIN_LOCK SpinLock
);
2215 KeAcquireSpinLockRaiseToDpc(
2216 IN PKSPIN_LOCK SpinLock
);
2218 #define KeAcquireSpinLock(SpinLock, OldIrql) \
2219 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
2221 #endif // !defined (_X86_)
2223 #define ARGUMENT_PRESENT(ArgumentPointer) \
2224 ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL)
2231 IN ULONG Base OPTIONAL
,
2232 IN OUT PULONG Value
);
2240 BOOLEAN CaseInSensitive
);
2242 #if !defined(MIDL_PASS)
2247 RtlConvertLongToLuid(
2253 Temp
.QuadPart
= Val
;
2254 Luid
.LowPart
= Temp
.u
.LowPart
;
2255 Luid
.HighPart
= Temp
.u
.HighPart
;
2263 RtlConvertUlongToLuid(
2280 IN VOID UNALIGNED
*Destination
,
2281 IN CONST VOID UNALIGNED
*Source
,
2288 IN OUT PSTRING DestinationString
,
2289 IN PSTRING SourceString OPTIONAL
);
2297 IN BOOLEAN CaseInSensitive
);
2299 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
2300 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
2301 *CallersAddress = (PVOID)_ReturnAddress(); \
2302 *CallersCaller = NULL;
2307 RtlGetCallersAddress(
2308 OUT PVOID
*CallersAddress
,
2309 OUT PVOID
*CallersCaller
);
2316 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
2322 IN OUT PACCESS_MASK AccessMask
,
2323 IN PGENERIC_MAPPING GenericMapping
);
2328 RtlPrefixUnicodeString(
2329 IN PCUNICODE_STRING String1
,
2330 IN PCUNICODE_STRING String2
,
2331 IN BOOLEAN CaseInSensitive
);
2336 RtlUpcaseUnicodeString(
2337 IN OUT PUNICODE_STRING DestinationString OPTIONAL
,
2338 IN PCUNICODE_STRING SourceString
,
2339 IN BOOLEAN AllocateDestinationString
);
2351 IN OUT PSTRING DestinationString
,
2352 IN PSTRING SourceString
);
2357 RtlVerifyVersionInfo(
2358 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
2360 IN ULONGLONG ConditionMask
);
2365 RtlVolumeDeviceToDosName(
2366 IN PVOID VolumeDeviceObject
,
2367 OUT PUNICODE_STRING DosName
);
2377 /******************************************************************************
2379 ******************************************************************************/
2381 typedef struct _ZONE_SEGMENT_HEADER
{
2382 SINGLE_LIST_ENTRY SegmentList
;
2384 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
2386 typedef struct _ZONE_HEADER
{
2387 SINGLE_LIST_ENTRY FreeList
;
2388 SINGLE_LIST_ENTRY SegmentList
;
2390 ULONG TotalSegmentSize
;
2391 } ZONE_HEADER
, *PZONE_HEADER
;
2393 #define PROTECTED_POOL 0x80000000
2395 /******************************************************************************
2396 * Executive Functions *
2397 ******************************************************************************/
2403 IN PZONE_HEADER Zone
,
2405 IN ULONG SegmentSize
);
2407 static __inline PVOID
2409 IN PZONE_HEADER Zone
)
2411 if (Zone
->FreeList
.Next
)
2412 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
2413 return (PVOID
) Zone
->FreeList
.Next
;
2416 static __inline PVOID
2418 IN PZONE_HEADER Zone
,
2421 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
2422 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
2423 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
2430 IN PZONE_HEADER Zone
,
2432 IN PVOID InitialSegment
,
2433 IN ULONG InitialSegmentSize
);
2437 * ExInterlockedAllocateFromZone(
2438 * IN PZONE_HEADER Zone,
2439 * IN PKSPIN_LOCK Lock)
2441 #define ExInterlockedAllocateFromZone(Zone, Lock) \
2442 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
2447 ExInterlockedExtendZone(
2448 IN PZONE_HEADER Zone
,
2450 IN ULONG SegmentSize
,
2451 IN PKSPIN_LOCK Lock
);
2454 * ExInterlockedFreeToZone(
2455 * IN PZONE_HEADER Zone,
2457 * IN PKSPIN_LOCK Lock);
2459 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
2460 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
2465 * IN PZONE_HEADER Zone)
2467 #define ExIsFullZone(Zone) \
2468 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
2471 * ExIsObjectInFirstZoneSegment(
2472 * IN PZONE_HEADER Zone,
2475 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
2476 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
2477 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
2478 (Zone)->TotalSegmentSize)) )
2484 ExRaiseAccessViolation(
2491 ExRaiseDatatypeMisalignment(
2500 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
2501 #define ExAcquireResourceShared ExAcquireResourceSharedLite
2502 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
2503 #define ExDeleteResource ExDeleteResourceLite
2504 #define ExInitializeResource ExInitializeResourceLite
2505 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
2506 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
2507 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
2508 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
2510 /** Filesystem runtime library routines **/
2515 FsRtlIsTotalDeviceFailure(
2516 IN NTSTATUS Status
);
2518 /** Hardware abstraction layer routines **/
2524 IN ULONG Frequency
);
2530 IN PDEVICE_OBJECT DeviceObject
,
2531 IN ULONG SectorSize
,
2532 IN ULONG MBRTypeIdentifier
,
2538 PADAPTER_OBJECT AdapterObject
2541 /** I/O manager routines **/
2543 #ifndef DMA_MACROS_DEFINED
2547 IoAllocateAdapterChannel(
2548 IN PADAPTER_OBJECT AdapterObject
,
2549 IN PDEVICE_OBJECT DeviceObject
,
2550 IN ULONG NumberOfMapRegisters
,
2551 IN PDRIVER_CONTROL ExecutionRoutine
,
2558 IoAllocateController(
2559 IN PCONTROLLER_OBJECT ControllerObject
,
2560 IN PDEVICE_OBJECT DeviceObject
,
2561 IN PDRIVER_CONTROL ExecutionRoutine
,
2565 * VOID IoAssignArcName(
2566 * IN PUNICODE_STRING ArcName,
2567 * IN PUNICODE_STRING DeviceName);
2569 #define IoAssignArcName(_ArcName, _DeviceName) ( \
2570 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
2576 IN PDEVICE_OBJECT DeviceObject
,
2577 IN PFILE_OBJECT FileObject
);
2589 IN PDEVICE_OBJECT DeviceObject
,
2590 IN PCREATE_DISK Disk
);
2596 IN PCONTROLLER_OBJECT ControllerObject
);
2600 * IoDeassignArcName(
2601 * IN PUNICODE_STRING ArcName)
2603 #define IoDeassignArcName IoDeleteSymbolicLink
2609 IN PCONTROLLER_OBJECT ControllerObject
);
2612 PCONFIGURATION_INFORMATION
2614 IoGetConfigurationInformation(
2620 IoGetDeviceToVerify(
2621 IN PETHREAD Thread
);
2626 IoGetFileObjectGenericMapping(
2632 IoMakeAssociatedIrp(
2634 IN CCHAR StackSize
);
2639 IoQueryDeviceDescription(
2640 IN PINTERFACE_TYPE BusType OPTIONAL
,
2641 IN PULONG BusNumber OPTIONAL
,
2642 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
2643 IN PULONG ControllerNumber OPTIONAL
,
2644 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
2645 IN PULONG PeripheralNumber OPTIONAL
,
2646 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
2654 IN PVPB Vpb OPTIONAL
,
2655 IN PDEVICE_OBJECT RealDeviceObject
);
2660 IoRaiseInformationalHardError(
2661 IN NTSTATUS ErrorStatus
,
2662 IN PUNICODE_STRING String OPTIONAL
,
2663 IN PKTHREAD Thread OPTIONAL
);
2668 IoReadDiskSignature(
2669 IN PDEVICE_OBJECT DeviceObject
,
2670 IN ULONG BytesPerSector
,
2671 OUT PDISK_SIGNATURE Signature
);
2676 IoReadPartitionTable(
2677 IN PDEVICE_OBJECT DeviceObject
,
2678 IN ULONG SectorSize
,
2679 IN BOOLEAN ReturnRecognizedPartitions
,
2680 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2685 IoReadPartitionTableEx(
2686 IN PDEVICE_OBJECT DeviceObject
,
2687 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
2692 IoRegisterBootDriverReinitialization(
2693 IN PDRIVER_OBJECT DriverObject
,
2694 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2700 IoRegisterBootDriverReinitialization(
2701 IN PDRIVER_OBJECT DriverObject
,
2702 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2708 IoRegisterDriverReinitialization(
2709 IN PDRIVER_OBJECT DriverObject
,
2710 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2716 IoReportDetectedDevice(
2717 IN PDRIVER_OBJECT DriverObject
,
2718 IN INTERFACE_TYPE LegacyBusType
,
2720 IN ULONG SlotNumber
,
2721 IN PCM_RESOURCE_LIST ResourceList
,
2722 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
2723 IN BOOLEAN ResourceAssigned
,
2724 IN OUT PDEVICE_OBJECT
*DeviceObject
);
2729 IoReportResourceForDetection(
2730 IN PDRIVER_OBJECT DriverObject
,
2731 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2732 IN ULONG DriverListSize OPTIONAL
,
2733 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2734 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2735 IN ULONG DeviceListSize OPTIONAL
,
2736 OUT PBOOLEAN ConflictDetected
);
2741 IoReportResourceUsage(
2742 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2743 IN PDRIVER_OBJECT DriverObject
,
2744 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2745 IN ULONG DriverListSize OPTIONAL
,
2746 IN PDEVICE_OBJECT DeviceObject
,
2747 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2748 IN ULONG DeviceListSize OPTIONAL
,
2749 IN BOOLEAN OverrideConflict
,
2750 OUT PBOOLEAN ConflictDetected
);
2755 IoSetHardErrorOrVerifyDevice(
2757 IN PDEVICE_OBJECT DeviceObject
);
2762 IoSetPartitionInformation(
2763 IN PDEVICE_OBJECT DeviceObject
,
2764 IN ULONG SectorSize
,
2765 IN ULONG PartitionNumber
,
2766 IN ULONG PartitionType
);
2771 IoSetPartitionInformationEx(
2772 IN PDEVICE_OBJECT DeviceObject
,
2773 IN ULONG PartitionNumber
,
2774 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
2779 IoSetSystemPartition(
2780 IN PUNICODE_STRING VolumeNameString
);
2785 IoSetThreadHardErrorMode(
2786 IN BOOLEAN EnableHardErrors
);
2791 IoVerifyPartitionTable(
2792 IN PDEVICE_OBJECT DeviceObject
,
2793 IN BOOLEAN FixErrors
);
2798 IoVolumeDeviceToDosName(
2799 IN PVOID VolumeDeviceObject
,
2800 OUT PUNICODE_STRING DosName
);
2805 IoWritePartitionTable(
2806 IN PDEVICE_OBJECT DeviceObject
,
2807 IN ULONG SectorSize
,
2808 IN ULONG SectorsPerTrack
,
2809 IN ULONG NumberOfHeads
,
2810 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2815 IoWritePartitionTableEx(
2816 IN PDEVICE_OBJECT DeviceObject
,
2817 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*PartitionBuffer
);
2819 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
2823 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2824 //DECLSPEC_DEPRECATED_DDK
2828 IoFreeAdapterChannel(
2829 IN PADAPTER_OBJECT AdapterObject
);
2831 //DECLSPEC_DEPRECATED_DDK
2836 IN PADAPTER_OBJECT AdapterObject
,
2838 IN PVOID MapRegisterBase
,
2840 IN OUT PULONG Length
,
2841 IN BOOLEAN WriteToDevice
);
2843 //DECLSPEC_DEPRECATED_DDK
2847 IoFlushAdapterBuffers(
2848 IN PADAPTER_OBJECT AdapterObject
,
2850 IN PVOID MapRegisterBase
,
2853 IN BOOLEAN WriteToDevice
);
2855 //DECLSPEC_DEPRECATED_DDK
2860 IN PADAPTER_OBJECT AdapterObject
,
2861 IN PVOID MapRegisterBase
,
2862 IN ULONG NumberOfMapRegisters
);
2864 //DECLSPEC_DEPRECATED_DDK
2868 HalAllocateCommonBuffer(
2869 IN PADAPTER_OBJECT AdapterObject
,
2871 IN PPHYSICAL_ADDRESS LogicalAddress
,
2872 IN BOOLEAN CacheEnabled
);
2874 //DECLSPEC_DEPRECATED_DDK
2878 HalFreeCommonBuffer(
2879 IN PADAPTER_OBJECT AdapterObject
,
2881 IN PHYSICAL_ADDRESS LogicalAddress
,
2882 IN PVOID VirtualAddress
,
2883 IN BOOLEAN CacheEnabled
);
2885 //DECLSPEC_DEPRECATED_DDK
2890 IN PADAPTER_OBJECT AdapterObject
);
2895 HalAllocateAdapterChannel(
2896 IN PADAPTER_OBJECT AdapterObject
,
2897 IN PWAIT_CONTEXT_BLOCK Wcb
,
2898 IN ULONG NumberOfMapRegisters
,
2899 IN PDRIVER_CONTROL ExecutionRoutine
);
2901 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2902 #endif /* defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) */
2904 /** Kernel routines **/
2911 IN ULONG BugCheckCode
);
2920 volatile LONG Barrier
;
2921 #if defined(__GNUC__)
2922 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
2923 #elif defined(_MSC_VER)
2924 __asm xchg
[Barrier
], eax
2935 IN KPRIORITY Increment
,
2938 #if !defined(_M_AMD64)
2944 OUT PLARGE_INTEGER TickCount
);
2950 KeSetBasePriorityThread(
2951 IN PRKTHREAD Thread
,
2957 KeSetTimeUpdateNotifyRoutine(
2958 IN PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine
);
2977 KeRaiseIrqlToDpcLevel(
2983 KeRaiseIrqlToSynchLevel(
2986 #define KeLowerIrql(a) KfLowerIrql(a)
2987 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
2989 #elif defined(_M_AMD64)
2993 KeGetCurrentIrql(VOID
)
2995 return (KIRQL
)__readcr8();
3000 KeLowerIrql(IN KIRQL NewIrql
)
3002 ASSERT(KeGetCurrentIrql() >= NewIrql
);
3003 __writecr8(NewIrql
);
3008 KfRaiseIrql(IN KIRQL NewIrql
)
3012 OldIrql
= __readcr8();
3013 ASSERT(OldIrql
<= NewIrql
);
3014 __writecr8(NewIrql
);
3017 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
3021 KeRaiseIrqlToDpcLevel(VOID
)
3023 return KfRaiseIrql(DISPATCH_LEVEL
);
3028 KeRaiseIrqlToSynchLevel(VOID
)
3030 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
3033 #elif defined(__PowerPC__)
3050 KeRaiseIrqlToDpcLevel(
3056 KeRaiseIrqlToSynchLevel(
3059 #define KeLowerIrql(a) KfLowerIrql(a)
3060 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
3062 #elif defined(_M_MIPS)
3064 #define KeLowerIrql(a) KfLowerIrql(a)
3065 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
3082 KeRaiseIrqlToDpcLevel(
3088 KeRaiseIrqlToSynchLevel(
3091 #elif defined(_M_ARM)
3108 OUT PKIRQL OldIrql
);
3113 KeRaiseIrqlToDpcLevel(
3119 KeRaiseIrqlToSynchLevel(
3124 /** Memory manager routines **/
3129 MmAllocateNonCachedMemory(
3130 IN ULONG NumberOfBytes
);
3135 MmFreeNonCachedMemory(
3136 IN PVOID BaseAddress
,
3137 IN SIZE_T NumberOfBytes
);
3142 MmGetPhysicalAddress(
3143 IN PVOID BaseAddress
);
3146 PPHYSICAL_MEMORY_RANGE
3148 MmGetPhysicalMemoryRanges(
3154 MmGetVirtualForPhysical(
3155 IN PHYSICAL_ADDRESS PhysicalAddress
);
3160 MmMapUserAddressesToPage(
3161 IN PVOID BaseAddress
,
3162 IN SIZE_T NumberOfBytes
,
3163 IN PVOID PageAddress
);
3169 IN PHYSICAL_ADDRESS PhysicalAddress
,
3170 IN SIZE_T NumberOfBytes
,
3171 IN MEMORY_CACHING_TYPE CacheType
);
3176 MmMapViewInSessionSpace(
3178 OUT PVOID
*MappedBase
,
3179 IN OUT PSIZE_T ViewSize
);
3184 MmMapViewInSystemSpace(
3186 OUT PVOID
*MappedBase
,
3187 IN PSIZE_T ViewSize
);
3192 MmMarkPhysicalMemoryAsBad(
3193 IN PPHYSICAL_ADDRESS StartAddress
,
3194 IN OUT PLARGE_INTEGER NumberOfBytes
);
3199 MmMarkPhysicalMemoryAsGood(
3200 IN PPHYSICAL_ADDRESS StartAddress
,
3201 IN OUT PLARGE_INTEGER NumberOfBytes
);
3205 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
3209 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, \
3211 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
3212 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
3218 IN PVOID VirtualAddress
);
3223 MmIsThisAnNtAsSystem(
3229 MmLockPagableImageSection(
3230 IN PVOID AddressWithinSection
);
3234 * MmLockPagableCodeSection(
3235 * IN PVOID AddressWithinSection)
3237 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
3242 MmLockPagableSectionByHandle(
3243 IN PVOID ImageSectionHandle
);
3248 MmLockPageableDataSection (
3249 IN PVOID AddressWithinSection
3255 MmUnlockPageableImageSection(
3256 IN PVOID ImageSectionHandle
3262 MmUnmapViewInSessionSpace(
3263 IN PVOID MappedBase
);
3268 MmUnmapViewInSystemSpace(
3269 IN PVOID MappedBase
);
3274 MmUnsecureVirtualMemory(
3275 IN HANDLE SecureHandle
);
3280 MmRemovePhysicalMemory(
3281 IN PPHYSICAL_ADDRESS StartAddress
,
3282 IN OUT PLARGE_INTEGER NumberOfBytes
);
3287 MmSecureVirtualMemory(
3290 IN ULONG ProbeMode
);
3295 MmUnmapVideoDisplay(
3296 IN PVOID BaseAddress
,
3297 IN SIZE_T NumberOfBytes
);
3299 /** Object manager routines **/
3305 IN PACCESS_STATE AccessState
,
3306 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3308 IN POBJECT_TYPE Type
);
3313 ObDereferenceSecurityDescriptor(
3314 PSECURITY_DESCRIPTOR SecurityDescriptor
,
3320 ObLogSecurityDescriptor(
3321 IN PSECURITY_DESCRIPTOR InputSecurityDescriptor
,
3322 OUT PSECURITY_DESCRIPTOR
*OutputSecurityDescriptor
,
3329 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3330 IN POBJECT_TYPE ObjectType
,
3331 IN KPROCESSOR_MODE AccessMode
,
3332 IN PACCESS_STATE PassedAccessState
,
3333 IN ACCESS_MASK DesiredAccess
,
3334 IN OUT PVOID ParseContext OPTIONAL
,
3335 OUT PHANDLE Handle
);
3340 ObReferenceObjectByName(
3341 IN PUNICODE_STRING ObjectPath
,
3342 IN ULONG Attributes
,
3343 IN PACCESS_STATE PassedAccessState OPTIONAL
,
3344 IN ACCESS_MASK DesiredAccess OPTIONAL
,
3345 IN POBJECT_TYPE ObjectType
,
3346 IN KPROCESSOR_MODE AccessMode
,
3347 IN OUT PVOID ParseContext OPTIONAL
,
3353 ObReferenceSecurityDescriptor(
3354 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3357 /** Process manager routines **/
3362 PsCreateSystemProcess(
3363 IN PHANDLE ProcessHandle
,
3364 IN ACCESS_MASK DesiredAccess
,
3365 IN POBJECT_ATTRIBUTES ObjectAttributes
);
3370 PsGetCurrentProcessId(
3376 PsGetCurrentThreadId(
3382 PsGetProcessId(PEPROCESS Process
);
3388 PULONG MajorVersion OPTIONAL
,
3389 PULONG MinorVersion OPTIONAL
,
3390 PULONG BuildNumber OPTIONAL
,
3391 PUNICODE_STRING CSDVersion OPTIONAL
);
3396 PsRemoveCreateThreadNotifyRoutine(
3397 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
3402 PsRemoveLoadImageNotifyRoutine(
3403 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
3408 PsSetCreateProcessNotifyRoutine(
3409 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
3415 PsSetCreateThreadNotifyRoutine(
3416 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
3421 PsSetLoadImageNotifyRoutine(
3422 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
3424 extern NTSYSAPI PEPROCESS PsInitialSystemProcess
;
3426 /** Security reference monitor routines **/
3431 SeSinglePrivilegeCheck(
3432 LUID PrivilegeValue
,
3433 KPROCESSOR_MODE PreviousMode
);
3435 /** NtXxx and ZwXxx routines **/
3441 OUT PHANDLE ProcessHandle
,
3442 IN ACCESS_MASK DesiredAccess
,
3443 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3444 IN PCLIENT_ID ClientId OPTIONAL
);
3449 NtQueryInformationProcess(
3450 IN HANDLE ProcessHandle
,
3451 IN PROCESSINFOCLASS ProcessInformationClass
,
3452 OUT PVOID ProcessInformation
,
3453 IN ULONG ProcessInformationLength
,
3454 OUT PULONG ReturnLength OPTIONAL
);
3460 IN HANDLE TimerHandle
,
3461 OUT PBOOLEAN CurrentState OPTIONAL
);
3473 OUT PHANDLE EventHandle
,
3474 IN ACCESS_MASK DesiredAccess
,
3475 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
3476 IN EVENT_TYPE EventType
,
3477 IN BOOLEAN InitialState
);
3483 OUT PHANDLE EventHandle
,
3484 IN ACCESS_MASK DesiredAccess
,
3485 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
3486 IN EVENT_TYPE EventType
,
3487 IN BOOLEAN InitialState
);
3493 OUT PHANDLE TimerHandle
,
3494 IN ACCESS_MASK DesiredAccess
,
3495 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
3496 IN TIMER_TYPE TimerType
);
3501 NtDeviceIoControlFile(
3502 IN HANDLE DeviceHandle
,
3503 IN HANDLE Event OPTIONAL
,
3504 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
3505 IN PVOID UserApcContext OPTIONAL
,
3506 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3507 IN ULONG IoControlCode
,
3508 IN PVOID InputBuffer
,
3509 IN ULONG InputBufferSize
,
3510 OUT PVOID OutputBuffer
,
3511 IN ULONG OutputBufferSize
);
3517 IN HANDLE SectionHandle
,
3518 IN HANDLE ProcessHandle
,
3519 IN OUT PVOID
*BaseAddress
,
3520 IN ULONG_PTR ZeroBits
,
3521 IN SIZE_T CommitSize
,
3522 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
3523 IN OUT PSIZE_T ViewSize
,
3524 IN SECTION_INHERIT InheritDisposition
,
3525 IN ULONG AllocationType
,
3532 OUT PHANDLE FileHandle
,
3533 IN ACCESS_MASK DesiredAccess
,
3534 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3535 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3536 IN ULONG ShareAccess
,
3537 IN ULONG OpenOptions
);
3545 OUT PHANDLE FileHandle
,
3546 IN ACCESS_MASK DesiredAccess
,
3547 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3548 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3549 IN ULONG ShareAccess
,
3550 IN ULONG OpenOptions
);
3556 OUT PHANDLE TimerHandle
,
3557 IN ACCESS_MASK DesiredAccess
,
3558 IN POBJECT_ATTRIBUTES ObjectAttributes
);
3564 IN HANDLE FileHandle
,
3565 IN HANDLE Event OPTIONAL
,
3566 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
3567 IN PVOID ApcContext OPTIONAL
,
3568 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3571 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
3572 IN PULONG Key OPTIONAL
);
3578 IN HANDLE EventHandle
,
3579 OUT PLONG PreviousState OPTIONAL
);
3585 IN HANDLE EventHandle
,
3586 OUT PLONG PreviousState OPTIONAL
);
3591 ZwSetInformationThread(
3592 IN HANDLE ThreadHandle
,
3593 IN THREADINFOCLASS ThreadInformationClass
,
3594 IN PVOID ThreadInformation
,
3595 IN ULONG ThreadInformationLength
);
3601 IN HANDLE TimerHandle
,
3602 IN PLARGE_INTEGER DueTime
,
3603 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
3604 IN PVOID TimerContext OPTIONAL
,
3605 IN BOOLEAN WakeTimer
,
3606 IN LONG Period OPTIONAL
,
3607 OUT PBOOLEAN PreviousState OPTIONAL
);
3609 /* [Nt|Zw]MapViewOfSection.InheritDisposition constants */
3610 #define AT_EXTENDABLE_FILE 0x00002000
3611 #define AT_RESERVED 0x20000000
3612 #define AT_ROUND_TO_PAGE 0x40000000
3617 NtUnmapViewOfSection(
3618 IN HANDLE ProcessHandle
,
3619 IN PVOID BaseAddress
);
3624 NtWaitForSingleObject(
3625 IN HANDLE ObjectHandle
,
3626 IN BOOLEAN Alertable
,
3627 IN PLARGE_INTEGER TimeOut OPTIONAL
);
3633 IN HANDLE FileHandle
,
3634 IN HANDLE Event OPTIONAL
,
3635 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
3636 IN PVOID ApcContext OPTIONAL
,
3637 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3640 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
3641 IN PULONG Key OPTIONAL
);
3643 /** Power management support routines **/
3648 PoRequestShutdownEvent(
3651 /** WMI library support routines **/
3656 IN PDEVICE_OBJECT DeviceObject
,
3659 IN ULONG BufferUsed
,
3660 IN CCHAR PriorityBoost
);
3665 IN PDEVICE_OBJECT DeviceObject
,
3667 IN ULONG InstanceIndex
,
3668 IN ULONG EventDataSize
,
3669 IN PVOID EventData
);
3674 IN PWMILIB_CONTEXT WmiLibInfo
,
3675 IN PDEVICE_OBJECT DeviceObject
,
3677 OUT PSYSCTL_IRP_DISPOSITION IrpDisposition
);
3679 /** Kernel debugger routines **/
3686 IN ULONG MaximumResponseLength
3689 /** Stuff from winnt4.h */
3695 IN PUNICODE_STRING RegistryPath
,
3696 IN PUNICODE_STRING DriverClassName OPTIONAL
,
3697 IN PDRIVER_OBJECT DriverObject
,
3698 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
3699 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources
,
3700 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
3705 IoAttachDeviceByPointer(
3706 IN PDEVICE_OBJECT SourceDevice
,
3707 IN PDEVICE_OBJECT TargetDevice
);
3712 MmIsNonPagedSystemAddressValid(
3713 IN PVOID VirtualAddress
);
3715 #if defined(_AMD64_) || defined(_IA64_)
3716 //DECLSPEC_DEPRECATED_DDK_WINXP
3720 RtlLargeIntegerDivide(
3721 IN LARGE_INTEGER Dividend
,
3722 IN LARGE_INTEGER Divisor
,
3723 IN OUT PLARGE_INTEGER Remainder
)
3726 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
3728 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
3735 RtlLargeIntegerDivide(
3736 IN LARGE_INTEGER Dividend
,
3737 IN LARGE_INTEGER Divisor
,
3738 IN OUT PLARGE_INTEGER Remainder
);
3745 ExInterlockedDecrementLong(
3747 IN PKSPIN_LOCK Lock
);
3752 ExInterlockedExchangeUlong(
3755 IN PKSPIN_LOCK Lock
);
3760 ExInterlockedIncrementLong(
3762 IN PKSPIN_LOCK Lock
);
3768 HalAcquireDisplayOwnership(
3769 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
3774 HalAssignSlotResources(
3775 IN PUNICODE_STRING RegistryPath
,
3776 IN PUNICODE_STRING DriverClassName
,
3777 IN PDRIVER_OBJECT DriverObject
,
3778 IN PDEVICE_OBJECT DeviceObject
,
3779 IN INTERFACE_TYPE BusType
,
3781 IN ULONG SlotNumber
,
3782 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
3788 IN PDEVICE_DESCRIPTION DeviceDescription
,
3789 IN OUT PULONG NumberOfMapRegisters
);
3795 IN BUS_DATA_TYPE BusDataType
,
3797 IN ULONG SlotNumber
,
3804 HalGetBusDataByOffset(
3805 IN BUS_DATA_TYPE BusDataType
,
3807 IN ULONG SlotNumber
,
3815 HalGetDmaAlignmentRequirement(
3821 HalGetInterruptVector(
3822 IN INTERFACE_TYPE InterfaceType
,
3824 IN ULONG BusInterruptLevel
,
3825 IN ULONG BusInterruptVector
,
3827 OUT PKAFFINITY Affinity
);
3833 IN BUS_DATA_TYPE BusDataType
,
3835 IN ULONG SlotNumber
,
3842 HalSetBusDataByOffset(
3843 IN BUS_DATA_TYPE BusDataType
,
3845 IN ULONG SlotNumber
,
3853 HalTranslateBusAddress(
3854 IN INTERFACE_TYPE InterfaceType
,
3856 IN PHYSICAL_ADDRESS BusAddress
,
3857 IN OUT PULONG AddressSpace
,
3858 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
3863 RtlLargeIntegerEqualToZero(
3864 IN LARGE_INTEGER Operand
);
3869 RtlLargeIntegerGreaterOrEqualToZero(
3870 IN LARGE_INTEGER Operand
);
3875 RtlLargeIntegerGreaterThan(
3876 IN LARGE_INTEGER Operand1
,
3877 IN LARGE_INTEGER Operand2
);
3882 RtlLargeIntegerGreaterThanOrEqualTo(
3883 IN LARGE_INTEGER Operand1
,
3884 IN LARGE_INTEGER Operand2
);
3889 RtlLargeIntegerGreaterThanZero(
3890 IN LARGE_INTEGER Operand
);
3895 RtlLargeIntegerLessOrEqualToZero(
3896 IN LARGE_INTEGER Operand
);
3901 RtlLargeIntegerLessThan(
3902 IN LARGE_INTEGER Operand1
,
3903 IN LARGE_INTEGER Operand2
);
3908 RtlLargeIntegerLessThanOrEqualTo(
3909 IN LARGE_INTEGER Operand1
,
3910 IN LARGE_INTEGER Operand2
);
3915 RtlLargeIntegerLessThanZero(
3916 IN LARGE_INTEGER Operand
);
3921 RtlLargeIntegerNegate(
3922 IN LARGE_INTEGER Subtrahend
);
3927 RtlLargeIntegerNotEqualTo(
3928 IN LARGE_INTEGER Operand1
,
3929 IN LARGE_INTEGER Operand2
);
3934 RtlLargeIntegerNotEqualToZero(
3935 IN LARGE_INTEGER Operand
);
3940 RtlLargeIntegerShiftLeft(
3941 IN LARGE_INTEGER LargeInteger
,
3942 IN CCHAR ShiftCount
);
3947 RtlLargeIntegerShiftRight(
3948 IN LARGE_INTEGER LargeInteger
,
3949 IN CCHAR ShiftCount
);
3954 RtlLargeIntegerSubtract(
3955 IN LARGE_INTEGER Minuend
,
3956 IN LARGE_INTEGER Subtrahend
);
3961 * COMPUTE_PAGES_SPANNED(
3965 #define COMPUTE_PAGES_SPANNED(Va, \
3967 (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
3971 ** Architecture specific structures
3979 Exfi386InterlockedIncrementLong(
3980 IN OUT PLONG
volatile Addend
);
3985 Exfi386InterlockedDecrementLong(
3991 Exfi386InterlockedExchangeUlong(
3999 // NT-ARM is not documented
4008 #endif /* __WINDDK_H */