4 * Windows Device Driver Kit
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
26 /* Helper macro to enable gcc's extension. */
27 #ifndef __GNU_EXTENSION
29 #define __GNU_EXTENSION __extension__
31 #define __GNU_EXTENSION
45 /* Pseudo modifiers for parameters */
61 #define RESTRICTED_POINTER
63 #define DECLSPEC_ADDRSAFE
65 #ifdef NONAMELESSUNION
66 # define _DDK_DUMMYUNION_MEMBER(name) DUMMYUNIONNAME.name
67 # define _DDK_DUMMYUNION_N_MEMBER(n, name) DUMMYUNIONNAME##n.name
69 # define _DDK_DUMMYUNION_MEMBER(name) name
70 # define _DDK_DUMMYUNION_N_MEMBER(n, name) name
74 ** Forward declarations
80 struct _DRIVE_LAYOUT_INFORMATION_EX
;
81 struct _LOADER_PARAMETER_BLOCK
;
85 /* FIXME: Unknown definitions */
86 struct _SET_PARTITION_INFORMATION_EX
;
87 typedef ULONG WAIT_TYPE
;
90 typedef HANDLE TRACEHANDLE
;
91 typedef PVOID PWMILIB_CONTEXT
;
92 typedef ULONG LOGICAL
;
96 ** WmiLib specific structure
100 IrpProcessed
, // Irp was processed and possibly completed
101 IrpNotCompleted
, // Irp was process and NOT completed
102 IrpNotWmi
, // Irp is not a WMI irp
103 IrpForward
// Irp is wmi irp, but targeted at another device object
104 } SYSCTL_IRP_DISPOSITION
, *PSYSCTL_IRP_DISPOSITION
;
109 struct _COMPRESSED_DATA_INFO
;
111 #define KERNEL_STACK_SIZE 12288
112 #define KERNEL_LARGE_STACK_SIZE 61440
113 #define KERNEL_LARGE_STACK_COMMIT 12288
115 #define EXCEPTION_READ_FAULT 0
116 #define EXCEPTION_WRITE_FAULT 1
117 #define EXCEPTION_EXECUTE_FAULT 8
119 #define DPFLTR_ERROR_LEVEL 0
120 #define DPFLTR_WARNING_LEVEL 1
121 #define DPFLTR_TRACE_LEVEL 2
122 #define DPFLTR_INFO_LEVEL 3
123 #define DPFLTR_MASK 0x80000000
125 typedef enum _DPFLTR_TYPE
127 DPFLTR_SYSTEM_ID
= 0,
132 DPFLTR_CRASHDUMP_ID
= 5,
133 DPFLTR_CDAUDIO_ID
= 6,
135 DPFLTR_CLASSPNP_ID
= 8,
137 DPFLTR_REDBOOK_ID
= 10,
138 DPFLTR_STORPROP_ID
= 11,
139 DPFLTR_SCSIPORT_ID
= 12,
140 DPFLTR_SCSIMINIPORT_ID
= 13,
141 DPFLTR_CONFIG_ID
= 14,
142 DPFLTR_I8042PRT_ID
= 15,
143 DPFLTR_SERMOUSE_ID
= 16,
144 DPFLTR_LSERMOUS_ID
= 17,
145 DPFLTR_KBDHID_ID
= 18,
146 DPFLTR_MOUHID_ID
= 19,
147 DPFLTR_KBDCLASS_ID
= 20,
148 DPFLTR_MOUCLASS_ID
= 21,
149 DPFLTR_TWOTRACK_ID
= 22,
150 DPFLTR_WMILIB_ID
= 23,
153 DPFLTR_HALIA64_ID
= 26,
154 DPFLTR_VIDEO_ID
= 27,
155 DPFLTR_SVCHOST_ID
= 28,
156 DPFLTR_VIDEOPRT_ID
= 29,
157 DPFLTR_TCPIP_ID
= 30,
158 DPFLTR_DMSYNTH_ID
= 31,
159 DPFLTR_NTOSPNP_ID
= 32,
160 DPFLTR_FASTFAT_ID
= 33,
161 DPFLTR_SAMSS_ID
= 34,
162 DPFLTR_PNPMGR_ID
= 35,
163 DPFLTR_NETAPI_ID
= 36,
164 DPFLTR_SCSERVER_ID
= 37,
165 DPFLTR_SCCLIENT_ID
= 38,
166 DPFLTR_SERIAL_ID
= 39,
167 DPFLTR_SERENUM_ID
= 40,
169 DPFLTR_BOOTOK_ID
= 42,
170 DPFLTR_BOOTVRFY_ID
= 43,
171 DPFLTR_RPCPROXY_ID
= 44,
172 DPFLTR_AUTOCHK_ID
= 45,
173 DPFLTR_DCOMSS_ID
= 46,
174 DPFLTR_UNIMODEM_ID
= 47,
176 DPFLTR_FLTMGR_ID
= 49,
177 DPFLTR_WMICORE_ID
= 50,
178 DPFLTR_BURNENG_ID
= 51,
179 DPFLTR_IMAPI_ID
= 52,
181 DPFLTR_FUSION_ID
= 54,
182 DPFLTR_IDLETASK_ID
= 55,
183 DPFLTR_SOFTPCI_ID
= 56,
185 DPFLTR_MCHGR_ID
= 58,
187 DPFLTR_PCIIDE_ID
= 60,
188 DPFLTR_FLOPPY_ID
= 61,
190 DPFLTR_TERMSRV_ID
= 63,
191 DPFLTR_W32TIME_ID
= 64,
192 DPFLTR_PREFETCHER_ID
= 65,
193 DPFLTR_RSFILTER_ID
= 66,
194 DPFLTR_FCPORT_ID
= 67,
197 DPFLTR_DMCONFIG_ID
= 70,
198 DPFLTR_DMADMIN_ID
= 71,
199 DPFLTR_WSOCKTRANSPORT_ID
= 72,
201 DPFLTR_PNPMEM_ID
= 74,
202 DPFLTR_PROCESSOR_ID
= 75,
203 DPFLTR_DMSERVER_ID
= 76,
205 DPFLTR_INFINIBAND_ID
= 78,
206 DPFLTR_IHVDRIVER_ID
= 79,
207 DPFLTR_IHVVIDEO_ID
= 80,
208 DPFLTR_IHVAUDIO_ID
= 81,
209 DPFLTR_IHVNETWORK_ID
= 82,
210 DPFLTR_IHVSTREAMING_ID
= 83,
211 DPFLTR_IHVBUS_ID
= 84,
213 DPFLTR_RTLTHREADPOOL_ID
= 86,
215 DPFLTR_TCPIP6_ID
= 88,
216 DPFLTR_ISAPNP_ID
= 89,
218 DPFLTR_STORPORT_ID
= 91,
219 DPFLTR_STORMINIPORT_ID
= 92,
220 DPFLTR_PRINTSPOOLER_ID
= 93,
222 DPFLTR_VDSBAS_ID
= 95,
223 DPFLTR_VDSDYNDR_ID
= 96,
224 DPFLTR_VDSUTIL_ID
= 97,
225 DPFLTR_DFRGIFC_ID
= 98,
226 DPFLTR_DEFAULT_ID
= 99,
228 DPFLTR_DFSC_ID
= 101,
229 DPFLTR_WOW64_ID
= 102,
233 /* also in winnt.h */
235 #define FILE_COPY_STRUCTURED_STORAGE 0x00000041
236 #define FILE_STRUCTURED_STORAGE 0x00000441
240 #define THREAD_ALERT (0x0004)
242 /* Exported object types */
243 extern POBJECT_TYPE NTSYSAPI ExDesktopObjectType
;
244 extern POBJECT_TYPE NTSYSAPI ExEventObjectType
;
245 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType
;
246 extern POBJECT_TYPE NTSYSAPI ExWindowStationObjectType
;
247 extern ULONG NTSYSAPI IoDeviceHandlerObjectSize
;
248 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType
;
249 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType
;
250 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType
;
251 extern POBJECT_TYPE NTSYSAPI IoFileObjectType
;
252 extern POBJECT_TYPE NTSYSAPI PsThreadType
;
253 extern POBJECT_TYPE NTSYSAPI LpcPortObjectType
;
254 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType
;
255 extern POBJECT_TYPE NTSYSAPI PsProcessType
;
257 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
258 extern volatile CCHAR NTSYSAPI KeNumberProcessors
;
260 #if (NTDDI_VERSION >= NTDDI_WINXP)
261 extern CCHAR NTSYSAPI KeNumberProcessors
;
263 //extern PCCHAR KeNumberProcessors;
264 extern NTSYSAPI CCHAR KeNumberProcessors
; //FIXME: Note to Alex: I won't fix this atm, since I prefer to discuss this with you first.
268 #define MAX_WOW64_SHARED_ENTRIES 16
270 extern volatile KSYSTEM_TIME KeTickCount
;
272 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
273 #define NX_SUPPORT_POLICY_ALWAYSON 1
274 #define NX_SUPPORT_POLICY_OPTIN 2
275 #define NX_SUPPORT_POLICY_OPTOUT 3
277 typedef struct _KUSER_SHARED_DATA
279 ULONG TickCountLowDeprecated
;
280 ULONG TickCountMultiplier
;
281 volatile KSYSTEM_TIME InterruptTime
;
282 volatile KSYSTEM_TIME SystemTime
;
283 volatile KSYSTEM_TIME TimeZoneBias
;
284 USHORT ImageNumberLow
;
285 USHORT ImageNumberHigh
;
286 WCHAR NtSystemRoot
[260];
287 ULONG MaxStackTraceDepth
;
288 ULONG CryptoExponent
;
290 ULONG LargePageMinimum
;
292 NT_PRODUCT_TYPE NtProductType
;
293 BOOLEAN ProductTypeIsValid
;
294 ULONG NtMajorVersion
;
295 ULONG NtMinorVersion
;
296 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
299 volatile ULONG TimeSlip
;
300 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
301 LARGE_INTEGER SystemExpirationDate
;
303 BOOLEAN KdDebuggerEnabled
;
304 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
305 UCHAR NXSupportPolicy
;
307 volatile ULONG ActiveConsoleId
;
308 volatile ULONG DismountCount
;
309 ULONG ComPlusPackage
;
310 ULONG LastSystemRITEventTickCount
;
311 ULONG NumberOfPhysicalPages
;
312 BOOLEAN SafeBootMode
;
315 ULONGLONG TestRetInstruction
;
317 ULONG SystemCallReturn
;
318 ULONGLONG SystemCallPad
[3];
319 __GNU_EXTENSION
union {
320 volatile KSYSTEM_TIME TickCount
;
321 volatile ULONG64 TickCountQuad
;
324 #if (NTDDI_VERSION >= NTDDI_WS03)
325 LONGLONG ConsoleSessionForegroundProcessId
;
326 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
328 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
329 USHORT UserModeGlobalLogger
[8];
330 ULONG HeapTracingPid
[2];
331 ULONG CritSecTracingPid
[2];
332 __GNU_EXTENSION
union
334 ULONG SharedDataFlags
;
335 __GNU_EXTENSION
struct
337 ULONG DbgErrorPortPresent
:1;
338 ULONG DbgElevationEnabled
:1;
339 ULONG DbgVirtEnabled
:1;
340 ULONG DbgInstallerDetectEnabled
:1;
344 ULONG ImageFileExecutionOptions
;
345 KAFFINITY ActiveProcessorAffinity
;
347 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
350 ** IRP function codes
353 #define IRP_MN_QUERY_DIRECTORY 0x01
354 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
356 #define IRP_MN_USER_FS_REQUEST 0x00
357 #define IRP_MN_MOUNT_VOLUME 0x01
358 #define IRP_MN_VERIFY_VOLUME 0x02
359 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
360 #define IRP_MN_TRACK_LINK 0x04
361 #define IRP_MN_KERNEL_CALL 0x04
363 #define IRP_MN_LOCK 0x01
364 #define IRP_MN_UNLOCK_SINGLE 0x02
365 #define IRP_MN_UNLOCK_ALL 0x03
366 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
368 #define IRP_MN_NORMAL 0x00
369 #define IRP_MN_DPC 0x01
370 #define IRP_MN_MDL 0x02
371 #define IRP_MN_COMPLETE 0x04
372 #define IRP_MN_COMPRESSED 0x08
374 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
375 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
376 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
378 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
380 typedef EXCEPTION_DISPOSITION
381 (DDKAPI
*PEXCEPTION_ROUTINE
)(
382 IN
struct _EXCEPTION_RECORD
*ExceptionRecord
,
383 IN PVOID EstablisherFrame
,
384 IN OUT
struct _CONTEXT
*ContextRecord
,
385 IN OUT PVOID DispatcherContext
);
388 (DDKAPI
*PDRIVER_ENTRY
)(
389 IN
struct _DRIVER_OBJECT
*DriverObject
,
390 IN PUNICODE_STRING RegistryPath
);
393 (DDKAPI
*PDRIVER_REINITIALIZE
)(
394 IN
struct _DRIVER_OBJECT
*DriverObject
,
399 (DDKAPI
*PKTRANSFER_ROUTINE
)(
402 #define ASSERT_GATE(object) \
403 ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
404 (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
406 #define TIMER_TABLE_SIZE 512
407 #define TIMER_TABLE_SHIFT 9
409 #define ASSERT_TIMER(E) \
410 ASSERT(((E)->Header.Type == TimerNotificationObject) || \
411 ((E)->Header.Type == TimerSynchronizationObject))
413 #define ASSERT_MUTANT(E) \
414 ASSERT((E)->Header.Type == MutantObject)
416 #define ASSERT_SEMAPHORE(E) \
417 ASSERT((E)->Header.Type == SemaphoreObject)
419 #define ASSERT_EVENT(E) \
420 ASSERT(((E)->Header.Type == NotificationEvent) || \
421 ((E)->Header.Type == SynchronizationEvent))
424 typedef enum _TIMER_TYPE
{
429 #define KEYBOARD_INSERT_ON 0x08
430 #define KEYBOARD_CAPS_LOCK_ON 0x04
431 #define KEYBOARD_NUM_LOCK_ON 0x02
432 #define KEYBOARD_SCROLL_LOCK_ON 0x01
433 #define KEYBOARD_ALT_KEY_DOWN 0x80
434 #define KEYBOARD_CTRL_KEY_DOWN 0x40
435 #define KEYBOARD_LEFT_SHIFT_DOWN 0x20
436 #define KEYBOARD_RIGHT_SHIFT_DOWN 0x10
438 typedef struct _IO_COUNTERS
{
439 ULONGLONG ReadOperationCount
;
440 ULONGLONG WriteOperationCount
;
441 ULONGLONG OtherOperationCount
;
442 ULONGLONG ReadTransferCount
;
443 ULONGLONG WriteTransferCount
;
444 ULONGLONG OtherTransferCount
;
445 } IO_COUNTERS
, *PIO_COUNTERS
;
447 typedef struct _VM_COUNTERS
449 SIZE_T PeakVirtualSize
;
451 ULONG PageFaultCount
;
452 SIZE_T PeakWorkingSetSize
;
453 SIZE_T WorkingSetSize
;
454 SIZE_T QuotaPeakPagedPoolUsage
;
455 SIZE_T QuotaPagedPoolUsage
;
456 SIZE_T QuotaPeakNonPagedPoolUsage
;
457 SIZE_T QuotaNonPagedPoolUsage
;
458 SIZE_T PagefileUsage
;
459 SIZE_T PeakPagefileUsage
;
460 } VM_COUNTERS
, *PVM_COUNTERS
;
462 typedef struct _VM_COUNTERS_EX
464 SIZE_T PeakVirtualSize
;
466 ULONG PageFaultCount
;
467 SIZE_T PeakWorkingSetSize
;
468 SIZE_T WorkingSetSize
;
469 SIZE_T QuotaPeakPagedPoolUsage
;
470 SIZE_T QuotaPagedPoolUsage
;
471 SIZE_T QuotaPeakNonPagedPoolUsage
;
472 SIZE_T QuotaNonPagedPoolUsage
;
473 SIZE_T PagefileUsage
;
474 SIZE_T PeakPagefileUsage
;
476 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
478 typedef struct _POOLED_USAGE_AND_LIMITS
480 SIZE_T PeakPagedPoolUsage
;
481 SIZE_T PagedPoolUsage
;
482 SIZE_T PagedPoolLimit
;
483 SIZE_T PeakNonPagedPoolUsage
;
484 SIZE_T NonPagedPoolUsage
;
485 SIZE_T NonPagedPoolLimit
;
486 SIZE_T PeakPagefileUsage
;
487 SIZE_T PagefileUsage
;
488 SIZE_T PagefileLimit
;
489 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
491 typedef struct _CONTROLLER_OBJECT
{
494 PVOID ControllerExtension
;
495 KDEVICE_QUEUE DeviceWaitQueue
;
497 LARGE_INTEGER Spare2
;
498 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
500 /* DEVICE_OBJECT.Flags */
502 #define DO_DEVICE_HAS_NAME 0x00000040
503 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
504 #define DO_LONG_TERM_REQUESTS 0x00000200
505 #define DO_NEVER_LAST_DEVICE 0x00000400
506 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
507 #define DO_XIP 0x00020000
509 #define DRVO_REINIT_REGISTERED 0x00000008
510 #define DRVO_INITIALIZED 0x00000010
511 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
512 #define DRVO_LEGACY_RESOURCES 0x00000040
514 typedef enum _ARBITER_REQUEST_SOURCE
{
515 ArbiterRequestUndefined
= -1,
516 ArbiterRequestLegacyReported
,
517 ArbiterRequestHalReported
,
518 ArbiterRequestLegacyAssigned
,
519 ArbiterRequestPnpDetected
,
520 ArbiterRequestPnpEnumerated
521 } ARBITER_REQUEST_SOURCE
;
523 typedef enum _ARBITER_RESULT
{
524 ArbiterResultUndefined
= -1,
525 ArbiterResultSuccess
,
526 ArbiterResultExternalConflict
,
527 ArbiterResultNullRequest
530 typedef enum _ARBITER_ACTION
{
531 ArbiterActionTestAllocation
,
532 ArbiterActionRetestAllocation
,
533 ArbiterActionCommitAllocation
,
534 ArbiterActionRollbackAllocation
,
535 ArbiterActionQueryAllocatedResources
,
536 ArbiterActionWriteReservedResources
,
537 ArbiterActionQueryConflict
,
538 ArbiterActionQueryArbitrate
,
539 ArbiterActionAddReserved
,
540 ArbiterActionBootAllocation
541 } ARBITER_ACTION
, *PARBITER_ACTION
;
543 typedef struct _ARBITER_CONFLICT_INFO
{
544 PDEVICE_OBJECT OwningObject
;
547 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
549 typedef struct _ARBITER_PARAMETERS
{
552 IN OUT PLIST_ENTRY ArbitrationList
;
553 IN ULONG AllocateFromCount
;
554 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
558 IN OUT PLIST_ENTRY ArbitrationList
;
559 IN ULONG AllocateFromCount
;
560 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
564 IN OUT PLIST_ENTRY ArbitrationList
;
568 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
569 } QueryAllocatedResources
;
572 IN PDEVICE_OBJECT PhysicalDeviceObject
;
573 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
574 OUT PULONG ConflictCount
;
575 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
579 IN PLIST_ENTRY ArbitrationList
;
583 IN PDEVICE_OBJECT ReserveDevice
;
586 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
588 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
590 typedef struct _ARBITER_LIST_ENTRY
{
591 LIST_ENTRY ListEntry
;
592 ULONG AlternativeCount
;
593 PIO_RESOURCE_DESCRIPTOR Alternatives
;
594 PDEVICE_OBJECT PhysicalDeviceObject
;
595 ARBITER_REQUEST_SOURCE RequestSource
;
598 INTERFACE_TYPE InterfaceType
;
601 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
602 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
603 ARBITER_RESULT Result
;
604 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
607 (DDKAPI
*PARBITER_HANDLER
)(
609 IN ARBITER_ACTION Action
,
610 IN OUT PARBITER_PARAMETERS Parameters
);
612 #define ARBITER_PARTIAL 0x00000001
614 typedef struct _ARBITER_INTERFACE
{
618 PINTERFACE_REFERENCE InterfaceReference
;
619 PINTERFACE_DEREFERENCE InterfaceDereference
;
620 PARBITER_HANDLER ArbiterHandler
;
622 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
624 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
625 HalInstalledBusInformation
,
626 HalProfileSourceInformation
,
627 HalInformationClassUnused1
,
629 HalProcessorSpeedInformation
,
630 HalCallbackInformation
,
631 HalMapRegisterInformation
,
632 HalMcaLogInformation
,
633 HalFrameBufferCachingInformation
,
634 HalDisplayBiosInformation
,
635 HalProcessorFeatureInformation
,
636 HalNumaTopologyInterface
,
638 HalCmcLogInformation
,
639 HalCpeLogInformation
,
640 HalQueryMcaInterface
,
641 HalQueryAMLIIllegalIOPortAddresses
,
642 HalQueryMaxHotPlugMemoryAddress
,
643 HalPartitionIpiInterface
,
644 HalPlatformInformation
,
645 HalQueryProfileSourceList
646 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
648 typedef enum _HAL_SET_INFORMATION_CLASS
{
649 HalProfileSourceInterval
,
650 HalProfileSourceInterruptHandler
,
651 HalMcaRegisterDriver
,
652 HalKernelErrorHandler
,
653 HalCmcRegisterDriver
,
654 HalCpeRegisterDriver
,
658 HalGenerateCmcInterrupt
659 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
661 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
663 KPROFILE_SOURCE Source
;
665 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
667 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
669 KPROFILE_SOURCE Source
;
672 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
674 typedef struct _MAP_REGISTER_ENTRY
677 BOOLEAN WriteToDevice
;
678 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
685 PUCHAR TranslatedAddress
;
687 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
691 PHYSICAL_ADDRESS Start
;
692 PHYSICAL_ADDRESS MaxEnd
;
693 PVOID VirtualAddress
;
697 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
709 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
710 DEBUG_MEMORY_REQUIREMENTS Memory
;
711 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
713 /* Function Type Defintions for Dispatch Functions */
714 struct _DEVICE_CONTROL_CONTEXT
;
717 (DDKAPI
*PDEVICE_CONTROL_COMPLETION
)(
718 IN
struct _DEVICE_CONTROL_CONTEXT
*ControlContext
);
720 typedef struct _DEVICE_CONTROL_CONTEXT
{
722 PDEVICE_HANDLER_OBJECT DeviceHandler
;
723 PDEVICE_OBJECT DeviceObject
;
728 } DEVICE_CONTROL_CONTEXT
, *PDEVICE_CONTROL_CONTEXT
;
730 typedef struct _PM_DISPATCH_TABLE
{
734 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
736 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
737 TranslateChildToParent
,
738 TranslateParentToChild
739 } RESOURCE_TRANSLATION_DIRECTION
;
742 (DDKAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
744 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
745 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
746 IN ULONG AlternativesCount
,
747 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
748 IN PDEVICE_OBJECT PhysicalDeviceObject
,
749 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
752 (DDKAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
754 IN PIO_RESOURCE_DESCRIPTOR Source
,
755 IN PDEVICE_OBJECT PhysicalDeviceObject
,
756 OUT PULONG TargetCount
,
757 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
759 typedef struct _TRANSLATOR_INTERFACE
{
763 PINTERFACE_REFERENCE InterfaceReference
;
764 PINTERFACE_DEREFERENCE InterfaceDereference
;
765 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
766 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
767 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
770 (DDKAPI
*pHalDeviceControl
)(
771 IN PDEVICE_HANDLER_OBJECT DeviceHandler
,
772 IN PDEVICE_OBJECT DeviceObject
,
773 IN ULONG ControlCode
,
774 IN OUT PVOID Buffer OPTIONAL
,
775 IN OUT PULONG BufferLength OPTIONAL
,
777 IN PDEVICE_CONTROL_COMPLETION CompletionRoutine
);
780 (FASTCALL
*pHalExamineMBR
)(
781 IN PDEVICE_OBJECT DeviceObject
,
783 IN ULONG MBRTypeIdentifier
,
787 (FASTCALL
*pHalIoAssignDriveLetters
)(
788 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
789 IN PSTRING NtDeviceName
,
790 OUT PUCHAR NtSystemPath
,
791 OUT PSTRING NtSystemPathString
);
794 (FASTCALL
*pHalIoReadPartitionTable
)(
795 IN PDEVICE_OBJECT DeviceObject
,
797 IN BOOLEAN ReturnRecognizedPartitions
,
798 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
801 (FASTCALL
*pHalIoSetPartitionInformation
)(
802 IN PDEVICE_OBJECT DeviceObject
,
804 IN ULONG PartitionNumber
,
805 IN ULONG PartitionType
);
808 (FASTCALL
*pHalIoWritePartitionTable
)(
809 IN PDEVICE_OBJECT DeviceObject
,
811 IN ULONG SectorsPerTrack
,
812 IN ULONG NumberOfHeads
,
813 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
816 (FASTCALL
*pHalHandlerForBus
)(
817 IN INTERFACE_TYPE InterfaceType
,
821 (FASTCALL
*pHalReferenceBusHandler
)(
822 IN PBUS_HANDLER BusHandler
);
825 (DDKAPI
*pHalQuerySystemInformation
)(
826 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
829 OUT PULONG ReturnedLength
);
832 (DDKAPI
*pHalSetSystemInformation
)(
833 IN HAL_SET_INFORMATION_CLASS InformationClass
,
838 (DDKAPI
*pHalQueryBusSlots
)(
839 IN PBUS_HANDLER BusHandler
,
841 OUT PULONG SlotNumbers
,
842 OUT PULONG ReturnedLength
);
845 (DDKAPI
*pHalInitPnpDriver
)(
849 (DDKAPI
*pHalInitPowerManagement
)(
850 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
851 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
853 typedef struct _DMA_ADAPTER
*
854 (DDKAPI
*pHalGetDmaAdapter
)(
856 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
857 OUT PULONG NumberOfMapRegisters
);
860 (DDKAPI
*pHalGetInterruptTranslator
)(
861 IN INTERFACE_TYPE ParentInterfaceType
,
862 IN ULONG ParentBusNumber
,
863 IN INTERFACE_TYPE BridgeInterfaceType
,
866 OUT PTRANSLATOR_INTERFACE Translator
,
867 OUT PULONG BridgeBusNumber
);
870 (DDKAPI
*pHalStartMirroring
)(
874 (DDKAPI
*pHalEndMirroring
)(
875 IN ULONG PassNumber
);
878 (DDKAPI
*pHalMirrorPhysicalMemory
)(
879 IN PHYSICAL_ADDRESS PhysicalAddress
,
880 IN LARGE_INTEGER NumberOfBytes
);
883 (DDKAPI
*pHalMirrorVerify
)(
884 IN PHYSICAL_ADDRESS PhysicalAddress
,
885 IN LARGE_INTEGER NumberOfBytes
);
888 (DDKAPI
*pHalEndOfBoot
)(
893 (DDKAPI
*pHalTranslateBusAddress
)(
894 IN INTERFACE_TYPE InterfaceType
,
896 IN PHYSICAL_ADDRESS BusAddress
,
897 IN OUT PULONG AddressSpace
,
898 OUT PPHYSICAL_ADDRESS TranslatedAddress
903 (DDKAPI
*pHalAssignSlotResources
)(
904 IN PUNICODE_STRING RegistryPath
,
905 IN PUNICODE_STRING DriverClassName OPTIONAL
,
906 IN PDRIVER_OBJECT DriverObject
,
907 IN PDEVICE_OBJECT DeviceObject
,
908 IN INTERFACE_TYPE BusType
,
911 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
916 (DDKAPI
*pHalHaltSystem
)(
922 (DDKAPI
*pHalResetDisplay
)(
928 (DDKAPI
*pHalVectorToIDTEntry
)(
934 (DDKAPI
*pHalFindBusAddressTranslation
)(
935 IN PHYSICAL_ADDRESS BusAddress
,
936 IN OUT PULONG AddressSpace
,
937 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
938 IN OUT PULONG_PTR Context
,
944 (DDKAPI
*pKdSetupPciDeviceForDebugging
)(
945 IN PVOID LoaderBlock OPTIONAL
,
946 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
951 (DDKAPI
*pKdReleasePciDeviceForDebugging
)(
952 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
957 (DDKAPI
*pKdGetAcpiTablePhase0
)(
958 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
964 (DDKAPI
*pKdCheckPowerButton
)(
970 (DDKAPI
*pHalGetInterruptVector
)(
971 IN INTERFACE_TYPE InterfaceType
,
973 IN ULONG BusInterruptLevel
,
974 IN ULONG BusInterruptVector
,
976 OUT PKAFFINITY Affinity
981 (DDKAPI
*pHalGetVectorInput
)(
983 IN KAFFINITY Affinity
,
985 OUT PKINTERRUPT_POLARITY Polarity
990 (DDKAPI
*pKdMapPhysicalMemory64
)(
991 IN PHYSICAL_ADDRESS PhysicalAddress
,
997 (DDKAPI
*pKdUnmapVirtualAddress
)(
998 IN PVOID VirtualAddress
,
1004 (DDKAPI
*pKdGetPciDataByOffset
)(
1006 IN ULONG SlotNumber
,
1014 (DDKAPI
*pKdSetPciDataByOffset
)(
1016 IN ULONG SlotNumber
,
1023 (DDKAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
1024 ULONG Columns
, ULONG Rows
);
1028 pHalQuerySystemInformation HalQuerySystemInformation
;
1029 pHalSetSystemInformation HalSetSystemInformation
;
1030 pHalQueryBusSlots HalQueryBusSlots
;
1032 pHalExamineMBR HalExamineMBR
;
1033 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
1034 pHalIoReadPartitionTable HalIoReadPartitionTable
;
1035 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
1036 pHalIoWritePartitionTable HalIoWritePartitionTable
;
1037 pHalHandlerForBus HalReferenceHandlerForBus
;
1038 pHalReferenceBusHandler HalReferenceBusHandler
;
1039 pHalReferenceBusHandler HalDereferenceBusHandler
;
1040 pHalInitPnpDriver HalInitPnpDriver
;
1041 pHalInitPowerManagement HalInitPowerManagement
;
1042 pHalGetDmaAdapter HalGetDmaAdapter
;
1043 pHalGetInterruptTranslator HalGetInterruptTranslator
;
1044 pHalStartMirroring HalStartMirroring
;
1045 pHalEndMirroring HalEndMirroring
;
1046 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
1047 pHalEndOfBoot HalEndOfBoot
;
1048 pHalMirrorVerify HalMirrorVerify
;
1049 } HAL_DISPATCH
, *PHAL_DISPATCH
;
1051 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTHAL_)
1052 extern NTSYSAPI PHAL_DISPATCH HalDispatchTable
;
1053 #define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable)
1055 extern __declspec(dllexport
) HAL_DISPATCH HalDispatchTable
;
1056 #define HALDISPATCH (&HalDispatchTable)
1059 #define HAL_DISPATCH_VERSION 3
1060 #define HalDispatchTableVersion HALDISPATCH->Version
1061 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
1062 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
1063 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
1064 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
1065 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
1066 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
1067 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
1068 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
1069 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
1070 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
1071 #define HalStartMirroring HALDISPATCH->HalStartMirroring
1072 #define HalEndMirroring HALDISPATCH->HalEndMirroring
1073 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
1074 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
1075 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
1077 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1078 ULONG AlignmentRequirement
;
1079 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1081 typedef struct _FILE_NAME_INFORMATION
{
1082 ULONG FileNameLength
;
1084 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1087 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1088 ULONG FileAttributes
;
1090 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1092 typedef struct _FILE_DISPOSITION_INFORMATION
{
1094 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1096 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1097 LARGE_INTEGER EndOfFile
;
1098 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1100 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1101 LARGE_INTEGER ValidDataLength
;
1102 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1104 typedef union _FILE_SEGMENT_ELEMENT
{
1106 ULONGLONG Alignment
;
1107 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1109 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
1111 typedef struct _KEY_USER_FLAGS_INFORMATION
{
1113 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
1115 #define PCI_ADDRESS_MEMORY_SPACE 0x00000000
1117 typedef struct _OSVERSIONINFOA
{
1118 ULONG dwOSVersionInfoSize
;
1119 ULONG dwMajorVersion
;
1120 ULONG dwMinorVersion
;
1121 ULONG dwBuildNumber
;
1123 CHAR szCSDVersion
[128];
1124 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
1126 typedef struct _OSVERSIONINFOW
{
1127 ULONG dwOSVersionInfoSize
;
1128 ULONG dwMajorVersion
;
1129 ULONG dwMinorVersion
;
1130 ULONG dwBuildNumber
;
1132 WCHAR szCSDVersion
[128];
1133 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
1136 typedef OSVERSIONINFOW OSVERSIONINFO
;
1137 typedef POSVERSIONINFOW POSVERSIONINFO
;
1138 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
1140 typedef OSVERSIONINFOA OSVERSIONINFO
;
1141 typedef POSVERSIONINFOA POSVERSIONINFO
;
1142 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
1145 typedef struct _OSVERSIONINFOEXA
{
1146 ULONG dwOSVersionInfoSize
;
1147 ULONG dwMajorVersion
;
1148 ULONG dwMinorVersion
;
1149 ULONG dwBuildNumber
;
1151 CHAR szCSDVersion
[128];
1152 USHORT wServicePackMajor
;
1153 USHORT wServicePackMinor
;
1157 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
1159 typedef struct _OSVERSIONINFOEXW
{
1160 ULONG dwOSVersionInfoSize
;
1161 ULONG dwMajorVersion
;
1162 ULONG dwMinorVersion
;
1163 ULONG dwBuildNumber
;
1165 WCHAR szCSDVersion
[128];
1166 USHORT wServicePackMajor
;
1167 USHORT wServicePackMinor
;
1171 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
1174 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
1175 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
1176 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
1178 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
1179 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
1180 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
1186 VerSetConditionMask(
1187 IN ULONGLONG ConditionMask
,
1189 IN UCHAR Condition
);
1191 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
1192 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
1193 (TypeBitMask), (ComparisonType)))
1195 /* RtlVerifyVersionInfo() TypeMask */
1197 #define VER_MINORVERSION 0x0000001
1198 #define VER_MAJORVERSION 0x0000002
1199 #define VER_BUILDNUMBER 0x0000004
1200 #define VER_PLATFORMID 0x0000008
1201 #define VER_SERVICEPACKMINOR 0x0000010
1202 #define VER_SERVICEPACKMAJOR 0x0000020
1203 #define VER_SUITENAME 0x0000040
1204 #define VER_PRODUCT_TYPE 0x0000080
1206 /* RtlVerifyVersionInfo() ComparisonType */
1209 #define VER_GREATER 2
1210 #define VER_GREATER_EQUAL 3
1212 #define VER_LESS_EQUAL 5
1216 #define VER_CONDITION_MASK 7
1217 #define VER_NUM_BITS_PER_CONDITION_MASK 3
1222 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
) (
1224 struct _RTL_RANGE
*Range
1227 typedef struct _CONFIGURATION_INFORMATION
{
1232 ULONG ScsiPortCount
;
1234 ULONG ParallelCount
;
1235 BOOLEAN AtDiskPrimaryAddressClaimed
;
1236 BOOLEAN AtDiskSecondaryAddressClaimed
;
1238 ULONG MediumChangerCount
;
1239 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
1241 typedef enum _CONFIGURATION_TYPE
{
1244 FloatingPointProcessor
,
1254 MultiFunctionAdapter
,
1268 FloppyDiskPeripheral
,
1281 RealModeIrqRoutingTable
,
1282 RealModePCIEnumeration
,
1284 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
1287 (DDKAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
1289 IN PUNICODE_STRING PathName
,
1290 IN INTERFACE_TYPE BusType
,
1292 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
1293 IN CONFIGURATION_TYPE ControllerType
,
1294 IN ULONG ControllerNumber
,
1295 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
1296 IN CONFIGURATION_TYPE PeripheralType
,
1297 IN ULONG PeripheralNumber
,
1298 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
1300 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
1301 IoQueryDeviceIdentifier
= 0,
1302 IoQueryDeviceConfigurationData
,
1303 IoQueryDeviceComponentInformation
,
1304 IoQueryDeviceMaxData
1305 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
1308 (DDKAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
1310 IN HANDLE ProcessId
,
1314 (DDKAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
1315 IN HANDLE ProcessId
,
1319 typedef struct _IMAGE_INFO
{
1320 _ANONYMOUS_UNION
union {
1322 _ANONYMOUS_STRUCT
struct {
1323 ULONG ImageAddressingMode
: 8;
1324 ULONG SystemModeImage
: 1;
1325 ULONG ImageMappedToAllPids
: 1;
1326 ULONG Reserved
: 22;
1330 ULONG ImageSelector
;
1332 ULONG ImageSectionNumber
;
1333 } IMAGE_INFO
, *PIMAGE_INFO
;
1335 #define IMAGE_ADDRESSING_MODE_32BIT 3
1338 (DDKAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
1339 IN PUNICODE_STRING FullImageName
,
1340 IN HANDLE ProcessId
,
1341 IN PIMAGE_INFO ImageInfo
);
1343 #pragma pack(push,4)
1344 typedef enum _BUS_DATA_TYPE
{
1345 ConfigurationSpaceUndefined
= -1,
1353 PCMCIAConfiguration
,
1356 PNPISAConfiguration
,
1357 SgiInternalConfiguration
,
1359 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
1362 typedef struct _NT_TIB
{
1363 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
1367 _ANONYMOUS_UNION
union {
1371 PVOID ArbitraryUserPointer
;
1372 struct _NT_TIB
*Self
;
1375 typedef struct _NT_TIB32
{
1376 ULONG ExceptionList
;
1380 __GNU_EXTENSION
union {
1384 ULONG ArbitraryUserPointer
;
1386 } NT_TIB32
,*PNT_TIB32
;
1388 typedef struct _NT_TIB64
{
1389 ULONG64 ExceptionList
;
1392 ULONG64 SubSystemTib
;
1393 __GNU_EXTENSION
union {
1397 ULONG64 ArbitraryUserPointer
;
1399 } NT_TIB64
,*PNT_TIB64
;
1401 typedef enum _PROCESSINFOCLASS
{
1402 ProcessBasicInformation
,
1407 ProcessBasePriority
,
1408 ProcessRaisePriority
,
1410 ProcessExceptionPort
,
1412 ProcessLdtInformation
,
1414 ProcessDefaultHardErrorMode
,
1415 ProcessIoPortHandlers
,
1416 ProcessPooledUsageAndLimits
,
1417 ProcessWorkingSetWatch
,
1418 ProcessUserModeIOPL
,
1419 ProcessEnableAlignmentFaultFixup
,
1420 ProcessPriorityClass
,
1421 ProcessWx86Information
,
1423 ProcessAffinityMask
,
1424 ProcessPriorityBoost
,
1426 ProcessSessionInformation
,
1427 ProcessForegroundInformation
,
1428 ProcessWow64Information
,
1429 ProcessImageFileName
,
1430 ProcessLUIDDeviceMapsEnabled
,
1431 ProcessBreakOnTermination
,
1432 ProcessDebugObjectHandle
,
1434 ProcessHandleTracing
,
1436 ProcessExecuteFlags
,
1437 ProcessTlsInformation
,
1439 ProcessImageInformation
,
1441 ProcessPagePriority
,
1442 ProcessInstrumentationCallback
,
1446 typedef enum _THREADINFOCLASS
{
1447 ThreadBasicInformation
,
1452 ThreadImpersonationToken
,
1453 ThreadDescriptorTableEntry
,
1454 ThreadEnableAlignmentFaultFixup
,
1455 ThreadEventPair_Reusable
,
1456 ThreadQuerySetWin32StartAddress
,
1458 ThreadPerformanceCount
,
1459 ThreadAmILastThread
,
1460 ThreadIdealProcessor
,
1461 ThreadPriorityBoost
,
1462 ThreadSetTlsArrayAddress
,
1464 ThreadHideFromDebugger
,
1465 ThreadBreakOnTermination
,
1466 ThreadSwitchLegacyState
,
1468 ThreadLastSystemCall
,
1472 ThreadActualBasePriority
,
1476 typedef struct _PROCESS_BASIC_INFORMATION
1478 NTSTATUS ExitStatus
;
1479 struct _PEB
*PebBaseAddress
;
1480 ULONG_PTR AffinityMask
;
1481 KPRIORITY BasePriority
;
1482 ULONG_PTR UniqueProcessId
;
1483 ULONG_PTR InheritedFromUniqueProcessId
;
1484 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
1486 typedef struct _PROCESS_WS_WATCH_INFORMATION
1490 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
1492 typedef struct _PROCESS_DEVICEMAP_INFORMATION
1494 __GNU_EXTENSION
union
1498 HANDLE DirectoryHandle
;
1503 UCHAR DriveType
[32];
1506 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
1508 typedef struct _KERNEL_USER_TIMES
1510 LARGE_INTEGER CreateTime
;
1511 LARGE_INTEGER ExitTime
;
1512 LARGE_INTEGER KernelTime
;
1513 LARGE_INTEGER UserTime
;
1514 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1516 typedef struct _PROCESS_ACCESS_TOKEN
1520 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1522 typedef struct _PROCESS_SESSION_INFORMATION
1525 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1528 ** Storage structures
1530 typedef enum _PARTITION_STYLE
{
1531 PARTITION_STYLE_MBR
,
1532 PARTITION_STYLE_GPT
,
1536 typedef struct _CREATE_DISK_MBR
{
1538 } CREATE_DISK_MBR
, *PCREATE_DISK_MBR
;
1540 typedef struct _CREATE_DISK_GPT
{
1542 ULONG MaxPartitionCount
;
1543 } CREATE_DISK_GPT
, *PCREATE_DISK_GPT
;
1545 typedef struct _CREATE_DISK
{
1546 PARTITION_STYLE PartitionStyle
;
1547 _ANONYMOUS_UNION
union {
1548 CREATE_DISK_MBR Mbr
;
1549 CREATE_DISK_GPT Gpt
;
1551 } CREATE_DISK
, *PCREATE_DISK
;
1553 typedef struct _DISK_SIGNATURE
{
1554 ULONG PartitionStyle
;
1555 _ANONYMOUS_UNION
union {
1564 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
1567 (FASTCALL
*PTIME_UPDATE_NOTIFY_ROUTINE
)(
1569 IN KPROCESSOR_MODE Mode
);
1571 typedef struct _PHYSICAL_MEMORY_RANGE
{
1572 PHYSICAL_ADDRESS BaseAddress
;
1573 LARGE_INTEGER NumberOfBytes
;
1574 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
1577 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
1580 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
1581 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
1582 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
1583 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
1585 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1586 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1587 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1588 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1589 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1592 (DDKAPI
*PTIMER_APC_ROUTINE
)(
1593 IN PVOID TimerContext
,
1594 IN ULONG TimerLowValue
,
1595 IN LONG TimerHighValue
);
1598 ** Architecture specific structures
1600 #define PCR_MINOR_VERSION 1
1601 #define PCR_MAJOR_VERSION 1
1605 #define SIZE_OF_80387_REGISTERS 80
1606 #define CONTEXT_i386 0x10000
1607 #define CONTEXT_i486 0x10000
1608 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
1609 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
1610 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
1611 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
1612 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
1613 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
1614 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
1616 typedef struct _FLOATING_SAVE_AREA
{
1621 ULONG ErrorSelector
;
1624 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
1626 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
1628 typedef struct _CONTEXT
{
1636 FLOATING_SAVE_AREA FloatSave
;
1653 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
1656 typedef struct _KPCR_TIB
{
1657 PVOID ExceptionList
; /* 00 */
1658 PVOID StackBase
; /* 04 */
1659 PVOID StackLimit
; /* 08 */
1660 PVOID SubSystemTib
; /* 0C */
1661 _ANONYMOUS_UNION
union {
1662 PVOID FiberData
; /* 10 */
1663 ULONG Version
; /* 10 */
1665 PVOID ArbitraryUserPointer
; /* 14 */
1666 struct _KPCR_TIB
*Self
; /* 18 */
1667 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
1669 typedef struct _KPCR
{
1670 KPCR_TIB Tib
; /* 00 */
1671 struct _KPCR
*Self
; /* 1C */
1672 struct _KPRCB
*Prcb
; /* 20 */
1673 KIRQL Irql
; /* 24 */
1675 ULONG IrrActive
; /* 2C */
1677 PVOID KdVersionBlock
; /* 34 */
1678 PUSHORT IDT
; /* 38 */
1679 PUSHORT GDT
; /* 3C */
1680 struct _KTSS
*TSS
; /* 40 */
1681 USHORT MajorVersion
; /* 44 */
1682 USHORT MinorVersion
; /* 46 */
1683 KAFFINITY SetMember
; /* 48 */
1684 ULONG StallScaleFactor
; /* 4C */
1685 UCHAR SpareUnused
; /* 50 */
1686 UCHAR Number
; /* 51 */
1688 UCHAR SecondLevelCacheAssociativity
;
1690 ULONG KernelReserved
[14]; // For use by the kernel
1691 ULONG SecondLevelCacheSize
;
1692 ULONG HalReserved
[16]; // For use by Hal
1693 } KPCR
, *PKPCR
; /* 54 */
1695 #define KeGetPcr() PCR
1699 KeGetCurrentProcessorNumber(VOID
)
1701 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
1704 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1705 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1706 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
1708 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1709 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1710 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1711 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1712 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
1714 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
1715 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
1717 #elif defined(__x86_64__)
1719 #define CONTEXT_AMD64 0x100000
1720 #if !defined(RC_INVOKED)
1721 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
1722 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
1723 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
1724 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
1725 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
1727 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1728 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1730 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1731 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1732 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1733 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1736 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
1786 /* Floating point */
1788 XMM_SAVE_AREA32 FltSave
;
1812 M128A VectorRegister
[26];
1813 ULONG64 VectorControl
;
1816 ULONG64 DebugControl
;
1817 ULONG64 LastBranchToRip
;
1818 ULONG64 LastBranchFromRip
;
1819 ULONG64 LastExceptionToRip
;
1820 ULONG64 LastExceptionFromRip
;
1823 #define PAGE_SIZE 0x1000
1824 #define PAGE_SHIFT 12L
1825 #define PTI_SHIFT 12L
1826 #define PDI_SHIFT 21L
1827 #define PPI_SHIFT 30L
1828 #define PXI_SHIFT 39L
1829 #define PTE_PER_PAGE 512
1830 #define PDE_PER_PAGE 512
1831 #define PPE_PER_PAGE 512
1832 #define PXE_PER_PAGE 512
1833 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
1834 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
1835 #define PPI_MASK (PPE_PER_PAGE - 1)
1836 #define PXI_MASK (PXE_PER_PAGE - 1)
1838 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
1839 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
1840 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
1841 #define PDE_BASE 0xFFFFF6FB40000000ULL
1842 #define PTE_BASE 0xFFFFF68000000000ULL
1843 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
1844 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
1845 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
1846 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
1848 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1849 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1850 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
1852 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1853 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1854 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1855 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1856 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
1857 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
1859 #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
1860 #define SharedInterruptTime (&SharedUserData->InterruptTime)
1861 #define SharedSystemTime (&SharedUserData->SystemTime)
1862 #define SharedTickCount (&SharedUserData->TickCount)
1864 #define KeQueryInterruptTime() \
1865 (*(volatile ULONG64*)SharedInterruptTime)
1866 #define KeQuerySystemTime(CurrentCount) \
1867 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
1868 #define KeQueryTickCount(CurrentCount) \
1869 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
1871 typedef struct _KPCR
1873 __GNU_EXTENSION
union
1876 __GNU_EXTENSION
struct
1878 union _KGDTENTRY64
*GdtBase
;
1879 struct _KTSS64
*TssBase
;
1882 struct _KPRCB
*CurrentPrcb
;
1883 PKSPIN_LOCK_QUEUE LockArray
;
1887 union _KIDTENTRY64
*IdtBase
;
1890 UCHAR SecondLevelCacheAssociativity
;
1891 UCHAR ObsoleteNumber
;
1894 USHORT MajorVersion
;
1895 USHORT MinorVersion
;
1896 ULONG StallScaleFactor
;
1898 ULONG KernelReserved
[15];
1899 ULONG SecondLevelCacheSize
;
1900 ULONG HalReserved
[16];
1902 PVOID KdVersionBlock
;
1904 ULONG PcrAlign1
[24];
1907 typedef struct _KFLOATING_SAVE
{
1909 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
1915 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
1920 KeGetCurrentProcessorNumber(VOID
)
1922 return (ULONG
)__readgsword(0x184);
1925 #elif defined(__PowerPC__)
1928 // Used to contain PFNs and PFN counts
1930 typedef ULONG PFN_COUNT
;
1931 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
1932 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
1934 #define PASSIVE_LEVEL 0
1937 #define DISPATCH_LEVEL 2
1938 #define PROFILE_LEVEL 27
1939 #define CLOCK1_LEVEL 28
1940 #define CLOCK2_LEVEL 28
1941 #define IPI_LEVEL 29
1942 #define POWER_LEVEL 30
1943 #define HIGH_LEVEL 31
1945 typedef struct _KFLOATING_SAVE
{
1947 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
1949 typedef struct _KPCR_TIB
{
1950 PVOID ExceptionList
; /* 00 */
1951 PVOID StackBase
; /* 04 */
1952 PVOID StackLimit
; /* 08 */
1953 PVOID SubSystemTib
; /* 0C */
1954 _ANONYMOUS_UNION
union {
1955 PVOID FiberData
; /* 10 */
1956 ULONG Version
; /* 10 */
1958 PVOID ArbitraryUserPointer
; /* 14 */
1959 struct _KPCR_TIB
*Self
; /* 18 */
1960 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
1962 #define PCR_MINOR_VERSION 1
1963 #define PCR_MAJOR_VERSION 1
1965 typedef struct _KPCR
{
1966 KPCR_TIB Tib
; /* 00 */
1967 struct _KPCR
*Self
; /* 1C */
1968 struct _KPRCB
*Prcb
; /* 20 */
1969 KIRQL Irql
; /* 24 */
1971 ULONG IrrActive
; /* 2C */
1973 PVOID KdVersionBlock
; /* 34 */
1974 PUSHORT IDT
; /* 38 */
1975 PUSHORT GDT
; /* 3C */
1976 struct _KTSS
*TSS
; /* 40 */
1977 USHORT MajorVersion
; /* 44 */
1978 USHORT MinorVersion
; /* 46 */
1979 KAFFINITY SetMember
; /* 48 */
1980 ULONG StallScaleFactor
; /* 4C */
1981 UCHAR SpareUnused
; /* 50 */
1982 UCHAR Number
; /* 51 */
1983 } KPCR
, *PKPCR
; /* 54 */
1985 #define KeGetPcr() PCR
1990 KeGetCurrentProcessorNumber(VOID
)
1993 __asm__
__volatile__ (
1996 : "i" (FIELD_OFFSET(KPCR
, Number
))
2001 #elif defined(_MIPS_)
2003 #error MIPS Headers are totally incorrect
2006 // Used to contain PFNs and PFN counts
2008 typedef ULONG PFN_COUNT
;
2009 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
2010 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
2012 #define PASSIVE_LEVEL 0
2014 #define DISPATCH_LEVEL 2
2015 #define PROFILE_LEVEL 27
2016 #define IPI_LEVEL 29
2017 #define HIGH_LEVEL 31
2019 typedef struct _KPCR
{
2020 struct _KPRCB
*Prcb
; /* 20 */
2021 KIRQL Irql
; /* 24 */
2026 #define KeGetPcr() PCR
2028 typedef struct _KFLOATING_SAVE
{
2029 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
2034 KeGetCurrentProcessorNumber(VOID
)
2039 #elif defined(_M_ARM)
2042 // NT-ARM is not documented, need DDK-ARM
2047 #error Unknown architecture
2050 typedef enum _INTERLOCKED_RESULT
{
2051 ResultNegative
= RESULT_NEGATIVE
,
2052 ResultZero
= RESULT_ZERO
,
2053 ResultPositive
= RESULT_POSITIVE
2054 } INTERLOCKED_RESULT
;
2057 (NTAPI
*PciPin2Line
)(
2058 IN
struct _BUS_HANDLER
*BusHandler
,
2059 IN
struct _BUS_HANDLER
*RootHandler
,
2060 IN PCI_SLOT_NUMBER SlotNumber
,
2061 IN PPCI_COMMON_CONFIG PciData
2065 (NTAPI
*PciLine2Pin
)(
2066 IN
struct _BUS_HANDLER
*BusHandler
,
2067 IN
struct _BUS_HANDLER
*RootHandler
,
2068 IN PCI_SLOT_NUMBER SlotNumber
,
2069 IN PPCI_COMMON_CONFIG PciNewData
,
2070 IN PPCI_COMMON_CONFIG PciOldData
2074 (NTAPI
*PciReadWriteConfig
)(
2075 IN
struct _BUS_HANDLER
*BusHandler
,
2076 IN PCI_SLOT_NUMBER Slot
,
2082 #define PCI_DATA_TAG ' ICP'
2083 #define PCI_DATA_VERSION 1
2085 typedef struct _PCIBUSDATA
2089 PciReadWriteConfig ReadConfig
;
2090 PciReadWriteConfig WriteConfig
;
2091 PciPin2Line Pin2Line
;
2092 PciLine2Pin Line2Pin
;
2093 PCI_SLOT_NUMBER ParentSlot
;
2095 } PCIBUSDATA
, *PPCIBUSDATA
;
2098 /** SPINLOCK FUNCTIONS ********************************************************/
2102 #if defined(WIN9X_COMPAT_SPINLOCK)
2107 KeInitializeSpinLock(
2108 IN PKSPIN_LOCK SpinLock
2115 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
2117 /* Clear the lock */
2127 IN PKSPIN_LOCK SpinLock
);
2133 IN PKSPIN_LOCK SpinLock
,
2139 KefAcquireSpinLockAtDpcLevel(
2140 IN PKSPIN_LOCK SpinLock
);
2145 KefReleaseSpinLockFromDpcLevel(
2146 IN PKSPIN_LOCK SpinLock
);
2148 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
2149 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
2150 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
2151 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
2153 #define KeGetDcacheFillSize() 1L
2155 #elif defined(_M_ARM) // !defined (_X86_)
2159 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
2161 /* Clear the lock */
2169 IN PKSPIN_LOCK SpinLock
);
2175 IN PKSPIN_LOCK SpinLock
,
2182 KefAcquireSpinLockAtDpcLevel(
2183 IN PKSPIN_LOCK SpinLock
);
2188 KefReleaseSpinLockFromDpcLevel(
2189 IN PKSPIN_LOCK SpinLock
);
2192 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
2193 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
2194 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
2195 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
2200 KeInitializeSpinLock(
2201 IN PKSPIN_LOCK SpinLock
);
2208 KeInitializeSpinLock(
2209 PKSPIN_LOCK SpinLock
)
2217 IN PKSPIN_LOCK SpinLock
,
2222 KeAcquireSpinLockAtDpcLevel(
2223 IN PKSPIN_LOCK SpinLock
);
2227 KeReleaseSpinLockFromDpcLevel(
2228 IN PKSPIN_LOCK SpinLock
);
2232 KeAcquireSpinLockRaiseToDpc(
2233 IN PKSPIN_LOCK SpinLock
);
2235 #define KeAcquireSpinLock(SpinLock, OldIrql) \
2236 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
2238 #endif // !defined (_X86_)
2240 #define ARGUMENT_PRESENT(ArgumentPointer) \
2241 ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL)
2248 IN ULONG Base OPTIONAL
,
2249 IN OUT PULONG Value
);
2257 BOOLEAN CaseInSensitive
);
2259 #if !defined(MIDL_PASS)
2264 RtlConvertLongToLuid(
2270 Temp
.QuadPart
= Val
;
2271 Luid
.LowPart
= Temp
.u
.LowPart
;
2272 Luid
.HighPart
= Temp
.u
.HighPart
;
2280 RtlConvertUlongToLuid(
2297 IN VOID UNALIGNED
*Destination
,
2298 IN CONST VOID UNALIGNED
*Source
,
2305 IN OUT PSTRING DestinationString
,
2306 IN PSTRING SourceString OPTIONAL
);
2314 IN BOOLEAN CaseInSensitive
);
2316 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
2317 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
2318 *CallersAddress = (PVOID)_ReturnAddress(); \
2319 *CallersCaller = NULL;
2324 RtlGetCallersAddress(
2325 OUT PVOID
*CallersAddress
,
2326 OUT PVOID
*CallersCaller
);
2333 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
2339 IN OUT PACCESS_MASK AccessMask
,
2340 IN PGENERIC_MAPPING GenericMapping
);
2345 RtlPrefixUnicodeString(
2346 IN PCUNICODE_STRING String1
,
2347 IN PCUNICODE_STRING String2
,
2348 IN BOOLEAN CaseInSensitive
);
2353 RtlUpcaseUnicodeString(
2354 IN OUT PUNICODE_STRING DestinationString OPTIONAL
,
2355 IN PCUNICODE_STRING SourceString
,
2356 IN BOOLEAN AllocateDestinationString
);
2368 IN OUT PSTRING DestinationString
,
2369 IN PSTRING SourceString
);
2374 RtlVerifyVersionInfo(
2375 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
2377 IN ULONGLONG ConditionMask
);
2382 RtlVolumeDeviceToDosName(
2383 IN PVOID VolumeDeviceObject
,
2384 OUT PUNICODE_STRING DosName
);
2394 /******************************************************************************
2396 ******************************************************************************/
2398 typedef struct _ZONE_SEGMENT_HEADER
{
2399 SINGLE_LIST_ENTRY SegmentList
;
2401 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
2403 typedef struct _ZONE_HEADER
{
2404 SINGLE_LIST_ENTRY FreeList
;
2405 SINGLE_LIST_ENTRY SegmentList
;
2407 ULONG TotalSegmentSize
;
2408 } ZONE_HEADER
, *PZONE_HEADER
;
2410 #define PROTECTED_POOL 0x80000000
2412 /******************************************************************************
2413 * Executive Functions *
2414 ******************************************************************************/
2420 IN PZONE_HEADER Zone
,
2422 IN ULONG SegmentSize
);
2424 static __inline PVOID
2426 IN PZONE_HEADER Zone
)
2428 if (Zone
->FreeList
.Next
)
2429 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
2430 return (PVOID
) Zone
->FreeList
.Next
;
2433 static __inline PVOID
2435 IN PZONE_HEADER Zone
,
2438 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
2439 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
2440 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
2447 IN PZONE_HEADER Zone
,
2449 IN PVOID InitialSegment
,
2450 IN ULONG InitialSegmentSize
);
2454 * ExInterlockedAllocateFromZone(
2455 * IN PZONE_HEADER Zone,
2456 * IN PKSPIN_LOCK Lock)
2458 #define ExInterlockedAllocateFromZone(Zone, Lock) \
2459 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
2464 ExInterlockedExtendZone(
2465 IN PZONE_HEADER Zone
,
2467 IN ULONG SegmentSize
,
2468 IN PKSPIN_LOCK Lock
);
2471 * ExInterlockedFreeToZone(
2472 * IN PZONE_HEADER Zone,
2474 * IN PKSPIN_LOCK Lock);
2476 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
2477 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
2482 * IN PZONE_HEADER Zone)
2484 #define ExIsFullZone(Zone) \
2485 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
2488 * ExIsObjectInFirstZoneSegment(
2489 * IN PZONE_HEADER Zone,
2492 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
2493 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
2494 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
2495 (Zone)->TotalSegmentSize)) )
2501 ExRaiseAccessViolation(
2508 ExRaiseDatatypeMisalignment(
2517 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
2518 #define ExAcquireResourceShared ExAcquireResourceSharedLite
2519 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
2520 #define ExDeleteResource ExDeleteResourceLite
2521 #define ExInitializeResource ExInitializeResourceLite
2522 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
2523 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
2524 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
2525 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
2527 /** Filesystem runtime library routines **/
2532 FsRtlIsTotalDeviceFailure(
2533 IN NTSTATUS Status
);
2535 /** Hardware abstraction layer routines **/
2541 IN ULONG Frequency
);
2547 IN PDEVICE_OBJECT DeviceObject
,
2548 IN ULONG SectorSize
,
2549 IN ULONG MBRTypeIdentifier
,
2555 PADAPTER_OBJECT AdapterObject
2558 /** I/O manager routines **/
2563 IoAllocateController(
2564 IN PCONTROLLER_OBJECT ControllerObject
,
2565 IN PDEVICE_OBJECT DeviceObject
,
2566 IN PDRIVER_CONTROL ExecutionRoutine
,
2570 * VOID IoAssignArcName(
2571 * IN PUNICODE_STRING ArcName,
2572 * IN PUNICODE_STRING DeviceName);
2574 #define IoAssignArcName(_ArcName, _DeviceName) ( \
2575 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
2581 IN PDEVICE_OBJECT DeviceObject
,
2582 IN PFILE_OBJECT FileObject
);
2594 IN PDEVICE_OBJECT DeviceObject
,
2595 IN PCREATE_DISK Disk
);
2601 IN PCONTROLLER_OBJECT ControllerObject
);
2605 * IoDeassignArcName(
2606 * IN PUNICODE_STRING ArcName)
2608 #define IoDeassignArcName IoDeleteSymbolicLink
2614 IN PCONTROLLER_OBJECT ControllerObject
);
2617 PCONFIGURATION_INFORMATION
2619 IoGetConfigurationInformation(
2625 IoGetDeviceToVerify(
2626 IN PETHREAD Thread
);
2631 IoGetFileObjectGenericMapping(
2637 IoMakeAssociatedIrp(
2639 IN CCHAR StackSize
);
2644 IoQueryDeviceDescription(
2645 IN PINTERFACE_TYPE BusType OPTIONAL
,
2646 IN PULONG BusNumber OPTIONAL
,
2647 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
2648 IN PULONG ControllerNumber OPTIONAL
,
2649 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
2650 IN PULONG PeripheralNumber OPTIONAL
,
2651 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
2659 IN PVPB Vpb OPTIONAL
,
2660 IN PDEVICE_OBJECT RealDeviceObject
);
2665 IoRaiseInformationalHardError(
2666 IN NTSTATUS ErrorStatus
,
2667 IN PUNICODE_STRING String OPTIONAL
,
2668 IN PKTHREAD Thread OPTIONAL
);
2673 IoReadDiskSignature(
2674 IN PDEVICE_OBJECT DeviceObject
,
2675 IN ULONG BytesPerSector
,
2676 OUT PDISK_SIGNATURE Signature
);
2681 IoReadPartitionTable(
2682 IN PDEVICE_OBJECT DeviceObject
,
2683 IN ULONG SectorSize
,
2684 IN BOOLEAN ReturnRecognizedPartitions
,
2685 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2690 IoReadPartitionTableEx(
2691 IN PDEVICE_OBJECT DeviceObject
,
2692 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
2697 IoRegisterBootDriverReinitialization(
2698 IN PDRIVER_OBJECT DriverObject
,
2699 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2705 IoRegisterBootDriverReinitialization(
2706 IN PDRIVER_OBJECT DriverObject
,
2707 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2713 IoRegisterDriverReinitialization(
2714 IN PDRIVER_OBJECT DriverObject
,
2715 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2721 IoReportDetectedDevice(
2722 IN PDRIVER_OBJECT DriverObject
,
2723 IN INTERFACE_TYPE LegacyBusType
,
2725 IN ULONG SlotNumber
,
2726 IN PCM_RESOURCE_LIST ResourceList
,
2727 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
2728 IN BOOLEAN ResourceAssigned
,
2729 IN OUT PDEVICE_OBJECT
*DeviceObject
);
2734 IoReportResourceForDetection(
2735 IN PDRIVER_OBJECT DriverObject
,
2736 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2737 IN ULONG DriverListSize OPTIONAL
,
2738 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2739 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2740 IN ULONG DeviceListSize OPTIONAL
,
2741 OUT PBOOLEAN ConflictDetected
);
2746 IoReportResourceUsage(
2747 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2748 IN PDRIVER_OBJECT DriverObject
,
2749 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2750 IN ULONG DriverListSize OPTIONAL
,
2751 IN PDEVICE_OBJECT DeviceObject
,
2752 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2753 IN ULONG DeviceListSize OPTIONAL
,
2754 IN BOOLEAN OverrideConflict
,
2755 OUT PBOOLEAN ConflictDetected
);
2760 IoSetHardErrorOrVerifyDevice(
2762 IN PDEVICE_OBJECT DeviceObject
);
2767 IoSetPartitionInformation(
2768 IN PDEVICE_OBJECT DeviceObject
,
2769 IN ULONG SectorSize
,
2770 IN ULONG PartitionNumber
,
2771 IN ULONG PartitionType
);
2776 IoSetPartitionInformationEx(
2777 IN PDEVICE_OBJECT DeviceObject
,
2778 IN ULONG PartitionNumber
,
2779 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
2784 IoSetSystemPartition(
2785 IN PUNICODE_STRING VolumeNameString
);
2790 IoSetThreadHardErrorMode(
2791 IN BOOLEAN EnableHardErrors
);
2800 IN PDEVICE_OBJECT DeviceObject
);
2806 IN PDEVICE_OBJECT DeviceObject
);
2811 IoUnregisterPlugPlayNotification(
2812 IN PVOID NotificationEntry
);
2817 IoUnregisterShutdownNotification(
2818 IN PDEVICE_OBJECT DeviceObject
);
2823 IoUpdateShareAccess(
2824 IN PFILE_OBJECT FileObject
,
2825 IN OUT PSHARE_ACCESS ShareAccess
);
2830 IoVerifyPartitionTable(
2831 IN PDEVICE_OBJECT DeviceObject
,
2832 IN BOOLEAN FixErrors
);
2837 IoVolumeDeviceToDosName(
2838 IN PVOID VolumeDeviceObject
,
2839 OUT PUNICODE_STRING DosName
);
2844 IoWMIAllocateInstanceIds(
2846 IN ULONG InstanceCount
,
2847 OUT ULONG
*FirstInstanceId
);
2852 IoWMIDeviceObjectToProviderId(
2853 IN PDEVICE_OBJECT DeviceObject
);
2858 IoWMIDeviceObjectToInstanceName(
2859 IN PVOID DataBlockObject
,
2860 IN PDEVICE_OBJECT DeviceObject
,
2861 OUT PUNICODE_STRING InstanceName
);
2867 IN PVOID DataBlockObject
,
2868 IN PUNICODE_STRING InstanceName
,
2870 IN ULONG InBufferSize
,
2871 IN OUT PULONG OutBufferSize
,
2872 IN OUT PUCHAR InOutBuffer
);
2877 IoWMIHandleToInstanceName(
2878 IN PVOID DataBlockObject
,
2879 IN HANDLE FileHandle
,
2880 OUT PUNICODE_STRING InstanceName
);
2886 IN GUID
*DataBlockGuid
,
2887 IN ULONG DesiredAccess
,
2888 OUT PVOID
*DataBlockObject
);
2894 IN PVOID DataBlockObject
,
2895 IN OUT ULONG
*InOutBufferSize
,
2896 OUT PVOID OutBuffer
);
2901 IoWMIQueryAllDataMultiple(
2902 IN PVOID
*DataBlockObjectList
,
2903 IN ULONG ObjectCount
,
2904 IN OUT ULONG
*InOutBufferSize
,
2905 OUT PVOID OutBuffer
);
2910 IoWMIQuerySingleInstance(
2911 IN PVOID DataBlockObject
,
2912 IN PUNICODE_STRING InstanceName
,
2913 IN OUT ULONG
*InOutBufferSize
,
2914 OUT PVOID OutBuffer
);
2919 IoWMIQuerySingleInstanceMultiple(
2920 IN PVOID
*DataBlockObjectList
,
2921 IN PUNICODE_STRING InstanceNames
,
2922 IN ULONG ObjectCount
,
2923 IN OUT ULONG
*InOutBufferSize
,
2924 OUT PVOID OutBuffer
);
2929 IoWMIRegistrationControl(
2930 IN PDEVICE_OBJECT DeviceObject
,
2936 IoWMISetNotificationCallback(
2938 IN WMI_NOTIFICATION_CALLBACK Callback
,
2944 IoWMISetSingleInstance(
2945 IN PVOID DataBlockObject
,
2946 IN PUNICODE_STRING InstanceName
,
2948 IN ULONG ValueBufferSize
,
2949 IN PVOID ValueBuffer
);
2955 IN PVOID DataBlockObject
,
2956 IN PUNICODE_STRING InstanceName
,
2957 IN ULONG DataItemId
,
2959 IN ULONG ValueBufferSize
,
2960 IN PVOID ValueBuffer
);
2965 IoWMISuggestInstanceName(
2966 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
2967 IN PUNICODE_STRING SymbolicLinkName OPTIONAL
,
2968 IN BOOLEAN CombineNames
,
2969 OUT PUNICODE_STRING SuggestedInstanceName
);
2975 IN PVOID WnodeEventItem
);
2980 IoWriteErrorLogEntry(
2986 IoWritePartitionTable(
2987 IN PDEVICE_OBJECT DeviceObject
,
2988 IN ULONG SectorSize
,
2989 IN ULONG SectorsPerTrack
,
2990 IN ULONG NumberOfHeads
,
2991 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2996 IoWritePartitionTableEx(
2997 IN PDEVICE_OBJECT DeviceObject
,
2998 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*PartitionBuffer
);
3002 /** Kernel routines **/
3004 #if defined (_M_AMD64)
3008 KeAcquireInStackQueuedSpinLock(
3009 IN PKSPIN_LOCK SpinLock
,
3010 IN PKLOCK_QUEUE_HANDLE LockHandle
);
3015 KeReleaseInStackQueuedSpinLock(
3016 IN PKLOCK_QUEUE_HANDLE LockHandle
);
3021 KeAcquireInStackQueuedSpinLock(
3022 IN PKSPIN_LOCK SpinLock
,
3023 IN PKLOCK_QUEUE_HANDLE LockHandle
);
3028 KeReleaseInStackQueuedSpinLock(
3029 IN PKLOCK_QUEUE_HANDLE LockHandle
);
3035 KeAcquireInStackQueuedSpinLockAtDpcLevel(
3036 IN PKSPIN_LOCK SpinLock
,
3037 IN PKLOCK_QUEUE_HANDLE LockHandle
);
3042 KeAcquireInterruptSpinLock(
3043 IN PKINTERRUPT Interrupt
);
3056 IN ULONG BugCheckCode
);
3063 IN ULONG BugCheckCode
,
3064 IN ULONG_PTR BugCheckParameter1
,
3065 IN ULONG_PTR BugCheckParameter2
,
3066 IN ULONG_PTR BugCheckParameter3
,
3067 IN ULONG_PTR BugCheckParameter4
);
3084 KeDelayExecutionThread(
3085 IN KPROCESSOR_MODE WaitMode
,
3086 IN BOOLEAN Alertable
,
3087 IN PLARGE_INTEGER Interval
);
3092 KeDeregisterBugCheckCallback(
3093 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
3098 KeEnterCriticalRegion(
3105 * IN BOOLEAN ReadOperation,
3106 * IN BOOLEAN DmaOperation)
3108 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
3110 #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
3111 #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
3112 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
3113 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
3125 KeFlushWriteBuffer(VOID
);
3130 KeGetRecommendedSharedDataAlignment(
3136 KeInitializeDeviceQueue(
3137 IN PKDEVICE_QUEUE DeviceQueue
);
3149 KeInitializeSemaphore(
3150 IN PRKSEMAPHORE Semaphore
,
3163 KeInitializeTimerEx(
3165 IN TIMER_TYPE Type
);
3170 KeInsertByKeyDeviceQueue(
3171 IN PKDEVICE_QUEUE DeviceQueue
,
3172 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
3178 KeInsertDeviceQueue(
3179 IN PKDEVICE_QUEUE DeviceQueue
,
3180 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
3187 IN PVOID SystemArgument1
,
3188 IN PVOID SystemArgument2
);
3193 KeLeaveCriticalRegion(
3203 volatile LONG Barrier
;
3204 #if defined(__GNUC__)
3205 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
3206 #elif defined(_MSC_VER)
3207 __asm xchg
[Barrier
], eax
3218 IN KPRIORITY Increment
,
3224 KeQueryActiveProcessors(
3231 KeQueryPerformanceCounter(
3232 OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL
);
3237 KeQueryPriorityThread(
3238 IN PRKTHREAD Thread
);
3243 KeQueryRuntimeThread(
3245 OUT PULONG UserTime
);
3247 #if !defined(_M_AMD64)
3251 KeQueryInterruptTime(
3258 OUT PLARGE_INTEGER CurrentTime
);
3264 OUT PLARGE_INTEGER TickCount
);
3270 KeQueryTimeIncrement(
3289 KeReadStateSemaphore(
3290 IN PRKSEMAPHORE Semaphore
);
3301 KeRegisterBugCheckCallback(
3302 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
3303 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
3306 IN PUCHAR Component
);
3311 KeRegisterNmiCallback(
3312 IN PNMI_CALLBACK CallbackRoutine
,
3319 KeDeregisterNmiCallback(
3326 KeReleaseInStackQueuedSpinLockFromDpcLevel(
3327 IN PKLOCK_QUEUE_HANDLE LockHandle
);
3332 KeReleaseInterruptSpinLock(
3333 IN PKINTERRUPT Interrupt
,
3347 IN PRKSEMAPHORE Semaphore
,
3348 IN KPRIORITY Increment
,
3353 PKDEVICE_QUEUE_ENTRY
3355 KeRemoveByKeyDeviceQueue(
3356 IN PKDEVICE_QUEUE DeviceQueue
,
3360 PKDEVICE_QUEUE_ENTRY
3362 KeRemoveDeviceQueue(
3363 IN PKDEVICE_QUEUE DeviceQueue
);
3368 KeRemoveEntryDeviceQueue(
3369 IN PKDEVICE_QUEUE DeviceQueue
,
3370 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
3387 KeRestoreFloatingPointState(
3388 IN PKFLOATING_SAVE FloatSave
);
3393 KeRevertToUserAffinityThread(VOID
);
3398 KeSaveFloatingPointState(
3399 OUT PKFLOATING_SAVE FloatSave
);
3404 KeSetBasePriorityThread(
3405 IN PRKTHREAD Thread
,
3413 IN KPRIORITY Increment
,
3421 IN KDPC_IMPORTANCE Importance
);
3426 KeSetPriorityThread(
3428 IN KPRIORITY Priority
);
3433 KeSetSystemAffinityThread(
3434 IN KAFFINITY Affinity
);
3439 KeSetTargetProcessorDpc(
3448 IN LARGE_INTEGER DueTime
,
3449 IN PKDPC Dpc OPTIONAL
);
3456 IN LARGE_INTEGER DueTime
,
3457 IN LONG Period OPTIONAL
,
3458 IN PKDPC Dpc OPTIONAL
);
3463 KeSetTimeUpdateNotifyRoutine(
3464 IN PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine
);
3469 KeStallExecutionProcessor(
3470 IN ULONG MicroSeconds
);
3475 KeSynchronizeExecution(
3476 IN PKINTERRUPT Interrupt
,
3477 IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
3478 IN PVOID SynchronizeContext
);
3483 KeWaitForMultipleObjects(
3486 IN WAIT_TYPE WaitType
,
3487 IN KWAIT_REASON WaitReason
,
3488 IN KPROCESSOR_MODE WaitMode
,
3489 IN BOOLEAN Alertable
,
3490 IN PLARGE_INTEGER Timeout OPTIONAL
,
3491 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL
);
3496 KeWaitForMutexObject(
3498 IN KWAIT_REASON WaitReason
,
3499 IN KPROCESSOR_MODE WaitMode
,
3500 IN BOOLEAN Alertable
,
3501 IN PLARGE_INTEGER Timeout OPTIONAL
);
3506 KeWaitForSingleObject(
3508 IN KWAIT_REASON WaitReason
,
3509 IN KPROCESSOR_MODE WaitMode
,
3510 IN BOOLEAN Alertable
,
3511 IN PLARGE_INTEGER Timeout OPTIONAL
);
3515 (NTAPI
*PKIPI_BROADCAST_WORKER
)(
3516 IN ULONG_PTR Argument
3523 IN PKIPI_BROADCAST_WORKER BroadcastFunction
,
3524 IN ULONG_PTR Context
3544 KeRaiseIrqlToDpcLevel(
3550 KeRaiseIrqlToSynchLevel(
3553 #define KeLowerIrql(a) KfLowerIrql(a)
3554 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
3556 #elif defined(_M_AMD64)
3560 KeGetCurrentIrql(VOID
)
3562 return (KIRQL
)__readcr8();
3567 KeLowerIrql(IN KIRQL NewIrql
)
3569 ASSERT(KeGetCurrentIrql() >= NewIrql
);
3570 __writecr8(NewIrql
);
3575 KfRaiseIrql(IN KIRQL NewIrql
)
3579 OldIrql
= __readcr8();
3580 ASSERT(OldIrql
<= NewIrql
);
3581 __writecr8(NewIrql
);
3584 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
3588 KeRaiseIrqlToDpcLevel(VOID
)
3590 return KfRaiseIrql(DISPATCH_LEVEL
);
3595 KeRaiseIrqlToSynchLevel(VOID
)
3597 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
3600 #elif defined(__PowerPC__)
3617 KeRaiseIrqlToDpcLevel(
3623 KeRaiseIrqlToSynchLevel(
3626 #define KeLowerIrql(a) KfLowerIrql(a)
3627 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
3629 #elif defined(_M_MIPS)
3631 #define KeLowerIrql(a) KfLowerIrql(a)
3632 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
3649 KeRaiseIrqlToDpcLevel(
3655 KeRaiseIrqlToSynchLevel(
3658 #elif defined(_M_ARM)
3675 OUT PKIRQL OldIrql
);
3680 KeRaiseIrqlToDpcLevel(
3686 KeRaiseIrqlToSynchLevel(
3691 /** Memory manager routines **/
3698 IN ULONG NumberOfBytes
);
3703 MmAllocateContiguousMemory(
3704 IN ULONG NumberOfBytes
,
3705 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
3710 MmAllocateContiguousMemorySpecifyCache(
3711 IN SIZE_T NumberOfBytes
,
3712 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
3713 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
3714 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
3715 IN MEMORY_CACHING_TYPE CacheType
);
3720 MmAllocateMappingAddress(
3721 IN SIZE_T NumberOfBytes
,
3727 MmAllocateNonCachedMemory(
3728 IN ULONG NumberOfBytes
);
3733 MmAllocatePagesForMdl(
3734 IN PHYSICAL_ADDRESS LowAddress
,
3735 IN PHYSICAL_ADDRESS HighAddress
,
3736 IN PHYSICAL_ADDRESS SkipBytes
,
3737 IN SIZE_T TotalBytes
);
3739 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
3743 MmAllocatePagesForMdlEx(
3744 IN PHYSICAL_ADDRESS LowAddress
,
3745 IN PHYSICAL_ADDRESS HighAddress
,
3746 IN PHYSICAL_ADDRESS SkipBytes
,
3747 IN SIZE_T TotalBytes
,
3748 IN MEMORY_CACHING_TYPE CacheType
,
3755 MmBuildMdlForNonPagedPool(
3756 IN OUT PMDL MemoryDescriptorList
);
3758 typedef enum _MMFLUSH_TYPE
{
3766 MmFlushImageSection(
3767 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
3768 IN MMFLUSH_TYPE FlushType
);
3773 MmFreeContiguousMemory(
3774 IN PVOID BaseAddress
);
3779 MmFreeContiguousMemorySpecifyCache(
3780 IN PVOID BaseAddress
,
3781 IN SIZE_T NumberOfBytes
,
3782 IN MEMORY_CACHING_TYPE CacheType
);
3787 MmFreeMappingAddress(
3788 IN PVOID BaseAddress
,
3794 MmFreeNonCachedMemory(
3795 IN PVOID BaseAddress
,
3796 IN SIZE_T NumberOfBytes
);
3802 IN PMDL MemoryDescriptorList
);
3806 * MmGetMdlByteCount(
3809 #define MmGetMdlByteCount(_Mdl) \
3814 * MmGetMdlByteOffset(
3817 #define MmGetMdlByteOffset(_Mdl) \
3818 ((_Mdl)->ByteOffset)
3825 #define MmGetMdlPfnArray(_Mdl) \
3826 ((PPFN_NUMBER) ((_Mdl) + 1))
3830 * MmGetMdlVirtualAddress(
3833 #define MmGetMdlVirtualAddress(_Mdl) \
3834 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
3839 MmGetPhysicalAddress(
3840 IN PVOID BaseAddress
);
3843 PPHYSICAL_MEMORY_RANGE
3845 MmGetPhysicalMemoryRanges(
3851 MmGetVirtualForPhysical(
3852 IN PHYSICAL_ADDRESS PhysicalAddress
);
3857 MmMapLockedPagesSpecifyCache(
3858 IN PMDL MemoryDescriptorList
,
3859 IN KPROCESSOR_MODE AccessMode
,
3860 IN MEMORY_CACHING_TYPE CacheType
,
3861 IN PVOID BaseAddress
,
3862 IN ULONG BugCheckOnFailure
,
3863 IN MM_PAGE_PRIORITY Priority
);
3868 MmMapLockedPagesWithReservedMapping(
3869 IN PVOID MappingAddress
,
3871 IN PMDL MemoryDescriptorList
,
3872 IN MEMORY_CACHING_TYPE CacheType
);
3877 MmMapUserAddressesToPage(
3878 IN PVOID BaseAddress
,
3879 IN SIZE_T NumberOfBytes
,
3880 IN PVOID PageAddress
);
3886 IN PHYSICAL_ADDRESS PhysicalAddress
,
3887 IN SIZE_T NumberOfBytes
,
3888 IN MEMORY_CACHING_TYPE CacheType
);
3893 MmMapViewInSessionSpace(
3895 OUT PVOID
*MappedBase
,
3896 IN OUT PSIZE_T ViewSize
);
3901 MmMapViewInSystemSpace(
3903 OUT PVOID
*MappedBase
,
3904 IN PSIZE_T ViewSize
);
3909 MmMarkPhysicalMemoryAsBad(
3910 IN PPHYSICAL_ADDRESS StartAddress
,
3911 IN OUT PLARGE_INTEGER NumberOfBytes
);
3916 MmMarkPhysicalMemoryAsGood(
3917 IN PPHYSICAL_ADDRESS StartAddress
,
3918 IN OUT PLARGE_INTEGER NumberOfBytes
);
3923 MmGetSystemRoutineAddress(
3924 IN PUNICODE_STRING SystemRoutineName
);
3928 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
3932 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, \
3934 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
3935 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
3940 * IN PMDL MemoryDescriptorList,
3944 #define MmInitializeMdl(_MemoryDescriptorList, \
3948 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
3949 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
3950 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
3951 (_MemoryDescriptorList)->MdlFlags = 0; \
3952 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
3953 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
3954 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
3961 IN PVOID VirtualAddress
);
3966 MmIsDriverVerifying(
3967 IN PDRIVER_OBJECT DriverObject
);
3972 MmIsThisAnNtAsSystem(
3978 MmIsVerifierEnabled(
3979 OUT PULONG VerifierFlags
);
3984 MmLockPagableDataSection(
3985 IN PVOID AddressWithinSection
);
3990 MmLockPagableImageSection(
3991 IN PVOID AddressWithinSection
);
3995 * MmLockPagableCodeSection(
3996 * IN PVOID AddressWithinSection)
3998 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
4003 MmLockPagableSectionByHandle(
4004 IN PVOID ImageSectionHandle
);
4010 IN PHYSICAL_ADDRESS PhysicalAddress
,
4011 IN ULONG NumberOfBytes
,
4012 IN MEMORY_CACHING_TYPE CacheEnable
);
4018 IN PMDL MemoryDescriptorList
,
4019 IN KPROCESSOR_MODE AccessMode
);
4024 MmLockPageableDataSection (
4025 IN PVOID AddressWithinSection
4031 MmUnlockPageableImageSection(
4032 IN PVOID ImageSectionHandle
4039 IN PVOID AddressWithinSection
);
4044 MmProbeAndLockProcessPages(
4045 IN OUT PMDL MemoryDescriptorList
,
4046 IN PEPROCESS Process
,
4047 IN KPROCESSOR_MODE AccessMode
,
4048 IN LOCK_OPERATION Operation
);
4053 MmProtectMdlSystemAddress(
4054 IN PMDL MemoryDescriptorList
,
4055 IN ULONG NewProtect
);
4061 IN PVOID BaseAddress
,
4062 IN PMDL MemoryDescriptorList
);
4067 MmUnmapViewInSessionSpace(
4068 IN PVOID MappedBase
);
4073 MmUnmapViewInSystemSpace(
4074 IN PVOID MappedBase
);
4079 MmUnsecureVirtualMemory(
4080 IN HANDLE SecureHandle
);
4084 * MmPrepareMdlForReuse(
4087 #define MmPrepareMdlForReuse(_Mdl) \
4089 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
4090 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
4091 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
4092 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
4093 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
4097 #define MmGetProcedureAddress(Address) (Address)
4102 MmProbeAndLockPages(
4103 IN OUT PMDL MemoryDescriptorList
,
4104 IN KPROCESSOR_MODE AccessMode
,
4105 IN LOCK_OPERATION Operation
);
4116 MmRemovePhysicalMemory(
4117 IN PPHYSICAL_ADDRESS StartAddress
,
4118 IN OUT PLARGE_INTEGER NumberOfBytes
);
4123 MmResetDriverPaging(
4124 IN PVOID AddressWithinSection
);
4129 MmSecureVirtualMemory(
4132 IN ULONG ProbeMode
);
4144 MmUnlockPagableImageSection(
4145 IN PVOID ImageSectionHandle
);
4151 IN PMDL MemoryDescriptorList
);
4157 IN PVOID BaseAddress
,
4158 IN SIZE_T NumberOfBytes
);
4163 MmUnmapReservedMapping(
4164 IN PVOID BaseAddress
,
4166 IN PMDL MemoryDescriptorList
);
4171 MmUnmapVideoDisplay(
4172 IN PVOID BaseAddress
,
4173 IN SIZE_T NumberOfBytes
);
4177 /** Object manager routines **/
4183 IN PACCESS_STATE AccessState
,
4184 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4186 IN POBJECT_TYPE Type
);
4191 ObDereferenceSecurityDescriptor(
4192 PSECURITY_DESCRIPTOR SecurityDescriptor
,
4198 ObfDereferenceObject(
4203 * ObDereferenceObject(
4206 #define ObDereferenceObject ObfDereferenceObject
4211 ObGetObjectSecurity(
4213 OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
4214 OUT PBOOLEAN MemoryAllocated
);
4221 IN PACCESS_STATE PassedAccessState OPTIONAL
,
4222 IN ACCESS_MASK DesiredAccess
,
4223 IN ULONG AdditionalReferences
,
4224 OUT PVOID
* ReferencedObject OPTIONAL
,
4225 OUT PHANDLE Handle
);
4236 ObLogSecurityDescriptor(
4237 IN PSECURITY_DESCRIPTOR InputSecurityDescriptor
,
4238 OUT PSECURITY_DESCRIPTOR
*OutputSecurityDescriptor
,
4242 * ObReferenceObject(
4245 #define ObReferenceObject ObfReferenceObject
4250 ObMakeTemporaryObject(
4257 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4258 IN POBJECT_TYPE ObjectType
,
4259 IN KPROCESSOR_MODE AccessMode
,
4260 IN PACCESS_STATE PassedAccessState
,
4261 IN ACCESS_MASK DesiredAccess
,
4262 IN OUT PVOID ParseContext OPTIONAL
,
4263 OUT PHANDLE Handle
);
4268 ObOpenObjectByPointer(
4270 IN ULONG HandleAttributes
,
4271 IN PACCESS_STATE PassedAccessState OPTIONAL
,
4272 IN ACCESS_MASK DesiredAccess OPTIONAL
,
4273 IN POBJECT_TYPE ObjectType OPTIONAL
,
4274 IN KPROCESSOR_MODE AccessMode
,
4275 OUT PHANDLE Handle
);
4280 ObQueryObjectAuditingByHandle(
4282 OUT PBOOLEAN GenerateOnClose
);
4287 ObReferenceObjectByHandle(
4289 IN ACCESS_MASK DesiredAccess
,
4290 IN POBJECT_TYPE ObjectType OPTIONAL
,
4291 IN KPROCESSOR_MODE AccessMode
,
4293 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
);
4298 ObReferenceObjectByName(
4299 IN PUNICODE_STRING ObjectPath
,
4300 IN ULONG Attributes
,
4301 IN PACCESS_STATE PassedAccessState OPTIONAL
,
4302 IN ACCESS_MASK DesiredAccess OPTIONAL
,
4303 IN POBJECT_TYPE ObjectType
,
4304 IN KPROCESSOR_MODE AccessMode
,
4305 IN OUT PVOID ParseContext OPTIONAL
,
4311 ObReferenceObjectByPointer(
4313 IN ACCESS_MASK DesiredAccess
,
4314 IN POBJECT_TYPE ObjectType
,
4315 IN KPROCESSOR_MODE AccessMode
);
4320 ObReferenceSecurityDescriptor(
4321 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4327 ObReleaseObjectSecurity(
4328 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4329 IN BOOLEAN MemoryAllocated
);
4333 /** Process manager routines **/
4338 PsCreateSystemProcess(
4339 IN PHANDLE ProcessHandle
,
4340 IN ACCESS_MASK DesiredAccess
,
4341 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4346 PsCreateSystemThread(
4347 OUT PHANDLE ThreadHandle
,
4348 IN ULONG DesiredAccess
,
4349 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
4350 IN HANDLE ProcessHandle OPTIONAL
,
4351 OUT PCLIENT_ID ClientId OPTIONAL
,
4352 IN PKSTART_ROUTINE StartRoutine
,
4353 IN PVOID StartContext
);
4357 * PsGetCurrentProcess(VOID)
4359 #define PsGetCurrentProcess IoGetCurrentProcess
4364 PsGetCurrentProcessId(
4369 * PsGetCurrentThread(VOID)
4371 #define PsGetCurrentThread() \
4372 ((PETHREAD) KeGetCurrentThread())
4377 PsGetCurrentThreadId(
4383 PsGetProcessId(PEPROCESS Process
);
4389 PULONG MajorVersion OPTIONAL
,
4390 PULONG MinorVersion OPTIONAL
,
4391 PULONG BuildNumber OPTIONAL
,
4392 PUNICODE_STRING CSDVersion OPTIONAL
);
4397 PsRemoveCreateThreadNotifyRoutine(
4398 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4403 PsRemoveLoadImageNotifyRoutine(
4404 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4409 PsSetCreateProcessNotifyRoutine(
4410 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
4416 PsSetCreateThreadNotifyRoutine(
4417 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4422 PsSetLoadImageNotifyRoutine(
4423 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4428 PsTerminateSystemThread(
4429 IN NTSTATUS ExitStatus
);
4431 extern NTSYSAPI PEPROCESS PsInitialSystemProcess
;
4434 /** Security reference monitor routines **/
4440 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4441 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
4442 IN BOOLEAN SubjectContextLocked
,
4443 IN ACCESS_MASK DesiredAccess
,
4444 IN ACCESS_MASK PreviouslyGrantedAccess
,
4445 OUT PPRIVILEGE_SET
*Privileges OPTIONAL
,
4446 IN PGENERIC_MAPPING GenericMapping
,
4447 IN KPROCESSOR_MODE AccessMode
,
4448 OUT PACCESS_MASK GrantedAccess
,
4449 OUT PNTSTATUS AccessStatus
);
4455 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
4456 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
4457 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
4458 IN BOOLEAN IsDirectoryObject
,
4459 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
4460 IN PGENERIC_MAPPING GenericMapping
,
4461 IN POOL_TYPE PoolType
);
4467 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
4468 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
4469 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
4470 IN GUID
*ObjectType OPTIONAL
,
4471 IN BOOLEAN IsDirectoryObject
,
4472 IN ULONG AutoInheritFlags
,
4473 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
4474 IN PGENERIC_MAPPING GenericMapping
,
4475 IN POOL_TYPE PoolType
);
4481 IN OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
);
4486 SeSinglePrivilegeCheck(
4487 LUID PrivilegeValue
,
4488 KPROCESSOR_MODE PreviousMode
);
4493 SeValidSecurityDescriptor(
4495 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
4499 /** NtXxx routines **/
4505 OUT PHANDLE ProcessHandle
,
4506 IN ACCESS_MASK DesiredAccess
,
4507 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4508 IN PCLIENT_ID ClientId OPTIONAL
);
4513 NtQueryInformationProcess(
4514 IN HANDLE ProcessHandle
,
4515 IN PROCESSINFOCLASS ProcessInformationClass
,
4516 OUT PVOID ProcessInformation
,
4517 IN ULONG ProcessInformationLength
,
4518 OUT PULONG ReturnLength OPTIONAL
);
4522 /** NtXxx and ZwXxx routines **/
4528 IN HANDLE TimerHandle
,
4529 OUT PBOOLEAN CurrentState OPTIONAL
);
4546 ZwCreateDirectoryObject(
4547 OUT PHANDLE DirectoryHandle
,
4548 IN ACCESS_MASK DesiredAccess
,
4549 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4555 OUT PHANDLE EventHandle
,
4556 IN ACCESS_MASK DesiredAccess
,
4557 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
4558 IN EVENT_TYPE EventType
,
4559 IN BOOLEAN InitialState
);
4565 OUT PHANDLE EventHandle
,
4566 IN ACCESS_MASK DesiredAccess
,
4567 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
4568 IN EVENT_TYPE EventType
,
4569 IN BOOLEAN InitialState
);
4575 OUT PHANDLE FileHandle
,
4576 IN ACCESS_MASK DesiredAccess
,
4577 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4578 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4579 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
4580 IN ULONG FileAttributes
,
4581 IN ULONG ShareAccess
,
4582 IN ULONG CreateDisposition
,
4583 IN ULONG CreateOptions
,
4584 IN PVOID EaBuffer OPTIONAL
,
4591 OUT PHANDLE KeyHandle
,
4592 IN ACCESS_MASK DesiredAccess
,
4593 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4594 IN ULONG TitleIndex
,
4595 IN PUNICODE_STRING Class OPTIONAL
,
4596 IN ULONG CreateOptions
,
4597 OUT PULONG Disposition OPTIONAL
);
4603 OUT PHANDLE TimerHandle
,
4604 IN ACCESS_MASK DesiredAccess
,
4605 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
4606 IN TIMER_TYPE TimerType
);
4612 IN HANDLE KeyHandle
);
4618 IN HANDLE KeyHandle
,
4619 IN PUNICODE_STRING ValueName
);
4624 NtDeviceIoControlFile(
4625 IN HANDLE DeviceHandle
,
4626 IN HANDLE Event OPTIONAL
,
4627 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
4628 IN PVOID UserApcContext OPTIONAL
,
4629 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4630 IN ULONG IoControlCode
,
4631 IN PVOID InputBuffer
,
4632 IN ULONG InputBufferSize
,
4633 OUT PVOID OutputBuffer
,
4634 IN ULONG OutputBufferSize
);
4639 ZwDeviceIoControlFile(
4640 IN HANDLE DeviceHandle
,
4641 IN HANDLE Event OPTIONAL
,
4642 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
4643 IN PVOID UserApcContext OPTIONAL
,
4644 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4645 IN ULONG IoControlCode
,
4646 IN PVOID InputBuffer
,
4647 IN ULONG InputBufferSize
,
4648 OUT PVOID OutputBuffer
,
4649 IN ULONG OutputBufferSize
);
4655 IN HANDLE KeyHandle
,
4657 IN KEY_INFORMATION_CLASS KeyInformationClass
,
4658 OUT PVOID KeyInformation
,
4660 OUT PULONG ResultLength
);
4665 ZwEnumerateValueKey(
4666 IN HANDLE KeyHandle
,
4668 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
4669 OUT PVOID KeyValueInformation
,
4671 OUT PULONG ResultLength
);
4677 IN HANDLE KeyHandle
);
4682 ZwMakeTemporaryObject(
4689 IN HANDLE SectionHandle
,
4690 IN HANDLE ProcessHandle
,
4691 IN OUT PVOID
*BaseAddress
,
4692 IN ULONG_PTR ZeroBits
,
4693 IN SIZE_T CommitSize
,
4694 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
4695 IN OUT PSIZE_T ViewSize
,
4696 IN SECTION_INHERIT InheritDisposition
,
4697 IN ULONG AllocationType
,
4704 IN HANDLE SectionHandle
,
4705 IN HANDLE ProcessHandle
,
4706 IN OUT PVOID
*BaseAddress
,
4707 IN ULONG_PTR ZeroBits
,
4708 IN SIZE_T CommitSize
,
4709 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
4710 IN OUT PSIZE_T ViewSize
,
4711 IN SECTION_INHERIT InheritDisposition
,
4712 IN ULONG AllocationType
,
4719 OUT PHANDLE FileHandle
,
4720 IN ACCESS_MASK DesiredAccess
,
4721 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4722 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4723 IN ULONG ShareAccess
,
4724 IN ULONG OpenOptions
);
4730 OUT PHANDLE FileHandle
,
4731 IN ACCESS_MASK DesiredAccess
,
4732 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4733 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4734 IN ULONG ShareAccess
,
4735 IN ULONG OpenOptions
);
4741 OUT PHANDLE KeyHandle
,
4742 IN ACCESS_MASK DesiredAccess
,
4743 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4749 OUT PHANDLE SectionHandle
,
4750 IN ACCESS_MASK DesiredAccess
,
4751 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4756 ZwOpenSymbolicLinkObject(
4757 OUT PHANDLE LinkHandle
,
4758 IN ACCESS_MASK DesiredAccess
,
4759 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4765 OUT PHANDLE TimerHandle
,
4766 IN ACCESS_MASK DesiredAccess
,
4767 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4772 ZwQueryInformationFile(
4773 IN HANDLE FileHandle
,
4774 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4775 OUT PVOID FileInformation
,
4777 IN FILE_INFORMATION_CLASS FileInformationClass
);
4783 IN HANDLE KeyHandle
,
4784 IN KEY_INFORMATION_CLASS KeyInformationClass
,
4785 OUT PVOID KeyInformation
,
4787 OUT PULONG ResultLength
);
4792 ZwQuerySymbolicLinkObject(
4793 IN HANDLE LinkHandle
,
4794 IN OUT PUNICODE_STRING LinkTarget
,
4795 OUT PULONG ReturnedLength OPTIONAL
);
4801 IN HANDLE KeyHandle
,
4802 IN PUNICODE_STRING ValueName
,
4803 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
4804 OUT PVOID KeyValueInformation
,
4806 OUT PULONG ResultLength
);
4812 IN HANDLE FileHandle
,
4813 IN HANDLE Event OPTIONAL
,
4814 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4815 IN PVOID ApcContext OPTIONAL
,
4816 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4819 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
4820 IN PULONG Key OPTIONAL
);
4826 IN HANDLE FileHandle
,
4827 IN HANDLE Event OPTIONAL
,
4828 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4829 IN PVOID ApcContext OPTIONAL
,
4830 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4833 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
4834 IN PULONG Key OPTIONAL
);
4840 IN HANDLE EventHandle
,
4841 OUT PLONG PreviousState OPTIONAL
);
4847 IN HANDLE EventHandle
,
4848 OUT PLONG PreviousState OPTIONAL
);
4853 ZwSetInformationFile(
4854 IN HANDLE FileHandle
,
4855 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4856 IN PVOID FileInformation
,
4858 IN FILE_INFORMATION_CLASS FileInformationClass
);
4863 ZwSetInformationThread(
4864 IN HANDLE ThreadHandle
,
4865 IN THREADINFOCLASS ThreadInformationClass
,
4866 IN PVOID ThreadInformation
,
4867 IN ULONG ThreadInformationLength
);
4873 IN HANDLE TimerHandle
,
4874 IN PLARGE_INTEGER DueTime
,
4875 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
4876 IN PVOID TimerContext OPTIONAL
,
4877 IN BOOLEAN WakeTimer
,
4878 IN LONG Period OPTIONAL
,
4879 OUT PBOOLEAN PreviousState OPTIONAL
);
4885 IN HANDLE KeyHandle
,
4886 IN PUNICODE_STRING ValueName
,
4887 IN ULONG TitleIndex OPTIONAL
,
4892 /* [Nt|Zw]MapViewOfSection.InheritDisposition constants */
4893 #define AT_EXTENDABLE_FILE 0x00002000
4894 #define AT_RESERVED 0x20000000
4895 #define AT_ROUND_TO_PAGE 0x40000000
4900 NtUnmapViewOfSection(
4901 IN HANDLE ProcessHandle
,
4902 IN PVOID BaseAddress
);
4907 ZwUnmapViewOfSection(
4908 IN HANDLE ProcessHandle
,
4909 IN PVOID BaseAddress
);
4914 NtWaitForSingleObject(
4915 IN HANDLE ObjectHandle
,
4916 IN BOOLEAN Alertable
,
4917 IN PLARGE_INTEGER TimeOut OPTIONAL
);
4922 ZwWaitForSingleObject(
4923 IN HANDLE ObjectHandle
,
4924 IN BOOLEAN Alertable
,
4925 IN PLARGE_INTEGER TimeOut OPTIONAL
);
4931 IN HANDLE FileHandle
,
4932 IN HANDLE Event OPTIONAL
,
4933 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4934 IN PVOID ApcContext OPTIONAL
,
4935 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4938 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
4939 IN PULONG Key OPTIONAL
);
4945 IN HANDLE FileHandle
,
4946 IN HANDLE Event OPTIONAL
,
4947 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4948 IN PVOID ApcContext OPTIONAL
,
4949 OUT PIO_STATUS_BLOCK IoStatusBlock
,