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_DESCRIPTION.Version */
527 #define DEVICE_DESCRIPTION_VERSION 0x0000
528 #define DEVICE_DESCRIPTION_VERSION1 0x0001
529 #define DEVICE_DESCRIPTION_VERSION2 0x0002
531 typedef struct _DEVICE_DESCRIPTION
{
534 BOOLEAN ScatterGather
;
536 BOOLEAN AutoInitialize
;
537 BOOLEAN Dma32BitAddresses
;
540 BOOLEAN Dma64BitAddresses
;
543 INTERFACE_TYPE InterfaceType
;
548 } DEVICE_DESCRIPTION
, *PDEVICE_DESCRIPTION
;
551 #define VPB_MOUNTED 0x0001
552 #define VPB_LOCKED 0x0002
553 #define VPB_PERSISTENT 0x0004
554 #define VPB_REMOVE_PENDING 0x0008
555 #define VPB_RAW_MOUNT 0x0010
557 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
559 typedef struct _VPB
{
563 USHORT VolumeLabelLength
;
564 struct _DEVICE_OBJECT
*DeviceObject
;
565 struct _DEVICE_OBJECT
*RealDevice
;
567 ULONG ReferenceCount
;
568 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
/ sizeof(WCHAR
)];
571 /* DEVICE_OBJECT.Flags */
573 #define DO_VERIFY_VOLUME 0x00000002
574 #define DO_BUFFERED_IO 0x00000004
575 #define DO_EXCLUSIVE 0x00000008
576 #define DO_DIRECT_IO 0x00000010
577 #define DO_MAP_IO_BUFFER 0x00000020
578 #define DO_DEVICE_HAS_NAME 0x00000040
579 #define DO_DEVICE_INITIALIZING 0x00000080
580 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
581 #define DO_LONG_TERM_REQUESTS 0x00000200
582 #define DO_NEVER_LAST_DEVICE 0x00000400
583 #define DO_SHUTDOWN_REGISTERED 0x00000800
584 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
585 #define DO_POWER_PAGABLE 0x00002000
586 #define DO_POWER_INRUSH 0x00004000
587 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
588 #define DO_XIP 0x00020000
590 /* DEVICE_OBJECT.Characteristics */
592 #define FILE_REMOVABLE_MEDIA 0x00000001
593 #define FILE_READ_ONLY_DEVICE 0x00000002
594 #define FILE_FLOPPY_DISKETTE 0x00000004
595 #define FILE_WRITE_ONCE_MEDIA 0x00000008
596 #define FILE_REMOTE_DEVICE 0x00000010
597 #define FILE_DEVICE_IS_MOUNTED 0x00000020
598 #define FILE_VIRTUAL_VOLUME 0x00000040
599 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
600 #define FILE_DEVICE_SECURE_OPEN 0x00000100
602 /* DEVICE_OBJECT.AlignmentRequirement */
604 #define FILE_BYTE_ALIGNMENT 0x00000000
605 #define FILE_WORD_ALIGNMENT 0x00000001
606 #define FILE_LONG_ALIGNMENT 0x00000003
607 #define FILE_QUAD_ALIGNMENT 0x00000007
608 #define FILE_OCTA_ALIGNMENT 0x0000000f
609 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
610 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
611 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
612 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
613 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
615 /* DEVICE_OBJECT.DeviceType */
617 #define DEVICE_TYPE ULONG
619 #define FILE_DEVICE_BEEP 0x00000001
620 #define FILE_DEVICE_CD_ROM 0x00000002
621 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
622 #define FILE_DEVICE_CONTROLLER 0x00000004
623 #define FILE_DEVICE_DATALINK 0x00000005
624 #define FILE_DEVICE_DFS 0x00000006
625 #define FILE_DEVICE_DISK 0x00000007
626 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
627 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
628 #define FILE_DEVICE_INPORT_PORT 0x0000000a
629 #define FILE_DEVICE_KEYBOARD 0x0000000b
630 #define FILE_DEVICE_MAILSLOT 0x0000000c
631 #define FILE_DEVICE_MIDI_IN 0x0000000d
632 #define FILE_DEVICE_MIDI_OUT 0x0000000e
633 #define FILE_DEVICE_MOUSE 0x0000000f
634 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
635 #define FILE_DEVICE_NAMED_PIPE 0x00000011
636 #define FILE_DEVICE_NETWORK 0x00000012
637 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
638 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
639 #define FILE_DEVICE_NULL 0x00000015
640 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
641 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
642 #define FILE_DEVICE_PRINTER 0x00000018
643 #define FILE_DEVICE_SCANNER 0x00000019
644 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
645 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
646 #define FILE_DEVICE_SCREEN 0x0000001c
647 #define FILE_DEVICE_SOUND 0x0000001d
648 #define FILE_DEVICE_STREAMS 0x0000001e
649 #define FILE_DEVICE_TAPE 0x0000001f
650 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
651 #define FILE_DEVICE_TRANSPORT 0x00000021
652 #define FILE_DEVICE_UNKNOWN 0x00000022
653 #define FILE_DEVICE_VIDEO 0x00000023
654 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
655 #define FILE_DEVICE_WAVE_IN 0x00000025
656 #define FILE_DEVICE_WAVE_OUT 0x00000026
657 #define FILE_DEVICE_8042_PORT 0x00000027
658 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
659 #define FILE_DEVICE_BATTERY 0x00000029
660 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
661 #define FILE_DEVICE_MODEM 0x0000002b
662 #define FILE_DEVICE_VDM 0x0000002c
663 #define FILE_DEVICE_MASS_STORAGE 0x0000002d
664 #define FILE_DEVICE_SMB 0x0000002e
665 #define FILE_DEVICE_KS 0x0000002f
666 #define FILE_DEVICE_CHANGER 0x00000030
667 #define FILE_DEVICE_SMARTCARD 0x00000031
668 #define FILE_DEVICE_ACPI 0x00000032
669 #define FILE_DEVICE_DVD 0x00000033
670 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
671 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
672 #define FILE_DEVICE_DFS_VOLUME 0x00000036
673 #define FILE_DEVICE_SERENUM 0x00000037
674 #define FILE_DEVICE_TERMSRV 0x00000038
675 #define FILE_DEVICE_KSEC 0x00000039
676 #define FILE_DEVICE_FIPS 0x0000003a
678 typedef struct _DEVICE_OBJECT
{
682 struct _DRIVER_OBJECT
*DriverObject
;
683 struct _DEVICE_OBJECT
*NextDevice
;
684 struct _DEVICE_OBJECT
*AttachedDevice
;
685 struct _IRP
*CurrentIrp
;
688 ULONG Characteristics
;
690 PVOID DeviceExtension
;
691 DEVICE_TYPE DeviceType
;
694 LIST_ENTRY ListEntry
;
695 WAIT_CONTEXT_BLOCK Wcb
;
697 ULONG AlignmentRequirement
;
698 KDEVICE_QUEUE DeviceQueue
;
700 ULONG ActiveThreadCount
;
701 PSECURITY_DESCRIPTOR SecurityDescriptor
;
705 struct _DEVOBJ_EXTENSION
*DeviceObjectExtension
;
707 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
709 typedef enum _DEVICE_RELATION_TYPE
{
714 TargetDeviceRelation
,
716 } DEVICE_RELATION_TYPE
, *PDEVICE_RELATION_TYPE
;
718 typedef struct _DEVICE_RELATIONS
{
720 PDEVICE_OBJECT Objects
[1];
721 } DEVICE_RELATIONS
, *PDEVICE_RELATIONS
;
723 typedef struct _SCATTER_GATHER_ELEMENT
{
724 PHYSICAL_ADDRESS Address
;
727 } SCATTER_GATHER_ELEMENT
, *PSCATTER_GATHER_ELEMENT
;
729 typedef struct _SCATTER_GATHER_LIST
{
730 ULONG NumberOfElements
;
732 SCATTER_GATHER_ELEMENT Elements
[1];
733 } SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
735 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
736 #define MDL_PAGES_LOCKED 0x0002
737 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
738 #define MDL_ALLOCATED_FIXED_SIZE 0x0008
739 #define MDL_PARTIAL 0x0010
740 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
741 #define MDL_IO_PAGE_READ 0x0040
742 #define MDL_WRITE_OPERATION 0x0080
743 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
744 #define MDL_FREE_EXTRA_PTES 0x0200
745 #define MDL_DESCRIBES_AWE 0x0400
746 #define MDL_IO_SPACE 0x0800
747 #define MDL_NETWORK_HEADER 0x1000
748 #define MDL_MAPPING_CAN_FAIL 0x2000
749 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
750 #define MDL_INTERNAL 0x8000
753 #define MDL_MAPPING_FLAGS ( \
754 MDL_MAPPED_TO_SYSTEM_VA | \
756 MDL_SOURCE_IS_NONPAGED_POOL | \
757 MDL_PARTIAL_HAS_BEEN_MAPPED | \
758 MDL_PARENT_MAPPED_SYSTEM_VA | \
762 typedef struct _DRIVER_EXTENSION
{
763 struct _DRIVER_OBJECT
*DriverObject
;
764 PDRIVER_ADD_DEVICE AddDevice
;
766 UNICODE_STRING ServiceKeyName
;
767 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
769 #define DRVO_UNLOAD_INVOKED 0x00000001
770 #define DRVO_LEGACY_DRIVER 0x00000002
771 #define DRVO_BUILTIN_DRIVER 0x00000004
772 #define DRVO_REINIT_REGISTERED 0x00000008
773 #define DRVO_INITIALIZED 0x00000010
774 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
775 #define DRVO_LEGACY_RESOURCES 0x00000040
777 typedef struct _DRIVER_OBJECT
{
780 PDEVICE_OBJECT DeviceObject
;
785 PDRIVER_EXTENSION DriverExtension
;
786 UNICODE_STRING DriverName
;
787 PUNICODE_STRING HardwareDatabase
;
788 struct _FAST_IO_DISPATCH
*FastIoDispatch
;
789 PDRIVER_INITIALIZE DriverInit
;
790 PDRIVER_STARTIO DriverStartIo
;
791 PDRIVER_UNLOAD DriverUnload
;
792 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
794 typedef struct _DRIVER_OBJECT
*PDRIVER_OBJECT
;
796 typedef struct _DMA_ADAPTER
{
799 struct _DMA_OPERATIONS
* DmaOperations
;
800 } DMA_ADAPTER
, *PDMA_ADAPTER
;
803 (DDKAPI
*PPUT_DMA_ADAPTER
)(
804 IN PDMA_ADAPTER DmaAdapter
);
807 (DDKAPI
*PALLOCATE_COMMON_BUFFER
)(
808 IN PDMA_ADAPTER DmaAdapter
,
810 OUT PPHYSICAL_ADDRESS LogicalAddress
,
811 IN BOOLEAN CacheEnabled
);
814 (DDKAPI
*PFREE_COMMON_BUFFER
)(
815 IN PDMA_ADAPTER DmaAdapter
,
817 IN PHYSICAL_ADDRESS LogicalAddress
,
818 IN PVOID VirtualAddress
,
819 IN BOOLEAN CacheEnabled
);
822 (DDKAPI
*PALLOCATE_ADAPTER_CHANNEL
)(
823 IN PDMA_ADAPTER DmaAdapter
,
824 IN PDEVICE_OBJECT DeviceObject
,
825 IN ULONG NumberOfMapRegisters
,
826 IN PDRIVER_CONTROL ExecutionRoutine
,
830 (DDKAPI
*PFLUSH_ADAPTER_BUFFERS
)(
831 IN PDMA_ADAPTER DmaAdapter
,
833 IN PVOID MapRegisterBase
,
836 IN BOOLEAN WriteToDevice
);
839 (DDKAPI
*PFREE_ADAPTER_CHANNEL
)(
840 IN PDMA_ADAPTER DmaAdapter
);
843 (DDKAPI
*PFREE_MAP_REGISTERS
)(
844 IN PDMA_ADAPTER DmaAdapter
,
845 PVOID MapRegisterBase
,
846 ULONG NumberOfMapRegisters
);
848 typedef PHYSICAL_ADDRESS
849 (DDKAPI
*PMAP_TRANSFER
)(
850 IN PDMA_ADAPTER DmaAdapter
,
852 IN PVOID MapRegisterBase
,
854 IN OUT PULONG Length
,
855 IN BOOLEAN WriteToDevice
);
858 (DDKAPI
*PGET_DMA_ALIGNMENT
)(
859 IN PDMA_ADAPTER DmaAdapter
);
862 (DDKAPI
*PREAD_DMA_COUNTER
)(
863 IN PDMA_ADAPTER DmaAdapter
);
866 (DDKAPI
*PGET_SCATTER_GATHER_LIST
)(
867 IN PDMA_ADAPTER DmaAdapter
,
868 IN PDEVICE_OBJECT DeviceObject
,
872 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
874 IN BOOLEAN WriteToDevice
);
877 (DDKAPI
*PPUT_SCATTER_GATHER_LIST
)(
878 IN PDMA_ADAPTER DmaAdapter
,
879 IN PSCATTER_GATHER_LIST ScatterGather
,
880 IN BOOLEAN WriteToDevice
);
883 (DDKAPI
*PCALCULATE_SCATTER_GATHER_LIST_SIZE
)(
884 IN PDMA_ADAPTER DmaAdapter
,
885 IN PMDL Mdl OPTIONAL
,
888 OUT PULONG ScatterGatherListSize
,
889 OUT PULONG pNumberOfMapRegisters OPTIONAL
);
892 (DDKAPI
*PBUILD_SCATTER_GATHER_LIST
)(
893 IN PDMA_ADAPTER DmaAdapter
,
894 IN PDEVICE_OBJECT DeviceObject
,
898 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
900 IN BOOLEAN WriteToDevice
,
901 IN PVOID ScatterGatherBuffer
,
902 IN ULONG ScatterGatherLength
);
905 (DDKAPI
*PBUILD_MDL_FROM_SCATTER_GATHER_LIST
)(
906 IN PDMA_ADAPTER DmaAdapter
,
907 IN PSCATTER_GATHER_LIST ScatterGather
,
909 OUT PMDL
*TargetMdl
);
911 typedef struct _DMA_OPERATIONS
{
913 PPUT_DMA_ADAPTER PutDmaAdapter
;
914 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer
;
915 PFREE_COMMON_BUFFER FreeCommonBuffer
;
916 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
917 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
918 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
919 PFREE_MAP_REGISTERS FreeMapRegisters
;
920 PMAP_TRANSFER MapTransfer
;
921 PGET_DMA_ALIGNMENT GetDmaAlignment
;
922 PREAD_DMA_COUNTER ReadDmaCounter
;
923 PGET_SCATTER_GATHER_LIST GetScatterGatherList
;
924 PPUT_SCATTER_GATHER_LIST PutScatterGatherList
;
925 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList
;
926 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList
;
927 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList
;
928 } DMA_OPERATIONS
, *PDMA_OPERATIONS
;
930 typedef enum _ARBITER_REQUEST_SOURCE
{
931 ArbiterRequestUndefined
= -1,
932 ArbiterRequestLegacyReported
,
933 ArbiterRequestHalReported
,
934 ArbiterRequestLegacyAssigned
,
935 ArbiterRequestPnpDetected
,
936 ArbiterRequestPnpEnumerated
937 } ARBITER_REQUEST_SOURCE
;
939 typedef enum _ARBITER_RESULT
{
940 ArbiterResultUndefined
= -1,
941 ArbiterResultSuccess
,
942 ArbiterResultExternalConflict
,
943 ArbiterResultNullRequest
946 typedef enum _ARBITER_ACTION
{
947 ArbiterActionTestAllocation
,
948 ArbiterActionRetestAllocation
,
949 ArbiterActionCommitAllocation
,
950 ArbiterActionRollbackAllocation
,
951 ArbiterActionQueryAllocatedResources
,
952 ArbiterActionWriteReservedResources
,
953 ArbiterActionQueryConflict
,
954 ArbiterActionQueryArbitrate
,
955 ArbiterActionAddReserved
,
956 ArbiterActionBootAllocation
957 } ARBITER_ACTION
, *PARBITER_ACTION
;
959 typedef struct _ARBITER_CONFLICT_INFO
{
960 PDEVICE_OBJECT OwningObject
;
963 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
965 typedef struct _ARBITER_PARAMETERS
{
968 IN OUT PLIST_ENTRY ArbitrationList
;
969 IN ULONG AllocateFromCount
;
970 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
974 IN OUT PLIST_ENTRY ArbitrationList
;
975 IN ULONG AllocateFromCount
;
976 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
980 IN OUT PLIST_ENTRY ArbitrationList
;
984 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
985 } QueryAllocatedResources
;
988 IN PDEVICE_OBJECT PhysicalDeviceObject
;
989 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
990 OUT PULONG ConflictCount
;
991 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
995 IN PLIST_ENTRY ArbitrationList
;
999 IN PDEVICE_OBJECT ReserveDevice
;
1002 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
1004 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
1006 typedef struct _ARBITER_LIST_ENTRY
{
1007 LIST_ENTRY ListEntry
;
1008 ULONG AlternativeCount
;
1009 PIO_RESOURCE_DESCRIPTOR Alternatives
;
1010 PDEVICE_OBJECT PhysicalDeviceObject
;
1011 ARBITER_REQUEST_SOURCE RequestSource
;
1014 INTERFACE_TYPE InterfaceType
;
1017 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
1018 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
1019 ARBITER_RESULT Result
;
1020 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
1023 (DDKAPI
*PARBITER_HANDLER
)(
1025 IN ARBITER_ACTION Action
,
1026 IN OUT PARBITER_PARAMETERS Parameters
);
1028 #define ARBITER_PARTIAL 0x00000001
1030 typedef struct _ARBITER_INTERFACE
{
1034 PINTERFACE_REFERENCE InterfaceReference
;
1035 PINTERFACE_DEREFERENCE InterfaceDereference
;
1036 PARBITER_HANDLER ArbiterHandler
;
1038 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
1040 typedef enum _KPROFILE_SOURCE
{
1042 ProfileAlignmentFixup
,
1045 ProfileLoadInstructions
,
1046 ProfilePipelineFrozen
,
1047 ProfileBranchInstructions
,
1048 ProfileTotalNonissues
,
1049 ProfileDcacheMisses
,
1050 ProfileIcacheMisses
,
1052 ProfileBranchMispredictions
,
1053 ProfileStoreInstructions
,
1054 ProfileFpInstructions
,
1055 ProfileIntegerInstructions
,
1059 ProfileSpecialInstructions
,
1061 ProfileIcacheIssues
,
1062 ProfileDcacheAccesses
,
1063 ProfileMemoryBarrierCycles
,
1064 ProfileLoadLinkedIssues
,
1068 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
1069 HalInstalledBusInformation
,
1070 HalProfileSourceInformation
,
1071 HalInformationClassUnused1
,
1072 HalPowerInformation
,
1073 HalProcessorSpeedInformation
,
1074 HalCallbackInformation
,
1075 HalMapRegisterInformation
,
1076 HalMcaLogInformation
,
1077 HalFrameBufferCachingInformation
,
1078 HalDisplayBiosInformation
,
1079 HalProcessorFeatureInformation
,
1080 HalNumaTopologyInterface
,
1081 HalErrorInformation
,
1082 HalCmcLogInformation
,
1083 HalCpeLogInformation
,
1084 HalQueryMcaInterface
,
1085 HalQueryAMLIIllegalIOPortAddresses
,
1086 HalQueryMaxHotPlugMemoryAddress
,
1087 HalPartitionIpiInterface
,
1088 HalPlatformInformation
,
1089 HalQueryProfileSourceList
1090 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
1092 typedef enum _HAL_SET_INFORMATION_CLASS
{
1093 HalProfileSourceInterval
,
1094 HalProfileSourceInterruptHandler
,
1095 HalMcaRegisterDriver
,
1096 HalKernelErrorHandler
,
1097 HalCmcRegisterDriver
,
1098 HalCpeRegisterDriver
,
1102 HalGenerateCmcInterrupt
1103 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
1105 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
1107 KPROFILE_SOURCE Source
;
1109 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
1111 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
1113 KPROFILE_SOURCE Source
;
1116 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
1118 typedef struct _MAP_REGISTER_ENTRY
1121 BOOLEAN WriteToDevice
;
1122 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
1129 PUCHAR TranslatedAddress
;
1131 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
1135 PHYSICAL_ADDRESS Start
;
1136 PHYSICAL_ADDRESS MaxEnd
;
1137 PVOID VirtualAddress
;
1141 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
1152 BOOLEAN Initialized
;
1153 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
1154 DEBUG_MEMORY_REQUIREMENTS Memory
;
1155 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
1157 typedef enum _KD_OPTION
{
1158 KD_OPTION_SET_BLOCK_ENABLE
,
1161 /* Function Type Defintions for Dispatch Functions */
1162 struct _DEVICE_CONTROL_CONTEXT
;
1165 (DDKAPI
*PDEVICE_CONTROL_COMPLETION
)(
1166 IN
struct _DEVICE_CONTROL_CONTEXT
*ControlContext
);
1168 typedef struct _DEVICE_CONTROL_CONTEXT
{
1170 PDEVICE_HANDLER_OBJECT DeviceHandler
;
1171 PDEVICE_OBJECT DeviceObject
;
1174 PULONG BufferLength
;
1176 } DEVICE_CONTROL_CONTEXT
, *PDEVICE_CONTROL_CONTEXT
;
1178 typedef struct _PM_DISPATCH_TABLE
{
1182 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
1184 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
1185 TranslateChildToParent
,
1186 TranslateParentToChild
1187 } RESOURCE_TRANSLATION_DIRECTION
;
1190 (DDKAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
1192 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
1193 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
1194 IN ULONG AlternativesCount
,
1195 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
1196 IN PDEVICE_OBJECT PhysicalDeviceObject
,
1197 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
1200 (DDKAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
1202 IN PIO_RESOURCE_DESCRIPTOR Source
,
1203 IN PDEVICE_OBJECT PhysicalDeviceObject
,
1204 OUT PULONG TargetCount
,
1205 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
1207 typedef struct _TRANSLATOR_INTERFACE
{
1211 PINTERFACE_REFERENCE InterfaceReference
;
1212 PINTERFACE_DEREFERENCE InterfaceDereference
;
1213 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
1214 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
1215 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
1218 (DDKAPI
*pHalDeviceControl
)(
1219 IN PDEVICE_HANDLER_OBJECT DeviceHandler
,
1220 IN PDEVICE_OBJECT DeviceObject
,
1221 IN ULONG ControlCode
,
1222 IN OUT PVOID Buffer OPTIONAL
,
1223 IN OUT PULONG BufferLength OPTIONAL
,
1225 IN PDEVICE_CONTROL_COMPLETION CompletionRoutine
);
1228 (FASTCALL
*pHalExamineMBR
)(
1229 IN PDEVICE_OBJECT DeviceObject
,
1230 IN ULONG SectorSize
,
1231 IN ULONG MBRTypeIdentifier
,
1235 (FASTCALL
*pHalIoAssignDriveLetters
)(
1236 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
1237 IN PSTRING NtDeviceName
,
1238 OUT PUCHAR NtSystemPath
,
1239 OUT PSTRING NtSystemPathString
);
1242 (FASTCALL
*pHalIoReadPartitionTable
)(
1243 IN PDEVICE_OBJECT DeviceObject
,
1244 IN ULONG SectorSize
,
1245 IN BOOLEAN ReturnRecognizedPartitions
,
1246 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
1249 (FASTCALL
*pHalIoSetPartitionInformation
)(
1250 IN PDEVICE_OBJECT DeviceObject
,
1251 IN ULONG SectorSize
,
1252 IN ULONG PartitionNumber
,
1253 IN ULONG PartitionType
);
1256 (FASTCALL
*pHalIoWritePartitionTable
)(
1257 IN PDEVICE_OBJECT DeviceObject
,
1258 IN ULONG SectorSize
,
1259 IN ULONG SectorsPerTrack
,
1260 IN ULONG NumberOfHeads
,
1261 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
1263 typedef PBUS_HANDLER
1264 (FASTCALL
*pHalHandlerForBus
)(
1265 IN INTERFACE_TYPE InterfaceType
,
1266 IN ULONG BusNumber
);
1269 (FASTCALL
*pHalReferenceBusHandler
)(
1270 IN PBUS_HANDLER BusHandler
);
1273 (DDKAPI
*pHalQuerySystemInformation
)(
1274 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
1275 IN ULONG BufferSize
,
1276 IN OUT PVOID Buffer
,
1277 OUT PULONG ReturnedLength
);
1280 (DDKAPI
*pHalSetSystemInformation
)(
1281 IN HAL_SET_INFORMATION_CLASS InformationClass
,
1282 IN ULONG BufferSize
,
1286 (DDKAPI
*pHalQueryBusSlots
)(
1287 IN PBUS_HANDLER BusHandler
,
1288 IN ULONG BufferSize
,
1289 OUT PULONG SlotNumbers
,
1290 OUT PULONG ReturnedLength
);
1293 (DDKAPI
*pHalInitPnpDriver
)(
1297 (DDKAPI
*pHalInitPowerManagement
)(
1298 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
1299 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
1301 typedef struct _DMA_ADAPTER
*
1302 (DDKAPI
*pHalGetDmaAdapter
)(
1304 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
1305 OUT PULONG NumberOfMapRegisters
);
1308 (DDKAPI
*pHalGetInterruptTranslator
)(
1309 IN INTERFACE_TYPE ParentInterfaceType
,
1310 IN ULONG ParentBusNumber
,
1311 IN INTERFACE_TYPE BridgeInterfaceType
,
1314 OUT PTRANSLATOR_INTERFACE Translator
,
1315 OUT PULONG BridgeBusNumber
);
1318 (DDKAPI
*pHalStartMirroring
)(
1322 (DDKAPI
*pHalEndMirroring
)(
1323 IN ULONG PassNumber
);
1326 (DDKAPI
*pHalMirrorPhysicalMemory
)(
1327 IN PHYSICAL_ADDRESS PhysicalAddress
,
1328 IN LARGE_INTEGER NumberOfBytes
);
1331 (DDKAPI
*pHalMirrorVerify
)(
1332 IN PHYSICAL_ADDRESS PhysicalAddress
,
1333 IN LARGE_INTEGER NumberOfBytes
);
1336 (DDKAPI
*pHalEndOfBoot
)(
1341 (DDKAPI
*pHalTranslateBusAddress
)(
1342 IN INTERFACE_TYPE InterfaceType
,
1344 IN PHYSICAL_ADDRESS BusAddress
,
1345 IN OUT PULONG AddressSpace
,
1346 OUT PPHYSICAL_ADDRESS TranslatedAddress
1351 (DDKAPI
*pHalAssignSlotResources
)(
1352 IN PUNICODE_STRING RegistryPath
,
1353 IN PUNICODE_STRING DriverClassName OPTIONAL
,
1354 IN PDRIVER_OBJECT DriverObject
,
1355 IN PDEVICE_OBJECT DeviceObject
,
1356 IN INTERFACE_TYPE BusType
,
1358 IN ULONG SlotNumber
,
1359 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
1364 (DDKAPI
*pHalHaltSystem
)(
1370 (DDKAPI
*pHalResetDisplay
)(
1376 (DDKAPI
*pHalVectorToIDTEntry
)(
1382 (DDKAPI
*pHalFindBusAddressTranslation
)(
1383 IN PHYSICAL_ADDRESS BusAddress
,
1384 IN OUT PULONG AddressSpace
,
1385 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
1386 IN OUT PULONG_PTR Context
,
1392 (DDKAPI
*pKdSetupPciDeviceForDebugging
)(
1393 IN PVOID LoaderBlock OPTIONAL
,
1394 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
1399 (DDKAPI
*pKdReleasePciDeviceForDebugging
)(
1400 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
1405 (DDKAPI
*pKdGetAcpiTablePhase0
)(
1406 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
1412 (DDKAPI
*pKdCheckPowerButton
)(
1418 (DDKAPI
*pHalGetInterruptVector
)(
1419 IN INTERFACE_TYPE InterfaceType
,
1421 IN ULONG BusInterruptLevel
,
1422 IN ULONG BusInterruptVector
,
1424 OUT PKAFFINITY Affinity
1429 (DDKAPI
*pHalGetVectorInput
)(
1431 IN KAFFINITY Affinity
,
1433 OUT PKINTERRUPT_POLARITY Polarity
1438 (DDKAPI
*pKdMapPhysicalMemory64
)(
1439 IN PHYSICAL_ADDRESS PhysicalAddress
,
1440 IN ULONG NumberPages
1445 (DDKAPI
*pKdUnmapVirtualAddress
)(
1446 IN PVOID VirtualAddress
,
1447 IN ULONG NumberPages
1452 (DDKAPI
*pKdGetPciDataByOffset
)(
1454 IN ULONG SlotNumber
,
1462 (DDKAPI
*pKdSetPciDataByOffset
)(
1464 IN ULONG SlotNumber
,
1471 (DDKAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
1472 ULONG Columns
, ULONG Rows
);
1476 pHalQuerySystemInformation HalQuerySystemInformation
;
1477 pHalSetSystemInformation HalSetSystemInformation
;
1478 pHalQueryBusSlots HalQueryBusSlots
;
1480 pHalExamineMBR HalExamineMBR
;
1481 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
1482 pHalIoReadPartitionTable HalIoReadPartitionTable
;
1483 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
1484 pHalIoWritePartitionTable HalIoWritePartitionTable
;
1485 pHalHandlerForBus HalReferenceHandlerForBus
;
1486 pHalReferenceBusHandler HalReferenceBusHandler
;
1487 pHalReferenceBusHandler HalDereferenceBusHandler
;
1488 pHalInitPnpDriver HalInitPnpDriver
;
1489 pHalInitPowerManagement HalInitPowerManagement
;
1490 pHalGetDmaAdapter HalGetDmaAdapter
;
1491 pHalGetInterruptTranslator HalGetInterruptTranslator
;
1492 pHalStartMirroring HalStartMirroring
;
1493 pHalEndMirroring HalEndMirroring
;
1494 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
1495 pHalEndOfBoot HalEndOfBoot
;
1496 pHalMirrorVerify HalMirrorVerify
;
1497 } HAL_DISPATCH
, *PHAL_DISPATCH
;
1499 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTHAL_)
1500 extern NTSYSAPI PHAL_DISPATCH HalDispatchTable
;
1501 #define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable)
1503 extern __declspec(dllexport
) HAL_DISPATCH HalDispatchTable
;
1504 #define HALDISPATCH (&HalDispatchTable)
1507 #define HAL_DISPATCH_VERSION 3
1508 #define HalDispatchTableVersion HALDISPATCH->Version
1509 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
1510 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
1511 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
1512 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
1513 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
1514 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
1515 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
1516 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
1517 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
1518 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
1519 #define HalStartMirroring HALDISPATCH->HalStartMirroring
1520 #define HalEndMirroring HALDISPATCH->HalEndMirroring
1521 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
1522 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
1523 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
1525 typedef enum _FILE_INFORMATION_CLASS
{
1526 FileDirectoryInformation
= 1,
1527 FileFullDirectoryInformation
,
1528 FileBothDirectoryInformation
,
1529 FileBasicInformation
,
1530 FileStandardInformation
,
1531 FileInternalInformation
,
1533 FileAccessInformation
,
1534 FileNameInformation
,
1535 FileRenameInformation
,
1536 FileLinkInformation
,
1537 FileNamesInformation
,
1538 FileDispositionInformation
,
1539 FilePositionInformation
,
1540 FileFullEaInformation
,
1541 FileModeInformation
,
1542 FileAlignmentInformation
,
1544 FileAllocationInformation
,
1545 FileEndOfFileInformation
,
1546 FileAlternateNameInformation
,
1547 FileStreamInformation
,
1548 FilePipeInformation
,
1549 FilePipeLocalInformation
,
1550 FilePipeRemoteInformation
,
1551 FileMailslotQueryInformation
,
1552 FileMailslotSetInformation
,
1553 FileCompressionInformation
,
1554 FileObjectIdInformation
,
1555 FileCompletionInformation
,
1556 FileMoveClusterInformation
,
1557 FileQuotaInformation
,
1558 FileReparsePointInformation
,
1559 FileNetworkOpenInformation
,
1560 FileAttributeTagInformation
,
1561 FileTrackingInformation
,
1562 FileIdBothDirectoryInformation
,
1563 FileIdFullDirectoryInformation
,
1564 FileValidDataLengthInformation
,
1565 FileShortNameInformation
,
1566 FileMaximumInformation
1567 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
1569 typedef struct _FILE_POSITION_INFORMATION
{
1570 LARGE_INTEGER CurrentByteOffset
;
1571 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
1573 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1574 ULONG AlignmentRequirement
;
1575 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1577 typedef struct _FILE_NAME_INFORMATION
{
1578 ULONG FileNameLength
;
1580 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1582 #include <pshpack8.h>
1583 typedef struct _FILE_BASIC_INFORMATION
{
1584 LARGE_INTEGER CreationTime
;
1585 LARGE_INTEGER LastAccessTime
;
1586 LARGE_INTEGER LastWriteTime
;
1587 LARGE_INTEGER ChangeTime
;
1588 ULONG FileAttributes
;
1589 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
1590 #include <poppack.h>
1592 typedef struct _FILE_STANDARD_INFORMATION
{
1593 LARGE_INTEGER AllocationSize
;
1594 LARGE_INTEGER EndOfFile
;
1595 ULONG NumberOfLinks
;
1596 BOOLEAN DeletePending
;
1598 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
1600 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
1601 LARGE_INTEGER CreationTime
;
1602 LARGE_INTEGER LastAccessTime
;
1603 LARGE_INTEGER LastWriteTime
;
1604 LARGE_INTEGER ChangeTime
;
1605 LARGE_INTEGER AllocationSize
;
1606 LARGE_INTEGER EndOfFile
;
1607 ULONG FileAttributes
;
1608 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
1610 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1611 ULONG FileAttributes
;
1613 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1615 typedef struct _FILE_DISPOSITION_INFORMATION
{
1617 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1619 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1620 LARGE_INTEGER EndOfFile
;
1621 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1623 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1624 LARGE_INTEGER ValidDataLength
;
1625 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1627 typedef union _FILE_SEGMENT_ELEMENT
{
1629 ULONGLONG Alignment
;
1630 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1632 typedef enum _FSINFOCLASS
{
1633 FileFsVolumeInformation
= 1,
1634 FileFsLabelInformation
,
1635 FileFsSizeInformation
,
1636 FileFsDeviceInformation
,
1637 FileFsAttributeInformation
,
1638 FileFsControlInformation
,
1639 FileFsFullSizeInformation
,
1640 FileFsObjectIdInformation
,
1641 FileFsDriverPathInformation
,
1642 FileFsMaximumInformation
1643 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
1645 typedef struct _FILE_FS_DEVICE_INFORMATION
{
1646 DEVICE_TYPE DeviceType
;
1647 ULONG Characteristics
;
1648 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
1650 typedef struct _FILE_FULL_EA_INFORMATION
{
1651 ULONG NextEntryOffset
;
1654 USHORT EaValueLength
;
1656 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
1658 /* ERESOURCE.Flag */
1660 #define ResourceNeverExclusive 0x0010
1661 #define ResourceReleaseByOtherThread 0x0020
1662 #define ResourceOwnedExclusive 0x0080
1664 #define RESOURCE_HASH_TABLE_SIZE 64
1666 typedef struct _DEVOBJ_EXTENSION
1670 PDEVICE_OBJECT DeviceObject
;
1671 } DEVOBJ_EXTENSION
, *PDEVOBJ_EXTENSION
;
1674 (DDKAPI
*PFAST_IO_CHECK_IF_POSSIBLE
)(
1675 IN
struct _FILE_OBJECT
*FileObject
,
1676 IN PLARGE_INTEGER FileOffset
,
1680 IN BOOLEAN CheckForReadOperation
,
1681 OUT PIO_STATUS_BLOCK IoStatus
,
1682 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1685 (DDKAPI
*PFAST_IO_READ
)(
1686 IN
struct _FILE_OBJECT
*FileObject
,
1687 IN PLARGE_INTEGER FileOffset
,
1692 OUT PIO_STATUS_BLOCK IoStatus
,
1693 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1696 (DDKAPI
*PFAST_IO_WRITE
)(
1697 IN
struct _FILE_OBJECT
*FileObject
,
1698 IN PLARGE_INTEGER FileOffset
,
1703 OUT PIO_STATUS_BLOCK IoStatus
,
1704 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1707 (DDKAPI
*PFAST_IO_QUERY_BASIC_INFO
)(
1708 IN
struct _FILE_OBJECT
*FileObject
,
1710 OUT PFILE_BASIC_INFORMATION Buffer
,
1711 OUT PIO_STATUS_BLOCK IoStatus
,
1712 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1715 (DDKAPI
*PFAST_IO_QUERY_STANDARD_INFO
)(
1716 IN
struct _FILE_OBJECT
*FileObject
,
1718 OUT PFILE_STANDARD_INFORMATION Buffer
,
1719 OUT PIO_STATUS_BLOCK IoStatus
,
1720 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1723 (DDKAPI
*PFAST_IO_LOCK
)(
1724 IN
struct _FILE_OBJECT
*FileObject
,
1725 IN PLARGE_INTEGER FileOffset
,
1726 IN PLARGE_INTEGER Length
,
1727 PEPROCESS ProcessId
,
1729 BOOLEAN FailImmediately
,
1730 BOOLEAN ExclusiveLock
,
1731 OUT PIO_STATUS_BLOCK IoStatus
,
1732 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1735 (DDKAPI
*PFAST_IO_UNLOCK_SINGLE
)(
1736 IN
struct _FILE_OBJECT
*FileObject
,
1737 IN PLARGE_INTEGER FileOffset
,
1738 IN PLARGE_INTEGER Length
,
1739 PEPROCESS ProcessId
,
1741 OUT PIO_STATUS_BLOCK IoStatus
,
1742 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1745 (DDKAPI
*PFAST_IO_UNLOCK_ALL
)(
1746 IN
struct _FILE_OBJECT
*FileObject
,
1747 PEPROCESS ProcessId
,
1748 OUT PIO_STATUS_BLOCK IoStatus
,
1749 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1752 (DDKAPI
*PFAST_IO_UNLOCK_ALL_BY_KEY
)(
1753 IN
struct _FILE_OBJECT
*FileObject
,
1756 OUT PIO_STATUS_BLOCK IoStatus
,
1757 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1760 (DDKAPI
*PFAST_IO_DEVICE_CONTROL
)(
1761 IN
struct _FILE_OBJECT
*FileObject
,
1763 IN PVOID InputBuffer OPTIONAL
,
1764 IN ULONG InputBufferLength
,
1765 OUT PVOID OutputBuffer OPTIONAL
,
1766 IN ULONG OutputBufferLength
,
1767 IN ULONG IoControlCode
,
1768 OUT PIO_STATUS_BLOCK IoStatus
,
1769 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1772 (DDKAPI
*PFAST_IO_ACQUIRE_FILE
)(
1773 IN
struct _FILE_OBJECT
*FileObject
);
1776 (DDKAPI
*PFAST_IO_RELEASE_FILE
)(
1777 IN
struct _FILE_OBJECT
*FileObject
);
1780 (DDKAPI
*PFAST_IO_DETACH_DEVICE
)(
1781 IN
struct _DEVICE_OBJECT
*SourceDevice
,
1782 IN
struct _DEVICE_OBJECT
*TargetDevice
);
1785 (DDKAPI
*PFAST_IO_QUERY_NETWORK_OPEN_INFO
)(
1786 IN
struct _FILE_OBJECT
*FileObject
,
1788 OUT
struct _FILE_NETWORK_OPEN_INFORMATION
*Buffer
,
1789 OUT
struct _IO_STATUS_BLOCK
*IoStatus
,
1790 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1793 (DDKAPI
*PFAST_IO_ACQUIRE_FOR_MOD_WRITE
)(
1794 IN
struct _FILE_OBJECT
*FileObject
,
1795 IN PLARGE_INTEGER EndingOffset
,
1796 OUT
struct _ERESOURCE
**ResourceToRelease
,
1797 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1800 (DDKAPI
*PFAST_IO_MDL_READ
)(
1801 IN
struct _FILE_OBJECT
*FileObject
,
1802 IN PLARGE_INTEGER FileOffset
,
1806 OUT PIO_STATUS_BLOCK IoStatus
,
1807 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1810 (DDKAPI
*PFAST_IO_MDL_READ_COMPLETE
)(
1811 IN
struct _FILE_OBJECT
*FileObject
,
1813 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1816 (DDKAPI
*PFAST_IO_PREPARE_MDL_WRITE
)(
1817 IN
struct _FILE_OBJECT
*FileObject
,
1818 IN PLARGE_INTEGER FileOffset
,
1822 OUT PIO_STATUS_BLOCK IoStatus
,
1823 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1826 (DDKAPI
*PFAST_IO_MDL_WRITE_COMPLETE
)(
1827 IN
struct _FILE_OBJECT
*FileObject
,
1828 IN PLARGE_INTEGER FileOffset
,
1830 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1833 (DDKAPI
*PFAST_IO_READ_COMPRESSED
)(
1834 IN
struct _FILE_OBJECT
*FileObject
,
1835 IN PLARGE_INTEGER FileOffset
,
1840 OUT PIO_STATUS_BLOCK IoStatus
,
1841 OUT
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
1842 IN ULONG CompressedDataInfoLength
,
1843 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1846 (DDKAPI
*PFAST_IO_WRITE_COMPRESSED
)(
1847 IN
struct _FILE_OBJECT
*FileObject
,
1848 IN PLARGE_INTEGER FileOffset
,
1853 OUT PIO_STATUS_BLOCK IoStatus
,
1854 IN
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
1855 IN ULONG CompressedDataInfoLength
,
1856 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1859 (DDKAPI
*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED
)(
1860 IN
struct _FILE_OBJECT
*FileObject
,
1862 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1865 (DDKAPI
*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)(
1866 IN
struct _FILE_OBJECT
*FileObject
,
1867 IN PLARGE_INTEGER FileOffset
,
1869 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1872 (DDKAPI
*PFAST_IO_QUERY_OPEN
)(
1873 IN
struct _IRP
*Irp
,
1874 OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
,
1875 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1878 (DDKAPI
*PFAST_IO_RELEASE_FOR_MOD_WRITE
)(
1879 IN
struct _FILE_OBJECT
*FileObject
,
1880 IN
struct _ERESOURCE
*ResourceToRelease
,
1881 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1884 (DDKAPI
*PFAST_IO_ACQUIRE_FOR_CCFLUSH
)(
1885 IN
struct _FILE_OBJECT
*FileObject
,
1886 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1889 (DDKAPI
*PFAST_IO_RELEASE_FOR_CCFLUSH
) (
1890 IN
struct _FILE_OBJECT
*FileObject
,
1891 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1893 typedef struct _FAST_IO_DISPATCH
{
1894 ULONG SizeOfFastIoDispatch
;
1895 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible
;
1896 PFAST_IO_READ FastIoRead
;
1897 PFAST_IO_WRITE FastIoWrite
;
1898 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo
;
1899 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo
;
1900 PFAST_IO_LOCK FastIoLock
;
1901 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle
;
1902 PFAST_IO_UNLOCK_ALL FastIoUnlockAll
;
1903 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey
;
1904 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl
;
1905 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection
;
1906 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection
;
1907 PFAST_IO_DETACH_DEVICE FastIoDetachDevice
;
1908 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo
;
1909 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite
;
1910 PFAST_IO_MDL_READ MdlRead
;
1911 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete
;
1912 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite
;
1913 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete
;
1914 PFAST_IO_READ_COMPRESSED FastIoReadCompressed
;
1915 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed
;
1916 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed
;
1917 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed
;
1918 PFAST_IO_QUERY_OPEN FastIoQueryOpen
;
1919 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite
;
1920 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush
;
1921 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush
;
1922 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
1924 typedef struct _SECTION_OBJECT_POINTERS
{
1925 PVOID DataSectionObject
;
1926 PVOID SharedCacheMap
;
1927 PVOID ImageSectionObject
;
1928 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
1930 typedef struct _IO_COMPLETION_CONTEXT
{
1933 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
1935 /* FILE_OBJECT.Flags */
1937 #define FO_FILE_OPEN 0x00000001
1938 #define FO_SYNCHRONOUS_IO 0x00000002
1939 #define FO_ALERTABLE_IO 0x00000004
1940 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
1941 #define FO_WRITE_THROUGH 0x00000010
1942 #define FO_SEQUENTIAL_ONLY 0x00000020
1943 #define FO_CACHE_SUPPORTED 0x00000040
1944 #define FO_NAMED_PIPE 0x00000080
1945 #define FO_STREAM_FILE 0x00000100
1946 #define FO_MAILSLOT 0x00000200
1947 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
1948 #define FO_DIRECT_DEVICE_OPEN 0x00000800
1949 #define FO_FILE_MODIFIED 0x00001000
1950 #define FO_FILE_SIZE_CHANGED 0x00002000
1951 #define FO_CLEANUP_COMPLETE 0x00004000
1952 #define FO_TEMPORARY_FILE 0x00008000
1953 #define FO_DELETE_ON_CLOSE 0x00010000
1954 #define FO_OPENED_CASE_SENSITIVE 0x00020000
1955 #define FO_HANDLE_CREATED 0x00040000
1956 #define FO_FILE_FAST_IO_READ 0x00080000
1957 #define FO_RANDOM_ACCESS 0x00100000
1958 #define FO_FILE_OPEN_CANCELLED 0x00200000
1959 #define FO_VOLUME_OPEN 0x00400000
1960 #define FO_REMOTE_ORIGIN 0x01000000
1962 typedef struct _FILE_OBJECT
1966 PDEVICE_OBJECT DeviceObject
;
1970 PSECTION_OBJECT_POINTERS SectionObjectPointer
;
1971 PVOID PrivateCacheMap
;
1972 NTSTATUS FinalStatus
;
1973 struct _FILE_OBJECT
*RelatedFileObject
;
1974 BOOLEAN LockOperation
;
1975 BOOLEAN DeletePending
;
1977 BOOLEAN WriteAccess
;
1978 BOOLEAN DeleteAccess
;
1980 BOOLEAN SharedWrite
;
1981 BOOLEAN SharedDelete
;
1983 UNICODE_STRING FileName
;
1984 LARGE_INTEGER CurrentByteOffset
;
1985 volatile ULONG Waiters
;
1986 volatile ULONG Busy
;
1990 volatile PIO_COMPLETION_CONTEXT CompletionContext
;
1991 KSPIN_LOCK IrpListLock
;
1993 volatile PVOID FileObjectExtension
;
1995 typedef struct _FILE_OBJECT
*PFILE_OBJECT
;
1997 typedef enum _SECURITY_OPERATION_CODE
{
1998 SetSecurityDescriptor
,
1999 QuerySecurityDescriptor
,
2000 DeleteSecurityDescriptor
,
2001 AssignSecurityDescriptor
2002 } SECURITY_OPERATION_CODE
, *PSECURITY_OPERATION_CODE
;
2004 #define INITIAL_PRIVILEGE_COUNT 3
2006 typedef struct _INITIAL_PRIVILEGE_SET
{
2007 ULONG PrivilegeCount
;
2009 LUID_AND_ATTRIBUTES Privilege
[INITIAL_PRIVILEGE_COUNT
];
2010 } INITIAL_PRIVILEGE_SET
, * PINITIAL_PRIVILEGE_SET
;
2012 #define SE_MIN_WELL_KNOWN_PRIVILEGE 2
2013 #define SE_CREATE_TOKEN_PRIVILEGE 2
2014 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3
2015 #define SE_LOCK_MEMORY_PRIVILEGE 4
2016 #define SE_INCREASE_QUOTA_PRIVILEGE 5
2017 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
2018 #define SE_MACHINE_ACCOUNT_PRIVILEGE 6
2019 #define SE_TCB_PRIVILEGE 7
2020 #define SE_SECURITY_PRIVILEGE 8
2021 #define SE_TAKE_OWNERSHIP_PRIVILEGE 9
2022 #define SE_LOAD_DRIVER_PRIVILEGE 10
2023 #define SE_SYSTEM_PROFILE_PRIVILEGE 11
2024 #define SE_SYSTEMTIME_PRIVILEGE 12
2025 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
2026 #define SE_INC_BASE_PRIORITY_PRIVILEGE 14
2027 #define SE_CREATE_PAGEFILE_PRIVILEGE 15
2028 #define SE_CREATE_PERMANENT_PRIVILEGE 16
2029 #define SE_BACKUP_PRIVILEGE 17
2030 #define SE_RESTORE_PRIVILEGE 18
2031 #define SE_SHUTDOWN_PRIVILEGE 19
2032 #define SE_DEBUG_PRIVILEGE 20
2033 #define SE_AUDIT_PRIVILEGE 21
2034 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22
2035 #define SE_CHANGE_NOTIFY_PRIVILEGE 23
2036 #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24
2037 #define SE_UNDOCK_PRIVILEGE 25
2038 #define SE_SYNC_AGENT_PRIVILEGE 26
2039 #define SE_ENABLE_DELEGATION_PRIVILEGE 27
2040 #define SE_MANAGE_VOLUME_PRIVILEGE 28
2041 #define SE_IMPERSONATE_PRIVILEGE 29
2042 #define SE_CREATE_GLOBAL_PRIVILEGE 30
2043 #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_GLOBAL_PRIVILEGE
2045 typedef struct _SECURITY_SUBJECT_CONTEXT
{
2046 PACCESS_TOKEN ClientToken
;
2047 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
2048 PACCESS_TOKEN PrimaryToken
;
2049 PVOID ProcessAuditId
;
2050 } SECURITY_SUBJECT_CONTEXT
, *PSECURITY_SUBJECT_CONTEXT
;
2052 #include <pshpack4.h>
2053 typedef struct _ACCESS_STATE
{
2055 BOOLEAN SecurityEvaluated
;
2056 BOOLEAN GenerateAudit
;
2057 BOOLEAN GenerateOnClose
;
2058 BOOLEAN PrivilegesAllocated
;
2060 ACCESS_MASK RemainingDesiredAccess
;
2061 ACCESS_MASK PreviouslyGrantedAccess
;
2062 ACCESS_MASK OriginalDesiredAccess
;
2063 SECURITY_SUBJECT_CONTEXT SubjectSecurityContext
;
2064 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2067 INITIAL_PRIVILEGE_SET InitialPrivilegeSet
;
2068 PRIVILEGE_SET PrivilegeSet
;
2071 BOOLEAN AuditPrivileges
;
2072 UNICODE_STRING ObjectName
;
2073 UNICODE_STRING ObjectTypeName
;
2074 } ACCESS_STATE
, *PACCESS_STATE
;
2075 #include <poppack.h>
2077 typedef struct _IO_SECURITY_CONTEXT
{
2078 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
2079 PACCESS_STATE AccessState
;
2080 ACCESS_MASK DesiredAccess
;
2081 ULONG FullCreateOptions
;
2082 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
2084 #define IO_TYPE_ADAPTER 1
2085 #define IO_TYPE_CONTROLLER 2
2086 #define IO_TYPE_DEVICE 3
2087 #define IO_TYPE_DRIVER 4
2088 #define IO_TYPE_FILE 5
2089 #define IO_TYPE_IRP 6
2090 #define IO_TYPE_MASTER_ADAPTER 7
2091 #define IO_TYPE_OPEN_PACKET 8
2092 #define IO_TYPE_TIMER 9
2093 #define IO_TYPE_VPB 10
2094 #define IO_TYPE_ERROR_LOG 11
2095 #define IO_TYPE_ERROR_MESSAGE 12
2096 #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
2098 #define IO_TYPE_CSQ_IRP_CONTEXT 1
2099 #define IO_TYPE_CSQ 2
2103 typedef struct _IO_CSQ_IRP_CONTEXT
{
2106 struct _IO_CSQ
*Csq
;
2107 } IO_CSQ_IRP_CONTEXT
, *PIO_CSQ_IRP_CONTEXT
;
2110 (DDKAPI
*PIO_CSQ_INSERT_IRP
)(
2111 IN
struct _IO_CSQ
*Csq
,
2115 (DDKAPI
*PIO_CSQ_REMOVE_IRP
)(
2116 IN
struct _IO_CSQ
*Csq
,
2120 (DDKAPI
*PIO_CSQ_PEEK_NEXT_IRP
)(
2121 IN
struct _IO_CSQ
*Csq
,
2123 IN PVOID PeekContext
);
2126 (DDKAPI
*PIO_CSQ_ACQUIRE_LOCK
)(
2127 IN
struct _IO_CSQ
*Csq
,
2131 (DDKAPI
*PIO_CSQ_RELEASE_LOCK
)(
2132 IN
struct _IO_CSQ
*Csq
,
2136 (DDKAPI
*PIO_CSQ_COMPLETE_CANCELED_IRP
)(
2137 IN
struct _IO_CSQ
*Csq
,
2140 typedef struct _IO_CSQ
{
2142 PIO_CSQ_INSERT_IRP CsqInsertIrp
;
2143 PIO_CSQ_REMOVE_IRP CsqRemoveIrp
;
2144 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
;
2145 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
;
2146 PIO_CSQ_RELEASE_LOCK CsqReleaseLock
;
2147 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
;
2148 PVOID ReservePointer
;
2151 #if !defined(_ALPHA_)
2152 #include <pshpack4.h>
2154 typedef struct _IO_STACK_LOCATION
{
2155 UCHAR MajorFunction
;
2156 UCHAR MinorFunction
;
2161 PIO_SECURITY_CONTEXT SecurityContext
;
2163 USHORT POINTER_ALIGNMENT FileAttributes
;
2165 ULONG POINTER_ALIGNMENT EaLength
;
2169 ULONG POINTER_ALIGNMENT Key
;
2170 LARGE_INTEGER ByteOffset
;
2174 ULONG POINTER_ALIGNMENT Key
;
2175 LARGE_INTEGER ByteOffset
;
2179 PUNICODE_STRING FileName
;
2180 FILE_INFORMATION_CLASS FileInformationClass
;
2185 ULONG CompletionFilter
;
2189 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
2193 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
2194 PFILE_OBJECT FileObject
;
2195 _ANONYMOUS_UNION
union {
2196 _ANONYMOUS_STRUCT
struct {
2197 BOOLEAN ReplaceIfExists
;
2198 BOOLEAN AdvanceOnly
;
2201 HANDLE DeleteHandle
;
2215 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
2219 FS_INFORMATION_CLASS FsInformationClass
;
2222 ULONG OutputBufferLength
;
2223 ULONG InputBufferLength
;
2224 ULONG FsControlCode
;
2225 PVOID Type3InputBuffer
;
2226 } FileSystemControl
;
2228 PLARGE_INTEGER Length
;
2230 LARGE_INTEGER ByteOffset
;
2233 ULONG OutputBufferLength
;
2234 ULONG POINTER_ALIGNMENT InputBufferLength
;
2235 ULONG POINTER_ALIGNMENT IoControlCode
;
2236 PVOID Type3InputBuffer
;
2239 SECURITY_INFORMATION SecurityInformation
;
2240 ULONG POINTER_ALIGNMENT Length
;
2243 SECURITY_INFORMATION SecurityInformation
;
2244 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2248 PDEVICE_OBJECT DeviceObject
;
2252 PDEVICE_OBJECT DeviceObject
;
2255 struct _SCSI_REQUEST_BLOCK
*Srb
;
2260 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
2261 ULONG SidListLength
;
2267 DEVICE_RELATION_TYPE Type
;
2268 } QueryDeviceRelations
;
2270 CONST GUID
*InterfaceType
;
2273 PINTERFACE Interface
;
2274 PVOID InterfaceSpecificData
;
2277 PDEVICE_CAPABILITIES Capabilities
;
2278 } DeviceCapabilities
;
2280 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
2281 } FilterResourceRequirements
;
2286 ULONG POINTER_ALIGNMENT Length
;
2292 BUS_QUERY_ID_TYPE IdType
;
2295 DEVICE_TEXT_TYPE DeviceTextType
;
2296 LCID POINTER_ALIGNMENT LocaleId
;
2300 BOOLEAN Reserved
[3];
2301 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type
;
2302 } UsageNotification
;
2304 SYSTEM_POWER_STATE PowerState
;
2307 PPOWER_SEQUENCE PowerSequence
;
2310 ULONG SystemContext
;
2311 POWER_STATE_TYPE POINTER_ALIGNMENT Type
;
2312 POWER_STATE POINTER_ALIGNMENT State
;
2313 POWER_ACTION POINTER_ALIGNMENT ShutdownType
;
2316 PCM_RESOURCE_LIST AllocatedResources
;
2317 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
2320 ULONG_PTR ProviderId
;
2332 PDEVICE_OBJECT DeviceObject
;
2333 PFILE_OBJECT FileObject
;
2334 PIO_COMPLETION_ROUTINE CompletionRoutine
;
2336 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
2337 #if !defined(_ALPHA_)
2338 #include <poppack.h>
2341 /* IO_STACK_LOCATION.Control */
2343 #define SL_PENDING_RETURNED 0x01
2344 #define SL_ERROR_RETURNED 0x02
2345 #define SL_INVOKE_ON_CANCEL 0x20
2346 #define SL_INVOKE_ON_SUCCESS 0x40
2347 #define SL_INVOKE_ON_ERROR 0x80
2349 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
2351 #define PCI_WHICHSPACE_CONFIG 0x0
2352 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
2354 typedef enum _KEY_INFORMATION_CLASS
{
2355 KeyBasicInformation
,
2359 KeyCachedInformation
,
2361 } KEY_INFORMATION_CLASS
;
2363 typedef struct _KEY_BASIC_INFORMATION
{
2364 LARGE_INTEGER LastWriteTime
;
2368 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
2370 typedef struct _KEY_FULL_INFORMATION
{
2371 LARGE_INTEGER LastWriteTime
;
2379 ULONG MaxValueNameLen
;
2380 ULONG MaxValueDataLen
;
2382 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
2384 typedef struct _KEY_NODE_INFORMATION
{
2385 LARGE_INTEGER LastWriteTime
;
2391 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
2393 typedef struct _KEY_VALUE_BASIC_INFORMATION
{
2398 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
2400 typedef struct _KEY_VALUE_FULL_INFORMATION
{
2407 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
2409 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
{
2414 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
2416 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
{
2420 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64
;
2422 typedef struct _KEY_VALUE_ENTRY
{
2423 PUNICODE_STRING ValueName
;
2427 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
2429 typedef enum _KEY_VALUE_INFORMATION_CLASS
{
2430 KeyValueBasicInformation
,
2431 KeyValueFullInformation
,
2432 KeyValuePartialInformation
,
2433 KeyValueFullInformationAlign64
,
2434 KeyValuePartialInformationAlign64
2435 } KEY_VALUE_INFORMATION_CLASS
;
2437 typedef struct _KEY_WRITE_TIME_INFORMATION
{
2438 LARGE_INTEGER LastWriteTime
;
2439 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
2441 typedef struct _KEY_USER_FLAGS_INFORMATION
{
2443 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
2445 typedef enum _KEY_SET_INFORMATION_CLASS
{
2446 KeyWriteTimeInformation
,
2447 KeyUserFlagsInformation
,
2449 } KEY_SET_INFORMATION_CLASS
;
2451 /* KEY_VALUE_Xxx.Type */
2455 #define REG_EXPAND_SZ 2
2456 #define REG_BINARY 3
2458 #define REG_DWORD_LITTLE_ENDIAN 4
2459 #define REG_DWORD_BIG_ENDIAN 5
2461 #define REG_MULTI_SZ 7
2462 #define REG_RESOURCE_LIST 8
2463 #define REG_FULL_RESOURCE_DESCRIPTOR 9
2464 #define REG_RESOURCE_REQUIREMENTS_LIST 10
2465 #define REG_QWORD 11
2466 #define REG_QWORD_LITTLE_ENDIAN 11
2468 #define PCI_TYPE0_ADDRESSES 6
2469 #define PCI_TYPE1_ADDRESSES 2
2470 #define PCI_TYPE2_ADDRESSES 5
2472 typedef struct _PCI_COMMON_CONFIG
{
2481 UCHAR CacheLineSize
;
2486 struct _PCI_HEADER_TYPE_0
{
2487 ULONG BaseAddresses
[PCI_TYPE0_ADDRESSES
];
2491 ULONG ROMBaseAddress
;
2492 UCHAR CapabilitiesPtr
;
2495 UCHAR InterruptLine
;
2498 UCHAR MaximumLatency
;
2500 struct _PCI_HEADER_TYPE_1
{
2501 ULONG BaseAddresses
[PCI_TYPE1_ADDRESSES
];
2504 UCHAR SubordinateBus
;
2505 UCHAR SecondaryLatency
;
2508 USHORT SecondaryStatus
;
2511 USHORT PrefetchBase
;
2512 USHORT PrefetchLimit
;
2513 ULONG PrefetchBaseUpper32
;
2514 ULONG PrefetchLimitUpper32
;
2515 USHORT IOBaseUpper16
;
2516 USHORT IOLimitUpper16
;
2517 UCHAR CapabilitiesPtr
;
2519 ULONG ROMBaseAddress
;
2520 UCHAR InterruptLine
;
2522 USHORT BridgeControl
;
2524 struct _PCI_HEADER_TYPE_2
{
2525 ULONG SocketRegistersBaseAddress
;
2526 UCHAR CapabilitiesPtr
;
2528 USHORT SecondaryStatus
;
2531 UCHAR SubordinateBus
;
2532 UCHAR SecondaryLatency
;
2536 } Range
[PCI_TYPE2_ADDRESSES
- 1];
2537 UCHAR InterruptLine
;
2539 USHORT BridgeControl
;
2542 UCHAR DeviceSpecific
[192];
2543 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
2545 /* PCI_COMMON_CONFIG.Command */
2547 #define PCI_ENABLE_IO_SPACE 0x0001
2548 #define PCI_ENABLE_MEMORY_SPACE 0x0002
2549 #define PCI_ENABLE_BUS_MASTER 0x0004
2550 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
2551 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
2552 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
2553 #define PCI_ENABLE_PARITY 0x0040
2554 #define PCI_ENABLE_WAIT_CYCLE 0x0080
2555 #define PCI_ENABLE_SERR 0x0100
2556 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
2558 /* PCI_COMMON_CONFIG.Status */
2560 #define PCI_STATUS_CAPABILITIES_LIST 0x0010
2561 #define PCI_STATUS_66MHZ_CAPABLE 0x0020
2562 #define PCI_STATUS_UDF_SUPPORTED 0x0040
2563 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
2564 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
2565 #define PCI_STATUS_DEVSEL 0x0600
2566 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
2567 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
2568 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
2569 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
2570 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
2572 /* PCI_COMMON_CONFIG.HeaderType */
2574 #define PCI_MULTIFUNCTION 0x80
2575 #define PCI_DEVICE_TYPE 0x00
2576 #define PCI_BRIDGE_TYPE 0x01
2577 #define PCI_CARDBUS_BRIDGE_TYPE 0x02
2579 #define PCI_CONFIGURATION_TYPE(PciData) \
2580 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
2582 #define PCI_MULTIFUNCTION_DEVICE(PciData) \
2583 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
2585 /* PCI device classes */
2587 #define PCI_CLASS_PRE_20 0x00
2588 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
2589 #define PCI_CLASS_NETWORK_CTLR 0x02
2590 #define PCI_CLASS_DISPLAY_CTLR 0x03
2591 #define PCI_CLASS_MULTIMEDIA_DEV 0x04
2592 #define PCI_CLASS_MEMORY_CTLR 0x05
2593 #define PCI_CLASS_BRIDGE_DEV 0x06
2594 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
2595 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
2596 #define PCI_CLASS_INPUT_DEV 0x09
2597 #define PCI_CLASS_DOCKING_STATION 0x0a
2598 #define PCI_CLASS_PROCESSOR 0x0b
2599 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
2601 /* PCI device subclasses for class 0 */
2603 #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
2604 #define PCI_SUBCLASS_PRE_20_VGA 0x01
2606 /* PCI device subclasses for class 1 (mass storage controllers)*/
2608 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
2609 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
2610 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
2611 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
2612 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
2613 #define PCI_SUBCLASS_MSC_OTHER 0x80
2615 /* PCI device subclasses for class 2 (network controllers)*/
2617 #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
2618 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
2619 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
2620 #define PCI_SUBCLASS_NET_ATM_CTLR 0x03
2621 #define PCI_SUBCLASS_NET_OTHER 0x80
2623 /* PCI device subclasses for class 3 (display controllers)*/
2625 #define PCI_SUBCLASS_VID_VGA_CTLR 0x00
2626 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01
2627 #define PCI_SUBCLASS_VID_3D_CTLR 0x02
2628 #define PCI_SUBCLASS_VID_OTHER 0x80
2630 /* PCI device subclasses for class 4 (multimedia device)*/
2632 #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
2633 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
2634 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
2635 #define PCI_SUBCLASS_MM_OTHER 0x80
2637 /* PCI device subclasses for class 5 (memory controller)*/
2639 #define PCI_SUBCLASS_MEM_RAM 0x00
2640 #define PCI_SUBCLASS_MEM_FLASH 0x01
2641 #define PCI_SUBCLASS_MEM_OTHER 0x80
2643 /* PCI device subclasses for class 6 (bridge device)*/
2645 #define PCI_SUBCLASS_BR_HOST 0x00
2646 #define PCI_SUBCLASS_BR_ISA 0x01
2647 #define PCI_SUBCLASS_BR_EISA 0x02
2648 #define PCI_SUBCLASS_BR_MCA 0x03
2649 #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
2650 #define PCI_SUBCLASS_BR_PCMCIA 0x05
2651 #define PCI_SUBCLASS_BR_NUBUS 0x06
2652 #define PCI_SUBCLASS_BR_CARDBUS 0x07
2653 #define PCI_SUBCLASS_BR_OTHER 0x80
2655 /* PCI device subclasses for class C (serial bus controller)*/
2657 #define PCI_SUBCLASS_SB_IEEE1394 0x00
2658 #define PCI_SUBCLASS_SB_ACCESS 0x01
2659 #define PCI_SUBCLASS_SB_SSA 0x02
2660 #define PCI_SUBCLASS_SB_USB 0x03
2661 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
2662 #define PCI_SUBCLASS_SB_SMBUS 0x05
2664 #define PCI_MAX_DEVICES 32
2665 #define PCI_MAX_FUNCTION 8
2666 #define PCI_MAX_BRIDGE_NUMBER 0xFF
2667 #define PCI_INVALID_VENDORID 0xFFFF
2668 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
2670 #define PCI_ADDRESS_MEMORY_SPACE 0x00000000
2671 #define PCI_ADDRESS_IO_SPACE 0x00000001
2672 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
2673 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
2674 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
2675 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
2676 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
2678 #define PCI_TYPE_32BIT 0
2679 #define PCI_TYPE_20BIT 2
2680 #define PCI_TYPE_64BIT 4
2682 typedef struct _PCI_SLOT_NUMBER
{
2685 ULONG DeviceNumber
: 5;
2686 ULONG FunctionNumber
: 3;
2687 ULONG Reserved
: 24;
2691 } PCI_SLOT_NUMBER
, *PPCI_SLOT_NUMBER
;
2693 #define POOL_COLD_ALLOCATION 256
2694 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
2695 #define POOL_RAISE_IF_ALLOCATION_FAILURE 16
2697 typedef struct _OSVERSIONINFOA
{
2698 ULONG dwOSVersionInfoSize
;
2699 ULONG dwMajorVersion
;
2700 ULONG dwMinorVersion
;
2701 ULONG dwBuildNumber
;
2703 CHAR szCSDVersion
[128];
2704 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
2706 typedef struct _OSVERSIONINFOW
{
2707 ULONG dwOSVersionInfoSize
;
2708 ULONG dwMajorVersion
;
2709 ULONG dwMinorVersion
;
2710 ULONG dwBuildNumber
;
2712 WCHAR szCSDVersion
[128];
2713 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
2716 typedef OSVERSIONINFOW OSVERSIONINFO
;
2717 typedef POSVERSIONINFOW POSVERSIONINFO
;
2718 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
2720 typedef OSVERSIONINFOA OSVERSIONINFO
;
2721 typedef POSVERSIONINFOA POSVERSIONINFO
;
2722 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
2725 typedef struct _OSVERSIONINFOEXA
{
2726 ULONG dwOSVersionInfoSize
;
2727 ULONG dwMajorVersion
;
2728 ULONG dwMinorVersion
;
2729 ULONG dwBuildNumber
;
2731 CHAR szCSDVersion
[128];
2732 USHORT wServicePackMajor
;
2733 USHORT wServicePackMinor
;
2737 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
2739 typedef struct _OSVERSIONINFOEXW
{
2740 ULONG dwOSVersionInfoSize
;
2741 ULONG dwMajorVersion
;
2742 ULONG dwMinorVersion
;
2743 ULONG dwBuildNumber
;
2745 WCHAR szCSDVersion
[128];
2746 USHORT wServicePackMajor
;
2747 USHORT wServicePackMinor
;
2751 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
2754 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
2755 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
2756 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
2758 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
2759 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
2760 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
2766 VerSetConditionMask(
2767 IN ULONGLONG ConditionMask
,
2769 IN UCHAR Condition
);
2771 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
2772 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
2773 (TypeBitMask), (ComparisonType)))
2775 /* RtlVerifyVersionInfo() TypeMask */
2777 #define VER_MINORVERSION 0x0000001
2778 #define VER_MAJORVERSION 0x0000002
2779 #define VER_BUILDNUMBER 0x0000004
2780 #define VER_PLATFORMID 0x0000008
2781 #define VER_SERVICEPACKMINOR 0x0000010
2782 #define VER_SERVICEPACKMAJOR 0x0000020
2783 #define VER_SUITENAME 0x0000040
2784 #define VER_PRODUCT_TYPE 0x0000080
2786 /* RtlVerifyVersionInfo() ComparisonType */
2789 #define VER_GREATER 2
2790 #define VER_GREATER_EQUAL 3
2792 #define VER_LESS_EQUAL 5
2796 #define VER_CONDITION_MASK 7
2797 #define VER_NUM_BITS_PER_CONDITION_MASK 3
2802 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
) (
2804 struct _RTL_RANGE
*Range
2807 typedef enum _EVENT_TYPE
{
2809 SynchronizationEvent
2812 typedef enum _KWAIT_REASON
{
2850 typedef struct _KWAIT_BLOCK
{
2851 LIST_ENTRY WaitListEntry
;
2852 struct _KTHREAD
* RESTRICTED_POINTER Thread
;
2854 struct _KWAIT_BLOCK
* RESTRICTED_POINTER NextWaitBlock
;
2858 } KWAIT_BLOCK
, *PKWAIT_BLOCK
, *RESTRICTED_POINTER PRKWAIT_BLOCK
;
2860 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK
* PIO_REMOVE_LOCK_TRACKING_BLOCK
;
2862 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK
{
2864 BOOLEAN Reserved
[3];
2865 volatile LONG IoCount
;
2867 } IO_REMOVE_LOCK_COMMON_BLOCK
;
2869 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK
{
2872 LONGLONG MaxLockedTicks
;
2874 LIST_ENTRY LockList
;
2876 volatile LONG LowMemoryCount
;
2879 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks
;
2880 } IO_REMOVE_LOCK_DBG_BLOCK
;
2882 typedef struct _IO_REMOVE_LOCK
{
2883 IO_REMOVE_LOCK_COMMON_BLOCK Common
;
2885 IO_REMOVE_LOCK_DBG_BLOCK Dbg
;
2887 } IO_REMOVE_LOCK
, *PIO_REMOVE_LOCK
;
2889 typedef struct _IO_WORKITEM
*PIO_WORKITEM
;
2892 (DDKAPI IO_WORKITEM_ROUTINE
)(
2893 IN PDEVICE_OBJECT DeviceObject
,
2895 typedef IO_WORKITEM_ROUTINE
*PIO_WORKITEM_ROUTINE
;
2897 typedef struct _SHARE_ACCESS
{
2905 } SHARE_ACCESS
, *PSHARE_ACCESS
;
2907 typedef enum _KINTERRUPT_MODE
{
2912 #define THREAD_WAIT_OBJECTS 3
2915 (DDKAPI
*PKINTERRUPT_ROUTINE
)(
2918 typedef enum _CREATE_FILE_TYPE
{
2920 CreateFileTypeNamedPipe
,
2921 CreateFileTypeMailslot
2924 typedef struct _CONFIGURATION_INFORMATION
{
2929 ULONG ScsiPortCount
;
2931 ULONG ParallelCount
;
2932 BOOLEAN AtDiskPrimaryAddressClaimed
;
2933 BOOLEAN AtDiskSecondaryAddressClaimed
;
2935 ULONG MediumChangerCount
;
2936 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
2938 typedef enum _CONFIGURATION_TYPE
{
2941 FloatingPointProcessor
,
2951 MultiFunctionAdapter
,
2965 FloppyDiskPeripheral
,
2978 RealModeIrqRoutingTable
,
2979 RealModePCIEnumeration
,
2981 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
2983 #define IO_FORCE_ACCESS_CHECK 0x001
2984 #define IO_NO_PARAMETER_CHECKING 0x100
2986 #define IO_REPARSE 0x0
2987 #define IO_REMOUNT 0x1
2990 (DDKAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
2992 IN PUNICODE_STRING PathName
,
2993 IN INTERFACE_TYPE BusType
,
2995 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
2996 IN CONFIGURATION_TYPE ControllerType
,
2997 IN ULONG ControllerNumber
,
2998 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
2999 IN CONFIGURATION_TYPE PeripheralType
,
3000 IN ULONG PeripheralNumber
,
3001 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
3003 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
3004 IoQueryDeviceIdentifier
= 0,
3005 IoQueryDeviceConfigurationData
,
3006 IoQueryDeviceComponentInformation
,
3007 IoQueryDeviceMaxData
3008 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
3010 typedef enum _KBUGCHECK_CALLBACK_REASON
{
3012 KbCallbackReserved1
,
3013 KbCallbackSecondaryDumpData
,
3015 } KBUGCHECK_CALLBACK_REASON
;
3017 struct _KBUGCHECK_REASON_CALLBACK_RECORD
;
3020 (DDKAPI
*PKBUGCHECK_REASON_CALLBACK_ROUTINE
)(
3021 IN KBUGCHECK_CALLBACK_REASON Reason
,
3022 IN
struct _KBUGCHECK_REASON_CALLBACK_RECORD
*Record
,
3023 IN OUT PVOID ReasonSpecificData
,
3024 IN ULONG ReasonSpecificDataLength
);
3026 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD
{
3028 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
;
3031 KBUGCHECK_CALLBACK_REASON Reason
;
3033 } KBUGCHECK_REASON_CALLBACK_RECORD
, *PKBUGCHECK_REASON_CALLBACK_RECORD
;
3035 typedef enum _KBUGCHECK_BUFFER_DUMP_STATE
{
3041 } KBUGCHECK_BUFFER_DUMP_STATE
;
3044 (DDKAPI
*PKBUGCHECK_CALLBACK_ROUTINE
)(
3048 typedef struct _KBUGCHECK_CALLBACK_RECORD
{
3050 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
;
3056 } KBUGCHECK_CALLBACK_RECORD
, *PKBUGCHECK_CALLBACK_RECORD
;
3059 (DDKAPI
*PNMI_CALLBACK
)(
3061 IN BOOLEAN Handled
);
3065 * KeInitializeCallbackRecord(
3066 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
3068 #define KeInitializeCallbackRecord(CallbackRecord) \
3069 CallbackRecord->State = BufferEmpty;
3071 typedef enum _KDPC_IMPORTANCE
{
3077 typedef enum _MEMORY_CACHING_TYPE_ORIG
{
3078 MmFrameBufferCached
= 2
3079 } MEMORY_CACHING_TYPE_ORIG
;
3081 typedef enum _MEMORY_CACHING_TYPE
{
3082 MmNonCached
= FALSE
,
3084 MmWriteCombined
= MmFrameBufferCached
,
3085 MmHardwareCoherentCached
,
3086 MmNonCachedUnordered
,
3089 } MEMORY_CACHING_TYPE
;
3091 typedef enum _MM_PAGE_PRIORITY
{
3093 NormalPagePriority
= 16,
3094 HighPagePriority
= 32
3097 typedef enum _LOCK_OPERATION
{
3103 #define FLUSH_MULTIPLE_MAXIMUM 32
3105 typedef enum _MM_SYSTEM_SIZE
{
3111 typedef struct _OBJECT_HANDLE_INFORMATION
{
3112 ULONG HandleAttributes
;
3113 ACCESS_MASK GrantedAccess
;
3114 } OBJECT_HANDLE_INFORMATION
, *POBJECT_HANDLE_INFORMATION
;
3116 typedef struct _CLIENT_ID
{
3117 HANDLE UniqueProcess
;
3118 HANDLE UniqueThread
;
3119 } CLIENT_ID
, *PCLIENT_ID
;
3122 (DDKAPI
*PKSTART_ROUTINE
)(
3123 IN PVOID StartContext
);
3126 (DDKAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
3128 IN HANDLE ProcessId
,
3132 (DDKAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
3133 IN HANDLE ProcessId
,
3137 typedef struct _IMAGE_INFO
{
3138 _ANONYMOUS_UNION
union {
3140 _ANONYMOUS_STRUCT
struct {
3141 ULONG ImageAddressingMode
: 8;
3142 ULONG SystemModeImage
: 1;
3143 ULONG ImageMappedToAllPids
: 1;
3144 ULONG Reserved
: 22;
3148 ULONG ImageSelector
;
3150 ULONG ImageSectionNumber
;
3151 } IMAGE_INFO
, *PIMAGE_INFO
;
3153 #define IMAGE_ADDRESSING_MODE_32BIT 3
3156 (DDKAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
3157 IN PUNICODE_STRING FullImageName
,
3158 IN HANDLE ProcessId
,
3159 IN PIMAGE_INFO ImageInfo
);
3161 #pragma pack(push,4)
3162 typedef enum _BUS_DATA_TYPE
{
3163 ConfigurationSpaceUndefined
= -1,
3171 PCMCIAConfiguration
,
3174 PNPISAConfiguration
,
3175 SgiInternalConfiguration
,
3177 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
3180 typedef struct _NT_TIB
{
3181 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
3185 _ANONYMOUS_UNION
union {
3189 PVOID ArbitraryUserPointer
;
3190 struct _NT_TIB
*Self
;
3193 typedef struct _NT_TIB32
{
3194 ULONG ExceptionList
;
3198 __GNU_EXTENSION
union {
3202 ULONG ArbitraryUserPointer
;
3204 } NT_TIB32
,*PNT_TIB32
;
3206 typedef struct _NT_TIB64
{
3207 ULONG64 ExceptionList
;
3210 ULONG64 SubSystemTib
;
3211 __GNU_EXTENSION
union {
3215 ULONG64 ArbitraryUserPointer
;
3217 } NT_TIB64
,*PNT_TIB64
;
3219 typedef enum _PROCESSINFOCLASS
{
3220 ProcessBasicInformation
,
3225 ProcessBasePriority
,
3226 ProcessRaisePriority
,
3228 ProcessExceptionPort
,
3230 ProcessLdtInformation
,
3232 ProcessDefaultHardErrorMode
,
3233 ProcessIoPortHandlers
,
3234 ProcessPooledUsageAndLimits
,
3235 ProcessWorkingSetWatch
,
3236 ProcessUserModeIOPL
,
3237 ProcessEnableAlignmentFaultFixup
,
3238 ProcessPriorityClass
,
3239 ProcessWx86Information
,
3241 ProcessAffinityMask
,
3242 ProcessPriorityBoost
,
3244 ProcessSessionInformation
,
3245 ProcessForegroundInformation
,
3246 ProcessWow64Information
,
3247 ProcessImageFileName
,
3248 ProcessLUIDDeviceMapsEnabled
,
3249 ProcessBreakOnTermination
,
3250 ProcessDebugObjectHandle
,
3252 ProcessHandleTracing
,
3254 ProcessExecuteFlags
,
3255 ProcessTlsInformation
,
3257 ProcessImageInformation
,
3259 ProcessPagePriority
,
3260 ProcessInstrumentationCallback
,
3264 typedef enum _THREADINFOCLASS
{
3265 ThreadBasicInformation
,
3270 ThreadImpersonationToken
,
3271 ThreadDescriptorTableEntry
,
3272 ThreadEnableAlignmentFaultFixup
,
3273 ThreadEventPair_Reusable
,
3274 ThreadQuerySetWin32StartAddress
,
3276 ThreadPerformanceCount
,
3277 ThreadAmILastThread
,
3278 ThreadIdealProcessor
,
3279 ThreadPriorityBoost
,
3280 ThreadSetTlsArrayAddress
,
3282 ThreadHideFromDebugger
,
3283 ThreadBreakOnTermination
,
3284 ThreadSwitchLegacyState
,
3286 ThreadLastSystemCall
,
3290 ThreadActualBasePriority
,
3294 typedef struct _PROCESS_BASIC_INFORMATION
3296 NTSTATUS ExitStatus
;
3297 struct _PEB
*PebBaseAddress
;
3298 ULONG_PTR AffinityMask
;
3299 KPRIORITY BasePriority
;
3300 ULONG_PTR UniqueProcessId
;
3301 ULONG_PTR InheritedFromUniqueProcessId
;
3302 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
3304 typedef struct _PROCESS_WS_WATCH_INFORMATION
3308 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
3310 typedef struct _PROCESS_DEVICEMAP_INFORMATION
3312 __GNU_EXTENSION
union
3316 HANDLE DirectoryHandle
;
3321 UCHAR DriveType
[32];
3324 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
3326 typedef struct _KERNEL_USER_TIMES
3328 LARGE_INTEGER CreateTime
;
3329 LARGE_INTEGER ExitTime
;
3330 LARGE_INTEGER KernelTime
;
3331 LARGE_INTEGER UserTime
;
3332 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
3334 typedef struct _PROCESS_ACCESS_TOKEN
3338 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
3340 typedef struct _PROCESS_SESSION_INFORMATION
3343 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
3346 (DDKAPI
*PREQUEST_POWER_COMPLETE
)(
3347 IN PDEVICE_OBJECT DeviceObject
,
3348 IN UCHAR MinorFunction
,
3349 IN POWER_STATE PowerState
,
3351 IN PIO_STATUS_BLOCK IoStatus
);
3353 typedef enum _TRACE_INFORMATION_CLASS
{
3356 TraceEnableFlagsClass
,
3357 TraceEnableLevelClass
,
3358 GlobalLoggerHandleClass
,
3359 EventLoggerHandleClass
,
3360 AllLoggerHandlesClass
,
3361 TraceHandleByNameClass
3362 } TRACE_INFORMATION_CLASS
;
3364 typedef enum _REG_NOTIFY_CLASS
3367 RegNtPreDeleteKey
= RegNtDeleteKey
,
3369 RegNtPreSetValueKey
= RegNtSetValueKey
,
3370 RegNtDeleteValueKey
,
3371 RegNtPreDeleteValueKey
= RegNtDeleteValueKey
,
3372 RegNtSetInformationKey
,
3373 RegNtPreSetInformationKey
= RegNtSetInformationKey
,
3375 RegNtPreRenameKey
= RegNtRenameKey
,
3377 RegNtPreEnumerateKey
= RegNtEnumerateKey
,
3378 RegNtEnumerateValueKey
,
3379 RegNtPreEnumerateValueKey
= RegNtEnumerateValueKey
,
3381 RegNtPreQueryKey
= RegNtQueryKey
,
3383 RegNtPreQueryValueKey
= RegNtQueryValueKey
,
3384 RegNtQueryMultipleValueKey
,
3385 RegNtPreQueryMultipleValueKey
= RegNtQueryMultipleValueKey
,
3390 RegNtKeyHandleClose
,
3391 RegNtPreKeyHandleClose
= RegNtKeyHandleClose
,
3393 RegNtPostSetValueKey
,
3394 RegNtPostDeleteValueKey
,
3395 RegNtPostSetInformationKey
,
3397 RegNtPostEnumerateKey
,
3398 RegNtPostEnumerateValueKey
,
3400 RegNtPostQueryValueKey
,
3401 RegNtPostQueryMultipleValueKey
,
3402 RegNtPostKeyHandleClose
,
3403 RegNtPreCreateKeyEx
,
3404 RegNtPostCreateKeyEx
,
3407 } REG_NOTIFY_CLASS
, *PREG_NOTIFY_CLASS
;
3410 (NTAPI
*PEX_CALLBACK_FUNCTION
)(
3411 IN PVOID CallbackContext
,
3416 typedef struct _REG_DELETE_KEY_INFORMATION
3419 } REG_DELETE_KEY_INFORMATION
, *PREG_DELETE_KEY_INFORMATION
;
3421 typedef struct _REG_SET_VALUE_KEY_INFORMATION
3424 PUNICODE_STRING ValueName
;
3429 } REG_SET_VALUE_KEY_INFORMATION
, *PREG_SET_VALUE_KEY_INFORMATION
;
3431 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION
3434 PUNICODE_STRING ValueName
;
3435 } REG_DELETE_VALUE_KEY_INFORMATION
, *PREG_DELETE_VALUE_KEY_INFORMATION
;
3437 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION
3440 KEY_SET_INFORMATION_CLASS KeySetInformationClass
;
3441 PVOID KeySetInformation
;
3442 ULONG KeySetInformationLength
;
3443 } REG_SET_INFORMATION_KEY_INFORMATION
, *PREG_SET_INFORMATION_KEY_INFORMATION
;
3445 typedef struct _REG_ENUMERATE_KEY_INFORMATION
3449 KEY_INFORMATION_CLASS KeyInformationClass
;
3450 PVOID KeyInformation
;
3452 PULONG ResultLength
;
3453 } REG_ENUMERATE_KEY_INFORMATION
, *PREG_ENUMERATE_KEY_INFORMATION
;
3455 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION
3459 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
3460 PVOID KeyValueInformation
;
3462 PULONG ResultLength
;
3463 } REG_ENUMERATE_VALUE_KEY_INFORMATION
, *PREG_ENUMERATE_VALUE_KEY_INFORMATION
;
3465 typedef struct _REG_QUERY_KEY_INFORMATION
3468 KEY_INFORMATION_CLASS KeyInformationClass
;
3469 PVOID KeyInformation
;
3471 PULONG ResultLength
;
3472 } REG_QUERY_KEY_INFORMATION
, *PREG_QUERY_KEY_INFORMATION
;
3474 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION
3477 PUNICODE_STRING ValueName
;
3478 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
3479 PVOID KeyValueInformation
;
3481 PULONG ResultLength
;
3482 } REG_QUERY_VALUE_KEY_INFORMATION
, *PREG_QUERY_VALUE_KEY_INFORMATION
;
3484 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
3487 PKEY_VALUE_ENTRY ValueEntries
;
3490 PULONG BufferLength
;
3491 PULONG RequiredBufferLength
;
3492 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
;
3494 typedef struct _REG_PRE_CREATE_KEY_INFORMATION
3496 PUNICODE_STRING CompleteName
;
3497 } REG_PRE_CREATE_KEY_INFORMATION
, *PREG_PRE_CREATE_KEY_INFORMATION
;
3499 typedef struct _REG_POST_CREATE_KEY_INFORMATION
3501 PUNICODE_STRING CompleteName
;
3504 } REG_POST_CREATE_KEY_INFORMATION
, *PREG_POST_CREATE_KEY_INFORMATION
;
3506 typedef struct _REG_PRE_OPEN_KEY_INFORMATION
3508 PUNICODE_STRING CompleteName
;
3509 } REG_PRE_OPEN_KEY_INFORMATION
, *PREG_PRE_OPEN_KEY_INFORMATION
;
3511 typedef struct _REG_POST_OPEN_KEY_INFORMATION
3513 PUNICODE_STRING CompleteName
;
3516 } REG_POST_OPEN_KEY_INFORMATION
, *PREG_POST_OPEN_KEY_INFORMATION
;
3518 typedef struct _REG_POST_OPERATION_INFORMATION
3522 } REG_POST_OPERATION_INFORMATION
,*PREG_POST_OPERATION_INFORMATION
;
3524 typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION
3527 } REG_KEY_HANDLE_CLOSE_INFORMATION
, *PREG_KEY_HANDLE_CLOSE_INFORMATION
;
3530 ** Storage structures
3532 typedef enum _PARTITION_STYLE
{
3533 PARTITION_STYLE_MBR
,
3534 PARTITION_STYLE_GPT
,
3538 typedef struct _CREATE_DISK_MBR
{
3540 } CREATE_DISK_MBR
, *PCREATE_DISK_MBR
;
3542 typedef struct _CREATE_DISK_GPT
{
3544 ULONG MaxPartitionCount
;
3545 } CREATE_DISK_GPT
, *PCREATE_DISK_GPT
;
3547 typedef struct _CREATE_DISK
{
3548 PARTITION_STYLE PartitionStyle
;
3549 _ANONYMOUS_UNION
union {
3550 CREATE_DISK_MBR Mbr
;
3551 CREATE_DISK_GPT Gpt
;
3553 } CREATE_DISK
, *PCREATE_DISK
;
3555 typedef struct _DISK_SIGNATURE
{
3556 ULONG PartitionStyle
;
3557 _ANONYMOUS_UNION
union {
3566 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
3569 (FASTCALL
*PTIME_UPDATE_NOTIFY_ROUTINE
)(
3571 IN KPROCESSOR_MODE Mode
);
3573 #define DBG_STATUS_CONTROL_C 1
3574 #define DBG_STATUS_SYSRQ 2
3575 #define DBG_STATUS_BUGCHECK_FIRST 3
3576 #define DBG_STATUS_BUGCHECK_SECOND 4
3577 #define DBG_STATUS_FATAL 5
3578 #define DBG_STATUS_DEBUG_CONTROL 6
3579 #define DBG_STATUS_WORKER 7
3581 typedef struct _PHYSICAL_MEMORY_RANGE
{
3582 PHYSICAL_ADDRESS BaseAddress
;
3583 LARGE_INTEGER NumberOfBytes
;
3584 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
3587 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
3590 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
3591 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
3592 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
3593 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
3595 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
3596 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
3597 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
3598 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
3599 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
3601 #define HASH_STRING_ALGORITHM_DEFAULT 0
3602 #define HASH_STRING_ALGORITHM_X65599 1
3603 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
3606 (DDKAPI
*PTIMER_APC_ROUTINE
)(
3607 IN PVOID TimerContext
,
3608 IN ULONG TimerLowValue
,
3609 IN LONG TimerHighValue
);
3618 (DDKAPI
*WMI_NOTIFICATION_CALLBACK
)(
3624 ** Architecture specific structures
3626 #define PCR_MINOR_VERSION 1
3627 #define PCR_MAJOR_VERSION 1
3631 #define SIZE_OF_80387_REGISTERS 80
3632 #define CONTEXT_i386 0x10000
3633 #define CONTEXT_i486 0x10000
3634 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
3635 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
3636 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
3637 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
3638 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
3639 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
3640 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
3641 #define MAXIMUM_SUPPORTED_EXTENSION 512
3643 typedef struct _FLOATING_SAVE_AREA
{
3648 ULONG ErrorSelector
;
3651 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
3653 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
3655 typedef struct _CONTEXT
{
3663 FLOATING_SAVE_AREA FloatSave
;
3680 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
3684 // Used to contain PFNs and PFN counts
3686 typedef ULONG PFN_COUNT
;
3687 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
3688 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
3690 #define PASSIVE_LEVEL 0
3693 #define DISPATCH_LEVEL 2
3694 #define PROFILE_LEVEL 27
3695 #define CLOCK1_LEVEL 28
3696 #define CLOCK2_LEVEL 28
3697 #define IPI_LEVEL 29
3698 #define POWER_LEVEL 30
3699 #define HIGH_LEVEL 31
3701 typedef struct _KPCR_TIB
{
3702 PVOID ExceptionList
; /* 00 */
3703 PVOID StackBase
; /* 04 */
3704 PVOID StackLimit
; /* 08 */
3705 PVOID SubSystemTib
; /* 0C */
3706 _ANONYMOUS_UNION
union {
3707 PVOID FiberData
; /* 10 */
3708 ULONG Version
; /* 10 */
3710 PVOID ArbitraryUserPointer
; /* 14 */
3711 struct _KPCR_TIB
*Self
; /* 18 */
3712 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
3714 typedef struct _KPCR
{
3715 KPCR_TIB Tib
; /* 00 */
3716 struct _KPCR
*Self
; /* 1C */
3717 struct _KPRCB
*Prcb
; /* 20 */
3718 KIRQL Irql
; /* 24 */
3720 ULONG IrrActive
; /* 2C */
3722 PVOID KdVersionBlock
; /* 34 */
3723 PUSHORT IDT
; /* 38 */
3724 PUSHORT GDT
; /* 3C */
3725 struct _KTSS
*TSS
; /* 40 */
3726 USHORT MajorVersion
; /* 44 */
3727 USHORT MinorVersion
; /* 46 */
3728 KAFFINITY SetMember
; /* 48 */
3729 ULONG StallScaleFactor
; /* 4C */
3730 UCHAR SpareUnused
; /* 50 */
3731 UCHAR Number
; /* 51 */
3733 UCHAR SecondLevelCacheAssociativity
;
3735 ULONG KernelReserved
[14]; // For use by the kernel
3736 ULONG SecondLevelCacheSize
;
3737 ULONG HalReserved
[16]; // For use by Hal
3738 } KPCR
, *PKPCR
; /* 54 */
3740 #define KeGetPcr() PCR
3742 typedef struct _KFLOATING_SAVE
{
3746 ULONG ErrorSelector
;
3751 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
3755 KeGetCurrentProcessorNumber(VOID
)
3757 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
3772 #define KI_USER_SHARED_DATA 0xffdf0000
3774 #define PAGE_SIZE 0x1000
3775 #define PAGE_SHIFT 12L
3777 #define SharedUserData ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
3779 extern NTKERNELAPI PVOID MmHighestUserAddress
;
3780 extern NTKERNELAPI PVOID MmSystemRangeStart
;
3781 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
3783 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
3784 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
3785 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
3786 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
3787 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
3789 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
3790 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
3792 #elif defined(__x86_64__)
3794 #define CONTEXT_AMD64 0x100000
3795 #if !defined(RC_INVOKED)
3796 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
3797 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
3798 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
3799 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
3800 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
3802 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
3803 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
3805 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
3806 #define CONTEXT_SERVICE_ACTIVE 0x10000000
3807 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
3808 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
3811 typedef struct DECLSPEC_ALIGN(16) _M128A
{
3816 typedef struct _XMM_SAVE_AREA32
{
3823 USHORT ErrorSelector
;
3826 USHORT DataSelector
;
3830 M128A FloatRegisters
[8];
3831 M128A XmmRegisters
[16];
3832 UCHAR Reserved4
[96];
3833 } XMM_SAVE_AREA32
, *PXMM_SAVE_AREA32
;
3835 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
3885 /* Floating point */
3887 XMM_SAVE_AREA32 FltSave
;
3911 M128A VectorRegister
[26];
3912 ULONG64 VectorControl
;
3915 ULONG64 DebugControl
;
3916 ULONG64 LastBranchToRip
;
3917 ULONG64 LastBranchFromRip
;
3918 ULONG64 LastExceptionToRip
;
3919 ULONG64 LastExceptionFromRip
;
3923 // Used to contain PFNs and PFN counts
3925 typedef ULONG PFN_COUNT
;
3926 typedef ULONG64 PFN_NUMBER
, *PPFN_NUMBER
;
3927 typedef LONG64 SPFN_NUMBER
, *PSPFN_NUMBER
;
3929 #define PASSIVE_LEVEL 0
3932 #define DISPATCH_LEVEL 2
3933 #define CLOCK_LEVEL 13
3934 #define IPI_LEVEL 14
3935 #define POWER_LEVEL 14
3936 #define PROFILE_LEVEL 15
3937 #define HIGH_LEVEL 15
3939 #define PAGE_SIZE 0x1000
3940 #define PAGE_SHIFT 12L
3941 #define PTI_SHIFT 12L
3942 #define PDI_SHIFT 21L
3943 #define PPI_SHIFT 30L
3944 #define PXI_SHIFT 39L
3945 #define PTE_PER_PAGE 512
3946 #define PDE_PER_PAGE 512
3947 #define PPE_PER_PAGE 512
3948 #define PXE_PER_PAGE 512
3949 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
3950 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
3951 #define PPI_MASK (PPE_PER_PAGE - 1)
3952 #define PXI_MASK (PXE_PER_PAGE - 1)
3954 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
3955 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
3956 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
3957 #define PDE_BASE 0xFFFFF6FB40000000ULL
3958 #define PTE_BASE 0xFFFFF68000000000ULL
3959 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
3960 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
3961 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
3962 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
3964 extern NTKERNELAPI PVOID MmHighestUserAddress
;
3965 extern NTKERNELAPI PVOID MmSystemRangeStart
;
3966 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress
;
3968 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
3969 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
3970 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
3971 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
3972 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
3973 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
3975 #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
3976 #define SharedInterruptTime (&SharedUserData->InterruptTime)
3977 #define SharedSystemTime (&SharedUserData->SystemTime)
3978 #define SharedTickCount (&SharedUserData->TickCount)
3980 #define KeQueryInterruptTime() \
3981 (*(volatile ULONG64*)SharedInterruptTime)
3982 #define KeQuerySystemTime(CurrentCount) \
3983 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
3984 #define KeQueryTickCount(CurrentCount) \
3985 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
3987 typedef struct _KPCR
3989 __GNU_EXTENSION
union
3992 __GNU_EXTENSION
struct
3994 union _KGDTENTRY64
*GdtBase
;
3995 struct _KTSS64
*TssBase
;
3998 struct _KPRCB
*CurrentPrcb
;
3999 PKSPIN_LOCK_QUEUE LockArray
;
4003 union _KIDTENTRY64
*IdtBase
;
4006 UCHAR SecondLevelCacheAssociativity
;
4007 UCHAR ObsoleteNumber
;
4010 USHORT MajorVersion
;
4011 USHORT MinorVersion
;
4012 ULONG StallScaleFactor
;
4014 ULONG KernelReserved
[15];
4015 ULONG SecondLevelCacheSize
;
4016 ULONG HalReserved
[16];
4018 PVOID KdVersionBlock
;
4020 ULONG PcrAlign1
[24];
4023 typedef struct _KFLOATING_SAVE
{
4025 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
4037 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
4042 KeGetCurrentProcessorNumber(VOID
)
4044 return (ULONG
)__readgsword(0x184);
4047 #elif defined(__PowerPC__)
4050 // Used to contain PFNs and PFN counts
4052 typedef ULONG PFN_COUNT
;
4053 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
4054 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
4056 #define PASSIVE_LEVEL 0
4059 #define DISPATCH_LEVEL 2
4060 #define PROFILE_LEVEL 27
4061 #define CLOCK1_LEVEL 28
4062 #define CLOCK2_LEVEL 28
4063 #define IPI_LEVEL 29
4064 #define POWER_LEVEL 30
4065 #define HIGH_LEVEL 31
4067 typedef struct _KFLOATING_SAVE
{
4069 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
4071 typedef struct _KPCR_TIB
{
4072 PVOID ExceptionList
; /* 00 */
4073 PVOID StackBase
; /* 04 */
4074 PVOID StackLimit
; /* 08 */
4075 PVOID SubSystemTib
; /* 0C */
4076 _ANONYMOUS_UNION
union {
4077 PVOID FiberData
; /* 10 */
4078 ULONG Version
; /* 10 */
4080 PVOID ArbitraryUserPointer
; /* 14 */
4081 struct _KPCR_TIB
*Self
; /* 18 */
4082 } KPCR_TIB
, *PKPCR_TIB
; /* 1C */
4084 #define PCR_MINOR_VERSION 1
4085 #define PCR_MAJOR_VERSION 1
4087 typedef struct _KPCR
{
4088 KPCR_TIB Tib
; /* 00 */
4089 struct _KPCR
*Self
; /* 1C */
4090 struct _KPRCB
*Prcb
; /* 20 */
4091 KIRQL Irql
; /* 24 */
4093 ULONG IrrActive
; /* 2C */
4095 PVOID KdVersionBlock
; /* 34 */
4096 PUSHORT IDT
; /* 38 */
4097 PUSHORT GDT
; /* 3C */
4098 struct _KTSS
*TSS
; /* 40 */
4099 USHORT MajorVersion
; /* 44 */
4100 USHORT MinorVersion
; /* 46 */
4101 KAFFINITY SetMember
; /* 48 */
4102 ULONG StallScaleFactor
; /* 4C */
4103 UCHAR SpareUnused
; /* 50 */
4104 UCHAR Number
; /* 51 */
4105 } KPCR
, *PKPCR
; /* 54 */
4107 #define KeGetPcr() PCR
4112 KeGetCurrentProcessorNumber(VOID
)
4115 __asm__
__volatile__ (
4118 : "i" (FIELD_OFFSET(KPCR
, Number
))
4123 #elif defined(_MIPS_)
4125 #error MIPS Headers are totally incorrect
4128 // Used to contain PFNs and PFN counts
4130 typedef ULONG PFN_COUNT
;
4131 typedef ULONG PFN_NUMBER
, *PPFN_NUMBER
;
4132 typedef LONG SPFN_NUMBER
, *PSPFN_NUMBER
;
4134 #define PASSIVE_LEVEL 0
4136 #define DISPATCH_LEVEL 2
4137 #define PROFILE_LEVEL 27
4138 #define IPI_LEVEL 29
4139 #define HIGH_LEVEL 31
4141 typedef struct _KPCR
{
4142 struct _KPRCB
*Prcb
; /* 20 */
4143 KIRQL Irql
; /* 24 */
4148 #define KeGetPcr() PCR
4150 typedef struct _KFLOATING_SAVE
{
4151 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
4156 KeGetCurrentProcessorNumber(VOID
)
4161 #elif defined(_M_ARM)
4164 // NT-ARM is not documented, need DDK-ARM
4169 #error Unknown architecture
4172 #define MM_DONT_ZERO_ALLOCATION 0x00000001
4173 #define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002
4176 #define EFLAG_SIGN 0x8000
4177 #define EFLAG_ZERO 0x4000
4178 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
4180 #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
4181 #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
4182 #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
4184 typedef enum _INTERLOCKED_RESULT
{
4185 ResultNegative
= RESULT_NEGATIVE
,
4186 ResultZero
= RESULT_ZERO
,
4187 ResultPositive
= RESULT_POSITIVE
4188 } INTERLOCKED_RESULT
;
4191 (NTAPI
*PciPin2Line
)(
4192 IN
struct _BUS_HANDLER
*BusHandler
,
4193 IN
struct _BUS_HANDLER
*RootHandler
,
4194 IN PCI_SLOT_NUMBER SlotNumber
,
4195 IN PPCI_COMMON_CONFIG PciData
4199 (NTAPI
*PciLine2Pin
)(
4200 IN
struct _BUS_HANDLER
*BusHandler
,
4201 IN
struct _BUS_HANDLER
*RootHandler
,
4202 IN PCI_SLOT_NUMBER SlotNumber
,
4203 IN PPCI_COMMON_CONFIG PciNewData
,
4204 IN PPCI_COMMON_CONFIG PciOldData
4208 (NTAPI
*PciReadWriteConfig
)(
4209 IN
struct _BUS_HANDLER
*BusHandler
,
4210 IN PCI_SLOT_NUMBER Slot
,
4216 #define PCI_DATA_TAG ' ICP'
4217 #define PCI_DATA_VERSION 1
4219 typedef struct _PCIBUSDATA
4223 PciReadWriteConfig ReadConfig
;
4224 PciReadWriteConfig WriteConfig
;
4225 PciPin2Line Pin2Line
;
4226 PciLine2Pin Line2Pin
;
4227 PCI_SLOT_NUMBER ParentSlot
;
4229 } PCIBUSDATA
, *PPCIBUSDATA
;
4232 /** SPINLOCK FUNCTIONS ********************************************************/
4237 KeTryToAcquireSpinLockAtDpcLevel(
4238 IN OUT PKSPIN_LOCK SpinLock
4245 IN PKSPIN_LOCK SpinLock
4250 #if defined(WIN9X_COMPAT_SPINLOCK)
4255 KeInitializeSpinLock(
4256 IN PKSPIN_LOCK SpinLock
4263 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
4265 /* Clear the lock */
4275 IN PKSPIN_LOCK SpinLock
);
4281 IN PKSPIN_LOCK SpinLock
,
4287 KefAcquireSpinLockAtDpcLevel(
4288 IN PKSPIN_LOCK SpinLock
);
4293 KefReleaseSpinLockFromDpcLevel(
4294 IN PKSPIN_LOCK SpinLock
);
4296 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
4297 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
4298 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
4299 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
4301 #define KeGetDcacheFillSize() 1L
4303 #elif defined(_M_ARM) // !defined (_X86_)
4307 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
4309 /* Clear the lock */
4317 IN PKSPIN_LOCK SpinLock
);
4323 IN PKSPIN_LOCK SpinLock
,
4330 KefAcquireSpinLockAtDpcLevel(
4331 IN PKSPIN_LOCK SpinLock
);
4336 KefReleaseSpinLockFromDpcLevel(
4337 IN PKSPIN_LOCK SpinLock
);
4340 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
4341 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
4342 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
4343 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
4348 KeInitializeSpinLock(
4349 IN PKSPIN_LOCK SpinLock
);
4356 KeInitializeSpinLock(
4357 PKSPIN_LOCK SpinLock
)
4365 IN PKSPIN_LOCK SpinLock
,
4370 KeAcquireSpinLockAtDpcLevel(
4371 IN PKSPIN_LOCK SpinLock
);
4375 KeReleaseSpinLockFromDpcLevel(
4376 IN PKSPIN_LOCK SpinLock
);
4380 KeAcquireSpinLockRaiseToDpc(
4381 IN PKSPIN_LOCK SpinLock
);
4383 #define KeAcquireSpinLock(SpinLock, OldIrql) \
4384 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
4386 #endif // !defined (_X86_)
4389 ** Utillity functions
4392 #define ARGUMENT_PRESENT(ArgumentPointer) \
4393 ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL)
4400 #define BYTE_OFFSET(Va) \
4401 ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
4408 #define BYTES_TO_PAGES(Size) \
4409 ((ULONG) ((ULONG_PTR) (Size) >> PAGE_SHIFT) + (((ULONG) (Size) & (PAGE_SIZE - 1)) != 0))
4416 #define PAGE_ALIGN(Va) \
4417 ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
4422 * IN ULONG_PTR Size)
4424 #define ROUND_TO_PAGES(Size) \
4425 ((ULONG_PTR) (((ULONG_PTR) Size + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)))
4429 #if defined(_X86_) || defined(_AMD64_)
4432 // x86 and x64 performs a 0x2C interrupt
4434 #define DbgRaiseAssertionFailure __int2c
4436 #elif defined(_ARM_)
4443 #error Unsupported Architecture
4448 #define ASSERT(exp) \
4450 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
4452 #define ASSERTMSG(msg, exp) \
4454 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, msg ), FALSE : TRUE)
4456 #define RTL_SOFT_ASSERT(exp) \
4458 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
4460 #define RTL_SOFT_ASSERTMSG(msg, exp) \
4462 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
4464 #define RTL_VERIFY(exp) ASSERT(exp)
4465 #define RTL_VERIFYMSG(msg, exp) ASSERT(msg, exp)
4467 #define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp)
4468 #define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp)
4470 #if defined(_MSC_VER)
4472 #define NT_ASSERT(exp) \
4474 (__annotation(L"Debug", L"AssertFail", L#exp), \
4475 DbgRaiseAssertionFailure(), FALSE) : TRUE)
4477 #define NT_ASSERTMSG(msg, exp) \
4479 (__annotation(L"Debug", L"AssertFail", L##msg), \
4480 DbgRaiseAssertionFailure(), FALSE) : TRUE)
4482 #define NT_ASSERTMSGW(msg, exp) \
4484 (__annotation(L"Debug", L"AssertFail", msg), \
4485 DbgRaiseAssertionFailure(), FALSE) : TRUE)
4490 // GCC doesn't support __annotation (nor PDB)
4492 #define NT_ASSERT(exp) \
4493 (VOID)((!(exp)) ? (DbgRaiseAssertionFailure(), FALSE) : TRUE)
4495 #define NT_ASSERTMSG NT_ASSERT
4496 #define NT_ASSERTMSGW NT_ASSERT
4502 #define ASSERT(exp) ((VOID) 0)
4503 #define ASSERTMSG(msg, exp) ((VOID) 0)
4505 #define RTL_SOFT_ASSERT(exp) ((VOID) 0)
4506 #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
4508 #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
4509 #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
4511 #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
4512 #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
4514 #define NT_ASSERT(exp) ((VOID)0)
4515 #define NT_ASSERTMSG(exp) ((VOID)0)
4516 #define NT_ASSERTMSGW(exp) ((VOID)0)
4520 /* HACK HACK HACK - GCC (or perhaps LD) is messing this up */
4521 #if defined(_NTSYSTEM_) || defined(__GNUC__)
4522 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
4523 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
4525 #define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag)
4526 #define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag)
4527 #endif /* _NT_SYSTEM */
4529 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG
;
4530 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG
;
4533 ** Driver support routines
4536 /** Runtime library routines **/
4538 static __inline VOID
4540 IN PLIST_ENTRY ListHead
)
4542 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
4545 static __inline VOID
4547 IN PLIST_ENTRY ListHead
,
4548 IN PLIST_ENTRY Entry
)
4550 PLIST_ENTRY OldFlink
;
4551 OldFlink
= ListHead
->Flink
;
4552 Entry
->Flink
= OldFlink
;
4553 Entry
->Blink
= ListHead
;
4554 OldFlink
->Blink
= Entry
;
4555 ListHead
->Flink
= Entry
;
4558 static __inline VOID
4560 IN PLIST_ENTRY ListHead
,
4561 IN PLIST_ENTRY Entry
)
4563 PLIST_ENTRY OldBlink
;
4564 OldBlink
= ListHead
->Blink
;
4565 Entry
->Flink
= ListHead
;
4566 Entry
->Blink
= OldBlink
;
4567 OldBlink
->Flink
= Entry
;
4568 ListHead
->Blink
= Entry
;
4574 * IN PLIST_ENTRY ListHead)
4576 #define IsListEmpty(_ListHead) \
4577 ((_ListHead)->Flink == (_ListHead))
4580 * PSINGLE_LIST_ENTRY
4582 * IN PSINGLE_LIST_ENTRY ListHead)
4584 #define PopEntryList(ListHead) \
4587 PSINGLE_LIST_ENTRY _FirstEntry; \
4588 _FirstEntry = (ListHead)->Next; \
4589 if (_FirstEntry != NULL) \
4590 (ListHead)->Next = _FirstEntry->Next; \
4596 * IN PSINGLE_LIST_ENTRY ListHead,
4597 * IN PSINGLE_LIST_ENTRY Entry)
4599 #define PushEntryList(_ListHead, _Entry) \
4600 (_Entry)->Next = (_ListHead)->Next; \
4601 (_ListHead)->Next = (_Entry); \
4603 static __inline BOOLEAN
4605 IN PLIST_ENTRY Entry
)
4607 PLIST_ENTRY OldFlink
;
4608 PLIST_ENTRY OldBlink
;
4610 OldFlink
= Entry
->Flink
;
4611 OldBlink
= Entry
->Blink
;
4612 OldFlink
->Blink
= OldBlink
;
4613 OldBlink
->Flink
= OldFlink
;
4614 return (BOOLEAN
)(OldFlink
== OldBlink
);
4617 static __inline PLIST_ENTRY
4619 IN PLIST_ENTRY ListHead
)
4624 Entry
= ListHead
->Flink
;
4625 Flink
= Entry
->Flink
;
4626 ListHead
->Flink
= Flink
;
4627 Flink
->Blink
= ListHead
;
4631 static __inline PLIST_ENTRY
4633 IN PLIST_ENTRY ListHead
)
4638 Entry
= ListHead
->Blink
;
4639 Blink
= Entry
->Blink
;
4640 ListHead
->Blink
= Blink
;
4641 Blink
->Flink
= ListHead
;
4650 IN ULONG Base OPTIONAL
,
4651 IN OUT PULONG Value
);
4659 BOOLEAN CaseInSensitive
);
4661 #if !defined(MIDL_PASS)
4666 RtlConvertLongToLuid(
4672 Temp
.QuadPart
= Val
;
4673 Luid
.LowPart
= Temp
.u
.LowPart
;
4674 Luid
.HighPart
= Temp
.u
.HighPart
;
4682 RtlConvertUlongToLuid(
4699 IN VOID UNALIGNED
*Destination
,
4700 IN CONST VOID UNALIGNED
*Source
,
4707 IN OUT PSTRING DestinationString
,
4708 IN PSTRING SourceString OPTIONAL
);
4716 IN BOOLEAN CaseInSensitive
);
4718 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
4719 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
4720 *CallersAddress = (PVOID)_ReturnAddress(); \
4721 *CallersCaller = NULL;
4726 RtlGetCallersAddress(
4727 OUT PVOID
*CallersAddress
,
4728 OUT PVOID
*CallersCaller
);
4735 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
4741 IN OUT PACCESS_MASK AccessMask
,
4742 IN PGENERIC_MAPPING GenericMapping
);
4747 RtlPrefixUnicodeString(
4748 IN PCUNICODE_STRING String1
,
4749 IN PCUNICODE_STRING String2
,
4750 IN BOOLEAN CaseInSensitive
);
4755 RtlUpcaseUnicodeString(
4756 IN OUT PUNICODE_STRING DestinationString OPTIONAL
,
4757 IN PCUNICODE_STRING SourceString
,
4758 IN BOOLEAN AllocateDestinationString
);
4770 IN OUT PSTRING DestinationString
,
4771 IN PSTRING SourceString
);
4776 RtlVerifyVersionInfo(
4777 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
4779 IN ULONGLONG ConditionMask
);
4784 RtlVolumeDeviceToDosName(
4785 IN PVOID VolumeDeviceObject
,
4786 OUT PUNICODE_STRING DosName
);
4799 KeAreAllApcsDisabled(
4803 /* Guarded Mutex routines */
4808 KeAcquireGuardedMutex(
4809 IN OUT PKGUARDED_MUTEX GuardedMutex
4815 KeAcquireGuardedMutexUnsafe(
4816 IN OUT PKGUARDED_MUTEX GuardedMutex
4822 KeEnterGuardedRegion(
4829 KeLeaveGuardedRegion(
4836 KeInitializeGuardedMutex(
4837 OUT PKGUARDED_MUTEX GuardedMutex
4843 KeReleaseGuardedMutexUnsafe(
4844 IN OUT PKGUARDED_MUTEX GuardedMutex
4850 KeReleaseGuardedMutex(
4851 IN OUT PKGUARDED_MUTEX GuardedMutex
4857 KeTryToAcquireGuardedMutex(
4858 IN OUT PKGUARDED_MUTEX GuardedMutex
4862 #define ExInitializeFastMutex(_FastMutex) \
4864 (_FastMutex)->Count = FM_LOCK_BIT; \
4865 (_FastMutex)->Owner = NULL; \
4866 (_FastMutex)->Contention = 0; \
4867 KeInitializeEvent(&(_FastMutex)->Gate, SynchronizationEvent, FALSE); \
4878 /******************************************************************************
4880 ******************************************************************************/
4882 typedef struct _ZONE_SEGMENT_HEADER
{
4883 SINGLE_LIST_ENTRY SegmentList
;
4885 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
4887 typedef struct _ZONE_HEADER
{
4888 SINGLE_LIST_ENTRY FreeList
;
4889 SINGLE_LIST_ENTRY SegmentList
;
4891 ULONG TotalSegmentSize
;
4892 } ZONE_HEADER
, *PZONE_HEADER
;
4894 #define PROTECTED_POOL 0x80000000
4896 /******************************************************************************
4897 * Executive Functions *
4898 ******************************************************************************/
4904 IN PZONE_HEADER Zone
,
4906 IN ULONG SegmentSize
);
4908 static __inline PVOID
4910 IN PZONE_HEADER Zone
)
4912 if (Zone
->FreeList
.Next
)
4913 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
4914 return (PVOID
) Zone
->FreeList
.Next
;
4917 static __inline PVOID
4919 IN PZONE_HEADER Zone
,
4922 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
4923 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
4924 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
4931 IN PZONE_HEADER Zone
,
4933 IN PVOID InitialSegment
,
4934 IN ULONG InitialSegmentSize
);
4938 * ExInterlockedAllocateFromZone(
4939 * IN PZONE_HEADER Zone,
4940 * IN PKSPIN_LOCK Lock)
4942 #define ExInterlockedAllocateFromZone(Zone, Lock) \
4943 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
4948 ExInterlockedExtendZone(
4949 IN PZONE_HEADER Zone
,
4951 IN ULONG SegmentSize
,
4952 IN PKSPIN_LOCK Lock
);
4955 * ExInterlockedFreeToZone(
4956 * IN PZONE_HEADER Zone,
4958 * IN PKSPIN_LOCK Lock);
4960 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
4961 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
4965 * InitializeSListHead(
4966 * IN PSLIST_HEADER SListHead)
4968 #define InitializeSListHead(_SListHead) \
4969 (_SListHead)->Alignment = 0
4971 #define ExInitializeSListHead InitializeSListHead
4976 * IN PZONE_HEADER Zone)
4978 #define ExIsFullZone(Zone) \
4979 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
4982 * ExIsObjectInFirstZoneSegment(
4983 * IN PZONE_HEADER Zone,
4986 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
4987 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
4988 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
4989 (Zone)->TotalSegmentSize)) )
4995 ExRaiseAccessViolation(
5002 ExRaiseDatatypeMisalignment(
5011 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
5012 #define ExAcquireResourceShared ExAcquireResourceSharedLite
5013 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
5014 #define ExDeleteResource ExDeleteResourceLite
5015 #define ExInitializeResource ExInitializeResourceLite
5016 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
5017 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
5018 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
5019 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
5024 #define PAGED_CODE() { \
5025 if (KeGetCurrentIrql() > APC_LEVEL) { \
5026 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
5033 #define PAGED_CODE()
5041 IN CONST VOID
*Address
,
5043 IN ULONG Alignment
);
5051 IN ULONG Alignment
);
5055 /** Configuration manager routines **/
5061 IN PEX_CALLBACK_FUNCTION Function
,
5063 IN OUT PLARGE_INTEGER Cookie
);
5068 CmUnRegisterCallback(
5069 IN LARGE_INTEGER Cookie
);
5073 /** Filesystem runtime library routines **/
5078 FsRtlIsTotalDeviceFailure(
5079 IN NTSTATUS Status
);
5083 /** Hardware abstraction layer routines **/
5089 IN ULONG Frequency
);
5095 IN PDEVICE_OBJECT DeviceObject
,
5096 IN ULONG SectorSize
,
5097 IN ULONG MBRTypeIdentifier
,
5103 PADAPTER_OBJECT AdapterObject
5107 /** Io access routines **/
5109 #if !defined(_M_AMD64)
5113 READ_PORT_BUFFER_UCHAR(
5121 READ_PORT_BUFFER_ULONG(
5129 READ_PORT_BUFFER_USHORT(
5155 READ_REGISTER_BUFFER_UCHAR(
5163 READ_REGISTER_BUFFER_ULONG(
5171 READ_REGISTER_BUFFER_USHORT(
5172 IN PUSHORT Register
,
5179 READ_REGISTER_UCHAR(
5180 IN PUCHAR Register
);
5185 READ_REGISTER_ULONG(
5186 IN PULONG Register
);
5191 READ_REGISTER_USHORT(
5192 IN PUSHORT Register
);
5197 WRITE_PORT_BUFFER_UCHAR(
5205 WRITE_PORT_BUFFER_ULONG(
5213 WRITE_PORT_BUFFER_USHORT(
5242 WRITE_REGISTER_BUFFER_UCHAR(
5250 WRITE_REGISTER_BUFFER_ULONG(
5258 WRITE_REGISTER_BUFFER_USHORT(
5259 IN PUSHORT Register
,
5266 WRITE_REGISTER_UCHAR(
5273 WRITE_REGISTER_ULONG(
5280 WRITE_REGISTER_USHORT(
5281 IN PUSHORT Register
,
5288 READ_PORT_BUFFER_UCHAR(
5293 __inbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
5298 READ_PORT_BUFFER_ULONG(
5303 __indwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
5308 READ_PORT_BUFFER_USHORT(
5313 __inwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
5321 return __inbyte((USHORT
)(ULONG_PTR
)Port
);
5329 return __indword((USHORT
)(ULONG_PTR
)Port
);
5337 return __inword((USHORT
)(ULONG_PTR
)Port
);
5342 READ_REGISTER_BUFFER_UCHAR(
5347 __movsb(Register
, Buffer
, Count
);
5352 READ_REGISTER_BUFFER_ULONG(
5357 __movsd(Register
, Buffer
, Count
);
5362 READ_REGISTER_BUFFER_USHORT(
5363 IN PUSHORT Register
,
5367 __movsw(Register
, Buffer
, Count
);
5372 READ_REGISTER_UCHAR(
5380 READ_REGISTER_ULONG(
5388 READ_REGISTER_USHORT(
5389 IN PUSHORT Register
)
5396 WRITE_PORT_BUFFER_UCHAR(
5401 __outbytestring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
5406 WRITE_PORT_BUFFER_ULONG(
5411 __outdwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
5416 WRITE_PORT_BUFFER_USHORT(
5421 __outwordstring((USHORT
)(ULONG_PTR
)Port
, Buffer
, Count
);
5430 __outbyte((USHORT
)(ULONG_PTR
)Port
, Value
);
5439 __outdword((USHORT
)(ULONG_PTR
)Port
, Value
);
5448 __outword((USHORT
)(ULONG_PTR
)Port
, Value
);
5453 WRITE_REGISTER_BUFFER_UCHAR(
5459 __movsb(Register
, Buffer
, Count
);
5460 InterlockedOr(&Synch
, 1);
5465 WRITE_REGISTER_BUFFER_ULONG(
5471 __movsd(Register
, Buffer
, Count
);
5472 InterlockedOr(&Synch
, 1);
5477 WRITE_REGISTER_BUFFER_USHORT(
5478 IN PUSHORT Register
,
5483 __movsw(Register
, Buffer
, Count
);
5484 InterlockedOr(&Synch
, 1);
5489 WRITE_REGISTER_UCHAR(
5495 InterlockedOr(&Synch
, 1);
5500 WRITE_REGISTER_ULONG(
5506 InterlockedOr(&Synch
, 1);
5511 WRITE_REGISTER_USHORT(
5512 IN PUSHORT Register
,
5517 InterlockedOr(&Sync
, 1);
5522 /** I/O manager routines **/
5527 IoAcquireCancelSpinLock(
5533 IoAcquireRemoveLockEx(
5534 IN PIO_REMOVE_LOCK RemoveLock
,
5535 IN OPTIONAL PVOID Tag OPTIONAL
,
5538 IN ULONG RemlockSize
);
5542 * IoAcquireRemoveLock(
5543 * IN PIO_REMOVE_LOCK RemoveLock,
5544 * IN OPTIONAL PVOID Tag)
5546 #define IoAcquireRemoveLock(_RemoveLock, \
5548 IoAcquireRemoveLockEx(_RemoveLock, _Tag, __FILE__, __LINE__, sizeof(IO_REMOVE_LOCK))
5552 * IoAdjustPagingPathCount(
5554 * IN BOOLEAN Increment)
5556 #define IoAdjustPagingPathCount(_Count, \
5561 InterlockedIncrement(_Count); \
5565 InterlockedDecrement(_Count); \
5569 #ifndef DMA_MACROS_DEFINED
5573 IoAllocateAdapterChannel(
5574 IN PADAPTER_OBJECT AdapterObject
,
5575 IN PDEVICE_OBJECT DeviceObject
,
5576 IN ULONG NumberOfMapRegisters
,
5577 IN PDRIVER_CONTROL ExecutionRoutine
,
5584 IoAllocateController(
5585 IN PCONTROLLER_OBJECT ControllerObject
,
5586 IN PDEVICE_OBJECT DeviceObject
,
5587 IN PDRIVER_CONTROL ExecutionRoutine
,
5593 IoAllocateDriverObjectExtension(
5594 IN PDRIVER_OBJECT DriverObject
,
5595 IN PVOID ClientIdentificationAddress
,
5596 IN ULONG DriverObjectExtensionSize
,
5597 OUT PVOID
*DriverObjectExtension
);
5602 IoAllocateErrorLogEntry(
5604 IN UCHAR EntrySize
);
5611 IN BOOLEAN ChargeQuota
);
5617 IN PVOID VirtualAddress
,
5619 IN BOOLEAN SecondaryBuffer
,
5620 IN BOOLEAN ChargeQuota
,
5621 IN OUT PIRP Irp OPTIONAL
);
5627 IN PDEVICE_OBJECT DeviceObject
);
5630 * VOID IoAssignArcName(
5631 * IN PUNICODE_STRING ArcName,
5632 * IN PUNICODE_STRING DeviceName);
5634 #define IoAssignArcName(_ArcName, _DeviceName) ( \
5635 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
5641 IN PDEVICE_OBJECT SourceDevice
,
5642 IN PUNICODE_STRING TargetDevice
,
5643 OUT PDEVICE_OBJECT
*AttachedDevice
);
5648 IoAttachDeviceToDeviceStack(
5649 IN PDEVICE_OBJECT SourceDevice
,
5650 IN PDEVICE_OBJECT TargetDevice
);
5655 IoBuildAsynchronousFsdRequest(
5656 IN ULONG MajorFunction
,
5657 IN PDEVICE_OBJECT DeviceObject
,
5658 IN OUT PVOID Buffer OPTIONAL
,
5659 IN ULONG Length OPTIONAL
,
5660 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
5661 IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL
);
5666 IoBuildDeviceIoControlRequest(
5667 IN ULONG IoControlCode
,
5668 IN PDEVICE_OBJECT DeviceObject
,
5669 IN PVOID InputBuffer OPTIONAL
,
5670 IN ULONG InputBufferLength
,
5671 OUT PVOID OutputBuffer OPTIONAL
,
5672 IN ULONG OutputBufferLength
,
5673 IN BOOLEAN InternalDeviceIoControl
,
5675 OUT PIO_STATUS_BLOCK IoStatusBlock
);
5682 IN OUT PMDL TargetMdl
,
5683 IN PVOID VirtualAddress
,
5689 IoBuildSynchronousFsdRequest(
5690 IN ULONG MajorFunction
,
5691 IN PDEVICE_OBJECT DeviceObject
,
5692 IN OUT PVOID Buffer OPTIONAL
,
5693 IN ULONG Length OPTIONAL
,
5694 IN PLARGE_INTEGER StartingOffset OPTIONAL
,
5696 OUT PIO_STATUS_BLOCK IoStatusBlock
);
5702 IN PDEVICE_OBJECT DeviceObject
,
5708 * IN PDEVICE_OBJECT DeviceObject,
5711 #define IoCallDriver IofCallDriver
5717 IN PDEVICE_OBJECT DeviceObject
,
5718 IN PFILE_OBJECT FileObject
);
5730 IN ACCESS_MASK DesiredAccess
,
5731 IN ULONG DesiredShareAccess
,
5732 IN OUT PFILE_OBJECT FileObject
,
5733 IN OUT PSHARE_ACCESS ShareAccess
,
5741 IN CCHAR PriorityBoost
);
5745 * IoCompleteRequest(
5747 * IN CCHAR PriorityBoost)
5749 #define IoCompleteRequest IofCompleteRequest
5755 OUT PKINTERRUPT
*InterruptObject
,
5756 IN PKSERVICE_ROUTINE ServiceRoutine
,
5757 IN PVOID ServiceContext
,
5758 IN PKSPIN_LOCK SpinLock OPTIONAL
,
5761 IN KIRQL SynchronizeIrql
,
5762 IN KINTERRUPT_MODE InterruptMode
,
5763 IN BOOLEAN ShareVector
,
5764 IN KAFFINITY ProcessorEnableMask
,
5765 IN BOOLEAN FloatingSave
);
5768 * PIO_STACK_LOCATION
5769 * IoGetCurrentIrpStackLocation(
5772 #define IoGetCurrentIrpStackLocation(_Irp) \
5773 ((_Irp)->Tail.Overlay.CurrentStackLocation)
5776 * PIO_STACK_LOCATION
5777 * IoGetNextIrpStackLocation(
5780 #define IoGetNextIrpStackLocation(_Irp) \
5781 ((_Irp)->Tail.Overlay.CurrentStackLocation - 1)
5785 * IoCopyCurrentIrpStackLocationToNext(
5788 #define IoCopyCurrentIrpStackLocationToNext(_Irp) \
5790 PIO_STACK_LOCATION _IrpSp; \
5791 PIO_STACK_LOCATION _NextIrpSp; \
5792 _IrpSp = IoGetCurrentIrpStackLocation(_Irp); \
5793 _NextIrpSp = IoGetNextIrpStackLocation(_Irp); \
5794 RtlCopyMemory(_NextIrpSp, _IrpSp, \
5795 FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); \
5796 _NextIrpSp->Control = 0; \
5809 IN PDRIVER_OBJECT DriverObject
,
5810 IN ULONG DeviceExtensionSize
,
5811 IN PUNICODE_STRING DeviceName OPTIONAL
,
5812 IN DEVICE_TYPE DeviceType
,
5813 IN ULONG DeviceCharacteristics
,
5814 IN BOOLEAN Exclusive
,
5815 OUT PDEVICE_OBJECT
*DeviceObject
);
5821 IN PDEVICE_OBJECT DeviceObject
,
5822 IN PCREATE_DISK Disk
);
5828 OUT PHANDLE FileHandle
,
5829 IN ACCESS_MASK DesiredAccess
,
5830 IN POBJECT_ATTRIBUTES ObjectAttributes
,
5831 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5832 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
5833 IN ULONG FileAttributes
,
5834 IN ULONG ShareAccess
,
5835 IN ULONG Disposition
,
5836 IN ULONG CreateOptions
,
5837 IN PVOID EaBuffer OPTIONAL
,
5839 IN CREATE_FILE_TYPE CreateFileType
,
5840 IN PVOID ExtraCreateParameters OPTIONAL
,
5846 IoCreateNotificationEvent(
5847 IN PUNICODE_STRING EventName
,
5848 OUT PHANDLE EventHandle
);
5853 IoCreateSymbolicLink(
5854 IN PUNICODE_STRING SymbolicLinkName
,
5855 IN PUNICODE_STRING DeviceName
);
5860 IoCreateSynchronizationEvent(
5861 IN PUNICODE_STRING EventName
,
5862 OUT PHANDLE EventHandle
);
5867 IoCreateUnprotectedSymbolicLink(
5868 IN PUNICODE_STRING SymbolicLinkName
,
5869 IN PUNICODE_STRING DeviceName
);
5876 IN PIO_CSQ_INSERT_IRP CsqInsertIrp
,
5877 IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp
,
5878 IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
,
5879 IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
,
5880 IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock
,
5881 IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
);
5889 IN PIO_CSQ_IRP_CONTEXT Context
);
5896 IN PIO_CSQ_IRP_CONTEXT Context
);
5903 IN PVOID PeekContext
);
5909 IN PCONTROLLER_OBJECT ControllerObject
);
5915 IN PDEVICE_OBJECT DeviceObject
);
5920 IoDeleteSymbolicLink(
5921 IN PUNICODE_STRING SymbolicLinkName
);
5925 * IoDeassignArcName(
5926 * IN PUNICODE_STRING ArcName)
5928 #define IoDeassignArcName IoDeleteSymbolicLink
5934 IN OUT PDEVICE_OBJECT TargetDevice
);
5939 IoDisconnectInterrupt(
5940 IN PKINTERRUPT InterruptObject
);
5945 IoForwardIrpSynchronously(
5946 IN PDEVICE_OBJECT DeviceObject
,
5949 #define IoForwardAndCatchIrp IoForwardIrpSynchronously
5955 IN PCONTROLLER_OBJECT ControllerObject
);
5960 IoFreeErrorLogEntry(
5979 IN PIO_WORKITEM pIOWorkItem
);
5984 IoGetAttachedDevice(
5985 IN PDEVICE_OBJECT DeviceObject
);
5990 IoGetAttachedDeviceReference(
5991 IN PDEVICE_OBJECT DeviceObject
);
5996 IoGetBootDiskInformation(
5997 IN OUT PBOOTDISK_INFORMATION BootDiskInformation
,
6001 PCONFIGURATION_INFORMATION
6003 IoGetConfigurationInformation(
6009 IoGetCurrentProcess(
6015 IoGetDeviceInterfaceAlias(
6016 IN PUNICODE_STRING SymbolicLinkName
,
6017 IN CONST GUID
*AliasInterfaceClassGuid
,
6018 OUT PUNICODE_STRING AliasSymbolicLinkName
);
6020 #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
6025 IoGetDeviceInterfaces(
6026 IN CONST GUID
*InterfaceClassGuid
,
6027 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
6029 OUT PWSTR
*SymbolicLinkList
);
6034 IoGetDeviceObjectPointer(
6035 IN PUNICODE_STRING ObjectName
,
6036 IN ACCESS_MASK DesiredAccess
,
6037 OUT PFILE_OBJECT
*FileObject
,
6038 OUT PDEVICE_OBJECT
*DeviceObject
);
6043 IoGetDeviceProperty(
6044 IN PDEVICE_OBJECT DeviceObject
,
6045 IN DEVICE_REGISTRY_PROPERTY DeviceProperty
,
6046 IN ULONG BufferLength
,
6047 OUT PVOID PropertyBuffer
,
6048 OUT PULONG ResultLength
);
6053 IoGetDeviceToVerify(
6054 IN PETHREAD Thread
);
6060 IN PDEVICE_OBJECT PhysicalDeviceObject
,
6061 IN PDEVICE_DESCRIPTION DeviceDescription
,
6062 IN OUT PULONG NumberOfMapRegisters
);
6067 IoGetDriverObjectExtension(
6068 IN PDRIVER_OBJECT DriverObject
,
6069 IN PVOID ClientIdentificationAddress
);
6074 IoGetFileObjectGenericMapping(
6079 * IoGetFunctionCodeFromCtlCode(
6080 * IN ULONG ControlCode)
6082 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \
6083 (((_ControlCode) >> 2) & 0x00000FFF)
6094 IoGetRelatedDeviceObject(
6095 IN PFILE_OBJECT FileObject
);
6101 OUT PULONG_PTR LowLimit
,
6102 OUT PULONG_PTR HighLimit
);
6106 IoGetRemainingStackSize(
6110 ULONG_PTR End
, Begin
;
6113 IoGetStackLimits(&Begin
, &End
);
6114 Result
= (ULONG_PTR
)(&End
) - Begin
;
6123 IN PKDEFERRED_ROUTINE DeferredRoutine
,
6124 IN PVOID DeferredContext
);
6128 * IoInitializeDpcRequest(
6129 * IN PDEVICE_OBJECT DeviceObject,
6130 * IN PIO_DPC_ROUTINE DpcRoutine)
6132 #define IoInitializeDpcRequest(_DeviceObject, \
6134 KeInitializeDpc(&(_DeviceObject)->Dpc, \
6135 (PKDEFERRED_ROUTINE) (_DpcRoutine), \
6143 IN USHORT PacketSize
,
6144 IN CCHAR StackSize
);
6149 IoInitializeRemoveLockEx(
6150 IN PIO_REMOVE_LOCK Lock
,
6151 IN ULONG AllocateTag
,
6152 IN ULONG MaxLockedMinutes
,
6153 IN ULONG HighWatermark
,
6154 IN ULONG RemlockSize
);
6157 * IoInitializeRemoveLock(
6158 * IN PIO_REMOVE_LOCK Lock,
6159 * IN ULONG AllocateTag,
6160 * IN ULONG MaxLockedMinutes,
6161 * IN ULONG HighWatermark)
6163 #define IoInitializeRemoveLock( \
6164 Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
6165 IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
6166 HighWatermark, sizeof(IO_REMOVE_LOCK))
6172 IN PDEVICE_OBJECT DeviceObject
,
6173 IN PIO_TIMER_ROUTINE TimerRoutine
,
6179 IoInvalidateDeviceRelations(
6180 IN PDEVICE_OBJECT DeviceObject
,
6181 IN DEVICE_RELATION_TYPE Type
);
6186 IoInvalidateDeviceState(
6187 IN PDEVICE_OBJECT PhysicalDeviceObject
);
6193 IN PIRP Irp OPTIONAL
);
6197 * IoIsErrorUserInduced(
6198 * IN NTSTATUS Status);
6200 #define IoIsErrorUserInduced(Status) \
6201 ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
6202 ((Status) == STATUS_IO_TIMEOUT) || \
6203 ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
6204 ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
6205 ((Status) == STATUS_VERIFY_REQUIRED) || \
6206 ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
6207 ((Status) == STATUS_WRONG_VOLUME)))
6212 IoIsWdmVersionAvailable(
6213 IN UCHAR MajorVersion
,
6214 IN UCHAR MinorVersion
);
6219 IoMakeAssociatedIrp(
6221 IN CCHAR StackSize
);
6228 #define IoMarkIrpPending(_Irp) \
6229 (IoGetCurrentIrpStackLocation(_Irp)->Control |= SL_PENDING_RETURNED)
6234 IoOpenDeviceInterfaceRegistryKey(
6235 IN PUNICODE_STRING SymbolicLinkName
,
6236 IN ACCESS_MASK DesiredAccess
,
6237 OUT PHANDLE DeviceInterfaceKey
);
6239 #define PLUGPLAY_REGKEY_DEVICE 1
6240 #define PLUGPLAY_REGKEY_DRIVER 2
6241 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
6246 IoOpenDeviceRegistryKey(
6247 IN PDEVICE_OBJECT DeviceObject
,
6248 IN ULONG DevInstKeyType
,
6249 IN ACCESS_MASK DesiredAccess
,
6250 OUT PHANDLE DevInstRegKey
);
6255 IoQueryDeviceDescription(
6256 IN PINTERFACE_TYPE BusType OPTIONAL
,
6257 IN PULONG BusNumber OPTIONAL
,
6258 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
6259 IN PULONG ControllerNumber OPTIONAL
,
6260 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
6261 IN PULONG PeripheralNumber OPTIONAL
,
6262 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
6269 IN PIO_WORKITEM pIOWorkItem
,
6270 IN PIO_WORKITEM_ROUTINE Routine
,
6271 IN WORK_QUEUE_TYPE QueueType
,
6279 IN PVPB Vpb OPTIONAL
,
6280 IN PDEVICE_OBJECT RealDeviceObject
);
6285 IoRaiseInformationalHardError(
6286 IN NTSTATUS ErrorStatus
,
6287 IN PUNICODE_STRING String OPTIONAL
,
6288 IN PKTHREAD Thread OPTIONAL
);
6293 IoReadDiskSignature(
6294 IN PDEVICE_OBJECT DeviceObject
,
6295 IN ULONG BytesPerSector
,
6296 OUT PDISK_SIGNATURE Signature
);
6301 IoReadPartitionTable(
6302 IN PDEVICE_OBJECT DeviceObject
,
6303 IN ULONG SectorSize
,
6304 IN BOOLEAN ReturnRecognizedPartitions
,
6305 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
6310 IoReadPartitionTableEx(
6311 IN PDEVICE_OBJECT DeviceObject
,
6312 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
6317 IoRegisterBootDriverReinitialization(
6318 IN PDRIVER_OBJECT DriverObject
,
6319 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
6325 IoRegisterBootDriverReinitialization(
6326 IN PDRIVER_OBJECT DriverObject
,
6327 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
6333 IoRegisterDeviceInterface(
6334 IN PDEVICE_OBJECT PhysicalDeviceObject
,
6335 IN CONST GUID
*InterfaceClassGuid
,
6336 IN PUNICODE_STRING ReferenceString OPTIONAL
,
6337 OUT PUNICODE_STRING SymbolicLinkName
);
6342 IoRegisterDriverReinitialization(
6343 IN PDRIVER_OBJECT DriverObject
,
6344 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
6350 IoRegisterPlugPlayNotification(
6351 IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory
,
6352 IN ULONG EventCategoryFlags
,
6353 IN PVOID EventCategoryData OPTIONAL
,
6354 IN PDRIVER_OBJECT DriverObject
,
6355 IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine
,
6357 OUT PVOID
*NotificationEntry
);
6362 IoRegisterShutdownNotification(
6363 IN PDEVICE_OBJECT DeviceObject
);
6368 IoReleaseCancelSpinLock(
6374 IoReleaseRemoveLockAndWaitEx(
6375 IN PIO_REMOVE_LOCK RemoveLock
,
6377 IN ULONG RemlockSize
);
6382 IoReleaseRemoveLockEx(
6383 IN PIO_REMOVE_LOCK RemoveLock
,
6385 IN ULONG RemlockSize
);
6389 * IoReleaseRemoveLock(
6390 * IN PIO_REMOVE_LOCK RemoveLock,
6393 #define IoReleaseRemoveLock(_RemoveLock, \
6395 IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
6399 * IoReleaseRemoveLockAndWait(
6400 * IN PIO_REMOVE_LOCK RemoveLock,
6403 #define IoReleaseRemoveLockAndWait(_RemoveLock, \
6405 IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
6410 IoRemoveShareAccess(
6411 IN PFILE_OBJECT FileObject
,
6412 IN OUT PSHARE_ACCESS ShareAccess
);
6417 IoReportDetectedDevice(
6418 IN PDRIVER_OBJECT DriverObject
,
6419 IN INTERFACE_TYPE LegacyBusType
,
6421 IN ULONG SlotNumber
,
6422 IN PCM_RESOURCE_LIST ResourceList
,
6423 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
6424 IN BOOLEAN ResourceAssigned
,
6425 IN OUT PDEVICE_OBJECT
*DeviceObject
);
6430 IoReportResourceForDetection(
6431 IN PDRIVER_OBJECT DriverObject
,
6432 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
6433 IN ULONG DriverListSize OPTIONAL
,
6434 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
6435 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
6436 IN ULONG DeviceListSize OPTIONAL
,
6437 OUT PBOOLEAN ConflictDetected
);
6442 IoReportResourceUsage(
6443 IN PUNICODE_STRING DriverClassName OPTIONAL
,
6444 IN PDRIVER_OBJECT DriverObject
,
6445 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
6446 IN ULONG DriverListSize OPTIONAL
,
6447 IN PDEVICE_OBJECT DeviceObject
,
6448 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
6449 IN ULONG DeviceListSize OPTIONAL
,
6450 IN BOOLEAN OverrideConflict
,
6451 OUT PBOOLEAN ConflictDetected
);
6456 IoReportTargetDeviceChange(
6457 IN PDEVICE_OBJECT PhysicalDeviceObject
,
6458 IN PVOID NotificationStructure
);
6463 IoReportTargetDeviceChangeAsynchronous(
6464 IN PDEVICE_OBJECT PhysicalDeviceObject
,
6465 IN PVOID NotificationStructure
,
6466 IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL
,
6467 IN PVOID Context OPTIONAL
);
6472 IoRequestDeviceEject(
6473 IN PDEVICE_OBJECT PhysicalDeviceObject
);
6478 * IN PDEVICE_OBJECT DeviceObject,
6480 * IN PVOID Context);
6482 #define IoRequestDpc(DeviceObject, Irp, Context)( \
6483 KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
6490 IN NTSTATUS Status
);
6494 * IoSetCancelRoutine(
6496 * IN PDRIVER_CANCEL CancelRoutine)
6498 #define IoSetCancelRoutine(_Irp, \
6500 ((PDRIVER_CANCEL) InterlockedExchangePointer( \
6501 (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (_CancelRoutine)))
6505 * IoSetCompletionRoutine(
6507 * IN PIO_COMPLETION_ROUTINE CompletionRoutine,
6509 * IN BOOLEAN InvokeOnSuccess,
6510 * IN BOOLEAN InvokeOnError,
6511 * IN BOOLEAN InvokeOnCancel)
6513 #define IoSetCompletionRoutine(_Irp, \
6514 _CompletionRoutine, \
6520 PIO_STACK_LOCATION _IrpSp; \
6521 ASSERT((_InvokeOnSuccess) || (_InvokeOnError) || (_InvokeOnCancel) ? \
6522 (_CompletionRoutine) != NULL : TRUE); \
6523 _IrpSp = IoGetNextIrpStackLocation(_Irp); \
6524 _IrpSp->CompletionRoutine = (PIO_COMPLETION_ROUTINE)(_CompletionRoutine); \
6525 _IrpSp->Context = (_Context); \
6526 _IrpSp->Control = 0; \
6527 if (_InvokeOnSuccess) _IrpSp->Control = SL_INVOKE_ON_SUCCESS; \
6528 if (_InvokeOnError) _IrpSp->Control |= SL_INVOKE_ON_ERROR; \
6529 if (_InvokeOnCancel) _IrpSp->Control |= SL_INVOKE_ON_CANCEL; \
6535 IoSetCompletionRoutineEx(
6536 IN PDEVICE_OBJECT DeviceObject
,
6538 IN PIO_COMPLETION_ROUTINE CompletionRoutine
,
6540 IN BOOLEAN InvokeOnSuccess
,
6541 IN BOOLEAN InvokeOnError
,
6542 IN BOOLEAN InvokeOnCancel
);
6547 IoSetDeviceInterfaceState(
6548 IN PUNICODE_STRING SymbolicLinkName
,
6554 IoSetHardErrorOrVerifyDevice(
6556 IN PDEVICE_OBJECT DeviceObject
);
6560 * IoSetNextIrpStackLocation(
6563 #define IoSetNextIrpStackLocation(_Irp) \
6565 (_Irp)->CurrentLocation--; \
6566 (_Irp)->Tail.Overlay.CurrentStackLocation--; \
6572 IoSetPartitionInformation(
6573 IN PDEVICE_OBJECT DeviceObject
,
6574 IN ULONG SectorSize
,
6575 IN ULONG PartitionNumber
,
6576 IN ULONG PartitionType
);
6581 IoSetPartitionInformationEx(
6582 IN PDEVICE_OBJECT DeviceObject
,
6583 IN ULONG PartitionNumber
,
6584 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
6590 IN ACCESS_MASK DesiredAccess
,
6591 IN ULONG DesiredShareAccess
,
6592 IN OUT PFILE_OBJECT FileObject
,
6593 OUT PSHARE_ACCESS ShareAccess
);
6598 IoSetStartIoAttributes(
6599 IN PDEVICE_OBJECT DeviceObject
,
6600 IN BOOLEAN DeferredStartIo
,
6601 IN BOOLEAN NonCancelable
);
6606 IoSetSystemPartition(
6607 IN PUNICODE_STRING VolumeNameString
);
6612 IoSetThreadHardErrorMode(
6613 IN BOOLEAN EnableHardErrors
);
6618 * IN CCHAR StackSize)
6620 #define IoSizeOfIrp(_StackSize) \
6621 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
6625 * IoSkipCurrentIrpStackLocation(
6628 #define IoSkipCurrentIrpStackLocation(_Irp) \
6630 (_Irp)->CurrentLocation++; \
6631 (_Irp)->Tail.Overlay.CurrentStackLocation++; \
6638 IN PDEVICE_OBJECT DeviceObject
,
6639 IN BOOLEAN Cancelable
);
6644 IoStartNextPacketByKey(
6645 IN PDEVICE_OBJECT DeviceObject
,
6646 IN BOOLEAN Cancelable
,
6653 IN PDEVICE_OBJECT DeviceObject
,
6655 IN PULONG Key OPTIONAL
,
6656 IN PDRIVER_CANCEL CancelFunction OPTIONAL
);
6662 IN PDEVICE_OBJECT DeviceObject
);
6668 IN PDEVICE_OBJECT DeviceObject
);
6673 IoUnregisterPlugPlayNotification(
6674 IN PVOID NotificationEntry
);
6679 IoUnregisterShutdownNotification(
6680 IN PDEVICE_OBJECT DeviceObject
);
6685 IoUpdateShareAccess(
6686 IN PFILE_OBJECT FileObject
,
6687 IN OUT PSHARE_ACCESS ShareAccess
);
6692 IoVerifyPartitionTable(
6693 IN PDEVICE_OBJECT DeviceObject
,
6694 IN BOOLEAN FixErrors
);
6699 IoVolumeDeviceToDosName(
6700 IN PVOID VolumeDeviceObject
,
6701 OUT PUNICODE_STRING DosName
);
6706 IoWMIAllocateInstanceIds(
6708 IN ULONG InstanceCount
,
6709 OUT ULONG
*FirstInstanceId
);
6714 IoWMIDeviceObjectToProviderId(
6715 IN PDEVICE_OBJECT DeviceObject
);
6720 IoWMIDeviceObjectToInstanceName(
6721 IN PVOID DataBlockObject
,
6722 IN PDEVICE_OBJECT DeviceObject
,
6723 OUT PUNICODE_STRING InstanceName
);
6729 IN PVOID DataBlockObject
,
6730 IN PUNICODE_STRING InstanceName
,
6732 IN ULONG InBufferSize
,
6733 IN OUT PULONG OutBufferSize
,
6734 IN OUT PUCHAR InOutBuffer
);
6739 IoWMIHandleToInstanceName(
6740 IN PVOID DataBlockObject
,
6741 IN HANDLE FileHandle
,
6742 OUT PUNICODE_STRING InstanceName
);
6748 IN GUID
*DataBlockGuid
,
6749 IN ULONG DesiredAccess
,
6750 OUT PVOID
*DataBlockObject
);
6756 IN PVOID DataBlockObject
,
6757 IN OUT ULONG
*InOutBufferSize
,
6758 OUT PVOID OutBuffer
);
6763 IoWMIQueryAllDataMultiple(
6764 IN PVOID
*DataBlockObjectList
,
6765 IN ULONG ObjectCount
,
6766 IN OUT ULONG
*InOutBufferSize
,
6767 OUT PVOID OutBuffer
);
6772 IoWMIQuerySingleInstance(
6773 IN PVOID DataBlockObject
,
6774 IN PUNICODE_STRING InstanceName
,
6775 IN OUT ULONG
*InOutBufferSize
,
6776 OUT PVOID OutBuffer
);
6781 IoWMIQuerySingleInstanceMultiple(
6782 IN PVOID
*DataBlockObjectList
,
6783 IN PUNICODE_STRING InstanceNames
,
6784 IN ULONG ObjectCount
,
6785 IN OUT ULONG
*InOutBufferSize
,
6786 OUT PVOID OutBuffer
);
6791 IoWMIRegistrationControl(
6792 IN PDEVICE_OBJECT DeviceObject
,
6798 IoWMISetNotificationCallback(
6800 IN WMI_NOTIFICATION_CALLBACK Callback
,
6806 IoWMISetSingleInstance(
6807 IN PVOID DataBlockObject
,
6808 IN PUNICODE_STRING InstanceName
,
6810 IN ULONG ValueBufferSize
,
6811 IN PVOID ValueBuffer
);
6817 IN PVOID DataBlockObject
,
6818 IN PUNICODE_STRING InstanceName
,
6819 IN ULONG DataItemId
,
6821 IN ULONG ValueBufferSize
,
6822 IN PVOID ValueBuffer
);
6827 IoWMISuggestInstanceName(
6828 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
6829 IN PUNICODE_STRING SymbolicLinkName OPTIONAL
,
6830 IN BOOLEAN CombineNames
,
6831 OUT PUNICODE_STRING SuggestedInstanceName
);
6837 IN PVOID WnodeEventItem
);
6842 IoWriteErrorLogEntry(
6848 IoWritePartitionTable(
6849 IN PDEVICE_OBJECT DeviceObject
,
6850 IN ULONG SectorSize
,
6851 IN ULONG SectorsPerTrack
,
6852 IN ULONG NumberOfHeads
,
6853 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
6858 IoWritePartitionTableEx(
6859 IN PDEVICE_OBJECT DeviceObject
,
6860 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*PartitionBuffer
);
6864 /** Kernel routines **/
6866 #if defined (_M_AMD64)
6870 KeAcquireInStackQueuedSpinLock(
6871 IN PKSPIN_LOCK SpinLock
,
6872 IN PKLOCK_QUEUE_HANDLE LockHandle
);
6877 KeReleaseInStackQueuedSpinLock(
6878 IN PKLOCK_QUEUE_HANDLE LockHandle
);
6883 KeAcquireInStackQueuedSpinLock(
6884 IN PKSPIN_LOCK SpinLock
,
6885 IN PKLOCK_QUEUE_HANDLE LockHandle
);
6890 KeReleaseInStackQueuedSpinLock(
6891 IN PKLOCK_QUEUE_HANDLE LockHandle
);
6897 KeAcquireInStackQueuedSpinLockAtDpcLevel(
6898 IN PKSPIN_LOCK SpinLock
,
6899 IN PKLOCK_QUEUE_HANDLE LockHandle
);
6904 KeAcquireInterruptSpinLock(
6905 IN PKINTERRUPT Interrupt
);
6918 IN ULONG BugCheckCode
);
6925 IN ULONG BugCheckCode
,
6926 IN ULONG_PTR BugCheckParameter1
,
6927 IN ULONG_PTR BugCheckParameter2
,
6928 IN ULONG_PTR BugCheckParameter3
,
6929 IN ULONG_PTR BugCheckParameter4
);
6946 KeDelayExecutionThread(
6947 IN KPROCESSOR_MODE WaitMode
,
6948 IN BOOLEAN Alertable
,
6949 IN PLARGE_INTEGER Interval
);
6954 KeDeregisterBugCheckCallback(
6955 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
6960 KeEnterCriticalRegion(
6967 * IN BOOLEAN ReadOperation,
6968 * IN BOOLEAN DmaOperation)
6970 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
6972 #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
6973 #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
6974 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
6975 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
6987 KeFlushWriteBuffer(VOID
);
6992 KeGetRecommendedSharedDataAlignment(
6998 KeInitializeDeviceQueue(
6999 IN PKDEVICE_QUEUE DeviceQueue
);
7011 KeInitializeSemaphore(
7012 IN PRKSEMAPHORE Semaphore
,
7025 KeInitializeTimerEx(
7027 IN TIMER_TYPE Type
);
7032 KeInsertByKeyDeviceQueue(
7033 IN PKDEVICE_QUEUE DeviceQueue
,
7034 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
7040 KeInsertDeviceQueue(
7041 IN PKDEVICE_QUEUE DeviceQueue
,
7042 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
7049 IN PVOID SystemArgument1
,
7050 IN PVOID SystemArgument2
);
7055 KeLeaveCriticalRegion(
7065 volatile LONG Barrier
;
7066 #if defined(__GNUC__)
7067 __asm__
__volatile__ ("xchg %%eax, %0" : : "m" (Barrier
) : "%eax");
7068 #elif defined(_MSC_VER)
7069 __asm xchg
[Barrier
], eax
7080 IN KPRIORITY Increment
,
7086 KeQueryActiveProcessors(
7093 KeQueryPerformanceCounter(
7094 OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL
);
7099 KeQueryPriorityThread(
7100 IN PRKTHREAD Thread
);
7105 KeQueryRuntimeThread(
7107 OUT PULONG UserTime
);
7109 #if !defined(_M_AMD64)
7113 KeQueryInterruptTime(
7120 OUT PLARGE_INTEGER CurrentTime
);
7126 OUT PLARGE_INTEGER TickCount
);
7132 KeQueryTimeIncrement(
7151 KeReadStateSemaphore(
7152 IN PRKSEMAPHORE Semaphore
);
7163 KeRegisterBugCheckCallback(
7164 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
7165 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
7168 IN PUCHAR Component
);
7173 KeRegisterNmiCallback(
7174 IN PNMI_CALLBACK CallbackRoutine
,
7181 KeDeregisterNmiCallback(
7188 KeReleaseInStackQueuedSpinLockFromDpcLevel(
7189 IN PKLOCK_QUEUE_HANDLE LockHandle
);
7194 KeReleaseInterruptSpinLock(
7195 IN PKINTERRUPT Interrupt
,
7209 IN PRKSEMAPHORE Semaphore
,
7210 IN KPRIORITY Increment
,
7215 PKDEVICE_QUEUE_ENTRY
7217 KeRemoveByKeyDeviceQueue(
7218 IN PKDEVICE_QUEUE DeviceQueue
,
7222 PKDEVICE_QUEUE_ENTRY
7224 KeRemoveDeviceQueue(
7225 IN PKDEVICE_QUEUE DeviceQueue
);
7230 KeRemoveEntryDeviceQueue(
7231 IN PKDEVICE_QUEUE DeviceQueue
,
7232 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
7249 KeRestoreFloatingPointState(
7250 IN PKFLOATING_SAVE FloatSave
);
7255 KeRevertToUserAffinityThread(VOID
);
7260 KeSaveFloatingPointState(
7261 OUT PKFLOATING_SAVE FloatSave
);
7266 KeSetBasePriorityThread(
7267 IN PRKTHREAD Thread
,
7275 IN KPRIORITY Increment
,
7283 IN KDPC_IMPORTANCE Importance
);
7288 KeSetPriorityThread(
7290 IN KPRIORITY Priority
);
7295 KeSetSystemAffinityThread(
7296 IN KAFFINITY Affinity
);
7301 KeSetTargetProcessorDpc(
7310 IN LARGE_INTEGER DueTime
,
7311 IN PKDPC Dpc OPTIONAL
);
7318 IN LARGE_INTEGER DueTime
,
7319 IN LONG Period OPTIONAL
,
7320 IN PKDPC Dpc OPTIONAL
);
7325 KeSetTimeUpdateNotifyRoutine(
7326 IN PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine
);
7331 KeStallExecutionProcessor(
7332 IN ULONG MicroSeconds
);
7337 KeSynchronizeExecution(
7338 IN PKINTERRUPT Interrupt
,
7339 IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
7340 IN PVOID SynchronizeContext
);
7345 KeWaitForMultipleObjects(
7348 IN WAIT_TYPE WaitType
,
7349 IN KWAIT_REASON WaitReason
,
7350 IN KPROCESSOR_MODE WaitMode
,
7351 IN BOOLEAN Alertable
,
7352 IN PLARGE_INTEGER Timeout OPTIONAL
,
7353 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL
);
7358 KeWaitForMutexObject(
7360 IN KWAIT_REASON WaitReason
,
7361 IN KPROCESSOR_MODE WaitMode
,
7362 IN BOOLEAN Alertable
,
7363 IN PLARGE_INTEGER Timeout OPTIONAL
);
7368 KeWaitForSingleObject(
7370 IN KWAIT_REASON WaitReason
,
7371 IN KPROCESSOR_MODE WaitMode
,
7372 IN BOOLEAN Alertable
,
7373 IN PLARGE_INTEGER Timeout OPTIONAL
);
7377 (NTAPI
*PKIPI_BROADCAST_WORKER
)(
7378 IN ULONG_PTR Argument
7385 IN PKIPI_BROADCAST_WORKER BroadcastFunction
,
7386 IN ULONG_PTR Context
7406 KeRaiseIrqlToDpcLevel(
7412 KeRaiseIrqlToSynchLevel(
7415 #define KeLowerIrql(a) KfLowerIrql(a)
7416 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
7418 #elif defined(_M_AMD64)
7422 KeGetCurrentIrql(VOID
)
7424 return (KIRQL
)__readcr8();
7429 KeLowerIrql(IN KIRQL NewIrql
)
7431 ASSERT(KeGetCurrentIrql() >= NewIrql
);
7432 __writecr8(NewIrql
);
7437 KfRaiseIrql(IN KIRQL NewIrql
)
7441 OldIrql
= __readcr8();
7442 ASSERT(OldIrql
<= NewIrql
);
7443 __writecr8(NewIrql
);
7446 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
7450 KeRaiseIrqlToDpcLevel(VOID
)
7452 return KfRaiseIrql(DISPATCH_LEVEL
);
7457 KeRaiseIrqlToSynchLevel(VOID
)
7459 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
7462 #elif defined(__PowerPC__)
7479 KeRaiseIrqlToDpcLevel(
7485 KeRaiseIrqlToSynchLevel(
7488 #define KeLowerIrql(a) KfLowerIrql(a)
7489 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
7491 #elif defined(_M_MIPS)
7493 #define KeLowerIrql(a) KfLowerIrql(a)
7494 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
7511 KeRaiseIrqlToDpcLevel(
7517 KeRaiseIrqlToSynchLevel(
7520 #elif defined(_M_ARM)
7537 OUT PKIRQL OldIrql
);
7542 KeRaiseIrqlToDpcLevel(
7548 KeRaiseIrqlToSynchLevel(
7553 /** Memory manager routines **/
7560 IN ULONG NumberOfBytes
);
7565 MmAllocateContiguousMemory(
7566 IN ULONG NumberOfBytes
,
7567 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
7572 MmAllocateContiguousMemorySpecifyCache(
7573 IN SIZE_T NumberOfBytes
,
7574 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
7575 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
7576 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
7577 IN MEMORY_CACHING_TYPE CacheType
);
7582 MmAllocateMappingAddress(
7583 IN SIZE_T NumberOfBytes
,
7589 MmAllocateNonCachedMemory(
7590 IN ULONG NumberOfBytes
);
7595 MmAllocatePagesForMdl(
7596 IN PHYSICAL_ADDRESS LowAddress
,
7597 IN PHYSICAL_ADDRESS HighAddress
,
7598 IN PHYSICAL_ADDRESS SkipBytes
,
7599 IN SIZE_T TotalBytes
);
7601 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
7605 MmAllocatePagesForMdlEx(
7606 IN PHYSICAL_ADDRESS LowAddress
,
7607 IN PHYSICAL_ADDRESS HighAddress
,
7608 IN PHYSICAL_ADDRESS SkipBytes
,
7609 IN SIZE_T TotalBytes
,
7610 IN MEMORY_CACHING_TYPE CacheType
,
7617 MmBuildMdlForNonPagedPool(
7618 IN OUT PMDL MemoryDescriptorList
);
7620 typedef enum _MMFLUSH_TYPE
{
7628 MmFlushImageSection(
7629 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
7630 IN MMFLUSH_TYPE FlushType
);
7635 MmFreeContiguousMemory(
7636 IN PVOID BaseAddress
);
7641 MmFreeContiguousMemorySpecifyCache(
7642 IN PVOID BaseAddress
,
7643 IN SIZE_T NumberOfBytes
,
7644 IN MEMORY_CACHING_TYPE CacheType
);
7649 MmFreeMappingAddress(
7650 IN PVOID BaseAddress
,
7656 MmFreeNonCachedMemory(
7657 IN PVOID BaseAddress
,
7658 IN SIZE_T NumberOfBytes
);
7664 IN PMDL MemoryDescriptorList
);
7668 * MmGetMdlByteCount(
7671 #define MmGetMdlByteCount(_Mdl) \
7676 * MmGetMdlByteOffset(
7679 #define MmGetMdlByteOffset(_Mdl) \
7680 ((_Mdl)->ByteOffset)
7687 #define MmGetMdlPfnArray(_Mdl) \
7688 ((PPFN_NUMBER) ((_Mdl) + 1))
7692 * MmGetMdlVirtualAddress(
7695 #define MmGetMdlVirtualAddress(_Mdl) \
7696 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
7701 MmGetPhysicalAddress(
7702 IN PVOID BaseAddress
);
7705 PPHYSICAL_MEMORY_RANGE
7707 MmGetPhysicalMemoryRanges(
7713 MmGetVirtualForPhysical(
7714 IN PHYSICAL_ADDRESS PhysicalAddress
);
7719 MmMapLockedPagesSpecifyCache(
7720 IN PMDL MemoryDescriptorList
,
7721 IN KPROCESSOR_MODE AccessMode
,
7722 IN MEMORY_CACHING_TYPE CacheType
,
7723 IN PVOID BaseAddress
,
7724 IN ULONG BugCheckOnFailure
,
7725 IN MM_PAGE_PRIORITY Priority
);
7730 MmMapLockedPagesWithReservedMapping(
7731 IN PVOID MappingAddress
,
7733 IN PMDL MemoryDescriptorList
,
7734 IN MEMORY_CACHING_TYPE CacheType
);
7739 MmMapUserAddressesToPage(
7740 IN PVOID BaseAddress
,
7741 IN SIZE_T NumberOfBytes
,
7742 IN PVOID PageAddress
);
7748 IN PHYSICAL_ADDRESS PhysicalAddress
,
7749 IN SIZE_T NumberOfBytes
,
7750 IN MEMORY_CACHING_TYPE CacheType
);
7755 MmMapViewInSessionSpace(
7757 OUT PVOID
*MappedBase
,
7758 IN OUT PSIZE_T ViewSize
);
7763 MmMapViewInSystemSpace(
7765 OUT PVOID
*MappedBase
,
7766 IN PSIZE_T ViewSize
);
7771 MmMarkPhysicalMemoryAsBad(
7772 IN PPHYSICAL_ADDRESS StartAddress
,
7773 IN OUT PLARGE_INTEGER NumberOfBytes
);
7778 MmMarkPhysicalMemoryAsGood(
7779 IN PPHYSICAL_ADDRESS StartAddress
,
7780 IN OUT PLARGE_INTEGER NumberOfBytes
);
7785 MmGetSystemRoutineAddress(
7786 IN PUNICODE_STRING SystemRoutineName
);
7790 * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
7794 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, \
7796 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
7797 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
7802 * IN PMDL MemoryDescriptorList,
7806 #define MmInitializeMdl(_MemoryDescriptorList, \
7810 (_MemoryDescriptorList)->Next = (PMDL) NULL; \
7811 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
7812 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
7813 (_MemoryDescriptorList)->MdlFlags = 0; \
7814 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
7815 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
7816 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
7823 IN PVOID VirtualAddress
);
7828 MmIsDriverVerifying(
7829 IN PDRIVER_OBJECT DriverObject
);
7834 MmIsThisAnNtAsSystem(
7840 MmIsVerifierEnabled(
7841 OUT PULONG VerifierFlags
);
7846 MmLockPagableDataSection(
7847 IN PVOID AddressWithinSection
);
7852 MmLockPagableImageSection(
7853 IN PVOID AddressWithinSection
);
7857 * MmLockPagableCodeSection(
7858 * IN PVOID AddressWithinSection)
7860 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
7865 MmLockPagableSectionByHandle(
7866 IN PVOID ImageSectionHandle
);
7872 IN PHYSICAL_ADDRESS PhysicalAddress
,
7873 IN ULONG NumberOfBytes
,
7874 IN MEMORY_CACHING_TYPE CacheEnable
);
7880 IN PMDL MemoryDescriptorList
,
7881 IN KPROCESSOR_MODE AccessMode
);
7886 MmLockPageableDataSection (
7887 IN PVOID AddressWithinSection
7893 MmUnlockPageableImageSection(
7894 IN PVOID ImageSectionHandle
7901 IN PVOID AddressWithinSection
);
7906 MmProbeAndLockProcessPages(
7907 IN OUT PMDL MemoryDescriptorList
,
7908 IN PEPROCESS Process
,
7909 IN KPROCESSOR_MODE AccessMode
,
7910 IN LOCK_OPERATION Operation
);
7915 MmProtectMdlSystemAddress(
7916 IN PMDL MemoryDescriptorList
,
7917 IN ULONG NewProtect
);
7923 IN PVOID BaseAddress
,
7924 IN PMDL MemoryDescriptorList
);
7929 MmUnmapViewInSessionSpace(
7930 IN PVOID MappedBase
);
7935 MmUnmapViewInSystemSpace(
7936 IN PVOID MappedBase
);
7941 MmUnsecureVirtualMemory(
7942 IN HANDLE SecureHandle
);
7946 * MmPrepareMdlForReuse(
7949 #define MmPrepareMdlForReuse(_Mdl) \
7951 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
7952 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
7953 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
7954 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
7955 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
7959 #define MmGetProcedureAddress(Address) (Address)
7964 MmProbeAndLockPages(
7965 IN OUT PMDL MemoryDescriptorList
,
7966 IN KPROCESSOR_MODE AccessMode
,
7967 IN LOCK_OPERATION Operation
);
7978 MmRemovePhysicalMemory(
7979 IN PPHYSICAL_ADDRESS StartAddress
,
7980 IN OUT PLARGE_INTEGER NumberOfBytes
);
7985 MmResetDriverPaging(
7986 IN PVOID AddressWithinSection
);
7991 MmSecureVirtualMemory(
7994 IN ULONG ProbeMode
);
8006 MmUnlockPagableImageSection(
8007 IN PVOID ImageSectionHandle
);
8013 IN PMDL MemoryDescriptorList
);
8019 IN PVOID BaseAddress
,
8020 IN SIZE_T NumberOfBytes
);
8025 MmUnmapReservedMapping(
8026 IN PVOID BaseAddress
,
8028 IN PMDL MemoryDescriptorList
);
8033 MmUnmapVideoDisplay(
8034 IN PVOID BaseAddress
,
8035 IN SIZE_T NumberOfBytes
);
8039 /** Object manager routines **/
8045 IN PACCESS_STATE AccessState
,
8046 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
8048 IN POBJECT_TYPE Type
);
8053 ObDereferenceSecurityDescriptor(
8054 PSECURITY_DESCRIPTOR SecurityDescriptor
,
8060 ObfDereferenceObject(
8065 * ObDereferenceObject(
8068 #define ObDereferenceObject ObfDereferenceObject
8073 ObGetObjectSecurity(
8075 OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
,
8076 OUT PBOOLEAN MemoryAllocated
);
8083 IN PACCESS_STATE PassedAccessState OPTIONAL
,
8084 IN ACCESS_MASK DesiredAccess
,
8085 IN ULONG AdditionalReferences
,
8086 OUT PVOID
* ReferencedObject OPTIONAL
,
8087 OUT PHANDLE Handle
);
8098 ObLogSecurityDescriptor(
8099 IN PSECURITY_DESCRIPTOR InputSecurityDescriptor
,
8100 OUT PSECURITY_DESCRIPTOR
*OutputSecurityDescriptor
,
8104 * ObReferenceObject(
8107 #define ObReferenceObject ObfReferenceObject
8112 ObMakeTemporaryObject(
8119 IN POBJECT_ATTRIBUTES ObjectAttributes
,
8120 IN POBJECT_TYPE ObjectType
,
8121 IN KPROCESSOR_MODE AccessMode
,
8122 IN PACCESS_STATE PassedAccessState
,
8123 IN ACCESS_MASK DesiredAccess
,
8124 IN OUT PVOID ParseContext OPTIONAL
,
8125 OUT PHANDLE Handle
);
8130 ObOpenObjectByPointer(
8132 IN ULONG HandleAttributes
,
8133 IN PACCESS_STATE PassedAccessState OPTIONAL
,
8134 IN ACCESS_MASK DesiredAccess OPTIONAL
,
8135 IN POBJECT_TYPE ObjectType OPTIONAL
,
8136 IN KPROCESSOR_MODE AccessMode
,
8137 OUT PHANDLE Handle
);
8142 ObQueryObjectAuditingByHandle(
8144 OUT PBOOLEAN GenerateOnClose
);
8149 ObReferenceObjectByHandle(
8151 IN ACCESS_MASK DesiredAccess
,
8152 IN POBJECT_TYPE ObjectType OPTIONAL
,
8153 IN KPROCESSOR_MODE AccessMode
,
8155 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
);
8160 ObReferenceObjectByName(
8161 IN PUNICODE_STRING ObjectPath
,
8162 IN ULONG Attributes
,
8163 IN PACCESS_STATE PassedAccessState OPTIONAL
,
8164 IN ACCESS_MASK DesiredAccess OPTIONAL
,
8165 IN POBJECT_TYPE ObjectType
,
8166 IN KPROCESSOR_MODE AccessMode
,
8167 IN OUT PVOID ParseContext OPTIONAL
,
8173 ObReferenceObjectByPointer(
8175 IN ACCESS_MASK DesiredAccess
,
8176 IN POBJECT_TYPE ObjectType
,
8177 IN KPROCESSOR_MODE AccessMode
);
8182 ObReferenceSecurityDescriptor(
8183 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
8189 ObReleaseObjectSecurity(
8190 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
8191 IN BOOLEAN MemoryAllocated
);
8195 /** Process manager routines **/
8200 PsCreateSystemProcess(
8201 IN PHANDLE ProcessHandle
,
8202 IN ACCESS_MASK DesiredAccess
,
8203 IN POBJECT_ATTRIBUTES ObjectAttributes
);
8208 PsCreateSystemThread(
8209 OUT PHANDLE ThreadHandle
,
8210 IN ULONG DesiredAccess
,
8211 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
8212 IN HANDLE ProcessHandle OPTIONAL
,
8213 OUT PCLIENT_ID ClientId OPTIONAL
,
8214 IN PKSTART_ROUTINE StartRoutine
,
8215 IN PVOID StartContext
);
8219 * PsGetCurrentProcess(VOID)
8221 #define PsGetCurrentProcess IoGetCurrentProcess
8226 PsGetCurrentProcessId(
8231 * PsGetCurrentThread(VOID)
8233 #define PsGetCurrentThread() \
8234 ((PETHREAD) KeGetCurrentThread())
8239 PsGetCurrentThreadId(
8245 PsGetProcessId(PEPROCESS Process
);
8251 PULONG MajorVersion OPTIONAL
,
8252 PULONG MinorVersion OPTIONAL
,
8253 PULONG BuildNumber OPTIONAL
,
8254 PUNICODE_STRING CSDVersion OPTIONAL
);
8259 PsRemoveCreateThreadNotifyRoutine(
8260 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
8265 PsRemoveLoadImageNotifyRoutine(
8266 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
8271 PsSetCreateProcessNotifyRoutine(
8272 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
8278 PsSetCreateThreadNotifyRoutine(
8279 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
8284 PsSetLoadImageNotifyRoutine(
8285 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
8290 PsTerminateSystemThread(
8291 IN NTSTATUS ExitStatus
);
8293 extern NTSYSAPI PEPROCESS PsInitialSystemProcess
;
8296 /** Security reference monitor routines **/
8302 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
8303 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
8304 IN BOOLEAN SubjectContextLocked
,
8305 IN ACCESS_MASK DesiredAccess
,
8306 IN ACCESS_MASK PreviouslyGrantedAccess
,
8307 OUT PPRIVILEGE_SET
*Privileges OPTIONAL
,
8308 IN PGENERIC_MAPPING GenericMapping
,
8309 IN KPROCESSOR_MODE AccessMode
,
8310 OUT PACCESS_MASK GrantedAccess
,
8311 OUT PNTSTATUS AccessStatus
);
8317 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
8318 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
8319 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
8320 IN BOOLEAN IsDirectoryObject
,
8321 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
8322 IN PGENERIC_MAPPING GenericMapping
,
8323 IN POOL_TYPE PoolType
);
8329 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL
,
8330 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL
,
8331 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
8332 IN GUID
*ObjectType OPTIONAL
,
8333 IN BOOLEAN IsDirectoryObject
,
8334 IN ULONG AutoInheritFlags
,
8335 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
8336 IN PGENERIC_MAPPING GenericMapping
,
8337 IN POOL_TYPE PoolType
);
8343 IN OUT PSECURITY_DESCRIPTOR
*SecurityDescriptor
);
8348 SeSinglePrivilegeCheck(
8349 LUID PrivilegeValue
,
8350 KPROCESSOR_MODE PreviousMode
);
8355 SeValidSecurityDescriptor(
8357 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
8361 /** NtXxx routines **/
8367 OUT PHANDLE ProcessHandle
,
8368 IN ACCESS_MASK DesiredAccess
,
8369 IN POBJECT_ATTRIBUTES ObjectAttributes
,
8370 IN PCLIENT_ID ClientId OPTIONAL
);
8375 NtQueryInformationProcess(
8376 IN HANDLE ProcessHandle
,
8377 IN PROCESSINFOCLASS ProcessInformationClass
,
8378 OUT PVOID ProcessInformation
,
8379 IN ULONG ProcessInformationLength
,
8380 OUT PULONG ReturnLength OPTIONAL
);
8384 /** NtXxx and ZwXxx routines **/
8390 IN HANDLE TimerHandle
,
8391 OUT PBOOLEAN CurrentState OPTIONAL
);
8408 ZwCreateDirectoryObject(
8409 OUT PHANDLE DirectoryHandle
,
8410 IN ACCESS_MASK DesiredAccess
,
8411 IN POBJECT_ATTRIBUTES ObjectAttributes
);
8417 OUT PHANDLE EventHandle
,
8418 IN ACCESS_MASK DesiredAccess
,
8419 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
8420 IN EVENT_TYPE EventType
,
8421 IN BOOLEAN InitialState
);
8427 OUT PHANDLE EventHandle
,
8428 IN ACCESS_MASK DesiredAccess
,
8429 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
8430 IN EVENT_TYPE EventType
,
8431 IN BOOLEAN InitialState
);
8437 OUT PHANDLE FileHandle
,
8438 IN ACCESS_MASK DesiredAccess
,
8439 IN POBJECT_ATTRIBUTES ObjectAttributes
,
8440 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8441 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
8442 IN ULONG FileAttributes
,
8443 IN ULONG ShareAccess
,
8444 IN ULONG CreateDisposition
,
8445 IN ULONG CreateOptions
,
8446 IN PVOID EaBuffer OPTIONAL
,
8453 OUT PHANDLE KeyHandle
,
8454 IN ACCESS_MASK DesiredAccess
,
8455 IN POBJECT_ATTRIBUTES ObjectAttributes
,
8456 IN ULONG TitleIndex
,
8457 IN PUNICODE_STRING Class OPTIONAL
,
8458 IN ULONG CreateOptions
,
8459 OUT PULONG Disposition OPTIONAL
);
8465 OUT PHANDLE TimerHandle
,
8466 IN ACCESS_MASK DesiredAccess
,
8467 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
8468 IN TIMER_TYPE TimerType
);
8474 IN HANDLE KeyHandle
);
8480 IN HANDLE KeyHandle
,
8481 IN PUNICODE_STRING ValueName
);
8486 NtDeviceIoControlFile(
8487 IN HANDLE DeviceHandle
,
8488 IN HANDLE Event OPTIONAL
,
8489 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
8490 IN PVOID UserApcContext OPTIONAL
,
8491 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8492 IN ULONG IoControlCode
,
8493 IN PVOID InputBuffer
,
8494 IN ULONG InputBufferSize
,
8495 OUT PVOID OutputBuffer
,
8496 IN ULONG OutputBufferSize
);
8501 ZwDeviceIoControlFile(
8502 IN HANDLE DeviceHandle
,
8503 IN HANDLE Event OPTIONAL
,
8504 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL
,
8505 IN PVOID UserApcContext OPTIONAL
,
8506 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8507 IN ULONG IoControlCode
,
8508 IN PVOID InputBuffer
,
8509 IN ULONG InputBufferSize
,
8510 OUT PVOID OutputBuffer
,
8511 IN ULONG OutputBufferSize
);
8517 IN HANDLE KeyHandle
,
8519 IN KEY_INFORMATION_CLASS KeyInformationClass
,
8520 OUT PVOID KeyInformation
,
8522 OUT PULONG ResultLength
);
8527 ZwEnumerateValueKey(
8528 IN HANDLE KeyHandle
,
8530 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
8531 OUT PVOID KeyValueInformation
,
8533 OUT PULONG ResultLength
);
8539 IN HANDLE KeyHandle
);
8544 ZwMakeTemporaryObject(
8551 IN HANDLE SectionHandle
,
8552 IN HANDLE ProcessHandle
,
8553 IN OUT PVOID
*BaseAddress
,
8554 IN ULONG_PTR ZeroBits
,
8555 IN SIZE_T CommitSize
,
8556 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
8557 IN OUT PSIZE_T ViewSize
,
8558 IN SECTION_INHERIT InheritDisposition
,
8559 IN ULONG AllocationType
,
8566 IN HANDLE SectionHandle
,
8567 IN HANDLE ProcessHandle
,
8568 IN OUT PVOID
*BaseAddress
,
8569 IN ULONG_PTR ZeroBits
,
8570 IN SIZE_T CommitSize
,
8571 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
8572 IN OUT PSIZE_T ViewSize
,
8573 IN SECTION_INHERIT InheritDisposition
,
8574 IN ULONG AllocationType
,
8581 OUT PHANDLE FileHandle
,
8582 IN ACCESS_MASK DesiredAccess
,
8583 IN POBJECT_ATTRIBUTES ObjectAttributes
,
8584 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8585 IN ULONG ShareAccess
,
8586 IN ULONG OpenOptions
);
8592 OUT PHANDLE FileHandle
,
8593 IN ACCESS_MASK DesiredAccess
,
8594 IN POBJECT_ATTRIBUTES ObjectAttributes
,
8595 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8596 IN ULONG ShareAccess
,
8597 IN ULONG OpenOptions
);
8603 OUT PHANDLE KeyHandle
,
8604 IN ACCESS_MASK DesiredAccess
,
8605 IN POBJECT_ATTRIBUTES ObjectAttributes
);
8611 OUT PHANDLE SectionHandle
,
8612 IN ACCESS_MASK DesiredAccess
,
8613 IN POBJECT_ATTRIBUTES ObjectAttributes
);
8618 ZwOpenSymbolicLinkObject(
8619 OUT PHANDLE LinkHandle
,
8620 IN ACCESS_MASK DesiredAccess
,
8621 IN POBJECT_ATTRIBUTES ObjectAttributes
);
8627 OUT PHANDLE TimerHandle
,
8628 IN ACCESS_MASK DesiredAccess
,
8629 IN POBJECT_ATTRIBUTES ObjectAttributes
);
8634 ZwQueryInformationFile(
8635 IN HANDLE FileHandle
,
8636 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8637 OUT PVOID FileInformation
,
8639 IN FILE_INFORMATION_CLASS FileInformationClass
);
8645 IN HANDLE KeyHandle
,
8646 IN KEY_INFORMATION_CLASS KeyInformationClass
,
8647 OUT PVOID KeyInformation
,
8649 OUT PULONG ResultLength
);
8654 ZwQuerySymbolicLinkObject(
8655 IN HANDLE LinkHandle
,
8656 IN OUT PUNICODE_STRING LinkTarget
,
8657 OUT PULONG ReturnedLength OPTIONAL
);
8663 IN HANDLE KeyHandle
,
8664 IN PUNICODE_STRING ValueName
,
8665 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
,
8666 OUT PVOID KeyValueInformation
,
8668 OUT PULONG ResultLength
);
8674 IN HANDLE FileHandle
,
8675 IN HANDLE Event OPTIONAL
,
8676 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8677 IN PVOID ApcContext OPTIONAL
,
8678 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8681 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
8682 IN PULONG Key OPTIONAL
);
8688 IN HANDLE FileHandle
,
8689 IN HANDLE Event OPTIONAL
,
8690 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8691 IN PVOID ApcContext OPTIONAL
,
8692 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8695 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
8696 IN PULONG Key OPTIONAL
);
8702 IN HANDLE EventHandle
,
8703 OUT PLONG PreviousState OPTIONAL
);
8709 IN HANDLE EventHandle
,
8710 OUT PLONG PreviousState OPTIONAL
);
8715 ZwSetInformationFile(
8716 IN HANDLE FileHandle
,
8717 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8718 IN PVOID FileInformation
,
8720 IN FILE_INFORMATION_CLASS FileInformationClass
);
8725 ZwSetInformationThread(
8726 IN HANDLE ThreadHandle
,
8727 IN THREADINFOCLASS ThreadInformationClass
,
8728 IN PVOID ThreadInformation
,
8729 IN ULONG ThreadInformationLength
);
8735 IN HANDLE TimerHandle
,
8736 IN PLARGE_INTEGER DueTime
,
8737 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
8738 IN PVOID TimerContext OPTIONAL
,
8739 IN BOOLEAN WakeTimer
,
8740 IN LONG Period OPTIONAL
,
8741 OUT PBOOLEAN PreviousState OPTIONAL
);
8747 IN HANDLE KeyHandle
,
8748 IN PUNICODE_STRING ValueName
,
8749 IN ULONG TitleIndex OPTIONAL
,
8754 /* [Nt|Zw]MapViewOfSection.InheritDisposition constants */
8755 #define AT_EXTENDABLE_FILE 0x00002000
8756 #define AT_RESERVED 0x20000000
8757 #define AT_ROUND_TO_PAGE 0x40000000
8762 NtUnmapViewOfSection(
8763 IN HANDLE ProcessHandle
,
8764 IN PVOID BaseAddress
);
8769 ZwUnmapViewOfSection(
8770 IN HANDLE ProcessHandle
,
8771 IN PVOID BaseAddress
);
8776 NtWaitForSingleObject(
8777 IN HANDLE ObjectHandle
,
8778 IN BOOLEAN Alertable
,
8779 IN PLARGE_INTEGER TimeOut OPTIONAL
);
8784 ZwWaitForSingleObject(
8785 IN HANDLE ObjectHandle
,
8786 IN BOOLEAN Alertable
,
8787 IN PLARGE_INTEGER TimeOut OPTIONAL
);
8793 IN HANDLE FileHandle
,
8794 IN HANDLE Event OPTIONAL
,
8795 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8796 IN PVOID ApcContext OPTIONAL
,
8797 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8800 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
8801 IN PULONG Key OPTIONAL
);
8807 IN HANDLE FileHandle
,
8808 IN HANDLE Event OPTIONAL
,
8809 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8810 IN PVOID ApcContext OPTIONAL
,
8811 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8814 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
8815 IN PULONG Key OPTIONAL
);
8819 /** Power management support routines **/
8825 IN PDEVICE_OBJECT DeviceObject
,
8831 PoRegisterDeviceForIdleDetection(
8832 IN PDEVICE_OBJECT DeviceObject
,
8833 IN ULONG ConservationIdleTime
,
8834 IN ULONG PerformanceIdleTime
,
8835 IN DEVICE_POWER_STATE State
);
8840 PoRegisterSystemState(
8841 IN PVOID StateHandle
,
8842 IN EXECUTION_STATE Flags
);
8848 IN PDEVICE_OBJECT DeviceObject
,
8849 IN UCHAR MinorFunction
,
8850 IN POWER_STATE PowerState
,
8851 IN PREQUEST_POWER_COMPLETE CompletionFunction
,
8853 OUT PIRP
*Irp OPTIONAL
);
8858 PoRequestShutdownEvent(
8865 PULONG IdlePointer
);
8867 #define PoSetDeviceBusy(IdlePointer) \
8868 ((void)(*(IdlePointer) = 0))
8874 IN PDEVICE_OBJECT DeviceObject
,
8875 IN POWER_STATE_TYPE Type
,
8876 IN POWER_STATE State
);
8882 IN EXECUTION_STATE Flags
);
8887 PoStartNextPowerIrp(
8893 PoUnregisterSystemState(
8894 IN PVOID StateHandle
);
8898 /** WMI library support routines **/
8903 IN PDEVICE_OBJECT DeviceObject
,
8906 IN ULONG BufferUsed
,
8907 IN CCHAR PriorityBoost
);
8912 IN PDEVICE_OBJECT DeviceObject
,
8914 IN ULONG InstanceIndex
,
8915 IN ULONG EventDataSize
,
8916 IN PVOID EventData
);
8921 WmiQueryTraceInformation(
8922 IN TRACE_INFORMATION_CLASS TraceInformationClass
,
8923 OUT PVOID TraceInformation
,
8924 IN ULONG TraceInformationLength
,
8925 OUT PULONG RequiredLength OPTIONAL
,
8926 IN PVOID Buffer OPTIONAL
);
8931 IN PWMILIB_CONTEXT WmiLibInfo
,
8932 IN PDEVICE_OBJECT DeviceObject
,
8934 OUT PSYSCTL_IRP_DISPOSITION IrpDisposition
);
8940 IN TRACEHANDLE LoggerHandle
,
8941 IN ULONG MessageFlags
,
8942 IN LPGUID MessageGuid
,
8943 IN USHORT MessageNumber
,
8947 /* FIXME: Get va_list from where? */
8952 IN TRACEHANDLE LoggerHandle
,
8953 IN ULONG MessageFlags
,
8954 IN LPGUID MessageGuid
,
8955 IN USHORT MessageNumber
,
8956 IN
va_list MessageArgList
);
8960 /** Kernel debugger routines **/
8977 KdRefreshDebuggerNotPresent(
8981 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
8986 IN KD_OPTION Option
,
8987 IN ULONG InBufferBytes OPTIONAL
,
8989 IN ULONG OutBufferBytes OPTIONAL
,
8990 OUT PVOID OutBuffer
,
8991 OUT PULONG OutBufferNeeded OPTIONAL
);
9002 DbgBreakPointWithStatus(
9015 IN ULONG ComponentId
,
9023 IN ULONG ComponentId
,
9030 vDbgPrintExWithPrefix(
9032 IN ULONG ComponentId
,
9040 DbgPrintReturnControlC(
9049 IN ULONG MaximumResponseLength
9055 DbgQueryDebugFilterState(
9056 IN ULONG ComponentId
,
9062 DbgSetDebugFilterState(
9063 IN ULONG ComponentId
,
9069 #define KdPrint(_x_) DbgPrint _x_
9070 #define KdPrintEx(_x_) DbgPrintEx _x_
9071 #define KdBreakPoint() DbgBreakPoint()
9072 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
9076 #define KdPrint(_x_)
9077 #define KdPrintEx(_x_)
9078 #define KdBreakPoint()
9079 #define KdBreakPointWithStatus(s)
9083 #if defined(__GNUC__)
9085 extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent
;
9086 extern NTKERNELAPI BOOLEAN KdDebuggerEnabled
;
9087 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
9088 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
9090 #elif defined(_NTDDK_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
9092 extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent
;
9093 extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled
;
9094 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
9095 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
9099 extern BOOLEAN KdDebuggerNotPresent
;
9100 extern BOOLEAN KdDebuggerEnabled
;
9101 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
9102 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
9106 /** Stuff from winnt4.h */
9108 #ifndef DMA_MACROS_DEFINED
9110 #if (NTDDI_VERSION >= NTDDI_WIN2K)
9112 //DECLSPEC_DEPRECATED_DDK
9116 IoFlushAdapterBuffers(
9117 IN PADAPTER_OBJECT AdapterObject
,
9119 IN PVOID MapRegisterBase
,
9122 IN BOOLEAN WriteToDevice
);
9124 //DECLSPEC_DEPRECATED_DDK
9128 IoFreeAdapterChannel(
9129 IN PADAPTER_OBJECT AdapterObject
);
9131 //DECLSPEC_DEPRECATED_DDK
9136 IN PADAPTER_OBJECT AdapterObject
,
9137 IN PVOID MapRegisterBase
,
9138 IN ULONG NumberOfMapRegisters
);
9140 //DECLSPEC_DEPRECATED_DDK
9145 IN PADAPTER_OBJECT AdapterObject
,
9147 IN PVOID MapRegisterBase
,
9149 IN OUT PULONG Length
,
9150 IN BOOLEAN WriteToDevice
);
9153 #endif // (NTDDI_VERSION >= NTDDI_WIN2K)
9154 #endif // !defined(DMA_MACROS_DEFINED)
9160 IN PUNICODE_STRING RegistryPath
,
9161 IN PUNICODE_STRING DriverClassName OPTIONAL
,
9162 IN PDRIVER_OBJECT DriverObject
,
9163 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
9164 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources
,
9165 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
9170 IoAttachDeviceByPointer(
9171 IN PDEVICE_OBJECT SourceDevice
,
9172 IN PDEVICE_OBJECT TargetDevice
);
9177 MmIsNonPagedSystemAddressValid(
9178 IN PVOID VirtualAddress
);
9180 #if defined(_AMD64_) || defined(_IA64_)
9181 //DECLSPEC_DEPRECATED_DDK_WINXP
9185 RtlLargeIntegerDivide(
9186 IN LARGE_INTEGER Dividend
,
9187 IN LARGE_INTEGER Divisor
,
9188 IN OUT PLARGE_INTEGER Remainder
)
9191 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
9193 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
9200 RtlLargeIntegerDivide(
9201 IN LARGE_INTEGER Dividend
,
9202 IN LARGE_INTEGER Divisor
,
9203 IN OUT PLARGE_INTEGER Remainder
);
9209 ExInterlockedDecrementLong(
9211 IN PKSPIN_LOCK Lock
);
9216 ExInterlockedExchangeUlong(
9219 IN PKSPIN_LOCK Lock
);
9224 ExInterlockedIncrementLong(
9226 IN PKSPIN_LOCK Lock
);
9231 HalAcquireDisplayOwnership(
9232 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
9237 HalAllocateAdapterChannel(
9238 IN PADAPTER_OBJECT AdapterObject
,
9239 IN PWAIT_CONTEXT_BLOCK Wcb
,
9240 IN ULONG NumberOfMapRegisters
,
9241 IN PDRIVER_CONTROL ExecutionRoutine
);
9246 HalAllocateCommonBuffer(
9247 IN PADAPTER_OBJECT AdapterObject
,
9249 OUT PPHYSICAL_ADDRESS LogicalAddress
,
9250 IN BOOLEAN CacheEnabled
);
9255 HalAssignSlotResources(
9256 IN PUNICODE_STRING RegistryPath
,
9257 IN PUNICODE_STRING DriverClassName
,
9258 IN PDRIVER_OBJECT DriverObject
,
9259 IN PDEVICE_OBJECT DeviceObject
,
9260 IN INTERFACE_TYPE BusType
,
9262 IN ULONG SlotNumber
,
9263 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
9268 HalFreeCommonBuffer(
9269 IN PADAPTER_OBJECT AdapterObject
,
9271 IN PHYSICAL_ADDRESS LogicalAddress
,
9272 IN PVOID VirtualAddress
,
9273 IN BOOLEAN CacheEnabled
);
9279 IN PDEVICE_DESCRIPTION DeviceDescription
,
9280 IN OUT PULONG NumberOfMapRegisters
);
9286 IN BUS_DATA_TYPE BusDataType
,
9288 IN ULONG SlotNumber
,
9295 HalGetBusDataByOffset(
9296 IN BUS_DATA_TYPE BusDataType
,
9298 IN ULONG SlotNumber
,
9306 HalGetDmaAlignmentRequirement(
9312 HalGetInterruptVector(
9313 IN INTERFACE_TYPE InterfaceType
,
9315 IN ULONG BusInterruptLevel
,
9316 IN ULONG BusInterruptVector
,
9318 OUT PKAFFINITY Affinity
);
9324 IN PADAPTER_OBJECT AdapterObject
);
9330 IN BUS_DATA_TYPE BusDataType
,
9332 IN ULONG SlotNumber
,
9339 HalSetBusDataByOffset(
9340 IN BUS_DATA_TYPE BusDataType
,
9342 IN ULONG SlotNumber
,
9350 HalTranslateBusAddress(
9351 IN INTERFACE_TYPE InterfaceType
,
9353 IN PHYSICAL_ADDRESS BusAddress
,
9354 IN OUT PULONG AddressSpace
,
9355 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
9360 RtlLargeIntegerEqualToZero(
9361 IN LARGE_INTEGER Operand
);
9366 RtlLargeIntegerGreaterOrEqualToZero(
9367 IN LARGE_INTEGER Operand
);
9372 RtlLargeIntegerGreaterThan(
9373 IN LARGE_INTEGER Operand1
,
9374 IN LARGE_INTEGER Operand2
);
9379 RtlLargeIntegerGreaterThanOrEqualTo(
9380 IN LARGE_INTEGER Operand1
,
9381 IN LARGE_INTEGER Operand2
);
9386 RtlLargeIntegerGreaterThanZero(
9387 IN LARGE_INTEGER Operand
);
9392 RtlLargeIntegerLessOrEqualToZero(
9393 IN LARGE_INTEGER Operand
);
9398 RtlLargeIntegerLessThan(
9399 IN LARGE_INTEGER Operand1
,
9400 IN LARGE_INTEGER Operand2
);
9405 RtlLargeIntegerLessThanOrEqualTo(
9406 IN LARGE_INTEGER Operand1
,
9407 IN LARGE_INTEGER Operand2
);
9412 RtlLargeIntegerLessThanZero(
9413 IN LARGE_INTEGER Operand
);
9418 RtlLargeIntegerNegate(
9419 IN LARGE_INTEGER Subtrahend
);
9424 RtlLargeIntegerNotEqualTo(
9425 IN LARGE_INTEGER Operand1
,
9426 IN LARGE_INTEGER Operand2
);
9431 RtlLargeIntegerNotEqualToZero(
9432 IN LARGE_INTEGER Operand
);
9437 RtlLargeIntegerShiftLeft(
9438 IN LARGE_INTEGER LargeInteger
,
9439 IN CCHAR ShiftCount
);
9444 RtlLargeIntegerShiftRight(
9445 IN LARGE_INTEGER LargeInteger
,
9446 IN CCHAR ShiftCount
);
9451 RtlLargeIntegerSubtract(
9452 IN LARGE_INTEGER Minuend
,
9453 IN LARGE_INTEGER Subtrahend
);
9458 * COMPUTE_PAGES_SPANNED(
9462 #define COMPUTE_PAGES_SPANNED(Va, \
9464 (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
9468 ** Architecture specific structures
9476 Exfi386InterlockedIncrementLong(
9482 Exfi386InterlockedDecrementLong(
9488 Exfi386InterlockedExchangeUlong(
9492 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
9493 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
9494 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
9500 // NT-ARM is not documented
9509 #endif /* __WINDDK_H */