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
46 #define NTHALAPI DECLSPEC_IMPORT
51 /* Pseudo modifiers for parameters */
67 #define RESTRICTED_POINTER
70 #define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
72 #define POINTER_ALIGNMENT
75 #define DECLSPEC_ADDRSAFE
77 #ifdef NONAMELESSUNION
78 # define _DDK_DUMMYUNION_MEMBER(name) DUMMYUNIONNAME.name
79 # define _DDK_DUMMYUNION_N_MEMBER(n, name) DUMMYUNIONNAME##n.name
81 # define _DDK_DUMMYUNION_MEMBER(name) name
82 # define _DDK_DUMMYUNION_N_MEMBER(n, name) name
86 ** Forward declarations
92 struct _DRIVE_LAYOUT_INFORMATION_EX
;
93 struct _LOADER_PARAMETER_BLOCK
;
97 /* FIXME: Unknown definitions */
98 struct _SET_PARTITION_INFORMATION_EX
;
99 typedef ULONG WAIT_TYPE
;
102 typedef HANDLE TRACEHANDLE
;
103 typedef PVOID PWMILIB_CONTEXT
;
104 typedef ULONG LOGICAL
;
108 ** WmiLib specific structure
112 IrpProcessed
, // Irp was processed and possibly completed
113 IrpNotCompleted
, // Irp was process and NOT completed
114 IrpNotWmi
, // Irp is not a WMI irp
115 IrpForward
// Irp is wmi irp, but targeted at another device object
116 } SYSCTL_IRP_DISPOSITION
, *PSYSCTL_IRP_DISPOSITION
;
121 struct _COMPRESSED_DATA_INFO
;
123 #define KERNEL_STACK_SIZE 12288
124 #define KERNEL_LARGE_STACK_SIZE 61440
125 #define KERNEL_LARGE_STACK_COMMIT 12288
127 #define EXCEPTION_READ_FAULT 0
128 #define EXCEPTION_WRITE_FAULT 1
129 #define EXCEPTION_EXECUTE_FAULT 8
131 #define DPFLTR_ERROR_LEVEL 0
132 #define DPFLTR_WARNING_LEVEL 1
133 #define DPFLTR_TRACE_LEVEL 2
134 #define DPFLTR_INFO_LEVEL 3
135 #define DPFLTR_MASK 0x80000000
137 typedef enum _DPFLTR_TYPE
139 DPFLTR_SYSTEM_ID
= 0,
144 DPFLTR_CRASHDUMP_ID
= 5,
145 DPFLTR_CDAUDIO_ID
= 6,
147 DPFLTR_CLASSPNP_ID
= 8,
149 DPFLTR_REDBOOK_ID
= 10,
150 DPFLTR_STORPROP_ID
= 11,
151 DPFLTR_SCSIPORT_ID
= 12,
152 DPFLTR_SCSIMINIPORT_ID
= 13,
153 DPFLTR_CONFIG_ID
= 14,
154 DPFLTR_I8042PRT_ID
= 15,
155 DPFLTR_SERMOUSE_ID
= 16,
156 DPFLTR_LSERMOUS_ID
= 17,
157 DPFLTR_KBDHID_ID
= 18,
158 DPFLTR_MOUHID_ID
= 19,
159 DPFLTR_KBDCLASS_ID
= 20,
160 DPFLTR_MOUCLASS_ID
= 21,
161 DPFLTR_TWOTRACK_ID
= 22,
162 DPFLTR_WMILIB_ID
= 23,
165 DPFLTR_HALIA64_ID
= 26,
166 DPFLTR_VIDEO_ID
= 27,
167 DPFLTR_SVCHOST_ID
= 28,
168 DPFLTR_VIDEOPRT_ID
= 29,
169 DPFLTR_TCPIP_ID
= 30,
170 DPFLTR_DMSYNTH_ID
= 31,
171 DPFLTR_NTOSPNP_ID
= 32,
172 DPFLTR_FASTFAT_ID
= 33,
173 DPFLTR_SAMSS_ID
= 34,
174 DPFLTR_PNPMGR_ID
= 35,
175 DPFLTR_NETAPI_ID
= 36,
176 DPFLTR_SCSERVER_ID
= 37,
177 DPFLTR_SCCLIENT_ID
= 38,
178 DPFLTR_SERIAL_ID
= 39,
179 DPFLTR_SERENUM_ID
= 40,
181 DPFLTR_BOOTOK_ID
= 42,
182 DPFLTR_BOOTVRFY_ID
= 43,
183 DPFLTR_RPCPROXY_ID
= 44,
184 DPFLTR_AUTOCHK_ID
= 45,
185 DPFLTR_DCOMSS_ID
= 46,
186 DPFLTR_UNIMODEM_ID
= 47,
188 DPFLTR_FLTMGR_ID
= 49,
189 DPFLTR_WMICORE_ID
= 50,
190 DPFLTR_BURNENG_ID
= 51,
191 DPFLTR_IMAPI_ID
= 52,
193 DPFLTR_FUSION_ID
= 54,
194 DPFLTR_IDLETASK_ID
= 55,
195 DPFLTR_SOFTPCI_ID
= 56,
197 DPFLTR_MCHGR_ID
= 58,
199 DPFLTR_PCIIDE_ID
= 60,
200 DPFLTR_FLOPPY_ID
= 61,
202 DPFLTR_TERMSRV_ID
= 63,
203 DPFLTR_W32TIME_ID
= 64,
204 DPFLTR_PREFETCHER_ID
= 65,
205 DPFLTR_RSFILTER_ID
= 66,
206 DPFLTR_FCPORT_ID
= 67,
209 DPFLTR_DMCONFIG_ID
= 70,
210 DPFLTR_DMADMIN_ID
= 71,
211 DPFLTR_WSOCKTRANSPORT_ID
= 72,
213 DPFLTR_PNPMEM_ID
= 74,
214 DPFLTR_PROCESSOR_ID
= 75,
215 DPFLTR_DMSERVER_ID
= 76,
217 DPFLTR_INFINIBAND_ID
= 78,
218 DPFLTR_IHVDRIVER_ID
= 79,
219 DPFLTR_IHVVIDEO_ID
= 80,
220 DPFLTR_IHVAUDIO_ID
= 81,
221 DPFLTR_IHVNETWORK_ID
= 82,
222 DPFLTR_IHVSTREAMING_ID
= 83,
223 DPFLTR_IHVBUS_ID
= 84,
225 DPFLTR_RTLTHREADPOOL_ID
= 86,
227 DPFLTR_TCPIP6_ID
= 88,
228 DPFLTR_ISAPNP_ID
= 89,
230 DPFLTR_STORPORT_ID
= 91,
231 DPFLTR_STORMINIPORT_ID
= 92,
232 DPFLTR_PRINTSPOOLER_ID
= 93,
234 DPFLTR_VDSBAS_ID
= 95,
235 DPFLTR_VDSDYNDR_ID
= 96,
236 DPFLTR_VDSUTIL_ID
= 97,
237 DPFLTR_DFRGIFC_ID
= 98,
238 DPFLTR_DEFAULT_ID
= 99,
240 DPFLTR_DFSC_ID
= 101,
241 DPFLTR_WOW64_ID
= 102,
245 /* also in winnt.h */
247 #define FILE_COPY_STRUCTURED_STORAGE 0x00000041
248 #define FILE_STRUCTURED_STORAGE 0x00000441
252 #define THREAD_ALERT (0x0004)
254 /* Exported object types */
255 extern POBJECT_TYPE NTSYSAPI ExDesktopObjectType
;
256 extern POBJECT_TYPE NTSYSAPI ExEventObjectType
;
257 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType
;
258 extern POBJECT_TYPE NTSYSAPI ExWindowStationObjectType
;
259 extern ULONG NTSYSAPI IoDeviceHandlerObjectSize
;
260 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType
;
261 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType
;
262 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType
;
263 extern POBJECT_TYPE NTSYSAPI IoFileObjectType
;
264 extern POBJECT_TYPE NTSYSAPI PsThreadType
;
265 extern POBJECT_TYPE NTSYSAPI LpcPortObjectType
;
266 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType
;
267 extern POBJECT_TYPE NTSYSAPI PsProcessType
;
269 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
270 extern volatile CCHAR NTSYSAPI KeNumberProcessors
;
272 #if (NTDDI_VERSION >= NTDDI_WINXP)
273 extern CCHAR NTSYSAPI KeNumberProcessors
;
275 //extern PCCHAR KeNumberProcessors;
276 extern NTSYSAPI CCHAR KeNumberProcessors
; //FIXME: Note to Alex: I won't fix this atm, since I prefer to discuss this with you first.
280 #define MAX_WOW64_SHARED_ENTRIES 16
282 extern volatile KSYSTEM_TIME KeTickCount
;
284 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
285 #define NX_SUPPORT_POLICY_ALWAYSON 1
286 #define NX_SUPPORT_POLICY_OPTIN 2
287 #define NX_SUPPORT_POLICY_OPTOUT 3
289 typedef struct _KUSER_SHARED_DATA
291 ULONG TickCountLowDeprecated
;
292 ULONG TickCountMultiplier
;
293 volatile KSYSTEM_TIME InterruptTime
;
294 volatile KSYSTEM_TIME SystemTime
;
295 volatile KSYSTEM_TIME TimeZoneBias
;
296 USHORT ImageNumberLow
;
297 USHORT ImageNumberHigh
;
298 WCHAR NtSystemRoot
[260];
299 ULONG MaxStackTraceDepth
;
300 ULONG CryptoExponent
;
302 ULONG LargePageMinimum
;
304 NT_PRODUCT_TYPE NtProductType
;
305 BOOLEAN ProductTypeIsValid
;
306 ULONG NtMajorVersion
;
307 ULONG NtMinorVersion
;
308 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
311 volatile ULONG TimeSlip
;
312 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
313 LARGE_INTEGER SystemExpirationDate
;
315 BOOLEAN KdDebuggerEnabled
;
316 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
317 UCHAR NXSupportPolicy
;
319 volatile ULONG ActiveConsoleId
;
320 volatile ULONG DismountCount
;
321 ULONG ComPlusPackage
;
322 ULONG LastSystemRITEventTickCount
;
323 ULONG NumberOfPhysicalPages
;
324 BOOLEAN SafeBootMode
;
327 ULONGLONG TestRetInstruction
;
329 ULONG SystemCallReturn
;
330 ULONGLONG SystemCallPad
[3];
331 __GNU_EXTENSION
union {
332 volatile KSYSTEM_TIME TickCount
;
333 volatile ULONG64 TickCountQuad
;
336 #if (NTDDI_VERSION >= NTDDI_WS03)
337 LONGLONG ConsoleSessionForegroundProcessId
;
338 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
340 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
341 USHORT UserModeGlobalLogger
[8];
342 ULONG HeapTracingPid
[2];
343 ULONG CritSecTracingPid
[2];
344 __GNU_EXTENSION
union
346 ULONG SharedDataFlags
;
347 __GNU_EXTENSION
struct
349 ULONG DbgErrorPortPresent
:1;
350 ULONG DbgElevationEnabled
:1;
351 ULONG DbgVirtEnabled
:1;
352 ULONG DbgInstallerDetectEnabled
:1;
356 ULONG ImageFileExecutionOptions
;
357 KAFFINITY ActiveProcessorAffinity
;
359 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
362 ** IRP function codes
365 #define IRP_MN_QUERY_DIRECTORY 0x01
366 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
368 #define IRP_MN_USER_FS_REQUEST 0x00
369 #define IRP_MN_MOUNT_VOLUME 0x01
370 #define IRP_MN_VERIFY_VOLUME 0x02
371 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
372 #define IRP_MN_TRACK_LINK 0x04
373 #define IRP_MN_KERNEL_CALL 0x04
375 #define IRP_MN_LOCK 0x01
376 #define IRP_MN_UNLOCK_SINGLE 0x02
377 #define IRP_MN_UNLOCK_ALL 0x03
378 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
380 #define IRP_MN_NORMAL 0x00
381 #define IRP_MN_DPC 0x01
382 #define IRP_MN_MDL 0x02
383 #define IRP_MN_COMPLETE 0x04
384 #define IRP_MN_COMPRESSED 0x08
386 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
387 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
388 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
390 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
392 typedef EXCEPTION_DISPOSITION
393 (DDKAPI
*PEXCEPTION_ROUTINE
)(
394 IN
struct _EXCEPTION_RECORD
*ExceptionRecord
,
395 IN PVOID EstablisherFrame
,
396 IN OUT
struct _CONTEXT
*ContextRecord
,
397 IN OUT PVOID DispatcherContext
);
400 (DDKAPI
*PDRIVER_ENTRY
)(
401 IN
struct _DRIVER_OBJECT
*DriverObject
,
402 IN PUNICODE_STRING RegistryPath
);
405 (DDKAPI
*PDRIVER_REINITIALIZE
)(
406 IN
struct _DRIVER_OBJECT
*DriverObject
,
410 typedef enum _BUS_QUERY_ID_TYPE
{
413 BusQueryCompatibleIDs
,
415 BusQueryDeviceSerialNumber
416 } BUS_QUERY_ID_TYPE
, *PBUS_QUERY_ID_TYPE
;
418 typedef enum _DEVICE_TEXT_TYPE
{
419 DeviceTextDescription
,
420 DeviceTextLocationInformation
421 } DEVICE_TEXT_TYPE
, *PDEVICE_TEXT_TYPE
;
424 (DDKAPI
*PKTRANSFER_ROUTINE
)(
427 #define ASSERT_GATE(object) \
428 ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
429 (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
431 #define TIMER_TABLE_SIZE 512
432 #define TIMER_TABLE_SHIFT 9
434 #define ASSERT_TIMER(E) \
435 ASSERT(((E)->Header.Type == TimerNotificationObject) || \
436 ((E)->Header.Type == TimerSynchronizationObject))
438 #define ASSERT_MUTANT(E) \
439 ASSERT((E)->Header.Type == MutantObject)
441 #define ASSERT_SEMAPHORE(E) \
442 ASSERT((E)->Header.Type == SemaphoreObject)
444 #define ASSERT_EVENT(E) \
445 ASSERT(((E)->Header.Type == NotificationEvent) || \
446 ((E)->Header.Type == SynchronizationEvent))
449 typedef enum _TIMER_TYPE
{
454 #define KEYBOARD_INSERT_ON 0x08
455 #define KEYBOARD_CAPS_LOCK_ON 0x04
456 #define KEYBOARD_NUM_LOCK_ON 0x02
457 #define KEYBOARD_SCROLL_LOCK_ON 0x01
458 #define KEYBOARD_ALT_KEY_DOWN 0x80
459 #define KEYBOARD_CTRL_KEY_DOWN 0x40
460 #define KEYBOARD_LEFT_SHIFT_DOWN 0x20
461 #define KEYBOARD_RIGHT_SHIFT_DOWN 0x10
463 typedef struct _IO_COUNTERS
{
464 ULONGLONG ReadOperationCount
;
465 ULONGLONG WriteOperationCount
;
466 ULONGLONG OtherOperationCount
;
467 ULONGLONG ReadTransferCount
;
468 ULONGLONG WriteTransferCount
;
469 ULONGLONG OtherTransferCount
;
470 } IO_COUNTERS
, *PIO_COUNTERS
;
472 typedef struct _VM_COUNTERS
474 SIZE_T PeakVirtualSize
;
476 ULONG PageFaultCount
;
477 SIZE_T PeakWorkingSetSize
;
478 SIZE_T WorkingSetSize
;
479 SIZE_T QuotaPeakPagedPoolUsage
;
480 SIZE_T QuotaPagedPoolUsage
;
481 SIZE_T QuotaPeakNonPagedPoolUsage
;
482 SIZE_T QuotaNonPagedPoolUsage
;
483 SIZE_T PagefileUsage
;
484 SIZE_T PeakPagefileUsage
;
485 } VM_COUNTERS
, *PVM_COUNTERS
;
487 typedef struct _VM_COUNTERS_EX
489 SIZE_T PeakVirtualSize
;
491 ULONG PageFaultCount
;
492 SIZE_T PeakWorkingSetSize
;
493 SIZE_T WorkingSetSize
;
494 SIZE_T QuotaPeakPagedPoolUsage
;
495 SIZE_T QuotaPagedPoolUsage
;
496 SIZE_T QuotaPeakNonPagedPoolUsage
;
497 SIZE_T QuotaNonPagedPoolUsage
;
498 SIZE_T PagefileUsage
;
499 SIZE_T PeakPagefileUsage
;
501 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
503 typedef struct _POOLED_USAGE_AND_LIMITS
505 SIZE_T PeakPagedPoolUsage
;
506 SIZE_T PagedPoolUsage
;
507 SIZE_T PagedPoolLimit
;
508 SIZE_T PeakNonPagedPoolUsage
;
509 SIZE_T NonPagedPoolUsage
;
510 SIZE_T NonPagedPoolLimit
;
511 SIZE_T PeakPagefileUsage
;
512 SIZE_T PagefileUsage
;
513 SIZE_T PagefileLimit
;
514 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
516 typedef struct _CONTROLLER_OBJECT
{
519 PVOID ControllerExtension
;
520 KDEVICE_QUEUE DeviceWaitQueue
;
522 LARGE_INTEGER Spare2
;
523 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
525 /* DEVICE_OBJECT.Flags */
527 #define DO_DEVICE_HAS_NAME 0x00000040
528 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
529 #define DO_LONG_TERM_REQUESTS 0x00000200
530 #define DO_NEVER_LAST_DEVICE 0x00000400
531 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
532 #define DO_XIP 0x00020000
534 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
535 #define MDL_PAGES_LOCKED 0x0002
536 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
537 #define MDL_ALLOCATED_FIXED_SIZE 0x0008
538 #define MDL_PARTIAL 0x0010
539 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
540 #define MDL_IO_PAGE_READ 0x0040
541 #define MDL_WRITE_OPERATION 0x0080
542 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
543 #define MDL_FREE_EXTRA_PTES 0x0200
544 #define MDL_DESCRIBES_AWE 0x0400
545 #define MDL_IO_SPACE 0x0800
546 #define MDL_NETWORK_HEADER 0x1000
547 #define MDL_MAPPING_CAN_FAIL 0x2000
548 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
549 #define MDL_INTERNAL 0x8000
552 #define MDL_MAPPING_FLAGS ( \
553 MDL_MAPPED_TO_SYSTEM_VA | \
555 MDL_SOURCE_IS_NONPAGED_POOL | \
556 MDL_PARTIAL_HAS_BEEN_MAPPED | \
557 MDL_PARENT_MAPPED_SYSTEM_VA | \
561 typedef struct _DRIVER_EXTENSION
{
562 struct _DRIVER_OBJECT
*DriverObject
;
563 PDRIVER_ADD_DEVICE AddDevice
;
565 UNICODE_STRING ServiceKeyName
;
566 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
568 #define DRVO_UNLOAD_INVOKED 0x00000001
569 #define DRVO_LEGACY_DRIVER 0x00000002
570 #define DRVO_BUILTIN_DRIVER 0x00000004
571 #define DRVO_REINIT_REGISTERED 0x00000008
572 #define DRVO_INITIALIZED 0x00000010
573 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
574 #define DRVO_LEGACY_RESOURCES 0x00000040
576 typedef struct _DRIVER_OBJECT
{
579 PDEVICE_OBJECT DeviceObject
;
584 PDRIVER_EXTENSION DriverExtension
;
585 UNICODE_STRING DriverName
;
586 PUNICODE_STRING HardwareDatabase
;
587 struct _FAST_IO_DISPATCH
*FastIoDispatch
;
588 PDRIVER_INITIALIZE DriverInit
;
589 PDRIVER_STARTIO DriverStartIo
;
590 PDRIVER_UNLOAD DriverUnload
;
591 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
593 typedef struct _DRIVER_OBJECT
*PDRIVER_OBJECT
;
595 typedef struct _DMA_ADAPTER
{
598 struct _DMA_OPERATIONS
* DmaOperations
;
599 } DMA_ADAPTER
, *PDMA_ADAPTER
;
602 (DDKAPI
*PPUT_DMA_ADAPTER
)(
603 IN PDMA_ADAPTER DmaAdapter
);
606 (DDKAPI
*PALLOCATE_COMMON_BUFFER
)(
607 IN PDMA_ADAPTER DmaAdapter
,
609 OUT PPHYSICAL_ADDRESS LogicalAddress
,
610 IN BOOLEAN CacheEnabled
);
613 (DDKAPI
*PFREE_COMMON_BUFFER
)(
614 IN PDMA_ADAPTER DmaAdapter
,
616 IN PHYSICAL_ADDRESS LogicalAddress
,
617 IN PVOID VirtualAddress
,
618 IN BOOLEAN CacheEnabled
);
621 (DDKAPI
*PALLOCATE_ADAPTER_CHANNEL
)(
622 IN PDMA_ADAPTER DmaAdapter
,
623 IN PDEVICE_OBJECT DeviceObject
,
624 IN ULONG NumberOfMapRegisters
,
625 IN PDRIVER_CONTROL ExecutionRoutine
,
629 (DDKAPI
*PFLUSH_ADAPTER_BUFFERS
)(
630 IN PDMA_ADAPTER DmaAdapter
,
632 IN PVOID MapRegisterBase
,
635 IN BOOLEAN WriteToDevice
);
638 (DDKAPI
*PFREE_ADAPTER_CHANNEL
)(
639 IN PDMA_ADAPTER DmaAdapter
);
642 (DDKAPI
*PFREE_MAP_REGISTERS
)(
643 IN PDMA_ADAPTER DmaAdapter
,
644 PVOID MapRegisterBase
,
645 ULONG NumberOfMapRegisters
);
647 typedef PHYSICAL_ADDRESS
648 (DDKAPI
*PMAP_TRANSFER
)(
649 IN PDMA_ADAPTER DmaAdapter
,
651 IN PVOID MapRegisterBase
,
653 IN OUT PULONG Length
,
654 IN BOOLEAN WriteToDevice
);
657 (DDKAPI
*PGET_DMA_ALIGNMENT
)(
658 IN PDMA_ADAPTER DmaAdapter
);
661 (DDKAPI
*PREAD_DMA_COUNTER
)(
662 IN PDMA_ADAPTER DmaAdapter
);
665 (DDKAPI
*PGET_SCATTER_GATHER_LIST
)(
666 IN PDMA_ADAPTER DmaAdapter
,
667 IN PDEVICE_OBJECT DeviceObject
,
671 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
673 IN BOOLEAN WriteToDevice
);
676 (DDKAPI
*PPUT_SCATTER_GATHER_LIST
)(
677 IN PDMA_ADAPTER DmaAdapter
,
678 IN PSCATTER_GATHER_LIST ScatterGather
,
679 IN BOOLEAN WriteToDevice
);
682 (DDKAPI
*PCALCULATE_SCATTER_GATHER_LIST_SIZE
)(
683 IN PDMA_ADAPTER DmaAdapter
,
684 IN PMDL Mdl OPTIONAL
,
687 OUT PULONG ScatterGatherListSize
,
688 OUT PULONG pNumberOfMapRegisters OPTIONAL
);
691 (DDKAPI
*PBUILD_SCATTER_GATHER_LIST
)(
692 IN PDMA_ADAPTER DmaAdapter
,
693 IN PDEVICE_OBJECT DeviceObject
,
697 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
699 IN BOOLEAN WriteToDevice
,
700 IN PVOID ScatterGatherBuffer
,
701 IN ULONG ScatterGatherLength
);
704 (DDKAPI
*PBUILD_MDL_FROM_SCATTER_GATHER_LIST
)(
705 IN PDMA_ADAPTER DmaAdapter
,
706 IN PSCATTER_GATHER_LIST ScatterGather
,
708 OUT PMDL
*TargetMdl
);
710 typedef struct _DMA_OPERATIONS
{
712 PPUT_DMA_ADAPTER PutDmaAdapter
;
713 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer
;
714 PFREE_COMMON_BUFFER FreeCommonBuffer
;
715 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
716 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
717 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
718 PFREE_MAP_REGISTERS FreeMapRegisters
;
719 PMAP_TRANSFER MapTransfer
;
720 PGET_DMA_ALIGNMENT GetDmaAlignment
;
721 PREAD_DMA_COUNTER ReadDmaCounter
;
722 PGET_SCATTER_GATHER_LIST GetScatterGatherList
;
723 PPUT_SCATTER_GATHER_LIST PutScatterGatherList
;
724 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList
;
725 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList
;
726 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList
;
727 } DMA_OPERATIONS
, *PDMA_OPERATIONS
;
729 typedef enum _ARBITER_REQUEST_SOURCE
{
730 ArbiterRequestUndefined
= -1,
731 ArbiterRequestLegacyReported
,
732 ArbiterRequestHalReported
,
733 ArbiterRequestLegacyAssigned
,
734 ArbiterRequestPnpDetected
,
735 ArbiterRequestPnpEnumerated
736 } ARBITER_REQUEST_SOURCE
;
738 typedef enum _ARBITER_RESULT
{
739 ArbiterResultUndefined
= -1,
740 ArbiterResultSuccess
,
741 ArbiterResultExternalConflict
,
742 ArbiterResultNullRequest
745 typedef enum _ARBITER_ACTION
{
746 ArbiterActionTestAllocation
,
747 ArbiterActionRetestAllocation
,
748 ArbiterActionCommitAllocation
,
749 ArbiterActionRollbackAllocation
,
750 ArbiterActionQueryAllocatedResources
,
751 ArbiterActionWriteReservedResources
,
752 ArbiterActionQueryConflict
,
753 ArbiterActionQueryArbitrate
,
754 ArbiterActionAddReserved
,
755 ArbiterActionBootAllocation
756 } ARBITER_ACTION
, *PARBITER_ACTION
;
758 typedef struct _ARBITER_CONFLICT_INFO
{
759 PDEVICE_OBJECT OwningObject
;
762 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
764 typedef struct _ARBITER_PARAMETERS
{
767 IN OUT PLIST_ENTRY ArbitrationList
;
768 IN ULONG AllocateFromCount
;
769 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
773 IN OUT PLIST_ENTRY ArbitrationList
;
774 IN ULONG AllocateFromCount
;
775 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
779 IN OUT PLIST_ENTRY ArbitrationList
;
783 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
784 } QueryAllocatedResources
;
787 IN PDEVICE_OBJECT PhysicalDeviceObject
;
788 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
789 OUT PULONG ConflictCount
;
790 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
794 IN PLIST_ENTRY ArbitrationList
;
798 IN PDEVICE_OBJECT ReserveDevice
;
801 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
803 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
805 typedef struct _ARBITER_LIST_ENTRY
{
806 LIST_ENTRY ListEntry
;
807 ULONG AlternativeCount
;
808 PIO_RESOURCE_DESCRIPTOR Alternatives
;
809 PDEVICE_OBJECT PhysicalDeviceObject
;
810 ARBITER_REQUEST_SOURCE RequestSource
;
813 INTERFACE_TYPE InterfaceType
;
816 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
817 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
818 ARBITER_RESULT Result
;
819 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
822 (DDKAPI
*PARBITER_HANDLER
)(
824 IN ARBITER_ACTION Action
,
825 IN OUT PARBITER_PARAMETERS Parameters
);
827 #define ARBITER_PARTIAL 0x00000001
829 typedef struct _ARBITER_INTERFACE
{
833 PINTERFACE_REFERENCE InterfaceReference
;
834 PINTERFACE_DEREFERENCE InterfaceDereference
;
835 PARBITER_HANDLER ArbiterHandler
;
837 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
839 typedef enum _KPROFILE_SOURCE
{
841 ProfileAlignmentFixup
,
844 ProfileLoadInstructions
,
845 ProfilePipelineFrozen
,
846 ProfileBranchInstructions
,
847 ProfileTotalNonissues
,
851 ProfileBranchMispredictions
,
852 ProfileStoreInstructions
,
853 ProfileFpInstructions
,
854 ProfileIntegerInstructions
,
858 ProfileSpecialInstructions
,
861 ProfileDcacheAccesses
,
862 ProfileMemoryBarrierCycles
,
863 ProfileLoadLinkedIssues
,
867 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
868 HalInstalledBusInformation
,
869 HalProfileSourceInformation
,
870 HalInformationClassUnused1
,
872 HalProcessorSpeedInformation
,
873 HalCallbackInformation
,
874 HalMapRegisterInformation
,
875 HalMcaLogInformation
,
876 HalFrameBufferCachingInformation
,
877 HalDisplayBiosInformation
,
878 HalProcessorFeatureInformation
,
879 HalNumaTopologyInterface
,
881 HalCmcLogInformation
,
882 HalCpeLogInformation
,
883 HalQueryMcaInterface
,
884 HalQueryAMLIIllegalIOPortAddresses
,
885 HalQueryMaxHotPlugMemoryAddress
,
886 HalPartitionIpiInterface
,
887 HalPlatformInformation
,
888 HalQueryProfileSourceList
889 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
891 typedef enum _HAL_SET_INFORMATION_CLASS
{
892 HalProfileSourceInterval
,
893 HalProfileSourceInterruptHandler
,
894 HalMcaRegisterDriver
,
895 HalKernelErrorHandler
,
896 HalCmcRegisterDriver
,
897 HalCpeRegisterDriver
,
901 HalGenerateCmcInterrupt
902 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
904 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
906 KPROFILE_SOURCE Source
;
908 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
910 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
912 KPROFILE_SOURCE Source
;
915 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
917 typedef struct _MAP_REGISTER_ENTRY
920 BOOLEAN WriteToDevice
;
921 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
928 PUCHAR TranslatedAddress
;
930 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
934 PHYSICAL_ADDRESS Start
;
935 PHYSICAL_ADDRESS MaxEnd
;
936 PVOID VirtualAddress
;
940 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
952 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
953 DEBUG_MEMORY_REQUIREMENTS Memory
;
954 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
956 typedef enum _KD_OPTION
{
957 KD_OPTION_SET_BLOCK_ENABLE
,
960 /* Function Type Defintions for Dispatch Functions */
961 struct _DEVICE_CONTROL_CONTEXT
;
964 (DDKAPI
*PDEVICE_CONTROL_COMPLETION
)(
965 IN
struct _DEVICE_CONTROL_CONTEXT
*ControlContext
);
967 typedef struct _DEVICE_CONTROL_CONTEXT
{
969 PDEVICE_HANDLER_OBJECT DeviceHandler
;
970 PDEVICE_OBJECT DeviceObject
;
975 } DEVICE_CONTROL_CONTEXT
, *PDEVICE_CONTROL_CONTEXT
;
977 typedef struct _PM_DISPATCH_TABLE
{
981 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
983 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
984 TranslateChildToParent
,
985 TranslateParentToChild
986 } RESOURCE_TRANSLATION_DIRECTION
;
989 (DDKAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
991 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
992 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
993 IN ULONG AlternativesCount
,
994 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
995 IN PDEVICE_OBJECT PhysicalDeviceObject
,
996 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
999 (DDKAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
1001 IN PIO_RESOURCE_DESCRIPTOR Source
,
1002 IN PDEVICE_OBJECT PhysicalDeviceObject
,
1003 OUT PULONG TargetCount
,
1004 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
1006 typedef struct _TRANSLATOR_INTERFACE
{
1010 PINTERFACE_REFERENCE InterfaceReference
;
1011 PINTERFACE_DEREFERENCE InterfaceDereference
;
1012 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
1013 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
1014 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
1017 (DDKAPI
*pHalDeviceControl
)(
1018 IN PDEVICE_HANDLER_OBJECT DeviceHandler
,
1019 IN PDEVICE_OBJECT DeviceObject
,
1020 IN ULONG ControlCode
,
1021 IN OUT PVOID Buffer OPTIONAL
,
1022 IN OUT PULONG BufferLength OPTIONAL
,
1024 IN PDEVICE_CONTROL_COMPLETION CompletionRoutine
);
1027 (FASTCALL
*pHalExamineMBR
)(
1028 IN PDEVICE_OBJECT DeviceObject
,
1029 IN ULONG SectorSize
,
1030 IN ULONG MBRTypeIdentifier
,
1034 (FASTCALL
*pHalIoAssignDriveLetters
)(
1035 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
1036 IN PSTRING NtDeviceName
,
1037 OUT PUCHAR NtSystemPath
,
1038 OUT PSTRING NtSystemPathString
);
1041 (FASTCALL
*pHalIoReadPartitionTable
)(
1042 IN PDEVICE_OBJECT DeviceObject
,
1043 IN ULONG SectorSize
,
1044 IN BOOLEAN ReturnRecognizedPartitions
,
1045 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
1048 (FASTCALL
*pHalIoSetPartitionInformation
)(
1049 IN PDEVICE_OBJECT DeviceObject
,
1050 IN ULONG SectorSize
,
1051 IN ULONG PartitionNumber
,
1052 IN ULONG PartitionType
);
1055 (FASTCALL
*pHalIoWritePartitionTable
)(
1056 IN PDEVICE_OBJECT DeviceObject
,
1057 IN ULONG SectorSize
,
1058 IN ULONG SectorsPerTrack
,
1059 IN ULONG NumberOfHeads
,
1060 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
1062 typedef PBUS_HANDLER
1063 (FASTCALL
*pHalHandlerForBus
)(
1064 IN INTERFACE_TYPE InterfaceType
,
1065 IN ULONG BusNumber
);
1068 (FASTCALL
*pHalReferenceBusHandler
)(
1069 IN PBUS_HANDLER BusHandler
);
1072 (DDKAPI
*pHalQuerySystemInformation
)(
1073 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
1074 IN ULONG BufferSize
,
1075 IN OUT PVOID Buffer
,
1076 OUT PULONG ReturnedLength
);
1079 (DDKAPI
*pHalSetSystemInformation
)(
1080 IN HAL_SET_INFORMATION_CLASS InformationClass
,
1081 IN ULONG BufferSize
,
1085 (DDKAPI
*pHalQueryBusSlots
)(
1086 IN PBUS_HANDLER BusHandler
,
1087 IN ULONG BufferSize
,
1088 OUT PULONG SlotNumbers
,
1089 OUT PULONG ReturnedLength
);
1092 (DDKAPI
*pHalInitPnpDriver
)(
1096 (DDKAPI
*pHalInitPowerManagement
)(
1097 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
1098 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
1100 typedef struct _DMA_ADAPTER
*
1101 (DDKAPI
*pHalGetDmaAdapter
)(
1103 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
1104 OUT PULONG NumberOfMapRegisters
);
1107 (DDKAPI
*pHalGetInterruptTranslator
)(
1108 IN INTERFACE_TYPE ParentInterfaceType
,
1109 IN ULONG ParentBusNumber
,
1110 IN INTERFACE_TYPE BridgeInterfaceType
,
1113 OUT PTRANSLATOR_INTERFACE Translator
,
1114 OUT PULONG BridgeBusNumber
);
1117 (DDKAPI
*pHalStartMirroring
)(
1121 (DDKAPI
*pHalEndMirroring
)(
1122 IN ULONG PassNumber
);
1125 (DDKAPI
*pHalMirrorPhysicalMemory
)(
1126 IN PHYSICAL_ADDRESS PhysicalAddress
,
1127 IN LARGE_INTEGER NumberOfBytes
);
1130 (DDKAPI
*pHalMirrorVerify
)(
1131 IN PHYSICAL_ADDRESS PhysicalAddress
,
1132 IN LARGE_INTEGER NumberOfBytes
);
1135 (DDKAPI
*pHalEndOfBoot
)(
1140 (DDKAPI
*pHalTranslateBusAddress
)(
1141 IN INTERFACE_TYPE InterfaceType
,
1143 IN PHYSICAL_ADDRESS BusAddress
,
1144 IN OUT PULONG AddressSpace
,
1145 OUT PPHYSICAL_ADDRESS TranslatedAddress
1150 (DDKAPI
*pHalAssignSlotResources
)(
1151 IN PUNICODE_STRING RegistryPath
,
1152 IN PUNICODE_STRING DriverClassName OPTIONAL
,
1153 IN PDRIVER_OBJECT DriverObject
,
1154 IN PDEVICE_OBJECT DeviceObject
,
1155 IN INTERFACE_TYPE BusType
,
1157 IN ULONG SlotNumber
,
1158 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
1163 (DDKAPI
*pHalHaltSystem
)(
1169 (DDKAPI
*pHalResetDisplay
)(
1175 (DDKAPI
*pHalVectorToIDTEntry
)(
1181 (DDKAPI
*pHalFindBusAddressTranslation
)(
1182 IN PHYSICAL_ADDRESS BusAddress
,
1183 IN OUT PULONG AddressSpace
,
1184 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
1185 IN OUT PULONG_PTR Context
,
1191 (DDKAPI
*pKdSetupPciDeviceForDebugging
)(
1192 IN PVOID LoaderBlock OPTIONAL
,
1193 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
1198 (DDKAPI
*pKdReleasePciDeviceForDebugging
)(
1199 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
1204 (DDKAPI
*pKdGetAcpiTablePhase0
)(
1205 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
1211 (DDKAPI
*pKdCheckPowerButton
)(
1217 (DDKAPI
*pHalGetInterruptVector
)(
1218 IN INTERFACE_TYPE InterfaceType
,
1220 IN ULONG BusInterruptLevel
,
1221 IN ULONG BusInterruptVector
,
1223 OUT PKAFFINITY Affinity
1228 (DDKAPI
*pHalGetVectorInput
)(
1230 IN KAFFINITY Affinity
,
1232 OUT PKINTERRUPT_POLARITY Polarity
1237 (DDKAPI
*pKdMapPhysicalMemory64
)(
1238 IN PHYSICAL_ADDRESS PhysicalAddress
,
1239 IN ULONG NumberPages
1244 (DDKAPI
*pKdUnmapVirtualAddress
)(
1245 IN PVOID VirtualAddress
,
1246 IN ULONG NumberPages
1251 (DDKAPI
*pKdGetPciDataByOffset
)(
1253 IN ULONG SlotNumber
,
1261 (DDKAPI
*pKdSetPciDataByOffset
)(
1263 IN ULONG SlotNumber
,
1270 (DDKAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
1271 ULONG Columns
, ULONG Rows
);
1275 pHalQuerySystemInformation HalQuerySystemInformation
;
1276 pHalSetSystemInformation HalSetSystemInformation
;
1277 pHalQueryBusSlots HalQueryBusSlots
;
1279 pHalExamineMBR HalExamineMBR
;
1280 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
1281 pHalIoReadPartitionTable HalIoReadPartitionTable
;
1282 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
1283 pHalIoWritePartitionTable HalIoWritePartitionTable
;
1284 pHalHandlerForBus HalReferenceHandlerForBus
;
1285 pHalReferenceBusHandler HalReferenceBusHandler
;
1286 pHalReferenceBusHandler HalDereferenceBusHandler
;
1287 pHalInitPnpDriver HalInitPnpDriver
;
1288 pHalInitPowerManagement HalInitPowerManagement
;
1289 pHalGetDmaAdapter HalGetDmaAdapter
;
1290 pHalGetInterruptTranslator HalGetInterruptTranslator
;
1291 pHalStartMirroring HalStartMirroring
;
1292 pHalEndMirroring HalEndMirroring
;
1293 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
1294 pHalEndOfBoot HalEndOfBoot
;
1295 pHalMirrorVerify HalMirrorVerify
;
1296 } HAL_DISPATCH
, *PHAL_DISPATCH
;
1298 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTHAL_)
1299 extern NTSYSAPI PHAL_DISPATCH HalDispatchTable
;
1300 #define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable)
1302 extern __declspec(dllexport
) HAL_DISPATCH HalDispatchTable
;
1303 #define HALDISPATCH (&HalDispatchTable)
1306 #define HAL_DISPATCH_VERSION 3
1307 #define HalDispatchTableVersion HALDISPATCH->Version
1308 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
1309 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
1310 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
1311 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
1312 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
1313 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
1314 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
1315 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
1316 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
1317 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
1318 #define HalStartMirroring HALDISPATCH->HalStartMirroring
1319 #define HalEndMirroring HALDISPATCH->HalEndMirroring
1320 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
1321 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
1322 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
1324 typedef enum _FILE_INFORMATION_CLASS
{
1325 FileDirectoryInformation
= 1,
1326 FileFullDirectoryInformation
,
1327 FileBothDirectoryInformation
,
1328 FileBasicInformation
,
1329 FileStandardInformation
,
1330 FileInternalInformation
,
1332 FileAccessInformation
,
1333 FileNameInformation
,
1334 FileRenameInformation
,
1335 FileLinkInformation
,
1336 FileNamesInformation
,
1337 FileDispositionInformation
,
1338 FilePositionInformation
,
1339 FileFullEaInformation
,
1340 FileModeInformation
,
1341 FileAlignmentInformation
,
1343 FileAllocationInformation
,
1344 FileEndOfFileInformation
,
1345 FileAlternateNameInformation
,
1346 FileStreamInformation
,
1347 FilePipeInformation
,
1348 FilePipeLocalInformation
,
1349 FilePipeRemoteInformation
,
1350 FileMailslotQueryInformation
,
1351 FileMailslotSetInformation
,
1352 FileCompressionInformation
,
1353 FileObjectIdInformation
,
1354 FileCompletionInformation
,
1355 FileMoveClusterInformation
,
1356 FileQuotaInformation
,
1357 FileReparsePointInformation
,
1358 FileNetworkOpenInformation
,
1359 FileAttributeTagInformation
,
1360 FileTrackingInformation
,
1361 FileIdBothDirectoryInformation
,
1362 FileIdFullDirectoryInformation
,
1363 FileValidDataLengthInformation
,
1364 FileShortNameInformation
,
1365 FileMaximumInformation
1366 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
1368 typedef struct _FILE_POSITION_INFORMATION
{
1369 LARGE_INTEGER CurrentByteOffset
;
1370 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
1372 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1373 ULONG AlignmentRequirement
;
1374 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1376 typedef struct _FILE_NAME_INFORMATION
{
1377 ULONG FileNameLength
;
1379 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1381 #include <pshpack8.h>
1382 typedef struct _FILE_BASIC_INFORMATION
{
1383 LARGE_INTEGER CreationTime
;
1384 LARGE_INTEGER LastAccessTime
;
1385 LARGE_INTEGER LastWriteTime
;
1386 LARGE_INTEGER ChangeTime
;
1387 ULONG FileAttributes
;
1388 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
1389 #include <poppack.h>
1391 typedef struct _FILE_STANDARD_INFORMATION
{
1392 LARGE_INTEGER AllocationSize
;
1393 LARGE_INTEGER EndOfFile
;
1394 ULONG NumberOfLinks
;
1395 BOOLEAN DeletePending
;
1397 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
1399 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
1400 LARGE_INTEGER CreationTime
;
1401 LARGE_INTEGER LastAccessTime
;
1402 LARGE_INTEGER LastWriteTime
;
1403 LARGE_INTEGER ChangeTime
;
1404 LARGE_INTEGER AllocationSize
;
1405 LARGE_INTEGER EndOfFile
;
1406 ULONG FileAttributes
;
1407 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
1409 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1410 ULONG FileAttributes
;
1412 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1414 typedef struct _FILE_DISPOSITION_INFORMATION
{
1416 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1418 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1419 LARGE_INTEGER EndOfFile
;
1420 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1422 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1423 LARGE_INTEGER ValidDataLength
;
1424 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1426 typedef union _FILE_SEGMENT_ELEMENT
{
1428 ULONGLONG Alignment
;
1429 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1431 typedef enum _FSINFOCLASS
{
1432 FileFsVolumeInformation
= 1,
1433 FileFsLabelInformation
,
1434 FileFsSizeInformation
,
1435 FileFsDeviceInformation
,
1436 FileFsAttributeInformation
,
1437 FileFsControlInformation
,
1438 FileFsFullSizeInformation
,
1439 FileFsObjectIdInformation
,
1440 FileFsDriverPathInformation
,
1441 FileFsMaximumInformation
1442 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
1444 typedef struct _FILE_FS_DEVICE_INFORMATION
{
1445 DEVICE_TYPE DeviceType
;
1446 ULONG Characteristics
;
1447 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
1449 typedef struct _FILE_FULL_EA_INFORMATION
{
1450 ULONG NextEntryOffset
;
1453 USHORT EaValueLength
;
1455 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
1457 /* ERESOURCE.Flag */
1459 #define ResourceNeverExclusive 0x0010
1460 #define ResourceReleaseByOtherThread 0x0020
1461 #define ResourceOwnedExclusive 0x0080
1463 #define RESOURCE_HASH_TABLE_SIZE 64
1465 typedef struct _DEVOBJ_EXTENSION
1469 PDEVICE_OBJECT DeviceObject
;
1470 } DEVOBJ_EXTENSION
, *PDEVOBJ_EXTENSION
;
1473 (DDKAPI
*PFAST_IO_CHECK_IF_POSSIBLE
)(
1474 IN
struct _FILE_OBJECT
*FileObject
,
1475 IN PLARGE_INTEGER FileOffset
,
1479 IN BOOLEAN CheckForReadOperation
,
1480 OUT PIO_STATUS_BLOCK IoStatus
,
1481 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1484 (DDKAPI
*PFAST_IO_READ
)(
1485 IN
struct _FILE_OBJECT
*FileObject
,
1486 IN PLARGE_INTEGER FileOffset
,
1491 OUT PIO_STATUS_BLOCK IoStatus
,
1492 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1495 (DDKAPI
*PFAST_IO_WRITE
)(
1496 IN
struct _FILE_OBJECT
*FileObject
,
1497 IN PLARGE_INTEGER FileOffset
,
1502 OUT PIO_STATUS_BLOCK IoStatus
,
1503 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1506 (DDKAPI
*PFAST_IO_QUERY_BASIC_INFO
)(
1507 IN
struct _FILE_OBJECT
*FileObject
,
1509 OUT PFILE_BASIC_INFORMATION Buffer
,
1510 OUT PIO_STATUS_BLOCK IoStatus
,
1511 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1514 (DDKAPI
*PFAST_IO_QUERY_STANDARD_INFO
)(
1515 IN
struct _FILE_OBJECT
*FileObject
,
1517 OUT PFILE_STANDARD_INFORMATION Buffer
,
1518 OUT PIO_STATUS_BLOCK IoStatus
,
1519 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1522 (DDKAPI
*PFAST_IO_LOCK
)(
1523 IN
struct _FILE_OBJECT
*FileObject
,
1524 IN PLARGE_INTEGER FileOffset
,
1525 IN PLARGE_INTEGER Length
,
1526 PEPROCESS ProcessId
,
1528 BOOLEAN FailImmediately
,
1529 BOOLEAN ExclusiveLock
,
1530 OUT PIO_STATUS_BLOCK IoStatus
,
1531 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1534 (DDKAPI
*PFAST_IO_UNLOCK_SINGLE
)(
1535 IN
struct _FILE_OBJECT
*FileObject
,
1536 IN PLARGE_INTEGER FileOffset
,
1537 IN PLARGE_INTEGER Length
,
1538 PEPROCESS ProcessId
,
1540 OUT PIO_STATUS_BLOCK IoStatus
,
1541 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1544 (DDKAPI
*PFAST_IO_UNLOCK_ALL
)(
1545 IN
struct _FILE_OBJECT
*FileObject
,
1546 PEPROCESS ProcessId
,
1547 OUT PIO_STATUS_BLOCK IoStatus
,
1548 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1551 (DDKAPI
*PFAST_IO_UNLOCK_ALL_BY_KEY
)(
1552 IN
struct _FILE_OBJECT
*FileObject
,
1555 OUT PIO_STATUS_BLOCK IoStatus
,
1556 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1559 (DDKAPI
*PFAST_IO_DEVICE_CONTROL
)(
1560 IN
struct _FILE_OBJECT
*FileObject
,
1562 IN PVOID InputBuffer OPTIONAL
,
1563 IN ULONG InputBufferLength
,
1564 OUT PVOID OutputBuffer OPTIONAL
,
1565 IN ULONG OutputBufferLength
,
1566 IN ULONG IoControlCode
,
1567 OUT PIO_STATUS_BLOCK IoStatus
,
1568 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1571 (DDKAPI
*PFAST_IO_ACQUIRE_FILE
)(
1572 IN
struct _FILE_OBJECT
*FileObject
);
1575 (DDKAPI
*PFAST_IO_RELEASE_FILE
)(
1576 IN
struct _FILE_OBJECT
*FileObject
);
1579 (DDKAPI
*PFAST_IO_DETACH_DEVICE
)(
1580 IN
struct _DEVICE_OBJECT
*SourceDevice
,
1581 IN
struct _DEVICE_OBJECT
*TargetDevice
);
1584 (DDKAPI
*PFAST_IO_QUERY_NETWORK_OPEN_INFO
)(
1585 IN
struct _FILE_OBJECT
*FileObject
,
1587 OUT
struct _FILE_NETWORK_OPEN_INFORMATION
*Buffer
,
1588 OUT
struct _IO_STATUS_BLOCK
*IoStatus
,
1589 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1592 (DDKAPI
*PFAST_IO_ACQUIRE_FOR_MOD_WRITE
)(
1593 IN
struct _FILE_OBJECT
*FileObject
,
1594 IN PLARGE_INTEGER EndingOffset
,
1595 OUT
struct _ERESOURCE
**ResourceToRelease
,
1596 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1599 (DDKAPI
*PFAST_IO_MDL_READ
)(
1600 IN
struct _FILE_OBJECT
*FileObject
,
1601 IN PLARGE_INTEGER FileOffset
,
1605 OUT PIO_STATUS_BLOCK IoStatus
,
1606 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1609 (DDKAPI
*PFAST_IO_MDL_READ_COMPLETE
)(
1610 IN
struct _FILE_OBJECT
*FileObject
,
1612 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1615 (DDKAPI
*PFAST_IO_PREPARE_MDL_WRITE
)(
1616 IN
struct _FILE_OBJECT
*FileObject
,
1617 IN PLARGE_INTEGER FileOffset
,
1621 OUT PIO_STATUS_BLOCK IoStatus
,
1622 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1625 (DDKAPI
*PFAST_IO_MDL_WRITE_COMPLETE
)(
1626 IN
struct _FILE_OBJECT
*FileObject
,
1627 IN PLARGE_INTEGER FileOffset
,
1629 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1632 (DDKAPI
*PFAST_IO_READ_COMPRESSED
)(
1633 IN
struct _FILE_OBJECT
*FileObject
,
1634 IN PLARGE_INTEGER FileOffset
,
1639 OUT PIO_STATUS_BLOCK IoStatus
,
1640 OUT
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
1641 IN ULONG CompressedDataInfoLength
,
1642 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1645 (DDKAPI
*PFAST_IO_WRITE_COMPRESSED
)(
1646 IN
struct _FILE_OBJECT
*FileObject
,
1647 IN PLARGE_INTEGER FileOffset
,
1652 OUT PIO_STATUS_BLOCK IoStatus
,
1653 IN
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
1654 IN ULONG CompressedDataInfoLength
,
1655 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1658 (DDKAPI
*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED
)(
1659 IN
struct _FILE_OBJECT
*FileObject
,
1661 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1664 (DDKAPI
*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)(
1665 IN
struct _FILE_OBJECT
*FileObject
,
1666 IN PLARGE_INTEGER FileOffset
,
1668 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1671 (DDKAPI
*PFAST_IO_QUERY_OPEN
)(
1672 IN
struct _IRP
*Irp
,
1673 OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
,
1674 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1677 (DDKAPI
*PFAST_IO_RELEASE_FOR_MOD_WRITE
)(
1678 IN
struct _FILE_OBJECT
*FileObject
,
1679 IN
struct _ERESOURCE
*ResourceToRelease
,
1680 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1683 (DDKAPI
*PFAST_IO_ACQUIRE_FOR_CCFLUSH
)(
1684 IN
struct _FILE_OBJECT
*FileObject
,
1685 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1688 (DDKAPI
*PFAST_IO_RELEASE_FOR_CCFLUSH
) (
1689 IN
struct _FILE_OBJECT
*FileObject
,
1690 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1692 typedef struct _FAST_IO_DISPATCH
{
1693 ULONG SizeOfFastIoDispatch
;
1694 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible
;
1695 PFAST_IO_READ FastIoRead
;
1696 PFAST_IO_WRITE FastIoWrite
;
1697 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo
;
1698 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo
;
1699 PFAST_IO_LOCK FastIoLock
;
1700 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle
;
1701 PFAST_IO_UNLOCK_ALL FastIoUnlockAll
;
1702 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey
;
1703 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl
;
1704 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection
;
1705 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection
;
1706 PFAST_IO_DETACH_DEVICE FastIoDetachDevice
;
1707 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo
;
1708 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite
;
1709 PFAST_IO_MDL_READ MdlRead
;
1710 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete
;
1711 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite
;
1712 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete
;
1713 PFAST_IO_READ_COMPRESSED FastIoReadCompressed
;
1714 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed
;
1715 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed
;
1716 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed
;
1717 PFAST_IO_QUERY_OPEN FastIoQueryOpen
;
1718 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite
;
1719 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush
;
1720 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush
;
1721 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
1723 typedef struct _SECTION_OBJECT_POINTERS
{
1724 PVOID DataSectionObject
;
1725 PVOID SharedCacheMap
;
1726 PVOID ImageSectionObject
;
1727 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
1729 typedef struct _IO_COMPLETION_CONTEXT
{
1732 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
1734 /* FILE_OBJECT.Flags */
1736 #define FO_FILE_OPEN 0x00000001
1737 #define FO_SYNCHRONOUS_IO 0x00000002
1738 #define FO_ALERTABLE_IO 0x00000004
1739 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
1740 #define FO_WRITE_THROUGH 0x00000010
1741 #define FO_SEQUENTIAL_ONLY 0x00000020
1742 #define FO_CACHE_SUPPORTED 0x00000040
1743 #define FO_NAMED_PIPE 0x00000080
1744 #define FO_STREAM_FILE 0x00000100
1745 #define FO_MAILSLOT 0x00000200
1746 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
1747 #define FO_DIRECT_DEVICE_OPEN 0x00000800
1748 #define FO_FILE_MODIFIED 0x00001000
1749 #define FO_FILE_SIZE_CHANGED 0x00002000
1750 #define FO_CLEANUP_COMPLETE 0x00004000
1751 #define FO_TEMPORARY_FILE 0x00008000
1752 #define FO_DELETE_ON_CLOSE 0x00010000
1753 #define FO_OPENED_CASE_SENSITIVE 0x00020000
1754 #define FO_HANDLE_CREATED 0x00040000
1755 #define FO_FILE_FAST_IO_READ 0x00080000
1756 #define FO_RANDOM_ACCESS 0x00100000
1757 #define FO_FILE_OPEN_CANCELLED 0x00200000
1758 #define FO_VOLUME_OPEN 0x00400000
1759 #define FO_REMOTE_ORIGIN 0x01000000
1761 typedef struct _FILE_OBJECT
1765 PDEVICE_OBJECT DeviceObject
;
1769 PSECTION_OBJECT_POINTERS SectionObjectPointer
;
1770 PVOID PrivateCacheMap
;
1771 NTSTATUS FinalStatus
;
1772 struct _FILE_OBJECT
*RelatedFileObject
;
1773 BOOLEAN LockOperation
;
1774 BOOLEAN DeletePending
;
1776 BOOLEAN WriteAccess
;
1777 BOOLEAN DeleteAccess
;
1779 BOOLEAN SharedWrite
;
1780 BOOLEAN SharedDelete
;
1782 UNICODE_STRING FileName
;
1783 LARGE_INTEGER CurrentByteOffset
;
1784 volatile ULONG Waiters
;
1785 volatile ULONG Busy
;
1789 volatile PIO_COMPLETION_CONTEXT CompletionContext
;
1790 KSPIN_LOCK IrpListLock
;
1792 volatile PVOID FileObjectExtension
;
1794 typedef struct _FILE_OBJECT
*PFILE_OBJECT
;
1796 typedef enum _SECURITY_OPERATION_CODE
{
1797 SetSecurityDescriptor
,
1798 QuerySecurityDescriptor
,
1799 DeleteSecurityDescriptor
,
1800 AssignSecurityDescriptor
1801 } SECURITY_OPERATION_CODE
, *PSECURITY_OPERATION_CODE
;
1803 #define INITIAL_PRIVILEGE_COUNT 3
1805 typedef struct _INITIAL_PRIVILEGE_SET
{
1806 ULONG PrivilegeCount
;
1808 LUID_AND_ATTRIBUTES Privilege
[INITIAL_PRIVILEGE_COUNT
];
1809 } INITIAL_PRIVILEGE_SET
, * PINITIAL_PRIVILEGE_SET
;
1811 #define SE_MIN_WELL_KNOWN_PRIVILEGE 2
1812 #define SE_CREATE_TOKEN_PRIVILEGE 2
1813 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3
1814 #define SE_LOCK_MEMORY_PRIVILEGE 4
1815 #define SE_INCREASE_QUOTA_PRIVILEGE 5
1816 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
1817 #define SE_MACHINE_ACCOUNT_PRIVILEGE 6
1818 #define SE_TCB_PRIVILEGE 7
1819 #define SE_SECURITY_PRIVILEGE 8
1820 #define SE_TAKE_OWNERSHIP_PRIVILEGE 9
1821 #define SE_LOAD_DRIVER_PRIVILEGE 10
1822 #define SE_SYSTEM_PROFILE_PRIVILEGE 11
1823 #define SE_SYSTEMTIME_PRIVILEGE 12
1824 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
1825 #define SE_INC_BASE_PRIORITY_PRIVILEGE 14
1826 #define SE_CREATE_PAGEFILE_PRIVILEGE 15
1827 #define SE_CREATE_PERMANENT_PRIVILEGE 16
1828 #define SE_BACKUP_PRIVILEGE 17
1829 #define SE_RESTORE_PRIVILEGE 18
1830 #define SE_SHUTDOWN_PRIVILEGE 19
1831 #define SE_DEBUG_PRIVILEGE 20
1832 #define SE_AUDIT_PRIVILEGE 21
1833 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22
1834 #define SE_CHANGE_NOTIFY_PRIVILEGE 23
1835 #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24
1836 #define SE_UNDOCK_PRIVILEGE 25
1837 #define SE_SYNC_AGENT_PRIVILEGE 26
1838 #define SE_ENABLE_DELEGATION_PRIVILEGE 27
1839 #define SE_MANAGE_VOLUME_PRIVILEGE 28
1840 #define SE_IMPERSONATE_PRIVILEGE 29
1841 #define SE_CREATE_GLOBAL_PRIVILEGE 30
1842 #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_GLOBAL_PRIVILEGE
1844 typedef struct _SECURITY_SUBJECT_CONTEXT
{
1845 PACCESS_TOKEN ClientToken
;
1846 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
1847 PACCESS_TOKEN PrimaryToken
;
1848 PVOID ProcessAuditId
;
1849 } SECURITY_SUBJECT_CONTEXT
, *PSECURITY_SUBJECT_CONTEXT
;
1851 #include <pshpack4.h>
1852 typedef struct _ACCESS_STATE
{
1854 BOOLEAN SecurityEvaluated
;
1855 BOOLEAN GenerateAudit
;
1856 BOOLEAN GenerateOnClose
;
1857 BOOLEAN PrivilegesAllocated
;
1859 ACCESS_MASK RemainingDesiredAccess
;
1860 ACCESS_MASK PreviouslyGrantedAccess
;
1861 ACCESS_MASK OriginalDesiredAccess
;
1862 SECURITY_SUBJECT_CONTEXT SubjectSecurityContext
;
1863 PSECURITY_DESCRIPTOR SecurityDescriptor
;
1866 INITIAL_PRIVILEGE_SET InitialPrivilegeSet
;
1867 PRIVILEGE_SET PrivilegeSet
;
1870 BOOLEAN AuditPrivileges
;
1871 UNICODE_STRING ObjectName
;
1872 UNICODE_STRING ObjectTypeName
;
1873 } ACCESS_STATE
, *PACCESS_STATE
;
1874 #include <poppack.h>
1876 typedef struct _IO_SECURITY_CONTEXT
{
1877 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
1878 PACCESS_STATE AccessState
;
1879 ACCESS_MASK DesiredAccess
;
1880 ULONG FullCreateOptions
;
1881 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
1883 #define IO_TYPE_ADAPTER 1
1884 #define IO_TYPE_CONTROLLER 2
1885 #define IO_TYPE_DEVICE 3
1886 #define IO_TYPE_DRIVER 4
1887 #define IO_TYPE_FILE 5
1888 #define IO_TYPE_IRP 6
1889 #define IO_TYPE_MASTER_ADAPTER 7
1890 #define IO_TYPE_OPEN_PACKET 8
1891 #define IO_TYPE_TIMER 9
1892 #define IO_TYPE_VPB 10
1893 #define IO_TYPE_ERROR_LOG 11
1894 #define IO_TYPE_ERROR_MESSAGE 12
1895 #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
1897 #define IO_TYPE_CSQ_IRP_CONTEXT 1
1898 #define IO_TYPE_CSQ 2
1902 typedef struct _IO_CSQ_IRP_CONTEXT
{
1905 struct _IO_CSQ
*Csq
;
1906 } IO_CSQ_IRP_CONTEXT
, *PIO_CSQ_IRP_CONTEXT
;
1909 (DDKAPI
*PIO_CSQ_INSERT_IRP
)(
1910 IN
struct _IO_CSQ
*Csq
,
1914 (DDKAPI
*PIO_CSQ_REMOVE_IRP
)(
1915 IN
struct _IO_CSQ
*Csq
,
1919 (DDKAPI
*PIO_CSQ_PEEK_NEXT_IRP
)(
1920 IN
struct _IO_CSQ
*Csq
,
1922 IN PVOID PeekContext
);
1925 (DDKAPI
*PIO_CSQ_ACQUIRE_LOCK
)(
1926 IN
struct _IO_CSQ
*Csq
,
1930 (DDKAPI
*PIO_CSQ_RELEASE_LOCK
)(
1931 IN
struct _IO_CSQ
*Csq
,
1935 (DDKAPI
*PIO_CSQ_COMPLETE_CANCELED_IRP
)(
1936 IN
struct _IO_CSQ
*Csq
,
1939 typedef struct _IO_CSQ
{
1941 PIO_CSQ_INSERT_IRP CsqInsertIrp
;
1942 PIO_CSQ_REMOVE_IRP CsqRemoveIrp
;
1943 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
;
1944 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
;
1945 PIO_CSQ_RELEASE_LOCK CsqReleaseLock
;
1946 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
;
1947 PVOID ReservePointer
;
1950 #if !defined(_ALPHA_)
1951 #include <pshpack4.h>
1953 typedef struct _IO_STACK_LOCATION
{
1954 UCHAR MajorFunction
;
1955 UCHAR MinorFunction
;
1960 PIO_SECURITY_CONTEXT SecurityContext
;
1962 USHORT POINTER_ALIGNMENT FileAttributes
;
1964 ULONG POINTER_ALIGNMENT EaLength
;
1968 ULONG POINTER_ALIGNMENT Key
;
1969 LARGE_INTEGER ByteOffset
;
1973 ULONG POINTER_ALIGNMENT Key
;
1974 LARGE_INTEGER ByteOffset
;
1978 PUNICODE_STRING FileName
;
1979 FILE_INFORMATION_CLASS FileInformationClass
;
1984 ULONG CompletionFilter
;
1988 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
1992 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
1993 PFILE_OBJECT FileObject
;
1994 _ANONYMOUS_UNION
union {
1995 _ANONYMOUS_STRUCT
struct {
1996 BOOLEAN ReplaceIfExists
;
1997 BOOLEAN AdvanceOnly
;
2000 HANDLE DeleteHandle
;
2014 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
2018 FS_INFORMATION_CLASS FsInformationClass
;
2021 ULONG OutputBufferLength
;
2022 ULONG InputBufferLength
;
2023 ULONG FsControlCode
;
2024 PVOID Type3InputBuffer
;
2025 } FileSystemControl
;
2027 PLARGE_INTEGER Length
;
2029 LARGE_INTEGER ByteOffset
;
2032 ULONG OutputBufferLength
;
2033 ULONG POINTER_ALIGNMENT InputBufferLength
;
2034 ULONG POINTER_ALIGNMENT IoControlCode
;
2035 PVOID Type3InputBuffer
;
2038 SECURITY_INFORMATION SecurityInformation
;
2039 ULONG POINTER_ALIGNMENT Length
;
2042 SECURITY_INFORMATION SecurityInformation
;
2043 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2047 PDEVICE_OBJECT DeviceObject
;
2051 PDEVICE_OBJECT DeviceObject
;
2054 struct _SCSI_REQUEST_BLOCK
*Srb
;
2059 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
2060 ULONG SidListLength
;
2066 DEVICE_RELATION_TYPE Type
;
2067 } QueryDeviceRelations
;
2069 CONST GUID
*InterfaceType
;
2072 PINTERFACE Interface
;
2073 PVOID InterfaceSpecificData
;
2076 PDEVICE_CAPABILITIES Capabilities
;
2077 } DeviceCapabilities
;
2079 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
2080 } FilterResourceRequirements
;
2085 ULONG POINTER_ALIGNMENT Length
;
2091 BUS_QUERY_ID_TYPE IdType
;
2094 DEVICE_TEXT_TYPE DeviceTextType
;
2095 LCID POINTER_ALIGNMENT LocaleId
;
2099 BOOLEAN Reserved
[3];
2100 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type
;
2101 } UsageNotification
;
2103 SYSTEM_POWER_STATE PowerState
;
2106 PPOWER_SEQUENCE PowerSequence
;
2109 ULONG SystemContext
;
2110 POWER_STATE_TYPE POINTER_ALIGNMENT Type
;
2111 POWER_STATE POINTER_ALIGNMENT State
;
2112 POWER_ACTION POINTER_ALIGNMENT ShutdownType
;
2115 PCM_RESOURCE_LIST AllocatedResources
;
2116 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
2119 ULONG_PTR ProviderId
;
2131 PDEVICE_OBJECT DeviceObject
;
2132 PFILE_OBJECT FileObject
;
2133 PIO_COMPLETION_ROUTINE CompletionRoutine
;
2135 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
2136 #if !defined(_ALPHA_)
2137 #include <poppack.h>
2140 /* IO_STACK_LOCATION.Control */
2142 #define SL_PENDING_RETURNED 0x01
2143 #define SL_ERROR_RETURNED 0x02
2144 #define SL_INVOKE_ON_CANCEL 0x20
2145 #define SL_INVOKE_ON_SUCCESS 0x40
2146 #define SL_INVOKE_ON_ERROR 0x80
2148 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
2150 #define PCI_WHICHSPACE_CONFIG 0x0
2151 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
2153 typedef enum _KEY_INFORMATION_CLASS
{
2154 KeyBasicInformation
,
2158 KeyCachedInformation
,
2160 } KEY_INFORMATION_CLASS
;
2162 typedef struct _KEY_BASIC_INFORMATION
{
2163 LARGE_INTEGER LastWriteTime
;
2167 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
2169 typedef struct _KEY_FULL_INFORMATION
{
2170 LARGE_INTEGER LastWriteTime
;
2178 ULONG MaxValueNameLen
;
2179 ULONG MaxValueDataLen
;
2181 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
2183 typedef struct _KEY_NODE_INFORMATION
{
2184 LARGE_INTEGER LastWriteTime
;
2190 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
2192 typedef struct _KEY_VALUE_BASIC_INFORMATION
{
2197 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
2199 typedef struct _KEY_VALUE_FULL_INFORMATION
{
2206 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
2208 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
{
2213 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
2215 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
{
2219 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64
;
2221 typedef struct _KEY_VALUE_ENTRY
{
2222 PUNICODE_STRING ValueName
;
2226 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
2228 typedef enum _KEY_VALUE_INFORMATION_CLASS
{
2229 KeyValueBasicInformation
,
2230 KeyValueFullInformation
,
2231 KeyValuePartialInformation
,
2232 KeyValueFullInformationAlign64
,
2233 KeyValuePartialInformationAlign64
2234 } KEY_VALUE_INFORMATION_CLASS
;
2236 typedef struct _KEY_WRITE_TIME_INFORMATION
{
2237 LARGE_INTEGER LastWriteTime
;
2238 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
2240 typedef struct _KEY_USER_FLAGS_INFORMATION
{
2242 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
2244 typedef enum _KEY_SET_INFORMATION_CLASS
{
2245 KeyWriteTimeInformation
,
2246 KeyUserFlagsInformation
,
2248 } KEY_SET_INFORMATION_CLASS
;
2250 /* KEY_VALUE_Xxx.Type */
2254 #define REG_EXPAND_SZ 2
2255 #define REG_BINARY 3
2257 #define REG_DWORD_LITTLE_ENDIAN 4
2258 #define REG_DWORD_BIG_ENDIAN 5
2260 #define REG_MULTI_SZ 7
2261 #define REG_RESOURCE_LIST 8
2262 #define REG_FULL_RESOURCE_DESCRIPTOR 9
2263 #define REG_RESOURCE_REQUIREMENTS_LIST 10
2264 #define REG_QWORD 11
2265 #define REG_QWORD_LITTLE_ENDIAN 11
2267 #define PCI_TYPE0_ADDRESSES 6
2268 #define PCI_TYPE1_ADDRESSES 2
2269 #define PCI_TYPE2_ADDRESSES 5
2271 typedef struct _PCI_COMMON_CONFIG
{
2280 UCHAR CacheLineSize
;
2285 struct _PCI_HEADER_TYPE_0
{
2286 ULONG BaseAddresses
[PCI_TYPE0_ADDRESSES
];
2290 ULONG ROMBaseAddress
;
2291 UCHAR CapabilitiesPtr
;
2294 UCHAR InterruptLine
;
2297 UCHAR MaximumLatency
;
2299 struct _PCI_HEADER_TYPE_1
{
2300 ULONG BaseAddresses
[PCI_TYPE1_ADDRESSES
];
2303 UCHAR SubordinateBus
;
2304 UCHAR SecondaryLatency
;
2307 USHORT SecondaryStatus
;
2310 USHORT PrefetchBase
;
2311 USHORT PrefetchLimit
;
2312 ULONG PrefetchBaseUpper32
;
2313 ULONG PrefetchLimitUpper32
;
2314 USHORT IOBaseUpper16
;
2315 USHORT IOLimitUpper16
;
2316 UCHAR CapabilitiesPtr
;
2318 ULONG ROMBaseAddress
;
2319 UCHAR InterruptLine
;
2321 USHORT BridgeControl
;
2323 struct _PCI_HEADER_TYPE_2
{
2324 ULONG SocketRegistersBaseAddress
;
2325 UCHAR CapabilitiesPtr
;
2327 USHORT SecondaryStatus
;
2330 UCHAR SubordinateBus
;
2331 UCHAR SecondaryLatency
;
2335 } Range
[PCI_TYPE2_ADDRESSES
- 1];
2336 UCHAR InterruptLine
;
2338 USHORT BridgeControl
;
2341 UCHAR DeviceSpecific
[192];
2342 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
2344 /* PCI_COMMON_CONFIG.Command */
2346 #define PCI_ENABLE_IO_SPACE 0x0001
2347 #define PCI_ENABLE_MEMORY_SPACE 0x0002
2348 #define PCI_ENABLE_BUS_MASTER 0x0004
2349 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
2350 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
2351 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
2352 #define PCI_ENABLE_PARITY 0x0040
2353 #define PCI_ENABLE_WAIT_CYCLE 0x0080
2354 #define PCI_ENABLE_SERR 0x0100
2355 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
2357 /* PCI_COMMON_CONFIG.Status */
2359 #define PCI_STATUS_CAPABILITIES_LIST 0x0010
2360 #define PCI_STATUS_66MHZ_CAPABLE 0x0020
2361 #define PCI_STATUS_UDF_SUPPORTED 0x0040
2362 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
2363 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
2364 #define PCI_STATUS_DEVSEL 0x0600
2365 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
2366 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
2367 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
2368 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
2369 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
2371 /* PCI_COMMON_CONFIG.HeaderType */
2373 #define PCI_MULTIFUNCTION 0x80
2374 #define PCI_DEVICE_TYPE 0x00
2375 #define PCI_BRIDGE_TYPE 0x01
2376 #define PCI_CARDBUS_BRIDGE_TYPE 0x02
2378 #define PCI_CONFIGURATION_TYPE(PciData) \
2379 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
2381 #define PCI_MULTIFUNCTION_DEVICE(PciData) \
2382 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
2384 /* PCI device classes */
2386 #define PCI_CLASS_PRE_20 0x00
2387 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
2388 #define PCI_CLASS_NETWORK_CTLR 0x02
2389 #define PCI_CLASS_DISPLAY_CTLR 0x03
2390 #define PCI_CLASS_MULTIMEDIA_DEV 0x04
2391 #define PCI_CLASS_MEMORY_CTLR 0x05
2392 #define PCI_CLASS_BRIDGE_DEV 0x06
2393 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
2394 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
2395 #define PCI_CLASS_INPUT_DEV 0x09
2396 #define PCI_CLASS_DOCKING_STATION 0x0a
2397 #define PCI_CLASS_PROCESSOR 0x0b
2398 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
2400 /* PCI device subclasses for class 0 */
2402 #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
2403 #define PCI_SUBCLASS_PRE_20_VGA 0x01
2405 /* PCI device subclasses for class 1 (mass storage controllers)*/
2407 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
2408 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
2409 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
2410 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
2411 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
2412 #define PCI_SUBCLASS_MSC_OTHER 0x80
2414 /* PCI device subclasses for class 2 (network controllers)*/
2416 #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
2417 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
2418 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
2419 #define PCI_SUBCLASS_NET_ATM_CTLR 0x03
2420 #define PCI_SUBCLASS_NET_OTHER 0x80
2422 /* PCI device subclasses for class 3 (display controllers)*/
2424 #define PCI_SUBCLASS_VID_VGA_CTLR 0x00
2425 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01
2426 #define PCI_SUBCLASS_VID_3D_CTLR 0x02
2427 #define PCI_SUBCLASS_VID_OTHER 0x80
2429 /* PCI device subclasses for class 4 (multimedia device)*/
2431 #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
2432 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
2433 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
2434 #define PCI_SUBCLASS_MM_OTHER 0x80
2436 /* PCI device subclasses for class 5 (memory controller)*/
2438 #define PCI_SUBCLASS_MEM_RAM 0x00
2439 #define PCI_SUBCLASS_MEM_FLASH 0x01
2440 #define PCI_SUBCLASS_MEM_OTHER 0x80
2442 /* PCI device subclasses for class 6 (bridge device)*/
2444 #define PCI_SUBCLASS_BR_HOST 0x00
2445 #define PCI_SUBCLASS_BR_ISA 0x01
2446 #define PCI_SUBCLASS_BR_EISA 0x02
2447 #define PCI_SUBCLASS_BR_MCA 0x03
2448 #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
2449 #define PCI_SUBCLASS_BR_PCMCIA 0x05
2450 #define PCI_SUBCLASS_BR_NUBUS 0x06
2451 #define PCI_SUBCLASS_BR_CARDBUS 0x07
2452 #define PCI_SUBCLASS_BR_OTHER 0x80
2454 /* PCI device subclasses for class C (serial bus controller)*/
2456 #define PCI_SUBCLASS_SB_IEEE1394 0x00
2457 #define PCI_SUBCLASS_SB_ACCESS 0x01
2458 #define PCI_SUBCLASS_SB_SSA 0x02
2459 #define PCI_SUBCLASS_SB_USB 0x03
2460 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
2461 #define PCI_SUBCLASS_SB_SMBUS 0x05
2463 #define PCI_MAX_DEVICES 32
2464 #define PCI_MAX_FUNCTION 8
2465 #define PCI_MAX_BRIDGE_NUMBER 0xFF
2466 #define PCI_INVALID_VENDORID 0xFFFF
2467 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
2469 #define PCI_ADDRESS_MEMORY_SPACE 0x00000000
2470 #define PCI_ADDRESS_IO_SPACE 0x00000001
2471 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
2472 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
2473 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
2474 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
2475 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
2477 #define PCI_TYPE_32BIT 0
2478 #define PCI_TYPE_20BIT 2
2479 #define PCI_TYPE_64BIT 4
2481 typedef struct _PCI_SLOT_NUMBER
{
2484 ULONG DeviceNumber
: 5;
2485 ULONG FunctionNumber
: 3;
2486 ULONG Reserved
: 24;
2490 } PCI_SLOT_NUMBER
, *PPCI_SLOT_NUMBER
;
2492 #define POOL_COLD_ALLOCATION 256
2493 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
2494 #define POOL_RAISE_IF_ALLOCATION_FAILURE 16
2496 typedef struct _OSVERSIONINFOA
{
2497 ULONG dwOSVersionInfoSize
;
2498 ULONG dwMajorVersion
;
2499 ULONG dwMinorVersion
;
2500 ULONG dwBuildNumber
;
2502 CHAR szCSDVersion
[128];
2503 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
2505 typedef struct _OSVERSIONINFOW
{
2506 ULONG dwOSVersionInfoSize
;
2507 ULONG dwMajorVersion
;
2508 ULONG dwMinorVersion
;
2509 ULONG dwBuildNumber
;
2511 WCHAR szCSDVersion
[128];
2512 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
2515 typedef OSVERSIONINFOW OSVERSIONINFO
;
2516 typedef POSVERSIONINFOW POSVERSIONINFO
;
2517 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
2519 typedef OSVERSIONINFOA OSVERSIONINFO
;
2520 typedef POSVERSIONINFOA POSVERSIONINFO
;
2521 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
2524 typedef struct _OSVERSIONINFOEXA
{
2525 ULONG dwOSVersionInfoSize
;
2526 ULONG dwMajorVersion
;
2527 ULONG dwMinorVersion
;
2528 ULONG dwBuildNumber
;
2530 CHAR szCSDVersion
[128];
2531 USHORT wServicePackMajor
;
2532 USHORT wServicePackMinor
;
2536 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
2538 typedef struct _OSVERSIONINFOEXW
{
2539 ULONG dwOSVersionInfoSize
;
2540 ULONG dwMajorVersion
;
2541 ULONG dwMinorVersion
;
2542 ULONG dwBuildNumber
;
2544 WCHAR szCSDVersion
[128];
2545 USHORT wServicePackMajor
;
2546 USHORT wServicePackMinor
;
2550 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
2553 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
2554 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
2555 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
2557 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
2558 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
2559 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
2565 VerSetConditionMask(
2566 IN ULONGLONG ConditionMask
,
2568 IN UCHAR Condition
);
2570 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
2571 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
2572 (TypeBitMask), (ComparisonType)))
2574 /* RtlVerifyVersionInfo() TypeMask */
2576 #define VER_MINORVERSION 0x0000001
2577 #define VER_MAJORVERSION 0x0000002
2578 #define VER_BUILDNUMBER 0x0000004
2579 #define VER_PLATFORMID 0x0000008
2580 #define VER_SERVICEPACKMINOR 0x0000010
2581 #define VER_SERVICEPACKMAJOR 0x0000020
2582 #define VER_SUITENAME 0x0000040
2583 #define VER_PRODUCT_TYPE 0x0000080
2585 /* RtlVerifyVersionInfo() ComparisonType */
2588 #define VER_GREATER 2
2589 #define VER_GREATER_EQUAL 3
2591 #define VER_LESS_EQUAL 5
2595 #define VER_CONDITION_MASK 7
2596 #define VER_NUM_BITS_PER_CONDITION_MASK 3
2601 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
) (
2603 struct _RTL_RANGE
*Range
2606 typedef enum _EVENT_TYPE
{
2608 SynchronizationEvent
2611 typedef enum _KWAIT_REASON
{
2649 typedef struct _KWAIT_BLOCK
{
2650 LIST_ENTRY WaitListEntry
;
2651 struct _KTHREAD
* RESTRICTED_POINTER Thread
;
2653 struct _KWAIT_BLOCK
* RESTRICTED_POINTER NextWaitBlock
;
2657 } KWAIT_BLOCK
, *PKWAIT_BLOCK
, *RESTRICTED_POINTER PRKWAIT_BLOCK
;
2659 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK
* PIO_REMOVE_LOCK_TRACKING_BLOCK
;
2661 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK
{
2663 BOOLEAN Reserved
[3];
2664 volatile LONG IoCount
;
2666 } IO_REMOVE_LOCK_COMMON_BLOCK
;
2668 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK
{
2671 LONGLONG MaxLockedTicks
;
2673 LIST_ENTRY LockList
;
2675 volatile LONG LowMemoryCount
;
2678 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks
;
2679 } IO_REMOVE_LOCK_DBG_BLOCK
;
2681 typedef struct _IO_REMOVE_LOCK
{
2682 IO_REMOVE_LOCK_COMMON_BLOCK Common
;
2684 IO_REMOVE_LOCK_DBG_BLOCK Dbg
;
2686 } IO_REMOVE_LOCK
, *PIO_REMOVE_LOCK
;
2688 typedef struct _IO_WORKITEM
*PIO_WORKITEM
;
2691 (DDKAPI IO_WORKITEM_ROUTINE
)(
2692 IN PDEVICE_OBJECT DeviceObject
,
2694 typedef IO_WORKITEM_ROUTINE
*PIO_WORKITEM_ROUTINE
;
2696 typedef struct _SHARE_ACCESS
{
2704 } SHARE_ACCESS
, *PSHARE_ACCESS
;
2706 typedef enum _KINTERRUPT_MODE
{
2711 #define THREAD_WAIT_OBJECTS 3
2714 (DDKAPI
*PKINTERRUPT_ROUTINE
)(
2717 typedef enum _CREATE_FILE_TYPE
{
2719 CreateFileTypeNamedPipe
,
2720 CreateFileTypeMailslot
2723 typedef struct _CONFIGURATION_INFORMATION
{
2728 ULONG ScsiPortCount
;
2730 ULONG ParallelCount
;
2731 BOOLEAN AtDiskPrimaryAddressClaimed
;
2732 BOOLEAN AtDiskSecondaryAddressClaimed
;
2734 ULONG MediumChangerCount
;
2735 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
2737 typedef enum _CONFIGURATION_TYPE
{
2740 FloatingPointProcessor
,
2750 MultiFunctionAdapter
,
2764 FloppyDiskPeripheral
,
2777 RealModeIrqRoutingTable
,
2778 RealModePCIEnumeration
,
2780 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
2782 #define IO_FORCE_ACCESS_CHECK 0x001
2783 #define IO_NO_PARAMETER_CHECKING 0x100
2785 #define IO_REPARSE 0x0
2786 #define IO_REMOUNT 0x1
2789 (DDKAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
2791 IN PUNICODE_STRING PathName
,
2792 IN INTERFACE_TYPE BusType
,
2794 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
2795 IN CONFIGURATION_TYPE ControllerType
,
2796 IN ULONG ControllerNumber
,
2797 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
2798 IN CONFIGURATION_TYPE PeripheralType
,
2799 IN ULONG PeripheralNumber
,
2800 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
2802 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
2803 IoQueryDeviceIdentifier
= 0,
2804 IoQueryDeviceConfigurationData
,
2805 IoQueryDeviceComponentInformation
,
2806 IoQueryDeviceMaxData
2807 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
2809 typedef enum _KBUGCHECK_CALLBACK_REASON
{
2811 KbCallbackReserved1
,
2812 KbCallbackSecondaryDumpData
,
2814 } KBUGCHECK_CALLBACK_REASON
;
2816 struct _KBUGCHECK_REASON_CALLBACK_RECORD
;
2819 (DDKAPI
*PKBUGCHECK_REASON_CALLBACK_ROUTINE
)(
2820 IN KBUGCHECK_CALLBACK_REASON Reason
,
2821 IN
struct _KBUGCHECK_REASON_CALLBACK_RECORD
*Record
,
2822 IN OUT PVOID ReasonSpecificData
,
2823 IN ULONG ReasonSpecificDataLength
);
2825 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD
{
2827 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
;
2830 KBUGCHECK_CALLBACK_REASON Reason
;
2832 } KBUGCHECK_REASON_CALLBACK_RECORD
, *PKBUGCHECK_REASON_CALLBACK_RECORD
;
2834 typedef enum _KBUGCHECK_BUFFER_DUMP_STATE
{
2840 } KBUGCHECK_BUFFER_DUMP_STATE
;
2843 (DDKAPI
*PKBUGCHECK_CALLBACK_ROUTINE
)(
2847 typedef struct _KBUGCHECK_CALLBACK_RECORD
{
2849 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
;
2855 } KBUGCHECK_CALLBACK_RECORD
, *PKBUGCHECK_CALLBACK_RECORD
;
2858 (DDKAPI
*PNMI_CALLBACK
)(
2860 IN BOOLEAN Handled
);
2864 * KeInitializeCallbackRecord(
2865 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
2867 #define KeInitializeCallbackRecord(CallbackRecord) \
2868 CallbackRecord->State = BufferEmpty;
2870 typedef enum _KDPC_IMPORTANCE
{
2876 typedef enum _MEMORY_CACHING_TYPE_ORIG
{
2877 MmFrameBufferCached
= 2
2878 } MEMORY_CACHING_TYPE_ORIG
;
2880 typedef enum _MEMORY_CACHING_TYPE
{
2881 MmNonCached
= FALSE
,
2883 MmWriteCombined
= MmFrameBufferCached
,
2884 MmHardwareCoherentCached
,
2885 MmNonCachedUnordered
,
2888 } MEMORY_CACHING_TYPE
;
2890 typedef enum _MM_PAGE_PRIORITY
{
2892 NormalPagePriority
= 16,
2893 HighPagePriority
= 32
2896 typedef enum _LOCK_OPERATION
{
2902 #define FLUSH_MULTIPLE_MAXIMUM 32
2904 typedef enum _MM_SYSTEM_SIZE
{
2910 typedef struct _OBJECT_HANDLE_INFORMATION
{
2911 ULONG HandleAttributes
;
2912 ACCESS_MASK GrantedAccess
;
2913 } OBJECT_HANDLE_INFORMATION
, *POBJECT_HANDLE_INFORMATION
;
2915 typedef struct _CLIENT_ID
{
2916 HANDLE UniqueProcess
;
2917 HANDLE UniqueThread
;
2918 } CLIENT_ID
, *PCLIENT_ID
;
2921 (DDKAPI
*PKSTART_ROUTINE
)(
2922 IN PVOID StartContext
);
2925 (DDKAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
2927 IN HANDLE ProcessId
,
2931 (DDKAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
2932 IN HANDLE ProcessId
,
2936 typedef struct _IMAGE_INFO
{
2937 _ANONYMOUS_UNION
union {
2939 _ANONYMOUS_STRUCT
struct {
2940 ULONG ImageAddressingMode
: 8;
2941 ULONG SystemModeImage
: 1;
2942 ULONG ImageMappedToAllPids
: 1;
2943 ULONG Reserved
: 22;
2947 ULONG ImageSelector
;
2949 ULONG ImageSectionNumber
;
2950 } IMAGE_INFO
, *PIMAGE_INFO
;
2952 #define IMAGE_ADDRESSING_MODE_32BIT 3
2955 (DDKAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
2956 IN PUNICODE_STRING FullImageName
,
2957 IN HANDLE ProcessId
,
2958 IN PIMAGE_INFO ImageInfo
);
2960 #pragma pack(push,4)
2961 typedef enum _BUS_DATA_TYPE
{
2962 ConfigurationSpaceUndefined
= -1,
2970 PCMCIAConfiguration
,
2973 PNPISAConfiguration
,
2974 SgiInternalConfiguration
,
2976 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
2979 typedef struct _NT_TIB
{
2980 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
2984 _ANONYMOUS_UNION
union {
2988 PVOID ArbitraryUserPointer
;
2989 struct _NT_TIB
*Self
;
2992 typedef struct _NT_TIB32
{
2993 ULONG ExceptionList
;
2997 __GNU_EXTENSION
union {
3001 ULONG ArbitraryUserPointer
;
3003 } NT_TIB32
,*PNT_TIB32
;
3005 typedef struct _NT_TIB64
{
3006 ULONG64 ExceptionList
;
3009 ULONG64 SubSystemTib
;
3010 __GNU_EXTENSION
union {
3014 ULONG64 ArbitraryUserPointer
;
3016 } NT_TIB64
,*PNT_TIB64
;
3018 typedef enum _PROCESSINFOCLASS
{
3019 ProcessBasicInformation
,
3024 ProcessBasePriority
,
3025 ProcessRaisePriority
,
3027 ProcessExceptionPort
,
3029 ProcessLdtInformation
,
3031 ProcessDefaultHardErrorMode
,
3032 ProcessIoPortHandlers
,
3033 ProcessPooledUsageAndLimits
,
3034 ProcessWorkingSetWatch
,
3035 ProcessUserModeIOPL
,
3036 ProcessEnableAlignmentFaultFixup
,
3037 ProcessPriorityClass
,
3038 ProcessWx86Information
,
3040 ProcessAffinityMask
,
3041 ProcessPriorityBoost
,
3043 ProcessSessionInformation
,
3044 ProcessForegroundInformation
,
3045 ProcessWow64Information
,
3046 ProcessImageFileName
,
3047 ProcessLUIDDeviceMapsEnabled
,
3048 ProcessBreakOnTermination
,
3049 ProcessDebugObjectHandle
,
3051 ProcessHandleTracing
,
3053 ProcessExecuteFlags
,
3054 ProcessTlsInformation
,
3056 ProcessImageInformation
,
3058 ProcessPagePriority
,
3059 ProcessInstrumentationCallback
,
3063 typedef enum _THREADINFOCLASS
{
3064 ThreadBasicInformation
,
3069 ThreadImpersonationToken
,
3070 ThreadDescriptorTableEntry
,
3071 ThreadEnableAlignmentFaultFixup
,
3072 ThreadEventPair_Reusable
,
3073 ThreadQuerySetWin32StartAddress
,
3075 ThreadPerformanceCount
,
3076 ThreadAmILastThread
,
3077 ThreadIdealProcessor
,
3078 ThreadPriorityBoost
,
3079 ThreadSetTlsArrayAddress
,
3081 ThreadHideFromDebugger
,
3082 ThreadBreakOnTermination
,
3083 ThreadSwitchLegacyState
,
3085 ThreadLastSystemCall
,
3089 ThreadActualBasePriority
,
3093 typedef struct _PROCESS_BASIC_INFORMATION
3095 NTSTATUS ExitStatus
;
3096 struct _PEB
*PebBaseAddress
;
3097 ULONG_PTR AffinityMask
;
3098 KPRIORITY BasePriority
;
3099 ULONG_PTR UniqueProcessId
;
3100 ULONG_PTR InheritedFromUniqueProcessId
;
3101 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
3103 typedef struct _PROCESS_WS_WATCH_INFORMATION
3107 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
3109 typedef struct _PROCESS_DEVICEMAP_INFORMATION
3111 __GNU_EXTENSION
union
3115 HANDLE DirectoryHandle
;
3120 UCHAR DriveType
[32];
3123 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
3125 typedef struct _KERNEL_USER_TIMES
3127 LARGE_INTEGER CreateTime
;
3128 LARGE_INTEGER ExitTime
;
3129 LARGE_INTEGER KernelTime
;
3130 LARGE_INTEGER UserTime
;
3131 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
3133 typedef struct _PROCESS_ACCESS_TOKEN
3137 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
3139 typedef struct _PROCESS_SESSION_INFORMATION
3142 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
3145 (DDKAPI
*PREQUEST_POWER_COMPLETE
)(
3146 IN PDEVICE_OBJECT DeviceObject
,
3147 IN UCHAR MinorFunction
,
3148 IN POWER_STATE PowerState
,
3150 IN PIO_STATUS_BLOCK IoStatus
);
3152 typedef enum _TRACE_INFORMATION_CLASS
{
3155 TraceEnableFlagsClass
,
3156 TraceEnableLevelClass
,
3157 GlobalLoggerHandleClass
,
3158 EventLoggerHandleClass
,
3159 AllLoggerHandlesClass
,
3160 TraceHandleByNameClass
3161 } TRACE_INFORMATION_CLASS
;
3163 typedef enum _REG_NOTIFY_CLASS
3166 RegNtPreDeleteKey
= RegNtDeleteKey
,
3168 RegNtPreSetValueKey
= RegNtSetValueKey
,
3169 RegNtDeleteValueKey
,
3170 RegNtPreDeleteValueKey
= RegNtDeleteValueKey
,
3171 RegNtSetInformationKey
,
3172 RegNtPreSetInformationKey
= RegNtSetInformationKey
,
3174 RegNtPreRenameKey
= RegNtRenameKey
,
3176 RegNtPreEnumerateKey
= RegNtEnumerateKey
,
3177 RegNtEnumerateValueKey
,
3178 RegNtPreEnumerateValueKey
= RegNtEnumerateValueKey
,
3180 RegNtPreQueryKey
= RegNtQueryKey
,
3182 RegNtPreQueryValueKey
= RegNtQueryValueKey
,
3183 RegNtQueryMultipleValueKey
,
3184 RegNtPreQueryMultipleValueKey
= RegNtQueryMultipleValueKey
,
3189 RegNtKeyHandleClose
,
3190 RegNtPreKeyHandleClose
= RegNtKeyHandleClose
,
3192 RegNtPostSetValueKey
,
3193 RegNtPostDeleteValueKey
,
3194 RegNtPostSetInformationKey
,
3196 RegNtPostEnumerateKey
,
3197 RegNtPostEnumerateValueKey
,
3199 RegNtPostQueryValueKey
,
3200 RegNtPostQueryMultipleValueKey
,
3201 RegNtPostKeyHandleClose
,
3202 RegNtPreCreateKeyEx
,
3203 RegNtPostCreateKeyEx
,
3206 } REG_NOTIFY_CLASS
, *PREG_NOTIFY_CLASS
;
3209 (NTAPI
*PEX_CALLBACK_FUNCTION
)(
3210 IN PVOID CallbackContext
,
3215 typedef struct _REG_DELETE_KEY_INFORMATION
3218 } REG_DELETE_KEY_INFORMATION
, *PREG_DELETE_KEY_INFORMATION
;
3220 typedef struct _REG_SET_VALUE_KEY_INFORMATION
3223 PUNICODE_STRING ValueName
;
3228 } REG_SET_VALUE_KEY_INFORMATION
, *PREG_SET_VALUE_KEY_INFORMATION
;
3230 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION
3233 PUNICODE_STRING ValueName
;
3234 } REG_DELETE_VALUE_KEY_INFORMATION
, *PREG_DELETE_VALUE_KEY_INFORMATION
;
3236 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION
3239 KEY_SET_INFORMATION_CLASS KeySetInformationClass
;
3240 PVOID KeySetInformation
;
3241 ULONG KeySetInformationLength
;
3242 } REG_SET_INFORMATION_KEY_INFORMATION
, *PREG_SET_INFORMATION_KEY_INFORMATION
;
3244 typedef struct _REG_ENUMERATE_KEY_INFORMATION
3248 KEY_INFORMATION_CLASS KeyInformationClass
;
3249 PVOID KeyInformation
;
3251 PULONG ResultLength
;
3252 } REG_ENUMERATE_KEY_INFORMATION
, *PREG_ENUMERATE_KEY_INFORMATION
;
3254 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION
3258 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
3259 PVOID KeyValueInformation
;
3261 PULONG ResultLength
;
3262 } REG_ENUMERATE_VALUE_KEY_INFORMATION
, *PREG_ENUMERATE_VALUE_KEY_INFORMATION
;
3264 typedef struct _REG_QUERY_KEY_INFORMATION
3267 KEY_INFORMATION_CLASS KeyInformationClass
;
3268 PVOID KeyInformation
;
3270 PULONG ResultLength
;
3271 } REG_QUERY_KEY_INFORMATION
, *PREG_QUERY_KEY_INFORMATION
;
3273 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION
3276 PUNICODE_STRING ValueName
;
3277 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
3278 PVOID KeyValueInformation
;
3280 PULONG ResultLength
;
3281 } REG_QUERY_VALUE_KEY_INFORMATION
, *PREG_QUERY_VALUE_KEY_INFORMATION
;
3283 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
3286 PKEY_VALUE_ENTRY ValueEntries
;
3289 PULONG BufferLength
;
3290 PULONG RequiredBufferLength
;
3291 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
;
3293 typedef struct _REG_PRE_CREATE_KEY_INFORMATION
3295 PUNICODE_STRING CompleteName
;
3296 } REG_PRE_CREATE_KEY_INFORMATION
, *PREG_PRE_CREATE_KEY_INFORMATION
;
3298 typedef struct _REG_POST_CREATE_KEY_INFORMATION
3300 PUNICODE_STRING CompleteName
;
3303 } REG_POST_CREATE_KEY_INFORMATION
, *PREG_POST_CREATE_KEY_INFORMATION
;
3305 typedef struct _REG_PRE_OPEN_KEY_INFORMATION
3307 PUNICODE_STRING CompleteName
;
3308 } REG_PRE_OPEN_KEY_INFORMATION
, *PREG_PRE_OPEN_KEY_INFORMATION
;
3310 typedef struct _REG_POST_OPEN_KEY_INFORMATION
3312 PUNICODE_STRING CompleteName
;
3315 } REG_POST_OPEN_KEY_INFORMATION
, *PREG_POST_OPEN_KEY_INFORMATION
;
3317 typedef struct _REG_POST_OPERATION_INFORMATION
3321 } REG_POST_OPERATION_INFORMATION
,*PREG_POST_OPERATION_INFORMATION
;
3323 typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION
3326 } REG_KEY_HANDLE_CLOSE_INFORMATION
, *PREG_KEY_HANDLE_CLOSE_INFORMATION
;
3329 ** Storage structures
3331 typedef enum _PARTITION_STYLE
{
3332 PARTITION_STYLE_MBR
,
3333 PARTITION_STYLE_GPT
,
3337 typedef struct _CREATE_DISK_MBR
{
3339 } CREATE_DISK_MBR
, *PCREATE_DISK_MBR
;
3341 typedef struct _CREATE_DISK_GPT
{
3343 ULONG MaxPartitionCount
;
3344 } CREATE_DISK_GPT
, *PCREATE_DISK_GPT
;
3346 typedef struct _CREATE_DISK
{
3347 PARTITION_STYLE PartitionStyle
;
3348 _ANONYMOUS_UNION
union {
3349 CREATE_DISK_MBR Mbr
;
3350 CREATE_DISK_GPT Gpt
;
3352 } CREATE_DISK
, *PCREATE_DISK
;
3354 typedef struct _DISK_SIGNATURE
{
3355 ULONG PartitionStyle
;
3356 _ANONYMOUS_UNION
union {
3365 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
3368 (FASTCALL
*PTIME_UPDATE_NOTIFY_ROUTINE
)(
3370 IN KPROCESSOR_MODE Mode
);
3372 #define DBG_STATUS_CONTROL_C 1
3373 #define DBG_STATUS_SYSRQ 2
3374 #define DBG_STATUS_BUGCHECK_FIRST 3
3375 #define DBG_STATUS_BUGCHECK_SECOND 4
3376 #define DBG_STATUS_FATAL 5
3377 #define DBG_STATUS_DEBUG_CONTROL 6
3378 #define DBG_STATUS_WORKER 7
3380 typedef struct _PHYSICAL_MEMORY_RANGE
{
3381 PHYSICAL_ADDRESS BaseAddress
;
3382 LARGE_INTEGER NumberOfBytes
;
3383 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
3386 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
3389 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
3390 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
3391 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
3392 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
3394 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
3395 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
3396 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
3397 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
3398 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
3400 #define HASH_STRING_ALGORITHM_DEFAULT 0
3401 #define HASH_STRING_ALGORITHM_X65599 1
3402 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
3405 (DDKAPI
*PTIMER_APC_ROUTINE
)(
3406 IN PVOID TimerContext
,
3407 IN ULONG TimerLowValue
,
3408 IN LONG TimerHighValue
);
3417 (DDKAPI
*WMI_NOTIFICATION_CALLBACK
)(
3423 ** Architecture specific structures
3425 #define PCR_MINOR_VERSION 1
3426 #define PCR_MAJOR_VERSION 1
3430 #define SIZE_OF_80387_REGISTERS 80
3431 #define CONTEXT_i386 0x10000
3432 #define CONTEXT_i486 0x10000
3433 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
3434 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
3435 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
3436 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
3437 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
3438 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
3439 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
3440 #define MAXIMUM_SUPPORTED_EXTENSION 512
3442 typedef struct _FLOATING_SAVE_AREA
{
3447 ULONG ErrorSelector
;
3450 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
3452 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
3454 typedef struct _CONTEXT
{
3462 FLOATING_SAVE_AREA FloatSave
;
3479 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
3483 // Used to contain PFNs and PFN counts
3485 typedef ULONG PFN_COUNT
;
3486 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
3487 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
3489 #define PASSIVE_LEVEL 0
3492 #define DISPATCH_LEVEL 2
3493 #define PROFILE_LEVEL 27
3494 #define CLOCK1_LEVEL 28
3495 #define CLOCK2_LEVEL 28
3496 #define IPI_LEVEL 29
3497 #define POWER_LEVEL 30
3498 #define HIGH_LEVEL 31
3500 typedef struct _KPCR_TIB
{
3501 PVOID ExceptionList
; /* 00 */
3502 PVOID StackBase
; /* 04 */
3503 PVOID StackLimit
; /* 08 */
3504 PVOID SubSystemTib
; /* 0C */
3505 _ANONYMOUS_UNION
union {
3506 PVOID FiberData
; /* 10 */
3507 ULONG Version
; /* 10 */
3509 PVOID ArbitraryUserPointer
; /* 14 */
3510 struct _KPCR_TIB
*Self
; /* 18 */
3511 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
3513 typedef struct _KPCR
{
3514 KPCR_TIB Tib
; /* 00 */
3515 struct _KPCR
*Self
; /* 1C */
3516 struct _KPRCB
*Prcb
; /* 20 */
3517 KIRQL Irql
; /* 24 */
3519 ULONG IrrActive
; /* 2C */
3521 PVOID KdVersionBlock
; /* 34 */
3522 PUSHORT IDT
; /* 38 */
3523 PUSHORT GDT
; /* 3C */
3524 struct _KTSS
*TSS
; /* 40 */
3525 USHORT MajorVersion
; /* 44 */
3526 USHORT MinorVersion
; /* 46 */
3527 KAFFINITY SetMember
; /* 48 */
3528 ULONG StallScaleFactor
; /* 4C */
3529 UCHAR SpareUnused
; /* 50 */
3530 UCHAR Number
; /* 51 */
3532 UCHAR SecondLevelCacheAssociativity
;
3534 ULONG KernelReserved
[14]; // For use by the kernel
3535 ULONG SecondLevelCacheSize
;
3536 ULONG HalReserved
[16]; // For use by Hal
3537 } KPCR
, *PKPCR
; /* 54 */
3539 #define KeGetPcr() PCR
3541 typedef struct _KFLOATING_SAVE
{
3545 ULONG ErrorSelector
;
3550 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
3554 KeGetCurrentProcessorNumber(VOID
)
3556 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
3571 #define KI_USER_SHARED_DATA 0xffdf0000
3573 #define PAGE_SIZE 0x1000
3574 #define PAGE_SHIFT 12L
3576 #define SharedUserData ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
3578 extern NTKERNELAPI PVOID MmHighestUserAddress
;
3579 extern NTKERNELAPI PVOID MmSystemRangeStart
;
3580 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
3582 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
3583 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
3584 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
3585 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
3586 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
3588 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
3589 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
3591 #elif defined(__x86_64__)
3593 #define CONTEXT_AMD64 0x100000
3594 #if !defined(RC_INVOKED)
3595 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
3596 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
3597 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
3598 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
3599 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
3601 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
3602 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
3604 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
3605 #define CONTEXT_SERVICE_ACTIVE 0x10000000
3606 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
3607 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
3610 typedef struct DECLSPEC_ALIGN(16) _M128A
{
3615 typedef struct _XMM_SAVE_AREA32
{
3622 USHORT ErrorSelector
;
3625 USHORT DataSelector
;
3629 M128A FloatRegisters
[8];
3630 M128A XmmRegisters
[16];
3631 UCHAR Reserved4
[96];
3632 } XMM_SAVE_AREA32
, *PXMM_SAVE_AREA32
;
3634 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
3684 /* Floating point */
3686 XMM_SAVE_AREA32 FltSave
;
3710 M128A VectorRegister
[26];
3711 ULONG64 VectorControl
;
3714 ULONG64 DebugControl
;
3715 ULONG64 LastBranchToRip
;
3716 ULONG64 LastBranchFromRip
;
3717 ULONG64 LastExceptionToRip
;
3718 ULONG64 LastExceptionFromRip
;
3722 // Used to contain PFNs and PFN counts
3724 typedef ULONG PFN_COUNT
;
3725 typedef ULONG64 PFN_NUMBER
, *PPFN_NUMBER
;
3726 typedef LONG64 SPFN_NUMBER
, *PSPFN_NUMBER
;
3728 #define PASSIVE_LEVEL 0
3731 #define DISPATCH_LEVEL 2
3732 #define CLOCK_LEVEL 13
3733 #define IPI_LEVEL 14
3734 #define POWER_LEVEL 14
3735 #define PROFILE_LEVEL 15
3736 #define HIGH_LEVEL 15
3738 #define PAGE_SIZE 0x1000
3739 #define PAGE_SHIFT 12L
3740 #define PTI_SHIFT 12L
3741 #define PDI_SHIFT 21L
3742 #define PPI_SHIFT 30L
3743 #define PXI_SHIFT 39L
3744 #define PTE_PER_PAGE 512
3745 #define PDE_PER_PAGE 512
3746 #define PPE_PER_PAGE 512
3747 #define PXE_PER_PAGE 512
3748 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
3749 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
3750 #define PPI_MASK (PPE_PER_PAGE - 1)
3751 #define PXI_MASK (PXE_PER_PAGE - 1)
3753 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
3754 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
3755 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
3756 #define PDE_BASE 0xFFFFF6FB40000000ULL
3757 #define PTE_BASE 0xFFFFF68000000000ULL
3758 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
3759 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
3760 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
3761 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
3763 extern NTKERNELAPI PVOID MmHighestUserAddress
;
3764 extern NTKERNELAPI PVOID MmSystemRangeStart
;
3765 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
3767 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
3768 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
3769 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
3770 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
3771 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
3772 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
3774 #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
3775 #define SharedInterruptTime (&SharedUserData->InterruptTime)
3776 #define SharedSystemTime (&SharedUserData->SystemTime)
3777 #define SharedTickCount (&SharedUserData->TickCount)
3779 #define KeQueryInterruptTime() \
3780 (*(volatile ULONG64*)SharedInterruptTime)
3781 #define KeQuerySystemTime(CurrentCount) \
3782 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
3783 #define KeQueryTickCount(CurrentCount) \
3784 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
3786 typedef struct _KPCR
3788 __GNU_EXTENSION
union
3791 __GNU_EXTENSION
struct
3793 union _KGDTENTRY64
*GdtBase
;
3794 struct _KTSS64
*TssBase
;
3797 struct _KPRCB
*CurrentPrcb
;
3798 PKSPIN_LOCK_QUEUE LockArray
;
3802 union _KIDTENTRY64
*IdtBase
;
3805 UCHAR SecondLevelCacheAssociativity
;
3806 UCHAR ObsoleteNumber
;
3809 USHORT MajorVersion
;
3810 USHORT MinorVersion
;
3811 ULONG StallScaleFactor
;
3813 ULONG KernelReserved
[15];
3814 ULONG SecondLevelCacheSize
;
3815 ULONG HalReserved
[16];
3817 PVOID KdVersionBlock
;
3819 ULONG PcrAlign1
[24];
3822 typedef struct _KFLOATING_SAVE
{
3824 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
3836 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
3841 KeGetCurrentProcessorNumber(VOID
)
3843 return (ULONG
)__readgsword(0x184);
3846 #elif defined(__PowerPC__)
3849 // Used to contain PFNs and PFN counts
3851 typedef ULONG PFN_COUNT
;
3852 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
3853 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
3855 #define PASSIVE_LEVEL 0
3858 #define DISPATCH_LEVEL 2
3859 #define PROFILE_LEVEL 27
3860 #define CLOCK1_LEVEL 28
3861 #define CLOCK2_LEVEL 28
3862 #define IPI_LEVEL 29
3863 #define POWER_LEVEL 30
3864 #define HIGH_LEVEL 31
3866 typedef struct _KFLOATING_SAVE
{
3868 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
3870 typedef struct _KPCR_TIB
{
3871 PVOID ExceptionList
; /* 00 */
3872 PVOID StackBase
; /* 04 */
3873 PVOID StackLimit
; /* 08 */
3874 PVOID SubSystemTib
; /* 0C */
3875 _ANONYMOUS_UNION
union {
3876 PVOID FiberData
; /* 10 */
3877 ULONG Version
; /* 10 */
3879 PVOID ArbitraryUserPointer
; /* 14 */
3880 struct _KPCR_TIB
*Self
; /* 18 */
3881 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
3883 #define PCR_MINOR_VERSION 1
3884 #define PCR_MAJOR_VERSION 1
3886 typedef struct _KPCR
{
3887 KPCR_TIB Tib
; /* 00 */
3888 struct _KPCR
*Self
; /* 1C */
3889 struct _KPRCB
*Prcb
; /* 20 */
3890 KIRQL Irql
; /* 24 */
3892 ULONG IrrActive
; /* 2C */
3894 PVOID KdVersionBlock
; /* 34 */
3895 PUSHORT IDT
; /* 38 */
3896 PUSHORT GDT
; /* 3C */
3897 struct _KTSS
*TSS
; /* 40 */
3898 USHORT MajorVersion
; /* 44 */
3899 USHORT MinorVersion
; /* 46 */
3900 KAFFINITY SetMember
; /* 48 */
3901 ULONG StallScaleFactor
; /* 4C */
3902 UCHAR SpareUnused
; /* 50 */
3903 UCHAR Number
; /* 51 */
3904 } KPCR
, *PKPCR
; /* 54 */
3906 #define KeGetPcr() PCR
3911 KeGetCurrentProcessorNumber(VOID
)
3914 __asm__
__volatile__ (
3917 : "i" (FIELD_OFFSET(KPCR
, Number
))
3922 #elif defined(_MIPS_)
3924 #error MIPS Headers are totally incorrect
3927 // Used to contain PFNs and PFN counts
3929 typedef ULONG PFN_COUNT
;
3930 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
3931 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
3933 #define PASSIVE_LEVEL 0
3935 #define DISPATCH_LEVEL 2
3936 #define PROFILE_LEVEL 27
3937 #define IPI_LEVEL 29
3938 #define HIGH_LEVEL 31
3940 typedef struct _KPCR
{
3941 struct _KPRCB
*Prcb
; /* 20 */
3942 KIRQL Irql
; /* 24 */
3947 #define KeGetPcr() PCR
3949 typedef struct _KFLOATING_SAVE
{
3950 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
3955 KeGetCurrentProcessorNumber(VOID
)
3960 #elif defined(_M_ARM)
3963 // NT-ARM is not documented, need DDK-ARM
3968 #error Unknown architecture
3971 #define MM_DONT_ZERO_ALLOCATION 0x00000001
3972 #define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002
3975 #define EFLAG_SIGN 0x8000
3976 #define EFLAG_ZERO 0x4000
3977 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
3979 #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
3980 #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
3981 #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
3983 typedef enum _INTERLOCKED_RESULT
{
3984 ResultNegative
= RESULT_NEGATIVE
,
3985 ResultZero
= RESULT_ZERO
,
3986 ResultPositive
= RESULT_POSITIVE
3987 } INTERLOCKED_RESULT
;
3990 (NTAPI
*PciPin2Line
)(
3991 IN
struct _BUS_HANDLER
*BusHandler
,
3992 IN
struct _BUS_HANDLER
*RootHandler
,
3993 IN PCI_SLOT_NUMBER SlotNumber
,
3994 IN PPCI_COMMON_CONFIG PciData
3998 (NTAPI
*PciLine2Pin
)(
3999 IN
struct _BUS_HANDLER
*BusHandler
,
4000 IN
struct _BUS_HANDLER
*RootHandler
,
4001 IN PCI_SLOT_NUMBER SlotNumber
,
4002 IN PPCI_COMMON_CONFIG PciNewData
,
4003 IN PPCI_COMMON_CONFIG PciOldData
4007 (NTAPI
*PciReadWriteConfig
)(
4008 IN
struct _BUS_HANDLER
*BusHandler
,
4009 IN PCI_SLOT_NUMBER Slot
,
4015 #define PCI_DATA_TAG ' ICP'
4016 #define PCI_DATA_VERSION 1
4018 typedef struct _PCIBUSDATA
4022 PciReadWriteConfig ReadConfig
;
4023 PciReadWriteConfig WriteConfig
;
4024 PciPin2Line Pin2Line
;
4025 PciLine2Pin Line2Pin
;
4026 PCI_SLOT_NUMBER ParentSlot
;
4028 } PCIBUSDATA
, *PPCIBUSDATA
;
4031 /** SPINLOCK FUNCTIONS ********************************************************/
4036 KeTryToAcquireSpinLockAtDpcLevel(
4037 IN OUT PKSPIN_LOCK SpinLock
4044 IN PKSPIN_LOCK SpinLock
4049 #if defined(WIN9X_COMPAT_SPINLOCK)
4054 KeInitializeSpinLock(
4055 IN PKSPIN_LOCK SpinLock
4062 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
4064 /* Clear the lock */
4074 IN PKSPIN_LOCK SpinLock
);
4080 IN PKSPIN_LOCK SpinLock
,
4086 KefAcquireSpinLockAtDpcLevel(
4087 IN PKSPIN_LOCK SpinLock
);
4092 KefReleaseSpinLockFromDpcLevel(
4093 IN PKSPIN_LOCK SpinLock
);
4095 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
4096 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
4097 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
4098 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
4100 #define KeGetDcacheFillSize() 1L
4102 #elif defined(_M_ARM) // !defined (_X86_)
4106 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
4108 /* Clear the lock */
4116 IN PKSPIN_LOCK SpinLock
);
4122 IN PKSPIN_LOCK SpinLock
,
4129 KefAcquireSpinLockAtDpcLevel(
4130 IN PKSPIN_LOCK SpinLock
);
4135 KefReleaseSpinLockFromDpcLevel(
4136 IN PKSPIN_LOCK SpinLock
);
4139 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
4140 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
4141 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
4142 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
4147 KeInitializeSpinLock(
4148 IN PKSPIN_LOCK SpinLock
);
4155 KeInitializeSpinLock(
4156 PKSPIN_LOCK SpinLock
)
4164 IN PKSPIN_LOCK SpinLock
,
4169 KeAcquireSpinLockAtDpcLevel(
4170 IN PKSPIN_LOCK SpinLock
);
4174 KeReleaseSpinLockFromDpcLevel(
4175 IN PKSPIN_LOCK SpinLock
);
4179 KeAcquireSpinLockRaiseToDpc(
4180 IN PKSPIN_LOCK SpinLock
);
4182 #define KeAcquireSpinLock(SpinLock, OldIrql) \
4183 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
4185 #endif // !defined (_X86_)
4188 ** Utillity functions
4191 #define ARGUMENT_PRESENT(ArgumentPointer) \
4192 ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL)
4199 #define BYTE_OFFSET(Va) \
4200 ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
4207 #define BYTES_TO_PAGES(Size) \
4208 ((ULONG) ((ULONG_PTR) (Size) >> PAGE_SHIFT) + (((ULONG) (Size) & (PAGE_SIZE - 1)) != 0))
4215 #define PAGE_ALIGN(Va) \
4216 ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
4221 * IN ULONG_PTR Size)
4223 #define ROUND_TO_PAGES(Size) \
4224 ((ULONG_PTR) (((ULONG_PTR) Size + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)))
4228 #if defined(_X86_) || defined(_AMD64_)
4231 // x86 and x64 performs a 0x2C interrupt
4233 #define DbgRaiseAssertionFailure __int2c
4235 #elif defined(_ARM_)
4242 #error Unsupported Architecture
4247 #define ASSERT(exp) \
4249 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
4251 #define ASSERTMSG(msg, exp) \
4253 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, msg ), FALSE : TRUE)
4255 #define RTL_SOFT_ASSERT(exp) \
4257 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
4259 #define RTL_SOFT_ASSERTMSG(msg, exp) \
4261 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
4263 #define RTL_VERIFY(exp) ASSERT(exp)
4264 #define RTL_VERIFYMSG(msg, exp) ASSERT(msg, exp)
4266 #define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp)
4267 #define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp)
4269 #if defined(_MSC_VER)
4271 #define NT_ASSERT(exp) \
4273 (__annotation(L"Debug", L"AssertFail", L#exp), \
4274 DbgRaiseAssertionFailure(), FALSE) : TRUE)
4276 #define NT_ASSERTMSG(msg, exp) \
4278 (__annotation(L"Debug", L"AssertFail", L##msg), \
4279 DbgRaiseAssertionFailure(), FALSE) : TRUE)
4281 #define NT_ASSERTMSGW(msg, exp) \
4283 (__annotation(L"Debug", L"AssertFail", msg), \
4284 DbgRaiseAssertionFailure(), FALSE) : TRUE)
4289 // GCC doesn't support __annotation (nor PDB)
4291 #define NT_ASSERT(exp) \
4292 (VOID)((!(exp)) ? (DbgRaiseAssertionFailure(), FALSE) : TRUE)
4294 #define NT_ASSERTMSG NT_ASSERT
4295 #define NT_ASSERTMSGW NT_ASSERT
4301 #define ASSERT(exp) ((VOID) 0)
4302 #define ASSERTMSG(msg, exp) ((VOID) 0)
4304 #define RTL_SOFT_ASSERT(exp) ((VOID) 0)
4305 #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
4307 #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
4308 #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
4310 #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
4311 #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
4313 #define NT_ASSERT(exp) ((VOID)0)
4314 #define NT_ASSERTMSG(exp) ((VOID)0)
4315 #define NT_ASSERTMSGW(exp) ((VOID)0)
4319 /* HACK HACK HACK - GCC (or perhaps LD) is messing this up */
4320 #if defined(_NTSYSTEM_) || defined(__GNUC__)
4321 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
4322 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
4324 #define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag)
4325 #define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag)
4326 #endif /* _NT_SYSTEM */
4328 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG
;
4329 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG
;
4332 ** Driver support routines
4335 /** Runtime library routines **/
4337 static __inline VOID
4339 IN PLIST_ENTRY ListHead
)
4341 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
4344 static __inline VOID
4346 IN PLIST_ENTRY ListHead
,
4347 IN PLIST_ENTRY Entry
)
4349 PLIST_ENTRY OldFlink
;
4350 OldFlink
= ListHead
->Flink
;
4351 Entry
->Flink
= OldFlink
;
4352 Entry
->Blink
= ListHead
;
4353 OldFlink
->Blink
= Entry
;
4354 ListHead
->Flink
= Entry
;
4357 static __inline VOID
4359 IN PLIST_ENTRY ListHead
,
4360 IN PLIST_ENTRY Entry
)
4362 PLIST_ENTRY OldBlink
;
4363 OldBlink
= ListHead
->Blink
;
4364 Entry
->Flink
= ListHead
;
4365 Entry
->Blink
= OldBlink
;
4366 OldBlink
->Flink
= Entry
;
4367 ListHead
->Blink
= Entry
;
4373 * IN PLIST_ENTRY ListHead)
4375 #define IsListEmpty(_ListHead) \
4376 ((_ListHead)->Flink == (_ListHead))
4379 * PSINGLE_LIST_ENTRY
4381 * IN PSINGLE_LIST_ENTRY ListHead)
4383 #define PopEntryList(ListHead) \
4386 PSINGLE_LIST_ENTRY _FirstEntry; \
4387 _FirstEntry = (ListHead)->Next; \
4388 if (_FirstEntry != NULL) \
4389 (ListHead)->Next = _FirstEntry->Next; \
4395 * IN PSINGLE_LIST_ENTRY ListHead,
4396 * IN PSINGLE_LIST_ENTRY Entry)
4398 #define PushEntryList(_ListHead, _Entry) \
4399 (_Entry)->Next = (_ListHead)->Next; \
4400 (_ListHead)->Next = (_Entry); \
4402 static __inline BOOLEAN
4404 IN PLIST_ENTRY Entry
)
4406 PLIST_ENTRY OldFlink
;
4407 PLIST_ENTRY OldBlink
;
4409 OldFlink
= Entry
->Flink
;
4410 OldBlink
= Entry
->Blink
;
4411 OldFlink
->Blink
= OldBlink
;
4412 OldBlink
->Flink
= OldFlink
;
4413 return (BOOLEAN
)(OldFlink
== OldBlink
);
4416 static __inline PLIST_ENTRY
4418 IN PLIST_ENTRY ListHead
)
4423 Entry
= ListHead
->Flink
;
4424 Flink
= Entry
->Flink
;
4425 ListHead
->Flink
= Flink
;
4426 Flink
->Blink
= ListHead
;
4430 static __inline PLIST_ENTRY
4432 IN PLIST_ENTRY ListHead
)
4437 Entry
= ListHead
->Blink
;
4438 Blink
= Entry
->Blink
;
4439 ListHead
->Blink
= Blink
;
4440 Blink
->Flink
= ListHead
;
4449 IN ULONG Base OPTIONAL
,
4450 IN OUT PULONG Value
);
4458 BOOLEAN CaseInSensitive
);
4460 #if !defined(MIDL_PASS)
4465 RtlConvertLongToLuid(
4471 Temp
.QuadPart
= Val
;
4472 Luid
.LowPart
= Temp
.u
.LowPart
;
4473 Luid
.HighPart
= Temp
.u
.HighPart
;
4481 RtlConvertUlongToLuid(
4498 IN VOID UNALIGNED
*Destination
,
4499 IN CONST VOID UNALIGNED
*Source
,
4506 IN OUT PSTRING DestinationString
,
4507 IN PSTRING SourceString OPTIONAL
);
4515 IN BOOLEAN CaseInSensitive
);
4517 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
4518 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
4519 *CallersAddress = (PVOID)_ReturnAddress(); \
4520 *CallersCaller = NULL;
4525 RtlGetCallersAddress(
4526 OUT PVOID
*CallersAddress
,
4527 OUT PVOID
*CallersCaller
);
4534 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
4540 IN OUT PACCESS_MASK AccessMask
,
4541 IN PGENERIC_MAPPING GenericMapping
);
4546 RtlPrefixUnicodeString(
4547 IN PCUNICODE_STRING String1
,
4548 IN PCUNICODE_STRING String2
,
4549 IN BOOLEAN CaseInSensitive
);
4554 RtlUpcaseUnicodeString(
4555 IN OUT PUNICODE_STRING DestinationString OPTIONAL
,
4556 IN PCUNICODE_STRING SourceString
,
4557 IN BOOLEAN AllocateDestinationString
);
4569 IN OUT PSTRING DestinationString
,
4570 IN PSTRING SourceString
);
4575 RtlVerifyVersionInfo(
4576 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
4578 IN ULONGLONG ConditionMask
);
4583 RtlVolumeDeviceToDosName(
4584 IN PVOID VolumeDeviceObject
,
4585 OUT PUNICODE_STRING DosName
);
4598 KeAreAllApcsDisabled(
4602 /* Guarded Mutex routines */
4607 KeAcquireGuardedMutex(
4608 IN OUT PKGUARDED_MUTEX GuardedMutex
4614 KeAcquireGuardedMutexUnsafe(
4615 IN OUT PKGUARDED_MUTEX GuardedMutex
4621 KeEnterGuardedRegion(
4628 KeLeaveGuardedRegion(
4635 KeInitializeGuardedMutex(
4636 OUT PKGUARDED_MUTEX GuardedMutex
4642 KeReleaseGuardedMutexUnsafe(
4643 IN OUT PKGUARDED_MUTEX GuardedMutex
4649 KeReleaseGuardedMutex(
4650 IN OUT PKGUARDED_MUTEX GuardedMutex
4656 KeTryToAcquireGuardedMutex(
4657 IN OUT PKGUARDED_MUTEX GuardedMutex
4661 #define ExInitializeFastMutex(_FastMutex) \
4663 (_FastMutex)->Count = FM_LOCK_BIT; \
4664 (_FastMutex)->Owner = NULL; \
4665 (_FastMutex)->Contention = 0; \
4666 KeInitializeEvent(&(_FastMutex)->Gate, SynchronizationEvent, FALSE); \
4677 /******************************************************************************
4679 ******************************************************************************/
4681 typedef struct _ZONE_SEGMENT_HEADER
{
4682 SINGLE_LIST_ENTRY SegmentList
;
4684 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
4686 typedef struct _ZONE_HEADER
{
4687 SINGLE_LIST_ENTRY FreeList
;
4688 SINGLE_LIST_ENTRY SegmentList
;
4690 ULONG TotalSegmentSize
;
4691 } ZONE_HEADER
, *PZONE_HEADER
;
4693 #define PROTECTED_POOL 0x80000000
4695 /******************************************************************************
4696 * Executive Functions *
4697 ******************************************************************************/
4703 IN PZONE_HEADER Zone
,
4705 IN ULONG SegmentSize
);
4707 static __inline PVOID
4709 IN PZONE_HEADER Zone
)
4711 if (Zone
->FreeList
.Next
)
4712 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
4713 return (PVOID
) Zone
->FreeList
.Next
;
4716 static __inline PVOID
4718 IN PZONE_HEADER Zone
,
4721 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
4722 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
4723 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
4730 IN PZONE_HEADER Zone
,
4732 IN PVOID InitialSegment
,
4733 IN ULONG InitialSegmentSize
);
4737 * ExInterlockedAllocateFromZone(
4738 * IN PZONE_HEADER Zone,
4739 * IN PKSPIN_LOCK Lock)
4741 #define ExInterlockedAllocateFromZone(Zone, Lock) \
4742 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
4747 ExInterlockedExtendZone(
4748 IN PZONE_HEADER Zone
,
4750 IN ULONG SegmentSize
,
4751 IN PKSPIN_LOCK Lock
);
4754 * ExInterlockedFreeToZone(
4755 * IN PZONE_HEADER Zone,
4757 * IN PKSPIN_LOCK Lock);
4759 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
4760 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
4764 * InitializeSListHead(
4765 * IN PSLIST_HEADER SListHead)
4767 #define InitializeSListHead(_SListHead) \
4768 (_SListHead)->Alignment = 0
4770 #define ExInitializeSListHead InitializeSListHead
4775 * IN PZONE_HEADER Zone)
4777 #define ExIsFullZone(Zone) \
4778 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
4781 * ExIsObjectInFirstZoneSegment(
4782 * IN PZONE_HEADER Zone,
4785 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
4786 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
4787 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
4788 (Zone)->TotalSegmentSize)) )
4794 ExRaiseAccessViolation(
4801 ExRaiseDatatypeMisalignment(
4810 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
4811 #define ExAcquireResourceShared ExAcquireResourceSharedLite
4812 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
4813 #define ExDeleteResource ExDeleteResourceLite
4814 #define ExInitializeResource ExInitializeResourceLite
4815 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
4816 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
4817 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
4818 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
4823 #define PAGED_CODE() { \
4824 if (KeGetCurrentIrql() > APC_LEVEL) { \
4825 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
4832 #define PAGED_CODE()
4840 IN CONST VOID
*Address
,
4842 IN ULONG Alignment
);
4850 IN ULONG Alignment
);
4854 /** Configuration manager routines **/
4860 IN PEX_CALLBACK_FUNCTION Function
,
4862 IN OUT PLARGE_INTEGER Cookie
);
4867 CmUnRegisterCallback(
4868 IN LARGE_INTEGER Cookie
);
4872 /** Filesystem runtime library routines **/
4877 FsRtlIsTotalDeviceFailure(
4878 IN NTSTATUS Status
);
4882 /** Hardware abstraction layer routines **/
4888 IN ULONG Frequency
);
4894 IN PDEVICE_OBJECT DeviceObject
,
4895 IN ULONG SectorSize
,
4896 IN ULONG MBRTypeIdentifier
,
4902 PADAPTER_OBJECT AdapterObject
4906 /** Io access routines **/
4908 #if !defined(_M_AMD64)
4912 READ_PORT_BUFFER_UCHAR(
4920 READ_PORT_BUFFER_ULONG(
4928 READ_PORT_BUFFER_USHORT(
4954 READ_REGISTER_BUFFER_UCHAR(
4962 READ_REGISTER_BUFFER_ULONG(
4970 READ_REGISTER_BUFFER_USHORT(
4971 IN PUSHORT Register
,
4978 READ_REGISTER_UCHAR(
4979 IN PUCHAR Register
);
4984 READ_REGISTER_ULONG(
4985 IN PULONG Register
);
4990 READ_REGISTER_USHORT(
4991 IN PUSHORT Register
);
4996 WRITE_PORT_BUFFER_UCHAR(
5004 WRITE_PORT_BUFFER_ULONG(
5012 WRITE_PORT_BUFFER_USHORT(
5041 WRITE_REGISTER_BUFFER_UCHAR(
5049 WRITE_REGISTER_BUFFER_ULONG(
5057 WRITE_REGISTER_BUFFER_USHORT(
5058 IN PUSHORT Register
,
5065 WRITE_REGISTER_UCHAR(
5072 WRITE_REGISTER_ULONG(
5079 WRITE_REGISTER_USHORT(
5080 IN PUSHORT Register
,
5087 READ_PORT_BUFFER_UCHAR(
5092 __inbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
5097 READ_PORT_BUFFER_ULONG(
5102 __indwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
5107 READ_PORT_BUFFER_USHORT(
5112 __inwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
5120 return __inbyte((USHORT
)(ULONG_PTR
)Port
);
5128 return __indword((USHORT
)(ULONG_PTR
)Port
);
5136 return __inword((USHORT
)(ULONG_PTR
)Port
);
5141 READ_REGISTER_BUFFER_UCHAR(
5146 __movsb(Register
, Buffer
, Count
);
5151 READ_REGISTER_BUFFER_ULONG(
5156 __movsd(Register
, Buffer
, Count
);
5161 READ_REGISTER_BUFFER_USHORT(
5162 IN PUSHORT Register
,
5166 __movsw(Register
, Buffer
, Count
);
5171 READ_REGISTER_UCHAR(
5179 READ_REGISTER_ULONG(
5187 READ_REGISTER_USHORT(
5188 IN PUSHORT Register
)
5195 WRITE_PORT_BUFFER_UCHAR(
5200 __outbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
5205 WRITE_PORT_BUFFER_ULONG(
5210 __outdwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
5215 WRITE_PORT_BUFFER_USHORT(
5220 __outwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
5229 __outbyte((USHORT
)(ULONG_PTR
)Port
, Value
);
5238 __outdword((USHORT
)(ULONG_PTR
)Port
, Value
);
5247 __outword((USHORT
)(ULONG_PTR
)Port
, Value
);
5252 WRITE_REGISTER_BUFFER_UCHAR(
5258 __movsb(Register
, Buffer
, Count
);
5259 InterlockedOr(&Synch
, 1);
5264 WRITE_REGISTER_BUFFER_ULONG(
5270 __movsd(Register
, Buffer
, Count
);
5271 InterlockedOr(&Synch
, 1);
5276 WRITE_REGISTER_BUFFER_USHORT(
5277 IN PUSHORT Register
,
5282 __movsw(Register
, Buffer
, Count
);
5283 InterlockedOr(&Synch
, 1);
5288 WRITE_REGISTER_UCHAR(
5294 InterlockedOr(&Synch
, 1);
5299 WRITE_REGISTER_ULONG(
5305 InterlockedOr(&Synch
, 1);
5310 WRITE_REGISTER_USHORT(
5311 IN PUSHORT Register
,
5316 InterlockedOr(&Sync
, 1);
5321 /** I/O manager routines **/
5326 IoAcquireCancelSpinLock(
5332 IoAcquireRemoveLockEx(
5333 IN PIO_REMOVE_LOCK RemoveLock
,
5334 IN OPTIONAL PVOID Tag OPTIONAL
,
5337 IN ULONG RemlockSize
);
5341 * IoAcquireRemoveLock(
5342 * IN PIO_REMOVE_LOCK RemoveLock,
5343 * IN OPTIONAL PVOID Tag)
5345 #define IoAcquireRemoveLock(_RemoveLock, \
5347 IoAcquireRemoveLockEx(_RemoveLock, _Tag, __FILE__, __LINE__, sizeof(IO_REMOVE_LOCK))
5351 * IoAdjustPagingPathCount(
5353 * IN BOOLEAN Increment)
5355 #define IoAdjustPagingPathCount(_Count, \
5360 InterlockedIncrement(_Count); \
5364 InterlockedDecrement(_Count); \
5368 #ifndef DMA_MACROS_DEFINED
5372 IoAllocateAdapterChannel(
5373 IN PADAPTER_OBJECT AdapterObject
,
5374 IN PDEVICE_OBJECT DeviceObject
,
5375 IN ULONG NumberOfMapRegisters
,
5376 IN PDRIVER_CONTROL ExecutionRoutine
,
5383 IoAllocateController(
5384 IN PCONTROLLER_OBJECT ControllerObject
,
5385 IN PDEVICE_OBJECT DeviceObject
,
5386 IN PDRIVER_CONTROL ExecutionRoutine
,
5392 IoAllocateDriverObjectExtension(
5393 IN PDRIVER_OBJECT DriverObject
,
5394 IN PVOID ClientIdentificationAddress
,
5395 IN ULONG DriverObjectExtensionSize
,
5396 OUT PVOID
*DriverObjectExtension
);
5401 IoAllocateErrorLogEntry(
5403 IN UCHAR EntrySize
);
5410 IN BOOLEAN ChargeQuota
);
5416 IN PVOID VirtualAddress
,
5418 IN BOOLEAN SecondaryBuffer
,
5419 IN BOOLEAN ChargeQuota
,
5420 IN OUT PIRP Irp OPTIONAL
);
5426 IN PDEVICE_OBJECT DeviceObject
);
5429 * VOID IoAssignArcName(
5430 * IN PUNICODE_STRING ArcName,
5431 * IN PUNICODE_STRING DeviceName);
5433 #define IoAssignArcName(_ArcName, _DeviceName) ( \
5434 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
5440 IN PDEVICE_OBJECT SourceDevice
,
5441 IN PUNICODE_STRING TargetDevice
,
5442 OUT PDEVICE_OBJECT
*AttachedDevice
);
5447 IoAttachDeviceToDeviceStack(
5448 IN PDEVICE_OBJECT SourceDevice
,
5449 IN PDEVICE_OBJECT TargetDevice
);
5454 IoBuildAsynchronousFsdRequest(
5455 IN ULONG MajorFunction
,
5456 IN PDEVICE_OBJECT DeviceObject
,
5457 IN OUT PVOID Buffer OPTIONAL
,
5458 IN ULONG Length OPTIONAL
,
5459 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
5460 IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL
);
5465 IoBuildDeviceIoControlRequest(
5466 IN ULONG IoControlCode
,
5467 IN PDEVICE_OBJECT DeviceObject
,
5468 IN PVOID InputBuffer OPTIONAL
,
5469 IN ULONG InputBufferLength
,
5470 OUT PVOID OutputBuffer OPTIONAL
,
5471 IN ULONG OutputBufferLength
,
5472 IN BOOLEAN InternalDeviceIoControl
,
5474 OUT PIO_STATUS_BLOCK IoStatusBlock
);
5481 IN OUT PMDL TargetMdl
,
5482 IN PVOID VirtualAddress
,
5488 IoBuildSynchronousFsdRequest(
5489 IN ULONG MajorFunction
,
5490 IN PDEVICE_OBJECT DeviceObject
,
5491 IN OUT PVOID Buffer OPTIONAL
,
5492 IN ULONG Length OPTIONAL
,
5493 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
5495 OUT PIO_STATUS_BLOCK IoStatusBlock
);
5501 IN PDEVICE_OBJECT DeviceObject
,
5507 * IN PDEVICE_OBJECT DeviceObject,
5510 #define IoCallDriver IofCallDriver
5516 IN PDEVICE_OBJECT DeviceObject
,
5517 IN PFILE_OBJECT FileObject
);
5529 IN ACCESS_MASK DesiredAccess
,
5530 IN ULONG DesiredShareAccess
,
5531 IN OUT PFILE_OBJECT FileObject
,
5532 IN OUT PSHARE_ACCESS ShareAccess
,
5540 IN CCHAR PriorityBoost
);
5544 * IoCompleteRequest(
5546 * IN CCHAR PriorityBoost)
5548 #define IoCompleteRequest IofCompleteRequest
5554 OUT PKINTERRUPT
*InterruptObject
,
5555 IN PKSERVICE_ROUTINE ServiceRoutine
,
5556 IN PVOID ServiceContext
,
5557 IN PKSPIN_LOCK SpinLock OPTIONAL
,
5560 IN KIRQL SynchronizeIrql
,
5561 IN KINTERRUPT_MODE InterruptMode
,
5562 IN BOOLEAN ShareVector
,
5563 IN KAFFINITY ProcessorEnableMask
,
5564 IN BOOLEAN FloatingSave
);
5567 * PIO_STACK_LOCATION
5568 * IoGetCurrentIrpStackLocation(
5571 #define IoGetCurrentIrpStackLocation(_Irp) \
5572 ((_Irp)->Tail.Overlay.CurrentStackLocation)
5575 * PIO_STACK_LOCATION
5576 * IoGetNextIrpStackLocation(
5579 #define IoGetNextIrpStackLocation(_Irp) \
5580 ((_Irp)->Tail.Overlay.CurrentStackLocation - 1)
5584 * IoCopyCurrentIrpStackLocationToNext(
5587 #define IoCopyCurrentIrpStackLocationToNext(_Irp) \
5589 PIO_STACK_LOCATION _IrpSp; \
5590 PIO_STACK_LOCATION _NextIrpSp; \
5591 _IrpSp = IoGetCurrentIrpStackLocation(_Irp); \
5592 _NextIrpSp = IoGetNextIrpStackLocation(_Irp); \
5593 RtlCopyMemory(_NextIrpSp, _IrpSp, \
5594 FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); \
5595 _NextIrpSp->Control = 0; \
5608 IN PDRIVER_OBJECT DriverObject
,
5609 IN ULONG DeviceExtensionSize
,
5610 IN PUNICODE_STRING DeviceName OPTIONAL
,
5611 IN DEVICE_TYPE DeviceType
,
5612 IN ULONG DeviceCharacteristics
,
5613 IN BOOLEAN Exclusive
,
5614 OUT PDEVICE_OBJECT
*DeviceObject
);
5620 IN PDEVICE_OBJECT DeviceObject
,
5621 IN PCREATE_DISK Disk
);
5627 OUT PHANDLE FileHandle
,
5628 IN ACCESS_MASK DesiredAccess
,
5629 IN POBJECT_ATTRIBUTES ObjectAttributes
,
5630 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5631 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
5632 IN ULONG FileAttributes
,
5633 IN ULONG ShareAccess
,
5634 IN ULONG Disposition
,
5635 IN ULONG CreateOptions
,
5636 IN PVOID EaBuffer OPTIONAL
,
5638 IN CREATE_FILE_TYPE CreateFileType
,
5639 IN PVOID ExtraCreateParameters OPTIONAL
,
5645 IoCreateNotificationEvent(
5646 IN PUNICODE_STRING EventName
,
5647 OUT PHANDLE EventHandle
);
5652 IoCreateSymbolicLink(
5653 IN PUNICODE_STRING SymbolicLinkName
,
5654 IN PUNICODE_STRING DeviceName
);
5659 IoCreateSynchronizationEvent(
5660 IN PUNICODE_STRING EventName
,
5661 OUT PHANDLE EventHandle
);
5666 IoCreateUnprotectedSymbolicLink(
5667 IN PUNICODE_STRING SymbolicLinkName
,
5668 IN PUNICODE_STRING DeviceName
);
5675 IN PIO_CSQ_INSERT_IRP CsqInsertIrp
,
5676 IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
5677 IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
5678 IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
5679 IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
5680 IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
5688 IN PIO_CSQ_IRP_CONTEXT Context
);
5695 IN PIO_CSQ_IRP_CONTEXT Context
);
5702 IN PVOID PeekContext
);
5708 IN PCONTROLLER_OBJECT ControllerObject
);
5714 IN PDEVICE_OBJECT DeviceObject
);
5719 IoDeleteSymbolicLink(
5720 IN PUNICODE_STRING SymbolicLinkName
);
5724 * IoDeassignArcName(
5725 * IN PUNICODE_STRING ArcName)
5727 #define IoDeassignArcName IoDeleteSymbolicLink
5733 IN OUT PDEVICE_OBJECT TargetDevice
);
5738 IoDisconnectInterrupt(
5739 IN PKINTERRUPT InterruptObject
);
5744 IoForwardIrpSynchronously(
5745 IN PDEVICE_OBJECT DeviceObject
,
5748 #define IoForwardAndCatchIrp IoForwardIrpSynchronously
5754 IN PCONTROLLER_OBJECT ControllerObject
);
5759 IoFreeErrorLogEntry(
5778 IN PIO_WORKITEM pIOWorkItem
);
5783 IoGetAttachedDevice(
5784 IN PDEVICE_OBJECT DeviceObject
);
5789 IoGetAttachedDeviceReference(
5790 IN PDEVICE_OBJECT DeviceObject
);
5795 IoGetBootDiskInformation(
5796 IN OUT PBOOTDISK_INFORMATION BootDiskInformation
,
5800 PCONFIGURATION_INFORMATION
5802 IoGetConfigurationInformation(
5808 IoGetCurrentProcess(
5814 IoGetDeviceInterfaceAlias(
5815 IN PUNICODE_STRING SymbolicLinkName
,
5816 IN CONST GUID
*AliasInterfaceClassGuid
,
5817 OUT PUNICODE_STRING AliasSymbolicLinkName
);
5819 #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
5824 IoGetDeviceInterfaces(
5825 IN CONST GUID
*InterfaceClassGuid
,
5826 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
5828 OUT PWSTR
*SymbolicLinkList
);
5833 IoGetDeviceObjectPointer(
5834 IN PUNICODE_STRING ObjectName
,
5835 IN ACCESS_MASK DesiredAccess
,
5836 OUT PFILE_OBJECT
*FileObject
,
5837 OUT PDEVICE_OBJECT
*DeviceObject
);
5842 IoGetDeviceProperty(
5843 IN PDEVICE_OBJECT DeviceObject
,
5844 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
5845 IN ULONG BufferLength
,
5846 OUT PVOID PropertyBuffer
,
5847 OUT PULONG ResultLength
);
5852 IoGetDeviceToVerify(
5853 IN PETHREAD Thread
);
5859 IN PDEVICE_OBJECT PhysicalDeviceObject
,
5860 IN PDEVICE_DESCRIPTION DeviceDescription
,
5861 IN OUT PULONG NumberOfMapRegisters
);
5866 IoGetDriverObjectExtension(
5867 IN PDRIVER_OBJECT DriverObject
,
5868 IN PVOID ClientIdentificationAddress
);
5873 IoGetFileObjectGenericMapping(
5878 * IoGetFunctionCodeFromCtlCode(
5879 * IN ULONG ControlCode)
5881 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \
5882 (((_ControlCode) >> 2) & 0x00000FFF)
5893 IoGetRelatedDeviceObject(
5894 IN PFILE_OBJECT FileObject
);
5900 OUT PULONG_PTR LowLimit
,
5901 OUT PULONG_PTR HighLimit
);
5905 IoGetRemainingStackSize(
5909 ULONG_PTR End
, Begin
;
5912 IoGetStackLimits(&Begin
, &End
);
5913 Result
= (ULONG_PTR
)(&End
) - Begin
;
5922 IN PKDEFERRED_ROUTINE DeferredRoutine
,
5923 IN PVOID DeferredContext
);
5927 * IoInitializeDpcRequest(
5928 * IN PDEVICE_OBJECT DeviceObject,
5929 * IN PIO_DPC_ROUTINE DpcRoutine)
5931 #define IoInitializeDpcRequest(_DeviceObject, \
5933 KeInitializeDpc(&(_DeviceObject)->Dpc, \
5934 (PKDEFERRED_ROUTINE) (_DpcRoutine), \
5942 IN USHORT PacketSize
,
5943 IN CCHAR StackSize
);
5948 IoInitializeRemoveLockEx(
5949 IN PIO_REMOVE_LOCK Lock
,
5950 IN ULONG AllocateTag
,
5951 IN ULONG MaxLockedMinutes
,
5952 IN ULONG HighWatermark
,
5953 IN ULONG RemlockSize
);
5956 * IoInitializeRemoveLock(
5957 * IN PIO_REMOVE_LOCK Lock,
5958 * IN ULONG AllocateTag,
5959 * IN ULONG MaxLockedMinutes,
5960 * IN ULONG HighWatermark)
5962 #define IoInitializeRemoveLock( \
5963 Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
5964 IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
5965 HighWatermark, sizeof(IO_REMOVE_LOCK))
5971 IN PDEVICE_OBJECT DeviceObject
,
5972 IN PIO_TIMER_ROUTINE TimerRoutine
,
5978 IoInvalidateDeviceRelations(
5979 IN PDEVICE_OBJECT DeviceObject
,
5980 IN DEVICE_RELATION_TYPE Type
);
5985 IoInvalidateDeviceState(
5986 IN PDEVICE_OBJECT PhysicalDeviceObject
);
5992 IN PIRP Irp OPTIONAL
);
5996 * IoIsErrorUserInduced(
5997 * IN NTSTATUS Status);
5999 #define IoIsErrorUserInduced(Status) \
6000 ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
6001 ((Status) == STATUS_IO_TIMEOUT) || \
6002 ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
6003 ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
6004 ((Status) == STATUS_VERIFY_REQUIRED) || \
6005 ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
6006 ((Status) == STATUS_WRONG_VOLUME)))
6011 IoIsWdmVersionAvailable(
6012 IN UCHAR MajorVersion
,
6013 IN UCHAR MinorVersion
);
6018 IoMakeAssociatedIrp(
6020 IN CCHAR StackSize
);
6027 #define IoMarkIrpPending(_Irp) \
6028 (IoGetCurrentIrpStackLocation(_Irp)->Control |= SL_PENDING_RETURNED)
6033 IoOpenDeviceInterfaceRegistryKey(
6034 IN PUNICODE_STRING SymbolicLinkName
,
6035 IN ACCESS_MASK DesiredAccess
,
6036 OUT PHANDLE DeviceInterfaceKey
);
6038 #define PLUGPLAY_REGKEY_DEVICE 1
6039 #define PLUGPLAY_REGKEY_DRIVER 2
6040 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
6045 IoOpenDeviceRegistryKey(
6046 IN PDEVICE_OBJECT DeviceObject
,
6047 IN ULONG DevInstKeyType
,
6048 IN ACCESS_MASK DesiredAccess
,
6049 OUT PHANDLE DevInstRegKey
);
6054 IoQueryDeviceDescription(
6055 IN PINTERFACE_TYPE BusType OPTIONAL
,
6056 IN PULONG BusNumber OPTIONAL
,
6057 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
6058 IN PULONG ControllerNumber OPTIONAL
,
6059 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
6060 IN PULONG PeripheralNumber OPTIONAL
,
6061 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
6068 IN PIO_WORKITEM pIOWorkItem
,
6069 IN PIO_WORKITEM_ROUTINE Routine
,
6070 IN WORK_QUEUE_TYPE QueueType
,
6078 IN PVPB Vpb OPTIONAL
,
6079 IN PDEVICE_OBJECT RealDeviceObject
);
6084 IoRaiseInformationalHardError(
6085 IN NTSTATUS ErrorStatus
,
6086 IN PUNICODE_STRING String OPTIONAL
,
6087 IN PKTHREAD Thread OPTIONAL
);
6092 IoReadDiskSignature(
6093 IN PDEVICE_OBJECT DeviceObject
,
6094 IN ULONG BytesPerSector
,
6095 OUT PDISK_SIGNATURE Signature
);
6100 IoReadPartitionTable(
6101 IN PDEVICE_OBJECT DeviceObject
,
6102 IN ULONG SectorSize
,
6103 IN BOOLEAN ReturnRecognizedPartitions
,
6104 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
6109 IoReadPartitionTableEx(
6110 IN PDEVICE_OBJECT DeviceObject
,
6111 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
6116 IoRegisterBootDriverReinitialization(
6117 IN PDRIVER_OBJECT DriverObject
,
6118 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
6124 IoRegisterBootDriverReinitialization(
6125 IN PDRIVER_OBJECT DriverObject
,
6126 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
6132 IoRegisterDeviceInterface(
6133 IN PDEVICE_OBJECT PhysicalDeviceObject
,
6134 IN CONST GUID
*InterfaceClassGuid
,
6135 IN PUNICODE_STRING ReferenceString OPTIONAL
,
6136 OUT PUNICODE_STRING SymbolicLinkName
);
6141 IoRegisterDriverReinitialization(
6142 IN PDRIVER_OBJECT DriverObject
,
6143 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
6149 IoRegisterPlugPlayNotification(
6150 IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory
,
6151 IN ULONG EventCategoryFlags
,
6152 IN PVOID EventCategoryData OPTIONAL
,
6153 IN PDRIVER_OBJECT DriverObject
,
6154 IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine
,
6156 OUT PVOID
*NotificationEntry
);
6161 IoRegisterShutdownNotification(
6162 IN PDEVICE_OBJECT DeviceObject
);
6167 IoReleaseCancelSpinLock(
6173 IoReleaseRemoveLockAndWaitEx(
6174 IN PIO_REMOVE_LOCK RemoveLock
,
6176 IN ULONG RemlockSize
);
6181 IoReleaseRemoveLockEx(
6182 IN PIO_REMOVE_LOCK RemoveLock
,
6184 IN ULONG RemlockSize
);
6188 * IoReleaseRemoveLock(
6189 * IN PIO_REMOVE_LOCK RemoveLock,
6192 #define IoReleaseRemoveLock(_RemoveLock, \
6194 IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
6198 * IoReleaseRemoveLockAndWait(
6199 * IN PIO_REMOVE_LOCK RemoveLock,
6202 #define IoReleaseRemoveLockAndWait(_RemoveLock, \
6204 IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
6209 IoRemoveShareAccess(
6210 IN PFILE_OBJECT FileObject
,
6211 IN OUT PSHARE_ACCESS ShareAccess
);
6216 IoReportDetectedDevice(
6217 IN PDRIVER_OBJECT DriverObject
,
6218 IN INTERFACE_TYPE LegacyBusType
,
6220 IN ULONG SlotNumber
,
6221 IN PCM_RESOURCE_LIST ResourceList
,
6222 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
6223 IN BOOLEAN ResourceAssigned
,
6224 IN OUT PDEVICE_OBJECT
*DeviceObject
);
6229 IoReportResourceForDetection(
6230 IN PDRIVER_OBJECT DriverObject
,
6231 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
6232 IN ULONG DriverListSize OPTIONAL
,
6233 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
6234 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
6235 IN ULONG DeviceListSize OPTIONAL
,
6236 OUT PBOOLEAN ConflictDetected
);
6241 IoReportResourceUsage(
6242 IN PUNICODE_STRING DriverClassName OPTIONAL
,
6243 IN PDRIVER_OBJECT DriverObject
,
6244 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
6245 IN ULONG DriverListSize OPTIONAL
,
6246 IN PDEVICE_OBJECT DeviceObject
,
6247 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
6248 IN ULONG DeviceListSize OPTIONAL
,
6249 IN BOOLEAN OverrideConflict
,
6250 OUT PBOOLEAN ConflictDetected
);
6255 IoReportTargetDeviceChange(
6256 IN PDEVICE_OBJECT PhysicalDeviceObject
,
6257 IN PVOID NotificationStructure
);
6262 IoReportTargetDeviceChangeAsynchronous(
6263 IN PDEVICE_OBJECT PhysicalDeviceObject
,
6264 IN PVOID NotificationStructure
,
6265 IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL
,
6266 IN PVOID Context OPTIONAL
);
6271 IoRequestDeviceEject(
6272 IN PDEVICE_OBJECT PhysicalDeviceObject
);
6277 * IN PDEVICE_OBJECT DeviceObject,
6279 * IN PVOID Context);
6281 #define IoRequestDpc(DeviceObject, Irp, Context)( \
6282 KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
6289 IN NTSTATUS Status
);
6293 * IoSetCancelRoutine(
6295 * IN PDRIVER_CANCEL CancelRoutine)
6297 #define IoSetCancelRoutine(_Irp, \
6299 ((PDRIVER_CANCEL) InterlockedExchangePointer( \
6300 (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (_CancelRoutine)))
6304 * IoSetCompletionRoutine(
6306 * IN PIO_COMPLETION_ROUTINE CompletionRoutine,
6308 * IN BOOLEAN InvokeOnSuccess,
6309 * IN BOOLEAN InvokeOnError,
6310 * IN BOOLEAN InvokeOnCancel)
6312 #define IoSetCompletionRoutine(_Irp, \
6313 _CompletionRoutine, \
6319 PIO_STACK_LOCATION _IrpSp; \
6320 ASSERT((_InvokeOnSuccess) || (_InvokeOnError) || (_InvokeOnCancel) ? \
6321 (_CompletionRoutine) != NULL : TRUE); \
6322 _IrpSp = IoGetNextIrpStackLocation(_Irp); \
6323 _IrpSp->CompletionRoutine = (PIO_COMPLETION_ROUTINE)(_CompletionRoutine); \
6324 _IrpSp->Context = (_Context); \
6325 _IrpSp->Control = 0; \
6326 if (_InvokeOnSuccess) _IrpSp->Control = SL_INVOKE_ON_SUCCESS; \
6327 if (_InvokeOnError) _IrpSp->Control |= SL_INVOKE_ON_ERROR; \
6328 if (_InvokeOnCancel) _IrpSp->Control |= SL_INVOKE_ON_CANCEL; \
6334 IoSetCompletionRoutineEx(
6335 IN PDEVICE_OBJECT DeviceObject
,
6337 IN PIO_COMPLETION_ROUTINE CompletionRoutine
,
6339 IN BOOLEAN InvokeOnSuccess
,
6340 IN BOOLEAN InvokeOnError
,
6341 IN BOOLEAN InvokeOnCancel
);
6346 IoSetDeviceInterfaceState(
6347 IN PUNICODE_STRING SymbolicLinkName
,
6353 IoSetHardErrorOrVerifyDevice(
6355 IN PDEVICE_OBJECT DeviceObject
);
6359 * IoSetNextIrpStackLocation(
6362 #define IoSetNextIrpStackLocation(_Irp) \
6364 (_Irp)->CurrentLocation--; \
6365 (_Irp)->Tail.Overlay.CurrentStackLocation--; \
6371 IoSetPartitionInformation(
6372 IN PDEVICE_OBJECT DeviceObject
,
6373 IN ULONG SectorSize
,
6374 IN ULONG PartitionNumber
,
6375 IN ULONG PartitionType
);
6380 IoSetPartitionInformationEx(
6381 IN PDEVICE_OBJECT DeviceObject
,
6382 IN ULONG PartitionNumber
,
6383 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
6389 IN ACCESS_MASK DesiredAccess
,
6390 IN ULONG DesiredShareAccess
,
6391 IN OUT PFILE_OBJECT FileObject
,
6392 OUT PSHARE_ACCESS ShareAccess
);
6397 IoSetStartIoAttributes(
6398 IN PDEVICE_OBJECT DeviceObject
,
6399 IN BOOLEAN DeferredStartIo
,
6400 IN BOOLEAN NonCancelable
);
6405 IoSetSystemPartition(
6406 IN PUNICODE_STRING VolumeNameString
);
6411 IoSetThreadHardErrorMode(
6412 IN BOOLEAN EnableHardErrors
);
6417 * IN CCHAR StackSize)
6419 #define IoSizeOfIrp(_StackSize) \
6420 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
6424 * IoSkipCurrentIrpStackLocation(
6427 #define IoSkipCurrentIrpStackLocation(_Irp) \
6429 (_Irp)->CurrentLocation++; \
6430 (_Irp)->Tail.Overlay.CurrentStackLocation++; \
6437 IN PDEVICE_OBJECT DeviceObject
,
6438 IN BOOLEAN Cancelable
);
6443 IoStartNextPacketByKey(
6444 IN PDEVICE_OBJECT DeviceObject
,
6445 IN BOOLEAN Cancelable
,
6452 IN PDEVICE_OBJECT DeviceObject
,
6454 IN PULONG Key OPTIONAL
,
6455 IN PDRIVER_CANCEL CancelFunction OPTIONAL
);
6461 IN PDEVICE_OBJECT DeviceObject
);
6467 IN PDEVICE_OBJECT DeviceObject
);
6472 IoUnregisterPlugPlayNotification(
6473 IN PVOID NotificationEntry
);
6478 IoUnregisterShutdownNotification(
6479 IN PDEVICE_OBJECT DeviceObject
);
6484 IoUpdateShareAccess(
6485 IN PFILE_OBJECT FileObject
,
6486 IN OUT PSHARE_ACCESS ShareAccess
);
6491 IoVerifyPartitionTable(
6492 IN PDEVICE_OBJECT DeviceObject
,
6493 IN BOOLEAN FixErrors
);
6498 IoVolumeDeviceToDosName(
6499 IN PVOID VolumeDeviceObject
,
6500 OUT PUNICODE_STRING DosName
);
6505 IoWMIAllocateInstanceIds(
6507 IN ULONG InstanceCount
,
6508 OUT ULONG
*FirstInstanceId
);
6513 IoWMIDeviceObjectToProviderId(
6514 IN PDEVICE_OBJECT DeviceObject
);
6519 IoWMIDeviceObjectToInstanceName(
6520 IN PVOID DataBlockObject
,
6521 IN PDEVICE_OBJECT DeviceObject
,
6522 OUT PUNICODE_STRING InstanceName
);
6528 IN PVOID DataBlockObject
,
6529 IN PUNICODE_STRING InstanceName
,
6531 IN ULONG InBufferSize
,
6532 IN OUT PULONG OutBufferSize
,
6533 IN OUT PUCHAR InOutBuffer
);
6538 IoWMIHandleToInstanceName(
6539 IN PVOID DataBlockObject
,
6540 IN HANDLE FileHandle
,
6541 OUT PUNICODE_STRING InstanceName
);
6547 IN GUID
*DataBlockGuid
,
6548 IN ULONG DesiredAccess
,
6549 OUT PVOID
*DataBlockObject
);
6555 IN PVOID DataBlockObject
,
6556 IN OUT ULONG
*InOutBufferSize
,
6557 OUT PVOID OutBuffer
);
6562 IoWMIQueryAllDataMultiple(
6563 IN PVOID
*DataBlockObjectList
,
6564 IN ULONG ObjectCount
,
6565 IN OUT ULONG
*InOutBufferSize
,
6566 OUT PVOID OutBuffer
);
6571 IoWMIQuerySingleInstance(
6572 IN PVOID DataBlockObject
,
6573 IN PUNICODE_STRING InstanceName
,
6574 IN OUT ULONG
*InOutBufferSize
,
6575 OUT PVOID OutBuffer
);
6580 IoWMIQuerySingleInstanceMultiple(
6581 IN PVOID
*DataBlockObjectList
,
6582 IN PUNICODE_STRING InstanceNames
,
6583 IN ULONG ObjectCount
,
6584 IN OUT ULONG
*InOutBufferSize
,
6585 OUT PVOID OutBuffer
);
6590 IoWMIRegistrationControl(
6591 IN PDEVICE_OBJECT DeviceObject
,
6597 IoWMISetNotificationCallback(
6599 IN WMI_NOTIFICATION_CALLBACK Callback
,
6605 IoWMISetSingleInstance(
6606 IN PVOID DataBlockObject
,
6607 IN PUNICODE_STRING InstanceName
,
6609 IN ULONG ValueBufferSize
,
6610 IN PVOID ValueBuffer
);
6616 IN PVOID DataBlockObject
,
6617 IN PUNICODE_STRING InstanceName
,
6618 IN ULONG DataItemId
,
6620 IN ULONG ValueBufferSize
,
6621 IN PVOID ValueBuffer
);
6626 IoWMISuggestInstanceName(
6627 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
6628 IN PUNICODE_STRING SymbolicLinkName OPTIONAL
,
6629 IN BOOLEAN CombineNames
,
6630 OUT PUNICODE_STRING SuggestedInstanceName
);
6636 IN PVOID WnodeEventItem
);
6641 IoWriteErrorLogEntry(
6647 IoWritePartitionTable(
6648 IN PDEVICE_OBJECT DeviceObject
,
6649 IN ULONG SectorSize
,
6650 IN ULONG SectorsPerTrack
,
6651 IN ULONG NumberOfHeads
,
6652 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
6657 IoWritePartitionTableEx(
6658 IN PDEVICE_OBJECT DeviceObject
,
6659 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*PartitionBuffer
);
6663 /** Kernel routines **/
6665 #if defined (_M_AMD64)
6669 KeAcquireInStackQueuedSpinLock(
6670 IN PKSPIN_LOCK SpinLock
,
6671 IN PKLOCK_QUEUE_HANDLE LockHandle
);
6676 KeReleaseInStackQueuedSpinLock(
6677 IN PKLOCK_QUEUE_HANDLE LockHandle
);
6682 KeAcquireInStackQueuedSpinLock(
6683 IN PKSPIN_LOCK SpinLock
,
6684 IN PKLOCK_QUEUE_HANDLE LockHandle
);
6689 KeReleaseInStackQueuedSpinLock(
6690 IN PKLOCK_QUEUE_HANDLE LockHandle
);
6696 KeAcquireInStackQueuedSpinLockAtDpcLevel(
6697 IN PKSPIN_LOCK SpinLock
,
6698 IN PKLOCK_QUEUE_HANDLE LockHandle
);
6703 KeAcquireInterruptSpinLock(
6704 IN PKINTERRUPT Interrupt
);
6717 IN ULONG BugCheckCode
);
6724 IN ULONG BugCheckCode
,
6725 IN ULONG_PTR BugCheckParameter1
,
6726 IN ULONG_PTR BugCheckParameter2
,
6727 IN ULONG_PTR BugCheckParameter3
,
6728 IN ULONG_PTR BugCheckParameter4
);
6745 KeDelayExecutionThread(
6746 IN KPROCESSOR_MODE WaitMode
,
6747 IN BOOLEAN Alertable
,
6748 IN PLARGE_INTEGER Interval
);
6753 KeDeregisterBugCheckCallback(
6754 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
6759 KeEnterCriticalRegion(
6766 * IN BOOLEAN ReadOperation,
6767 * IN BOOLEAN DmaOperation)
6769 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
6771 #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
6772 #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
6773 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
6774 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
6786 KeFlushWriteBuffer(VOID
);
6791 KeGetRecommendedSharedDataAlignment(
6797 KeInitializeDeviceQueue(
6798 IN PKDEVICE_QUEUE DeviceQueue
);
6810 KeInitializeSemaphore(
6811 IN PRKSEMAPHORE Semaphore
,
6824 KeInitializeTimerEx(
6826 IN TIMER_TYPE Type
);
6831 KeInsertByKeyDeviceQueue(
6832 IN PKDEVICE_QUEUE DeviceQueue
,
6833 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
6839 KeInsertDeviceQueue(
6840 IN PKDEVICE_QUEUE DeviceQueue
,
6841 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
6848 IN PVOID SystemArgument1
,
6849 IN PVOID SystemArgument2
);
6854 KeLeaveCriticalRegion(
6864 volatile LONG Barrier
;
6865 #if defined(__GNUC__)
6866 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
6867 #elif defined(_MSC_VER)
6868 __asm xchg
[Barrier
], eax
6879 IN KPRIORITY Increment
,
6885 KeQueryActiveProcessors(
6892 KeQueryPerformanceCounter(
6893 OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL
);
6898 KeQueryPriorityThread(
6899 IN PRKTHREAD Thread
);
6904 KeQueryRuntimeThread(
6906 OUT PULONG UserTime
);
6908 #if !defined(_M_AMD64)
6912 KeQueryInterruptTime(
6919 OUT PLARGE_INTEGER CurrentTime
);
6925 OUT PLARGE_INTEGER TickCount
);
6931 KeQueryTimeIncrement(
6950 KeReadStateSemaphore(
6951 IN PRKSEMAPHORE Semaphore
);
6962 KeRegisterBugCheckCallback(
6963 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
6964 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
6967 IN PUCHAR Component
);
6972 KeRegisterNmiCallback(
6973 IN PNMI_CALLBACK CallbackRoutine
,
6980 KeDeregisterNmiCallback(
6987 KeReleaseInStackQueuedSpinLockFromDpcLevel(
6988 IN PKLOCK_QUEUE_HANDLE LockHandle
);
6993 KeReleaseInterruptSpinLock(
6994 IN PKINTERRUPT Interrupt
,
7008 IN PRKSEMAPHORE Semaphore
,
7009 IN KPRIORITY Increment
,
7014 PKDEVICE_QUEUE_ENTRY
7016 KeRemoveByKeyDeviceQueue(
7017 IN PKDEVICE_QUEUE DeviceQueue
,
7021 PKDEVICE_QUEUE_ENTRY
7023 KeRemoveDeviceQueue(
7024 IN PKDEVICE_QUEUE DeviceQueue
);
7029 KeRemoveEntryDeviceQueue(
7030 IN PKDEVICE_QUEUE DeviceQueue
,
7031 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
7048 KeRestoreFloatingPointState(
7049 IN PKFLOATING_SAVE FloatSave
);
7054 KeRevertToUserAffinityThread(VOID
);
7059 KeSaveFloatingPointState(
7060 OUT PKFLOATING_SAVE FloatSave
);
7065 KeSetBasePriorityThread(
7066 IN PRKTHREAD Thread
,
7074 IN KPRIORITY Increment
,
7082 IN KDPC_IMPORTANCE Importance
);
7087 KeSetPriorityThread(
7089 IN KPRIORITY Priority
);
7094 KeSetSystemAffinityThread(
7095 IN KAFFINITY Affinity
);
7100 KeSetTargetProcessorDpc(
7109 IN LARGE_INTEGER DueTime
,
7110 IN PKDPC Dpc OPTIONAL
);
7117 IN LARGE_INTEGER DueTime
,
7118 IN LONG Period OPTIONAL
,
7119 IN PKDPC Dpc OPTIONAL
);
7124 KeSetTimeUpdateNotifyRoutine(
7125 IN PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine
);
7130 KeStallExecutionProcessor(
7131 IN ULONG MicroSeconds
);
7136 KeSynchronizeExecution(
7137 IN PKINTERRUPT Interrupt
,
7138 IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
7139 IN PVOID SynchronizeContext
);
7144 KeWaitForMultipleObjects(
7147 IN WAIT_TYPE WaitType
,
7148 IN KWAIT_REASON WaitReason
,
7149 IN KPROCESSOR_MODE WaitMode
,
7150 IN BOOLEAN Alertable
,
7151 IN PLARGE_INTEGER Timeout OPTIONAL
,
7152 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL
);
7157 KeWaitForMutexObject(
7159 IN KWAIT_REASON WaitReason
,
7160 IN KPROCESSOR_MODE WaitMode
,
7161 IN BOOLEAN Alertable
,
7162 IN PLARGE_INTEGER Timeout OPTIONAL
);
7167 KeWaitForSingleObject(
7169 IN KWAIT_REASON WaitReason
,
7170 IN KPROCESSOR_MODE WaitMode
,
7171 IN BOOLEAN Alertable
,
7172 IN PLARGE_INTEGER Timeout OPTIONAL
);
7176 (NTAPI
*PKIPI_BROADCAST_WORKER
)(
7177 IN ULONG_PTR Argument
7184 IN PKIPI_BROADCAST_WORKER BroadcastFunction
,
7185 IN ULONG_PTR Context
7205 KeRaiseIrqlToDpcLevel(
7211 KeRaiseIrqlToSynchLevel(
7214 #define KeLowerIrql(a) KfLowerIrql(a)
7215 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
7217 #elif defined(_M_AMD64)
7221 KeGetCurrentIrql(VOID
)
7223 return (KIRQL
)__readcr8();
7228 KeLowerIrql(IN KIRQL NewIrql
)
7230 ASSERT(KeGetCurrentIrql() >= NewIrql
);
7231 __writecr8(NewIrql
);
7236 KfRaiseIrql(IN KIRQL NewIrql
)
7240 OldIrql
= __readcr8();
7241 ASSERT(OldIrql
<= NewIrql
);
7242 __writecr8(NewIrql
);
7245 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
7249 KeRaiseIrqlToDpcLevel(VOID
)
7251 return KfRaiseIrql(DISPATCH_LEVEL
);
7256 KeRaiseIrqlToSynchLevel(VOID
)
7258 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
7261 #elif defined(__PowerPC__)
7278 KeRaiseIrqlToDpcLevel(
7284 KeRaiseIrqlToSynchLevel(
7287 #define KeLowerIrql(a) KfLowerIrql(a)
7288 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
7290 #elif defined(_M_MIPS)
7292 #define KeLowerIrql(a) KfLowerIrql(a)
7293 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
7310 KeRaiseIrqlToDpcLevel(
7316 KeRaiseIrqlToSynchLevel(
7319 #elif defined(_M_ARM)
7336 OUT PKIRQL OldIrql
);
7341 KeRaiseIrqlToDpcLevel(
7347 KeRaiseIrqlToSynchLevel(
7352 /** Memory manager routines **/
7359 IN ULONG NumberOfBytes
);
7364 MmAllocateContiguousMemory(
7365 IN ULONG NumberOfBytes
,
7366 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
7371 MmAllocateContiguousMemorySpecifyCache(
7372 IN SIZE_T NumberOfBytes
,
7373 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
7374 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
7375 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
7376 IN MEMORY_CACHING_TYPE CacheType
);
7381 MmAllocateMappingAddress(
7382 IN SIZE_T NumberOfBytes
,
7388 MmAllocateNonCachedMemory(
7389 IN ULONG NumberOfBytes
);
7394 MmAllocatePagesForMdl(
7395 IN PHYSICAL_ADDRESS LowAddress
,
7396 IN PHYSICAL_ADDRESS HighAddress
,
7397 IN PHYSICAL_ADDRESS SkipBytes
,
7398 IN SIZE_T TotalBytes
);
7400 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
7404 MmAllocatePagesForMdlEx(
7405 IN PHYSICAL_ADDRESS LowAddress
,
7406 IN PHYSICAL_ADDRESS HighAddress
,
7407 IN PHYSICAL_ADDRESS SkipBytes
,
7408 IN SIZE_T TotalBytes
,
7409 IN MEMORY_CACHING_TYPE CacheType
,
7416 MmBuildMdlForNonPagedPool(
7417 IN OUT PMDL MemoryDescriptorList
);
7419 typedef enum _MMFLUSH_TYPE
{
7427 MmFlushImageSection(
7428 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
7429 IN MMFLUSH_TYPE FlushType
);
7434 MmFreeContiguousMemory(
7435 IN PVOID BaseAddress
);
7440 MmFreeContiguousMemorySpecifyCache(
7441 IN PVOID BaseAddress
,
7442 IN SIZE_T NumberOfBytes
,
7443 IN MEMORY_CACHING_TYPE CacheType
);
7448 MmFreeMappingAddress(
7449 IN PVOID BaseAddress
,
7455 MmFreeNonCachedMemory(
7456 IN PVOID BaseAddress
,
7457 IN SIZE_T NumberOfBytes
);
7463 IN PMDL MemoryDescriptorList
);
7467 * MmGetMdlByteCount(
7470 #define MmGetMdlByteCount(_Mdl) \
7475 * MmGetMdlByteOffset(
7478 #define MmGetMdlByteOffset(_Mdl) \
7479 ((_Mdl)->ByteOffset)
7486 #define MmGetMdlPfnArray(_Mdl) \
7487 ((PPFN_NUMBER) ((_Mdl) + 1))
7491 * MmGetMdlVirtualAddress(
7494 #define MmGetMdlVirtualAddress(_Mdl) \
7495 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
7500 MmGetPhysicalAddress(
7501 IN PVOID BaseAddress
);
7504 PPHYSICAL_MEMORY_RANGE
7506 MmGetPhysicalMemoryRanges(
7512 MmGetVirtualForPhysical(
7513 IN PHYSICAL_ADDRESS PhysicalAddress
);
7518 MmMapLockedPagesSpecifyCache(
7519 IN PMDL MemoryDescriptorList
,
7520 IN KPROCESSOR_MODE AccessMode
,
7521 IN MEMORY_CACHING_TYPE CacheType
,
7522 IN PVOID BaseAddress
,
7523 IN ULONG BugCheckOnFailure
,
7524 IN MM_PAGE_PRIORITY Priority
);
7529 MmMapLockedPagesWithReservedMapping(
7530 IN PVOID MappingAddress
,
7532 IN PMDL MemoryDescriptorList
,
7533 IN MEMORY_CACHING_TYPE CacheType
);
7538 MmMapUserAddressesToPage(
7539 IN PVOID BaseAddress
,
7540 IN SIZE_T NumberOfBytes
,
7541 IN PVOID PageAddress
);
7547 IN PHYSICAL_ADDRESS PhysicalAddress
,
7548 IN SIZE_T NumberOfBytes
,
7549 IN MEMORY_CACHING_TYPE CacheType
);
7554 MmMapViewInSessionSpace(
7556 OUT PVOID
*MappedBase
,
7557 IN OUT PSIZE_T ViewSize
);
7562 MmMapViewInSystemSpace(
7564 OUT PVOID
*MappedBase
,
7565 IN PSIZE_T ViewSize
);
7570 MmMarkPhysicalMemoryAsBad(
7571 IN PPHYSICAL_ADDRESS StartAddress
,
7572 IN OUT PLARGE_INTEGER NumberOfBytes
);
7577 MmMarkPhysicalMemoryAsGood(
7578 IN PPHYSICAL_ADDRESS StartAddress
,
7579 IN OUT PLARGE_INTEGER NumberOfBytes
);
7584 MmGetSystemRoutineAddress(
7585 IN PUNICODE_STRING SystemRoutineName
);
7589 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
7593 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, \
7595 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
7596 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
7601 * IN PMDL MemoryDescriptorList,
7605 #define MmInitializeMdl(_MemoryDescriptorList, \
7609 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
7610 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
7611 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
7612 (_MemoryDescriptorList)->MdlFlags = 0; \
7613 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
7614 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
7615 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
7622 IN PVOID VirtualAddress
);
7627 MmIsDriverVerifying(
7628 IN PDRIVER_OBJECT DriverObject
);
7633 MmIsThisAnNtAsSystem(
7639 MmIsVerifierEnabled(
7640 OUT PULONG VerifierFlags
);
7645 MmLockPagableDataSection(
7646 IN PVOID AddressWithinSection
);
7651 MmLockPagableImageSection(
7652 IN PVOID AddressWithinSection
);
7656 * MmLockPagableCodeSection(
7657 * IN PVOID AddressWithinSection)
7659 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
7664 MmLockPagableSectionByHandle(
7665 IN PVOID ImageSectionHandle
);
7671 IN PHYSICAL_ADDRESS PhysicalAddress
,
7672 IN ULONG NumberOfBytes
,
7673 IN MEMORY_CACHING_TYPE CacheEnable
);
7679 IN PMDL MemoryDescriptorList
,
7680 IN KPROCESSOR_MODE AccessMode
);
7685 MmLockPageableDataSection (
7686 IN PVOID AddressWithinSection
7692 MmUnlockPageableImageSection(
7693 IN PVOID ImageSectionHandle
7700 IN PVOID AddressWithinSection
);
7705 MmProbeAndLockProcessPages(
7706 IN OUT PMDL MemoryDescriptorList
,
7707 IN PEPROCESS Process
,
7708 IN KPROCESSOR_MODE AccessMode
,
7709 IN LOCK_OPERATION Operation
);
7714 MmProtectMdlSystemAddress(
7715 IN PMDL MemoryDescriptorList
,
7716 IN ULONG NewProtect
);
7722 IN PVOID BaseAddress
,
7723 IN PMDL MemoryDescriptorList
);
7728 MmUnmapViewInSessionSpace(
7729 IN PVOID MappedBase
);
7734 MmUnmapViewInSystemSpace(
7735 IN PVOID MappedBase
);
7740 MmUnsecureVirtualMemory(
7741 IN HANDLE SecureHandle
);
7745 * MmPrepareMdlForReuse(
7748 #define MmPrepareMdlForReuse(_Mdl) \
7750 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
7751 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
7752 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
7753 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
7754 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
7758 #define MmGetProcedureAddress(Address) (Address)
7763 MmProbeAndLockPages(
7764 IN OUT PMDL MemoryDescriptorList
,
7765 IN KPROCESSOR_MODE AccessMode
,
7766 IN LOCK_OPERATION Operation
);
7777 MmRemovePhysicalMemory(
7778 IN PPHYSICAL_ADDRESS StartAddress
,
7779 IN OUT PLARGE_INTEGER NumberOfBytes
);
7784 MmResetDriverPaging(
7785 IN PVOID AddressWithinSection
);
7790 MmSecureVirtualMemory(
7793 IN ULONG ProbeMode
);
7805 MmUnlockPagableImageSection(
7806 IN PVOID ImageSectionHandle
);
7812 IN PMDL MemoryDescriptorList
);
7818 IN PVOID BaseAddress
,
7819 IN SIZE_T NumberOfBytes
);
7824 MmUnmapReservedMapping(
7825 IN PVOID BaseAddress
,
7827 IN PMDL MemoryDescriptorList
);
7832 MmUnmapVideoDisplay(
7833 IN PVOID BaseAddress
,
7834 IN SIZE_T NumberOfBytes
);
7838 /** Object manager routines **/
7844 IN PACCESS_STATE AccessState
,
7845 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
7847 IN POBJECT_TYPE Type
);
7852 ObDereferenceSecurityDescriptor(
7853 PSECURITY_DESCRIPTOR SecurityDescriptor
,
7859 ObfDereferenceObject(
7864 * ObDereferenceObject(
7867 #define ObDereferenceObject ObfDereferenceObject
7872 ObGetObjectSecurity(
7874 OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
7875 OUT PBOOLEAN MemoryAllocated
);
7882 IN PACCESS_STATE PassedAccessState OPTIONAL
,
7883 IN ACCESS_MASK DesiredAccess
,
7884 IN ULONG AdditionalReferences
,
7885 OUT PVOID
* ReferencedObject OPTIONAL
,
7886 OUT PHANDLE Handle
);
7897 ObLogSecurityDescriptor(
7898 IN PSECURITY_DESCRIPTOR InputSecurityDescriptor
,
7899 OUT PSECURITY_DESCRIPTOR
*OutputSecurityDescriptor
,
7903 * ObReferenceObject(
7906 #define ObReferenceObject ObfReferenceObject
7911 ObMakeTemporaryObject(
7918 IN POBJECT_ATTRIBUTES ObjectAttributes
,
7919 IN POBJECT_TYPE ObjectType
,
7920 IN KPROCESSOR_MODE AccessMode
,
7921 IN PACCESS_STATE PassedAccessState
,
7922 IN ACCESS_MASK DesiredAccess
,
7923 IN OUT PVOID ParseContext OPTIONAL
,
7924 OUT PHANDLE Handle
);
7929 ObOpenObjectByPointer(
7931 IN ULONG HandleAttributes
,
7932 IN PACCESS_STATE PassedAccessState OPTIONAL
,
7933 IN ACCESS_MASK DesiredAccess OPTIONAL
,
7934 IN POBJECT_TYPE ObjectType OPTIONAL
,
7935 IN KPROCESSOR_MODE AccessMode
,
7936 OUT PHANDLE Handle
);
7941 ObQueryObjectAuditingByHandle(
7943 OUT PBOOLEAN GenerateOnClose
);
7948 ObReferenceObjectByHandle(
7950 IN ACCESS_MASK DesiredAccess
,
7951 IN POBJECT_TYPE ObjectType OPTIONAL
,
7952 IN KPROCESSOR_MODE AccessMode
,
7954 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
);
7959 ObReferenceObjectByName(
7960 IN PUNICODE_STRING ObjectPath
,
7961 IN ULONG Attributes
,
7962 IN PACCESS_STATE PassedAccessState OPTIONAL
,
7963 IN ACCESS_MASK DesiredAccess OPTIONAL
,
7964 IN POBJECT_TYPE ObjectType
,
7965 IN KPROCESSOR_MODE AccessMode
,
7966 IN OUT PVOID ParseContext OPTIONAL
,
7972 ObReferenceObjectByPointer(
7974 IN ACCESS_MASK DesiredAccess
,
7975 IN POBJECT_TYPE ObjectType
,
7976 IN KPROCESSOR_MODE AccessMode
);
7981 ObReferenceSecurityDescriptor(
7982 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
7988 ObReleaseObjectSecurity(
7989 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
7990 IN BOOLEAN MemoryAllocated
);
7994 /** Process manager routines **/
7999 PsCreateSystemProcess(
8000 IN PHANDLE ProcessHandle
,
8001 IN ACCESS_MASK DesiredAccess
,
8002 IN POBJECT_ATTRIBUTES ObjectAttributes
);
8007 PsCreateSystemThread(
8008 OUT PHANDLE ThreadHandle
,
8009 IN ULONG DesiredAccess
,
8010 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
8011 IN HANDLE ProcessHandle OPTIONAL
,
8012 OUT PCLIENT_ID ClientId OPTIONAL
,
8013 IN PKSTART_ROUTINE StartRoutine
,
8014 IN PVOID StartContext
);
8018 * PsGetCurrentProcess(VOID)
8020 #define PsGetCurrentProcess IoGetCurrentProcess
8025 PsGetCurrentProcessId(
8030 * PsGetCurrentThread(VOID)
8032 #define PsGetCurrentThread() \
8033 ((PETHREAD) KeGetCurrentThread())
8038 PsGetCurrentThreadId(
8044 PsGetProcessId(PEPROCESS Process
);
8050 PULONG MajorVersion OPTIONAL
,
8051 PULONG MinorVersion OPTIONAL
,
8052 PULONG BuildNumber OPTIONAL
,
8053 PUNICODE_STRING CSDVersion OPTIONAL
);
8058 PsRemoveCreateThreadNotifyRoutine(
8059 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
8064 PsRemoveLoadImageNotifyRoutine(
8065 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
8070 PsSetCreateProcessNotifyRoutine(
8071 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
8077 PsSetCreateThreadNotifyRoutine(
8078 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
8083 PsSetLoadImageNotifyRoutine(
8084 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
8089 PsTerminateSystemThread(
8090 IN NTSTATUS ExitStatus
);
8092 extern NTSYSAPI PEPROCESS PsInitialSystemProcess
;
8095 /** Security reference monitor routines **/
8101 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
8102 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
8103 IN BOOLEAN SubjectContextLocked
,
8104 IN ACCESS_MASK DesiredAccess
,
8105 IN ACCESS_MASK PreviouslyGrantedAccess
,
8106 OUT PPRIVILEGE_SET
*Privileges OPTIONAL
,
8107 IN PGENERIC_MAPPING GenericMapping
,
8108 IN KPROCESSOR_MODE AccessMode
,
8109 OUT PACCESS_MASK GrantedAccess
,
8110 OUT PNTSTATUS AccessStatus
);
8116 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
8117 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
8118 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
8119 IN BOOLEAN IsDirectoryObject
,
8120 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
8121 IN PGENERIC_MAPPING GenericMapping
,
8122 IN POOL_TYPE PoolType
);
8128 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
8129 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
8130 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
8131 IN GUID
*ObjectType OPTIONAL
,
8132 IN BOOLEAN IsDirectoryObject
,
8133 IN ULONG AutoInheritFlags
,
8134 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
8135 IN PGENERIC_MAPPING GenericMapping
,
8136 IN POOL_TYPE PoolType
);
8142 IN OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
);
8147 SeSinglePrivilegeCheck(
8148 LUID PrivilegeValue
,
8149 KPROCESSOR_MODE PreviousMode
);
8154 SeValidSecurityDescriptor(
8156 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
8160 /** NtXxx routines **/
8166 OUT PHANDLE ProcessHandle
,
8167 IN ACCESS_MASK DesiredAccess
,
8168 IN POBJECT_ATTRIBUTES ObjectAttributes
,
8169 IN PCLIENT_ID ClientId OPTIONAL
);
8174 NtQueryInformationProcess(
8175 IN HANDLE ProcessHandle
,
8176 IN PROCESSINFOCLASS ProcessInformationClass
,
8177 OUT PVOID ProcessInformation
,
8178 IN ULONG ProcessInformationLength
,
8179 OUT PULONG ReturnLength OPTIONAL
);
8183 /** NtXxx and ZwXxx routines **/
8189 IN HANDLE TimerHandle
,
8190 OUT PBOOLEAN CurrentState OPTIONAL
);
8207 ZwCreateDirectoryObject(
8208 OUT PHANDLE DirectoryHandle
,
8209 IN ACCESS_MASK DesiredAccess
,
8210 IN POBJECT_ATTRIBUTES ObjectAttributes
);
8216 OUT PHANDLE EventHandle
,
8217 IN ACCESS_MASK DesiredAccess
,
8218 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
8219 IN EVENT_TYPE EventType
,
8220 IN BOOLEAN InitialState
);
8226 OUT PHANDLE EventHandle
,
8227 IN ACCESS_MASK DesiredAccess
,
8228 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
8229 IN EVENT_TYPE EventType
,
8230 IN BOOLEAN InitialState
);
8236 OUT PHANDLE FileHandle
,
8237 IN ACCESS_MASK DesiredAccess
,
8238 IN POBJECT_ATTRIBUTES ObjectAttributes
,
8239 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8240 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
8241 IN ULONG FileAttributes
,
8242 IN ULONG ShareAccess
,
8243 IN ULONG CreateDisposition
,
8244 IN ULONG CreateOptions
,
8245 IN PVOID EaBuffer OPTIONAL
,
8252 OUT PHANDLE KeyHandle
,
8253 IN ACCESS_MASK DesiredAccess
,
8254 IN POBJECT_ATTRIBUTES ObjectAttributes
,
8255 IN ULONG TitleIndex
,
8256 IN PUNICODE_STRING Class OPTIONAL
,
8257 IN ULONG CreateOptions
,
8258 OUT PULONG Disposition OPTIONAL
);
8264 OUT PHANDLE TimerHandle
,
8265 IN ACCESS_MASK DesiredAccess
,
8266 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
8267 IN TIMER_TYPE TimerType
);
8273 IN HANDLE KeyHandle
);
8279 IN HANDLE KeyHandle
,
8280 IN PUNICODE_STRING ValueName
);
8285 NtDeviceIoControlFile(
8286 IN HANDLE DeviceHandle
,
8287 IN HANDLE Event OPTIONAL
,
8288 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
8289 IN PVOID UserApcContext OPTIONAL
,
8290 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8291 IN ULONG IoControlCode
,
8292 IN PVOID InputBuffer
,
8293 IN ULONG InputBufferSize
,
8294 OUT PVOID OutputBuffer
,
8295 IN ULONG OutputBufferSize
);
8300 ZwDeviceIoControlFile(
8301 IN HANDLE DeviceHandle
,
8302 IN HANDLE Event OPTIONAL
,
8303 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
8304 IN PVOID UserApcContext OPTIONAL
,
8305 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8306 IN ULONG IoControlCode
,
8307 IN PVOID InputBuffer
,
8308 IN ULONG InputBufferSize
,
8309 OUT PVOID OutputBuffer
,
8310 IN ULONG OutputBufferSize
);
8316 IN HANDLE KeyHandle
,
8318 IN KEY_INFORMATION_CLASS KeyInformationClass
,
8319 OUT PVOID KeyInformation
,
8321 OUT PULONG ResultLength
);
8326 ZwEnumerateValueKey(
8327 IN HANDLE KeyHandle
,
8329 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
8330 OUT PVOID KeyValueInformation
,
8332 OUT PULONG ResultLength
);
8338 IN HANDLE KeyHandle
);
8343 ZwMakeTemporaryObject(
8350 IN HANDLE SectionHandle
,
8351 IN HANDLE ProcessHandle
,
8352 IN OUT PVOID
*BaseAddress
,
8353 IN ULONG_PTR ZeroBits
,
8354 IN SIZE_T CommitSize
,
8355 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
8356 IN OUT PSIZE_T ViewSize
,
8357 IN SECTION_INHERIT InheritDisposition
,
8358 IN ULONG AllocationType
,
8365 IN HANDLE SectionHandle
,
8366 IN HANDLE ProcessHandle
,
8367 IN OUT PVOID
*BaseAddress
,
8368 IN ULONG_PTR ZeroBits
,
8369 IN SIZE_T CommitSize
,
8370 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
8371 IN OUT PSIZE_T ViewSize
,
8372 IN SECTION_INHERIT InheritDisposition
,
8373 IN ULONG AllocationType
,
8380 OUT PHANDLE FileHandle
,
8381 IN ACCESS_MASK DesiredAccess
,
8382 IN POBJECT_ATTRIBUTES ObjectAttributes
,
8383 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8384 IN ULONG ShareAccess
,
8385 IN ULONG OpenOptions
);
8391 OUT PHANDLE FileHandle
,
8392 IN ACCESS_MASK DesiredAccess
,
8393 IN POBJECT_ATTRIBUTES ObjectAttributes
,
8394 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8395 IN ULONG ShareAccess
,
8396 IN ULONG OpenOptions
);
8402 OUT PHANDLE KeyHandle
,
8403 IN ACCESS_MASK DesiredAccess
,
8404 IN POBJECT_ATTRIBUTES ObjectAttributes
);
8410 OUT PHANDLE SectionHandle
,
8411 IN ACCESS_MASK DesiredAccess
,
8412 IN POBJECT_ATTRIBUTES ObjectAttributes
);
8417 ZwOpenSymbolicLinkObject(
8418 OUT PHANDLE LinkHandle
,
8419 IN ACCESS_MASK DesiredAccess
,
8420 IN POBJECT_ATTRIBUTES ObjectAttributes
);
8426 OUT PHANDLE TimerHandle
,
8427 IN ACCESS_MASK DesiredAccess
,
8428 IN POBJECT_ATTRIBUTES ObjectAttributes
);
8433 ZwQueryInformationFile(
8434 IN HANDLE FileHandle
,
8435 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8436 OUT PVOID FileInformation
,
8438 IN FILE_INFORMATION_CLASS FileInformationClass
);
8444 IN HANDLE KeyHandle
,
8445 IN KEY_INFORMATION_CLASS KeyInformationClass
,
8446 OUT PVOID KeyInformation
,
8448 OUT PULONG ResultLength
);
8453 ZwQuerySymbolicLinkObject(
8454 IN HANDLE LinkHandle
,
8455 IN OUT PUNICODE_STRING LinkTarget
,
8456 OUT PULONG ReturnedLength OPTIONAL
);
8462 IN HANDLE KeyHandle
,
8463 IN PUNICODE_STRING ValueName
,
8464 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
8465 OUT PVOID KeyValueInformation
,
8467 OUT PULONG ResultLength
);
8473 IN HANDLE FileHandle
,
8474 IN HANDLE Event OPTIONAL
,
8475 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8476 IN PVOID ApcContext OPTIONAL
,
8477 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8480 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
8481 IN PULONG Key OPTIONAL
);
8487 IN HANDLE FileHandle
,
8488 IN HANDLE Event OPTIONAL
,
8489 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8490 IN PVOID ApcContext OPTIONAL
,
8491 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8494 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
8495 IN PULONG Key OPTIONAL
);
8501 IN HANDLE EventHandle
,
8502 OUT PLONG PreviousState OPTIONAL
);
8508 IN HANDLE EventHandle
,
8509 OUT PLONG PreviousState OPTIONAL
);
8514 ZwSetInformationFile(
8515 IN HANDLE FileHandle
,
8516 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8517 IN PVOID FileInformation
,
8519 IN FILE_INFORMATION_CLASS FileInformationClass
);
8524 ZwSetInformationThread(
8525 IN HANDLE ThreadHandle
,
8526 IN THREADINFOCLASS ThreadInformationClass
,
8527 IN PVOID ThreadInformation
,
8528 IN ULONG ThreadInformationLength
);
8534 IN HANDLE TimerHandle
,
8535 IN PLARGE_INTEGER DueTime
,
8536 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
8537 IN PVOID TimerContext OPTIONAL
,
8538 IN BOOLEAN WakeTimer
,
8539 IN LONG Period OPTIONAL
,
8540 OUT PBOOLEAN PreviousState OPTIONAL
);
8546 IN HANDLE KeyHandle
,
8547 IN PUNICODE_STRING ValueName
,
8548 IN ULONG TitleIndex OPTIONAL
,
8553 /* [Nt|Zw]MapViewOfSection.InheritDisposition constants */
8554 #define AT_EXTENDABLE_FILE 0x00002000
8555 #define AT_RESERVED 0x20000000
8556 #define AT_ROUND_TO_PAGE 0x40000000
8561 NtUnmapViewOfSection(
8562 IN HANDLE ProcessHandle
,
8563 IN PVOID BaseAddress
);
8568 ZwUnmapViewOfSection(
8569 IN HANDLE ProcessHandle
,
8570 IN PVOID BaseAddress
);
8575 NtWaitForSingleObject(
8576 IN HANDLE ObjectHandle
,
8577 IN BOOLEAN Alertable
,
8578 IN PLARGE_INTEGER TimeOut OPTIONAL
);
8583 ZwWaitForSingleObject(
8584 IN HANDLE ObjectHandle
,
8585 IN BOOLEAN Alertable
,
8586 IN PLARGE_INTEGER TimeOut OPTIONAL
);
8592 IN HANDLE FileHandle
,
8593 IN HANDLE Event OPTIONAL
,
8594 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8595 IN PVOID ApcContext OPTIONAL
,
8596 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8599 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
8600 IN PULONG Key OPTIONAL
);
8606 IN HANDLE FileHandle
,
8607 IN HANDLE Event OPTIONAL
,
8608 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8609 IN PVOID ApcContext OPTIONAL
,
8610 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8613 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
8614 IN PULONG Key OPTIONAL
);
8618 /** Power management support routines **/
8624 IN PDEVICE_OBJECT DeviceObject
,
8630 PoRegisterDeviceForIdleDetection(
8631 IN PDEVICE_OBJECT DeviceObject
,
8632 IN ULONG ConservationIdleTime
,
8633 IN ULONG PerformanceIdleTime
,
8634 IN DEVICE_POWER_STATE State
);
8639 PoRegisterSystemState(
8640 IN PVOID StateHandle
,
8641 IN EXECUTION_STATE Flags
);
8647 IN PDEVICE_OBJECT DeviceObject
,
8648 IN UCHAR MinorFunction
,
8649 IN POWER_STATE PowerState
,
8650 IN PREQUEST_POWER_COMPLETE CompletionFunction
,
8652 OUT PIRP
*Irp OPTIONAL
);
8657 PoRequestShutdownEvent(
8664 PULONG IdlePointer
);
8666 #define PoSetDeviceBusy(IdlePointer) \
8667 ((void)(*(IdlePointer) = 0))
8673 IN PDEVICE_OBJECT DeviceObject
,
8674 IN POWER_STATE_TYPE Type
,
8675 IN POWER_STATE State
);
8681 IN EXECUTION_STATE Flags
);
8686 PoStartNextPowerIrp(
8692 PoUnregisterSystemState(
8693 IN PVOID StateHandle
);
8697 /** WMI library support routines **/
8702 IN PDEVICE_OBJECT DeviceObject
,
8705 IN ULONG BufferUsed
,
8706 IN CCHAR PriorityBoost
);
8711 IN PDEVICE_OBJECT DeviceObject
,
8713 IN ULONG InstanceIndex
,
8714 IN ULONG EventDataSize
,
8715 IN PVOID EventData
);
8720 WmiQueryTraceInformation(
8721 IN TRACE_INFORMATION_CLASS TraceInformationClass
,
8722 OUT PVOID TraceInformation
,
8723 IN ULONG TraceInformationLength
,
8724 OUT PULONG RequiredLength OPTIONAL
,
8725 IN PVOID Buffer OPTIONAL
);
8730 IN PWMILIB_CONTEXT WmiLibInfo
,
8731 IN PDEVICE_OBJECT DeviceObject
,
8733 OUT PSYSCTL_IRP_DISPOSITION IrpDisposition
);
8739 IN TRACEHANDLE LoggerHandle
,
8740 IN ULONG MessageFlags
,
8741 IN LPGUID MessageGuid
,
8742 IN USHORT MessageNumber
,
8746 /* FIXME: Get va_list from where? */
8751 IN TRACEHANDLE LoggerHandle
,
8752 IN ULONG MessageFlags
,
8753 IN LPGUID MessageGuid
,
8754 IN USHORT MessageNumber
,
8755 IN
va_list MessageArgList
);
8759 /** Kernel debugger routines **/
8776 KdRefreshDebuggerNotPresent(
8780 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
8785 IN KD_OPTION Option
,
8786 IN ULONG InBufferBytes OPTIONAL
,
8788 IN ULONG OutBufferBytes OPTIONAL
,
8789 OUT PVOID OutBuffer
,
8790 OUT PULONG OutBufferNeeded OPTIONAL
);
8801 DbgBreakPointWithStatus(
8814 IN ULONG ComponentId
,
8822 IN ULONG ComponentId
,
8829 vDbgPrintExWithPrefix(
8831 IN ULONG ComponentId
,
8839 DbgPrintReturnControlC(
8848 IN ULONG MaximumResponseLength
8854 DbgQueryDebugFilterState(
8855 IN ULONG ComponentId
,
8861 DbgSetDebugFilterState(
8862 IN ULONG ComponentId
,
8868 #define KdPrint(_x_) DbgPrint _x_
8869 #define KdPrintEx(_x_) DbgPrintEx _x_
8870 #define KdBreakPoint() DbgBreakPoint()
8871 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
8875 #define KdPrint(_x_)
8876 #define KdPrintEx(_x_)
8877 #define KdBreakPoint()
8878 #define KdBreakPointWithStatus(s)
8882 #if defined(__GNUC__)
8884 extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent
;
8885 extern NTKERNELAPI BOOLEAN KdDebuggerEnabled
;
8886 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
8887 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
8889 #elif defined(_NTDDK_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
8891 extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent
;
8892 extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled
;
8893 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
8894 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
8898 extern BOOLEAN KdDebuggerNotPresent
;
8899 extern BOOLEAN KdDebuggerEnabled
;
8900 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
8901 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
8905 /** Stuff from winnt4.h */
8907 #ifndef DMA_MACROS_DEFINED
8909 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8911 //DECLSPEC_DEPRECATED_DDK
8915 IoFlushAdapterBuffers(
8916 IN PADAPTER_OBJECT AdapterObject
,
8918 IN PVOID MapRegisterBase
,
8921 IN BOOLEAN WriteToDevice
);
8923 //DECLSPEC_DEPRECATED_DDK
8927 IoFreeAdapterChannel(
8928 IN PADAPTER_OBJECT AdapterObject
);
8930 //DECLSPEC_DEPRECATED_DDK
8935 IN PADAPTER_OBJECT AdapterObject
,
8936 IN PVOID MapRegisterBase
,
8937 IN ULONG NumberOfMapRegisters
);
8939 //DECLSPEC_DEPRECATED_DDK
8944 IN PADAPTER_OBJECT AdapterObject
,
8946 IN PVOID MapRegisterBase
,
8948 IN OUT PULONG Length
,
8949 IN BOOLEAN WriteToDevice
);
8952 #endif // (NTDDI_VERSION >= NTDDI_WIN2K)
8953 #endif // !defined(DMA_MACROS_DEFINED)
8959 IN PUNICODE_STRING RegistryPath
,
8960 IN PUNICODE_STRING DriverClassName OPTIONAL
,
8961 IN PDRIVER_OBJECT DriverObject
,
8962 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
8963 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources
,
8964 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
8969 IoAttachDeviceByPointer(
8970 IN PDEVICE_OBJECT SourceDevice
,
8971 IN PDEVICE_OBJECT TargetDevice
);
8976 MmIsNonPagedSystemAddressValid(
8977 IN PVOID VirtualAddress
);
8979 #if defined(_AMD64_) || defined(_IA64_)
8980 //DECLSPEC_DEPRECATED_DDK_WINXP
8984 RtlLargeIntegerDivide(
8985 IN LARGE_INTEGER Dividend
,
8986 IN LARGE_INTEGER Divisor
,
8987 IN OUT PLARGE_INTEGER Remainder
)
8990 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
8992 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
8999 RtlLargeIntegerDivide(
9000 IN LARGE_INTEGER Dividend
,
9001 IN LARGE_INTEGER Divisor
,
9002 IN OUT PLARGE_INTEGER Remainder
);
9008 ExInterlockedDecrementLong(
9010 IN PKSPIN_LOCK Lock
);
9015 ExInterlockedExchangeUlong(
9018 IN PKSPIN_LOCK Lock
);
9023 ExInterlockedIncrementLong(
9025 IN PKSPIN_LOCK Lock
);
9030 HalAcquireDisplayOwnership(
9031 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
9036 HalAllocateAdapterChannel(
9037 IN PADAPTER_OBJECT AdapterObject
,
9038 IN PWAIT_CONTEXT_BLOCK Wcb
,
9039 IN ULONG NumberOfMapRegisters
,
9040 IN PDRIVER_CONTROL ExecutionRoutine
);
9045 HalAllocateCommonBuffer(
9046 IN PADAPTER_OBJECT AdapterObject
,
9048 OUT PPHYSICAL_ADDRESS LogicalAddress
,
9049 IN BOOLEAN CacheEnabled
);
9054 HalAssignSlotResources(
9055 IN PUNICODE_STRING RegistryPath
,
9056 IN PUNICODE_STRING DriverClassName
,
9057 IN PDRIVER_OBJECT DriverObject
,
9058 IN PDEVICE_OBJECT DeviceObject
,
9059 IN INTERFACE_TYPE BusType
,
9061 IN ULONG SlotNumber
,
9062 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
9067 HalFreeCommonBuffer(
9068 IN PADAPTER_OBJECT AdapterObject
,
9070 IN PHYSICAL_ADDRESS LogicalAddress
,
9071 IN PVOID VirtualAddress
,
9072 IN BOOLEAN CacheEnabled
);
9078 IN PDEVICE_DESCRIPTION DeviceDescription
,
9079 IN OUT PULONG NumberOfMapRegisters
);
9085 IN BUS_DATA_TYPE BusDataType
,
9087 IN ULONG SlotNumber
,
9094 HalGetBusDataByOffset(
9095 IN BUS_DATA_TYPE BusDataType
,
9097 IN ULONG SlotNumber
,
9105 HalGetDmaAlignmentRequirement(
9111 HalGetInterruptVector(
9112 IN INTERFACE_TYPE InterfaceType
,
9114 IN ULONG BusInterruptLevel
,
9115 IN ULONG BusInterruptVector
,
9117 OUT PKAFFINITY Affinity
);
9123 IN PADAPTER_OBJECT AdapterObject
);
9129 IN BUS_DATA_TYPE BusDataType
,
9131 IN ULONG SlotNumber
,
9138 HalSetBusDataByOffset(
9139 IN BUS_DATA_TYPE BusDataType
,
9141 IN ULONG SlotNumber
,
9149 HalTranslateBusAddress(
9150 IN INTERFACE_TYPE InterfaceType
,
9152 IN PHYSICAL_ADDRESS BusAddress
,
9153 IN OUT PULONG AddressSpace
,
9154 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
9159 RtlLargeIntegerEqualToZero(
9160 IN LARGE_INTEGER Operand
);
9165 RtlLargeIntegerGreaterOrEqualToZero(
9166 IN LARGE_INTEGER Operand
);
9171 RtlLargeIntegerGreaterThan(
9172 IN LARGE_INTEGER Operand1
,
9173 IN LARGE_INTEGER Operand2
);
9178 RtlLargeIntegerGreaterThanOrEqualTo(
9179 IN LARGE_INTEGER Operand1
,
9180 IN LARGE_INTEGER Operand2
);
9185 RtlLargeIntegerGreaterThanZero(
9186 IN LARGE_INTEGER Operand
);
9191 RtlLargeIntegerLessOrEqualToZero(
9192 IN LARGE_INTEGER Operand
);
9197 RtlLargeIntegerLessThan(
9198 IN LARGE_INTEGER Operand1
,
9199 IN LARGE_INTEGER Operand2
);
9204 RtlLargeIntegerLessThanOrEqualTo(
9205 IN LARGE_INTEGER Operand1
,
9206 IN LARGE_INTEGER Operand2
);
9211 RtlLargeIntegerLessThanZero(
9212 IN LARGE_INTEGER Operand
);
9217 RtlLargeIntegerNegate(
9218 IN LARGE_INTEGER Subtrahend
);
9223 RtlLargeIntegerNotEqualTo(
9224 IN LARGE_INTEGER Operand1
,
9225 IN LARGE_INTEGER Operand2
);
9230 RtlLargeIntegerNotEqualToZero(
9231 IN LARGE_INTEGER Operand
);
9236 RtlLargeIntegerShiftLeft(
9237 IN LARGE_INTEGER LargeInteger
,
9238 IN CCHAR ShiftCount
);
9243 RtlLargeIntegerShiftRight(
9244 IN LARGE_INTEGER LargeInteger
,
9245 IN CCHAR ShiftCount
);
9250 RtlLargeIntegerSubtract(
9251 IN LARGE_INTEGER Minuend
,
9252 IN LARGE_INTEGER Subtrahend
);
9257 * COMPUTE_PAGES_SPANNED(
9261 #define COMPUTE_PAGES_SPANNED(Va, \
9263 (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
9267 ** Architecture specific structures
9275 Exfi386InterlockedIncrementLong(
9281 Exfi386InterlockedDecrementLong(
9287 Exfi386InterlockedExchangeUlong(
9291 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
9292 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
9293 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
9299 // NT-ARM is not documented
9308 #endif /* __WINDDK_H */