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 */
59 #define RESTRICTED_POINTER
62 #define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
64 #define POINTER_ALIGNMENT
67 #define DECLSPEC_ADDRSAFE
69 #ifdef NONAMELESSUNION
70 # define _DDK_DUMMYUNION_MEMBER(name) DUMMYUNIONNAME.name
71 # define _DDK_DUMMYUNION_N_MEMBER(n, name) DUMMYUNIONNAME##n.name
73 # define _DDK_DUMMYUNION_MEMBER(name) name
74 # define _DDK_DUMMYUNION_N_MEMBER(n, name) name
78 ** Forward declarations
90 struct _DEVICE_OBJECT
;
91 struct _DRIVER_OBJECT
;
92 struct _IO_STATUS_BLOCK
;
93 struct _DEVICE_DESCRIPTION
;
94 struct _SCATTER_GATHER_LIST
;
95 struct _DRIVE_LAYOUT_INFORMATION
;
96 struct _DRIVE_LAYOUT_INFORMATION_EX
;
97 struct _LOADER_PARAMETER_BLOCK
;
102 /* FIXME: Unknown definitions */
103 struct _SET_PARTITION_INFORMATION_EX
;
104 typedef ULONG WAIT_TYPE
;
107 typedef HANDLE TRACEHANDLE
;
108 typedef PVOID PWMILIB_CONTEXT
;
109 typedef ULONG LOGICAL
;
113 ** WmiLib specific structure
117 IrpProcessed
, // Irp was processed and possibly completed
118 IrpNotCompleted
, // Irp was process and NOT completed
119 IrpNotWmi
, // Irp is not a WMI irp
120 IrpForward
// Irp is wmi irp, but targeted at another device object
121 } SYSCTL_IRP_DISPOSITION
, *PSYSCTL_IRP_DISPOSITION
;
124 ** Routines specific to this DDK
126 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
132 typedef UCHAR KIRQL
, *PKIRQL
;
143 struct _COMPRESSED_DATA_INFO
;
146 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
147 #define ZwCurrentProcess() NtCurrentProcess()
148 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
149 #define ZwCurrentThread() NtCurrentThread()
152 #define KIP0PCRADDRESS 0xffdff000
156 #define KERNEL_STACK_SIZE 12288
157 #define KERNEL_LARGE_STACK_SIZE 61440
158 #define KERNEL_LARGE_STACK_COMMIT 12288
160 #define EXCEPTION_READ_FAULT 0
161 #define EXCEPTION_WRITE_FAULT 1
162 #define EXCEPTION_EXECUTE_FAULT 8
164 #define DPFLTR_ERROR_LEVEL 0
165 #define DPFLTR_WARNING_LEVEL 1
166 #define DPFLTR_TRACE_LEVEL 2
167 #define DPFLTR_INFO_LEVEL 3
168 #define DPFLTR_MASK 0x80000000
170 typedef enum _DPFLTR_TYPE
172 DPFLTR_SYSTEM_ID
= 0,
177 DPFLTR_CRASHDUMP_ID
= 5,
178 DPFLTR_CDAUDIO_ID
= 6,
180 DPFLTR_CLASSPNP_ID
= 8,
182 DPFLTR_REDBOOK_ID
= 10,
183 DPFLTR_STORPROP_ID
= 11,
184 DPFLTR_SCSIPORT_ID
= 12,
185 DPFLTR_SCSIMINIPORT_ID
= 13,
186 DPFLTR_CONFIG_ID
= 14,
187 DPFLTR_I8042PRT_ID
= 15,
188 DPFLTR_SERMOUSE_ID
= 16,
189 DPFLTR_LSERMOUS_ID
= 17,
190 DPFLTR_KBDHID_ID
= 18,
191 DPFLTR_MOUHID_ID
= 19,
192 DPFLTR_KBDCLASS_ID
= 20,
193 DPFLTR_MOUCLASS_ID
= 21,
194 DPFLTR_TWOTRACK_ID
= 22,
195 DPFLTR_WMILIB_ID
= 23,
198 DPFLTR_HALIA64_ID
= 26,
199 DPFLTR_VIDEO_ID
= 27,
200 DPFLTR_SVCHOST_ID
= 28,
201 DPFLTR_VIDEOPRT_ID
= 29,
202 DPFLTR_TCPIP_ID
= 30,
203 DPFLTR_DMSYNTH_ID
= 31,
204 DPFLTR_NTOSPNP_ID
= 32,
205 DPFLTR_FASTFAT_ID
= 33,
206 DPFLTR_SAMSS_ID
= 34,
207 DPFLTR_PNPMGR_ID
= 35,
208 DPFLTR_NETAPI_ID
= 36,
209 DPFLTR_SCSERVER_ID
= 37,
210 DPFLTR_SCCLIENT_ID
= 38,
211 DPFLTR_SERIAL_ID
= 39,
212 DPFLTR_SERENUM_ID
= 40,
214 DPFLTR_BOOTOK_ID
= 42,
215 DPFLTR_BOOTVRFY_ID
= 43,
216 DPFLTR_RPCPROXY_ID
= 44,
217 DPFLTR_AUTOCHK_ID
= 45,
218 DPFLTR_DCOMSS_ID
= 46,
219 DPFLTR_UNIMODEM_ID
= 47,
221 DPFLTR_FLTMGR_ID
= 49,
222 DPFLTR_WMICORE_ID
= 50,
223 DPFLTR_BURNENG_ID
= 51,
224 DPFLTR_IMAPI_ID
= 52,
226 DPFLTR_FUSION_ID
= 54,
227 DPFLTR_IDLETASK_ID
= 55,
228 DPFLTR_SOFTPCI_ID
= 56,
230 DPFLTR_MCHGR_ID
= 58,
232 DPFLTR_PCIIDE_ID
= 60,
233 DPFLTR_FLOPPY_ID
= 61,
235 DPFLTR_TERMSRV_ID
= 63,
236 DPFLTR_W32TIME_ID
= 64,
237 DPFLTR_PREFETCHER_ID
= 65,
238 DPFLTR_RSFILTER_ID
= 66,
239 DPFLTR_FCPORT_ID
= 67,
242 DPFLTR_DMCONFIG_ID
= 70,
243 DPFLTR_DMADMIN_ID
= 71,
244 DPFLTR_WSOCKTRANSPORT_ID
= 72,
246 DPFLTR_PNPMEM_ID
= 74,
247 DPFLTR_PROCESSOR_ID
= 75,
248 DPFLTR_DMSERVER_ID
= 76,
250 DPFLTR_INFINIBAND_ID
= 78,
251 DPFLTR_IHVDRIVER_ID
= 79,
252 DPFLTR_IHVVIDEO_ID
= 80,
253 DPFLTR_IHVAUDIO_ID
= 81,
254 DPFLTR_IHVNETWORK_ID
= 82,
255 DPFLTR_IHVSTREAMING_ID
= 83,
256 DPFLTR_IHVBUS_ID
= 84,
258 DPFLTR_RTLTHREADPOOL_ID
= 86,
260 DPFLTR_TCPIP6_ID
= 88,
261 DPFLTR_ISAPNP_ID
= 89,
263 DPFLTR_STORPORT_ID
= 91,
264 DPFLTR_STORMINIPORT_ID
= 92,
265 DPFLTR_PRINTSPOOLER_ID
= 93,
267 DPFLTR_VDSBAS_ID
= 95,
268 DPFLTR_VDSDYNDR_ID
= 96,
269 DPFLTR_VDSUTIL_ID
= 97,
270 DPFLTR_DFRGIFC_ID
= 98,
271 DPFLTR_DEFAULT_ID
= 99,
273 DPFLTR_DFSC_ID
= 101,
274 DPFLTR_WOW64_ID
= 102,
278 #define MAXIMUM_PROCESSORS 32
280 #define MAXIMUM_WAIT_OBJECTS 64
282 #define EX_RUNDOWN_ACTIVE 0x1
283 #define EX_RUNDOWN_COUNT_SHIFT 0x1
284 #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT)
286 #define METHOD_BUFFERED 0
287 #define METHOD_IN_DIRECT 1
288 #define METHOD_OUT_DIRECT 2
289 #define METHOD_NEITHER 3
291 #define LOW_PRIORITY 0
292 #define LOW_REALTIME_PRIORITY 16
293 #define HIGH_PRIORITY 31
294 #define MAXIMUM_PRIORITY 32
296 #define MAXIMUM_SUSPEND_COUNT MAXCHAR
298 #define MAXIMUM_FILENAME_LENGTH 256
300 #define FILE_SUPERSEDED 0x00000000
301 #define FILE_OPENED 0x00000001
302 #define FILE_CREATED 0x00000002
303 #define FILE_OVERWRITTEN 0x00000003
304 #define FILE_EXISTS 0x00000004
305 #define FILE_DOES_NOT_EXIST 0x00000005
307 #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
308 #define FILE_WRITE_TO_END_OF_FILE 0xffffffff
310 /* also in winnt.h */
311 #define FILE_LIST_DIRECTORY 0x00000001
312 #define FILE_READ_DATA 0x00000001
313 #define FILE_ADD_FILE 0x00000002
314 #define FILE_WRITE_DATA 0x00000002
315 #define FILE_ADD_SUBDIRECTORY 0x00000004
316 #define FILE_APPEND_DATA 0x00000004
317 #define FILE_CREATE_PIPE_INSTANCE 0x00000004
318 #define FILE_READ_EA 0x00000008
319 #define FILE_WRITE_EA 0x00000010
320 #define FILE_EXECUTE 0x00000020
321 #define FILE_TRAVERSE 0x00000020
322 #define FILE_DELETE_CHILD 0x00000040
323 #define FILE_READ_ATTRIBUTES 0x00000080
324 #define FILE_WRITE_ATTRIBUTES 0x00000100
326 #define FILE_SHARE_READ 0x00000001
327 #define FILE_SHARE_WRITE 0x00000002
328 #define FILE_SHARE_DELETE 0x00000004
329 #define FILE_SHARE_VALID_FLAGS 0x00000007
331 #define FILE_ATTRIBUTE_READONLY 0x00000001
332 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
333 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
334 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
335 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
336 #define FILE_ATTRIBUTE_DEVICE 0x00000040
337 #define FILE_ATTRIBUTE_NORMAL 0x00000080
338 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
339 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
340 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
341 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
342 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
343 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
344 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
346 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
347 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
349 #define FILE_COPY_STRUCTURED_STORAGE 0x00000041
350 #define FILE_STRUCTURED_STORAGE 0x00000441
352 #define FILE_VALID_OPTION_FLAGS 0x00ffffff
353 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
354 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
355 #define FILE_VALID_SET_FLAGS 0x00000036
357 #define FILE_SUPERSEDE 0x00000000
358 #define FILE_OPEN 0x00000001
359 #define FILE_CREATE 0x00000002
360 #define FILE_OPEN_IF 0x00000003
361 #define FILE_OVERWRITE 0x00000004
362 #define FILE_OVERWRITE_IF 0x00000005
363 #define FILE_MAXIMUM_DISPOSITION 0x00000005
365 #define FILE_DIRECTORY_FILE 0x00000001
366 #define FILE_WRITE_THROUGH 0x00000002
367 #define FILE_SEQUENTIAL_ONLY 0x00000004
368 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
369 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
370 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
371 #define FILE_NON_DIRECTORY_FILE 0x00000040
372 #define FILE_CREATE_TREE_CONNECTION 0x00000080
373 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
374 #define FILE_NO_EA_KNOWLEDGE 0x00000200
375 #define FILE_OPEN_FOR_RECOVERY 0x00000400
376 #define FILE_RANDOM_ACCESS 0x00000800
377 #define FILE_DELETE_ON_CLOSE 0x00001000
378 #define FILE_OPEN_BY_FILE_ID 0x00002000
379 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
380 #define FILE_NO_COMPRESSION 0x00008000
381 #define FILE_RESERVE_OPFILTER 0x00100000
382 #define FILE_OPEN_REPARSE_POINT 0x00200000
383 #define FILE_OPEN_NO_RECALL 0x00400000
384 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
386 #define FILE_ANY_ACCESS 0x00000000
387 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
388 #define FILE_READ_ACCESS 0x00000001
389 #define FILE_WRITE_ACCESS 0x00000002
391 #define FILE_ALL_ACCESS \
392 (STANDARD_RIGHTS_REQUIRED | \
396 #define FILE_GENERIC_EXECUTE \
397 (STANDARD_RIGHTS_EXECUTE | \
398 FILE_READ_ATTRIBUTES | \
402 #define FILE_GENERIC_READ \
403 (STANDARD_RIGHTS_READ | \
405 FILE_READ_ATTRIBUTES | \
409 #define FILE_GENERIC_WRITE \
410 (STANDARD_RIGHTS_WRITE | \
412 FILE_WRITE_ATTRIBUTES | \
418 #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
420 #define OBJECT_TYPE_CREATE (0x0001)
421 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
423 #define DIRECTORY_QUERY (0x0001)
424 #define DIRECTORY_TRAVERSE (0x0002)
425 #define DIRECTORY_CREATE_OBJECT (0x0004)
426 #define DIRECTORY_CREATE_SUBDIRECTORY (0x0008)
427 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
429 #define EVENT_QUERY_STATE (0x0001)
430 #define EVENT_MODIFY_STATE (0x0002)
431 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
433 #define SEMAPHORE_QUERY_STATE (0x0001)
434 #define SEMAPHORE_MODIFY_STATE (0x0002)
435 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
437 #define THREAD_ALERT (0x0004)
439 #define FM_LOCK_BIT (0x1)
440 #define FM_LOCK_BIT_V (0x0)
441 #define FM_LOCK_WAITER_WOKEN (0x2)
442 #define FM_LOCK_WAITER_INC (0x4)
444 /* Exported object types */
445 extern POBJECT_TYPE NTSYSAPI ExDesktopObjectType
;
446 extern POBJECT_TYPE NTSYSAPI ExEventObjectType
;
447 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType
;
448 extern POBJECT_TYPE NTSYSAPI ExWindowStationObjectType
;
449 extern ULONG NTSYSAPI IoDeviceHandlerObjectSize
;
450 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType
;
451 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType
;
452 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType
;
453 extern POBJECT_TYPE NTSYSAPI IoFileObjectType
;
454 extern POBJECT_TYPE NTSYSAPI PsThreadType
;
455 extern POBJECT_TYPE NTSYSAPI LpcPortObjectType
;
456 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType
;
457 extern POBJECT_TYPE NTSYSAPI PsProcessType
;
459 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
460 extern volatile CCHAR NTSYSAPI KeNumberProcessors
;
462 #if (NTDDI_VERSION >= NTDDI_WINXP)
463 extern CCHAR NTSYSAPI KeNumberProcessors
;
465 //extern PCCHAR KeNumberProcessors;
466 extern NTSYSAPI CCHAR KeNumberProcessors
; //FIXME: Note to Alex: I won't fix this atm, since I prefer to discuss this with you first.
470 #define PROCESSOR_FEATURE_MAX 64
471 #define MAX_WOW64_SHARED_ENTRIES 16
473 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
478 } ALTERNATIVE_ARCHITECTURE_TYPE
;
480 typedef struct _KSYSTEM_TIME
485 } KSYSTEM_TIME
, *PKSYSTEM_TIME
;
487 extern volatile KSYSTEM_TIME KeTickCount
;
489 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
490 #define NX_SUPPORT_POLICY_ALWAYSON 1
491 #define NX_SUPPORT_POLICY_OPTIN 2
492 #define NX_SUPPORT_POLICY_OPTOUT 3
494 typedef struct _KUSER_SHARED_DATA
496 ULONG TickCountLowDeprecated
;
497 ULONG TickCountMultiplier
;
498 volatile KSYSTEM_TIME InterruptTime
;
499 volatile KSYSTEM_TIME SystemTime
;
500 volatile KSYSTEM_TIME TimeZoneBias
;
501 USHORT ImageNumberLow
;
502 USHORT ImageNumberHigh
;
503 WCHAR NtSystemRoot
[260];
504 ULONG MaxStackTraceDepth
;
505 ULONG CryptoExponent
;
507 ULONG LargePageMinimum
;
509 NT_PRODUCT_TYPE NtProductType
;
510 BOOLEAN ProductTypeIsValid
;
511 ULONG NtMajorVersion
;
512 ULONG NtMinorVersion
;
513 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
516 volatile ULONG TimeSlip
;
517 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
518 LARGE_INTEGER SystemExpirationDate
;
520 BOOLEAN KdDebuggerEnabled
;
521 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
522 UCHAR NXSupportPolicy
;
524 volatile ULONG ActiveConsoleId
;
525 volatile ULONG DismountCount
;
526 ULONG ComPlusPackage
;
527 ULONG LastSystemRITEventTickCount
;
528 ULONG NumberOfPhysicalPages
;
529 BOOLEAN SafeBootMode
;
532 ULONGLONG TestRetInstruction
;
534 ULONG SystemCallReturn
;
535 ULONGLONG SystemCallPad
[3];
536 __GNU_EXTENSION
union {
537 volatile KSYSTEM_TIME TickCount
;
538 volatile ULONG64 TickCountQuad
;
541 #if (NTDDI_VERSION >= NTDDI_WS03)
542 LONGLONG ConsoleSessionForegroundProcessId
;
543 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
545 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
546 USHORT UserModeGlobalLogger
[8];
547 ULONG HeapTracingPid
[2];
548 ULONG CritSecTracingPid
[2];
549 __GNU_EXTENSION
union
551 ULONG SharedDataFlags
;
552 __GNU_EXTENSION
struct
554 ULONG DbgErrorPortPresent
:1;
555 ULONG DbgElevationEnabled
:1;
556 ULONG DbgVirtEnabled
:1;
557 ULONG DbgInstallerDetectEnabled
:1;
561 ULONG ImageFileExecutionOptions
;
562 KAFFINITY ActiveProcessorAffinity
;
564 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
567 ** IRP function codes
570 #define IRP_MJ_CREATE 0x00
571 #define IRP_MJ_CREATE_NAMED_PIPE 0x01
572 #define IRP_MJ_CLOSE 0x02
573 #define IRP_MJ_READ 0x03
574 #define IRP_MJ_WRITE 0x04
575 #define IRP_MJ_QUERY_INFORMATION 0x05
576 #define IRP_MJ_SET_INFORMATION 0x06
577 #define IRP_MJ_QUERY_EA 0x07
578 #define IRP_MJ_SET_EA 0x08
579 #define IRP_MJ_FLUSH_BUFFERS 0x09
580 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
581 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
582 #define IRP_MJ_DIRECTORY_CONTROL 0x0c
583 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
584 #define IRP_MJ_DEVICE_CONTROL 0x0e
585 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
586 #define IRP_MJ_SCSI 0x0f
587 #define IRP_MJ_SHUTDOWN 0x10
588 #define IRP_MJ_LOCK_CONTROL 0x11
589 #define IRP_MJ_CLEANUP 0x12
590 #define IRP_MJ_CREATE_MAILSLOT 0x13
591 #define IRP_MJ_QUERY_SECURITY 0x14
592 #define IRP_MJ_SET_SECURITY 0x15
593 #define IRP_MJ_POWER 0x16
594 #define IRP_MJ_SYSTEM_CONTROL 0x17
595 #define IRP_MJ_DEVICE_CHANGE 0x18
596 #define IRP_MJ_QUERY_QUOTA 0x19
597 #define IRP_MJ_SET_QUOTA 0x1a
598 #define IRP_MJ_PNP 0x1b
599 #define IRP_MJ_PNP_POWER 0x1b
600 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
602 #define IRP_MN_QUERY_DIRECTORY 0x01
603 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
605 #define IRP_MN_USER_FS_REQUEST 0x00
606 #define IRP_MN_MOUNT_VOLUME 0x01
607 #define IRP_MN_VERIFY_VOLUME 0x02
608 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
609 #define IRP_MN_TRACK_LINK 0x04
610 #define IRP_MN_KERNEL_CALL 0x04
612 #define IRP_MN_LOCK 0x01
613 #define IRP_MN_UNLOCK_SINGLE 0x02
614 #define IRP_MN_UNLOCK_ALL 0x03
615 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
617 #define IRP_MN_NORMAL 0x00
618 #define IRP_MN_DPC 0x01
619 #define IRP_MN_MDL 0x02
620 #define IRP_MN_COMPLETE 0x04
621 #define IRP_MN_COMPRESSED 0x08
623 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
624 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
625 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
627 #define IRP_MN_SCSI_CLASS 0x01
629 #define IRP_MN_START_DEVICE 0x00
630 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
631 #define IRP_MN_REMOVE_DEVICE 0x02
632 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
633 #define IRP_MN_STOP_DEVICE 0x04
634 #define IRP_MN_QUERY_STOP_DEVICE 0x05
635 #define IRP_MN_CANCEL_STOP_DEVICE 0x06
637 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
638 #define IRP_MN_QUERY_INTERFACE 0x08
639 #define IRP_MN_QUERY_CAPABILITIES 0x09
640 #define IRP_MN_QUERY_RESOURCES 0x0A
641 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
642 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
643 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
645 #define IRP_MN_READ_CONFIG 0x0F
646 #define IRP_MN_WRITE_CONFIG 0x10
647 #define IRP_MN_EJECT 0x11
648 #define IRP_MN_SET_LOCK 0x12
649 #define IRP_MN_QUERY_ID 0x13
650 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
651 #define IRP_MN_QUERY_BUS_INFORMATION 0x15
652 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
653 #define IRP_MN_SURPRISE_REMOVAL 0x17
654 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
656 #define IRP_MN_WAIT_WAKE 0x00
657 #define IRP_MN_POWER_SEQUENCE 0x01
658 #define IRP_MN_SET_POWER 0x02
659 #define IRP_MN_QUERY_POWER 0x03
661 #define IRP_MN_QUERY_ALL_DATA 0x00
662 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
663 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
664 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
665 #define IRP_MN_ENABLE_EVENTS 0x04
666 #define IRP_MN_DISABLE_EVENTS 0x05
667 #define IRP_MN_ENABLE_COLLECTION 0x06
668 #define IRP_MN_DISABLE_COLLECTION 0x07
669 #define IRP_MN_REGINFO 0x08
670 #define IRP_MN_EXECUTE_METHOD 0x09
672 #define IRP_MN_REGINFO_EX 0x0b
674 typedef enum _IO_PAGING_PRIORITY
676 IoPagingPriorityInvalid
,
677 IoPagingPriorityNormal
,
678 IoPagingPriorityHigh
,
679 IoPagingPriorityReserved1
,
680 IoPagingPriorityReserved2
681 } IO_PAGING_PRIORITY
;
683 typedef enum _IO_ALLOCATION_ACTION
{
686 DeallocateObjectKeepRegisters
687 } IO_ALLOCATION_ACTION
, *PIO_ALLOCATION_ACTION
;
689 typedef IO_ALLOCATION_ACTION
690 (DDKAPI
*PDRIVER_CONTROL
)(
691 IN
struct _DEVICE_OBJECT
*DeviceObject
,
693 IN PVOID MapRegisterBase
,
697 typedef EXCEPTION_DISPOSITION
698 (DDKAPI
*PEXCEPTION_ROUTINE
)(
699 IN
struct _EXCEPTION_RECORD
*ExceptionRecord
,
700 IN PVOID EstablisherFrame
,
701 IN OUT
struct _CONTEXT
*ContextRecord
,
702 IN OUT PVOID DispatcherContext
);
705 (DDKAPI
*PDRIVER_LIST_CONTROL
)(
706 IN
struct _DEVICE_OBJECT
*DeviceObject
,
708 IN
struct _SCATTER_GATHER_LIST
*ScatterGather
,
712 (DDKAPI DRIVER_ADD_DEVICE
)(
713 IN
struct _DRIVER_OBJECT
*DriverObject
,
714 IN
struct _DEVICE_OBJECT
*PhysicalDeviceObject
);
715 typedef DRIVER_ADD_DEVICE
*PDRIVER_ADD_DEVICE
;
718 (DDKAPI IO_COMPLETION_ROUTINE
)(
719 IN
struct _DEVICE_OBJECT
*DeviceObject
,
722 typedef IO_COMPLETION_ROUTINE
*PIO_COMPLETION_ROUTINE
;
725 (DDKAPI DRIVER_CANCEL
)(
726 IN
struct _DEVICE_OBJECT
*DeviceObject
,
727 IN
struct _IRP
*Irp
);
728 typedef DRIVER_CANCEL
*PDRIVER_CANCEL
;
731 (DDKAPI
*PKDEFERRED_ROUTINE
)(
732 IN
struct _KDPC
*Dpc
,
733 IN PVOID DeferredContext
,
734 IN PVOID SystemArgument1
,
735 IN PVOID SystemArgument2
);
738 (DDKAPI DRIVER_DISPATCH
)(
739 IN
struct _DEVICE_OBJECT
*DeviceObject
,
740 IN
struct _IRP
*Irp
);
741 typedef DRIVER_DISPATCH
*PDRIVER_DISPATCH
;
744 (DDKAPI
*PIO_DPC_ROUTINE
)(
745 IN
struct _KDPC
*Dpc
,
746 IN
struct _DEVICE_OBJECT
*DeviceObject
,
751 (DDKAPI
*PMM_DLL_INITIALIZE
)(
752 IN PUNICODE_STRING RegistryPath
);
755 (DDKAPI
*PMM_DLL_UNLOAD
)(
759 (DDKAPI
*PDRIVER_ENTRY
)(
760 IN
struct _DRIVER_OBJECT
*DriverObject
,
761 IN PUNICODE_STRING RegistryPath
);
764 (DDKAPI DRIVER_INITIALIZE
)(
765 IN
struct _DRIVER_OBJECT
*DriverObject
,
766 IN PUNICODE_STRING RegistryPath
);
767 typedef DRIVER_INITIALIZE
*PDRIVER_INITIALIZE
;
770 (DDKAPI KSERVICE_ROUTINE
)(
771 IN
struct _KINTERRUPT
*Interrupt
,
772 IN PVOID ServiceContext
);
773 typedef KSERVICE_ROUTINE
*PKSERVICE_ROUTINE
;
776 (DDKAPI
*PIO_TIMER_ROUTINE
)(
777 IN
struct _DEVICE_OBJECT
*DeviceObject
,
781 (DDKAPI
*PDRIVER_REINITIALIZE
)(
782 IN
struct _DRIVER_OBJECT
*DriverObject
,
787 (DDKAPI DRIVER_STARTIO
)(
788 IN
struct _DEVICE_OBJECT
*DeviceObject
,
789 IN
struct _IRP
*Irp
);
790 typedef DRIVER_STARTIO
*PDRIVER_STARTIO
;
793 (DDKAPI
*PKSYNCHRONIZE_ROUTINE
)(
794 IN PVOID SynchronizeContext
);
797 (DDKAPI DRIVER_UNLOAD
)(
798 IN
struct _DRIVER_OBJECT
*DriverObject
);
799 typedef DRIVER_UNLOAD
*PDRIVER_UNLOAD
;
804 ** Plug and Play structures
808 (DDKAPI
*PINTERFACE_REFERENCE
)(
812 (DDKAPI
*PINTERFACE_DEREFERENCE
)(
816 (DDKAPI
*PTRANSLATE_BUS_ADDRESS
)(
818 IN PHYSICAL_ADDRESS BusAddress
,
820 IN OUT PULONG AddressSpace
,
821 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
823 typedef struct _DMA_ADAPTER
*
824 (DDKAPI
*PGET_DMA_ADAPTER
)(
826 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
827 OUT PULONG NumberOfMapRegisters
);
830 (DDKAPI
*PGET_SET_DEVICE_DATA
)(
837 /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
838 #define PCI_USE_SUBSYSTEM_IDS 0x00000001
839 #define PCI_USE_REVISION 0x00000002
840 #define PCI_USE_VENDEV_IDS 0x00000004
841 #define PCI_USE_CLASS_SUBCLASS 0x00000008
842 #define PCI_USE_PROGIF 0x00000010
843 #define PCI_USE_LOCAL_BUS 0x00000020
844 #define PCI_USE_LOCAL_DEVICE 0x00000040
846 typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS
{
857 } PCI_DEVICE_PRESENCE_PARAMETERS
, *PPCI_DEVICE_PRESENCE_PARAMETERS
;
860 (DDKAPI
*PPCI_IS_DEVICE_PRESENT
)(
864 IN USHORT SubVendorID
,
865 IN USHORT SubSystemID
,
869 (DDKAPI
*PPCI_IS_DEVICE_PRESENT_EX
)(
871 IN PPCI_DEVICE_PRESENCE_PARAMETERS Parameters
);
873 typedef union _POWER_STATE
{
874 SYSTEM_POWER_STATE SystemState
;
875 DEVICE_POWER_STATE DeviceState
;
876 } POWER_STATE
, *PPOWER_STATE
;
878 typedef enum _POWER_STATE_TYPE
{
881 } POWER_STATE_TYPE
, *PPOWER_STATE_TYPE
;
883 typedef struct _BUS_INTERFACE_STANDARD
{
887 PINTERFACE_REFERENCE InterfaceReference
;
888 PINTERFACE_DEREFERENCE InterfaceDereference
;
889 PTRANSLATE_BUS_ADDRESS TranslateBusAddress
;
890 PGET_DMA_ADAPTER GetDmaAdapter
;
891 PGET_SET_DEVICE_DATA SetBusData
;
892 PGET_SET_DEVICE_DATA GetBusData
;
893 } BUS_INTERFACE_STANDARD
, *PBUS_INTERFACE_STANDARD
;
895 typedef struct _PCI_DEVICE_PRESENT_INTERFACE
{
899 PINTERFACE_REFERENCE InterfaceReference
;
900 PINTERFACE_DEREFERENCE InterfaceDereference
;
901 PPCI_IS_DEVICE_PRESENT IsDevicePresent
;
902 PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx
;
903 } PCI_DEVICE_PRESENT_INTERFACE
, *PPCI_DEVICE_PRESENT_INTERFACE
;
905 typedef struct _DEVICE_CAPABILITIES
{
910 ULONG LockSupported
: 1;
911 ULONG EjectSupported
: 1;
913 ULONG DockDevice
: 1;
915 ULONG SilentInstall
: 1;
916 ULONG RawDeviceOK
: 1;
917 ULONG SurpriseRemovalOK
: 1;
918 ULONG WakeFromD0
: 1;
919 ULONG WakeFromD1
: 1;
920 ULONG WakeFromD2
: 1;
921 ULONG WakeFromD3
: 1;
922 ULONG HardwareDisabled
: 1;
923 ULONG NonDynamic
: 1;
924 ULONG WarmEjectSupported
: 1;
925 ULONG NoDisplayInUI
: 1;
929 DEVICE_POWER_STATE DeviceState
[PowerSystemMaximum
];
930 SYSTEM_POWER_STATE SystemWake
;
931 DEVICE_POWER_STATE DeviceWake
;
935 } DEVICE_CAPABILITIES
, *PDEVICE_CAPABILITIES
;
937 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION
{
941 GUID InterfaceClassGuid
;
942 PUNICODE_STRING SymbolicLinkName
;
943 } DEVICE_INTERFACE_CHANGE_NOTIFICATION
, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION
;
945 typedef struct _HWPROFILE_CHANGE_NOTIFICATION
{
949 } HWPROFILE_CHANGE_NOTIFICATION
, *PHWPROFILE_CHANGE_NOTIFICATION
;
953 typedef struct _INTERFACE
{
957 PINTERFACE_REFERENCE InterfaceReference
;
958 PINTERFACE_DEREFERENCE InterfaceDereference
;
959 } INTERFACE
, *PINTERFACE
;
961 typedef struct _PLUGPLAY_NOTIFICATION_HEADER
{
965 } PLUGPLAY_NOTIFICATION_HEADER
, *PPLUGPLAY_NOTIFICATION_HEADER
;
967 typedef ULONG PNP_DEVICE_STATE
, *PPNP_DEVICE_STATE
;
969 /* PNP_DEVICE_STATE */
971 #define PNP_DEVICE_DISABLED 0x00000001
972 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
973 #define PNP_DEVICE_FAILED 0x00000004
974 #define PNP_DEVICE_REMOVED 0x00000008
975 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
976 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
978 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION
{
982 struct _FILE_OBJECT
*FileObject
;
983 LONG NameBufferOffset
;
984 UCHAR CustomDataBuffer
[1];
985 } TARGET_DEVICE_CUSTOM_NOTIFICATION
, *PTARGET_DEVICE_CUSTOM_NOTIFICATION
;
987 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION
{
991 struct _FILE_OBJECT
*FileObject
;
992 } TARGET_DEVICE_REMOVAL_NOTIFICATION
, *PTARGET_DEVICE_REMOVAL_NOTIFICATION
;
994 typedef enum _BUS_QUERY_ID_TYPE
{
997 BusQueryCompatibleIDs
,
999 BusQueryDeviceSerialNumber
1000 } BUS_QUERY_ID_TYPE
, *PBUS_QUERY_ID_TYPE
;
1002 typedef enum _DEVICE_TEXT_TYPE
{
1003 DeviceTextDescription
,
1004 DeviceTextLocationInformation
1005 } DEVICE_TEXT_TYPE
, *PDEVICE_TEXT_TYPE
;
1007 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE
{
1008 DeviceUsageTypeUndefined
,
1009 DeviceUsageTypePaging
,
1010 DeviceUsageTypeHibernation
,
1011 DeviceUsageTypeDumpFile
1012 } DEVICE_USAGE_NOTIFICATION_TYPE
;
1014 typedef struct _POWER_SEQUENCE
{
1018 } POWER_SEQUENCE
, *PPOWER_SEQUENCE
;
1021 DevicePropertyDeviceDescription
,
1022 DevicePropertyHardwareID
,
1023 DevicePropertyCompatibleIDs
,
1024 DevicePropertyBootConfiguration
,
1025 DevicePropertyBootConfigurationTranslated
,
1026 DevicePropertyClassName
,
1027 DevicePropertyClassGuid
,
1028 DevicePropertyDriverKeyName
,
1029 DevicePropertyManufacturer
,
1030 DevicePropertyFriendlyName
,
1031 DevicePropertyLocationInformation
,
1032 DevicePropertyPhysicalDeviceObjectName
,
1033 DevicePropertyBusTypeGuid
,
1034 DevicePropertyLegacyBusType
,
1035 DevicePropertyBusNumber
,
1036 DevicePropertyEnumeratorName
,
1037 DevicePropertyAddress
,
1038 DevicePropertyUINumber
,
1039 DevicePropertyInstallState
,
1040 DevicePropertyRemovalPolicy
1041 } DEVICE_REGISTRY_PROPERTY
;
1043 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY
{
1044 EventCategoryReserved
,
1045 EventCategoryHardwareProfileChange
,
1046 EventCategoryDeviceInterfaceChange
,
1047 EventCategoryTargetDeviceChange
1048 } IO_NOTIFICATION_EVENT_CATEGORY
;
1050 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
1053 (DDKAPI
*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE
)(
1054 IN PVOID NotificationStructure
,
1058 (DDKAPI
*PDEVICE_CHANGE_COMPLETE_CALLBACK
)(
1063 ** System structures
1066 #define SYMBOLIC_LINK_QUERY 0x0001
1067 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
1069 /* also in winnt,h */
1070 #define DUPLICATE_CLOSE_SOURCE 0x00000001
1071 #define DUPLICATE_SAME_ACCESS 0x00000002
1072 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
1075 typedef struct _OBJECT_NAME_INFORMATION
{
1076 UNICODE_STRING Name
;
1077 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
1079 typedef struct _IO_STATUS_BLOCK
{
1080 _ANONYMOUS_UNION
union {
1084 ULONG_PTR Information
;
1085 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
1088 (DDKAPI
*PIO_APC_ROUTINE
)(
1089 IN PVOID ApcContext
,
1090 IN PIO_STATUS_BLOCK IoStatusBlock
,
1094 (DDKAPI
*PKNORMAL_ROUTINE
)(
1095 IN PVOID NormalContext
,
1096 IN PVOID SystemArgument1
,
1097 IN PVOID SystemArgument2
);
1100 (DDKAPI
*PKKERNEL_ROUTINE
)(
1101 IN
struct _KAPC
*Apc
,
1102 IN OUT PKNORMAL_ROUTINE
*NormalRoutine
,
1103 IN OUT PVOID
*NormalContext
,
1104 IN OUT PVOID
*SystemArgument1
,
1105 IN OUT PVOID
*SystemArgument2
);
1108 (DDKAPI
*PKRUNDOWN_ROUTINE
)(
1109 IN
struct _KAPC
*Apc
);
1112 (DDKAPI
*PKTRANSFER_ROUTINE
)(
1115 typedef struct _KAPC
1122 struct _KTHREAD
*Thread
;
1123 LIST_ENTRY ApcListEntry
;
1124 PKKERNEL_ROUTINE KernelRoutine
;
1125 PKRUNDOWN_ROUTINE RundownRoutine
;
1126 PKNORMAL_ROUTINE NormalRoutine
;
1127 PVOID NormalContext
;
1128 PVOID SystemArgument1
;
1129 PVOID SystemArgument2
;
1130 CCHAR ApcStateIndex
;
1131 KPROCESSOR_MODE ApcMode
;
1133 } KAPC
, *PKAPC
, *RESTRICTED_POINTER PRKAPC
;
1135 typedef struct _KDEVICE_QUEUE
{
1138 LIST_ENTRY DeviceListHead
;
1141 } KDEVICE_QUEUE
, *PKDEVICE_QUEUE
, *RESTRICTED_POINTER PRKDEVICE_QUEUE
;
1143 typedef struct _KDEVICE_QUEUE_ENTRY
{
1144 LIST_ENTRY DeviceListEntry
;
1147 } KDEVICE_QUEUE_ENTRY
, *PKDEVICE_QUEUE_ENTRY
,
1148 *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY
;
1150 #define LOCK_QUEUE_WAIT 1
1151 #define LOCK_QUEUE_OWNER 2
1152 #define LOCK_QUEUE_TIMER_LOCK_SHIFT 4
1153 #define LOCK_QUEUE_TIMER_TABLE_LOCKS (1 << (8 - LOCK_QUEUE_TIMER_LOCK_SHIFT))
1155 typedef enum _KSPIN_LOCK_QUEUE_NUMBER
1157 LockQueueDispatcherLock
,
1158 LockQueueExpansionLock
,
1160 LockQueueSystemSpaceLock
,
1162 LockQueueMasterLock
,
1163 LockQueueNonPagedPoolLock
,
1164 LockQueueIoCancelLock
,
1165 LockQueueWorkQueueLock
,
1167 LockQueueIoDatabaseLock
,
1168 LockQueueIoCompletionLock
,
1169 LockQueueNtfsStructLock
,
1170 LockQueueAfdWorkQueueLock
,
1172 LockQueueMmNonPagedPoolLock
,
1173 LockQueueUnusedSpare16
,
1174 LockQueueTimerTableLock
,
1175 LockQueueMaximumLock
= LockQueueTimerTableLock
+ LOCK_QUEUE_TIMER_TABLE_LOCKS
1176 } KSPIN_LOCK_QUEUE_NUMBER
, *PKSPIN_LOCK_QUEUE_NUMBER
;
1178 typedef struct _KSPIN_LOCK_QUEUE
{
1179 struct _KSPIN_LOCK_QUEUE
*volatile Next
;
1180 PKSPIN_LOCK
volatile Lock
;
1181 } KSPIN_LOCK_QUEUE
, *PKSPIN_LOCK_QUEUE
;
1183 typedef struct _KLOCK_QUEUE_HANDLE
{
1184 KSPIN_LOCK_QUEUE LockQueue
;
1186 } KLOCK_QUEUE_HANDLE
, *PKLOCK_QUEUE_HANDLE
;
1188 #define DPC_NORMAL 0
1189 #define DPC_THREADED 1
1191 #define ASSERT_APC(Object) \
1192 ASSERT((Object)->Type == ApcObject)
1194 #define ASSERT_DPC(Object) \
1195 ASSERT(((Object)->Type == 0) || \
1196 ((Object)->Type == DpcObject) || \
1197 ((Object)->Type == ThreadedDpcObject))
1199 #define ASSERT_DEVICE_QUEUE(Object) \
1200 ASSERT((Object)->Type == DeviceQueueObject)
1202 typedef struct _KDPC
1207 LIST_ENTRY DpcListEntry
;
1208 PKDEFERRED_ROUTINE DeferredRoutine
;
1209 PVOID DeferredContext
;
1210 PVOID SystemArgument1
;
1211 PVOID SystemArgument2
;
1212 volatile PVOID DpcData
;
1213 } KDPC
, *PKDPC
, *RESTRICTED_POINTER PRKDPC
;
1215 typedef PVOID PKIPI_CONTEXT
;
1219 (NTAPI
*PKIPI_WORKER
)(
1220 IN PKIPI_CONTEXT PacketContext
,
1221 IN PVOID Parameter1
,
1222 IN PVOID Parameter2
,
1226 typedef struct _WAIT_CONTEXT_BLOCK
{
1227 KDEVICE_QUEUE_ENTRY WaitQueueEntry
;
1228 PDRIVER_CONTROL DeviceRoutine
;
1229 PVOID DeviceContext
;
1230 ULONG NumberOfMapRegisters
;
1233 PKDPC BufferChainingDpc
;
1234 } WAIT_CONTEXT_BLOCK
, *PWAIT_CONTEXT_BLOCK
;
1236 #define ASSERT_GATE(object) \
1237 ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
1238 (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
1240 typedef struct _KGATE
1242 DISPATCHER_HEADER Header
;
1243 } KGATE
, *PKGATE
, *RESTRICTED_POINTER PRKGATE
;
1245 #define GM_LOCK_BIT 0x1
1246 #define GM_LOCK_BIT_V 0x0
1247 #define GM_LOCK_WAITER_WOKEN 0x2
1248 #define GM_LOCK_WAITER_INC 0x4
1250 typedef struct _KGUARDED_MUTEX
1252 volatile LONG Count
;
1256 __GNU_EXTENSION
union
1258 __GNU_EXTENSION
struct
1260 SHORT KernelApcDisable
;
1261 SHORT SpecialApcDisable
;
1263 ULONG CombinedApcDisable
;
1265 } KGUARDED_MUTEX
, *PKGUARDED_MUTEX
;
1267 #define TIMER_TABLE_SIZE 512
1268 #define TIMER_TABLE_SHIFT 9
1270 typedef struct _KTIMER
{
1271 DISPATCHER_HEADER Header
;
1272 ULARGE_INTEGER DueTime
;
1273 LIST_ENTRY TimerListEntry
;
1276 } KTIMER
, *PKTIMER
, *RESTRICTED_POINTER PRKTIMER
;
1278 #define ASSERT_TIMER(E) \
1279 ASSERT(((E)->Header.Type == TimerNotificationObject) || \
1280 ((E)->Header.Type == TimerSynchronizationObject))
1282 #define ASSERT_MUTANT(E) \
1283 ASSERT((E)->Header.Type == MutantObject)
1285 #define ASSERT_SEMAPHORE(E) \
1286 ASSERT((E)->Header.Type == SemaphoreObject)
1288 #define ASSERT_EVENT(E) \
1289 ASSERT(((E)->Header.Type == NotificationEvent) || \
1290 ((E)->Header.Type == SynchronizationEvent))
1292 typedef struct _KMUTANT
{
1293 DISPATCHER_HEADER Header
;
1294 LIST_ENTRY MutantListEntry
;
1295 struct _KTHREAD
*RESTRICTED_POINTER OwnerThread
;
1298 } KMUTANT
, *PKMUTANT
, *RESTRICTED_POINTER PRKMUTANT
, KMUTEX
, *PKMUTEX
, *RESTRICTED_POINTER PRKMUTEX
;
1300 typedef enum _TIMER_TYPE
{
1302 SynchronizationTimer
1305 #define EVENT_INCREMENT 1
1306 #define IO_NO_INCREMENT 0
1307 #define IO_CD_ROM_INCREMENT 1
1308 #define IO_DISK_INCREMENT 1
1309 #define IO_KEYBOARD_INCREMENT 6
1310 #define IO_MAILSLOT_INCREMENT 2
1311 #define IO_MOUSE_INCREMENT 6
1312 #define IO_NAMED_PIPE_INCREMENT 2
1313 #define IO_NETWORK_INCREMENT 2
1314 #define IO_PARALLEL_INCREMENT 1
1315 #define IO_SERIAL_INCREMENT 2
1316 #define IO_SOUND_INCREMENT 8
1317 #define IO_VIDEO_INCREMENT 1
1318 #define SEMAPHORE_INCREMENT 1
1320 #define MM_MAXIMUM_DISK_IO_SIZE (0x10000)
1322 typedef struct _IRP
{
1325 struct _MDL
*MdlAddress
;
1328 struct _IRP
*MasterIrp
;
1329 volatile LONG IrpCount
;
1332 LIST_ENTRY ThreadListEntry
;
1333 IO_STATUS_BLOCK IoStatus
;
1334 KPROCESSOR_MODE RequestorMode
;
1335 BOOLEAN PendingReturned
;
1337 CHAR CurrentLocation
;
1340 CCHAR ApcEnvironment
;
1341 UCHAR AllocationFlags
;
1342 PIO_STATUS_BLOCK UserIosb
;
1346 PIO_APC_ROUTINE UserApcRoutine
;
1347 PVOID UserApcContext
;
1348 } AsynchronousParameters
;
1349 LARGE_INTEGER AllocationSize
;
1351 volatile PDRIVER_CANCEL CancelRoutine
;
1355 _ANONYMOUS_UNION
union {
1356 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
1357 _ANONYMOUS_STRUCT
struct {
1358 PVOID DriverContext
[4];
1362 PCHAR AuxiliaryBuffer
;
1363 _ANONYMOUS_STRUCT
struct {
1364 LIST_ENTRY ListEntry
;
1365 _ANONYMOUS_UNION
union {
1366 struct _IO_STACK_LOCATION
*CurrentStackLocation
;
1370 struct _FILE_OBJECT
*OriginalFileObject
;
1373 PVOID CompletionKey
;
1376 typedef struct _IRP
*PIRP
;
1380 #define SL_FORCE_ACCESS_CHECK 0x01
1381 #define SL_OPEN_PAGING_FILE 0x02
1382 #define SL_OPEN_TARGET_DIRECTORY 0x04
1383 #define SL_CASE_SENSITIVE 0x80
1385 #define SL_KEY_SPECIFIED 0x01
1386 #define SL_OVERRIDE_VERIFY_VOLUME 0x02
1387 #define SL_WRITE_THROUGH 0x04
1388 #define SL_FT_SEQUENTIAL_WRITE 0x08
1390 #define SL_FAIL_IMMEDIATELY 0x01
1391 #define SL_EXCLUSIVE_LOCK 0x02
1393 #define SL_RESTART_SCAN 0x01
1394 #define SL_RETURN_SINGLE_ENTRY 0x02
1395 #define SL_INDEX_SPECIFIED 0x04
1397 #define SL_WATCH_TREE 0x01
1399 #define SL_ALLOW_RAW_MOUNT 0x01
1401 #define CTL_CODE(DeviceType, Function, Method, Access)( \
1402 ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
1404 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
1409 IRP_PAGING_IO
= 0x2,
1410 IRP_MOUNT_COMPLETION
= 0x2,
1411 IRP_SYNCHRONOUS_API
= 0x4,
1412 IRP_ASSOCIATED_IRP
= 0x8,
1413 IRP_BUFFERED_IO
= 0x10,
1414 IRP_DEALLOCATE_BUFFER
= 0x20,
1415 IRP_INPUT_OPERATION
= 0x40,
1416 IRP_SYNCHRONOUS_PAGING_IO
= 0x40,
1417 IRP_CREATE_OPERATION
= 0x80,
1418 IRP_READ_OPERATION
= 0x100,
1419 IRP_WRITE_OPERATION
= 0x200,
1420 IRP_CLOSE_OPERATION
= 0x400,
1421 IRP_DEFER_IO_COMPLETION
= 0x800,
1422 IRP_OB_QUERY_NAME
= 0x1000,
1423 IRP_HOLD_DEVICE_QUEUE
= 0x2000,
1424 IRP_RETRY_IO_COMPLETION
= 0x4000
1427 #define IRP_QUOTA_CHARGED 0x01
1428 #define IRP_ALLOCATED_MUST_SUCCEED 0x02
1429 #define IRP_ALLOCATED_FIXED_SIZE 0x04
1430 #define IRP_LOOKASIDE_ALLOCATION 0x08
1432 typedef struct _BOOTDISK_INFORMATION
{
1433 LONGLONG BootPartitionOffset
;
1434 LONGLONG SystemPartitionOffset
;
1435 ULONG BootDeviceSignature
;
1436 ULONG SystemDeviceSignature
;
1437 } BOOTDISK_INFORMATION
, *PBOOTDISK_INFORMATION
;
1439 typedef struct _BOOTDISK_INFORMATION_EX
{
1440 LONGLONG BootPartitionOffset
;
1441 LONGLONG SystemPartitionOffset
;
1442 ULONG BootDeviceSignature
;
1443 ULONG SystemDeviceSignature
;
1444 GUID BootDeviceGuid
;
1445 GUID SystemDeviceGuid
;
1446 BOOLEAN BootDeviceIsGpt
;
1447 BOOLEAN SystemDeviceIsGpt
;
1448 } BOOTDISK_INFORMATION_EX
, *PBOOTDISK_INFORMATION_EX
;
1450 typedef struct _EISA_MEMORY_TYPE
{
1451 UCHAR ReadWrite
: 1;
1453 UCHAR Reserved0
: 1;
1456 UCHAR Reserved1
: 1;
1457 UCHAR MoreEntries
: 1;
1458 } EISA_MEMORY_TYPE
, *PEISA_MEMORY_TYPE
;
1460 #include <pshpack1.h>
1461 typedef struct _EISA_MEMORY_CONFIGURATION
{
1462 EISA_MEMORY_TYPE ConfigurationByte
;
1464 USHORT AddressLowWord
;
1465 UCHAR AddressHighByte
;
1467 } EISA_MEMORY_CONFIGURATION
, *PEISA_MEMORY_CONFIGURATION
;
1468 #include <poppack.h>
1470 typedef struct _EISA_IRQ_DESCRIPTOR
{
1471 UCHAR Interrupt
: 4;
1473 UCHAR LevelTriggered
: 1;
1475 UCHAR MoreEntries
: 1;
1476 } EISA_IRQ_DESCRIPTOR
, *PEISA_IRQ_DESCRIPTOR
;
1478 typedef struct _EISA_IRQ_CONFIGURATION
{
1479 EISA_IRQ_DESCRIPTOR ConfigurationByte
;
1481 } EISA_IRQ_CONFIGURATION
, *PEISA_IRQ_CONFIGURATION
;
1483 typedef struct _DMA_CONFIGURATION_BYTE0
{
1487 UCHAR MoreEntries
: 1;
1488 } DMA_CONFIGURATION_BYTE0
;
1490 typedef struct _DMA_CONFIGURATION_BYTE1
{
1491 UCHAR Reserved0
: 2;
1492 UCHAR TransferSize
: 2;
1494 UCHAR Reserved1
: 2;
1495 } DMA_CONFIGURATION_BYTE1
;
1497 typedef struct _EISA_DMA_CONFIGURATION
{
1498 DMA_CONFIGURATION_BYTE0 ConfigurationByte0
;
1499 DMA_CONFIGURATION_BYTE1 ConfigurationByte1
;
1500 } EISA_DMA_CONFIGURATION
, *PEISA_DMA_CONFIGURATION
;
1502 #include <pshpack1.h>
1503 typedef struct _EISA_PORT_DESCRIPTOR
{
1504 UCHAR NumberPorts
: 5;
1507 UCHAR MoreEntries
: 1;
1508 } EISA_PORT_DESCRIPTOR
, *PEISA_PORT_DESCRIPTOR
;
1510 typedef struct _EISA_PORT_CONFIGURATION
{
1511 EISA_PORT_DESCRIPTOR Configuration
;
1513 } EISA_PORT_CONFIGURATION
, *PEISA_PORT_CONFIGURATION
;
1514 #include <poppack.h>
1516 typedef struct _CM_EISA_FUNCTION_INFORMATION
{
1520 UCHAR MinorRevision
;
1521 UCHAR MajorRevision
;
1522 UCHAR Selections
[26];
1523 UCHAR FunctionFlags
;
1524 UCHAR TypeString
[80];
1525 EISA_MEMORY_CONFIGURATION EisaMemory
[9];
1526 EISA_IRQ_CONFIGURATION EisaIrq
[7];
1527 EISA_DMA_CONFIGURATION EisaDma
[4];
1528 EISA_PORT_CONFIGURATION EisaPort
[20];
1529 UCHAR InitializationData
[60];
1530 } CM_EISA_FUNCTION_INFORMATION
, *PCM_EISA_FUNCTION_INFORMATION
;
1532 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
1534 #define EISA_FUNCTION_ENABLED 0x80
1535 #define EISA_FREE_FORM_DATA 0x40
1536 #define EISA_HAS_PORT_INIT_ENTRY 0x20
1537 #define EISA_HAS_PORT_RANGE 0x10
1538 #define EISA_HAS_DMA_ENTRY 0x08
1539 #define EISA_HAS_IRQ_ENTRY 0x04
1540 #define EISA_HAS_MEMORY_ENTRY 0x02
1541 #define EISA_HAS_TYPE_ENTRY 0x01
1542 #define EISA_HAS_INFORMATION \
1543 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
1544 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
1546 typedef struct _CM_EISA_SLOT_INFORMATION
{
1549 UCHAR MajorRevision
;
1550 UCHAR MinorRevision
;
1552 UCHAR NumberFunctions
;
1553 UCHAR FunctionInformation
;
1555 } CM_EISA_SLOT_INFORMATION
, *PCM_EISA_SLOT_INFORMATION
;
1557 /* CM_EISA_SLOT_INFORMATION.ReturnCode */
1559 #define EISA_INVALID_SLOT 0x80
1560 #define EISA_INVALID_FUNCTION 0x81
1561 #define EISA_INVALID_CONFIGURATION 0x82
1562 #define EISA_EMPTY_SLOT 0x83
1563 #define EISA_INVALID_BIOS_CALL 0x86
1565 typedef struct _CM_FLOPPY_DEVICE_DATA
{
1571 UCHAR StepRateHeadUnloadTime
;
1574 UCHAR SectorLengthCode
;
1575 UCHAR SectorPerTrack
;
1576 UCHAR ReadWriteGapLength
;
1577 UCHAR DataTransferLength
;
1578 UCHAR FormatGapLength
;
1579 UCHAR FormatFillCharacter
;
1580 UCHAR HeadSettleTime
;
1581 UCHAR MotorSettleTime
;
1582 UCHAR MaximumTrackValue
;
1583 UCHAR DataTransferRate
;
1584 } CM_FLOPPY_DEVICE_DATA
, *PCM_FLOPPY_DEVICE_DATA
;
1586 typedef struct _PNP_BUS_INFORMATION
{
1588 INTERFACE_TYPE LegacyBusType
;
1590 } PNP_BUS_INFORMATION
, *PPNP_BUS_INFORMATION
;
1592 #include <pshpack1.h>
1593 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
1595 #define CmResourceTypeNull 0
1596 #define CmResourceTypePort 1
1597 #define CmResourceTypeInterrupt 2
1598 #define CmResourceTypeMemory 3
1599 #define CmResourceTypeDma 4
1600 #define CmResourceTypeDeviceSpecific 5
1601 #define CmResourceTypeBusNumber 6
1602 #define CmResourceTypeMaximum 7
1603 #define CmResourceTypeNonArbitrated 128
1604 #define CmResourceTypeConfigData 128
1605 #define CmResourceTypeDevicePrivate 129
1606 #define CmResourceTypePcCardConfig 130
1607 #define CmResourceTypeMfCardConfig 131
1609 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
1611 typedef enum _CM_SHARE_DISPOSITION
{
1612 CmResourceShareUndetermined
,
1613 CmResourceShareDeviceExclusive
,
1614 CmResourceShareDriverExclusive
,
1615 CmResourceShareShared
1616 } CM_SHARE_DISPOSITION
;
1618 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
1620 #define CM_RESOURCE_PORT_MEMORY 0x0000
1621 #define CM_RESOURCE_PORT_IO 0x0001
1622 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
1623 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
1624 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
1625 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
1626 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
1627 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
1629 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
1631 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
1632 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
1634 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
1636 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
1637 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
1638 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
1639 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
1640 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
1641 #define CM_RESOURCE_MEMORY_24 0x0010
1642 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
1644 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
1646 #define CM_RESOURCE_DMA_8 0x0000
1647 #define CM_RESOURCE_DMA_16 0x0001
1648 #define CM_RESOURCE_DMA_32 0x0002
1649 #define CM_RESOURCE_DMA_8_AND_16 0x0004
1650 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
1651 #define CM_RESOURCE_DMA_TYPE_A 0x0010
1652 #define CM_RESOURCE_DMA_TYPE_B 0x0020
1653 #define CM_RESOURCE_DMA_TYPE_F 0x0040
1655 typedef struct _CM_PARTIAL_RESOURCE_LIST
{
1659 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
1660 } CM_PARTIAL_RESOURCE_LIST
, *PCM_PARTIAL_RESOURCE_LIST
;
1662 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
{
1663 INTERFACE_TYPE InterfaceType
;
1665 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
1666 } CM_FULL_RESOURCE_DESCRIPTOR
, *PCM_FULL_RESOURCE_DESCRIPTOR
;
1668 typedef struct _CM_RESOURCE_LIST
{
1670 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
1671 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
1673 typedef struct _CM_INT13_DRIVE_PARAMETER
{
1676 USHORT SectorsPerTrack
;
1678 USHORT NumberDrives
;
1679 } CM_INT13_DRIVE_PARAMETER
, *PCM_INT13_DRIVE_PARAMETER
;
1681 typedef struct _CM_PNP_BIOS_DEVICE_NODE
1686 UCHAR DeviceType
[3];
1687 USHORT DeviceAttributes
;
1688 } CM_PNP_BIOS_DEVICE_NODE
,*PCM_PNP_BIOS_DEVICE_NODE
;
1690 typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK
1695 USHORT ControlField
;
1697 ULONG EventFlagAddress
;
1698 USHORT RealModeEntryOffset
;
1699 USHORT RealModeEntrySegment
;
1700 USHORT ProtectedModeEntryOffset
;
1701 ULONG ProtectedModeCodeBaseAddress
;
1703 USHORT RealModeDataBaseAddress
;
1704 ULONG ProtectedModeDataBaseAddress
;
1705 } CM_PNP_BIOS_INSTALLATION_CHECK
, *PCM_PNP_BIOS_INSTALLATION_CHECK
;
1707 #include <poppack.h>
1710 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
1712 ULONG BytesPerSector
;
1713 ULONG NumberOfCylinders
;
1714 ULONG SectorsPerTrack
;
1715 ULONG NumberOfHeads
;
1716 } CM_DISK_GEOMETRY_DEVICE_DATA
, *PCM_DISK_GEOMETRY_DEVICE_DATA
;
1718 typedef struct _CM_KEYBOARD_DEVICE_DATA
{
1723 USHORT KeyboardFlags
;
1724 } CM_KEYBOARD_DEVICE_DATA
, *PCM_KEYBOARD_DEVICE_DATA
;
1726 #define KEYBOARD_INSERT_ON 0x08
1727 #define KEYBOARD_CAPS_LOCK_ON 0x04
1728 #define KEYBOARD_NUM_LOCK_ON 0x02
1729 #define KEYBOARD_SCROLL_LOCK_ON 0x01
1730 #define KEYBOARD_ALT_KEY_DOWN 0x80
1731 #define KEYBOARD_CTRL_KEY_DOWN 0x40
1732 #define KEYBOARD_LEFT_SHIFT_DOWN 0x20
1733 #define KEYBOARD_RIGHT_SHIFT_DOWN 0x10
1735 typedef struct _CM_MCA_POS_DATA
{
1741 } CM_MCA_POS_DATA
, *PCM_MCA_POS_DATA
;
1743 typedef struct CM_Power_Data_s
{
1745 DEVICE_POWER_STATE PD_MostRecentPowerState
;
1746 ULONG PD_Capabilities
;
1750 DEVICE_POWER_STATE PD_PowerStateMapping
[PowerSystemMaximum
];
1751 } CM_POWER_DATA
, *PCM_POWER_DATA
;
1753 #define PDCAP_D0_SUPPORTED 0x00000001
1754 #define PDCAP_D1_SUPPORTED 0x00000002
1755 #define PDCAP_D2_SUPPORTED 0x00000004
1756 #define PDCAP_D3_SUPPORTED 0x00000008
1757 #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
1758 #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
1759 #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
1760 #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
1761 #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
1763 typedef struct _CM_SCSI_DEVICE_DATA
{
1766 UCHAR HostIdentifier
;
1767 } CM_SCSI_DEVICE_DATA
, *PCM_SCSI_DEVICE_DATA
;
1769 typedef struct _CM_SERIAL_DEVICE_DATA
{
1773 } CM_SERIAL_DEVICE_DATA
, *PCM_SERIAL_DEVICE_DATA
;
1775 typedef struct _IO_COUNTERS
{
1776 ULONGLONG ReadOperationCount
;
1777 ULONGLONG WriteOperationCount
;
1778 ULONGLONG OtherOperationCount
;
1779 ULONGLONG ReadTransferCount
;
1780 ULONGLONG WriteTransferCount
;
1781 ULONGLONG OtherTransferCount
;
1782 } IO_COUNTERS
, *PIO_COUNTERS
;
1784 typedef struct _VM_COUNTERS
1786 SIZE_T PeakVirtualSize
;
1788 ULONG PageFaultCount
;
1789 SIZE_T PeakWorkingSetSize
;
1790 SIZE_T WorkingSetSize
;
1791 SIZE_T QuotaPeakPagedPoolUsage
;
1792 SIZE_T QuotaPagedPoolUsage
;
1793 SIZE_T QuotaPeakNonPagedPoolUsage
;
1794 SIZE_T QuotaNonPagedPoolUsage
;
1795 SIZE_T PagefileUsage
;
1796 SIZE_T PeakPagefileUsage
;
1797 } VM_COUNTERS
, *PVM_COUNTERS
;
1799 typedef struct _VM_COUNTERS_EX
1801 SIZE_T PeakVirtualSize
;
1803 ULONG PageFaultCount
;
1804 SIZE_T PeakWorkingSetSize
;
1805 SIZE_T WorkingSetSize
;
1806 SIZE_T QuotaPeakPagedPoolUsage
;
1807 SIZE_T QuotaPagedPoolUsage
;
1808 SIZE_T QuotaPeakNonPagedPoolUsage
;
1809 SIZE_T QuotaNonPagedPoolUsage
;
1810 SIZE_T PagefileUsage
;
1811 SIZE_T PeakPagefileUsage
;
1812 SIZE_T PrivateUsage
;
1813 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
1815 typedef struct _POOLED_USAGE_AND_LIMITS
1817 SIZE_T PeakPagedPoolUsage
;
1818 SIZE_T PagedPoolUsage
;
1819 SIZE_T PagedPoolLimit
;
1820 SIZE_T PeakNonPagedPoolUsage
;
1821 SIZE_T NonPagedPoolUsage
;
1822 SIZE_T NonPagedPoolLimit
;
1823 SIZE_T PeakPagefileUsage
;
1824 SIZE_T PagefileUsage
;
1825 SIZE_T PagefileLimit
;
1826 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
1828 typedef enum _KINTERRUPT_POLARITY
1830 InterruptPolarityUnknown
,
1831 InterruptActiveHigh
,
1833 } KINTERRUPT_POLARITY
, *PKINTERRUPT_POLARITY
;
1835 typedef struct _IO_ERROR_LOG_PACKET
{
1836 UCHAR MajorFunctionCode
;
1838 USHORT DumpDataSize
;
1839 USHORT NumberOfStrings
;
1840 USHORT StringOffset
;
1841 USHORT EventCategory
;
1843 ULONG UniqueErrorValue
;
1844 NTSTATUS FinalStatus
;
1845 ULONG SequenceNumber
;
1846 ULONG IoControlCode
;
1847 LARGE_INTEGER DeviceOffset
;
1849 } IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
1851 typedef struct _IO_ERROR_LOG_MESSAGE
{
1854 USHORT DriverNameLength
;
1855 LARGE_INTEGER TimeStamp
;
1856 ULONG DriverNameOffset
;
1857 IO_ERROR_LOG_PACKET EntryData
;
1858 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
1860 #define ERROR_LOG_LIMIT_SIZE 240
1861 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
1862 sizeof(IO_ERROR_LOG_PACKET) + \
1863 (sizeof(WCHAR) * 40))
1864 #define ERROR_LOG_MESSAGE_LIMIT_SIZE \
1865 (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1866 #define IO_ERROR_LOG_MESSAGE_LENGTH \
1867 ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
1868 ERROR_LOG_MESSAGE_LIMIT_SIZE : \
1869 PORT_MAXIMUM_MESSAGE_LENGTH)
1870 #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
1871 IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1873 typedef struct _CONTROLLER_OBJECT
{
1876 PVOID ControllerExtension
;
1877 KDEVICE_QUEUE DeviceWaitQueue
;
1879 LARGE_INTEGER Spare2
;
1880 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
1882 typedef enum _DMA_WIDTH
{
1887 } DMA_WIDTH
, *PDMA_WIDTH
;
1889 typedef enum _DMA_SPEED
{
1896 } DMA_SPEED
, *PDMA_SPEED
;
1898 /* DEVICE_DESCRIPTION.Version */
1900 #define DEVICE_DESCRIPTION_VERSION 0x0000
1901 #define DEVICE_DESCRIPTION_VERSION1 0x0001
1902 #define DEVICE_DESCRIPTION_VERSION2 0x0002
1904 typedef struct _DEVICE_DESCRIPTION
{
1907 BOOLEAN ScatterGather
;
1909 BOOLEAN AutoInitialize
;
1910 BOOLEAN Dma32BitAddresses
;
1911 BOOLEAN IgnoreCount
;
1913 BOOLEAN Dma64BitAddresses
;
1916 INTERFACE_TYPE InterfaceType
;
1919 ULONG MaximumLength
;
1921 } DEVICE_DESCRIPTION
, *PDEVICE_DESCRIPTION
;
1924 #define VPB_MOUNTED 0x0001
1925 #define VPB_LOCKED 0x0002
1926 #define VPB_PERSISTENT 0x0004
1927 #define VPB_REMOVE_PENDING 0x0008
1928 #define VPB_RAW_MOUNT 0x0010
1930 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
1932 typedef struct _VPB
{
1936 USHORT VolumeLabelLength
;
1937 struct _DEVICE_OBJECT
*DeviceObject
;
1938 struct _DEVICE_OBJECT
*RealDevice
;
1940 ULONG ReferenceCount
;
1941 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
/ sizeof(WCHAR
)];
1944 /* DEVICE_OBJECT.Flags */
1946 #define DO_VERIFY_VOLUME 0x00000002
1947 #define DO_BUFFERED_IO 0x00000004
1948 #define DO_EXCLUSIVE 0x00000008
1949 #define DO_DIRECT_IO 0x00000010
1950 #define DO_MAP_IO_BUFFER 0x00000020
1951 #define DO_DEVICE_HAS_NAME 0x00000040
1952 #define DO_DEVICE_INITIALIZING 0x00000080
1953 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
1954 #define DO_LONG_TERM_REQUESTS 0x00000200
1955 #define DO_NEVER_LAST_DEVICE 0x00000400
1956 #define DO_SHUTDOWN_REGISTERED 0x00000800
1957 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
1958 #define DO_POWER_PAGABLE 0x00002000
1959 #define DO_POWER_INRUSH 0x00004000
1960 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
1961 #define DO_XIP 0x00020000
1963 /* DEVICE_OBJECT.Characteristics */
1965 #define FILE_REMOVABLE_MEDIA 0x00000001
1966 #define FILE_READ_ONLY_DEVICE 0x00000002
1967 #define FILE_FLOPPY_DISKETTE 0x00000004
1968 #define FILE_WRITE_ONCE_MEDIA 0x00000008
1969 #define FILE_REMOTE_DEVICE 0x00000010
1970 #define FILE_DEVICE_IS_MOUNTED 0x00000020
1971 #define FILE_VIRTUAL_VOLUME 0x00000040
1972 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
1973 #define FILE_DEVICE_SECURE_OPEN 0x00000100
1975 /* DEVICE_OBJECT.AlignmentRequirement */
1977 #define FILE_BYTE_ALIGNMENT 0x00000000
1978 #define FILE_WORD_ALIGNMENT 0x00000001
1979 #define FILE_LONG_ALIGNMENT 0x00000003
1980 #define FILE_QUAD_ALIGNMENT 0x00000007
1981 #define FILE_OCTA_ALIGNMENT 0x0000000f
1982 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
1983 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
1984 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
1985 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
1986 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
1988 /* DEVICE_OBJECT.DeviceType */
1990 #define DEVICE_TYPE ULONG
1992 #define FILE_DEVICE_BEEP 0x00000001
1993 #define FILE_DEVICE_CD_ROM 0x00000002
1994 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
1995 #define FILE_DEVICE_CONTROLLER 0x00000004
1996 #define FILE_DEVICE_DATALINK 0x00000005
1997 #define FILE_DEVICE_DFS 0x00000006
1998 #define FILE_DEVICE_DISK 0x00000007
1999 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
2000 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
2001 #define FILE_DEVICE_INPORT_PORT 0x0000000a
2002 #define FILE_DEVICE_KEYBOARD 0x0000000b
2003 #define FILE_DEVICE_MAILSLOT 0x0000000c
2004 #define FILE_DEVICE_MIDI_IN 0x0000000d
2005 #define FILE_DEVICE_MIDI_OUT 0x0000000e
2006 #define FILE_DEVICE_MOUSE 0x0000000f
2007 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
2008 #define FILE_DEVICE_NAMED_PIPE 0x00000011
2009 #define FILE_DEVICE_NETWORK 0x00000012
2010 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
2011 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
2012 #define FILE_DEVICE_NULL 0x00000015
2013 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
2014 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
2015 #define FILE_DEVICE_PRINTER 0x00000018
2016 #define FILE_DEVICE_SCANNER 0x00000019
2017 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
2018 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
2019 #define FILE_DEVICE_SCREEN 0x0000001c
2020 #define FILE_DEVICE_SOUND 0x0000001d
2021 #define FILE_DEVICE_STREAMS 0x0000001e
2022 #define FILE_DEVICE_TAPE 0x0000001f
2023 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
2024 #define FILE_DEVICE_TRANSPORT 0x00000021
2025 #define FILE_DEVICE_UNKNOWN 0x00000022
2026 #define FILE_DEVICE_VIDEO 0x00000023
2027 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
2028 #define FILE_DEVICE_WAVE_IN 0x00000025
2029 #define FILE_DEVICE_WAVE_OUT 0x00000026
2030 #define FILE_DEVICE_8042_PORT 0x00000027
2031 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
2032 #define FILE_DEVICE_BATTERY 0x00000029
2033 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
2034 #define FILE_DEVICE_MODEM 0x0000002b
2035 #define FILE_DEVICE_VDM 0x0000002c
2036 #define FILE_DEVICE_MASS_STORAGE 0x0000002d
2037 #define FILE_DEVICE_SMB 0x0000002e
2038 #define FILE_DEVICE_KS 0x0000002f
2039 #define FILE_DEVICE_CHANGER 0x00000030
2040 #define FILE_DEVICE_SMARTCARD 0x00000031
2041 #define FILE_DEVICE_ACPI 0x00000032
2042 #define FILE_DEVICE_DVD 0x00000033
2043 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
2044 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
2045 #define FILE_DEVICE_DFS_VOLUME 0x00000036
2046 #define FILE_DEVICE_SERENUM 0x00000037
2047 #define FILE_DEVICE_TERMSRV 0x00000038
2048 #define FILE_DEVICE_KSEC 0x00000039
2049 #define FILE_DEVICE_FIPS 0x0000003a
2051 typedef struct _DEVICE_OBJECT
{
2054 LONG ReferenceCount
;
2055 struct _DRIVER_OBJECT
*DriverObject
;
2056 struct _DEVICE_OBJECT
*NextDevice
;
2057 struct _DEVICE_OBJECT
*AttachedDevice
;
2058 struct _IRP
*CurrentIrp
;
2061 ULONG Characteristics
;
2063 PVOID DeviceExtension
;
2064 DEVICE_TYPE DeviceType
;
2067 LIST_ENTRY ListEntry
;
2068 WAIT_CONTEXT_BLOCK Wcb
;
2070 ULONG AlignmentRequirement
;
2071 KDEVICE_QUEUE DeviceQueue
;
2073 ULONG ActiveThreadCount
;
2074 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2078 struct _DEVOBJ_EXTENSION
*DeviceObjectExtension
;
2080 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
2082 typedef enum _DEVICE_RELATION_TYPE
{
2087 TargetDeviceRelation
,
2089 } DEVICE_RELATION_TYPE
, *PDEVICE_RELATION_TYPE
;
2091 typedef struct _DEVICE_RELATIONS
{
2093 PDEVICE_OBJECT Objects
[1];
2094 } DEVICE_RELATIONS
, *PDEVICE_RELATIONS
;
2096 typedef struct _SCATTER_GATHER_ELEMENT
{
2097 PHYSICAL_ADDRESS Address
;
2100 } SCATTER_GATHER_ELEMENT
, *PSCATTER_GATHER_ELEMENT
;
2102 typedef struct _SCATTER_GATHER_LIST
{
2103 ULONG NumberOfElements
;
2105 SCATTER_GATHER_ELEMENT Elements
[1];
2106 } SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
2108 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
2109 #define MDL_PAGES_LOCKED 0x0002
2110 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
2111 #define MDL_ALLOCATED_FIXED_SIZE 0x0008
2112 #define MDL_PARTIAL 0x0010
2113 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
2114 #define MDL_IO_PAGE_READ 0x0040
2115 #define MDL_WRITE_OPERATION 0x0080
2116 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
2117 #define MDL_FREE_EXTRA_PTES 0x0200
2118 #define MDL_DESCRIBES_AWE 0x0400
2119 #define MDL_IO_SPACE 0x0800
2120 #define MDL_NETWORK_HEADER 0x1000
2121 #define MDL_MAPPING_CAN_FAIL 0x2000
2122 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
2123 #define MDL_INTERNAL 0x8000
2126 #define MDL_MAPPING_FLAGS ( \
2127 MDL_MAPPED_TO_SYSTEM_VA | \
2128 MDL_PAGES_LOCKED | \
2129 MDL_SOURCE_IS_NONPAGED_POOL | \
2130 MDL_PARTIAL_HAS_BEEN_MAPPED | \
2131 MDL_PARENT_MAPPED_SYSTEM_VA | \
2135 typedef struct _DRIVER_EXTENSION
{
2136 struct _DRIVER_OBJECT
*DriverObject
;
2137 PDRIVER_ADD_DEVICE AddDevice
;
2139 UNICODE_STRING ServiceKeyName
;
2140 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
2142 #define DRVO_UNLOAD_INVOKED 0x00000001
2143 #define DRVO_LEGACY_DRIVER 0x00000002
2144 #define DRVO_BUILTIN_DRIVER 0x00000004
2145 #define DRVO_REINIT_REGISTERED 0x00000008
2146 #define DRVO_INITIALIZED 0x00000010
2147 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
2148 #define DRVO_LEGACY_RESOURCES 0x00000040
2150 typedef struct _DRIVER_OBJECT
{
2153 PDEVICE_OBJECT DeviceObject
;
2157 PVOID DriverSection
;
2158 PDRIVER_EXTENSION DriverExtension
;
2159 UNICODE_STRING DriverName
;
2160 PUNICODE_STRING HardwareDatabase
;
2161 struct _FAST_IO_DISPATCH
*FastIoDispatch
;
2162 PDRIVER_INITIALIZE DriverInit
;
2163 PDRIVER_STARTIO DriverStartIo
;
2164 PDRIVER_UNLOAD DriverUnload
;
2165 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
2167 typedef struct _DRIVER_OBJECT
*PDRIVER_OBJECT
;
2169 typedef struct _DMA_ADAPTER
{
2172 struct _DMA_OPERATIONS
* DmaOperations
;
2173 } DMA_ADAPTER
, *PDMA_ADAPTER
;
2176 (DDKAPI
*PPUT_DMA_ADAPTER
)(
2177 IN PDMA_ADAPTER DmaAdapter
);
2180 (DDKAPI
*PALLOCATE_COMMON_BUFFER
)(
2181 IN PDMA_ADAPTER DmaAdapter
,
2183 OUT PPHYSICAL_ADDRESS LogicalAddress
,
2184 IN BOOLEAN CacheEnabled
);
2187 (DDKAPI
*PFREE_COMMON_BUFFER
)(
2188 IN PDMA_ADAPTER DmaAdapter
,
2190 IN PHYSICAL_ADDRESS LogicalAddress
,
2191 IN PVOID VirtualAddress
,
2192 IN BOOLEAN CacheEnabled
);
2195 (DDKAPI
*PALLOCATE_ADAPTER_CHANNEL
)(
2196 IN PDMA_ADAPTER DmaAdapter
,
2197 IN PDEVICE_OBJECT DeviceObject
,
2198 IN ULONG NumberOfMapRegisters
,
2199 IN PDRIVER_CONTROL ExecutionRoutine
,
2203 (DDKAPI
*PFLUSH_ADAPTER_BUFFERS
)(
2204 IN PDMA_ADAPTER DmaAdapter
,
2206 IN PVOID MapRegisterBase
,
2209 IN BOOLEAN WriteToDevice
);
2212 (DDKAPI
*PFREE_ADAPTER_CHANNEL
)(
2213 IN PDMA_ADAPTER DmaAdapter
);
2216 (DDKAPI
*PFREE_MAP_REGISTERS
)(
2217 IN PDMA_ADAPTER DmaAdapter
,
2218 PVOID MapRegisterBase
,
2219 ULONG NumberOfMapRegisters
);
2221 typedef PHYSICAL_ADDRESS
2222 (DDKAPI
*PMAP_TRANSFER
)(
2223 IN PDMA_ADAPTER DmaAdapter
,
2225 IN PVOID MapRegisterBase
,
2227 IN OUT PULONG Length
,
2228 IN BOOLEAN WriteToDevice
);
2231 (DDKAPI
*PGET_DMA_ALIGNMENT
)(
2232 IN PDMA_ADAPTER DmaAdapter
);
2235 (DDKAPI
*PREAD_DMA_COUNTER
)(
2236 IN PDMA_ADAPTER DmaAdapter
);
2239 (DDKAPI
*PGET_SCATTER_GATHER_LIST
)(
2240 IN PDMA_ADAPTER DmaAdapter
,
2241 IN PDEVICE_OBJECT DeviceObject
,
2245 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
2247 IN BOOLEAN WriteToDevice
);
2250 (DDKAPI
*PPUT_SCATTER_GATHER_LIST
)(
2251 IN PDMA_ADAPTER DmaAdapter
,
2252 IN PSCATTER_GATHER_LIST ScatterGather
,
2253 IN BOOLEAN WriteToDevice
);
2256 (DDKAPI
*PCALCULATE_SCATTER_GATHER_LIST_SIZE
)(
2257 IN PDMA_ADAPTER DmaAdapter
,
2258 IN PMDL Mdl OPTIONAL
,
2261 OUT PULONG ScatterGatherListSize
,
2262 OUT PULONG pNumberOfMapRegisters OPTIONAL
);
2265 (DDKAPI
*PBUILD_SCATTER_GATHER_LIST
)(
2266 IN PDMA_ADAPTER DmaAdapter
,
2267 IN PDEVICE_OBJECT DeviceObject
,
2271 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
2273 IN BOOLEAN WriteToDevice
,
2274 IN PVOID ScatterGatherBuffer
,
2275 IN ULONG ScatterGatherLength
);
2278 (DDKAPI
*PBUILD_MDL_FROM_SCATTER_GATHER_LIST
)(
2279 IN PDMA_ADAPTER DmaAdapter
,
2280 IN PSCATTER_GATHER_LIST ScatterGather
,
2281 IN PMDL OriginalMdl
,
2282 OUT PMDL
*TargetMdl
);
2284 typedef struct _DMA_OPERATIONS
{
2286 PPUT_DMA_ADAPTER PutDmaAdapter
;
2287 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer
;
2288 PFREE_COMMON_BUFFER FreeCommonBuffer
;
2289 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
2290 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
2291 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
2292 PFREE_MAP_REGISTERS FreeMapRegisters
;
2293 PMAP_TRANSFER MapTransfer
;
2294 PGET_DMA_ALIGNMENT GetDmaAlignment
;
2295 PREAD_DMA_COUNTER ReadDmaCounter
;
2296 PGET_SCATTER_GATHER_LIST GetScatterGatherList
;
2297 PPUT_SCATTER_GATHER_LIST PutScatterGatherList
;
2298 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList
;
2299 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList
;
2300 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList
;
2301 } DMA_OPERATIONS
, *PDMA_OPERATIONS
;
2303 typedef enum _ARBITER_REQUEST_SOURCE
{
2304 ArbiterRequestUndefined
= -1,
2305 ArbiterRequestLegacyReported
,
2306 ArbiterRequestHalReported
,
2307 ArbiterRequestLegacyAssigned
,
2308 ArbiterRequestPnpDetected
,
2309 ArbiterRequestPnpEnumerated
2310 } ARBITER_REQUEST_SOURCE
;
2312 typedef enum _ARBITER_RESULT
{
2313 ArbiterResultUndefined
= -1,
2314 ArbiterResultSuccess
,
2315 ArbiterResultExternalConflict
,
2316 ArbiterResultNullRequest
2319 typedef enum _ARBITER_ACTION
{
2320 ArbiterActionTestAllocation
,
2321 ArbiterActionRetestAllocation
,
2322 ArbiterActionCommitAllocation
,
2323 ArbiterActionRollbackAllocation
,
2324 ArbiterActionQueryAllocatedResources
,
2325 ArbiterActionWriteReservedResources
,
2326 ArbiterActionQueryConflict
,
2327 ArbiterActionQueryArbitrate
,
2328 ArbiterActionAddReserved
,
2329 ArbiterActionBootAllocation
2330 } ARBITER_ACTION
, *PARBITER_ACTION
;
2332 typedef struct _ARBITER_CONFLICT_INFO
{
2333 PDEVICE_OBJECT OwningObject
;
2336 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
2338 typedef struct _ARBITER_PARAMETERS
{
2341 IN OUT PLIST_ENTRY ArbitrationList
;
2342 IN ULONG AllocateFromCount
;
2343 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
2347 IN OUT PLIST_ENTRY ArbitrationList
;
2348 IN ULONG AllocateFromCount
;
2349 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
2353 IN OUT PLIST_ENTRY ArbitrationList
;
2357 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
2358 } QueryAllocatedResources
;
2361 IN PDEVICE_OBJECT PhysicalDeviceObject
;
2362 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
2363 OUT PULONG ConflictCount
;
2364 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
2368 IN PLIST_ENTRY ArbitrationList
;
2372 IN PDEVICE_OBJECT ReserveDevice
;
2375 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
2377 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
2379 typedef struct _ARBITER_LIST_ENTRY
{
2380 LIST_ENTRY ListEntry
;
2381 ULONG AlternativeCount
;
2382 PIO_RESOURCE_DESCRIPTOR Alternatives
;
2383 PDEVICE_OBJECT PhysicalDeviceObject
;
2384 ARBITER_REQUEST_SOURCE RequestSource
;
2387 INTERFACE_TYPE InterfaceType
;
2390 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
2391 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
2392 ARBITER_RESULT Result
;
2393 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
2396 (DDKAPI
*PARBITER_HANDLER
)(
2398 IN ARBITER_ACTION Action
,
2399 IN OUT PARBITER_PARAMETERS Parameters
);
2401 #define ARBITER_PARTIAL 0x00000001
2403 typedef struct _ARBITER_INTERFACE
{
2407 PINTERFACE_REFERENCE InterfaceReference
;
2408 PINTERFACE_DEREFERENCE InterfaceDereference
;
2409 PARBITER_HANDLER ArbiterHandler
;
2411 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
2413 typedef enum _KPROFILE_SOURCE
{
2415 ProfileAlignmentFixup
,
2418 ProfileLoadInstructions
,
2419 ProfilePipelineFrozen
,
2420 ProfileBranchInstructions
,
2421 ProfileTotalNonissues
,
2422 ProfileDcacheMisses
,
2423 ProfileIcacheMisses
,
2425 ProfileBranchMispredictions
,
2426 ProfileStoreInstructions
,
2427 ProfileFpInstructions
,
2428 ProfileIntegerInstructions
,
2432 ProfileSpecialInstructions
,
2434 ProfileIcacheIssues
,
2435 ProfileDcacheAccesses
,
2436 ProfileMemoryBarrierCycles
,
2437 ProfileLoadLinkedIssues
,
2441 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
2442 HalInstalledBusInformation
,
2443 HalProfileSourceInformation
,
2444 HalInformationClassUnused1
,
2445 HalPowerInformation
,
2446 HalProcessorSpeedInformation
,
2447 HalCallbackInformation
,
2448 HalMapRegisterInformation
,
2449 HalMcaLogInformation
,
2450 HalFrameBufferCachingInformation
,
2451 HalDisplayBiosInformation
,
2452 HalProcessorFeatureInformation
,
2453 HalNumaTopologyInterface
,
2454 HalErrorInformation
,
2455 HalCmcLogInformation
,
2456 HalCpeLogInformation
,
2457 HalQueryMcaInterface
,
2458 HalQueryAMLIIllegalIOPortAddresses
,
2459 HalQueryMaxHotPlugMemoryAddress
,
2460 HalPartitionIpiInterface
,
2461 HalPlatformInformation
,
2462 HalQueryProfileSourceList
2463 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
2465 typedef enum _HAL_SET_INFORMATION_CLASS
{
2466 HalProfileSourceInterval
,
2467 HalProfileSourceInterruptHandler
,
2468 HalMcaRegisterDriver
,
2469 HalKernelErrorHandler
,
2470 HalCmcRegisterDriver
,
2471 HalCpeRegisterDriver
,
2475 HalGenerateCmcInterrupt
2476 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
2478 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
2480 KPROFILE_SOURCE Source
;
2482 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
2484 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
2486 KPROFILE_SOURCE Source
;
2489 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
2491 typedef struct _MAP_REGISTER_ENTRY
2494 BOOLEAN WriteToDevice
;
2495 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
2502 PUCHAR TranslatedAddress
;
2504 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
2508 PHYSICAL_ADDRESS Start
;
2509 PHYSICAL_ADDRESS MaxEnd
;
2510 PVOID VirtualAddress
;
2514 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
2525 BOOLEAN Initialized
;
2526 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
2527 DEBUG_MEMORY_REQUIREMENTS Memory
;
2528 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
2530 typedef enum _KD_OPTION
{
2531 KD_OPTION_SET_BLOCK_ENABLE
,
2534 /* Function Type Defintions for Dispatch Functions */
2535 struct _DEVICE_CONTROL_CONTEXT
;
2538 (DDKAPI
*PDEVICE_CONTROL_COMPLETION
)(
2539 IN
struct _DEVICE_CONTROL_CONTEXT
*ControlContext
);
2541 typedef struct _DEVICE_CONTROL_CONTEXT
{
2543 PDEVICE_HANDLER_OBJECT DeviceHandler
;
2544 PDEVICE_OBJECT DeviceObject
;
2547 PULONG BufferLength
;
2549 } DEVICE_CONTROL_CONTEXT
, *PDEVICE_CONTROL_CONTEXT
;
2551 typedef struct _PM_DISPATCH_TABLE
{
2555 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
2557 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
2558 TranslateChildToParent
,
2559 TranslateParentToChild
2560 } RESOURCE_TRANSLATION_DIRECTION
;
2563 (DDKAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
2565 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
2566 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
2567 IN ULONG AlternativesCount
,
2568 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
2569 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2570 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
2573 (DDKAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
2575 IN PIO_RESOURCE_DESCRIPTOR Source
,
2576 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2577 OUT PULONG TargetCount
,
2578 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
2580 typedef struct _TRANSLATOR_INTERFACE
{
2584 PINTERFACE_REFERENCE InterfaceReference
;
2585 PINTERFACE_DEREFERENCE InterfaceDereference
;
2586 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
2587 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
2588 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
2591 (DDKAPI
*pHalDeviceControl
)(
2592 IN PDEVICE_HANDLER_OBJECT DeviceHandler
,
2593 IN PDEVICE_OBJECT DeviceObject
,
2594 IN ULONG ControlCode
,
2595 IN OUT PVOID Buffer OPTIONAL
,
2596 IN OUT PULONG BufferLength OPTIONAL
,
2598 IN PDEVICE_CONTROL_COMPLETION CompletionRoutine
);
2601 (FASTCALL
*pHalExamineMBR
)(
2602 IN PDEVICE_OBJECT DeviceObject
,
2603 IN ULONG SectorSize
,
2604 IN ULONG MBRTypeIdentifier
,
2608 (FASTCALL
*pHalIoAssignDriveLetters
)(
2609 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
2610 IN PSTRING NtDeviceName
,
2611 OUT PUCHAR NtSystemPath
,
2612 OUT PSTRING NtSystemPathString
);
2615 (FASTCALL
*pHalIoReadPartitionTable
)(
2616 IN PDEVICE_OBJECT DeviceObject
,
2617 IN ULONG SectorSize
,
2618 IN BOOLEAN ReturnRecognizedPartitions
,
2619 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2622 (FASTCALL
*pHalIoSetPartitionInformation
)(
2623 IN PDEVICE_OBJECT DeviceObject
,
2624 IN ULONG SectorSize
,
2625 IN ULONG PartitionNumber
,
2626 IN ULONG PartitionType
);
2629 (FASTCALL
*pHalIoWritePartitionTable
)(
2630 IN PDEVICE_OBJECT DeviceObject
,
2631 IN ULONG SectorSize
,
2632 IN ULONG SectorsPerTrack
,
2633 IN ULONG NumberOfHeads
,
2634 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2636 typedef PBUS_HANDLER
2637 (FASTCALL
*pHalHandlerForBus
)(
2638 IN INTERFACE_TYPE InterfaceType
,
2639 IN ULONG BusNumber
);
2642 (FASTCALL
*pHalReferenceBusHandler
)(
2643 IN PBUS_HANDLER BusHandler
);
2646 (DDKAPI
*pHalQuerySystemInformation
)(
2647 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
2648 IN ULONG BufferSize
,
2649 IN OUT PVOID Buffer
,
2650 OUT PULONG ReturnedLength
);
2653 (DDKAPI
*pHalSetSystemInformation
)(
2654 IN HAL_SET_INFORMATION_CLASS InformationClass
,
2655 IN ULONG BufferSize
,
2659 (DDKAPI
*pHalQueryBusSlots
)(
2660 IN PBUS_HANDLER BusHandler
,
2661 IN ULONG BufferSize
,
2662 OUT PULONG SlotNumbers
,
2663 OUT PULONG ReturnedLength
);
2666 (DDKAPI
*pHalInitPnpDriver
)(
2670 (DDKAPI
*pHalInitPowerManagement
)(
2671 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
2672 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
2674 typedef struct _DMA_ADAPTER
*
2675 (DDKAPI
*pHalGetDmaAdapter
)(
2677 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
2678 OUT PULONG NumberOfMapRegisters
);
2681 (DDKAPI
*pHalGetInterruptTranslator
)(
2682 IN INTERFACE_TYPE ParentInterfaceType
,
2683 IN ULONG ParentBusNumber
,
2684 IN INTERFACE_TYPE BridgeInterfaceType
,
2687 OUT PTRANSLATOR_INTERFACE Translator
,
2688 OUT PULONG BridgeBusNumber
);
2691 (DDKAPI
*pHalStartMirroring
)(
2695 (DDKAPI
*pHalEndMirroring
)(
2696 IN ULONG PassNumber
);
2699 (DDKAPI
*pHalMirrorPhysicalMemory
)(
2700 IN PHYSICAL_ADDRESS PhysicalAddress
,
2701 IN LARGE_INTEGER NumberOfBytes
);
2704 (DDKAPI
*pHalMirrorVerify
)(
2705 IN PHYSICAL_ADDRESS PhysicalAddress
,
2706 IN LARGE_INTEGER NumberOfBytes
);
2709 (DDKAPI
*pHalEndOfBoot
)(
2714 (DDKAPI
*pHalTranslateBusAddress
)(
2715 IN INTERFACE_TYPE InterfaceType
,
2717 IN PHYSICAL_ADDRESS BusAddress
,
2718 IN OUT PULONG AddressSpace
,
2719 OUT PPHYSICAL_ADDRESS TranslatedAddress
2724 (DDKAPI
*pHalAssignSlotResources
)(
2725 IN PUNICODE_STRING RegistryPath
,
2726 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2727 IN PDRIVER_OBJECT DriverObject
,
2728 IN PDEVICE_OBJECT DeviceObject
,
2729 IN INTERFACE_TYPE BusType
,
2731 IN ULONG SlotNumber
,
2732 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
2737 (DDKAPI
*pHalHaltSystem
)(
2743 (DDKAPI
*pHalResetDisplay
)(
2749 (DDKAPI
*pHalVectorToIDTEntry
)(
2755 (DDKAPI
*pHalFindBusAddressTranslation
)(
2756 IN PHYSICAL_ADDRESS BusAddress
,
2757 IN OUT PULONG AddressSpace
,
2758 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
2759 IN OUT PULONG_PTR Context
,
2765 (DDKAPI
*pKdSetupPciDeviceForDebugging
)(
2766 IN PVOID LoaderBlock OPTIONAL
,
2767 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
2772 (DDKAPI
*pKdReleasePciDeviceForDebugging
)(
2773 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
2778 (DDKAPI
*pKdGetAcpiTablePhase0
)(
2779 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
2785 (DDKAPI
*pKdCheckPowerButton
)(
2791 (DDKAPI
*pHalGetInterruptVector
)(
2792 IN INTERFACE_TYPE InterfaceType
,
2794 IN ULONG BusInterruptLevel
,
2795 IN ULONG BusInterruptVector
,
2797 OUT PKAFFINITY Affinity
2802 (DDKAPI
*pHalGetVectorInput
)(
2804 IN KAFFINITY Affinity
,
2806 OUT PKINTERRUPT_POLARITY Polarity
2811 (DDKAPI
*pKdMapPhysicalMemory64
)(
2812 IN PHYSICAL_ADDRESS PhysicalAddress
,
2813 IN ULONG NumberPages
2818 (DDKAPI
*pKdUnmapVirtualAddress
)(
2819 IN PVOID VirtualAddress
,
2820 IN ULONG NumberPages
2825 (DDKAPI
*pKdGetPciDataByOffset
)(
2827 IN ULONG SlotNumber
,
2835 (DDKAPI
*pKdSetPciDataByOffset
)(
2837 IN ULONG SlotNumber
,
2844 (DDKAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
2845 ULONG Columns
, ULONG Rows
);
2849 pHalQuerySystemInformation HalQuerySystemInformation
;
2850 pHalSetSystemInformation HalSetSystemInformation
;
2851 pHalQueryBusSlots HalQueryBusSlots
;
2853 pHalExamineMBR HalExamineMBR
;
2854 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
2855 pHalIoReadPartitionTable HalIoReadPartitionTable
;
2856 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
2857 pHalIoWritePartitionTable HalIoWritePartitionTable
;
2858 pHalHandlerForBus HalReferenceHandlerForBus
;
2859 pHalReferenceBusHandler HalReferenceBusHandler
;
2860 pHalReferenceBusHandler HalDereferenceBusHandler
;
2861 pHalInitPnpDriver HalInitPnpDriver
;
2862 pHalInitPowerManagement HalInitPowerManagement
;
2863 pHalGetDmaAdapter HalGetDmaAdapter
;
2864 pHalGetInterruptTranslator HalGetInterruptTranslator
;
2865 pHalStartMirroring HalStartMirroring
;
2866 pHalEndMirroring HalEndMirroring
;
2867 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
2868 pHalEndOfBoot HalEndOfBoot
;
2869 pHalMirrorVerify HalMirrorVerify
;
2870 } HAL_DISPATCH
, *PHAL_DISPATCH
;
2872 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTHAL_)
2873 extern NTSYSAPI PHAL_DISPATCH HalDispatchTable
;
2874 #define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable)
2876 extern __declspec(dllexport
) HAL_DISPATCH HalDispatchTable
;
2877 #define HALDISPATCH (&HalDispatchTable)
2880 #define HAL_DISPATCH_VERSION 3
2881 #define HalDispatchTableVersion HALDISPATCH->Version
2882 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
2883 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
2884 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
2885 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
2886 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
2887 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
2888 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
2889 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
2890 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
2891 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
2892 #define HalStartMirroring HALDISPATCH->HalStartMirroring
2893 #define HalEndMirroring HALDISPATCH->HalEndMirroring
2894 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
2895 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
2896 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
2898 typedef enum _FILE_INFORMATION_CLASS
{
2899 FileDirectoryInformation
= 1,
2900 FileFullDirectoryInformation
,
2901 FileBothDirectoryInformation
,
2902 FileBasicInformation
,
2903 FileStandardInformation
,
2904 FileInternalInformation
,
2906 FileAccessInformation
,
2907 FileNameInformation
,
2908 FileRenameInformation
,
2909 FileLinkInformation
,
2910 FileNamesInformation
,
2911 FileDispositionInformation
,
2912 FilePositionInformation
,
2913 FileFullEaInformation
,
2914 FileModeInformation
,
2915 FileAlignmentInformation
,
2917 FileAllocationInformation
,
2918 FileEndOfFileInformation
,
2919 FileAlternateNameInformation
,
2920 FileStreamInformation
,
2921 FilePipeInformation
,
2922 FilePipeLocalInformation
,
2923 FilePipeRemoteInformation
,
2924 FileMailslotQueryInformation
,
2925 FileMailslotSetInformation
,
2926 FileCompressionInformation
,
2927 FileObjectIdInformation
,
2928 FileCompletionInformation
,
2929 FileMoveClusterInformation
,
2930 FileQuotaInformation
,
2931 FileReparsePointInformation
,
2932 FileNetworkOpenInformation
,
2933 FileAttributeTagInformation
,
2934 FileTrackingInformation
,
2935 FileIdBothDirectoryInformation
,
2936 FileIdFullDirectoryInformation
,
2937 FileValidDataLengthInformation
,
2938 FileShortNameInformation
,
2939 FileMaximumInformation
2940 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
2942 typedef struct _FILE_POSITION_INFORMATION
{
2943 LARGE_INTEGER CurrentByteOffset
;
2944 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
2946 typedef struct _FILE_ALIGNMENT_INFORMATION
{
2947 ULONG AlignmentRequirement
;
2948 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
2950 typedef struct _FILE_NAME_INFORMATION
{
2951 ULONG FileNameLength
;
2953 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
2955 #include <pshpack8.h>
2956 typedef struct _FILE_BASIC_INFORMATION
{
2957 LARGE_INTEGER CreationTime
;
2958 LARGE_INTEGER LastAccessTime
;
2959 LARGE_INTEGER LastWriteTime
;
2960 LARGE_INTEGER ChangeTime
;
2961 ULONG FileAttributes
;
2962 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
2963 #include <poppack.h>
2965 typedef struct _FILE_STANDARD_INFORMATION
{
2966 LARGE_INTEGER AllocationSize
;
2967 LARGE_INTEGER EndOfFile
;
2968 ULONG NumberOfLinks
;
2969 BOOLEAN DeletePending
;
2971 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
2973 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
2974 LARGE_INTEGER CreationTime
;
2975 LARGE_INTEGER LastAccessTime
;
2976 LARGE_INTEGER LastWriteTime
;
2977 LARGE_INTEGER ChangeTime
;
2978 LARGE_INTEGER AllocationSize
;
2979 LARGE_INTEGER EndOfFile
;
2980 ULONG FileAttributes
;
2981 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
2983 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
2984 ULONG FileAttributes
;
2986 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
2988 typedef struct _FILE_DISPOSITION_INFORMATION
{
2990 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
2992 typedef struct _FILE_END_OF_FILE_INFORMATION
{
2993 LARGE_INTEGER EndOfFile
;
2994 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
2996 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
2997 LARGE_INTEGER ValidDataLength
;
2998 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
3000 typedef union _FILE_SEGMENT_ELEMENT
{
3002 ULONGLONG Alignment
;
3003 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
3005 typedef enum _FSINFOCLASS
{
3006 FileFsVolumeInformation
= 1,
3007 FileFsLabelInformation
,
3008 FileFsSizeInformation
,
3009 FileFsDeviceInformation
,
3010 FileFsAttributeInformation
,
3011 FileFsControlInformation
,
3012 FileFsFullSizeInformation
,
3013 FileFsObjectIdInformation
,
3014 FileFsDriverPathInformation
,
3015 FileFsMaximumInformation
3016 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
3018 typedef struct _FILE_FS_DEVICE_INFORMATION
{
3019 DEVICE_TYPE DeviceType
;
3020 ULONG Characteristics
;
3021 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
3023 typedef struct _FILE_FULL_EA_INFORMATION
{
3024 ULONG NextEntryOffset
;
3027 USHORT EaValueLength
;
3029 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
3031 /* ERESOURCE.Flag */
3033 #define ResourceNeverExclusive 0x0010
3034 #define ResourceReleaseByOtherThread 0x0020
3035 #define ResourceOwnedExclusive 0x0080
3037 #define RESOURCE_HASH_TABLE_SIZE 64
3039 typedef struct _DEVOBJ_EXTENSION
3043 PDEVICE_OBJECT DeviceObject
;
3044 } DEVOBJ_EXTENSION
, *PDEVOBJ_EXTENSION
;
3047 (DDKAPI
*PFAST_IO_CHECK_IF_POSSIBLE
)(
3048 IN
struct _FILE_OBJECT
*FileObject
,
3049 IN PLARGE_INTEGER FileOffset
,
3053 IN BOOLEAN CheckForReadOperation
,
3054 OUT PIO_STATUS_BLOCK IoStatus
,
3055 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3058 (DDKAPI
*PFAST_IO_READ
)(
3059 IN
struct _FILE_OBJECT
*FileObject
,
3060 IN PLARGE_INTEGER FileOffset
,
3065 OUT PIO_STATUS_BLOCK IoStatus
,
3066 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3069 (DDKAPI
*PFAST_IO_WRITE
)(
3070 IN
struct _FILE_OBJECT
*FileObject
,
3071 IN PLARGE_INTEGER FileOffset
,
3076 OUT PIO_STATUS_BLOCK IoStatus
,
3077 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3080 (DDKAPI
*PFAST_IO_QUERY_BASIC_INFO
)(
3081 IN
struct _FILE_OBJECT
*FileObject
,
3083 OUT PFILE_BASIC_INFORMATION Buffer
,
3084 OUT PIO_STATUS_BLOCK IoStatus
,
3085 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3088 (DDKAPI
*PFAST_IO_QUERY_STANDARD_INFO
)(
3089 IN
struct _FILE_OBJECT
*FileObject
,
3091 OUT PFILE_STANDARD_INFORMATION Buffer
,
3092 OUT PIO_STATUS_BLOCK IoStatus
,
3093 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3096 (DDKAPI
*PFAST_IO_LOCK
)(
3097 IN
struct _FILE_OBJECT
*FileObject
,
3098 IN PLARGE_INTEGER FileOffset
,
3099 IN PLARGE_INTEGER Length
,
3100 PEPROCESS ProcessId
,
3102 BOOLEAN FailImmediately
,
3103 BOOLEAN ExclusiveLock
,
3104 OUT PIO_STATUS_BLOCK IoStatus
,
3105 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3108 (DDKAPI
*PFAST_IO_UNLOCK_SINGLE
)(
3109 IN
struct _FILE_OBJECT
*FileObject
,
3110 IN PLARGE_INTEGER FileOffset
,
3111 IN PLARGE_INTEGER Length
,
3112 PEPROCESS ProcessId
,
3114 OUT PIO_STATUS_BLOCK IoStatus
,
3115 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3118 (DDKAPI
*PFAST_IO_UNLOCK_ALL
)(
3119 IN
struct _FILE_OBJECT
*FileObject
,
3120 PEPROCESS ProcessId
,
3121 OUT PIO_STATUS_BLOCK IoStatus
,
3122 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3125 (DDKAPI
*PFAST_IO_UNLOCK_ALL_BY_KEY
)(
3126 IN
struct _FILE_OBJECT
*FileObject
,
3129 OUT PIO_STATUS_BLOCK IoStatus
,
3130 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3133 (DDKAPI
*PFAST_IO_DEVICE_CONTROL
)(
3134 IN
struct _FILE_OBJECT
*FileObject
,
3136 IN PVOID InputBuffer OPTIONAL
,
3137 IN ULONG InputBufferLength
,
3138 OUT PVOID OutputBuffer OPTIONAL
,
3139 IN ULONG OutputBufferLength
,
3140 IN ULONG IoControlCode
,
3141 OUT PIO_STATUS_BLOCK IoStatus
,
3142 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3145 (DDKAPI
*PFAST_IO_ACQUIRE_FILE
)(
3146 IN
struct _FILE_OBJECT
*FileObject
);
3149 (DDKAPI
*PFAST_IO_RELEASE_FILE
)(
3150 IN
struct _FILE_OBJECT
*FileObject
);
3153 (DDKAPI
*PFAST_IO_DETACH_DEVICE
)(
3154 IN
struct _DEVICE_OBJECT
*SourceDevice
,
3155 IN
struct _DEVICE_OBJECT
*TargetDevice
);
3158 (DDKAPI
*PFAST_IO_QUERY_NETWORK_OPEN_INFO
)(
3159 IN
struct _FILE_OBJECT
*FileObject
,
3161 OUT
struct _FILE_NETWORK_OPEN_INFORMATION
*Buffer
,
3162 OUT
struct _IO_STATUS_BLOCK
*IoStatus
,
3163 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3166 (DDKAPI
*PFAST_IO_ACQUIRE_FOR_MOD_WRITE
)(
3167 IN
struct _FILE_OBJECT
*FileObject
,
3168 IN PLARGE_INTEGER EndingOffset
,
3169 OUT
struct _ERESOURCE
**ResourceToRelease
,
3170 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3173 (DDKAPI
*PFAST_IO_MDL_READ
)(
3174 IN
struct _FILE_OBJECT
*FileObject
,
3175 IN PLARGE_INTEGER FileOffset
,
3179 OUT PIO_STATUS_BLOCK IoStatus
,
3180 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3183 (DDKAPI
*PFAST_IO_MDL_READ_COMPLETE
)(
3184 IN
struct _FILE_OBJECT
*FileObject
,
3186 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3189 (DDKAPI
*PFAST_IO_PREPARE_MDL_WRITE
)(
3190 IN
struct _FILE_OBJECT
*FileObject
,
3191 IN PLARGE_INTEGER FileOffset
,
3195 OUT PIO_STATUS_BLOCK IoStatus
,
3196 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3199 (DDKAPI
*PFAST_IO_MDL_WRITE_COMPLETE
)(
3200 IN
struct _FILE_OBJECT
*FileObject
,
3201 IN PLARGE_INTEGER FileOffset
,
3203 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3206 (DDKAPI
*PFAST_IO_READ_COMPRESSED
)(
3207 IN
struct _FILE_OBJECT
*FileObject
,
3208 IN PLARGE_INTEGER FileOffset
,
3213 OUT PIO_STATUS_BLOCK IoStatus
,
3214 OUT
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
3215 IN ULONG CompressedDataInfoLength
,
3216 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3219 (DDKAPI
*PFAST_IO_WRITE_COMPRESSED
)(
3220 IN
struct _FILE_OBJECT
*FileObject
,
3221 IN PLARGE_INTEGER FileOffset
,
3226 OUT PIO_STATUS_BLOCK IoStatus
,
3227 IN
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
3228 IN ULONG CompressedDataInfoLength
,
3229 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3232 (DDKAPI
*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED
)(
3233 IN
struct _FILE_OBJECT
*FileObject
,
3235 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3238 (DDKAPI
*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)(
3239 IN
struct _FILE_OBJECT
*FileObject
,
3240 IN PLARGE_INTEGER FileOffset
,
3242 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3245 (DDKAPI
*PFAST_IO_QUERY_OPEN
)(
3246 IN
struct _IRP
*Irp
,
3247 OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
,
3248 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3251 (DDKAPI
*PFAST_IO_RELEASE_FOR_MOD_WRITE
)(
3252 IN
struct _FILE_OBJECT
*FileObject
,
3253 IN
struct _ERESOURCE
*ResourceToRelease
,
3254 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3257 (DDKAPI
*PFAST_IO_ACQUIRE_FOR_CCFLUSH
)(
3258 IN
struct _FILE_OBJECT
*FileObject
,
3259 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3262 (DDKAPI
*PFAST_IO_RELEASE_FOR_CCFLUSH
) (
3263 IN
struct _FILE_OBJECT
*FileObject
,
3264 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3266 typedef struct _FAST_IO_DISPATCH
{
3267 ULONG SizeOfFastIoDispatch
;
3268 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible
;
3269 PFAST_IO_READ FastIoRead
;
3270 PFAST_IO_WRITE FastIoWrite
;
3271 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo
;
3272 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo
;
3273 PFAST_IO_LOCK FastIoLock
;
3274 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle
;
3275 PFAST_IO_UNLOCK_ALL FastIoUnlockAll
;
3276 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey
;
3277 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl
;
3278 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection
;
3279 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection
;
3280 PFAST_IO_DETACH_DEVICE FastIoDetachDevice
;
3281 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo
;
3282 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite
;
3283 PFAST_IO_MDL_READ MdlRead
;
3284 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete
;
3285 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite
;
3286 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete
;
3287 PFAST_IO_READ_COMPRESSED FastIoReadCompressed
;
3288 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed
;
3289 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed
;
3290 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed
;
3291 PFAST_IO_QUERY_OPEN FastIoQueryOpen
;
3292 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite
;
3293 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush
;
3294 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush
;
3295 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
3297 typedef struct _SECTION_OBJECT_POINTERS
{
3298 PVOID DataSectionObject
;
3299 PVOID SharedCacheMap
;
3300 PVOID ImageSectionObject
;
3301 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
3303 typedef struct _IO_COMPLETION_CONTEXT
{
3306 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
3308 /* FILE_OBJECT.Flags */
3310 #define FO_FILE_OPEN 0x00000001
3311 #define FO_SYNCHRONOUS_IO 0x00000002
3312 #define FO_ALERTABLE_IO 0x00000004
3313 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
3314 #define FO_WRITE_THROUGH 0x00000010
3315 #define FO_SEQUENTIAL_ONLY 0x00000020
3316 #define FO_CACHE_SUPPORTED 0x00000040
3317 #define FO_NAMED_PIPE 0x00000080
3318 #define FO_STREAM_FILE 0x00000100
3319 #define FO_MAILSLOT 0x00000200
3320 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
3321 #define FO_DIRECT_DEVICE_OPEN 0x00000800
3322 #define FO_FILE_MODIFIED 0x00001000
3323 #define FO_FILE_SIZE_CHANGED 0x00002000
3324 #define FO_CLEANUP_COMPLETE 0x00004000
3325 #define FO_TEMPORARY_FILE 0x00008000
3326 #define FO_DELETE_ON_CLOSE 0x00010000
3327 #define FO_OPENED_CASE_SENSITIVE 0x00020000
3328 #define FO_HANDLE_CREATED 0x00040000
3329 #define FO_FILE_FAST_IO_READ 0x00080000
3330 #define FO_RANDOM_ACCESS 0x00100000
3331 #define FO_FILE_OPEN_CANCELLED 0x00200000
3332 #define FO_VOLUME_OPEN 0x00400000
3333 #define FO_REMOTE_ORIGIN 0x01000000
3335 typedef struct _FILE_OBJECT
3339 PDEVICE_OBJECT DeviceObject
;
3343 PSECTION_OBJECT_POINTERS SectionObjectPointer
;
3344 PVOID PrivateCacheMap
;
3345 NTSTATUS FinalStatus
;
3346 struct _FILE_OBJECT
*RelatedFileObject
;
3347 BOOLEAN LockOperation
;
3348 BOOLEAN DeletePending
;
3350 BOOLEAN WriteAccess
;
3351 BOOLEAN DeleteAccess
;
3353 BOOLEAN SharedWrite
;
3354 BOOLEAN SharedDelete
;
3356 UNICODE_STRING FileName
;
3357 LARGE_INTEGER CurrentByteOffset
;
3358 volatile ULONG Waiters
;
3359 volatile ULONG Busy
;
3363 volatile PIO_COMPLETION_CONTEXT CompletionContext
;
3364 KSPIN_LOCK IrpListLock
;
3366 volatile PVOID FileObjectExtension
;
3368 typedef struct _FILE_OBJECT
*PFILE_OBJECT
;
3370 typedef enum _SECURITY_OPERATION_CODE
{
3371 SetSecurityDescriptor
,
3372 QuerySecurityDescriptor
,
3373 DeleteSecurityDescriptor
,
3374 AssignSecurityDescriptor
3375 } SECURITY_OPERATION_CODE
, *PSECURITY_OPERATION_CODE
;
3377 #define INITIAL_PRIVILEGE_COUNT 3
3379 typedef struct _INITIAL_PRIVILEGE_SET
{
3380 ULONG PrivilegeCount
;
3382 LUID_AND_ATTRIBUTES Privilege
[INITIAL_PRIVILEGE_COUNT
];
3383 } INITIAL_PRIVILEGE_SET
, * PINITIAL_PRIVILEGE_SET
;
3385 #define SE_MIN_WELL_KNOWN_PRIVILEGE 2
3386 #define SE_CREATE_TOKEN_PRIVILEGE 2
3387 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3
3388 #define SE_LOCK_MEMORY_PRIVILEGE 4
3389 #define SE_INCREASE_QUOTA_PRIVILEGE 5
3390 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
3391 #define SE_MACHINE_ACCOUNT_PRIVILEGE 6
3392 #define SE_TCB_PRIVILEGE 7
3393 #define SE_SECURITY_PRIVILEGE 8
3394 #define SE_TAKE_OWNERSHIP_PRIVILEGE 9
3395 #define SE_LOAD_DRIVER_PRIVILEGE 10
3396 #define SE_SYSTEM_PROFILE_PRIVILEGE 11
3397 #define SE_SYSTEMTIME_PRIVILEGE 12
3398 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
3399 #define SE_INC_BASE_PRIORITY_PRIVILEGE 14
3400 #define SE_CREATE_PAGEFILE_PRIVILEGE 15
3401 #define SE_CREATE_PERMANENT_PRIVILEGE 16
3402 #define SE_BACKUP_PRIVILEGE 17
3403 #define SE_RESTORE_PRIVILEGE 18
3404 #define SE_SHUTDOWN_PRIVILEGE 19
3405 #define SE_DEBUG_PRIVILEGE 20
3406 #define SE_AUDIT_PRIVILEGE 21
3407 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22
3408 #define SE_CHANGE_NOTIFY_PRIVILEGE 23
3409 #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24
3410 #define SE_UNDOCK_PRIVILEGE 25
3411 #define SE_SYNC_AGENT_PRIVILEGE 26
3412 #define SE_ENABLE_DELEGATION_PRIVILEGE 27
3413 #define SE_MANAGE_VOLUME_PRIVILEGE 28
3414 #define SE_IMPERSONATE_PRIVILEGE 29
3415 #define SE_CREATE_GLOBAL_PRIVILEGE 30
3416 #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_GLOBAL_PRIVILEGE
3418 typedef struct _SECURITY_SUBJECT_CONTEXT
{
3419 PACCESS_TOKEN ClientToken
;
3420 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
3421 PACCESS_TOKEN PrimaryToken
;
3422 PVOID ProcessAuditId
;
3423 } SECURITY_SUBJECT_CONTEXT
, *PSECURITY_SUBJECT_CONTEXT
;
3425 #include <pshpack4.h>
3426 typedef struct _ACCESS_STATE
{
3428 BOOLEAN SecurityEvaluated
;
3429 BOOLEAN GenerateAudit
;
3430 BOOLEAN GenerateOnClose
;
3431 BOOLEAN PrivilegesAllocated
;
3433 ACCESS_MASK RemainingDesiredAccess
;
3434 ACCESS_MASK PreviouslyGrantedAccess
;
3435 ACCESS_MASK OriginalDesiredAccess
;
3436 SECURITY_SUBJECT_CONTEXT SubjectSecurityContext
;
3437 PSECURITY_DESCRIPTOR SecurityDescriptor
;
3440 INITIAL_PRIVILEGE_SET InitialPrivilegeSet
;
3441 PRIVILEGE_SET PrivilegeSet
;
3444 BOOLEAN AuditPrivileges
;
3445 UNICODE_STRING ObjectName
;
3446 UNICODE_STRING ObjectTypeName
;
3447 } ACCESS_STATE
, *PACCESS_STATE
;
3448 #include <poppack.h>
3450 typedef struct _IO_SECURITY_CONTEXT
{
3451 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
3452 PACCESS_STATE AccessState
;
3453 ACCESS_MASK DesiredAccess
;
3454 ULONG FullCreateOptions
;
3455 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
3457 #define IO_TYPE_ADAPTER 1
3458 #define IO_TYPE_CONTROLLER 2
3459 #define IO_TYPE_DEVICE 3
3460 #define IO_TYPE_DRIVER 4
3461 #define IO_TYPE_FILE 5
3462 #define IO_TYPE_IRP 6
3463 #define IO_TYPE_MASTER_ADAPTER 7
3464 #define IO_TYPE_OPEN_PACKET 8
3465 #define IO_TYPE_TIMER 9
3466 #define IO_TYPE_VPB 10
3467 #define IO_TYPE_ERROR_LOG 11
3468 #define IO_TYPE_ERROR_MESSAGE 12
3469 #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
3471 #define IO_TYPE_CSQ_IRP_CONTEXT 1
3472 #define IO_TYPE_CSQ 2
3476 typedef struct _IO_CSQ_IRP_CONTEXT
{
3479 struct _IO_CSQ
*Csq
;
3480 } IO_CSQ_IRP_CONTEXT
, *PIO_CSQ_IRP_CONTEXT
;
3483 (DDKAPI
*PIO_CSQ_INSERT_IRP
)(
3484 IN
struct _IO_CSQ
*Csq
,
3488 (DDKAPI
*PIO_CSQ_REMOVE_IRP
)(
3489 IN
struct _IO_CSQ
*Csq
,
3493 (DDKAPI
*PIO_CSQ_PEEK_NEXT_IRP
)(
3494 IN
struct _IO_CSQ
*Csq
,
3496 IN PVOID PeekContext
);
3499 (DDKAPI
*PIO_CSQ_ACQUIRE_LOCK
)(
3500 IN
struct _IO_CSQ
*Csq
,
3504 (DDKAPI
*PIO_CSQ_RELEASE_LOCK
)(
3505 IN
struct _IO_CSQ
*Csq
,
3509 (DDKAPI
*PIO_CSQ_COMPLETE_CANCELED_IRP
)(
3510 IN
struct _IO_CSQ
*Csq
,
3513 typedef struct _IO_CSQ
{
3515 PIO_CSQ_INSERT_IRP CsqInsertIrp
;
3516 PIO_CSQ_REMOVE_IRP CsqRemoveIrp
;
3517 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
;
3518 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
;
3519 PIO_CSQ_RELEASE_LOCK CsqReleaseLock
;
3520 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
;
3521 PVOID ReservePointer
;
3524 #if !defined(_ALPHA_)
3525 #include <pshpack4.h>
3527 typedef struct _IO_STACK_LOCATION
{
3528 UCHAR MajorFunction
;
3529 UCHAR MinorFunction
;
3534 PIO_SECURITY_CONTEXT SecurityContext
;
3536 USHORT POINTER_ALIGNMENT FileAttributes
;
3538 ULONG POINTER_ALIGNMENT EaLength
;
3542 ULONG POINTER_ALIGNMENT Key
;
3543 LARGE_INTEGER ByteOffset
;
3547 ULONG POINTER_ALIGNMENT Key
;
3548 LARGE_INTEGER ByteOffset
;
3552 PUNICODE_STRING FileName
;
3553 FILE_INFORMATION_CLASS FileInformationClass
;
3558 ULONG CompletionFilter
;
3562 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
3566 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
3567 PFILE_OBJECT FileObject
;
3568 _ANONYMOUS_UNION
union {
3569 _ANONYMOUS_STRUCT
struct {
3570 BOOLEAN ReplaceIfExists
;
3571 BOOLEAN AdvanceOnly
;
3574 HANDLE DeleteHandle
;
3588 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
3592 FS_INFORMATION_CLASS FsInformationClass
;
3595 ULONG OutputBufferLength
;
3596 ULONG InputBufferLength
;
3597 ULONG FsControlCode
;
3598 PVOID Type3InputBuffer
;
3599 } FileSystemControl
;
3601 PLARGE_INTEGER Length
;
3603 LARGE_INTEGER ByteOffset
;
3606 ULONG OutputBufferLength
;
3607 ULONG POINTER_ALIGNMENT InputBufferLength
;
3608 ULONG POINTER_ALIGNMENT IoControlCode
;
3609 PVOID Type3InputBuffer
;
3612 SECURITY_INFORMATION SecurityInformation
;
3613 ULONG POINTER_ALIGNMENT Length
;
3616 SECURITY_INFORMATION SecurityInformation
;
3617 PSECURITY_DESCRIPTOR SecurityDescriptor
;
3621 PDEVICE_OBJECT DeviceObject
;
3625 PDEVICE_OBJECT DeviceObject
;
3628 struct _SCSI_REQUEST_BLOCK
*Srb
;
3633 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
3634 ULONG SidListLength
;
3640 DEVICE_RELATION_TYPE Type
;
3641 } QueryDeviceRelations
;
3643 CONST GUID
*InterfaceType
;
3646 PINTERFACE Interface
;
3647 PVOID InterfaceSpecificData
;
3650 PDEVICE_CAPABILITIES Capabilities
;
3651 } DeviceCapabilities
;
3653 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
3654 } FilterResourceRequirements
;
3659 ULONG POINTER_ALIGNMENT Length
;
3665 BUS_QUERY_ID_TYPE IdType
;
3668 DEVICE_TEXT_TYPE DeviceTextType
;
3669 LCID POINTER_ALIGNMENT LocaleId
;
3673 BOOLEAN Reserved
[3];
3674 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type
;
3675 } UsageNotification
;
3677 SYSTEM_POWER_STATE PowerState
;
3680 PPOWER_SEQUENCE PowerSequence
;
3683 ULONG SystemContext
;
3684 POWER_STATE_TYPE POINTER_ALIGNMENT Type
;
3685 POWER_STATE POINTER_ALIGNMENT State
;
3686 POWER_ACTION POINTER_ALIGNMENT ShutdownType
;
3689 PCM_RESOURCE_LIST AllocatedResources
;
3690 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
3693 ULONG_PTR ProviderId
;
3705 PDEVICE_OBJECT DeviceObject
;
3706 PFILE_OBJECT FileObject
;
3707 PIO_COMPLETION_ROUTINE CompletionRoutine
;
3709 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
3710 #if !defined(_ALPHA_)
3711 #include <poppack.h>
3714 /* IO_STACK_LOCATION.Control */
3716 #define SL_PENDING_RETURNED 0x01
3717 #define SL_ERROR_RETURNED 0x02
3718 #define SL_INVOKE_ON_CANCEL 0x20
3719 #define SL_INVOKE_ON_SUCCESS 0x40
3720 #define SL_INVOKE_ON_ERROR 0x80
3722 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
3724 #define PCI_WHICHSPACE_CONFIG 0x0
3725 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
3727 typedef enum _KEY_INFORMATION_CLASS
{
3728 KeyBasicInformation
,
3732 KeyCachedInformation
,
3734 } KEY_INFORMATION_CLASS
;
3736 typedef struct _KEY_BASIC_INFORMATION
{
3737 LARGE_INTEGER LastWriteTime
;
3741 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
3743 typedef struct _KEY_FULL_INFORMATION
{
3744 LARGE_INTEGER LastWriteTime
;
3752 ULONG MaxValueNameLen
;
3753 ULONG MaxValueDataLen
;
3755 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
3757 typedef struct _KEY_NODE_INFORMATION
{
3758 LARGE_INTEGER LastWriteTime
;
3764 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
3766 typedef struct _KEY_VALUE_BASIC_INFORMATION
{
3771 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
3773 typedef struct _KEY_VALUE_FULL_INFORMATION
{
3780 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
3782 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
{
3787 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
3789 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
{
3793 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64
;
3795 typedef struct _KEY_VALUE_ENTRY
{
3796 PUNICODE_STRING ValueName
;
3800 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
3802 typedef enum _KEY_VALUE_INFORMATION_CLASS
{
3803 KeyValueBasicInformation
,
3804 KeyValueFullInformation
,
3805 KeyValuePartialInformation
,
3806 KeyValueFullInformationAlign64
,
3807 KeyValuePartialInformationAlign64
3808 } KEY_VALUE_INFORMATION_CLASS
;
3810 typedef struct _KEY_WRITE_TIME_INFORMATION
{
3811 LARGE_INTEGER LastWriteTime
;
3812 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
3814 typedef struct _KEY_USER_FLAGS_INFORMATION
{
3816 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
3818 typedef enum _KEY_SET_INFORMATION_CLASS
{
3819 KeyWriteTimeInformation
,
3820 KeyUserFlagsInformation
,
3822 } KEY_SET_INFORMATION_CLASS
;
3824 /* KEY_VALUE_Xxx.Type */
3828 #define REG_EXPAND_SZ 2
3829 #define REG_BINARY 3
3831 #define REG_DWORD_LITTLE_ENDIAN 4
3832 #define REG_DWORD_BIG_ENDIAN 5
3834 #define REG_MULTI_SZ 7
3835 #define REG_RESOURCE_LIST 8