1 /******************************************************************************
3 ******************************************************************************/
5 /* PCI_COMMON_CONFIG.Command */
6 #define PCI_ENABLE_IO_SPACE 0x0001
7 #define PCI_ENABLE_MEMORY_SPACE 0x0002
8 #define PCI_ENABLE_BUS_MASTER 0x0004
9 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
10 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
11 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
12 #define PCI_ENABLE_PARITY 0x0040
13 #define PCI_ENABLE_WAIT_CYCLE 0x0080
14 #define PCI_ENABLE_SERR 0x0100
15 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
16 #define PCI_DISABLE_LEVEL_INTERRUPT 0x0400
18 /* PCI_COMMON_CONFIG.Status */
19 #define PCI_STATUS_INTERRUPT_PENDING 0x0008
20 #define PCI_STATUS_CAPABILITIES_LIST 0x0010
21 #define PCI_STATUS_66MHZ_CAPABLE 0x0020
22 #define PCI_STATUS_UDF_SUPPORTED 0x0040
23 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
24 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
25 #define PCI_STATUS_DEVSEL 0x0600
26 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
27 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
28 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
29 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
30 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
32 /* PCI_COMMON_CONFIG.HeaderType */
33 #define PCI_MULTIFUNCTION 0x80
34 #define PCI_DEVICE_TYPE 0x00
35 #define PCI_BRIDGE_TYPE 0x01
36 #define PCI_CARDBUS_BRIDGE_TYPE 0x02
38 #define PCI_CONFIGURATION_TYPE(PciData) \
39 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
41 #define PCI_MULTIFUNCTION_DEVICE(PciData) \
42 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
44 /* PCI device classes */
45 #define PCI_CLASS_PRE_20 0x00
46 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
47 #define PCI_CLASS_NETWORK_CTLR 0x02
48 #define PCI_CLASS_DISPLAY_CTLR 0x03
49 #define PCI_CLASS_MULTIMEDIA_DEV 0x04
50 #define PCI_CLASS_MEMORY_CTLR 0x05
51 #define PCI_CLASS_BRIDGE_DEV 0x06
52 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
53 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
54 #define PCI_CLASS_INPUT_DEV 0x09
55 #define PCI_CLASS_DOCKING_STATION 0x0a
56 #define PCI_CLASS_PROCESSOR 0x0b
57 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
58 #define PCI_CLASS_WIRELESS_CTLR 0x0d
59 #define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0e
60 #define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0f
61 #define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10
62 #define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11
64 /* PCI device subclasses for class 0 */
65 #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
66 #define PCI_SUBCLASS_PRE_20_VGA 0x01
68 /* PCI device subclasses for class 1 (mass storage controllers)*/
69 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
70 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
71 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
72 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
73 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
74 #define PCI_SUBCLASS_MSC_OTHER 0x80
76 /* PCI device subclasses for class 2 (network controllers)*/
77 #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
78 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
79 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
80 #define PCI_SUBCLASS_NET_ATM_CTLR 0x03
81 #define PCI_SUBCLASS_NET_ISDN_CTLR 0x04
82 #define PCI_SUBCLASS_NET_OTHER 0x80
84 /* PCI device subclasses for class 3 (display controllers)*/
85 #define PCI_SUBCLASS_VID_VGA_CTLR 0x00
86 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01
87 #define PCI_SUBCLASS_VID_3D_CTLR 0x02
88 #define PCI_SUBCLASS_VID_OTHER 0x80
90 /* PCI device subclasses for class 4 (multimedia device)*/
91 #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
92 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
93 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
94 #define PCI_SUBCLASS_MM_OTHER 0x80
96 /* PCI device subclasses for class 5 (memory controller)*/
97 #define PCI_SUBCLASS_MEM_RAM 0x00
98 #define PCI_SUBCLASS_MEM_FLASH 0x01
99 #define PCI_SUBCLASS_MEM_OTHER 0x80
101 /* PCI device subclasses for class 6 (bridge device)*/
102 #define PCI_SUBCLASS_BR_HOST 0x00
103 #define PCI_SUBCLASS_BR_ISA 0x01
104 #define PCI_SUBCLASS_BR_EISA 0x02
105 #define PCI_SUBCLASS_BR_MCA 0x03
106 #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
107 #define PCI_SUBCLASS_BR_PCMCIA 0x05
108 #define PCI_SUBCLASS_BR_NUBUS 0x06
109 #define PCI_SUBCLASS_BR_CARDBUS 0x07
110 #define PCI_SUBCLASS_BR_RACEWAY 0x08
111 #define PCI_SUBCLASS_BR_OTHER 0x80
113 /* PCI device subclasses for class C (serial bus controller)*/
114 #define PCI_SUBCLASS_SB_IEEE1394 0x00
115 #define PCI_SUBCLASS_SB_ACCESS 0x01
116 #define PCI_SUBCLASS_SB_SSA 0x02
117 #define PCI_SUBCLASS_SB_USB 0x03
118 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
119 #define PCI_SUBCLASS_SB_SMBUS 0x05
121 #define PCI_MAX_DEVICES 32
122 #define PCI_MAX_FUNCTION 8
123 #define PCI_MAX_BRIDGE_NUMBER 0xFF
124 #define PCI_INVALID_VENDORID 0xFFFF
125 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
127 #define PCI_ADDRESS_IO_SPACE 0x00000001
128 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
129 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
130 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
131 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
132 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
134 #define PCI_TYPE_32BIT 0
135 #define PCI_TYPE_20BIT 2
136 #define PCI_TYPE_64BIT 4
138 #define POOL_COLD_ALLOCATION 256
139 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
140 #define POOL_RAISE_IF_ALLOCATION_FAILURE 16
142 #define PCI_TYPE0_ADDRESSES 6
143 #define PCI_TYPE1_ADDRESSES 2
144 #define PCI_TYPE2_ADDRESSES 5
146 #define IO_TYPE_ADAPTER 1
147 #define IO_TYPE_CONTROLLER 2
148 #define IO_TYPE_DEVICE 3
149 #define IO_TYPE_DRIVER 4
150 #define IO_TYPE_FILE 5
151 #define IO_TYPE_IRP 6
152 #define IO_TYPE_MASTER_ADAPTER 7
153 #define IO_TYPE_OPEN_PACKET 8
154 #define IO_TYPE_TIMER 9
155 #define IO_TYPE_VPB 10
156 #define IO_TYPE_ERROR_LOG 11
157 #define IO_TYPE_ERROR_MESSAGE 12
158 #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
160 #define IO_TYPE_CSQ_IRP_CONTEXT 1
161 #define IO_TYPE_CSQ 2
162 #define IO_TYPE_CSQ_EX 3
164 /* IO_RESOURCE_DESCRIPTOR.Option */
165 #define IO_RESOURCE_PREFERRED 0x01
166 #define IO_RESOURCE_DEFAULT 0x02
167 #define IO_RESOURCE_ALTERNATIVE 0x08
169 /* DEVICE_OBJECT.Flags */
170 #define DO_VERIFY_VOLUME 0x00000002
171 #define DO_BUFFERED_IO 0x00000004
172 #define DO_EXCLUSIVE 0x00000008
173 #define DO_DIRECT_IO 0x00000010
174 #define DO_MAP_IO_BUFFER 0x00000020
175 #define DO_DEVICE_INITIALIZING 0x00000080
176 #define DO_SHUTDOWN_REGISTERED 0x00000800
177 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
178 #define DO_POWER_PAGABLE 0x00002000
179 #define DO_POWER_INRUSH 0x00004000
181 /* DEVICE_OBJECT.Characteristics */
182 #define FILE_REMOVABLE_MEDIA 0x00000001
183 #define FILE_READ_ONLY_DEVICE 0x00000002
184 #define FILE_FLOPPY_DISKETTE 0x00000004
185 #define FILE_WRITE_ONCE_MEDIA 0x00000008
186 #define FILE_REMOTE_DEVICE 0x00000010
187 #define FILE_DEVICE_IS_MOUNTED 0x00000020
188 #define FILE_VIRTUAL_VOLUME 0x00000040
189 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
190 #define FILE_DEVICE_SECURE_OPEN 0x00000100
191 #define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800
192 #define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000
193 #define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000
195 /* DEVICE_OBJECT.AlignmentRequirement */
196 #define FILE_BYTE_ALIGNMENT 0x00000000
197 #define FILE_WORD_ALIGNMENT 0x00000001
198 #define FILE_LONG_ALIGNMENT 0x00000003
199 #define FILE_QUAD_ALIGNMENT 0x00000007
200 #define FILE_OCTA_ALIGNMENT 0x0000000f
201 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
202 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
203 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
204 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
205 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
207 /* DEVICE_OBJECT.DeviceType */
208 #define DEVICE_TYPE ULONG
210 #define FILE_DEVICE_BEEP 0x00000001
211 #define FILE_DEVICE_CD_ROM 0x00000002
212 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
213 #define FILE_DEVICE_CONTROLLER 0x00000004
214 #define FILE_DEVICE_DATALINK 0x00000005
215 #define FILE_DEVICE_DFS 0x00000006
216 #define FILE_DEVICE_DISK 0x00000007
217 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
218 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
219 #define FILE_DEVICE_INPORT_PORT 0x0000000a
220 #define FILE_DEVICE_KEYBOARD 0x0000000b
221 #define FILE_DEVICE_MAILSLOT 0x0000000c
222 #define FILE_DEVICE_MIDI_IN 0x0000000d
223 #define FILE_DEVICE_MIDI_OUT 0x0000000e
224 #define FILE_DEVICE_MOUSE 0x0000000f
225 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
226 #define FILE_DEVICE_NAMED_PIPE 0x00000011
227 #define FILE_DEVICE_NETWORK 0x00000012
228 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
229 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
230 #define FILE_DEVICE_NULL 0x00000015
231 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
232 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
233 #define FILE_DEVICE_PRINTER 0x00000018
234 #define FILE_DEVICE_SCANNER 0x00000019
235 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
236 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
237 #define FILE_DEVICE_SCREEN 0x0000001c
238 #define FILE_DEVICE_SOUND 0x0000001d
239 #define FILE_DEVICE_STREAMS 0x0000001e
240 #define FILE_DEVICE_TAPE 0x0000001f
241 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
242 #define FILE_DEVICE_TRANSPORT 0x00000021
243 #define FILE_DEVICE_UNKNOWN 0x00000022
244 #define FILE_DEVICE_VIDEO 0x00000023
245 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
246 #define FILE_DEVICE_WAVE_IN 0x00000025
247 #define FILE_DEVICE_WAVE_OUT 0x00000026
248 #define FILE_DEVICE_8042_PORT 0x00000027
249 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
250 #define FILE_DEVICE_BATTERY 0x00000029
251 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
252 #define FILE_DEVICE_MODEM 0x0000002b
253 #define FILE_DEVICE_VDM 0x0000002c
254 #define FILE_DEVICE_MASS_STORAGE 0x0000002d
255 #define FILE_DEVICE_SMB 0x0000002e
256 #define FILE_DEVICE_KS 0x0000002f
257 #define FILE_DEVICE_CHANGER 0x00000030
258 #define FILE_DEVICE_SMARTCARD 0x00000031
259 #define FILE_DEVICE_ACPI 0x00000032
260 #define FILE_DEVICE_DVD 0x00000033
261 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
262 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
263 #define FILE_DEVICE_DFS_VOLUME 0x00000036
264 #define FILE_DEVICE_SERENUM 0x00000037
265 #define FILE_DEVICE_TERMSRV 0x00000038
266 #define FILE_DEVICE_KSEC 0x00000039
267 #define FILE_DEVICE_FIPS 0x0000003A
268 #define FILE_DEVICE_INFINIBAND 0x0000003B
269 #define FILE_DEVICE_VMBUS 0x0000003E
270 #define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F
271 #define FILE_DEVICE_WPD 0x00000040
272 #define FILE_DEVICE_BLUETOOTH 0x00000041
273 #define FILE_DEVICE_MT_COMPOSITE 0x00000042
274 #define FILE_DEVICE_MT_TRANSPORT 0x00000043
275 #define FILE_DEVICE_BIOMETRIC 0x00000044
276 #define FILE_DEVICE_PMI 0x00000045
278 #if defined(NT_PROCESSOR_GROUPS)
280 typedef USHORT IRQ_DEVICE_POLICY
, *PIRQ_DEVICE_POLICY
;
282 typedef enum _IRQ_DEVICE_POLICY_USHORT
{
283 IrqPolicyMachineDefault
= 0,
284 IrqPolicyAllCloseProcessors
= 1,
285 IrqPolicyOneCloseProcessor
= 2,
286 IrqPolicyAllProcessorsInMachine
= 3,
287 IrqPolicyAllProcessorsInGroup
= 3,
288 IrqPolicySpecifiedProcessors
= 4,
289 IrqPolicySpreadMessagesAcrossAllProcessors
= 5};
291 #else /* defined(NT_PROCESSOR_GROUPS) */
293 typedef enum _IRQ_DEVICE_POLICY
{
294 IrqPolicyMachineDefault
= 0,
295 IrqPolicyAllCloseProcessors
,
296 IrqPolicyOneCloseProcessor
,
297 IrqPolicyAllProcessorsInMachine
,
298 IrqPolicySpecifiedProcessors
,
299 IrqPolicySpreadMessagesAcrossAllProcessors
300 } IRQ_DEVICE_POLICY
, *PIRQ_DEVICE_POLICY
;
304 typedef enum _IRQ_PRIORITY
{
305 IrqPriorityUndefined
= 0,
309 } IRQ_PRIORITY
, *PIRQ_PRIORITY
;
311 typedef enum _IRQ_GROUP_POLICY
{
312 GroupAffinityAllGroupZero
= 0,
313 GroupAffinityDontCare
314 } IRQ_GROUP_POLICY
, *PIRQ_GROUP_POLICY
;
316 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
318 typedef struct _OBJECT_HANDLE_INFORMATION
{
319 ULONG HandleAttributes
;
320 ACCESS_MASK GrantedAccess
;
321 } OBJECT_HANDLE_INFORMATION
, *POBJECT_HANDLE_INFORMATION
;
323 typedef struct _CLIENT_ID
{
324 HANDLE UniqueProcess
;
326 } CLIENT_ID
, *PCLIENT_ID
;
329 (NTAPI
*PKSTART_ROUTINE
)(
330 IN PVOID StartContext
);
332 typedef struct _VPB
{
336 USHORT VolumeLabelLength
;
337 struct _DEVICE_OBJECT
*DeviceObject
;
338 struct _DEVICE_OBJECT
*RealDevice
;
340 ULONG ReferenceCount
;
341 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
/ sizeof(WCHAR
)];
344 typedef enum _IO_ALLOCATION_ACTION
{
347 DeallocateObjectKeepRegisters
348 } IO_ALLOCATION_ACTION
, *PIO_ALLOCATION_ACTION
;
350 typedef IO_ALLOCATION_ACTION
351 (NTAPI
*PDRIVER_CONTROL
)(
352 IN
struct _DEVICE_OBJECT
*DeviceObject
,
354 IN PVOID MapRegisterBase
,
357 typedef struct _WAIT_CONTEXT_BLOCK
{
358 KDEVICE_QUEUE_ENTRY WaitQueueEntry
;
359 PDRIVER_CONTROL DeviceRoutine
;
361 ULONG NumberOfMapRegisters
;
364 PKDPC BufferChainingDpc
;
365 } WAIT_CONTEXT_BLOCK
, *PWAIT_CONTEXT_BLOCK
;
367 typedef struct _DEVICE_OBJECT
{
371 struct _DRIVER_OBJECT
*DriverObject
;
372 struct _DEVICE_OBJECT
*NextDevice
;
373 struct _DEVICE_OBJECT
*AttachedDevice
;
374 struct _IRP
*CurrentIrp
;
377 ULONG Characteristics
;
379 PVOID DeviceExtension
;
380 DEVICE_TYPE DeviceType
;
383 LIST_ENTRY ListEntry
;
384 WAIT_CONTEXT_BLOCK Wcb
;
386 ULONG AlignmentRequirement
;
387 KDEVICE_QUEUE DeviceQueue
;
389 ULONG ActiveThreadCount
;
390 PSECURITY_DESCRIPTOR SecurityDescriptor
;
394 struct _DEVOBJ_EXTENSION
*DeviceObjectExtension
;
396 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
398 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK
* PIO_REMOVE_LOCK_TRACKING_BLOCK
;
400 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK
{
403 volatile LONG IoCount
;
405 } IO_REMOVE_LOCK_COMMON_BLOCK
;
407 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK
{
410 LONGLONG MaxLockedTicks
;
414 volatile LONG LowMemoryCount
;
417 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks
;
418 } IO_REMOVE_LOCK_DBG_BLOCK
;
420 typedef struct _IO_REMOVE_LOCK
{
421 IO_REMOVE_LOCK_COMMON_BLOCK Common
;
423 IO_REMOVE_LOCK_DBG_BLOCK Dbg
;
425 } IO_REMOVE_LOCK
, *PIO_REMOVE_LOCK
;
427 typedef struct _IO_WORKITEM
*PIO_WORKITEM
;
430 (NTAPI IO_WORKITEM_ROUTINE
)(
431 IN PDEVICE_OBJECT DeviceObject
,
433 typedef IO_WORKITEM_ROUTINE
*PIO_WORKITEM_ROUTINE
;
435 typedef struct _SHARE_ACCESS
{
443 } SHARE_ACCESS
, *PSHARE_ACCESS
;
445 /* While MS WDK uses inheritance in C++, we cannot do this with gcc, as
446 inheritance, even from a struct renders the type non-POD. So we use
448 #define PCI_COMMON_HEADER_LAYOUT \
457 UCHAR CacheLineSize; \
458 UCHAR LatencyTimer; \
462 struct _PCI_HEADER_TYPE_0 { \
463 ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \
465 USHORT SubVendorID; \
466 USHORT SubSystemID; \
467 ULONG ROMBaseAddress; \
468 UCHAR CapabilitiesPtr; \
469 UCHAR Reserved1[3]; \
471 UCHAR InterruptLine; \
472 UCHAR InterruptPin; \
473 UCHAR MinimumGrant; \
474 UCHAR MaximumLatency; \
476 struct _PCI_HEADER_TYPE_1 { \
477 ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \
479 UCHAR SecondaryBus; \
480 UCHAR SubordinateBus; \
481 UCHAR SecondaryLatency; \
484 USHORT SecondaryStatus; \
486 USHORT MemoryLimit; \
487 USHORT PrefetchBase; \
488 USHORT PrefetchLimit; \
489 ULONG PrefetchBaseUpper32; \
490 ULONG PrefetchLimitUpper32; \
491 USHORT IOBaseUpper16; \
492 USHORT IOLimitUpper16; \
493 UCHAR CapabilitiesPtr; \
494 UCHAR Reserved1[3]; \
495 ULONG ROMBaseAddress; \
496 UCHAR InterruptLine; \
497 UCHAR InterruptPin; \
498 USHORT BridgeControl; \
500 struct _PCI_HEADER_TYPE_2 { \
501 ULONG SocketRegistersBaseAddress; \
502 UCHAR CapabilitiesPtr; \
504 USHORT SecondaryStatus; \
506 UCHAR SecondaryBus; \
507 UCHAR SubordinateBus; \
508 UCHAR SecondaryLatency; \
512 } Range[PCI_TYPE2_ADDRESSES-1]; \
513 UCHAR InterruptLine; \
514 UCHAR InterruptPin; \
515 USHORT BridgeControl; \
519 typedef struct _PCI_CAPABILITIES_HEADER
{
522 } PCI_CAPABILITIES_HEADER
, *PPCI_CAPABILITIES_HEADER
;
524 typedef struct _PCI_COMMON_HEADER
{
525 PCI_COMMON_HEADER_LAYOUT
526 } PCI_COMMON_HEADER
, *PPCI_COMMON_HEADER
;
529 typedef struct _PCI_COMMON_CONFIG
{
530 PCI_COMMON_HEADER_LAYOUT
531 UCHAR DeviceSpecific
[192];
532 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
534 typedef struct _PCI_COMMON_CONFIG
{
535 PCI_COMMON_HEADER DUMMYSTRUCTNAME
;
536 UCHAR DeviceSpecific
[192];
537 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
540 typedef enum _CREATE_FILE_TYPE
{
542 CreateFileTypeNamedPipe
,
543 CreateFileTypeMailslot
546 #define IO_FORCE_ACCESS_CHECK 0x001
547 #define IO_NO_PARAMETER_CHECKING 0x100
549 #define IO_REPARSE 0x0
550 #define IO_REMOUNT 0x1
552 typedef struct _IO_STATUS_BLOCK
{
553 _ANONYMOUS_UNION
union {
557 ULONG_PTR Information
;
558 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
561 typedef struct _IO_STATUS_BLOCK32
{
564 } IO_STATUS_BLOCK32
, *PIO_STATUS_BLOCK32
;
567 typedef struct _PCI_SLOT_NUMBER
{
570 ULONG DeviceNumber
:5;
571 ULONG FunctionNumber
:3;
576 } PCI_SLOT_NUMBER
, *PPCI_SLOT_NUMBER
;
579 (NTAPI
*PIO_APC_ROUTINE
)(
581 IN PIO_STATUS_BLOCK IoStatusBlock
,
584 #define PIO_APC_ROUTINE_DEFINED
586 typedef enum _IO_SESSION_EVENT
{
587 IoSessionEventIgnore
= 0,
588 IoSessionEventCreated
,
589 IoSessionEventTerminated
,
590 IoSessionEventConnected
,
591 IoSessionEventDisconnected
,
593 IoSessionEventLogoff
,
595 } IO_SESSION_EVENT
, *PIO_SESSION_EVENT
;
597 typedef enum _IO_SESSION_STATE
{
598 IoSessionStateCreated
= 1,
599 IoSessionStateInitialized
,
600 IoSessionStateConnected
,
601 IoSessionStateDisconnected
,
602 IoSessionStateDisconnectedLoggedOn
,
603 IoSessionStateLoggedOn
,
604 IoSessionStateLoggedOff
,
605 IoSessionStateTerminated
,
607 } IO_SESSION_STATE
, *PIO_SESSION_STATE
;
609 #define IO_SESSION_STATE_ALL_EVENTS 0xffffffff
610 #define IO_SESSION_STATE_CREATION_EVENT 0x00000001
611 #define IO_SESSION_STATE_TERMINATION_EVENT 0x00000002
612 #define IO_SESSION_STATE_CONNECT_EVENT 0x00000004
613 #define IO_SESSION_STATE_DISCONNECT_EVENT 0x00000008
614 #define IO_SESSION_STATE_LOGON_EVENT 0x00000010
615 #define IO_SESSION_STATE_LOGOFF_EVENT 0x00000020
617 #define IO_SESSION_STATE_VALID_EVENT_MASK 0x0000003f
619 #define IO_SESSION_MAX_PAYLOAD_SIZE 256L
621 typedef struct _IO_SESSION_CONNECT_INFO
{
623 BOOLEAN LocalSession
;
624 } IO_SESSION_CONNECT_INFO
, *PIO_SESSION_CONNECT_INFO
;
627 (NTAPI
*WMI_NOTIFICATION_CALLBACK
)(
631 #define EVENT_INCREMENT 1
632 #define IO_NO_INCREMENT 0
633 #define IO_CD_ROM_INCREMENT 1
634 #define IO_DISK_INCREMENT 1
635 #define IO_KEYBOARD_INCREMENT 6
636 #define IO_MAILSLOT_INCREMENT 2
637 #define IO_MOUSE_INCREMENT 6
638 #define IO_NAMED_PIPE_INCREMENT 2
639 #define IO_NETWORK_INCREMENT 2
640 #define IO_PARALLEL_INCREMENT 1
641 #define IO_SERIAL_INCREMENT 2
642 #define IO_SOUND_INCREMENT 8
643 #define IO_VIDEO_INCREMENT 1
644 #define SEMAPHORE_INCREMENT 1
646 #define MM_MAXIMUM_DISK_IO_SIZE (0x10000)
648 typedef struct _BOOTDISK_INFORMATION
{
649 LONGLONG BootPartitionOffset
;
650 LONGLONG SystemPartitionOffset
;
651 ULONG BootDeviceSignature
;
652 ULONG SystemDeviceSignature
;
653 } BOOTDISK_INFORMATION
, *PBOOTDISK_INFORMATION
;
655 typedef struct _BOOTDISK_INFORMATION_EX
{
656 LONGLONG BootPartitionOffset
;
657 LONGLONG SystemPartitionOffset
;
658 ULONG BootDeviceSignature
;
659 ULONG SystemDeviceSignature
;
661 GUID SystemDeviceGuid
;
662 BOOLEAN BootDeviceIsGpt
;
663 BOOLEAN SystemDeviceIsGpt
;
664 } BOOTDISK_INFORMATION_EX
, *PBOOTDISK_INFORMATION_EX
;
666 #include <pshpack1.h>
668 typedef struct _EISA_MEMORY_TYPE
{
676 } EISA_MEMORY_TYPE
, *PEISA_MEMORY_TYPE
;
678 typedef struct _EISA_MEMORY_CONFIGURATION
{
679 EISA_MEMORY_TYPE ConfigurationByte
;
681 USHORT AddressLowWord
;
682 UCHAR AddressHighByte
;
684 } EISA_MEMORY_CONFIGURATION
, *PEISA_MEMORY_CONFIGURATION
;
686 typedef struct _EISA_IRQ_DESCRIPTOR
{
689 UCHAR LevelTriggered
:1;
692 } EISA_IRQ_DESCRIPTOR
, *PEISA_IRQ_DESCRIPTOR
;
694 typedef struct _EISA_IRQ_CONFIGURATION
{
695 EISA_IRQ_DESCRIPTOR ConfigurationByte
;
697 } EISA_IRQ_CONFIGURATION
, *PEISA_IRQ_CONFIGURATION
;
699 typedef struct _DMA_CONFIGURATION_BYTE0
{
704 } DMA_CONFIGURATION_BYTE0
;
706 typedef struct _DMA_CONFIGURATION_BYTE1
{
708 UCHAR TransferSize
:2;
711 } DMA_CONFIGURATION_BYTE1
;
713 typedef struct _EISA_DMA_CONFIGURATION
{
714 DMA_CONFIGURATION_BYTE0 ConfigurationByte0
;
715 DMA_CONFIGURATION_BYTE1 ConfigurationByte1
;
716 } EISA_DMA_CONFIGURATION
, *PEISA_DMA_CONFIGURATION
;
718 typedef struct _EISA_PORT_DESCRIPTOR
{
723 } EISA_PORT_DESCRIPTOR
, *PEISA_PORT_DESCRIPTOR
;
725 typedef struct _EISA_PORT_CONFIGURATION
{
726 EISA_PORT_DESCRIPTOR Configuration
;
728 } EISA_PORT_CONFIGURATION
, *PEISA_PORT_CONFIGURATION
;
730 typedef struct _CM_EISA_SLOT_INFORMATION
{
736 UCHAR NumberFunctions
;
737 UCHAR FunctionInformation
;
739 } CM_EISA_SLOT_INFORMATION
, *PCM_EISA_SLOT_INFORMATION
;
741 typedef struct _CM_EISA_FUNCTION_INFORMATION
{
747 UCHAR Selections
[26];
749 UCHAR TypeString
[80];
750 EISA_MEMORY_CONFIGURATION EisaMemory
[9];
751 EISA_IRQ_CONFIGURATION EisaIrq
[7];
752 EISA_DMA_CONFIGURATION EisaDma
[4];
753 EISA_PORT_CONFIGURATION EisaPort
[20];
754 UCHAR InitializationData
[60];
755 } CM_EISA_FUNCTION_INFORMATION
, *PCM_EISA_FUNCTION_INFORMATION
;
759 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
761 #define EISA_FUNCTION_ENABLED 0x80
762 #define EISA_FREE_FORM_DATA 0x40
763 #define EISA_HAS_PORT_INIT_ENTRY 0x20
764 #define EISA_HAS_PORT_RANGE 0x10
765 #define EISA_HAS_DMA_ENTRY 0x08
766 #define EISA_HAS_IRQ_ENTRY 0x04
767 #define EISA_HAS_MEMORY_ENTRY 0x02
768 #define EISA_HAS_TYPE_ENTRY 0x01
769 #define EISA_HAS_INFORMATION \
770 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
771 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
773 #define EISA_MORE_ENTRIES 0x80
774 #define EISA_SYSTEM_MEMORY 0x00
775 #define EISA_MEMORY_TYPE_RAM 0x01
777 /* CM_EISA_SLOT_INFORMATION.ReturnCode */
779 #define EISA_INVALID_SLOT 0x80
780 #define EISA_INVALID_FUNCTION 0x81
781 #define EISA_INVALID_CONFIGURATION 0x82
782 #define EISA_EMPTY_SLOT 0x83
783 #define EISA_INVALID_BIOS_CALL 0x86
786 ** Plug and Play structures
790 (NTAPI
*PINTERFACE_REFERENCE
)(
794 (NTAPI
*PINTERFACE_DEREFERENCE
)(
798 (NTAPI
*PTRANSLATE_BUS_ADDRESS
)(
800 IN PHYSICAL_ADDRESS BusAddress
,
802 IN OUT PULONG AddressSpace
,
803 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
805 typedef struct _DMA_ADAPTER
*
806 (NTAPI
*PGET_DMA_ADAPTER
)(
808 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
809 OUT PULONG NumberOfMapRegisters
);
812 (NTAPI
*PGET_SET_DEVICE_DATA
)(
819 /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
820 #define PCI_USE_SUBSYSTEM_IDS 0x00000001
821 #define PCI_USE_REVISION 0x00000002
822 #define PCI_USE_VENDEV_IDS 0x00000004
823 #define PCI_USE_CLASS_SUBCLASS 0x00000008
824 #define PCI_USE_PROGIF 0x00000010
825 #define PCI_USE_LOCAL_BUS 0x00000020
826 #define PCI_USE_LOCAL_DEVICE 0x00000040
828 typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS
{
839 } PCI_DEVICE_PRESENCE_PARAMETERS
, *PPCI_DEVICE_PRESENCE_PARAMETERS
;
842 (NTAPI
*PPCI_IS_DEVICE_PRESENT
)(
846 IN USHORT SubVendorID
,
847 IN USHORT SubSystemID
,
851 (NTAPI
*PPCI_IS_DEVICE_PRESENT_EX
)(
853 IN PPCI_DEVICE_PRESENCE_PARAMETERS Parameters
);
855 typedef struct _BUS_INTERFACE_STANDARD
{
859 PINTERFACE_REFERENCE InterfaceReference
;
860 PINTERFACE_DEREFERENCE InterfaceDereference
;
861 PTRANSLATE_BUS_ADDRESS TranslateBusAddress
;
862 PGET_DMA_ADAPTER GetDmaAdapter
;
863 PGET_SET_DEVICE_DATA SetBusData
;
864 PGET_SET_DEVICE_DATA GetBusData
;
865 } BUS_INTERFACE_STANDARD
, *PBUS_INTERFACE_STANDARD
;
867 typedef struct _PCI_DEVICE_PRESENT_INTERFACE
{
871 PINTERFACE_REFERENCE InterfaceReference
;
872 PINTERFACE_DEREFERENCE InterfaceDereference
;
873 PPCI_IS_DEVICE_PRESENT IsDevicePresent
;
874 PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx
;
875 } PCI_DEVICE_PRESENT_INTERFACE
, *PPCI_DEVICE_PRESENT_INTERFACE
;
877 typedef struct _DEVICE_CAPABILITIES
{
882 ULONG LockSupported
:1;
883 ULONG EjectSupported
:1;
887 ULONG SilentInstall
:1;
889 ULONG SurpriseRemovalOK
:1;
894 ULONG HardwareDisabled
:1;
896 ULONG WarmEjectSupported
:1;
897 ULONG NoDisplayInUI
:1;
901 DEVICE_POWER_STATE DeviceState
[PowerSystemMaximum
];
902 SYSTEM_POWER_STATE SystemWake
;
903 DEVICE_POWER_STATE DeviceWake
;
907 } DEVICE_CAPABILITIES
, *PDEVICE_CAPABILITIES
;
909 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION
{
913 GUID InterfaceClassGuid
;
914 PUNICODE_STRING SymbolicLinkName
;
915 } DEVICE_INTERFACE_CHANGE_NOTIFICATION
, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION
;
917 typedef struct _HWPROFILE_CHANGE_NOTIFICATION
{
921 } HWPROFILE_CHANGE_NOTIFICATION
, *PHWPROFILE_CHANGE_NOTIFICATION
;
925 typedef struct _INTERFACE
{
929 PINTERFACE_REFERENCE InterfaceReference
;
930 PINTERFACE_DEREFERENCE InterfaceDereference
;
931 } INTERFACE
, *PINTERFACE
;
933 typedef struct _PLUGPLAY_NOTIFICATION_HEADER
{
937 } PLUGPLAY_NOTIFICATION_HEADER
, *PPLUGPLAY_NOTIFICATION_HEADER
;
939 typedef ULONG PNP_DEVICE_STATE
, *PPNP_DEVICE_STATE
;
941 /* PNP_DEVICE_STATE */
943 #define PNP_DEVICE_DISABLED 0x00000001
944 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
945 #define PNP_DEVICE_FAILED 0x00000004
946 #define PNP_DEVICE_REMOVED 0x00000008
947 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
948 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
950 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION
{
954 struct _FILE_OBJECT
*FileObject
;
955 LONG NameBufferOffset
;
956 UCHAR CustomDataBuffer
[1];
957 } TARGET_DEVICE_CUSTOM_NOTIFICATION
, *PTARGET_DEVICE_CUSTOM_NOTIFICATION
;
959 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION
{
963 struct _FILE_OBJECT
*FileObject
;
964 } TARGET_DEVICE_REMOVAL_NOTIFICATION
, *PTARGET_DEVICE_REMOVAL_NOTIFICATION
;
966 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE
{
967 DeviceUsageTypeUndefined
,
968 DeviceUsageTypePaging
,
969 DeviceUsageTypeHibernation
,
970 DeviceUsageTypeDumpFile
971 } DEVICE_USAGE_NOTIFICATION_TYPE
;
973 typedef struct _POWER_SEQUENCE
{
977 } POWER_SEQUENCE
, *PPOWER_SEQUENCE
;
980 DevicePropertyDeviceDescription
= 0x0,
981 DevicePropertyHardwareID
= 0x1,
982 DevicePropertyCompatibleIDs
= 0x2,
983 DevicePropertyBootConfiguration
= 0x3,
984 DevicePropertyBootConfigurationTranslated
= 0x4,
985 DevicePropertyClassName
= 0x5,
986 DevicePropertyClassGuid
= 0x6,
987 DevicePropertyDriverKeyName
= 0x7,
988 DevicePropertyManufacturer
= 0x8,
989 DevicePropertyFriendlyName
= 0x9,
990 DevicePropertyLocationInformation
= 0xa,
991 DevicePropertyPhysicalDeviceObjectName
= 0xb,
992 DevicePropertyBusTypeGuid
= 0xc,
993 DevicePropertyLegacyBusType
= 0xd,
994 DevicePropertyBusNumber
= 0xe,
995 DevicePropertyEnumeratorName
= 0xf,
996 DevicePropertyAddress
= 0x10,
997 DevicePropertyUINumber
= 0x11,
998 DevicePropertyInstallState
= 0x12,
999 DevicePropertyRemovalPolicy
= 0x13,
1000 DevicePropertyResourceRequirements
= 0x14,
1001 DevicePropertyAllocatedResources
= 0x15,
1002 DevicePropertyContainerID
= 0x16
1003 } DEVICE_REGISTRY_PROPERTY
;
1005 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY
{
1006 EventCategoryReserved
,
1007 EventCategoryHardwareProfileChange
,
1008 EventCategoryDeviceInterfaceChange
,
1009 EventCategoryTargetDeviceChange
1010 } IO_NOTIFICATION_EVENT_CATEGORY
;
1012 typedef enum _IO_PRIORITY_HINT
{
1013 IoPriorityVeryLow
= 0,
1021 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
1024 (NTAPI
*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE
)(
1025 IN PVOID NotificationStructure
,
1029 (NTAPI
*PDEVICE_CHANGE_COMPLETE_CALLBACK
)(
1032 typedef enum _FILE_INFORMATION_CLASS
{
1033 FileDirectoryInformation
= 1,
1034 FileFullDirectoryInformation
,
1035 FileBothDirectoryInformation
,
1036 FileBasicInformation
,
1037 FileStandardInformation
,
1038 FileInternalInformation
,
1040 FileAccessInformation
,
1041 FileNameInformation
,
1042 FileRenameInformation
,
1043 FileLinkInformation
,
1044 FileNamesInformation
,
1045 FileDispositionInformation
,
1046 FilePositionInformation
,
1047 FileFullEaInformation
,
1048 FileModeInformation
,
1049 FileAlignmentInformation
,
1051 FileAllocationInformation
,
1052 FileEndOfFileInformation
,
1053 FileAlternateNameInformation
,
1054 FileStreamInformation
,
1055 FilePipeInformation
,
1056 FilePipeLocalInformation
,
1057 FilePipeRemoteInformation
,
1058 FileMailslotQueryInformation
,
1059 FileMailslotSetInformation
,
1060 FileCompressionInformation
,
1061 FileObjectIdInformation
,
1062 FileCompletionInformation
,
1063 FileMoveClusterInformation
,
1064 FileQuotaInformation
,
1065 FileReparsePointInformation
,
1066 FileNetworkOpenInformation
,
1067 FileAttributeTagInformation
,
1068 FileTrackingInformation
,
1069 FileIdBothDirectoryInformation
,
1070 FileIdFullDirectoryInformation
,
1071 FileValidDataLengthInformation
,
1072 FileShortNameInformation
,
1073 FileIoCompletionNotificationInformation
,
1074 FileIoStatusBlockRangeInformation
,
1075 FileIoPriorityHintInformation
,
1076 FileSfioReserveInformation
,
1077 FileSfioVolumeInformation
,
1078 FileHardLinkInformation
,
1079 FileProcessIdsUsingFileInformation
,
1080 FileNormalizedNameInformation
,
1081 FileNetworkPhysicalNameInformation
,
1082 FileIdGlobalTxDirectoryInformation
,
1083 FileIsRemoteDeviceInformation
,
1084 FileAttributeCacheInformation
,
1085 FileNumaNodeInformation
,
1086 FileStandardLinkInformation
,
1087 FileRemoteProtocolInformation
,
1088 FileMaximumInformation
1089 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
1091 typedef struct _FILE_POSITION_INFORMATION
{
1092 LARGE_INTEGER CurrentByteOffset
;
1093 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
1095 typedef struct _FILE_BASIC_INFORMATION
{
1096 LARGE_INTEGER CreationTime
;
1097 LARGE_INTEGER LastAccessTime
;
1098 LARGE_INTEGER LastWriteTime
;
1099 LARGE_INTEGER ChangeTime
;
1100 ULONG FileAttributes
;
1101 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
1103 typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION
{
1104 IO_PRIORITY_HINT PriorityHint
;
1105 } FILE_IO_PRIORITY_HINT_INFORMATION
, *PFILE_IO_PRIORITY_HINT_INFORMATION
;
1107 typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
{
1109 } FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION
;
1111 typedef struct _FILE_IOSTATUSBLOCK_RANGE_INFORMATION
{
1112 PUCHAR IoStatusBlockRange
;
1114 } FILE_IOSTATUSBLOCK_RANGE_INFORMATION
, *PFILE_IOSTATUSBLOCK_RANGE_INFORMATION
;
1116 typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION
{
1118 } FILE_IS_REMOTE_DEVICE_INFORMATION
, *PFILE_IS_REMOTE_DEVICE_INFORMATION
;
1120 typedef struct _FILE_NUMA_NODE_INFORMATION
{
1122 } FILE_NUMA_NODE_INFORMATION
, *PFILE_NUMA_NODE_INFORMATION
;
1124 typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION
{
1125 ULONG NumberOfProcessIdsInList
;
1126 ULONG_PTR ProcessIdList
[1];
1127 } FILE_PROCESS_IDS_USING_FILE_INFORMATION
, *PFILE_PROCESS_IDS_USING_FILE_INFORMATION
;
1129 typedef struct _FILE_STANDARD_INFORMATION
{
1130 LARGE_INTEGER AllocationSize
;
1131 LARGE_INTEGER EndOfFile
;
1132 ULONG NumberOfLinks
;
1133 BOOLEAN DeletePending
;
1135 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
1137 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
1138 LARGE_INTEGER CreationTime
;
1139 LARGE_INTEGER LastAccessTime
;
1140 LARGE_INTEGER LastWriteTime
;
1141 LARGE_INTEGER ChangeTime
;
1142 LARGE_INTEGER AllocationSize
;
1143 LARGE_INTEGER EndOfFile
;
1144 ULONG FileAttributes
;
1145 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
1147 typedef enum _FSINFOCLASS
{
1148 FileFsVolumeInformation
= 1,
1149 FileFsLabelInformation
,
1150 FileFsSizeInformation
,
1151 FileFsDeviceInformation
,
1152 FileFsAttributeInformation
,
1153 FileFsControlInformation
,
1154 FileFsFullSizeInformation
,
1155 FileFsObjectIdInformation
,
1156 FileFsDriverPathInformation
,
1157 FileFsVolumeFlagsInformation
,
1158 FileFsMaximumInformation
1159 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
1161 typedef struct _FILE_FS_DEVICE_INFORMATION
{
1162 DEVICE_TYPE DeviceType
;
1163 ULONG Characteristics
;
1164 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
1166 typedef struct _FILE_FULL_EA_INFORMATION
{
1167 ULONG NextEntryOffset
;
1170 USHORT EaValueLength
;
1172 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
1174 typedef struct _FILE_SFIO_RESERVE_INFORMATION
{
1175 ULONG RequestsPerPeriod
;
1177 BOOLEAN RetryFailures
;
1178 BOOLEAN Discardable
;
1180 ULONG NumOutstandingRequests
;
1181 } FILE_SFIO_RESERVE_INFORMATION
, *PFILE_SFIO_RESERVE_INFORMATION
;
1183 typedef struct _FILE_SFIO_VOLUME_INFORMATION
{
1184 ULONG MaximumRequestsPerPeriod
;
1185 ULONG MinimumPeriod
;
1186 ULONG MinimumTransferSize
;
1187 } FILE_SFIO_VOLUME_INFORMATION
, *PFILE_SFIO_VOLUME_INFORMATION
;
1189 #define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1
1190 #define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2
1191 #define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4
1193 #define FM_LOCK_BIT (0x1)
1194 #define FM_LOCK_BIT_V (0x0)
1195 #define FM_LOCK_WAITER_WOKEN (0x2)
1196 #define FM_LOCK_WAITER_INC (0x4)
1198 typedef ULONG_PTR ERESOURCE_THREAD
, *PERESOURCE_THREAD
;
1200 typedef struct _OWNER_ENTRY
{
1201 ERESOURCE_THREAD OwnerThread
;
1202 _ANONYMOUS_UNION
union {
1206 } OWNER_ENTRY
, *POWNER_ENTRY
;
1208 typedef struct _ERESOURCE
{
1209 LIST_ENTRY SystemResourcesList
;
1210 POWNER_ENTRY OwnerTable
;
1213 volatile PKSEMAPHORE SharedWaiters
;
1214 volatile PKEVENT ExclusiveWaiters
;
1215 OWNER_ENTRY OwnerEntry
;
1216 ULONG ActiveEntries
;
1217 ULONG ContentionCount
;
1218 ULONG NumberOfSharedWaiters
;
1219 ULONG NumberOfExclusiveWaiters
;
1220 __GNU_EXTENSION
union {
1222 ULONG_PTR CreatorBackTraceIndex
;
1224 KSPIN_LOCK SpinLock
;
1225 } ERESOURCE
, *PERESOURCE
;
1227 /* ERESOURCE.Flag */
1228 #define ResourceNeverExclusive 0x0010
1229 #define ResourceReleaseByOtherThread 0x0020
1230 #define ResourceOwnedExclusive 0x0080
1232 #define RESOURCE_HASH_TABLE_SIZE 64
1235 (NTAPI
*PFAST_IO_CHECK_IF_POSSIBLE
)(
1236 IN
struct _FILE_OBJECT
*FileObject
,
1237 IN PLARGE_INTEGER FileOffset
,
1241 IN BOOLEAN CheckForReadOperation
,
1242 OUT PIO_STATUS_BLOCK IoStatus
,
1243 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1246 (NTAPI
*PFAST_IO_READ
)(
1247 IN
struct _FILE_OBJECT
*FileObject
,
1248 IN PLARGE_INTEGER FileOffset
,
1253 OUT PIO_STATUS_BLOCK IoStatus
,
1254 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1257 (NTAPI
*PFAST_IO_WRITE
)(
1258 IN
struct _FILE_OBJECT
*FileObject
,
1259 IN PLARGE_INTEGER FileOffset
,
1264 OUT PIO_STATUS_BLOCK IoStatus
,
1265 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1268 (NTAPI
*PFAST_IO_QUERY_BASIC_INFO
)(
1269 IN
struct _FILE_OBJECT
*FileObject
,
1271 OUT PFILE_BASIC_INFORMATION Buffer
,
1272 OUT PIO_STATUS_BLOCK IoStatus
,
1273 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1276 (NTAPI
*PFAST_IO_QUERY_STANDARD_INFO
)(
1277 IN
struct _FILE_OBJECT
*FileObject
,
1279 OUT PFILE_STANDARD_INFORMATION Buffer
,
1280 OUT PIO_STATUS_BLOCK IoStatus
,
1281 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1284 (NTAPI
*PFAST_IO_LOCK
)(
1285 IN
struct _FILE_OBJECT
*FileObject
,
1286 IN PLARGE_INTEGER FileOffset
,
1287 IN PLARGE_INTEGER Length
,
1288 PEPROCESS ProcessId
,
1290 BOOLEAN FailImmediately
,
1291 BOOLEAN ExclusiveLock
,
1292 OUT PIO_STATUS_BLOCK IoStatus
,
1293 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1296 (NTAPI
*PFAST_IO_UNLOCK_SINGLE
)(
1297 IN
struct _FILE_OBJECT
*FileObject
,
1298 IN PLARGE_INTEGER FileOffset
,
1299 IN PLARGE_INTEGER Length
,
1300 PEPROCESS ProcessId
,
1302 OUT PIO_STATUS_BLOCK IoStatus
,
1303 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1306 (NTAPI
*PFAST_IO_UNLOCK_ALL
)(
1307 IN
struct _FILE_OBJECT
*FileObject
,
1308 PEPROCESS ProcessId
,
1309 OUT PIO_STATUS_BLOCK IoStatus
,
1310 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1313 (NTAPI
*PFAST_IO_UNLOCK_ALL_BY_KEY
)(
1314 IN
struct _FILE_OBJECT
*FileObject
,
1317 OUT PIO_STATUS_BLOCK IoStatus
,
1318 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1321 (NTAPI
*PFAST_IO_DEVICE_CONTROL
)(
1322 IN
struct _FILE_OBJECT
*FileObject
,
1324 IN PVOID InputBuffer OPTIONAL
,
1325 IN ULONG InputBufferLength
,
1326 OUT PVOID OutputBuffer OPTIONAL
,
1327 IN ULONG OutputBufferLength
,
1328 IN ULONG IoControlCode
,
1329 OUT PIO_STATUS_BLOCK IoStatus
,
1330 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1333 (NTAPI
*PFAST_IO_ACQUIRE_FILE
)(
1334 IN
struct _FILE_OBJECT
*FileObject
);
1337 (NTAPI
*PFAST_IO_RELEASE_FILE
)(
1338 IN
struct _FILE_OBJECT
*FileObject
);
1341 (NTAPI
*PFAST_IO_DETACH_DEVICE
)(
1342 IN
struct _DEVICE_OBJECT
*SourceDevice
,
1343 IN
struct _DEVICE_OBJECT
*TargetDevice
);
1346 (NTAPI
*PFAST_IO_QUERY_NETWORK_OPEN_INFO
)(
1347 IN
struct _FILE_OBJECT
*FileObject
,
1349 OUT
struct _FILE_NETWORK_OPEN_INFORMATION
*Buffer
,
1350 OUT
struct _IO_STATUS_BLOCK
*IoStatus
,
1351 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1354 (NTAPI
*PFAST_IO_ACQUIRE_FOR_MOD_WRITE
)(
1355 IN
struct _FILE_OBJECT
*FileObject
,
1356 IN PLARGE_INTEGER EndingOffset
,
1357 OUT
struct _ERESOURCE
**ResourceToRelease
,
1358 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1361 (NTAPI
*PFAST_IO_MDL_READ
)(
1362 IN
struct _FILE_OBJECT
*FileObject
,
1363 IN PLARGE_INTEGER FileOffset
,
1367 OUT PIO_STATUS_BLOCK IoStatus
,
1368 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1371 (NTAPI
*PFAST_IO_MDL_READ_COMPLETE
)(
1372 IN
struct _FILE_OBJECT
*FileObject
,
1374 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1377 (NTAPI
*PFAST_IO_PREPARE_MDL_WRITE
)(
1378 IN
struct _FILE_OBJECT
*FileObject
,
1379 IN PLARGE_INTEGER FileOffset
,
1383 OUT PIO_STATUS_BLOCK IoStatus
,
1384 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1387 (NTAPI
*PFAST_IO_MDL_WRITE_COMPLETE
)(
1388 IN
struct _FILE_OBJECT
*FileObject
,
1389 IN PLARGE_INTEGER FileOffset
,
1391 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1394 (NTAPI
*PFAST_IO_READ_COMPRESSED
)(
1395 IN
struct _FILE_OBJECT
*FileObject
,
1396 IN PLARGE_INTEGER FileOffset
,
1401 OUT PIO_STATUS_BLOCK IoStatus
,
1402 OUT
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
1403 IN ULONG CompressedDataInfoLength
,
1404 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1407 (NTAPI
*PFAST_IO_WRITE_COMPRESSED
)(
1408 IN
struct _FILE_OBJECT
*FileObject
,
1409 IN PLARGE_INTEGER FileOffset
,
1414 OUT PIO_STATUS_BLOCK IoStatus
,
1415 IN
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
1416 IN ULONG CompressedDataInfoLength
,
1417 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1420 (NTAPI
*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED
)(
1421 IN
struct _FILE_OBJECT
*FileObject
,
1423 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1426 (NTAPI
*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)(
1427 IN
struct _FILE_OBJECT
*FileObject
,
1428 IN PLARGE_INTEGER FileOffset
,
1430 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1433 (NTAPI
*PFAST_IO_QUERY_OPEN
)(
1434 IN
struct _IRP
*Irp
,
1435 OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
,
1436 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1439 (NTAPI
*PFAST_IO_RELEASE_FOR_MOD_WRITE
)(
1440 IN
struct _FILE_OBJECT
*FileObject
,
1441 IN
struct _ERESOURCE
*ResourceToRelease
,
1442 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1445 (NTAPI
*PFAST_IO_ACQUIRE_FOR_CCFLUSH
)(
1446 IN
struct _FILE_OBJECT
*FileObject
,
1447 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1450 (NTAPI
*PFAST_IO_RELEASE_FOR_CCFLUSH
) (
1451 IN
struct _FILE_OBJECT
*FileObject
,
1452 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1454 typedef struct _FAST_IO_DISPATCH
{
1455 ULONG SizeOfFastIoDispatch
;
1456 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible
;
1457 PFAST_IO_READ FastIoRead
;
1458 PFAST_IO_WRITE FastIoWrite
;
1459 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo
;
1460 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo
;
1461 PFAST_IO_LOCK FastIoLock
;
1462 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle
;
1463 PFAST_IO_UNLOCK_ALL FastIoUnlockAll
;
1464 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey
;
1465 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl
;
1466 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection
;
1467 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection
;
1468 PFAST_IO_DETACH_DEVICE FastIoDetachDevice
;
1469 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo
;
1470 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite
;
1471 PFAST_IO_MDL_READ MdlRead
;
1472 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete
;
1473 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite
;
1474 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete
;
1475 PFAST_IO_READ_COMPRESSED FastIoReadCompressed
;
1476 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed
;
1477 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed
;
1478 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed
;
1479 PFAST_IO_QUERY_OPEN FastIoQueryOpen
;
1480 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite
;
1481 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush
;
1482 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush
;
1483 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
1485 typedef struct _SECTION_OBJECT_POINTERS
{
1486 PVOID DataSectionObject
;
1487 PVOID SharedCacheMap
;
1488 PVOID ImageSectionObject
;
1489 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
1491 typedef struct _IO_COMPLETION_CONTEXT
{
1494 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
1496 /* FILE_OBJECT.Flags */
1497 #define FO_FILE_OPEN 0x00000001
1498 #define FO_SYNCHRONOUS_IO 0x00000002
1499 #define FO_ALERTABLE_IO 0x00000004
1500 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
1501 #define FO_WRITE_THROUGH 0x00000010
1502 #define FO_SEQUENTIAL_ONLY 0x00000020
1503 #define FO_CACHE_SUPPORTED 0x00000040
1504 #define FO_NAMED_PIPE 0x00000080
1505 #define FO_STREAM_FILE 0x00000100
1506 #define FO_MAILSLOT 0x00000200
1507 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
1508 #define FO_QUEUE_IRP_TO_THREAD 0x00000400
1509 #define FO_DIRECT_DEVICE_OPEN 0x00000800
1510 #define FO_FILE_MODIFIED 0x00001000
1511 #define FO_FILE_SIZE_CHANGED 0x00002000
1512 #define FO_CLEANUP_COMPLETE 0x00004000
1513 #define FO_TEMPORARY_FILE 0x00008000
1514 #define FO_DELETE_ON_CLOSE 0x00010000
1515 #define FO_OPENED_CASE_SENSITIVE 0x00020000
1516 #define FO_HANDLE_CREATED 0x00040000
1517 #define FO_FILE_FAST_IO_READ 0x00080000
1518 #define FO_RANDOM_ACCESS 0x00100000
1519 #define FO_FILE_OPEN_CANCELLED 0x00200000
1520 #define FO_VOLUME_OPEN 0x00400000
1521 #define FO_REMOTE_ORIGIN 0x01000000
1522 #define FO_DISALLOW_EXCLUSIVE 0x02000000
1523 #define FO_SKIP_COMPLETION_PORT 0x02000000
1524 #define FO_SKIP_SET_EVENT 0x04000000
1525 #define FO_SKIP_SET_FAST_IO 0x08000000
1528 #define VPB_MOUNTED 0x0001
1529 #define VPB_LOCKED 0x0002
1530 #define VPB_PERSISTENT 0x0004
1531 #define VPB_REMOVE_PENDING 0x0008
1532 #define VPB_RAW_MOUNT 0x0010
1533 #define VPB_DIRECT_WRITES_ALLOWED 0x0020
1537 #define SL_FORCE_ACCESS_CHECK 0x01
1538 #define SL_OPEN_PAGING_FILE 0x02
1539 #define SL_OPEN_TARGET_DIRECTORY 0x04
1540 #define SL_CASE_SENSITIVE 0x80
1542 #define SL_KEY_SPECIFIED 0x01
1543 #define SL_OVERRIDE_VERIFY_VOLUME 0x02
1544 #define SL_WRITE_THROUGH 0x04
1545 #define SL_FT_SEQUENTIAL_WRITE 0x08
1547 #define SL_FAIL_IMMEDIATELY 0x01
1548 #define SL_EXCLUSIVE_LOCK 0x02
1550 #define SL_RESTART_SCAN 0x01
1551 #define SL_RETURN_SINGLE_ENTRY 0x02
1552 #define SL_INDEX_SPECIFIED 0x04
1554 #define SL_WATCH_TREE 0x01
1556 #define SL_ALLOW_RAW_MOUNT 0x01
1558 #define CTL_CODE(DeviceType, Function, Method, Access) \
1559 (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
1561 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
1563 #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
1565 #define IRP_NOCACHE 0x00000001
1566 #define IRP_PAGING_IO 0x00000002
1567 #define IRP_MOUNT_COMPLETION 0x00000002
1568 #define IRP_SYNCHRONOUS_API 0x00000004
1569 #define IRP_ASSOCIATED_IRP 0x00000008
1570 #define IRP_BUFFERED_IO 0x00000010
1571 #define IRP_DEALLOCATE_BUFFER 0x00000020
1572 #define IRP_INPUT_OPERATION 0x00000040
1573 #define IRP_SYNCHRONOUS_PAGING_IO 0x00000040
1574 #define IRP_CREATE_OPERATION 0x00000080
1575 #define IRP_READ_OPERATION 0x00000100
1576 #define IRP_WRITE_OPERATION 0x00000200
1577 #define IRP_CLOSE_OPERATION 0x00000400
1578 #define IRP_DEFER_IO_COMPLETION 0x00000800
1579 #define IRP_OB_QUERY_NAME 0x00001000
1580 #define IRP_HOLD_DEVICE_QUEUE 0x00002000
1582 #define IRP_QUOTA_CHARGED 0x01
1583 #define IRP_ALLOCATED_MUST_SUCCEED 0x02
1584 #define IRP_ALLOCATED_FIXED_SIZE 0x04
1585 #define IRP_LOOKASIDE_ALLOCATION 0x08
1588 ** IRP function codes
1591 #define IRP_MJ_CREATE 0x00
1592 #define IRP_MJ_CREATE_NAMED_PIPE 0x01
1593 #define IRP_MJ_CLOSE 0x02
1594 #define IRP_MJ_READ 0x03
1595 #define IRP_MJ_WRITE 0x04
1596 #define IRP_MJ_QUERY_INFORMATION 0x05
1597 #define IRP_MJ_SET_INFORMATION 0x06
1598 #define IRP_MJ_QUERY_EA 0x07
1599 #define IRP_MJ_SET_EA 0x08
1600 #define IRP_MJ_FLUSH_BUFFERS 0x09
1601 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
1602 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
1603 #define IRP_MJ_DIRECTORY_CONTROL 0x0c
1604 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
1605 #define IRP_MJ_DEVICE_CONTROL 0x0e
1606 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
1607 #define IRP_MJ_SCSI 0x0f
1608 #define IRP_MJ_SHUTDOWN 0x10
1609 #define IRP_MJ_LOCK_CONTROL 0x11
1610 #define IRP_MJ_CLEANUP 0x12
1611 #define IRP_MJ_CREATE_MAILSLOT 0x13
1612 #define IRP_MJ_QUERY_SECURITY 0x14
1613 #define IRP_MJ_SET_SECURITY 0x15
1614 #define IRP_MJ_POWER 0x16
1615 #define IRP_MJ_SYSTEM_CONTROL 0x17
1616 #define IRP_MJ_DEVICE_CHANGE 0x18
1617 #define IRP_MJ_QUERY_QUOTA 0x19
1618 #define IRP_MJ_SET_QUOTA 0x1a
1619 #define IRP_MJ_PNP 0x1b
1620 #define IRP_MJ_PNP_POWER 0x1b
1621 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
1623 #define IRP_MN_SCSI_CLASS 0x01
1625 #define IRP_MN_START_DEVICE 0x00
1626 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
1627 #define IRP_MN_REMOVE_DEVICE 0x02
1628 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
1629 #define IRP_MN_STOP_DEVICE 0x04
1630 #define IRP_MN_QUERY_STOP_DEVICE 0x05
1631 #define IRP_MN_CANCEL_STOP_DEVICE 0x06
1633 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
1634 #define IRP_MN_QUERY_INTERFACE 0x08
1635 #define IRP_MN_QUERY_CAPABILITIES 0x09
1636 #define IRP_MN_QUERY_RESOURCES 0x0A
1637 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
1638 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
1639 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
1641 #define IRP_MN_READ_CONFIG 0x0F
1642 #define IRP_MN_WRITE_CONFIG 0x10
1643 #define IRP_MN_EJECT 0x11
1644 #define IRP_MN_SET_LOCK 0x12
1645 #define IRP_MN_QUERY_ID 0x13
1646 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
1647 #define IRP_MN_QUERY_BUS_INFORMATION 0x15
1648 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
1649 #define IRP_MN_SURPRISE_REMOVAL 0x17
1651 #define IRP_MN_WAIT_WAKE 0x00
1652 #define IRP_MN_POWER_SEQUENCE 0x01
1653 #define IRP_MN_SET_POWER 0x02
1654 #define IRP_MN_QUERY_POWER 0x03
1656 #define IRP_MN_QUERY_ALL_DATA 0x00
1657 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
1658 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
1659 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
1660 #define IRP_MN_ENABLE_EVENTS 0x04
1661 #define IRP_MN_DISABLE_EVENTS 0x05
1662 #define IRP_MN_ENABLE_COLLECTION 0x06
1663 #define IRP_MN_DISABLE_COLLECTION 0x07
1664 #define IRP_MN_REGINFO 0x08
1665 #define IRP_MN_EXECUTE_METHOD 0x09
1667 #define IRP_MN_REGINFO_EX 0x0b
1669 typedef struct _FILE_OBJECT
{
1672 PDEVICE_OBJECT DeviceObject
;
1676 PSECTION_OBJECT_POINTERS SectionObjectPointer
;
1677 PVOID PrivateCacheMap
;
1678 NTSTATUS FinalStatus
;
1679 struct _FILE_OBJECT
*RelatedFileObject
;
1680 BOOLEAN LockOperation
;
1681 BOOLEAN DeletePending
;
1683 BOOLEAN WriteAccess
;
1684 BOOLEAN DeleteAccess
;
1686 BOOLEAN SharedWrite
;
1687 BOOLEAN SharedDelete
;
1689 UNICODE_STRING FileName
;
1690 LARGE_INTEGER CurrentByteOffset
;
1691 volatile ULONG Waiters
;
1692 volatile ULONG Busy
;
1696 volatile PIO_COMPLETION_CONTEXT CompletionContext
;
1697 KSPIN_LOCK IrpListLock
;
1699 volatile PVOID FileObjectExtension
;
1700 } FILE_OBJECT
, *PFILE_OBJECT
;
1702 typedef struct _IO_ERROR_LOG_PACKET
{
1703 UCHAR MajorFunctionCode
;
1705 USHORT DumpDataSize
;
1706 USHORT NumberOfStrings
;
1707 USHORT StringOffset
;
1708 USHORT EventCategory
;
1710 ULONG UniqueErrorValue
;
1711 NTSTATUS FinalStatus
;
1712 ULONG SequenceNumber
;
1713 ULONG IoControlCode
;
1714 LARGE_INTEGER DeviceOffset
;
1716 } IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
1718 typedef struct _IO_ERROR_LOG_MESSAGE
{
1721 USHORT DriverNameLength
;
1722 LARGE_INTEGER TimeStamp
;
1723 ULONG DriverNameOffset
;
1724 IO_ERROR_LOG_PACKET EntryData
;
1725 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
1727 #define ERROR_LOG_LIMIT_SIZE 240
1728 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
1729 sizeof(IO_ERROR_LOG_PACKET) + \
1730 (sizeof(WCHAR) * 40))
1731 #define ERROR_LOG_MESSAGE_LIMIT_SIZE \
1732 (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1733 #define IO_ERROR_LOG_MESSAGE_LENGTH \
1734 ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
1735 ERROR_LOG_MESSAGE_LIMIT_SIZE : \
1736 PORT_MAXIMUM_MESSAGE_LENGTH)
1737 #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
1738 IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1741 #define PORT_MAXIMUM_MESSAGE_LENGTH 512
1743 #define PORT_MAXIMUM_MESSAGE_LENGTH 256
1746 typedef enum _DMA_WIDTH
{
1751 } DMA_WIDTH
, *PDMA_WIDTH
;
1753 typedef enum _DMA_SPEED
{
1760 } DMA_SPEED
, *PDMA_SPEED
;
1762 /* DEVICE_DESCRIPTION.Version */
1764 #define DEVICE_DESCRIPTION_VERSION 0x0000
1765 #define DEVICE_DESCRIPTION_VERSION1 0x0001
1766 #define DEVICE_DESCRIPTION_VERSION2 0x0002
1768 typedef struct _DEVICE_DESCRIPTION
{
1771 BOOLEAN ScatterGather
;
1773 BOOLEAN AutoInitialize
;
1774 BOOLEAN Dma32BitAddresses
;
1775 BOOLEAN IgnoreCount
;
1777 BOOLEAN Dma64BitAddresses
;
1780 INTERFACE_TYPE InterfaceType
;
1783 ULONG MaximumLength
;
1785 } DEVICE_DESCRIPTION
, *PDEVICE_DESCRIPTION
;
1787 typedef enum _DEVICE_RELATION_TYPE
{
1792 TargetDeviceRelation
,
1795 } DEVICE_RELATION_TYPE
, *PDEVICE_RELATION_TYPE
;
1797 typedef struct _DEVICE_RELATIONS
{
1799 PDEVICE_OBJECT Objects
[1];
1800 } DEVICE_RELATIONS
, *PDEVICE_RELATIONS
;
1802 typedef struct _DEVOBJ_EXTENSION
{
1805 PDEVICE_OBJECT DeviceObject
;
1806 } DEVOBJ_EXTENSION
, *PDEVOBJ_EXTENSION
;
1808 typedef struct _SCATTER_GATHER_ELEMENT
{
1809 PHYSICAL_ADDRESS Address
;
1812 } SCATTER_GATHER_ELEMENT
, *PSCATTER_GATHER_ELEMENT
;
1814 #if defined(_MSC_EXTENSIONS)
1816 #if _MSC_VER >= 1200
1817 #pragma warning(push)
1819 #pragma warning(disable:4200)
1820 typedef struct _SCATTER_GATHER_LIST
{
1821 ULONG NumberOfElements
;
1823 SCATTER_GATHER_ELEMENT Elements
[1];
1824 } SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
1826 #if _MSC_VER >= 1200
1827 #pragma warning(pop)
1829 #pragma warning(default:4200)
1834 struct _SCATTER_GATHER_LIST
;
1835 typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
1840 (NTAPI DRIVER_ADD_DEVICE
)(
1841 IN
struct _DRIVER_OBJECT
*DriverObject
,
1842 IN
struct _DEVICE_OBJECT
*PhysicalDeviceObject
);
1843 typedef DRIVER_ADD_DEVICE
*PDRIVER_ADD_DEVICE
;
1845 typedef struct _DRIVER_EXTENSION
{
1846 struct _DRIVER_OBJECT
*DriverObject
;
1847 PDRIVER_ADD_DEVICE AddDevice
;
1849 UNICODE_STRING ServiceKeyName
;
1850 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
1852 #define DRVO_UNLOAD_INVOKED 0x00000001
1853 #define DRVO_LEGACY_DRIVER 0x00000002
1854 #define DRVO_BUILTIN_DRIVER 0x00000004
1857 (NTAPI DRIVER_INITIALIZE
)(
1858 IN
struct _DRIVER_OBJECT
*DriverObject
,
1859 IN PUNICODE_STRING RegistryPath
);
1860 typedef DRIVER_INITIALIZE
*PDRIVER_INITIALIZE
;
1863 (NTAPI DRIVER_STARTIO
)(
1864 IN
struct _DEVICE_OBJECT
*DeviceObject
,
1865 IN
struct _IRP
*Irp
);
1866 typedef DRIVER_STARTIO
*PDRIVER_STARTIO
;
1869 (NTAPI DRIVER_UNLOAD
)(
1870 IN
struct _DRIVER_OBJECT
*DriverObject
);
1871 typedef DRIVER_UNLOAD
*PDRIVER_UNLOAD
;
1874 (NTAPI DRIVER_DISPATCH
)(
1875 IN
struct _DEVICE_OBJECT
*DeviceObject
,
1876 IN
struct _IRP
*Irp
);
1877 typedef DRIVER_DISPATCH
*PDRIVER_DISPATCH
;
1879 typedef struct _DRIVER_OBJECT
{
1882 PDEVICE_OBJECT DeviceObject
;
1886 PVOID DriverSection
;
1887 PDRIVER_EXTENSION DriverExtension
;
1888 UNICODE_STRING DriverName
;
1889 PUNICODE_STRING HardwareDatabase
;
1890 struct _FAST_IO_DISPATCH
*FastIoDispatch
;
1891 PDRIVER_INITIALIZE DriverInit
;
1892 PDRIVER_STARTIO DriverStartIo
;
1893 PDRIVER_UNLOAD DriverUnload
;
1894 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
1895 } DRIVER_OBJECT
, *PDRIVER_OBJECT
;
1897 typedef struct _DMA_ADAPTER
{
1900 struct _DMA_OPERATIONS
* DmaOperations
;
1901 } DMA_ADAPTER
, *PDMA_ADAPTER
;
1904 (NTAPI
*PPUT_DMA_ADAPTER
)(
1905 IN PDMA_ADAPTER DmaAdapter
);
1908 (NTAPI
*PALLOCATE_COMMON_BUFFER
)(
1909 IN PDMA_ADAPTER DmaAdapter
,
1911 OUT PPHYSICAL_ADDRESS LogicalAddress
,
1912 IN BOOLEAN CacheEnabled
);
1915 (NTAPI
*PFREE_COMMON_BUFFER
)(
1916 IN PDMA_ADAPTER DmaAdapter
,
1918 IN PHYSICAL_ADDRESS LogicalAddress
,
1919 IN PVOID VirtualAddress
,
1920 IN BOOLEAN CacheEnabled
);
1923 (NTAPI
*PALLOCATE_ADAPTER_CHANNEL
)(
1924 IN PDMA_ADAPTER DmaAdapter
,
1925 IN PDEVICE_OBJECT DeviceObject
,
1926 IN ULONG NumberOfMapRegisters
,
1927 IN PDRIVER_CONTROL ExecutionRoutine
,
1931 (NTAPI
*PFLUSH_ADAPTER_BUFFERS
)(
1932 IN PDMA_ADAPTER DmaAdapter
,
1934 IN PVOID MapRegisterBase
,
1937 IN BOOLEAN WriteToDevice
);
1940 (NTAPI
*PFREE_ADAPTER_CHANNEL
)(
1941 IN PDMA_ADAPTER DmaAdapter
);
1944 (NTAPI
*PFREE_MAP_REGISTERS
)(
1945 IN PDMA_ADAPTER DmaAdapter
,
1946 PVOID MapRegisterBase
,
1947 ULONG NumberOfMapRegisters
);
1949 typedef PHYSICAL_ADDRESS
1950 (NTAPI
*PMAP_TRANSFER
)(
1951 IN PDMA_ADAPTER DmaAdapter
,
1953 IN PVOID MapRegisterBase
,
1955 IN OUT PULONG Length
,
1956 IN BOOLEAN WriteToDevice
);
1959 (NTAPI
*PGET_DMA_ALIGNMENT
)(
1960 IN PDMA_ADAPTER DmaAdapter
);
1963 (NTAPI
*PREAD_DMA_COUNTER
)(
1964 IN PDMA_ADAPTER DmaAdapter
);
1967 (NTAPI
*PDRIVER_LIST_CONTROL
)(
1968 IN
struct _DEVICE_OBJECT
*DeviceObject
,
1969 IN
struct _IRP
*Irp
,
1970 IN
struct _SCATTER_GATHER_LIST
*ScatterGather
,
1974 (NTAPI
*PGET_SCATTER_GATHER_LIST
)(
1975 IN PDMA_ADAPTER DmaAdapter
,
1976 IN PDEVICE_OBJECT DeviceObject
,
1980 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
1982 IN BOOLEAN WriteToDevice
);
1985 (NTAPI
*PPUT_SCATTER_GATHER_LIST
)(
1986 IN PDMA_ADAPTER DmaAdapter
,
1987 IN PSCATTER_GATHER_LIST ScatterGather
,
1988 IN BOOLEAN WriteToDevice
);
1991 (NTAPI
*PCALCULATE_SCATTER_GATHER_LIST_SIZE
)(
1992 IN PDMA_ADAPTER DmaAdapter
,
1993 IN PMDL Mdl OPTIONAL
,
1996 OUT PULONG ScatterGatherListSize
,
1997 OUT PULONG pNumberOfMapRegisters OPTIONAL
);
2000 (NTAPI
*PBUILD_SCATTER_GATHER_LIST
)(
2001 IN PDMA_ADAPTER DmaAdapter
,
2002 IN PDEVICE_OBJECT DeviceObject
,
2006 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
2008 IN BOOLEAN WriteToDevice
,
2009 IN PVOID ScatterGatherBuffer
,
2010 IN ULONG ScatterGatherLength
);
2013 (NTAPI
*PBUILD_MDL_FROM_SCATTER_GATHER_LIST
)(
2014 IN PDMA_ADAPTER DmaAdapter
,
2015 IN PSCATTER_GATHER_LIST ScatterGather
,
2016 IN PMDL OriginalMdl
,
2017 OUT PMDL
*TargetMdl
);
2019 typedef struct _DMA_OPERATIONS
{
2021 PPUT_DMA_ADAPTER PutDmaAdapter
;
2022 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer
;
2023 PFREE_COMMON_BUFFER FreeCommonBuffer
;
2024 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
2025 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
2026 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
2027 PFREE_MAP_REGISTERS FreeMapRegisters
;
2028 PMAP_TRANSFER MapTransfer
;
2029 PGET_DMA_ALIGNMENT GetDmaAlignment
;
2030 PREAD_DMA_COUNTER ReadDmaCounter
;
2031 PGET_SCATTER_GATHER_LIST GetScatterGatherList
;
2032 PPUT_SCATTER_GATHER_LIST PutScatterGatherList
;
2033 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList
;
2034 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList
;
2035 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList
;
2036 } DMA_OPERATIONS
, *PDMA_OPERATIONS
;
2038 typedef struct _IO_RESOURCE_DESCRIPTOR
{
2041 UCHAR ShareDisposition
;
2049 PHYSICAL_ADDRESS MinimumAddress
;
2050 PHYSICAL_ADDRESS MaximumAddress
;
2055 PHYSICAL_ADDRESS MinimumAddress
;
2056 PHYSICAL_ADDRESS MaximumAddress
;
2059 ULONG MinimumVector
;
2060 ULONG MaximumVector
;
2063 ULONG MinimumChannel
;
2064 ULONG MaximumChannel
;
2069 PHYSICAL_ADDRESS MinimumAddress
;
2070 PHYSICAL_ADDRESS MaximumAddress
;
2087 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
2089 typedef struct _IO_RESOURCE_LIST
{
2093 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
2094 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
2096 typedef struct _IO_RESOURCE_REQUIREMENTS_LIST
{
2098 INTERFACE_TYPE InterfaceType
;
2102 ULONG AlternativeLists
;
2103 IO_RESOURCE_LIST List
[1];
2104 } IO_RESOURCE_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
2107 (NTAPI DRIVER_CANCEL
)(
2108 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2109 IN
struct _IRP
*Irp
);
2110 typedef DRIVER_CANCEL
*PDRIVER_CANCEL
;
2112 typedef struct _IRP
{
2115 struct _MDL
*MdlAddress
;
2118 struct _IRP
*MasterIrp
;
2119 volatile LONG IrpCount
;
2122 LIST_ENTRY ThreadListEntry
;
2123 IO_STATUS_BLOCK IoStatus
;
2124 KPROCESSOR_MODE RequestorMode
;
2125 BOOLEAN PendingReturned
;
2127 CHAR CurrentLocation
;
2130 CCHAR ApcEnvironment
;
2131 UCHAR AllocationFlags
;
2132 PIO_STATUS_BLOCK UserIosb
;
2136 _ANONYMOUS_UNION
union {
2137 PIO_APC_ROUTINE UserApcRoutine
;
2138 PVOID IssuingProcess
;
2140 PVOID UserApcContext
;
2141 } AsynchronousParameters
;
2142 LARGE_INTEGER AllocationSize
;
2144 volatile PDRIVER_CANCEL CancelRoutine
;
2148 _ANONYMOUS_UNION
union {
2149 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
2150 _ANONYMOUS_STRUCT
struct {
2151 PVOID DriverContext
[4];
2155 PCHAR AuxiliaryBuffer
;
2156 _ANONYMOUS_STRUCT
struct {
2157 LIST_ENTRY ListEntry
;
2158 _ANONYMOUS_UNION
union {
2159 struct _IO_STACK_LOCATION
*CurrentStackLocation
;
2163 struct _FILE_OBJECT
*OriginalFileObject
;
2166 PVOID CompletionKey
;
2170 typedef enum _IO_PAGING_PRIORITY
{
2171 IoPagingPriorityInvalid
,
2172 IoPagingPriorityNormal
,
2173 IoPagingPriorityHigh
,
2174 IoPagingPriorityReserved1
,
2175 IoPagingPriorityReserved2
2176 } IO_PAGING_PRIORITY
;
2179 (NTAPI IO_COMPLETION_ROUTINE
)(
2180 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2181 IN
struct _IRP
*Irp
,
2183 typedef IO_COMPLETION_ROUTINE
*PIO_COMPLETION_ROUTINE
;
2186 (NTAPI
*PIO_DPC_ROUTINE
)(
2187 IN
struct _KDPC
*Dpc
,
2188 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2189 IN
struct _IRP
*Irp
,
2193 (NTAPI
*PMM_DLL_INITIALIZE
)(
2194 IN PUNICODE_STRING RegistryPath
);
2197 (NTAPI
*PMM_DLL_UNLOAD
)(
2201 (NTAPI KSERVICE_ROUTINE
)(
2202 IN
struct _KINTERRUPT
*Interrupt
,
2203 IN PVOID ServiceContext
);
2204 typedef KSERVICE_ROUTINE
*PKSERVICE_ROUTINE
;
2207 (NTAPI
*PIO_TIMER_ROUTINE
)(
2208 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2211 typedef struct _IO_SECURITY_CONTEXT
{
2212 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
2213 PACCESS_STATE AccessState
;
2214 ACCESS_MASK DesiredAccess
;
2215 ULONG FullCreateOptions
;
2216 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
2220 typedef struct _IO_CSQ_IRP_CONTEXT
{
2223 struct _IO_CSQ
*Csq
;
2224 } IO_CSQ_IRP_CONTEXT
, *PIO_CSQ_IRP_CONTEXT
;
2227 (NTAPI
*PIO_CSQ_INSERT_IRP
)(
2228 IN
struct _IO_CSQ
*Csq
,
2232 (NTAPI
*PIO_CSQ_REMOVE_IRP
)(
2233 IN
struct _IO_CSQ
*Csq
,
2237 (NTAPI
*PIO_CSQ_PEEK_NEXT_IRP
)(
2238 IN
struct _IO_CSQ
*Csq
,
2240 IN PVOID PeekContext
);
2243 (NTAPI
*PIO_CSQ_ACQUIRE_LOCK
)(
2244 IN
struct _IO_CSQ
*Csq
,
2248 (NTAPI
*PIO_CSQ_RELEASE_LOCK
)(
2249 IN
struct _IO_CSQ
*Csq
,
2253 (NTAPI
*PIO_CSQ_COMPLETE_CANCELED_IRP
)(
2254 IN
struct _IO_CSQ
*Csq
,
2257 typedef struct _IO_CSQ
{
2259 PIO_CSQ_INSERT_IRP CsqInsertIrp
;
2260 PIO_CSQ_REMOVE_IRP CsqRemoveIrp
;
2261 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
;
2262 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
;
2263 PIO_CSQ_RELEASE_LOCK CsqReleaseLock
;
2264 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
;
2265 PVOID ReservePointer
;
2268 typedef enum _BUS_QUERY_ID_TYPE
{
2270 BusQueryHardwareIDs
,
2271 BusQueryCompatibleIDs
,
2273 BusQueryDeviceSerialNumber
2274 } BUS_QUERY_ID_TYPE
, *PBUS_QUERY_ID_TYPE
;
2276 typedef enum _DEVICE_TEXT_TYPE
{
2277 DeviceTextDescription
,
2278 DeviceTextLocationInformation
2279 } DEVICE_TEXT_TYPE
, *PDEVICE_TEXT_TYPE
;
2281 typedef enum _WORK_QUEUE_TYPE
{
2284 HyperCriticalWorkQueue
,
2289 (*PGPE_SERVICE_ROUTINE2
)(
2290 PVOID ObjectContext
,
2291 PVOID ServiceContext
);
2294 (*PGPE_CONNECT_VECTOR2
)(
2297 KINTERRUPT_MODE Mode
,
2299 PGPE_SERVICE_ROUTINE2 ServiceRoutine
,
2300 PVOID ServiceContext
,
2301 PVOID
*ObjectContext
);
2304 (*PGPE_DISCONNECT_VECTOR2
)(
2306 PVOID ObjectContext
);
2309 (*PGPE_ENABLE_EVENT2
)(
2311 PVOID ObjectContext
);
2314 (*PGPE_DISABLE_EVENT2
)(
2316 PVOID ObjectContext
);
2319 (*PGPE_CLEAR_STATUS2
)(
2321 PVOID ObjectContext
);
2324 (*PDEVICE_NOTIFY_CALLBACK2
)(
2325 PVOID NotificationContext
,
2329 (*PREGISTER_FOR_DEVICE_NOTIFICATIONS2
)(
2331 PDEVICE_NOTIFY_CALLBACK2 NotificationHandler
,
2332 PVOID NotificationContext
);
2335 (*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2
)(
2338 typedef struct _ACPI_INTERFACE_STANDARD2
{
2342 PINTERFACE_REFERENCE InterfaceReference
;
2343 PINTERFACE_DEREFERENCE InterfaceDereference
;
2344 PGPE_CONNECT_VECTOR2 GpeConnectVector
;
2345 PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector
;
2346 PGPE_ENABLE_EVENT2 GpeEnableEvent
;
2347 PGPE_DISABLE_EVENT2 GpeDisableEvent
;
2348 PGPE_CLEAR_STATUS2 GpeClearStatus
;
2349 PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications
;
2350 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications
;
2351 } ACPI_INTERFACE_STANDARD2
, *PACPI_INTERFACE_STANDARD2
;
2353 #if !defined(_AMD64_) && !defined(_IA64_)
2354 #include <pshpack4.h>
2356 typedef struct _IO_STACK_LOCATION
{
2357 UCHAR MajorFunction
;
2358 UCHAR MinorFunction
;
2363 PIO_SECURITY_CONTEXT SecurityContext
;
2365 USHORT POINTER_ALIGNMENT FileAttributes
;
2367 ULONG POINTER_ALIGNMENT EaLength
;
2371 ULONG POINTER_ALIGNMENT Key
;
2372 LARGE_INTEGER ByteOffset
;
2376 ULONG POINTER_ALIGNMENT Key
;
2377 LARGE_INTEGER ByteOffset
;
2381 PUNICODE_STRING FileName
;
2382 FILE_INFORMATION_CLASS FileInformationClass
;
2387 ULONG CompletionFilter
;
2391 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
2395 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
2396 PFILE_OBJECT FileObject
;
2397 _ANONYMOUS_UNION
union {
2398 _ANONYMOUS_STRUCT
struct {
2399 BOOLEAN ReplaceIfExists
;
2400 BOOLEAN AdvanceOnly
;
2403 HANDLE DeleteHandle
;
2417 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
2421 FS_INFORMATION_CLASS FsInformationClass
;
2424 ULONG OutputBufferLength
;
2425 ULONG InputBufferLength
;
2426 ULONG FsControlCode
;
2427 PVOID Type3InputBuffer
;
2428 } FileSystemControl
;
2430 PLARGE_INTEGER Length
;
2432 LARGE_INTEGER ByteOffset
;
2435 ULONG OutputBufferLength
;
2436 ULONG POINTER_ALIGNMENT InputBufferLength
;
2437 ULONG POINTER_ALIGNMENT IoControlCode
;
2438 PVOID Type3InputBuffer
;
2441 SECURITY_INFORMATION SecurityInformation
;
2442 ULONG POINTER_ALIGNMENT Length
;
2445 SECURITY_INFORMATION SecurityInformation
;
2446 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2450 PDEVICE_OBJECT DeviceObject
;
2454 PDEVICE_OBJECT DeviceObject
;
2457 struct _SCSI_REQUEST_BLOCK
*Srb
;
2462 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
2463 ULONG SidListLength
;
2469 DEVICE_RELATION_TYPE Type
;
2470 } QueryDeviceRelations
;
2472 CONST GUID
*InterfaceType
;
2475 PINTERFACE Interface
;
2476 PVOID InterfaceSpecificData
;
2479 PDEVICE_CAPABILITIES Capabilities
;
2480 } DeviceCapabilities
;
2482 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
2483 } FilterResourceRequirements
;
2488 ULONG POINTER_ALIGNMENT Length
;
2494 BUS_QUERY_ID_TYPE IdType
;
2497 DEVICE_TEXT_TYPE DeviceTextType
;
2498 LCID POINTER_ALIGNMENT LocaleId
;
2502 BOOLEAN Reserved
[3];
2503 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type
;
2504 } UsageNotification
;
2506 SYSTEM_POWER_STATE PowerState
;
2509 PPOWER_SEQUENCE PowerSequence
;
2512 ULONG SystemContext
;
2513 POWER_STATE_TYPE POINTER_ALIGNMENT Type
;
2514 POWER_STATE POINTER_ALIGNMENT State
;
2515 POWER_ACTION POINTER_ALIGNMENT ShutdownType
;
2518 PCM_RESOURCE_LIST AllocatedResources
;
2519 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
2522 ULONG_PTR ProviderId
;
2534 PDEVICE_OBJECT DeviceObject
;
2535 PFILE_OBJECT FileObject
;
2536 PIO_COMPLETION_ROUTINE CompletionRoutine
;
2538 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
2539 #if !defined(_AMD64_) && !defined(_IA64_)
2540 #include <poppack.h>
2543 /* IO_STACK_LOCATION.Control */
2545 #define SL_PENDING_RETURNED 0x01
2546 #define SL_ERROR_RETURNED 0x02
2547 #define SL_INVOKE_ON_CANCEL 0x20
2548 #define SL_INVOKE_ON_SUCCESS 0x40
2549 #define SL_INVOKE_ON_ERROR 0x80
2551 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
2553 #define PCI_WHICHSPACE_CONFIG 0x0
2554 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
2556 #define METHOD_BUFFERED 0
2557 #define METHOD_IN_DIRECT 1
2558 #define METHOD_OUT_DIRECT 2
2559 #define METHOD_NEITHER 3
2561 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
2562 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
2564 #define FILE_SUPERSEDED 0x00000000
2565 #define FILE_OPENED 0x00000001
2566 #define FILE_CREATED 0x00000002
2567 #define FILE_OVERWRITTEN 0x00000003
2568 #define FILE_EXISTS 0x00000004
2569 #define FILE_DOES_NOT_EXIST 0x00000005
2571 #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
2572 #define FILE_WRITE_TO_END_OF_FILE 0xffffffff
2574 /* also in winnt.h */
2575 #define FILE_LIST_DIRECTORY 0x00000001
2576 #define FILE_READ_DATA 0x00000001
2577 #define FILE_ADD_FILE 0x00000002
2578 #define FILE_WRITE_DATA 0x00000002
2579 #define FILE_ADD_SUBDIRECTORY 0x00000004
2580 #define FILE_APPEND_DATA 0x00000004
2581 #define FILE_CREATE_PIPE_INSTANCE 0x00000004
2582 #define FILE_READ_EA 0x00000008
2583 #define FILE_WRITE_EA 0x00000010
2584 #define FILE_EXECUTE 0x00000020
2585 #define FILE_TRAVERSE 0x00000020
2586 #define FILE_DELETE_CHILD 0x00000040
2587 #define FILE_READ_ATTRIBUTES 0x00000080
2588 #define FILE_WRITE_ATTRIBUTES 0x00000100
2590 #define FILE_SHARE_READ 0x00000001
2591 #define FILE_SHARE_WRITE 0x00000002
2592 #define FILE_SHARE_DELETE 0x00000004
2593 #define FILE_SHARE_VALID_FLAGS 0x00000007
2595 #define FILE_ATTRIBUTE_READONLY 0x00000001
2596 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
2597 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
2598 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
2599 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
2600 #define FILE_ATTRIBUTE_DEVICE 0x00000040
2601 #define FILE_ATTRIBUTE_NORMAL 0x00000080
2602 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
2603 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
2604 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
2605 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
2606 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
2607 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
2608 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
2609 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000
2611 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
2612 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
2614 #define FILE_VALID_OPTION_FLAGS 0x00ffffff
2615 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
2616 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
2617 #define FILE_VALID_SET_FLAGS 0x00000036
2619 #define FILE_SUPERSEDE 0x00000000
2620 #define FILE_OPEN 0x00000001
2621 #define FILE_CREATE 0x00000002
2622 #define FILE_OPEN_IF 0x00000003
2623 #define FILE_OVERWRITE 0x00000004
2624 #define FILE_OVERWRITE_IF 0x00000005
2625 #define FILE_MAXIMUM_DISPOSITION 0x00000005
2627 #define FILE_DIRECTORY_FILE 0x00000001
2628 #define FILE_WRITE_THROUGH 0x00000002
2629 #define FILE_SEQUENTIAL_ONLY 0x00000004
2630 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
2631 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
2632 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
2633 #define FILE_NON_DIRECTORY_FILE 0x00000040
2634 #define FILE_CREATE_TREE_CONNECTION 0x00000080
2635 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
2636 #define FILE_NO_EA_KNOWLEDGE 0x00000200
2637 #define FILE_OPEN_REMOTE_INSTANCE 0x00000400
2638 #define FILE_RANDOM_ACCESS 0x00000800
2639 #define FILE_DELETE_ON_CLOSE 0x00001000
2640 #define FILE_OPEN_BY_FILE_ID 0x00002000
2641 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
2642 #define FILE_NO_COMPRESSION 0x00008000
2643 #if (NTDDI_VERSION >= NTDDI_WIN7)
2644 #define FILE_OPEN_REQUIRING_OPLOCK 0x00010000
2645 #define FILE_DISALLOW_EXCLUSIVE 0x00020000
2646 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
2647 #define FILE_RESERVE_OPFILTER 0x00100000
2648 #define FILE_OPEN_REPARSE_POINT 0x00200000
2649 #define FILE_OPEN_NO_RECALL 0x00400000
2650 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
2652 #define FILE_ANY_ACCESS 0x00000000
2653 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
2654 #define FILE_READ_ACCESS 0x00000001
2655 #define FILE_WRITE_ACCESS 0x00000002
2657 #define FILE_ALL_ACCESS \
2658 (STANDARD_RIGHTS_REQUIRED | \
2662 #define FILE_GENERIC_EXECUTE \
2663 (STANDARD_RIGHTS_EXECUTE | \
2664 FILE_READ_ATTRIBUTES | \
2668 #define FILE_GENERIC_READ \
2669 (STANDARD_RIGHTS_READ | \
2671 FILE_READ_ATTRIBUTES | \
2675 #define FILE_GENERIC_WRITE \
2676 (STANDARD_RIGHTS_WRITE | \
2678 FILE_WRITE_ATTRIBUTES | \
2680 FILE_APPEND_DATA | \