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.
37 #define NTHALAPI DECLSPEC_IMPORT
42 /* Pseudo modifiers for parameters */
50 #define RESTRICTED_POINTER
53 #define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
55 #define POINTER_ALIGNMENT
58 #define DECLSPEC_ADDRSAFE
60 #ifdef NONAMELESSUNION
61 # define _DDK_DUMMYUNION_MEMBER(name) DUMMYUNIONNAME.name
62 # define _DDK_DUMMYUNION_N_MEMBER(n, name) DUMMYUNIONNAME##n.name
64 # define _DDK_DUMMYUNION_MEMBER(name) name
65 # define _DDK_DUMMYUNION_N_MEMBER(n, name) name
71 #define ALIGN_DOWN(s, t) \
72 ((ULONG)(s) & ~(sizeof(t) - 1))
74 #define ALIGN_UP(s, t) \
75 (ALIGN_DOWN(((ULONG)(s) + sizeof(t) - 1), t))
77 #define ALIGN_DOWN_POINTER(p, t) \
78 ((PVOID)((ULONG_PTR)(p) & ~((ULONG_PTR)sizeof(t) - 1)))
80 #define ALIGN_UP_POINTER(p, t) \
81 (ALIGN_DOWN_POINTER(((ULONG_PTR)(p) + sizeof(t) - 1), t))
87 #ifndef __IID_ALIGNED__
88 #define __IID_ALIGNED__
90 inline int IsEqualGUIDAligned(REFGUID guid1
, REFGUID guid2
)
92 return ((*(PLONGLONG
)(&guid1
) == *(PLONGLONG
)(&guid2
)) && (*((PLONGLONG
)(&guid1
) + 1) == *((PLONGLONG
)(&guid2
) + 1)));
95 #define IsEqualGUIDAligned(guid1, guid2) \
96 ((*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)))
101 ** Forward declarations
113 struct _DEVICE_OBJECT
;
114 struct _DRIVER_OBJECT
;
115 struct _IO_STATUS_BLOCK
;
116 struct _DEVICE_DESCRIPTION
;
117 struct _SCATTER_GATHER_LIST
;
118 struct _DRIVE_LAYOUT_INFORMATION
;
119 struct _DRIVE_LAYOUT_INFORMATION_EX
;
120 struct _LOADER_PARAMETER_BLOCK
;
125 /* FIXME: Unknown definitions */
126 struct _SET_PARTITION_INFORMATION_EX
;
127 typedef ULONG WAIT_TYPE
;
130 typedef HANDLE TRACEHANDLE
;
131 typedef PVOID PWMILIB_CONTEXT
;
132 typedef ULONG LOGICAL
;
136 ** WmiLib specific structure
140 IrpProcessed
, // Irp was processed and possibly completed
141 IrpNotCompleted
, // Irp was process and NOT completed
142 IrpNotWmi
, // Irp is not a WMI irp
143 IrpForward
// Irp is wmi irp, but targeted at another device object
144 } SYSCTL_IRP_DISPOSITION
, *PSYSCTL_IRP_DISPOSITION
;
147 ** Routines specific to this DDK
149 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
155 typedef UCHAR KIRQL
, *PKIRQL
;
166 struct _COMPRESSED_DATA_INFO
;
169 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
170 #define ZwCurrentProcess() NtCurrentProcess()
171 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
172 #define ZwCurrentThread() NtCurrentThread()
175 #define KIP0PCRADDRESS 0xffdff000
179 #define KERNEL_STACK_SIZE 12288
180 #define KERNEL_LARGE_STACK_SIZE 61440
181 #define KERNEL_LARGE_STACK_COMMIT 12288
183 #define EXCEPTION_READ_FAULT 0
184 #define EXCEPTION_WRITE_FAULT 1
185 #define EXCEPTION_EXECUTE_FAULT 8
187 #define DPFLTR_ERROR_LEVEL 0
188 #define DPFLTR_WARNING_LEVEL 1
189 #define DPFLTR_TRACE_LEVEL 2
190 #define DPFLTR_INFO_LEVEL 3
191 #define DPFLTR_MASK 0x80000000
193 typedef enum _DPFLTR_TYPE
195 DPFLTR_SYSTEM_ID
= 0,
200 DPFLTR_CRASHDUMP_ID
= 5,
201 DPFLTR_CDAUDIO_ID
= 6,
203 DPFLTR_CLASSPNP_ID
= 8,
205 DPFLTR_REDBOOK_ID
= 10,
206 DPFLTR_STORPROP_ID
= 11,
207 DPFLTR_SCSIPORT_ID
= 12,
208 DPFLTR_SCSIMINIPORT_ID
= 13,
209 DPFLTR_CONFIG_ID
= 14,
210 DPFLTR_I8042PRT_ID
= 15,
211 DPFLTR_SERMOUSE_ID
= 16,
212 DPFLTR_LSERMOUS_ID
= 17,
213 DPFLTR_KBDHID_ID
= 18,
214 DPFLTR_MOUHID_ID
= 19,
215 DPFLTR_KBDCLASS_ID
= 20,
216 DPFLTR_MOUCLASS_ID
= 21,
217 DPFLTR_TWOTRACK_ID
= 22,
218 DPFLTR_WMILIB_ID
= 23,
221 DPFLTR_HALIA64_ID
= 26,
222 DPFLTR_VIDEO_ID
= 27,
223 DPFLTR_SVCHOST_ID
= 28,
224 DPFLTR_VIDEOPRT_ID
= 29,
225 DPFLTR_TCPIP_ID
= 30,
226 DPFLTR_DMSYNTH_ID
= 31,
227 DPFLTR_NTOSPNP_ID
= 32,
228 DPFLTR_FASTFAT_ID
= 33,
229 DPFLTR_SAMSS_ID
= 34,
230 DPFLTR_PNPMGR_ID
= 35,
231 DPFLTR_NETAPI_ID
= 36,
232 DPFLTR_SCSERVER_ID
= 37,
233 DPFLTR_SCCLIENT_ID
= 38,
234 DPFLTR_SERIAL_ID
= 39,
235 DPFLTR_SERENUM_ID
= 40,
237 DPFLTR_BOOTOK_ID
= 42,
238 DPFLTR_BOOTVRFY_ID
= 43,
239 DPFLTR_RPCPROXY_ID
= 44,
240 DPFLTR_AUTOCHK_ID
= 45,
241 DPFLTR_DCOMSS_ID
= 46,
242 DPFLTR_UNIMODEM_ID
= 47,
244 DPFLTR_FLTMGR_ID
= 49,
245 DPFLTR_WMICORE_ID
= 50,
246 DPFLTR_BURNENG_ID
= 51,
247 DPFLTR_IMAPI_ID
= 52,
249 DPFLTR_FUSION_ID
= 54,
250 DPFLTR_IDLETASK_ID
= 55,
251 DPFLTR_SOFTPCI_ID
= 56,
253 DPFLTR_MCHGR_ID
= 58,
255 DPFLTR_PCIIDE_ID
= 60,
256 DPFLTR_FLOPPY_ID
= 61,
258 DPFLTR_TERMSRV_ID
= 63,
259 DPFLTR_W32TIME_ID
= 64,
260 DPFLTR_PREFETCHER_ID
= 65,
261 DPFLTR_RSFILTER_ID
= 66,
262 DPFLTR_FCPORT_ID
= 67,
265 DPFLTR_DMCONFIG_ID
= 70,
266 DPFLTR_DMADMIN_ID
= 71,
267 DPFLTR_WSOCKTRANSPORT_ID
= 72,
269 DPFLTR_PNPMEM_ID
= 74,
270 DPFLTR_PROCESSOR_ID
= 75,
271 DPFLTR_DMSERVER_ID
= 76,
273 DPFLTR_INFINIBAND_ID
= 78,
274 DPFLTR_IHVDRIVER_ID
= 79,
275 DPFLTR_IHVVIDEO_ID
= 80,
276 DPFLTR_IHVAUDIO_ID
= 81,
277 DPFLTR_IHVNETWORK_ID
= 82,
278 DPFLTR_IHVSTREAMING_ID
= 83,
279 DPFLTR_IHVBUS_ID
= 84,
281 DPFLTR_RTLTHREADPOOL_ID
= 86,
283 DPFLTR_TCPIP6_ID
= 88,
284 DPFLTR_ISAPNP_ID
= 89,
286 DPFLTR_STORPORT_ID
= 91,
287 DPFLTR_STORMINIPORT_ID
= 92,
288 DPFLTR_PRINTSPOOLER_ID
= 93,
290 DPFLTR_VDSBAS_ID
= 95,
291 DPFLTR_VDSDYNDR_ID
= 96,
292 DPFLTR_VDSUTIL_ID
= 97,
293 DPFLTR_DFRGIFC_ID
= 98,
294 DPFLTR_DEFAULT_ID
= 99,
296 DPFLTR_DFSC_ID
= 101,
297 DPFLTR_WOW64_ID
= 102,
301 #define MAXIMUM_PROCESSORS 32
303 #define MAXIMUM_WAIT_OBJECTS 64
305 #define EX_RUNDOWN_ACTIVE 0x1
306 #define EX_RUNDOWN_COUNT_SHIFT 0x1
307 #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT)
309 #define METHOD_BUFFERED 0
310 #define METHOD_IN_DIRECT 1
311 #define METHOD_OUT_DIRECT 2
312 #define METHOD_NEITHER 3
314 #define LOW_PRIORITY 0
315 #define LOW_REALTIME_PRIORITY 16
316 #define HIGH_PRIORITY 31
317 #define MAXIMUM_PRIORITY 32
319 #define MAXIMUM_SUSPEND_COUNT MAXCHAR
321 #define MAXIMUM_FILENAME_LENGTH 256
323 #define FILE_SUPERSEDED 0x00000000
324 #define FILE_OPENED 0x00000001
325 #define FILE_CREATED 0x00000002
326 #define FILE_OVERWRITTEN 0x00000003
327 #define FILE_EXISTS 0x00000004
328 #define FILE_DOES_NOT_EXIST 0x00000005
330 #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
331 #define FILE_WRITE_TO_END_OF_FILE 0xffffffff
333 /* also in winnt.h */
334 #define FILE_LIST_DIRECTORY 0x00000001
335 #define FILE_READ_DATA 0x00000001
336 #define FILE_ADD_FILE 0x00000002
337 #define FILE_WRITE_DATA 0x00000002
338 #define FILE_ADD_SUBDIRECTORY 0x00000004
339 #define FILE_APPEND_DATA 0x00000004
340 #define FILE_CREATE_PIPE_INSTANCE 0x00000004
341 #define FILE_READ_EA 0x00000008
342 #define FILE_WRITE_EA 0x00000010
343 #define FILE_EXECUTE 0x00000020
344 #define FILE_TRAVERSE 0x00000020
345 #define FILE_DELETE_CHILD 0x00000040
346 #define FILE_READ_ATTRIBUTES 0x00000080
347 #define FILE_WRITE_ATTRIBUTES 0x00000100
349 #define FILE_SHARE_READ 0x00000001
350 #define FILE_SHARE_WRITE 0x00000002
351 #define FILE_SHARE_DELETE 0x00000004
352 #define FILE_SHARE_VALID_FLAGS 0x00000007
354 #define FILE_ATTRIBUTE_READONLY 0x00000001
355 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
356 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
357 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
358 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
359 #define FILE_ATTRIBUTE_DEVICE 0x00000040
360 #define FILE_ATTRIBUTE_NORMAL 0x00000080
361 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
362 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
363 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
364 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
365 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
366 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
367 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
369 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
370 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
372 #define FILE_COPY_STRUCTURED_STORAGE 0x00000041
373 #define FILE_STRUCTURED_STORAGE 0x00000441
375 #define FILE_VALID_OPTION_FLAGS 0x00ffffff
376 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
377 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
378 #define FILE_VALID_SET_FLAGS 0x00000036
380 #define FILE_SUPERSEDE 0x00000000
381 #define FILE_OPEN 0x00000001
382 #define FILE_CREATE 0x00000002
383 #define FILE_OPEN_IF 0x00000003
384 #define FILE_OVERWRITE 0x00000004
385 #define FILE_OVERWRITE_IF 0x00000005
386 #define FILE_MAXIMUM_DISPOSITION 0x00000005
388 #define FILE_DIRECTORY_FILE 0x00000001
389 #define FILE_WRITE_THROUGH 0x00000002
390 #define FILE_SEQUENTIAL_ONLY 0x00000004
391 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
392 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
393 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
394 #define FILE_NON_DIRECTORY_FILE 0x00000040
395 #define FILE_CREATE_TREE_CONNECTION 0x00000080
396 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
397 #define FILE_NO_EA_KNOWLEDGE 0x00000200
398 #define FILE_OPEN_FOR_RECOVERY 0x00000400
399 #define FILE_RANDOM_ACCESS 0x00000800
400 #define FILE_DELETE_ON_CLOSE 0x00001000
401 #define FILE_OPEN_BY_FILE_ID 0x00002000
402 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
403 #define FILE_NO_COMPRESSION 0x00008000
404 #define FILE_RESERVE_OPFILTER 0x00100000
405 #define FILE_OPEN_REPARSE_POINT 0x00200000
406 #define FILE_OPEN_NO_RECALL 0x00400000
407 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
409 #define FILE_ANY_ACCESS 0x00000000
410 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
411 #define FILE_READ_ACCESS 0x00000001
412 #define FILE_WRITE_ACCESS 0x00000002
414 #define FILE_ALL_ACCESS \
415 (STANDARD_RIGHTS_REQUIRED | \
419 #define FILE_GENERIC_EXECUTE \
420 (STANDARD_RIGHTS_EXECUTE | \
421 FILE_READ_ATTRIBUTES | \
425 #define FILE_GENERIC_READ \
426 (STANDARD_RIGHTS_READ | \
428 FILE_READ_ATTRIBUTES | \
432 #define FILE_GENERIC_WRITE \
433 (STANDARD_RIGHTS_WRITE | \
435 FILE_WRITE_ATTRIBUTES | \
441 #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
443 #define OBJECT_TYPE_CREATE (0x0001)
444 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
446 #define DIRECTORY_QUERY (0x0001)
447 #define DIRECTORY_TRAVERSE (0x0002)
448 #define DIRECTORY_CREATE_OBJECT (0x0004)
449 #define DIRECTORY_CREATE_SUBDIRECTORY (0x0008)
450 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
452 #define EVENT_QUERY_STATE (0x0001)
453 #define EVENT_MODIFY_STATE (0x0002)
454 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
456 #define SEMAPHORE_QUERY_STATE (0x0001)
457 #define SEMAPHORE_MODIFY_STATE (0x0002)
458 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
460 #define THREAD_ALERT (0x0004)
462 #define FM_LOCK_BIT (0x1)
463 #define FM_LOCK_BIT_V (0x0)
464 #define FM_LOCK_WAITER_WOKEN (0x2)
465 #define FM_LOCK_WAITER_INC (0x4)
467 /* Exported object types */
468 extern POBJECT_TYPE NTSYSAPI ExDesktopObjectType
;
469 extern POBJECT_TYPE NTSYSAPI ExEventObjectType
;
470 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType
;
471 extern POBJECT_TYPE NTSYSAPI ExWindowStationObjectType
;
472 extern ULONG NTSYSAPI IoDeviceHandlerObjectSize
;
473 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType
;
474 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType
;
475 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType
;
476 extern POBJECT_TYPE NTSYSAPI IoFileObjectType
;
477 extern POBJECT_TYPE NTSYSAPI PsThreadType
;
478 extern POBJECT_TYPE NTSYSAPI LpcPortObjectType
;
479 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType
;
480 extern POBJECT_TYPE NTSYSAPI PsProcessType
;
482 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
483 extern volatile CCHAR NTSYSAPI KeNumberProcessors
;
485 #if (NTDDI_VERSION >= NTDDI_WINXP)
486 extern CCHAR NTSYSAPI KeNumberProcessors
;
488 //extern PCCHAR KeNumberProcessors;
489 extern NTSYSAPI CCHAR KeNumberProcessors
; //FIXME: Note to Alex: I won't fix this atm, since I prefer to discuss this with you first.
493 #define PROCESSOR_FEATURE_MAX 64
494 #define MAX_WOW64_SHARED_ENTRIES 16
496 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
501 } ALTERNATIVE_ARCHITECTURE_TYPE
;
503 typedef struct _KSYSTEM_TIME
508 } KSYSTEM_TIME
, *PKSYSTEM_TIME
;
510 extern volatile KSYSTEM_TIME KeTickCount
;
512 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
513 #define NX_SUPPORT_POLICY_ALWAYSON 1
514 #define NX_SUPPORT_POLICY_OPTIN 2
515 #define NX_SUPPORT_POLICY_OPTOUT 3
517 typedef struct _KUSER_SHARED_DATA
519 ULONG TickCountLowDeprecated
;
520 ULONG TickCountMultiplier
;
521 volatile KSYSTEM_TIME InterruptTime
;
522 volatile KSYSTEM_TIME SystemTime
;
523 volatile KSYSTEM_TIME TimeZoneBias
;
524 USHORT ImageNumberLow
;
525 USHORT ImageNumberHigh
;
526 WCHAR NtSystemRoot
[260];
527 ULONG MaxStackTraceDepth
;
528 ULONG CryptoExponent
;
530 ULONG LargePageMinimum
;
532 NT_PRODUCT_TYPE NtProductType
;
533 BOOLEAN ProductTypeIsValid
;
534 ULONG NtMajorVersion
;
535 ULONG NtMinorVersion
;
536 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
539 volatile ULONG TimeSlip
;
540 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
541 LARGE_INTEGER SystemExpirationDate
;
543 BOOLEAN KdDebuggerEnabled
;
544 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
545 UCHAR NXSupportPolicy
;
547 volatile ULONG ActiveConsoleId
;
548 volatile ULONG DismountCount
;
549 ULONG ComPlusPackage
;
550 ULONG LastSystemRITEventTickCount
;
551 ULONG NumberOfPhysicalPages
;
552 BOOLEAN SafeBootMode
;
555 ULONGLONG TestRetInstruction
;
557 ULONG SystemCallReturn
;
558 ULONGLONG SystemCallPad
[3];
560 volatile KSYSTEM_TIME TickCount
;
561 volatile ULONG64 TickCountQuad
;
564 #if (NTDDI_VERSION >= NTDDI_WS03)
565 LONGLONG ConsoleSessionForegroundProcessId
;
566 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
568 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
569 USHORT UserModeGlobalLogger
[8];
570 ULONG HeapTracingPid
[2];
571 ULONG CritSecTracingPid
[2];
574 ULONG SharedDataFlags
;
577 ULONG DbgErrorPortPresent
:1;
578 ULONG DbgElevationEnabled
:1;
579 ULONG DbgVirtEnabled
:1;
580 ULONG DbgInstallerDetectEnabled
:1;
584 ULONG ImageFileExecutionOptions
;
585 KAFFINITY ActiveProcessorAffinity
;
587 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
590 ** IRP function codes
593 #define IRP_MJ_CREATE 0x00
594 #define IRP_MJ_CREATE_NAMED_PIPE 0x01
595 #define IRP_MJ_CLOSE 0x02
596 #define IRP_MJ_READ 0x03
597 #define IRP_MJ_WRITE 0x04
598 #define IRP_MJ_QUERY_INFORMATION 0x05
599 #define IRP_MJ_SET_INFORMATION 0x06
600 #define IRP_MJ_QUERY_EA 0x07
601 #define IRP_MJ_SET_EA 0x08
602 #define IRP_MJ_FLUSH_BUFFERS 0x09
603 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
604 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
605 #define IRP_MJ_DIRECTORY_CONTROL 0x0c
606 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
607 #define IRP_MJ_DEVICE_CONTROL 0x0e
608 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
609 #define IRP_MJ_SCSI 0x0f
610 #define IRP_MJ_SHUTDOWN 0x10
611 #define IRP_MJ_LOCK_CONTROL 0x11
612 #define IRP_MJ_CLEANUP 0x12
613 #define IRP_MJ_CREATE_MAILSLOT 0x13
614 #define IRP_MJ_QUERY_SECURITY 0x14
615 #define IRP_MJ_SET_SECURITY 0x15
616 #define IRP_MJ_POWER 0x16
617 #define IRP_MJ_SYSTEM_CONTROL 0x17
618 #define IRP_MJ_DEVICE_CHANGE 0x18
619 #define IRP_MJ_QUERY_QUOTA 0x19
620 #define IRP_MJ_SET_QUOTA 0x1a
621 #define IRP_MJ_PNP 0x1b
622 #define IRP_MJ_PNP_POWER 0x1b
623 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
625 #define IRP_MN_QUERY_DIRECTORY 0x01
626 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
628 #define IRP_MN_USER_FS_REQUEST 0x00
629 #define IRP_MN_MOUNT_VOLUME 0x01
630 #define IRP_MN_VERIFY_VOLUME 0x02
631 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
632 #define IRP_MN_TRACK_LINK 0x04
633 #define IRP_MN_KERNEL_CALL 0x04
635 #define IRP_MN_LOCK 0x01
636 #define IRP_MN_UNLOCK_SINGLE 0x02
637 #define IRP_MN_UNLOCK_ALL 0x03
638 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
640 #define IRP_MN_NORMAL 0x00
641 #define IRP_MN_DPC 0x01
642 #define IRP_MN_MDL 0x02
643 #define IRP_MN_COMPLETE 0x04
644 #define IRP_MN_COMPRESSED 0x08
646 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
647 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
648 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
650 #define IRP_MN_SCSI_CLASS 0x01
652 #define IRP_MN_START_DEVICE 0x00
653 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
654 #define IRP_MN_REMOVE_DEVICE 0x02
655 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
656 #define IRP_MN_STOP_DEVICE 0x04
657 #define IRP_MN_QUERY_STOP_DEVICE 0x05
658 #define IRP_MN_CANCEL_STOP_DEVICE 0x06
660 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
661 #define IRP_MN_QUERY_INTERFACE 0x08
662 #define IRP_MN_QUERY_CAPABILITIES 0x09
663 #define IRP_MN_QUERY_RESOURCES 0x0A
664 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
665 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
666 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
668 #define IRP_MN_READ_CONFIG 0x0F
669 #define IRP_MN_WRITE_CONFIG 0x10
670 #define IRP_MN_EJECT 0x11
671 #define IRP_MN_SET_LOCK 0x12
672 #define IRP_MN_QUERY_ID 0x13
673 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
674 #define IRP_MN_QUERY_BUS_INFORMATION 0x15
675 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
676 #define IRP_MN_SURPRISE_REMOVAL 0x17
677 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
679 #define IRP_MN_WAIT_WAKE 0x00
680 #define IRP_MN_POWER_SEQUENCE 0x01
681 #define IRP_MN_SET_POWER 0x02
682 #define IRP_MN_QUERY_POWER 0x03
684 #define IRP_MN_QUERY_ALL_DATA 0x00
685 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
686 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
687 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
688 #define IRP_MN_ENABLE_EVENTS 0x04
689 #define IRP_MN_DISABLE_EVENTS 0x05
690 #define IRP_MN_ENABLE_COLLECTION 0x06
691 #define IRP_MN_DISABLE_COLLECTION 0x07
692 #define IRP_MN_REGINFO 0x08
693 #define IRP_MN_EXECUTE_METHOD 0x09
695 #define IRP_MN_REGINFO_EX 0x0b
697 typedef enum _IO_PAGING_PRIORITY
699 IoPagingPriorityInvalid
,
700 IoPagingPriorityNormal
,
701 IoPagingPriorityHigh
,
702 IoPagingPriorityReserved1
,
703 IoPagingPriorityReserved2
704 } IO_PAGING_PRIORITY
;
706 typedef enum _IO_ALLOCATION_ACTION
{
709 DeallocateObjectKeepRegisters
710 } IO_ALLOCATION_ACTION
, *PIO_ALLOCATION_ACTION
;
712 typedef IO_ALLOCATION_ACTION
713 (DDKAPI
*PDRIVER_CONTROL
)(
714 IN
struct _DEVICE_OBJECT
*DeviceObject
,
716 IN PVOID MapRegisterBase
,
720 typedef EXCEPTION_DISPOSITION
721 (DDKAPI
*PEXCEPTION_ROUTINE
)(
722 IN
struct _EXCEPTION_RECORD
*ExceptionRecord
,
723 IN PVOID EstablisherFrame
,
724 IN OUT
struct _CONTEXT
*ContextRecord
,
725 IN OUT PVOID DispatcherContext
);
728 (DDKAPI
*PDRIVER_LIST_CONTROL
)(
729 IN
struct _DEVICE_OBJECT
*DeviceObject
,
731 IN
struct _SCATTER_GATHER_LIST
*ScatterGather
,
735 (DDKAPI DRIVER_ADD_DEVICE
)(
736 IN
struct _DRIVER_OBJECT
*DriverObject
,
737 IN
struct _DEVICE_OBJECT
*PhysicalDeviceObject
);
738 typedef DRIVER_ADD_DEVICE
*PDRIVER_ADD_DEVICE
;
741 (DDKAPI IO_COMPLETION_ROUTINE
)(
742 IN
struct _DEVICE_OBJECT
*DeviceObject
,
745 typedef IO_COMPLETION_ROUTINE
*PIO_COMPLETION_ROUTINE
;
748 (DDKAPI DRIVER_CANCEL
)(
749 IN
struct _DEVICE_OBJECT
*DeviceObject
,
750 IN
struct _IRP
*Irp
);
751 typedef DRIVER_CANCEL
*PDRIVER_CANCEL
;
754 (DDKAPI
*PKDEFERRED_ROUTINE
)(
755 IN
struct _KDPC
*Dpc
,
756 IN PVOID DeferredContext
,
757 IN PVOID SystemArgument1
,
758 IN PVOID SystemArgument2
);
761 (DDKAPI DRIVER_DISPATCH
)(
762 IN
struct _DEVICE_OBJECT
*DeviceObject
,
763 IN
struct _IRP
*Irp
);
764 typedef DRIVER_DISPATCH
*PDRIVER_DISPATCH
;
767 (DDKAPI
*PIO_DPC_ROUTINE
)(
768 IN
struct _KDPC
*Dpc
,
769 IN
struct _DEVICE_OBJECT
*DeviceObject
,
774 (DDKAPI
*PMM_DLL_INITIALIZE
)(
775 IN PUNICODE_STRING RegistryPath
);
778 (DDKAPI
*PMM_DLL_UNLOAD
)(
782 (DDKAPI
*PDRIVER_ENTRY
)(
783 IN
struct _DRIVER_OBJECT
*DriverObject
,
784 IN PUNICODE_STRING RegistryPath
);
787 (DDKAPI DRIVER_INITIALIZE
)(
788 IN
struct _DRIVER_OBJECT
*DriverObject
,
789 IN PUNICODE_STRING RegistryPath
);
790 typedef DRIVER_INITIALIZE
*PDRIVER_INITIALIZE
;
793 (DDKAPI KSERVICE_ROUTINE
)(
794 IN
struct _KINTERRUPT
*Interrupt
,
795 IN PVOID ServiceContext
);
796 typedef KSERVICE_ROUTINE
*PKSERVICE_ROUTINE
;
799 (DDKAPI
*PIO_TIMER_ROUTINE
)(
800 IN
struct _DEVICE_OBJECT
*DeviceObject
,
804 (DDKAPI
*PDRIVER_REINITIALIZE
)(
805 IN
struct _DRIVER_OBJECT
*DriverObject
,
810 (DDKAPI DRIVER_STARTIO
)(
811 IN
struct _DEVICE_OBJECT
*DeviceObject
,
812 IN
struct _IRP
*Irp
);
813 typedef DRIVER_STARTIO
*PDRIVER_STARTIO
;
816 (DDKAPI
*PKSYNCHRONIZE_ROUTINE
)(
817 IN PVOID SynchronizeContext
);
820 (DDKAPI DRIVER_UNLOAD
)(
821 IN
struct _DRIVER_OBJECT
*DriverObject
);
822 typedef DRIVER_UNLOAD
*PDRIVER_UNLOAD
;
827 ** Plug and Play structures
831 (DDKAPI
*PINTERFACE_REFERENCE
)(
835 (DDKAPI
*PINTERFACE_DEREFERENCE
)(
839 (DDKAPI
*PTRANSLATE_BUS_ADDRESS
)(
841 IN PHYSICAL_ADDRESS BusAddress
,
843 IN OUT PULONG AddressSpace
,
844 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
846 typedef struct _DMA_ADAPTER
*
847 (DDKAPI
*PGET_DMA_ADAPTER
)(
849 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
850 OUT PULONG NumberOfMapRegisters
);
853 (DDKAPI
*PGET_SET_DEVICE_DATA
)(
860 /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
861 #define PCI_USE_SUBSYSTEM_IDS 0x00000001
862 #define PCI_USE_REVISION 0x00000002
863 #define PCI_USE_VENDEV_IDS 0x00000004
864 #define PCI_USE_CLASS_SUBCLASS 0x00000008
865 #define PCI_USE_PROGIF 0x00000010
866 #define PCI_USE_LOCAL_BUS 0x00000020
867 #define PCI_USE_LOCAL_DEVICE 0x00000040
869 typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS
{
880 } PCI_DEVICE_PRESENCE_PARAMETERS
, *PPCI_DEVICE_PRESENCE_PARAMETERS
;
883 (DDKAPI
*PPCI_IS_DEVICE_PRESENT
)(
887 IN USHORT SubVendorID
,
888 IN USHORT SubSystemID
,
892 (DDKAPI
*PPCI_IS_DEVICE_PRESENT_EX
)(
894 IN PPCI_DEVICE_PRESENCE_PARAMETERS Parameters
);
896 typedef union _POWER_STATE
{
897 SYSTEM_POWER_STATE SystemState
;
898 DEVICE_POWER_STATE DeviceState
;
899 } POWER_STATE
, *PPOWER_STATE
;
901 typedef enum _POWER_STATE_TYPE
{
904 } POWER_STATE_TYPE
, *PPOWER_STATE_TYPE
;
906 typedef struct _BUS_INTERFACE_STANDARD
{
910 PINTERFACE_REFERENCE InterfaceReference
;
911 PINTERFACE_DEREFERENCE InterfaceDereference
;
912 PTRANSLATE_BUS_ADDRESS TranslateBusAddress
;
913 PGET_DMA_ADAPTER GetDmaAdapter
;
914 PGET_SET_DEVICE_DATA SetBusData
;
915 PGET_SET_DEVICE_DATA GetBusData
;
916 } BUS_INTERFACE_STANDARD
, *PBUS_INTERFACE_STANDARD
;
918 typedef struct _PCI_DEVICE_PRESENT_INTERFACE
{
922 PINTERFACE_REFERENCE InterfaceReference
;
923 PINTERFACE_DEREFERENCE InterfaceDereference
;
924 PPCI_IS_DEVICE_PRESENT IsDevicePresent
;
925 PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx
;
926 } PCI_DEVICE_PRESENT_INTERFACE
, *PPCI_DEVICE_PRESENT_INTERFACE
;
928 typedef struct _DEVICE_CAPABILITIES
{
933 ULONG LockSupported
: 1;
934 ULONG EjectSupported
: 1;
936 ULONG DockDevice
: 1;
938 ULONG SilentInstall
: 1;
939 ULONG RawDeviceOK
: 1;
940 ULONG SurpriseRemovalOK
: 1;
941 ULONG WakeFromD0
: 1;
942 ULONG WakeFromD1
: 1;
943 ULONG WakeFromD2
: 1;
944 ULONG WakeFromD3
: 1;
945 ULONG HardwareDisabled
: 1;
946 ULONG NonDynamic
: 1;
947 ULONG WarmEjectSupported
: 1;
948 ULONG NoDisplayInUI
: 1;
952 DEVICE_POWER_STATE DeviceState
[PowerSystemMaximum
];
953 SYSTEM_POWER_STATE SystemWake
;
954 DEVICE_POWER_STATE DeviceWake
;
958 } DEVICE_CAPABILITIES
, *PDEVICE_CAPABILITIES
;
960 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION
{
964 GUID InterfaceClassGuid
;
965 PUNICODE_STRING SymbolicLinkName
;
966 } DEVICE_INTERFACE_CHANGE_NOTIFICATION
, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION
;
968 typedef struct _HWPROFILE_CHANGE_NOTIFICATION
{
972 } HWPROFILE_CHANGE_NOTIFICATION
, *PHWPROFILE_CHANGE_NOTIFICATION
;
976 typedef struct _INTERFACE
{
980 PINTERFACE_REFERENCE InterfaceReference
;
981 PINTERFACE_DEREFERENCE InterfaceDereference
;
982 } INTERFACE
, *PINTERFACE
;
984 typedef struct _PLUGPLAY_NOTIFICATION_HEADER
{
988 } PLUGPLAY_NOTIFICATION_HEADER
, *PPLUGPLAY_NOTIFICATION_HEADER
;
990 typedef ULONG PNP_DEVICE_STATE
, *PPNP_DEVICE_STATE
;
992 /* PNP_DEVICE_STATE */
994 #define PNP_DEVICE_DISABLED 0x00000001
995 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
996 #define PNP_DEVICE_FAILED 0x00000004
997 #define PNP_DEVICE_REMOVED 0x00000008
998 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
999 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
1001 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION
{
1005 struct _FILE_OBJECT
*FileObject
;
1006 LONG NameBufferOffset
;
1007 UCHAR CustomDataBuffer
[1];
1008 } TARGET_DEVICE_CUSTOM_NOTIFICATION
, *PTARGET_DEVICE_CUSTOM_NOTIFICATION
;
1010 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION
{
1014 struct _FILE_OBJECT
*FileObject
;
1015 } TARGET_DEVICE_REMOVAL_NOTIFICATION
, *PTARGET_DEVICE_REMOVAL_NOTIFICATION
;
1017 typedef enum _BUS_QUERY_ID_TYPE
{
1019 BusQueryHardwareIDs
,
1020 BusQueryCompatibleIDs
,
1022 BusQueryDeviceSerialNumber
1023 } BUS_QUERY_ID_TYPE
, *PBUS_QUERY_ID_TYPE
;
1025 typedef enum _DEVICE_TEXT_TYPE
{
1026 DeviceTextDescription
,
1027 DeviceTextLocationInformation
1028 } DEVICE_TEXT_TYPE
, *PDEVICE_TEXT_TYPE
;
1030 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE
{
1031 DeviceUsageTypeUndefined
,
1032 DeviceUsageTypePaging
,
1033 DeviceUsageTypeHibernation
,
1034 DeviceUsageTypeDumpFile
1035 } DEVICE_USAGE_NOTIFICATION_TYPE
;
1037 typedef struct _POWER_SEQUENCE
{
1041 } POWER_SEQUENCE
, *PPOWER_SEQUENCE
;
1044 DevicePropertyDeviceDescription
,
1045 DevicePropertyHardwareID
,
1046 DevicePropertyCompatibleIDs
,
1047 DevicePropertyBootConfiguration
,
1048 DevicePropertyBootConfigurationTranslated
,
1049 DevicePropertyClassName
,
1050 DevicePropertyClassGuid
,
1051 DevicePropertyDriverKeyName
,
1052 DevicePropertyManufacturer
,
1053 DevicePropertyFriendlyName
,
1054 DevicePropertyLocationInformation
,
1055 DevicePropertyPhysicalDeviceObjectName
,
1056 DevicePropertyBusTypeGuid
,
1057 DevicePropertyLegacyBusType
,
1058 DevicePropertyBusNumber
,
1059 DevicePropertyEnumeratorName
,
1060 DevicePropertyAddress
,
1061 DevicePropertyUINumber
,
1062 DevicePropertyInstallState
,
1063 DevicePropertyRemovalPolicy
1064 } DEVICE_REGISTRY_PROPERTY
;
1066 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY
{
1067 EventCategoryReserved
,
1068 EventCategoryHardwareProfileChange
,
1069 EventCategoryDeviceInterfaceChange
,
1070 EventCategoryTargetDeviceChange
1071 } IO_NOTIFICATION_EVENT_CATEGORY
;
1073 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
1076 (DDKAPI
*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE
)(
1077 IN PVOID NotificationStructure
,
1081 (DDKAPI
*PDEVICE_CHANGE_COMPLETE_CALLBACK
)(
1086 ** System structures
1089 #define SYMBOLIC_LINK_QUERY 0x0001
1090 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
1092 /* also in winnt,h */
1093 #define DUPLICATE_CLOSE_SOURCE 0x00000001
1094 #define DUPLICATE_SAME_ACCESS 0x00000002
1095 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
1098 typedef struct _OBJECT_NAME_INFORMATION
{
1099 UNICODE_STRING Name
;
1100 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
1102 typedef struct _IO_STATUS_BLOCK
{
1103 _ANONYMOUS_UNION
union {
1107 ULONG_PTR Information
;
1108 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
1111 (DDKAPI
*PIO_APC_ROUTINE
)(
1112 IN PVOID ApcContext
,
1113 IN PIO_STATUS_BLOCK IoStatusBlock
,
1117 (DDKAPI
*PKNORMAL_ROUTINE
)(
1118 IN PVOID NormalContext
,
1119 IN PVOID SystemArgument1
,
1120 IN PVOID SystemArgument2
);
1123 (DDKAPI
*PKKERNEL_ROUTINE
)(
1124 IN
struct _KAPC
*Apc
,
1125 IN OUT PKNORMAL_ROUTINE
*NormalRoutine
,
1126 IN OUT PVOID
*NormalContext
,
1127 IN OUT PVOID
*SystemArgument1
,
1128 IN OUT PVOID
*SystemArgument2
);
1131 (DDKAPI
*PKRUNDOWN_ROUTINE
)(
1132 IN
struct _KAPC
*Apc
);
1135 (DDKAPI
*PKTRANSFER_ROUTINE
)(
1138 typedef struct _KAPC
1145 struct _KTHREAD
*Thread
;
1146 LIST_ENTRY ApcListEntry
;
1147 PKKERNEL_ROUTINE KernelRoutine
;
1148 PKRUNDOWN_ROUTINE RundownRoutine
;
1149 PKNORMAL_ROUTINE NormalRoutine
;
1150 PVOID NormalContext
;
1151 PVOID SystemArgument1
;
1152 PVOID SystemArgument2
;
1153 CCHAR ApcStateIndex
;
1154 KPROCESSOR_MODE ApcMode
;
1156 } KAPC
, *PKAPC
, *RESTRICTED_POINTER PRKAPC
;
1158 typedef struct _KDEVICE_QUEUE
{
1161 LIST_ENTRY DeviceListHead
;
1164 } KDEVICE_QUEUE
, *PKDEVICE_QUEUE
, *RESTRICTED_POINTER PRKDEVICE_QUEUE
;
1166 typedef struct _KDEVICE_QUEUE_ENTRY
{
1167 LIST_ENTRY DeviceListEntry
;
1170 } KDEVICE_QUEUE_ENTRY
, *PKDEVICE_QUEUE_ENTRY
,
1171 *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY
;
1173 #define LOCK_QUEUE_WAIT 1
1174 #define LOCK_QUEUE_OWNER 2
1175 #define LOCK_QUEUE_TIMER_LOCK_SHIFT 4
1176 #define LOCK_QUEUE_TIMER_TABLE_LOCKS (1 << (8 - LOCK_QUEUE_TIMER_LOCK_SHIFT))
1178 typedef enum _KSPIN_LOCK_QUEUE_NUMBER
1180 LockQueueDispatcherLock
,
1181 LockQueueExpansionLock
,
1183 LockQueueSystemSpaceLock
,
1185 LockQueueMasterLock
,
1186 LockQueueNonPagedPoolLock
,
1187 LockQueueIoCancelLock
,
1188 LockQueueWorkQueueLock
,
1190 LockQueueIoDatabaseLock
,
1191 LockQueueIoCompletionLock
,
1192 LockQueueNtfsStructLock
,
1193 LockQueueAfdWorkQueueLock
,
1195 LockQueueMmNonPagedPoolLock
,
1196 LockQueueUnusedSpare16
,
1197 LockQueueTimerTableLock
,
1198 LockQueueMaximumLock
= LockQueueTimerTableLock
+ LOCK_QUEUE_TIMER_TABLE_LOCKS
1199 } KSPIN_LOCK_QUEUE_NUMBER
, *PKSPIN_LOCK_QUEUE_NUMBER
;
1201 typedef struct _KSPIN_LOCK_QUEUE
{
1202 struct _KSPIN_LOCK_QUEUE
*volatile Next
;
1203 PKSPIN_LOCK
volatile Lock
;
1204 } KSPIN_LOCK_QUEUE
, *PKSPIN_LOCK_QUEUE
;
1206 typedef struct _KLOCK_QUEUE_HANDLE
{
1207 KSPIN_LOCK_QUEUE LockQueue
;
1209 } KLOCK_QUEUE_HANDLE
, *PKLOCK_QUEUE_HANDLE
;
1211 #define DPC_NORMAL 0
1212 #define DPC_THREADED 1
1214 #define ASSERT_APC(Object) \
1215 ASSERT((Object)->Type == ApcObject)
1217 #define ASSERT_DPC(Object) \
1218 ASSERT(((Object)->Type == 0) || \
1219 ((Object)->Type == DpcObject) || \
1220 ((Object)->Type == ThreadedDpcObject))
1222 #define ASSERT_DEVICE_QUEUE(Object) \
1223 ASSERT((Object)->Type == DeviceQueueObject)
1225 typedef struct _KDPC
1230 LIST_ENTRY DpcListEntry
;
1231 PKDEFERRED_ROUTINE DeferredRoutine
;
1232 PVOID DeferredContext
;
1233 PVOID SystemArgument1
;
1234 PVOID SystemArgument2
;
1235 volatile PVOID DpcData
;
1236 } KDPC
, *PKDPC
, *RESTRICTED_POINTER PRKDPC
;
1238 typedef PVOID PKIPI_CONTEXT
;
1242 (NTAPI
*PKIPI_WORKER
)(
1243 IN PKIPI_CONTEXT PacketContext
,
1244 IN PVOID Parameter1
,
1245 IN PVOID Parameter2
,
1249 typedef struct _WAIT_CONTEXT_BLOCK
{
1250 KDEVICE_QUEUE_ENTRY WaitQueueEntry
;
1251 PDRIVER_CONTROL DeviceRoutine
;
1252 PVOID DeviceContext
;
1253 ULONG NumberOfMapRegisters
;
1256 PKDPC BufferChainingDpc
;
1257 } WAIT_CONTEXT_BLOCK
, *PWAIT_CONTEXT_BLOCK
;
1259 #define ASSERT_GATE(object) \
1260 ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
1261 (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
1263 typedef struct _KGATE
1265 DISPATCHER_HEADER Header
;
1266 } KGATE
, *PKGATE
, *RESTRICTED_POINTER PRKGATE
;
1268 #define GM_LOCK_BIT 0x1
1269 #define GM_LOCK_BIT_V 0x0
1270 #define GM_LOCK_WAITER_WOKEN 0x2
1271 #define GM_LOCK_WAITER_INC 0x4
1273 typedef struct _KGUARDED_MUTEX
1275 volatile LONG Count
;
1283 SHORT KernelApcDisable
;
1284 SHORT SpecialApcDisable
;
1286 ULONG CombinedApcDisable
;
1288 } KGUARDED_MUTEX
, *PKGUARDED_MUTEX
;
1290 #define TIMER_TABLE_SIZE 512
1291 #define TIMER_TABLE_SHIFT 9
1293 typedef struct _KTIMER
{
1294 DISPATCHER_HEADER Header
;
1295 ULARGE_INTEGER DueTime
;
1296 LIST_ENTRY TimerListEntry
;
1299 } KTIMER
, *PKTIMER
, *RESTRICTED_POINTER PRKTIMER
;
1301 #define ASSERT_TIMER(E) \
1302 ASSERT(((E)->Header.Type == TimerNotificationObject) || \
1303 ((E)->Header.Type == TimerSynchronizationObject))
1305 #define ASSERT_MUTANT(E) \
1306 ASSERT((E)->Header.Type == MutantObject)
1308 #define ASSERT_SEMAPHORE(E) \
1309 ASSERT((E)->Header.Type == SemaphoreObject)
1311 #define ASSERT_EVENT(E) \
1312 ASSERT(((E)->Header.Type == NotificationEvent) || \
1313 ((E)->Header.Type == SynchronizationEvent))
1315 typedef struct _KMUTANT
{
1316 DISPATCHER_HEADER Header
;
1317 LIST_ENTRY MutantListEntry
;
1318 struct _KTHREAD
*RESTRICTED_POINTER OwnerThread
;
1321 } KMUTANT
, *PKMUTANT
, *RESTRICTED_POINTER PRKMUTANT
, KMUTEX
, *PKMUTEX
, *RESTRICTED_POINTER PRKMUTEX
;
1323 typedef enum _TIMER_TYPE
{
1325 SynchronizationTimer
1328 #define EVENT_INCREMENT 1
1329 #define IO_NO_INCREMENT 0
1330 #define IO_CD_ROM_INCREMENT 1
1331 #define IO_DISK_INCREMENT 1
1332 #define IO_KEYBOARD_INCREMENT 6
1333 #define IO_MAILSLOT_INCREMENT 2
1334 #define IO_MOUSE_INCREMENT 6
1335 #define IO_NAMED_PIPE_INCREMENT 2
1336 #define IO_NETWORK_INCREMENT 2
1337 #define IO_PARALLEL_INCREMENT 1
1338 #define IO_SERIAL_INCREMENT 2
1339 #define IO_SOUND_INCREMENT 8
1340 #define IO_VIDEO_INCREMENT 1
1341 #define SEMAPHORE_INCREMENT 1
1343 #define MM_MAXIMUM_DISK_IO_SIZE (0x10000)
1345 typedef struct _IRP
{
1348 struct _MDL
*MdlAddress
;
1351 struct _IRP
*MasterIrp
;
1352 volatile LONG IrpCount
;
1355 LIST_ENTRY ThreadListEntry
;
1356 IO_STATUS_BLOCK IoStatus
;
1357 KPROCESSOR_MODE RequestorMode
;
1358 BOOLEAN PendingReturned
;
1360 CHAR CurrentLocation
;
1363 CCHAR ApcEnvironment
;
1364 UCHAR AllocationFlags
;
1365 PIO_STATUS_BLOCK UserIosb
;
1369 PIO_APC_ROUTINE UserApcRoutine
;
1370 PVOID UserApcContext
;
1371 } AsynchronousParameters
;
1372 LARGE_INTEGER AllocationSize
;
1374 volatile PDRIVER_CANCEL CancelRoutine
;
1378 _ANONYMOUS_UNION
union {
1379 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
1380 _ANONYMOUS_STRUCT
struct {
1381 PVOID DriverContext
[4];
1385 PCHAR AuxiliaryBuffer
;
1386 _ANONYMOUS_STRUCT
struct {
1387 LIST_ENTRY ListEntry
;
1388 _ANONYMOUS_UNION
union {
1389 struct _IO_STACK_LOCATION
*CurrentStackLocation
;
1393 struct _FILE_OBJECT
*OriginalFileObject
;
1396 PVOID CompletionKey
;
1399 typedef struct _IRP
*PIRP
;
1403 #define SL_FORCE_ACCESS_CHECK 0x01
1404 #define SL_OPEN_PAGING_FILE 0x02
1405 #define SL_OPEN_TARGET_DIRECTORY 0x04
1406 #define SL_CASE_SENSITIVE 0x80
1408 #define SL_KEY_SPECIFIED 0x01
1409 #define SL_OVERRIDE_VERIFY_VOLUME 0x02
1410 #define SL_WRITE_THROUGH 0x04
1411 #define SL_FT_SEQUENTIAL_WRITE 0x08
1413 #define SL_FAIL_IMMEDIATELY 0x01
1414 #define SL_EXCLUSIVE_LOCK 0x02
1416 #define SL_RESTART_SCAN 0x01
1417 #define SL_RETURN_SINGLE_ENTRY 0x02
1418 #define SL_INDEX_SPECIFIED 0x04
1420 #define SL_WATCH_TREE 0x01
1422 #define SL_ALLOW_RAW_MOUNT 0x01
1424 #define CTL_CODE(DeviceType, Function, Method, Access)( \
1425 ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
1427 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
1432 IRP_PAGING_IO
= 0x2,
1433 IRP_MOUNT_COMPLETION
= 0x2,
1434 IRP_SYNCHRONOUS_API
= 0x4,
1435 IRP_ASSOCIATED_IRP
= 0x8,
1436 IRP_BUFFERED_IO
= 0x10,
1437 IRP_DEALLOCATE_BUFFER
= 0x20,
1438 IRP_INPUT_OPERATION
= 0x40,
1439 IRP_SYNCHRONOUS_PAGING_IO
= 0x40,
1440 IRP_CREATE_OPERATION
= 0x80,
1441 IRP_READ_OPERATION
= 0x100,
1442 IRP_WRITE_OPERATION
= 0x200,
1443 IRP_CLOSE_OPERATION
= 0x400,
1444 IRP_DEFER_IO_COMPLETION
= 0x800,
1445 IRP_OB_QUERY_NAME
= 0x1000,
1446 IRP_HOLD_DEVICE_QUEUE
= 0x2000,
1447 IRP_RETRY_IO_COMPLETION
= 0x4000
1450 #define IRP_QUOTA_CHARGED 0x01
1451 #define IRP_ALLOCATED_MUST_SUCCEED 0x02
1452 #define IRP_ALLOCATED_FIXED_SIZE 0x04
1453 #define IRP_LOOKASIDE_ALLOCATION 0x08
1455 typedef struct _BOOTDISK_INFORMATION
{
1456 LONGLONG BootPartitionOffset
;
1457 LONGLONG SystemPartitionOffset
;
1458 ULONG BootDeviceSignature
;
1459 ULONG SystemDeviceSignature
;
1460 } BOOTDISK_INFORMATION
, *PBOOTDISK_INFORMATION
;
1462 typedef struct _BOOTDISK_INFORMATION_EX
{
1463 LONGLONG BootPartitionOffset
;
1464 LONGLONG SystemPartitionOffset
;
1465 ULONG BootDeviceSignature
;
1466 ULONG SystemDeviceSignature
;
1467 GUID BootDeviceGuid
;
1468 GUID SystemDeviceGuid
;
1469 BOOLEAN BootDeviceIsGpt
;
1470 BOOLEAN SystemDeviceIsGpt
;
1471 } BOOTDISK_INFORMATION_EX
, *PBOOTDISK_INFORMATION_EX
;
1473 typedef struct _EISA_MEMORY_TYPE
{
1474 UCHAR ReadWrite
: 1;
1476 UCHAR Reserved0
: 1;
1479 UCHAR Reserved1
: 1;
1480 UCHAR MoreEntries
: 1;
1481 } EISA_MEMORY_TYPE
, *PEISA_MEMORY_TYPE
;
1483 #include <pshpack1.h>
1484 typedef struct _EISA_MEMORY_CONFIGURATION
{
1485 EISA_MEMORY_TYPE ConfigurationByte
;
1487 USHORT AddressLowWord
;
1488 UCHAR AddressHighByte
;
1490 } EISA_MEMORY_CONFIGURATION
, *PEISA_MEMORY_CONFIGURATION
;
1491 #include <poppack.h>
1493 typedef struct _EISA_IRQ_DESCRIPTOR
{
1494 UCHAR Interrupt
: 4;
1496 UCHAR LevelTriggered
: 1;
1498 UCHAR MoreEntries
: 1;
1499 } EISA_IRQ_DESCRIPTOR
, *PEISA_IRQ_DESCRIPTOR
;
1501 typedef struct _EISA_IRQ_CONFIGURATION
{
1502 EISA_IRQ_DESCRIPTOR ConfigurationByte
;
1504 } EISA_IRQ_CONFIGURATION
, *PEISA_IRQ_CONFIGURATION
;
1506 typedef struct _DMA_CONFIGURATION_BYTE0
{
1510 UCHAR MoreEntries
: 1;
1511 } DMA_CONFIGURATION_BYTE0
;
1513 typedef struct _DMA_CONFIGURATION_BYTE1
{
1514 UCHAR Reserved0
: 2;
1515 UCHAR TransferSize
: 2;
1517 UCHAR Reserved1
: 2;
1518 } DMA_CONFIGURATION_BYTE1
;
1520 typedef struct _EISA_DMA_CONFIGURATION
{
1521 DMA_CONFIGURATION_BYTE0 ConfigurationByte0
;
1522 DMA_CONFIGURATION_BYTE1 ConfigurationByte1
;
1523 } EISA_DMA_CONFIGURATION
, *PEISA_DMA_CONFIGURATION
;
1525 #include <pshpack1.h>
1526 typedef struct _EISA_PORT_DESCRIPTOR
{
1527 UCHAR NumberPorts
: 5;
1530 UCHAR MoreEntries
: 1;
1531 } EISA_PORT_DESCRIPTOR
, *PEISA_PORT_DESCRIPTOR
;
1533 typedef struct _EISA_PORT_CONFIGURATION
{
1534 EISA_PORT_DESCRIPTOR Configuration
;
1536 } EISA_PORT_CONFIGURATION
, *PEISA_PORT_CONFIGURATION
;
1537 #include <poppack.h>
1539 typedef struct _CM_EISA_FUNCTION_INFORMATION
{
1543 UCHAR MinorRevision
;
1544 UCHAR MajorRevision
;
1545 UCHAR Selections
[26];
1546 UCHAR FunctionFlags
;
1547 UCHAR TypeString
[80];
1548 EISA_MEMORY_CONFIGURATION EisaMemory
[9];
1549 EISA_IRQ_CONFIGURATION EisaIrq
[7];
1550 EISA_DMA_CONFIGURATION EisaDma
[4];
1551 EISA_PORT_CONFIGURATION EisaPort
[20];
1552 UCHAR InitializationData
[60];
1553 } CM_EISA_FUNCTION_INFORMATION
, *PCM_EISA_FUNCTION_INFORMATION
;
1555 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
1557 #define EISA_FUNCTION_ENABLED 0x80
1558 #define EISA_FREE_FORM_DATA 0x40
1559 #define EISA_HAS_PORT_INIT_ENTRY 0x20
1560 #define EISA_HAS_PORT_RANGE 0x10
1561 #define EISA_HAS_DMA_ENTRY 0x08
1562 #define EISA_HAS_IRQ_ENTRY 0x04
1563 #define EISA_HAS_MEMORY_ENTRY 0x02
1564 #define EISA_HAS_TYPE_ENTRY 0x01
1565 #define EISA_HAS_INFORMATION \
1566 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
1567 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
1569 typedef struct _CM_EISA_SLOT_INFORMATION
{
1572 UCHAR MajorRevision
;
1573 UCHAR MinorRevision
;
1575 UCHAR NumberFunctions
;
1576 UCHAR FunctionInformation
;
1578 } CM_EISA_SLOT_INFORMATION
, *PCM_EISA_SLOT_INFORMATION
;
1580 /* CM_EISA_SLOT_INFORMATION.ReturnCode */
1582 #define EISA_INVALID_SLOT 0x80
1583 #define EISA_INVALID_FUNCTION 0x81
1584 #define EISA_INVALID_CONFIGURATION 0x82
1585 #define EISA_EMPTY_SLOT 0x83
1586 #define EISA_INVALID_BIOS_CALL 0x86
1588 typedef struct _CM_FLOPPY_DEVICE_DATA
{
1594 UCHAR StepRateHeadUnloadTime
;
1597 UCHAR SectorLengthCode
;
1598 UCHAR SectorPerTrack
;
1599 UCHAR ReadWriteGapLength
;
1600 UCHAR DataTransferLength
;
1601 UCHAR FormatGapLength
;
1602 UCHAR FormatFillCharacter
;
1603 UCHAR HeadSettleTime
;
1604 UCHAR MotorSettleTime
;
1605 UCHAR MaximumTrackValue
;
1606 UCHAR DataTransferRate
;
1607 } CM_FLOPPY_DEVICE_DATA
, *PCM_FLOPPY_DEVICE_DATA
;
1609 typedef struct _PNP_BUS_INFORMATION
{
1611 INTERFACE_TYPE LegacyBusType
;
1613 } PNP_BUS_INFORMATION
, *PPNP_BUS_INFORMATION
;
1615 #include <pshpack1.h>
1616 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
1618 #define CmResourceTypeNull 0
1619 #define CmResourceTypePort 1
1620 #define CmResourceTypeInterrupt 2
1621 #define CmResourceTypeMemory 3
1622 #define CmResourceTypeDma 4
1623 #define CmResourceTypeDeviceSpecific 5
1624 #define CmResourceTypeBusNumber 6
1625 #define CmResourceTypeMaximum 7
1626 #define CmResourceTypeNonArbitrated 128
1627 #define CmResourceTypeConfigData 128
1628 #define CmResourceTypeDevicePrivate 129
1629 #define CmResourceTypePcCardConfig 130
1630 #define CmResourceTypeMfCardConfig 131
1632 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
1634 typedef enum _CM_SHARE_DISPOSITION
{
1635 CmResourceShareUndetermined
,
1636 CmResourceShareDeviceExclusive
,
1637 CmResourceShareDriverExclusive
,
1638 CmResourceShareShared
1639 } CM_SHARE_DISPOSITION
;
1641 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
1643 #define CM_RESOURCE_PORT_MEMORY 0x0000
1644 #define CM_RESOURCE_PORT_IO 0x0001
1645 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
1646 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
1647 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
1648 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
1649 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
1650 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
1652 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
1654 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
1655 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
1657 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
1659 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
1660 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
1661 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
1662 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
1663 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
1664 #define CM_RESOURCE_MEMORY_24 0x0010
1665 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
1667 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
1669 #define CM_RESOURCE_DMA_8 0x0000
1670 #define CM_RESOURCE_DMA_16 0x0001
1671 #define CM_RESOURCE_DMA_32 0x0002
1672 #define CM_RESOURCE_DMA_8_AND_16 0x0004
1673 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
1674 #define CM_RESOURCE_DMA_TYPE_A 0x0010
1675 #define CM_RESOURCE_DMA_TYPE_B 0x0020
1676 #define CM_RESOURCE_DMA_TYPE_F 0x0040
1678 typedef struct _CM_PARTIAL_RESOURCE_LIST
{
1682 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
1683 } CM_PARTIAL_RESOURCE_LIST
, *PCM_PARTIAL_RESOURCE_LIST
;
1685 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
{
1686 INTERFACE_TYPE InterfaceType
;
1688 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
1689 } CM_FULL_RESOURCE_DESCRIPTOR
, *PCM_FULL_RESOURCE_DESCRIPTOR
;
1691 typedef struct _CM_RESOURCE_LIST
{
1693 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
1694 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
1696 typedef struct _CM_INT13_DRIVE_PARAMETER
{
1699 USHORT SectorsPerTrack
;
1701 USHORT NumberDrives
;
1702 } CM_INT13_DRIVE_PARAMETER
, *PCM_INT13_DRIVE_PARAMETER
;
1704 typedef struct _CM_PNP_BIOS_DEVICE_NODE
1709 UCHAR DeviceType
[3];
1710 USHORT DeviceAttributes
;
1711 } CM_PNP_BIOS_DEVICE_NODE
,*PCM_PNP_BIOS_DEVICE_NODE
;
1713 typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK
1718 USHORT ControlField
;
1720 ULONG EventFlagAddress
;
1721 USHORT RealModeEntryOffset
;
1722 USHORT RealModeEntrySegment
;
1723 USHORT ProtectedModeEntryOffset
;
1724 ULONG ProtectedModeCodeBaseAddress
;
1726 USHORT RealModeDataBaseAddress
;
1727 ULONG ProtectedModeDataBaseAddress
;
1728 } CM_PNP_BIOS_INSTALLATION_CHECK
, *PCM_PNP_BIOS_INSTALLATION_CHECK
;
1730 #include <poppack.h>
1733 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
1735 ULONG BytesPerSector
;
1736 ULONG NumberOfCylinders
;
1737 ULONG SectorsPerTrack
;
1738 ULONG NumberOfHeads
;
1739 } CM_DISK_GEOMETRY_DEVICE_DATA
, *PCM_DISK_GEOMETRY_DEVICE_DATA
;
1741 typedef struct _CM_KEYBOARD_DEVICE_DATA
{
1746 USHORT KeyboardFlags
;
1747 } CM_KEYBOARD_DEVICE_DATA
, *PCM_KEYBOARD_DEVICE_DATA
;
1749 #define KEYBOARD_INSERT_ON 0x08
1750 #define KEYBOARD_CAPS_LOCK_ON 0x04
1751 #define KEYBOARD_NUM_LOCK_ON 0x02
1752 #define KEYBOARD_SCROLL_LOCK_ON 0x01
1753 #define KEYBOARD_ALT_KEY_DOWN 0x80
1754 #define KEYBOARD_CTRL_KEY_DOWN 0x40
1755 #define KEYBOARD_LEFT_SHIFT_DOWN 0x20
1756 #define KEYBOARD_RIGHT_SHIFT_DOWN 0x10
1758 typedef struct _CM_MCA_POS_DATA
{
1764 } CM_MCA_POS_DATA
, *PCM_MCA_POS_DATA
;
1766 typedef struct CM_Power_Data_s
{
1768 DEVICE_POWER_STATE PD_MostRecentPowerState
;
1769 ULONG PD_Capabilities
;
1773 DEVICE_POWER_STATE PD_PowerStateMapping
[PowerSystemMaximum
];
1774 } CM_POWER_DATA
, *PCM_POWER_DATA
;
1776 #define PDCAP_D0_SUPPORTED 0x00000001
1777 #define PDCAP_D1_SUPPORTED 0x00000002
1778 #define PDCAP_D2_SUPPORTED 0x00000004
1779 #define PDCAP_D3_SUPPORTED 0x00000008
1780 #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
1781 #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
1782 #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
1783 #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
1784 #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
1786 typedef struct _CM_SCSI_DEVICE_DATA
{
1789 UCHAR HostIdentifier
;
1790 } CM_SCSI_DEVICE_DATA
, *PCM_SCSI_DEVICE_DATA
;
1792 typedef struct _CM_SERIAL_DEVICE_DATA
{
1796 } CM_SERIAL_DEVICE_DATA
, *PCM_SERIAL_DEVICE_DATA
;
1798 typedef struct _IO_COUNTERS
{
1799 ULONGLONG ReadOperationCount
;
1800 ULONGLONG WriteOperationCount
;
1801 ULONGLONG OtherOperationCount
;
1802 ULONGLONG ReadTransferCount
;
1803 ULONGLONG WriteTransferCount
;
1804 ULONGLONG OtherTransferCount
;
1805 } IO_COUNTERS
, *PIO_COUNTERS
;
1807 typedef struct _VM_COUNTERS
1809 SIZE_T PeakVirtualSize
;
1811 ULONG PageFaultCount
;
1812 SIZE_T PeakWorkingSetSize
;
1813 SIZE_T WorkingSetSize
;
1814 SIZE_T QuotaPeakPagedPoolUsage
;
1815 SIZE_T QuotaPagedPoolUsage
;
1816 SIZE_T QuotaPeakNonPagedPoolUsage
;
1817 SIZE_T QuotaNonPagedPoolUsage
;
1818 SIZE_T PagefileUsage
;
1819 SIZE_T PeakPagefileUsage
;
1820 } VM_COUNTERS
, *PVM_COUNTERS
;
1822 typedef struct _VM_COUNTERS_EX
1824 SIZE_T PeakVirtualSize
;
1826 ULONG PageFaultCount
;
1827 SIZE_T PeakWorkingSetSize
;
1828 SIZE_T WorkingSetSize
;
1829 SIZE_T QuotaPeakPagedPoolUsage
;
1830 SIZE_T QuotaPagedPoolUsage
;
1831 SIZE_T QuotaPeakNonPagedPoolUsage
;
1832 SIZE_T QuotaNonPagedPoolUsage
;
1833 SIZE_T PagefileUsage
;
1834 SIZE_T PeakPagefileUsage
;
1835 SIZE_T PrivateUsage
;
1836 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
1838 typedef struct _POOLED_USAGE_AND_LIMITS
1840 SIZE_T PeakPagedPoolUsage
;
1841 SIZE_T PagedPoolUsage
;
1842 SIZE_T PagedPoolLimit
;
1843 SIZE_T PeakNonPagedPoolUsage
;
1844 SIZE_T NonPagedPoolUsage
;
1845 SIZE_T NonPagedPoolLimit
;
1846 SIZE_T PeakPagefileUsage
;
1847 SIZE_T PagefileUsage
;
1848 SIZE_T PagefileLimit
;
1849 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
1851 typedef enum _KINTERRUPT_POLARITY
1853 InterruptPolarityUnknown
,
1854 InterruptActiveHigh
,
1856 } KINTERRUPT_POLARITY
, *PKINTERRUPT_POLARITY
;
1858 typedef struct _IO_ERROR_LOG_PACKET
{
1859 UCHAR MajorFunctionCode
;
1861 USHORT DumpDataSize
;
1862 USHORT NumberOfStrings
;
1863 USHORT StringOffset
;
1864 USHORT EventCategory
;
1866 ULONG UniqueErrorValue
;
1867 NTSTATUS FinalStatus
;
1868 ULONG SequenceNumber
;
1869 ULONG IoControlCode
;
1870 LARGE_INTEGER DeviceOffset
;
1872 } IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
1874 typedef struct _IO_ERROR_LOG_MESSAGE
{
1877 USHORT DriverNameLength
;
1878 LARGE_INTEGER TimeStamp
;
1879 ULONG DriverNameOffset
;
1880 IO_ERROR_LOG_PACKET EntryData
;
1881 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
1883 #define ERROR_LOG_LIMIT_SIZE 240
1884 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
1885 sizeof(IO_ERROR_LOG_PACKET) + \
1886 (sizeof(WCHAR) * 40))
1887 #define ERROR_LOG_MESSAGE_LIMIT_SIZE \
1888 (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1889 #define IO_ERROR_LOG_MESSAGE_LENGTH \
1890 ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
1891 ERROR_LOG_MESSAGE_LIMIT_SIZE : \
1892 PORT_MAXIMUM_MESSAGE_LENGTH)
1893 #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
1894 IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1896 typedef struct _CONTROLLER_OBJECT
{
1899 PVOID ControllerExtension
;
1900 KDEVICE_QUEUE DeviceWaitQueue
;
1902 LARGE_INTEGER Spare2
;
1903 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
1905 typedef enum _DMA_WIDTH
{
1910 } DMA_WIDTH
, *PDMA_WIDTH
;
1912 typedef enum _DMA_SPEED
{
1919 } DMA_SPEED
, *PDMA_SPEED
;
1921 /* DEVICE_DESCRIPTION.Version */
1923 #define DEVICE_DESCRIPTION_VERSION 0x0000
1924 #define DEVICE_DESCRIPTION_VERSION1 0x0001
1925 #define DEVICE_DESCRIPTION_VERSION2 0x0002
1927 typedef struct _DEVICE_DESCRIPTION
{
1930 BOOLEAN ScatterGather
;
1932 BOOLEAN AutoInitialize
;
1933 BOOLEAN Dma32BitAddresses
;
1934 BOOLEAN IgnoreCount
;
1936 BOOLEAN Dma64BitAddresses
;
1939 INTERFACE_TYPE InterfaceType
;
1942 ULONG MaximumLength
;
1944 } DEVICE_DESCRIPTION
, *PDEVICE_DESCRIPTION
;
1947 #define VPB_MOUNTED 0x0001
1948 #define VPB_LOCKED 0x0002
1949 #define VPB_PERSISTENT 0x0004
1950 #define VPB_REMOVE_PENDING 0x0008
1951 #define VPB_RAW_MOUNT 0x0010
1953 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
1955 typedef struct _VPB
{
1959 USHORT VolumeLabelLength
;
1960 struct _DEVICE_OBJECT
*DeviceObject
;
1961 struct _DEVICE_OBJECT
*RealDevice
;
1963 ULONG ReferenceCount
;
1964 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
/ sizeof(WCHAR
)];
1967 /* DEVICE_OBJECT.Flags */
1969 #define DO_VERIFY_VOLUME 0x00000002
1970 #define DO_BUFFERED_IO 0x00000004
1971 #define DO_EXCLUSIVE 0x00000008
1972 #define DO_DIRECT_IO 0x00000010
1973 #define DO_MAP_IO_BUFFER 0x00000020
1974 #define DO_DEVICE_HAS_NAME 0x00000040
1975 #define DO_DEVICE_INITIALIZING 0x00000080
1976 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
1977 #define DO_LONG_TERM_REQUESTS 0x00000200
1978 #define DO_NEVER_LAST_DEVICE 0x00000400
1979 #define DO_SHUTDOWN_REGISTERED 0x00000800
1980 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
1981 #define DO_POWER_PAGABLE 0x00002000
1982 #define DO_POWER_INRUSH 0x00004000
1983 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
1984 #define DO_XIP 0x00020000
1986 /* DEVICE_OBJECT.Characteristics */
1988 #define FILE_REMOVABLE_MEDIA 0x00000001
1989 #define FILE_READ_ONLY_DEVICE 0x00000002
1990 #define FILE_FLOPPY_DISKETTE 0x00000004
1991 #define FILE_WRITE_ONCE_MEDIA 0x00000008
1992 #define FILE_REMOTE_DEVICE 0x00000010
1993 #define FILE_DEVICE_IS_MOUNTED 0x00000020
1994 #define FILE_VIRTUAL_VOLUME 0x00000040
1995 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
1996 #define FILE_DEVICE_SECURE_OPEN 0x00000100
1998 /* DEVICE_OBJECT.AlignmentRequirement */
2000 #define FILE_BYTE_ALIGNMENT 0x00000000
2001 #define FILE_WORD_ALIGNMENT 0x00000001
2002 #define FILE_LONG_ALIGNMENT 0x00000003
2003 #define FILE_QUAD_ALIGNMENT 0x00000007
2004 #define FILE_OCTA_ALIGNMENT 0x0000000f
2005 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
2006 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
2007 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
2008 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
2009 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
2011 /* DEVICE_OBJECT.DeviceType */
2013 #define DEVICE_TYPE ULONG
2015 #define FILE_DEVICE_BEEP 0x00000001
2016 #define FILE_DEVICE_CD_ROM 0x00000002
2017 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
2018 #define FILE_DEVICE_CONTROLLER 0x00000004
2019 #define FILE_DEVICE_DATALINK 0x00000005
2020 #define FILE_DEVICE_DFS 0x00000006
2021 #define FILE_DEVICE_DISK 0x00000007
2022 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
2023 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
2024 #define FILE_DEVICE_INPORT_PORT 0x0000000a
2025 #define FILE_DEVICE_KEYBOARD 0x0000000b
2026 #define FILE_DEVICE_MAILSLOT 0x0000000c
2027 #define FILE_DEVICE_MIDI_IN 0x0000000d
2028 #define FILE_DEVICE_MIDI_OUT 0x0000000e
2029 #define FILE_DEVICE_MOUSE 0x0000000f
2030 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
2031 #define FILE_DEVICE_NAMED_PIPE 0x00000011
2032 #define FILE_DEVICE_NETWORK 0x00000012
2033 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
2034 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
2035 #define FILE_DEVICE_NULL 0x00000015
2036 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
2037 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
2038 #define FILE_DEVICE_PRINTER 0x00000018
2039 #define FILE_DEVICE_SCANNER 0x00000019
2040 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
2041 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
2042 #define FILE_DEVICE_SCREEN 0x0000001c
2043 #define FILE_DEVICE_SOUND 0x0000001d
2044 #define FILE_DEVICE_STREAMS 0x0000001e
2045 #define FILE_DEVICE_TAPE 0x0000001f
2046 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
2047 #define FILE_DEVICE_TRANSPORT 0x00000021
2048 #define FILE_DEVICE_UNKNOWN 0x00000022
2049 #define FILE_DEVICE_VIDEO 0x00000023
2050 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
2051 #define FILE_DEVICE_WAVE_IN 0x00000025
2052 #define FILE_DEVICE_WAVE_OUT 0x00000026
2053 #define FILE_DEVICE_8042_PORT 0x00000027
2054 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
2055 #define FILE_DEVICE_BATTERY 0x00000029
2056 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
2057 #define FILE_DEVICE_MODEM 0x0000002b
2058 #define FILE_DEVICE_VDM 0x0000002c
2059 #define FILE_DEVICE_MASS_STORAGE 0x0000002d
2060 #define FILE_DEVICE_SMB 0x0000002e
2061 #define FILE_DEVICE_KS 0x0000002f
2062 #define FILE_DEVICE_CHANGER 0x00000030
2063 #define FILE_DEVICE_SMARTCARD 0x00000031
2064 #define FILE_DEVICE_ACPI 0x00000032
2065 #define FILE_DEVICE_DVD 0x00000033
2066 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
2067 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
2068 #define FILE_DEVICE_DFS_VOLUME 0x00000036
2069 #define FILE_DEVICE_SERENUM 0x00000037
2070 #define FILE_DEVICE_TERMSRV 0x00000038
2071 #define FILE_DEVICE_KSEC 0x00000039
2072 #define FILE_DEVICE_FIPS 0x0000003a
2074 typedef struct _DEVICE_OBJECT
{
2077 LONG ReferenceCount
;
2078 struct _DRIVER_OBJECT
*DriverObject
;
2079 struct _DEVICE_OBJECT
*NextDevice
;
2080 struct _DEVICE_OBJECT
*AttachedDevice
;
2081 struct _IRP
*CurrentIrp
;
2084 ULONG Characteristics
;
2086 PVOID DeviceExtension
;
2087 DEVICE_TYPE DeviceType
;
2090 LIST_ENTRY ListEntry
;
2091 WAIT_CONTEXT_BLOCK Wcb
;
2093 ULONG AlignmentRequirement
;
2094 KDEVICE_QUEUE DeviceQueue
;
2096 ULONG ActiveThreadCount
;
2097 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2101 struct _DEVOBJ_EXTENSION
*DeviceObjectExtension
;
2103 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
2105 typedef enum _DEVICE_RELATION_TYPE
{
2110 TargetDeviceRelation
,
2112 } DEVICE_RELATION_TYPE
, *PDEVICE_RELATION_TYPE
;
2114 typedef struct _DEVICE_RELATIONS
{
2116 PDEVICE_OBJECT Objects
[1];
2117 } DEVICE_RELATIONS
, *PDEVICE_RELATIONS
;
2119 typedef struct _SCATTER_GATHER_ELEMENT
{
2120 PHYSICAL_ADDRESS Address
;
2123 } SCATTER_GATHER_ELEMENT
, *PSCATTER_GATHER_ELEMENT
;
2125 typedef struct _SCATTER_GATHER_LIST
{
2126 ULONG NumberOfElements
;
2128 SCATTER_GATHER_ELEMENT Elements
[1];
2129 } SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
2131 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
2132 #define MDL_PAGES_LOCKED 0x0002
2133 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
2134 #define MDL_ALLOCATED_FIXED_SIZE 0x0008
2135 #define MDL_PARTIAL 0x0010
2136 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
2137 #define MDL_IO_PAGE_READ 0x0040
2138 #define MDL_WRITE_OPERATION 0x0080
2139 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
2140 #define MDL_FREE_EXTRA_PTES 0x0200
2141 #define MDL_DESCRIBES_AWE 0x0400
2142 #define MDL_IO_SPACE 0x0800
2143 #define MDL_NETWORK_HEADER 0x1000
2144 #define MDL_MAPPING_CAN_FAIL 0x2000
2145 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
2146 #define MDL_INTERNAL 0x8000
2149 #define MDL_MAPPING_FLAGS ( \
2150 MDL_MAPPED_TO_SYSTEM_VA | \
2151 MDL_PAGES_LOCKED | \
2152 MDL_SOURCE_IS_NONPAGED_POOL | \
2153 MDL_PARTIAL_HAS_BEEN_MAPPED | \
2154 MDL_PARENT_MAPPED_SYSTEM_VA | \
2158 typedef struct _DRIVER_EXTENSION
{
2159 struct _DRIVER_OBJECT
*DriverObject
;
2160 PDRIVER_ADD_DEVICE AddDevice
;
2162 UNICODE_STRING ServiceKeyName
;
2163 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
2165 #define DRVO_UNLOAD_INVOKED 0x00000001
2166 #define DRVO_LEGACY_DRIVER 0x00000002
2167 #define DRVO_BUILTIN_DRIVER 0x00000004
2168 #define DRVO_REINIT_REGISTERED 0x00000008
2169 #define DRVO_INITIALIZED 0x00000010
2170 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
2171 #define DRVO_LEGACY_RESOURCES 0x00000040
2173 typedef struct _DRIVER_OBJECT
{
2176 PDEVICE_OBJECT DeviceObject
;
2180 PVOID DriverSection
;
2181 PDRIVER_EXTENSION DriverExtension
;
2182 UNICODE_STRING DriverName
;
2183 PUNICODE_STRING HardwareDatabase
;
2184 struct _FAST_IO_DISPATCH
*FastIoDispatch
;
2185 PDRIVER_INITIALIZE DriverInit
;
2186 PDRIVER_STARTIO DriverStartIo
;
2187 PDRIVER_UNLOAD DriverUnload
;
2188 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
2190 typedef struct _DRIVER_OBJECT
*PDRIVER_OBJECT
;
2192 typedef struct _DMA_ADAPTER
{
2195 struct _DMA_OPERATIONS
* DmaOperations
;
2196 } DMA_ADAPTER
, *PDMA_ADAPTER
;
2199 (DDKAPI
*PPUT_DMA_ADAPTER
)(
2200 IN PDMA_ADAPTER DmaAdapter
);
2203 (DDKAPI
*PALLOCATE_COMMON_BUFFER
)(
2204 IN PDMA_ADAPTER DmaAdapter
,
2206 OUT PPHYSICAL_ADDRESS LogicalAddress
,
2207 IN BOOLEAN CacheEnabled
);
2210 (DDKAPI
*PFREE_COMMON_BUFFER
)(
2211 IN PDMA_ADAPTER DmaAdapter
,
2213 IN PHYSICAL_ADDRESS LogicalAddress
,
2214 IN PVOID VirtualAddress
,
2215 IN BOOLEAN CacheEnabled
);
2218 (DDKAPI
*PALLOCATE_ADAPTER_CHANNEL
)(
2219 IN PDMA_ADAPTER DmaAdapter
,
2220 IN PDEVICE_OBJECT DeviceObject
,
2221 IN ULONG NumberOfMapRegisters
,
2222 IN PDRIVER_CONTROL ExecutionRoutine
,
2226 (DDKAPI
*PFLUSH_ADAPTER_BUFFERS
)(
2227 IN PDMA_ADAPTER DmaAdapter
,
2229 IN PVOID MapRegisterBase
,
2232 IN BOOLEAN WriteToDevice
);
2235 (DDKAPI
*PFREE_ADAPTER_CHANNEL
)(
2236 IN PDMA_ADAPTER DmaAdapter
);
2239 (DDKAPI
*PFREE_MAP_REGISTERS
)(
2240 IN PDMA_ADAPTER DmaAdapter
,
2241 PVOID MapRegisterBase
,
2242 ULONG NumberOfMapRegisters
);
2244 typedef PHYSICAL_ADDRESS
2245 (DDKAPI
*PMAP_TRANSFER
)(
2246 IN PDMA_ADAPTER DmaAdapter
,
2248 IN PVOID MapRegisterBase
,
2250 IN OUT PULONG Length
,
2251 IN BOOLEAN WriteToDevice
);
2254 (DDKAPI
*PGET_DMA_ALIGNMENT
)(
2255 IN PDMA_ADAPTER DmaAdapter
);
2258 (DDKAPI
*PREAD_DMA_COUNTER
)(
2259 IN PDMA_ADAPTER DmaAdapter
);
2262 (DDKAPI
*PGET_SCATTER_GATHER_LIST
)(
2263 IN PDMA_ADAPTER DmaAdapter
,
2264 IN PDEVICE_OBJECT DeviceObject
,
2268 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
2270 IN BOOLEAN WriteToDevice
);
2273 (DDKAPI
*PPUT_SCATTER_GATHER_LIST
)(
2274 IN PDMA_ADAPTER DmaAdapter
,
2275 IN PSCATTER_GATHER_LIST ScatterGather
,
2276 IN BOOLEAN WriteToDevice
);
2279 (DDKAPI
*PCALCULATE_SCATTER_GATHER_LIST_SIZE
)(
2280 IN PDMA_ADAPTER DmaAdapter
,
2281 IN PMDL Mdl OPTIONAL
,
2284 OUT PULONG ScatterGatherListSize
,
2285 OUT PULONG pNumberOfMapRegisters OPTIONAL
);
2288 (DDKAPI
*PBUILD_SCATTER_GATHER_LIST
)(
2289 IN PDMA_ADAPTER DmaAdapter
,
2290 IN PDEVICE_OBJECT DeviceObject
,
2294 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
2296 IN BOOLEAN WriteToDevice
,
2297 IN PVOID ScatterGatherBuffer
,
2298 IN ULONG ScatterGatherLength
);
2301 (DDKAPI
*PBUILD_MDL_FROM_SCATTER_GATHER_LIST
)(
2302 IN PDMA_ADAPTER DmaAdapter
,
2303 IN PSCATTER_GATHER_LIST ScatterGather
,
2304 IN PMDL OriginalMdl
,
2305 OUT PMDL
*TargetMdl
);
2307 typedef struct _DMA_OPERATIONS
{
2309 PPUT_DMA_ADAPTER PutDmaAdapter
;
2310 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer
;
2311 PFREE_COMMON_BUFFER FreeCommonBuffer
;
2312 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
2313 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
2314 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
2315 PFREE_MAP_REGISTERS FreeMapRegisters
;
2316 PMAP_TRANSFER MapTransfer
;
2317 PGET_DMA_ALIGNMENT GetDmaAlignment
;
2318 PREAD_DMA_COUNTER ReadDmaCounter
;
2319 PGET_SCATTER_GATHER_LIST GetScatterGatherList
;
2320 PPUT_SCATTER_GATHER_LIST PutScatterGatherList
;
2321 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList
;
2322 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList
;
2323 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList
;
2324 } DMA_OPERATIONS
, *PDMA_OPERATIONS
;
2326 typedef enum _ARBITER_REQUEST_SOURCE
{
2327 ArbiterRequestUndefined
= -1,
2328 ArbiterRequestLegacyReported
,
2329 ArbiterRequestHalReported
,
2330 ArbiterRequestLegacyAssigned
,
2331 ArbiterRequestPnpDetected
,
2332 ArbiterRequestPnpEnumerated
2333 } ARBITER_REQUEST_SOURCE
;
2335 typedef enum _ARBITER_RESULT
{
2336 ArbiterResultUndefined
= -1,
2337 ArbiterResultSuccess
,
2338 ArbiterResultExternalConflict
,
2339 ArbiterResultNullRequest
2342 typedef enum _ARBITER_ACTION
{
2343 ArbiterActionTestAllocation
,
2344 ArbiterActionRetestAllocation
,
2345 ArbiterActionCommitAllocation
,
2346 ArbiterActionRollbackAllocation
,
2347 ArbiterActionQueryAllocatedResources
,
2348 ArbiterActionWriteReservedResources
,
2349 ArbiterActionQueryConflict
,
2350 ArbiterActionQueryArbitrate
,
2351 ArbiterActionAddReserved
,
2352 ArbiterActionBootAllocation
2353 } ARBITER_ACTION
, *PARBITER_ACTION
;
2355 typedef struct _ARBITER_CONFLICT_INFO
{
2356 PDEVICE_OBJECT OwningObject
;
2359 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
2361 typedef struct _ARBITER_PARAMETERS
{
2364 IN OUT PLIST_ENTRY ArbitrationList
;
2365 IN ULONG AllocateFromCount
;
2366 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
2370 IN OUT PLIST_ENTRY ArbitrationList
;
2371 IN ULONG AllocateFromCount
;
2372 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
2376 IN OUT PLIST_ENTRY ArbitrationList
;
2380 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
2381 } QueryAllocatedResources
;
2384 IN PDEVICE_OBJECT PhysicalDeviceObject
;
2385 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
2386 OUT PULONG ConflictCount
;
2387 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
2391 IN PLIST_ENTRY ArbitrationList
;
2395 IN PDEVICE_OBJECT ReserveDevice
;
2398 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
2400 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
2402 typedef struct _ARBITER_LIST_ENTRY
{
2403 LIST_ENTRY ListEntry
;
2404 ULONG AlternativeCount
;
2405 PIO_RESOURCE_DESCRIPTOR Alternatives
;
2406 PDEVICE_OBJECT PhysicalDeviceObject
;
2407 ARBITER_REQUEST_SOURCE RequestSource
;
2410 INTERFACE_TYPE InterfaceType
;
2413 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
2414 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
2415 ARBITER_RESULT Result
;
2416 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
2419 (DDKAPI
*PARBITER_HANDLER
)(
2421 IN ARBITER_ACTION Action
,
2422 IN OUT PARBITER_PARAMETERS Parameters
);
2424 #define ARBITER_PARTIAL 0x00000001
2426 typedef struct _ARBITER_INTERFACE
{
2430 PINTERFACE_REFERENCE InterfaceReference
;
2431 PINTERFACE_DEREFERENCE InterfaceDereference
;
2432 PARBITER_HANDLER ArbiterHandler
;
2434 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
2436 typedef enum _KPROFILE_SOURCE
{
2438 ProfileAlignmentFixup
,
2441 ProfileLoadInstructions
,
2442 ProfilePipelineFrozen
,
2443 ProfileBranchInstructions
,
2444 ProfileTotalNonissues
,
2445 ProfileDcacheMisses
,
2446 ProfileIcacheMisses
,
2448 ProfileBranchMispredictions
,
2449 ProfileStoreInstructions
,
2450 ProfileFpInstructions
,
2451 ProfileIntegerInstructions
,
2455 ProfileSpecialInstructions
,
2457 ProfileIcacheIssues
,
2458 ProfileDcacheAccesses
,
2459 ProfileMemoryBarrierCycles
,
2460 ProfileLoadLinkedIssues
,
2464 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
2465 HalInstalledBusInformation
,
2466 HalProfileSourceInformation
,
2467 HalInformationClassUnused1
,
2468 HalPowerInformation
,
2469 HalProcessorSpeedInformation
,
2470 HalCallbackInformation
,
2471 HalMapRegisterInformation
,
2472 HalMcaLogInformation
,
2473 HalFrameBufferCachingInformation
,
2474 HalDisplayBiosInformation
,
2475 HalProcessorFeatureInformation
,
2476 HalNumaTopologyInterface
,
2477 HalErrorInformation
,
2478 HalCmcLogInformation
,
2479 HalCpeLogInformation
,
2480 HalQueryMcaInterface
,
2481 HalQueryAMLIIllegalIOPortAddresses
,
2482 HalQueryMaxHotPlugMemoryAddress
,
2483 HalPartitionIpiInterface
,
2484 HalPlatformInformation
,
2485 HalQueryProfileSourceList
2486 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
2488 typedef enum _HAL_SET_INFORMATION_CLASS
{
2489 HalProfileSourceInterval
,
2490 HalProfileSourceInterruptHandler
,
2491 HalMcaRegisterDriver
,
2492 HalKernelErrorHandler
,
2493 HalCmcRegisterDriver
,
2494 HalCpeRegisterDriver
,
2498 HalGenerateCmcInterrupt
2499 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
2501 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
2503 KPROFILE_SOURCE Source
;
2505 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
2507 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
2509 KPROFILE_SOURCE Source
;
2512 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
2514 typedef struct _MAP_REGISTER_ENTRY
2517 BOOLEAN WriteToDevice
;
2518 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
2525 PUCHAR TranslatedAddress
;
2527 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
2531 PHYSICAL_ADDRESS Start
;
2532 PHYSICAL_ADDRESS MaxEnd
;
2533 PVOID VirtualAddress
;
2537 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
2548 BOOLEAN Initialized
;
2549 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
2550 DEBUG_MEMORY_REQUIREMENTS Memory
;
2551 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
2553 typedef enum _KD_OPTION
{
2554 KD_OPTION_SET_BLOCK_ENABLE
,
2557 /* Function Type Defintions for Dispatch Functions */
2558 struct _DEVICE_CONTROL_CONTEXT
;
2561 (DDKAPI
*PDEVICE_CONTROL_COMPLETION
)(
2562 IN
struct _DEVICE_CONTROL_CONTEXT
*ControlContext
);
2564 typedef struct _DEVICE_CONTROL_CONTEXT
{
2566 PDEVICE_HANDLER_OBJECT DeviceHandler
;
2567 PDEVICE_OBJECT DeviceObject
;
2570 PULONG BufferLength
;
2572 } DEVICE_CONTROL_CONTEXT
, *PDEVICE_CONTROL_CONTEXT
;
2574 typedef struct _PM_DISPATCH_TABLE
{
2578 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
2580 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
2581 TranslateChildToParent
,
2582 TranslateParentToChild
2583 } RESOURCE_TRANSLATION_DIRECTION
;
2586 (DDKAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
2588 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
2589 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
2590 IN ULONG AlternativesCount
,
2591 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
2592 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2593 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
2596 (DDKAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
2598 IN PIO_RESOURCE_DESCRIPTOR Source
,
2599 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2600 OUT PULONG TargetCount
,
2601 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
2603 typedef struct _TRANSLATOR_INTERFACE
{
2607 PINTERFACE_REFERENCE InterfaceReference
;
2608 PINTERFACE_DEREFERENCE InterfaceDereference
;
2609 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
2610 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
2611 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
2614 (DDKAPI
*pHalDeviceControl
)(
2615 IN PDEVICE_HANDLER_OBJECT DeviceHandler
,
2616 IN PDEVICE_OBJECT DeviceObject
,
2617 IN ULONG ControlCode
,
2618 IN OUT PVOID Buffer OPTIONAL
,
2619 IN OUT PULONG BufferLength OPTIONAL
,
2621 IN PDEVICE_CONTROL_COMPLETION CompletionRoutine
);
2624 (FASTCALL
*pHalExamineMBR
)(
2625 IN PDEVICE_OBJECT DeviceObject
,
2626 IN ULONG SectorSize
,
2627 IN ULONG MBRTypeIdentifier
,
2631 (FASTCALL
*pHalIoAssignDriveLetters
)(
2632 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
2633 IN PSTRING NtDeviceName
,
2634 OUT PUCHAR NtSystemPath
,
2635 OUT PSTRING NtSystemPathString
);
2638 (FASTCALL
*pHalIoReadPartitionTable
)(
2639 IN PDEVICE_OBJECT DeviceObject
,
2640 IN ULONG SectorSize
,
2641 IN BOOLEAN ReturnRecognizedPartitions
,
2642 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2645 (FASTCALL
*pHalIoSetPartitionInformation
)(
2646 IN PDEVICE_OBJECT DeviceObject
,
2647 IN ULONG SectorSize
,
2648 IN ULONG PartitionNumber
,
2649 IN ULONG PartitionType
);
2652 (FASTCALL
*pHalIoWritePartitionTable
)(
2653 IN PDEVICE_OBJECT DeviceObject
,
2654 IN ULONG SectorSize
,
2655 IN ULONG SectorsPerTrack
,
2656 IN ULONG NumberOfHeads
,
2657 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2659 typedef PBUS_HANDLER
2660 (FASTCALL
*pHalHandlerForBus
)(
2661 IN INTERFACE_TYPE InterfaceType
,
2662 IN ULONG BusNumber
);
2665 (FASTCALL
*pHalReferenceBusHandler
)(
2666 IN PBUS_HANDLER BusHandler
);
2669 (DDKAPI
*pHalQuerySystemInformation
)(
2670 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
2671 IN ULONG BufferSize
,
2672 IN OUT PVOID Buffer
,
2673 OUT PULONG ReturnedLength
);
2676 (DDKAPI
*pHalSetSystemInformation
)(
2677 IN HAL_SET_INFORMATION_CLASS InformationClass
,
2678 IN ULONG BufferSize
,
2682 (DDKAPI
*pHalQueryBusSlots
)(
2683 IN PBUS_HANDLER BusHandler
,
2684 IN ULONG BufferSize
,
2685 OUT PULONG SlotNumbers
,
2686 OUT PULONG ReturnedLength
);
2689 (DDKAPI
*pHalInitPnpDriver
)(
2693 (DDKAPI
*pHalInitPowerManagement
)(
2694 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
2695 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
2697 typedef struct _DMA_ADAPTER
*
2698 (DDKAPI
*pHalGetDmaAdapter
)(
2700 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
2701 OUT PULONG NumberOfMapRegisters
);
2704 (DDKAPI
*pHalGetInterruptTranslator
)(
2705 IN INTERFACE_TYPE ParentInterfaceType
,
2706 IN ULONG ParentBusNumber
,
2707 IN INTERFACE_TYPE BridgeInterfaceType
,
2710 OUT PTRANSLATOR_INTERFACE Translator
,
2711 OUT PULONG BridgeBusNumber
);
2714 (DDKAPI
*pHalStartMirroring
)(
2718 (DDKAPI
*pHalEndMirroring
)(
2719 IN ULONG PassNumber
);
2722 (DDKAPI
*pHalMirrorPhysicalMemory
)(
2723 IN PHYSICAL_ADDRESS PhysicalAddress
,
2724 IN LARGE_INTEGER NumberOfBytes
);
2727 (DDKAPI
*pHalMirrorVerify
)(
2728 IN PHYSICAL_ADDRESS PhysicalAddress
,
2729 IN LARGE_INTEGER NumberOfBytes
);
2732 (DDKAPI
*pHalEndOfBoot
)(
2737 (DDKAPI
*pHalTranslateBusAddress
)(
2738 IN INTERFACE_TYPE InterfaceType
,
2740 IN PHYSICAL_ADDRESS BusAddress
,
2741 IN OUT PULONG AddressSpace
,
2742 OUT PPHYSICAL_ADDRESS TranslatedAddress
2747 (DDKAPI
*pHalAssignSlotResources
)(
2748 IN PUNICODE_STRING RegistryPath
,
2749 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2750 IN PDRIVER_OBJECT DriverObject
,
2751 IN PDEVICE_OBJECT DeviceObject
,
2752 IN INTERFACE_TYPE BusType
,
2754 IN ULONG SlotNumber
,
2755 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
2760 (DDKAPI
*pHalHaltSystem
)(
2766 (DDKAPI
*pHalResetDisplay
)(
2772 (DDKAPI
*pHalVectorToIDTEntry
)(
2778 (DDKAPI
*pHalFindBusAddressTranslation
)(
2779 IN PHYSICAL_ADDRESS BusAddress
,
2780 IN OUT PULONG AddressSpace
,
2781 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
2782 IN OUT PULONG_PTR Context
,
2788 (DDKAPI
*pKdSetupPciDeviceForDebugging
)(
2789 IN PVOID LoaderBlock OPTIONAL
,
2790 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
2795 (DDKAPI
*pKdReleasePciDeviceForDebugging
)(
2796 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
2801 (DDKAPI
*pKdGetAcpiTablePhase0
)(
2802 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
2808 (DDKAPI
*pKdCheckPowerButton
)(
2814 (DDKAPI
*pHalGetInterruptVector
)(
2815 IN INTERFACE_TYPE InterfaceType
,
2817 IN ULONG BusInterruptLevel
,
2818 IN ULONG BusInterruptVector
,
2820 OUT PKAFFINITY Affinity
2825 (DDKAPI
*pHalGetVectorInput
)(
2827 IN KAFFINITY Affinity
,
2829 OUT PKINTERRUPT_POLARITY Polarity
2834 (DDKAPI
*pKdMapPhysicalMemory64
)(
2835 IN PHYSICAL_ADDRESS PhysicalAddress
,
2836 IN ULONG NumberPages
2841 (DDKAPI
*pKdUnmapVirtualAddress
)(
2842 IN PVOID VirtualAddress
,
2843 IN ULONG NumberPages
2848 (DDKAPI
*pKdGetPciDataByOffset
)(
2850 IN ULONG SlotNumber
,
2858 (DDKAPI
*pKdSetPciDataByOffset
)(
2860 IN ULONG SlotNumber
,
2867 (DDKAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
2868 ULONG Columns
, ULONG Rows
);
2872 pHalQuerySystemInformation HalQuerySystemInformation
;
2873 pHalSetSystemInformation HalSetSystemInformation
;
2874 pHalQueryBusSlots HalQueryBusSlots
;
2876 pHalExamineMBR HalExamineMBR
;
2877 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
2878 pHalIoReadPartitionTable HalIoReadPartitionTable
;
2879 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
2880 pHalIoWritePartitionTable HalIoWritePartitionTable
;
2881 pHalHandlerForBus HalReferenceHandlerForBus
;
2882 pHalReferenceBusHandler HalReferenceBusHandler
;
2883 pHalReferenceBusHandler HalDereferenceBusHandler
;
2884 pHalInitPnpDriver HalInitPnpDriver
;
2885 pHalInitPowerManagement HalInitPowerManagement
;
2886 pHalGetDmaAdapter HalGetDmaAdapter
;
2887 pHalGetInterruptTranslator HalGetInterruptTranslator
;
2888 pHalStartMirroring HalStartMirroring
;
2889 pHalEndMirroring HalEndMirroring
;
2890 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
2891 pHalEndOfBoot HalEndOfBoot
;
2892 pHalMirrorVerify HalMirrorVerify
;
2893 } HAL_DISPATCH
, *PHAL_DISPATCH
;
2895 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTHAL_)
2896 extern NTSYSAPI PHAL_DISPATCH HalDispatchTable
;
2897 #define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable)
2899 extern __declspec(dllexport
) HAL_DISPATCH HalDispatchTable
;
2900 #define HALDISPATCH (&HalDispatchTable)
2903 #define HAL_DISPATCH_VERSION 3
2904 #define HalDispatchTableVersion HALDISPATCH->Version
2905 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
2906 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
2907 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
2908 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
2909 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
2910 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
2911 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
2912 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
2913 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
2914 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
2915 #define HalStartMirroring HALDISPATCH->HalStartMirroring
2916 #define HalEndMirroring HALDISPATCH->HalEndMirroring
2917 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
2918 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
2919 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
2921 typedef enum _FILE_INFORMATION_CLASS
{
2922 FileDirectoryInformation
= 1,
2923 FileFullDirectoryInformation
,
2924 FileBothDirectoryInformation
,
2925 FileBasicInformation
,
2926 FileStandardInformation
,
2927 FileInternalInformation
,
2929 FileAccessInformation
,
2930 FileNameInformation
,
2931 FileRenameInformation
,
2932 FileLinkInformation
,
2933 FileNamesInformation
,
2934 FileDispositionInformation
,
2935 FilePositionInformation
,
2936 FileFullEaInformation
,
2937 FileModeInformation
,
2938 FileAlignmentInformation
,
2940 FileAllocationInformation
,
2941 FileEndOfFileInformation
,
2942 FileAlternateNameInformation
,
2943 FileStreamInformation
,
2944 FilePipeInformation
,
2945 FilePipeLocalInformation
,
2946 FilePipeRemoteInformation
,
2947 FileMailslotQueryInformation
,
2948 FileMailslotSetInformation
,
2949 FileCompressionInformation
,
2950 FileObjectIdInformation
,
2951 FileCompletionInformation
,
2952 FileMoveClusterInformation
,
2953 FileQuotaInformation
,
2954 FileReparsePointInformation
,
2955 FileNetworkOpenInformation
,
2956 FileAttributeTagInformation
,
2957 FileTrackingInformation
,
2958 FileIdBothDirectoryInformation
,
2959 FileIdFullDirectoryInformation
,
2960 FileValidDataLengthInformation
,
2961 FileShortNameInformation
,
2962 FileMaximumInformation
2963 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
2965 typedef struct _FILE_POSITION_INFORMATION
{
2966 LARGE_INTEGER CurrentByteOffset
;
2967 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
2969 typedef struct _FILE_ALIGNMENT_INFORMATION
{
2970 ULONG AlignmentRequirement
;
2971 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
2973 typedef struct _FILE_NAME_INFORMATION
{
2974 ULONG FileNameLength
;
2976 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
2978 #include <pshpack8.h>
2979 typedef struct _FILE_BASIC_INFORMATION
{
2980 LARGE_INTEGER CreationTime
;
2981 LARGE_INTEGER LastAccessTime
;
2982 LARGE_INTEGER LastWriteTime
;
2983 LARGE_INTEGER ChangeTime
;
2984 ULONG FileAttributes
;
2985 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
2986 #include <poppack.h>
2988 typedef struct _FILE_STANDARD_INFORMATION
{
2989 LARGE_INTEGER AllocationSize
;
2990 LARGE_INTEGER EndOfFile
;
2991 ULONG NumberOfLinks
;
2992 BOOLEAN DeletePending
;
2994 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
2996 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
2997 LARGE_INTEGER CreationTime
;
2998 LARGE_INTEGER LastAccessTime
;
2999 LARGE_INTEGER LastWriteTime
;
3000 LARGE_INTEGER ChangeTime
;
3001 LARGE_INTEGER AllocationSize
;
3002 LARGE_INTEGER EndOfFile
;
3003 ULONG FileAttributes
;
3004 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
3006 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
3007 ULONG FileAttributes
;
3009 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
3011 typedef struct _FILE_DISPOSITION_INFORMATION
{
3013 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
3015 typedef struct _FILE_END_OF_FILE_INFORMATION
{
3016 LARGE_INTEGER EndOfFile
;
3017 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
3019 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
3020 LARGE_INTEGER ValidDataLength
;
3021 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
3023 typedef union _FILE_SEGMENT_ELEMENT
{
3025 ULONGLONG Alignment
;
3026 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
3028 typedef enum _FSINFOCLASS
{
3029 FileFsVolumeInformation
= 1,
3030 FileFsLabelInformation
,
3031 FileFsSizeInformation
,
3032 FileFsDeviceInformation
,
3033 FileFsAttributeInformation
,
3034 FileFsControlInformation
,
3035 FileFsFullSizeInformation
,
3036 FileFsObjectIdInformation
,
3037 FileFsDriverPathInformation
,
3038 FileFsMaximumInformation
3039 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
3041 typedef struct _FILE_FS_DEVICE_INFORMATION
{
3042 DEVICE_TYPE DeviceType
;
3043 ULONG Characteristics
;
3044 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
3046 typedef struct _FILE_FULL_EA_INFORMATION
{
3047 ULONG NextEntryOffset
;
3050 USHORT EaValueLength
;
3052 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
3054 /* ERESOURCE.Flag */
3056 #define ResourceNeverExclusive 0x0010
3057 #define ResourceReleaseByOtherThread 0x0020
3058 #define ResourceOwnedExclusive 0x0080
3060 #define RESOURCE_HASH_TABLE_SIZE 64
3062 typedef struct _DEVOBJ_EXTENSION
3066 PDEVICE_OBJECT DeviceObject
;
3067 } DEVOBJ_EXTENSION
, *PDEVOBJ_EXTENSION
;
3070 (DDKAPI
*PFAST_IO_CHECK_IF_POSSIBLE
)(
3071 IN
struct _FILE_OBJECT
*FileObject
,
3072 IN PLARGE_INTEGER FileOffset
,
3076 IN BOOLEAN CheckForReadOperation
,
3077 OUT PIO_STATUS_BLOCK IoStatus
,
3078 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3081 (DDKAPI
*PFAST_IO_READ
)(
3082 IN
struct _FILE_OBJECT
*FileObject
,
3083 IN PLARGE_INTEGER FileOffset
,
3088 OUT PIO_STATUS_BLOCK IoStatus
,
3089 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3092 (DDKAPI
*PFAST_IO_WRITE
)(
3093 IN
struct _FILE_OBJECT
*FileObject
,
3094 IN PLARGE_INTEGER FileOffset
,
3099 OUT PIO_STATUS_BLOCK IoStatus
,
3100 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3103 (DDKAPI
*PFAST_IO_QUERY_BASIC_INFO
)(
3104 IN
struct _FILE_OBJECT
*FileObject
,
3106 OUT PFILE_BASIC_INFORMATION Buffer
,
3107 OUT PIO_STATUS_BLOCK IoStatus
,
3108 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3111 (DDKAPI
*PFAST_IO_QUERY_STANDARD_INFO
)(
3112 IN
struct _FILE_OBJECT
*FileObject
,
3114 OUT PFILE_STANDARD_INFORMATION Buffer
,
3115 OUT PIO_STATUS_BLOCK IoStatus
,
3116 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3119 (DDKAPI
*PFAST_IO_LOCK
)(
3120 IN
struct _FILE_OBJECT
*FileObject
,
3121 IN PLARGE_INTEGER FileOffset
,
3122 IN PLARGE_INTEGER Length
,
3123 PEPROCESS ProcessId
,
3125 BOOLEAN FailImmediately
,
3126 BOOLEAN ExclusiveLock
,
3127 OUT PIO_STATUS_BLOCK IoStatus
,
3128 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3131 (DDKAPI
*PFAST_IO_UNLOCK_SINGLE
)(
3132 IN
struct _FILE_OBJECT
*FileObject
,
3133 IN PLARGE_INTEGER FileOffset
,
3134 IN PLARGE_INTEGER Length
,
3135 PEPROCESS ProcessId
,
3137 OUT PIO_STATUS_BLOCK IoStatus
,
3138 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3141 (DDKAPI
*PFAST_IO_UNLOCK_ALL
)(
3142 IN
struct _FILE_OBJECT
*FileObject
,
3143 PEPROCESS ProcessId
,
3144 OUT PIO_STATUS_BLOCK IoStatus
,
3145 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3148 (DDKAPI
*PFAST_IO_UNLOCK_ALL_BY_KEY
)(
3149 IN
struct _FILE_OBJECT
*FileObject
,
3152 OUT PIO_STATUS_BLOCK IoStatus
,
3153 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3156 (DDKAPI
*PFAST_IO_DEVICE_CONTROL
)(
3157 IN
struct _FILE_OBJECT
*FileObject
,
3159 IN PVOID InputBuffer OPTIONAL
,
3160 IN ULONG InputBufferLength
,
3161 OUT PVOID OutputBuffer OPTIONAL
,
3162 IN ULONG OutputBufferLength
,
3163 IN ULONG IoControlCode
,
3164 OUT PIO_STATUS_BLOCK IoStatus
,
3165 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3168 (DDKAPI
*PFAST_IO_ACQUIRE_FILE
)(
3169 IN
struct _FILE_OBJECT
*FileObject
);
3172 (DDKAPI
*PFAST_IO_RELEASE_FILE
)(
3173 IN
struct _FILE_OBJECT
*FileObject
);
3176 (DDKAPI
*PFAST_IO_DETACH_DEVICE
)(
3177 IN
struct _DEVICE_OBJECT
*SourceDevice
,
3178 IN
struct _DEVICE_OBJECT
*TargetDevice
);
3181 (DDKAPI
*PFAST_IO_QUERY_NETWORK_OPEN_INFO
)(
3182 IN
struct _FILE_OBJECT
*FileObject
,
3184 OUT
struct _FILE_NETWORK_OPEN_INFORMATION
*Buffer
,
3185 OUT
struct _IO_STATUS_BLOCK
*IoStatus
,
3186 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3189 (DDKAPI
*PFAST_IO_ACQUIRE_FOR_MOD_WRITE
)(
3190 IN
struct _FILE_OBJECT
*FileObject
,
3191 IN PLARGE_INTEGER EndingOffset
,
3192 OUT
struct _ERESOURCE
**ResourceToRelease
,
3193 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3196 (DDKAPI
*PFAST_IO_MDL_READ
)(
3197 IN
struct _FILE_OBJECT
*FileObject
,
3198 IN PLARGE_INTEGER FileOffset
,
3202 OUT PIO_STATUS_BLOCK IoStatus
,
3203 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3206 (DDKAPI
*PFAST_IO_MDL_READ_COMPLETE
)(
3207 IN
struct _FILE_OBJECT
*FileObject
,
3209 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3212 (DDKAPI
*PFAST_IO_PREPARE_MDL_WRITE
)(
3213 IN
struct _FILE_OBJECT
*FileObject
,
3214 IN PLARGE_INTEGER FileOffset
,
3218 OUT PIO_STATUS_BLOCK IoStatus
,
3219 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3222 (DDKAPI
*PFAST_IO_MDL_WRITE_COMPLETE
)(
3223 IN
struct _FILE_OBJECT
*FileObject
,
3224 IN PLARGE_INTEGER FileOffset
,
3226 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3229 (DDKAPI
*PFAST_IO_READ_COMPRESSED
)(
3230 IN
struct _FILE_OBJECT
*FileObject
,
3231 IN PLARGE_INTEGER FileOffset
,
3236 OUT PIO_STATUS_BLOCK IoStatus
,
3237 OUT
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
3238 IN ULONG CompressedDataInfoLength
,
3239 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3242 (DDKAPI
*PFAST_IO_WRITE_COMPRESSED
)(
3243 IN
struct _FILE_OBJECT
*FileObject
,
3244 IN PLARGE_INTEGER FileOffset
,
3249 OUT PIO_STATUS_BLOCK IoStatus
,
3250 IN
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
3251 IN ULONG CompressedDataInfoLength
,
3252 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3255 (DDKAPI
*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED
)(
3256 IN
struct _FILE_OBJECT
*FileObject
,
3258 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3261 (DDKAPI
*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)(
3262 IN
struct _FILE_OBJECT
*FileObject
,
3263 IN PLARGE_INTEGER FileOffset
,
3265 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3268 (DDKAPI
*PFAST_IO_QUERY_OPEN
)(
3269 IN
struct _IRP
*Irp
,
3270 OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
,
3271 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3274 (DDKAPI
*PFAST_IO_RELEASE_FOR_MOD_WRITE
)(
3275 IN
struct _FILE_OBJECT
*FileObject
,
3276 IN
struct _ERESOURCE
*ResourceToRelease
,
3277 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3280 (DDKAPI
*PFAST_IO_ACQUIRE_FOR_CCFLUSH
)(
3281 IN
struct _FILE_OBJECT
*FileObject
,
3282 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3285 (DDKAPI
*PFAST_IO_RELEASE_FOR_CCFLUSH
) (
3286 IN
struct _FILE_OBJECT
*FileObject
,
3287 IN
struct _DEVICE_OBJECT
*DeviceObject
);
3289 typedef struct _FAST_IO_DISPATCH
{
3290 ULONG SizeOfFastIoDispatch
;
3291 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible
;
3292 PFAST_IO_READ FastIoRead
;
3293 PFAST_IO_WRITE FastIoWrite
;
3294 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo
;
3295 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo
;
3296 PFAST_IO_LOCK FastIoLock
;
3297 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle
;
3298 PFAST_IO_UNLOCK_ALL FastIoUnlockAll
;
3299 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey
;
3300 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl
;
3301 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection
;
3302 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection
;
3303 PFAST_IO_DETACH_DEVICE FastIoDetachDevice
;
3304 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo
;
3305 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite
;
3306 PFAST_IO_MDL_READ MdlRead
;
3307 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete
;
3308 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite
;
3309 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete
;
3310 PFAST_IO_READ_COMPRESSED FastIoReadCompressed
;
3311 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed
;
3312 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed
;
3313 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed
;
3314 PFAST_IO_QUERY_OPEN FastIoQueryOpen
;
3315 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite
;
3316 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush
;
3317 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush
;
3318 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
3320 typedef struct _SECTION_OBJECT_POINTERS
{
3321 PVOID DataSectionObject
;
3322 PVOID SharedCacheMap
;
3323 PVOID ImageSectionObject
;
3324 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
3326 typedef struct _IO_COMPLETION_CONTEXT
{
3329 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
3331 /* FILE_OBJECT.Flags */
3333 #define FO_FILE_OPEN 0x00000001
3334 #define FO_SYNCHRONOUS_IO 0x00000002
3335 #define FO_ALERTABLE_IO 0x00000004
3336 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
3337 #define FO_WRITE_THROUGH 0x00000010
3338 #define FO_SEQUENTIAL_ONLY 0x00000020
3339 #define FO_CACHE_SUPPORTED 0x00000040
3340 #define FO_NAMED_PIPE 0x00000080
3341 #define FO_STREAM_FILE 0x00000100
3342 #define FO_MAILSLOT 0x00000200
3343 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
3344 #define FO_DIRECT_DEVICE_OPEN 0x00000800
3345 #define FO_FILE_MODIFIED 0x00001000
3346 #define FO_FILE_SIZE_CHANGED 0x00002000
3347 #define FO_CLEANUP_COMPLETE 0x00004000
3348 #define FO_TEMPORARY_FILE 0x00008000
3349 #define FO_DELETE_ON_CLOSE 0x00010000
3350 #define FO_OPENED_CASE_SENSITIVE 0x00020000
3351 #define FO_HANDLE_CREATED 0x00040000
3352 #define FO_FILE_FAST_IO_READ 0x00080000
3353 #define FO_RANDOM_ACCESS 0x00100000
3354 #define FO_FILE_OPEN_CANCELLED 0x00200000
3355 #define FO_VOLUME_OPEN 0x00400000
3356 #define FO_REMOTE_ORIGIN 0x01000000
3358 typedef struct _FILE_OBJECT
3362 PDEVICE_OBJECT DeviceObject
;
3366 PSECTION_OBJECT_POINTERS SectionObjectPointer
;
3367 PVOID PrivateCacheMap
;
3368 NTSTATUS FinalStatus
;
3369 struct _FILE_OBJECT
*RelatedFileObject
;
3370 BOOLEAN LockOperation
;
3371 BOOLEAN DeletePending
;
3373 BOOLEAN WriteAccess
;
3374 BOOLEAN DeleteAccess
;
3376 BOOLEAN SharedWrite
;
3377 BOOLEAN SharedDelete
;
3379 UNICODE_STRING FileName
;
3380 LARGE_INTEGER CurrentByteOffset
;
3381 volatile ULONG Waiters
;
3382 volatile ULONG Busy
;
3386 volatile PIO_COMPLETION_CONTEXT CompletionContext
;
3387 KSPIN_LOCK IrpListLock
;
3389 volatile PVOID FileObjectExtension
;
3391 typedef struct _FILE_OBJECT
*PFILE_OBJECT
;
3393 typedef enum _SECURITY_OPERATION_CODE
{
3394 SetSecurityDescriptor
,
3395 QuerySecurityDescriptor
,
3396 DeleteSecurityDescriptor
,
3397 AssignSecurityDescriptor
3398 } SECURITY_OPERATION_CODE
, *PSECURITY_OPERATION_CODE
;
3400 #define INITIAL_PRIVILEGE_COUNT 3
3402 typedef struct _INITIAL_PRIVILEGE_SET
{
3403 ULONG PrivilegeCount
;
3405 LUID_AND_ATTRIBUTES Privilege
[INITIAL_PRIVILEGE_COUNT
];
3406 } INITIAL_PRIVILEGE_SET
, * PINITIAL_PRIVILEGE_SET
;
3408 #define SE_MIN_WELL_KNOWN_PRIVILEGE 2
3409 #define SE_CREATE_TOKEN_PRIVILEGE 2
3410 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3
3411 #define SE_LOCK_MEMORY_PRIVILEGE 4
3412 #define SE_INCREASE_QUOTA_PRIVILEGE 5
3413 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
3414 #define SE_MACHINE_ACCOUNT_PRIVILEGE 6
3415 #define SE_TCB_PRIVILEGE 7
3416 #define SE_SECURITY_PRIVILEGE 8
3417 #define SE_TAKE_OWNERSHIP_PRIVILEGE 9
3418 #define SE_LOAD_DRIVER_PRIVILEGE 10
3419 #define SE_SYSTEM_PROFILE_PRIVILEGE 11
3420 #define SE_SYSTEMTIME_PRIVILEGE 12
3421 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
3422 #define SE_INC_BASE_PRIORITY_PRIVILEGE 14
3423 #define SE_CREATE_PAGEFILE_PRIVILEGE 15
3424 #define SE_CREATE_PERMANENT_PRIVILEGE 16
3425 #define SE_BACKUP_PRIVILEGE 17
3426 #define SE_RESTORE_PRIVILEGE 18
3427 #define SE_SHUTDOWN_PRIVILEGE 19
3428 #define SE_DEBUG_PRIVILEGE 20
3429 #define SE_AUDIT_PRIVILEGE 21
3430 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22
3431 #define SE_CHANGE_NOTIFY_PRIVILEGE 23
3432 #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24
3433 #define SE_UNDOCK_PRIVILEGE 25
3434 #define SE_SYNC_AGENT_PRIVILEGE 26
3435 #define SE_ENABLE_DELEGATION_PRIVILEGE 27
3436 #define SE_MANAGE_VOLUME_PRIVILEGE 28
3437 #define SE_IMPERSONATE_PRIVILEGE 29
3438 #define SE_CREATE_GLOBAL_PRIVILEGE 30
3439 #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_GLOBAL_PRIVILEGE
3441 typedef struct _SECURITY_SUBJECT_CONTEXT
{
3442 PACCESS_TOKEN ClientToken
;
3443 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
3444 PACCESS_TOKEN PrimaryToken
;
3445 PVOID ProcessAuditId
;
3446 } SECURITY_SUBJECT_CONTEXT
, *PSECURITY_SUBJECT_CONTEXT
;
3448 #include <pshpack4.h>
3449 typedef struct _ACCESS_STATE
{
3451 BOOLEAN SecurityEvaluated
;
3452 BOOLEAN GenerateAudit
;
3453 BOOLEAN GenerateOnClose
;
3454 BOOLEAN PrivilegesAllocated
;
3456 ACCESS_MASK RemainingDesiredAccess
;
3457 ACCESS_MASK PreviouslyGrantedAccess
;
3458 ACCESS_MASK OriginalDesiredAccess
;
3459 SECURITY_SUBJECT_CONTEXT SubjectSecurityContext
;
3460 PSECURITY_DESCRIPTOR SecurityDescriptor
;
3463 INITIAL_PRIVILEGE_SET InitialPrivilegeSet
;
3464 PRIVILEGE_SET PrivilegeSet
;
3467 BOOLEAN AuditPrivileges
;
3468 UNICODE_STRING ObjectName
;
3469 UNICODE_STRING ObjectTypeName
;
3470 } ACCESS_STATE
, *PACCESS_STATE
;
3471 #include <poppack.h>
3473 typedef struct _IO_SECURITY_CONTEXT
{
3474 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
3475 PACCESS_STATE AccessState
;
3476 ACCESS_MASK DesiredAccess
;
3477 ULONG FullCreateOptions
;
3478 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
3480 #define IO_TYPE_ADAPTER 1
3481 #define IO_TYPE_CONTROLLER 2
3482 #define IO_TYPE_DEVICE 3
3483 #define IO_TYPE_DRIVER 4
3484 #define IO_TYPE_FILE 5
3485 #define IO_TYPE_IRP 6
3486 #define IO_TYPE_MASTER_ADAPTER 7
3487 #define IO_TYPE_OPEN_PACKET 8
3488 #define IO_TYPE_TIMER 9
3489 #define IO_TYPE_VPB 10
3490 #define IO_TYPE_ERROR_LOG 11
3491 #define IO_TYPE_ERROR_MESSAGE 12
3492 #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
3494 #define IO_TYPE_CSQ_IRP_CONTEXT 1
3495 #define IO_TYPE_CSQ 2
3499 typedef struct _IO_CSQ_IRP_CONTEXT
{
3502 struct _IO_CSQ
*Csq
;
3503 } IO_CSQ_IRP_CONTEXT
, *PIO_CSQ_IRP_CONTEXT
;
3506 (DDKAPI
*PIO_CSQ_INSERT_IRP
)(
3507 IN
struct _IO_CSQ
*Csq
,
3511 (DDKAPI
*PIO_CSQ_REMOVE_IRP
)(
3512 IN
struct _IO_CSQ
*Csq
,
3516 (DDKAPI
*PIO_CSQ_PEEK_NEXT_IRP
)(
3517 IN
struct _IO_CSQ
*Csq
,
3519 IN PVOID PeekContext
);
3522 (DDKAPI
*PIO_CSQ_ACQUIRE_LOCK
)(
3523 IN
struct _IO_CSQ
*Csq
,
3527 (DDKAPI
*PIO_CSQ_RELEASE_LOCK
)(
3528 IN
struct _IO_CSQ
*Csq
,
3532 (DDKAPI
*PIO_CSQ_COMPLETE_CANCELED_IRP
)(
3533 IN
struct _IO_CSQ
*Csq
,
3536 typedef struct _IO_CSQ
{
3538 PIO_CSQ_INSERT_IRP CsqInsertIrp
;
3539 PIO_CSQ_REMOVE_IRP CsqRemoveIrp
;
3540 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
;
3541 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
;
3542 PIO_CSQ_RELEASE_LOCK CsqReleaseLock
;
3543 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
;
3544 PVOID ReservePointer
;
3547 #if !defined(_ALPHA_)
3548 #include <pshpack4.h>
3550 typedef struct _IO_STACK_LOCATION
{
3551 UCHAR MajorFunction
;
3552 UCHAR MinorFunction
;
3557 PIO_SECURITY_CONTEXT SecurityContext
;
3559 USHORT POINTER_ALIGNMENT FileAttributes
;
3561 ULONG POINTER_ALIGNMENT EaLength
;
3565 ULONG POINTER_ALIGNMENT Key
;
3566 LARGE_INTEGER ByteOffset
;
3570 ULONG POINTER_ALIGNMENT Key
;
3571 LARGE_INTEGER ByteOffset
;
3575 PUNICODE_STRING FileName
;
3576 FILE_INFORMATION_CLASS FileInformationClass
;
3581 ULONG CompletionFilter
;
3585 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
3589 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
3590 PFILE_OBJECT FileObject
;
3591 _ANONYMOUS_UNION
union {
3592 _ANONYMOUS_STRUCT
struct {
3593 BOOLEAN ReplaceIfExists
;
3594 BOOLEAN AdvanceOnly
;
3597 HANDLE DeleteHandle
;
3611 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
3615 FS_INFORMATION_CLASS FsInformationClass
;
3618 ULONG OutputBufferLength
;
3619 ULONG InputBufferLength
;
3620 ULONG FsControlCode
;
3621 PVOID Type3InputBuffer
;
3622 } FileSystemControl
;
3624 PLARGE_INTEGER Length
;
3626 LARGE_INTEGER ByteOffset
;
3629 ULONG OutputBufferLength
;
3630 ULONG POINTER_ALIGNMENT InputBufferLength
;
3631 ULONG POINTER_ALIGNMENT IoControlCode
;
3632 PVOID Type3InputBuffer
;
3635 SECURITY_INFORMATION SecurityInformation
;
3636 ULONG POINTER_ALIGNMENT Length
;
3639 SECURITY_INFORMATION SecurityInformation
;
3640 PSECURITY_DESCRIPTOR SecurityDescriptor
;
3644 PDEVICE_OBJECT DeviceObject
;
3648 PDEVICE_OBJECT DeviceObject
;
3651 struct _SCSI_REQUEST_BLOCK
*Srb
;
3656 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
3657 ULONG SidListLength
;
3663 DEVICE_RELATION_TYPE Type
;
3664 } QueryDeviceRelations
;
3666 CONST GUID
*InterfaceType
;
3669 PINTERFACE Interface
;
3670 PVOID InterfaceSpecificData
;
3673 PDEVICE_CAPABILITIES Capabilities
;
3674 } DeviceCapabilities
;
3676 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
3677 } FilterResourceRequirements
;
3682 ULONG POINTER_ALIGNMENT Length
;
3688 BUS_QUERY_ID_TYPE IdType
;
3691 DEVICE_TEXT_TYPE DeviceTextType
;
3692 LCID POINTER_ALIGNMENT LocaleId
;
3696 BOOLEAN Reserved
[3];
3697 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type
;
3698 } UsageNotification
;
3700 SYSTEM_POWER_STATE PowerState
;
3703 PPOWER_SEQUENCE PowerSequence
;
3706 ULONG SystemContext
;
3707 POWER_STATE_TYPE POINTER_ALIGNMENT Type
;
3708 POWER_STATE POINTER_ALIGNMENT State
;
3709 POWER_ACTION POINTER_ALIGNMENT ShutdownType
;
3712 PCM_RESOURCE_LIST AllocatedResources
;
3713 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
3716 ULONG_PTR ProviderId
;