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 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
280 typedef struct _OBJECT_HANDLE_INFORMATION
{
281 ULONG HandleAttributes
;
282 ACCESS_MASK GrantedAccess
;
283 } OBJECT_HANDLE_INFORMATION
, *POBJECT_HANDLE_INFORMATION
;
285 typedef struct _CLIENT_ID
{
286 HANDLE UniqueProcess
;
288 } CLIENT_ID
, *PCLIENT_ID
;
291 (DDKAPI
*PKSTART_ROUTINE
)(
292 IN PVOID StartContext
);
294 typedef struct _VPB
{
298 USHORT VolumeLabelLength
;
299 struct _DEVICE_OBJECT
*DeviceObject
;
300 struct _DEVICE_OBJECT
*RealDevice
;
302 ULONG ReferenceCount
;
303 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
/ sizeof(WCHAR
)];
306 typedef enum _IO_ALLOCATION_ACTION
{
309 DeallocateObjectKeepRegisters
310 } IO_ALLOCATION_ACTION
, *PIO_ALLOCATION_ACTION
;
312 typedef IO_ALLOCATION_ACTION
313 (DDKAPI
*PDRIVER_CONTROL
)(
314 IN
struct _DEVICE_OBJECT
*DeviceObject
,
316 IN PVOID MapRegisterBase
,
319 typedef struct _WAIT_CONTEXT_BLOCK
{
320 KDEVICE_QUEUE_ENTRY WaitQueueEntry
;
321 PDRIVER_CONTROL DeviceRoutine
;
323 ULONG NumberOfMapRegisters
;
326 PKDPC BufferChainingDpc
;
327 } WAIT_CONTEXT_BLOCK
, *PWAIT_CONTEXT_BLOCK
;
329 typedef struct _DEVICE_OBJECT
{
333 struct _DRIVER_OBJECT
*DriverObject
;
334 struct _DEVICE_OBJECT
*NextDevice
;
335 struct _DEVICE_OBJECT
*AttachedDevice
;
336 struct _IRP
*CurrentIrp
;
339 ULONG Characteristics
;
341 PVOID DeviceExtension
;
342 DEVICE_TYPE DeviceType
;
345 LIST_ENTRY ListEntry
;
346 WAIT_CONTEXT_BLOCK Wcb
;
348 ULONG AlignmentRequirement
;
349 KDEVICE_QUEUE DeviceQueue
;
351 ULONG ActiveThreadCount
;
352 PSECURITY_DESCRIPTOR SecurityDescriptor
;
356 struct _DEVOBJ_EXTENSION
*DeviceObjectExtension
;
358 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
360 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK
* PIO_REMOVE_LOCK_TRACKING_BLOCK
;
362 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK
{
365 volatile LONG IoCount
;
367 } IO_REMOVE_LOCK_COMMON_BLOCK
;
369 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK
{
372 LONGLONG MaxLockedTicks
;
376 volatile LONG LowMemoryCount
;
379 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks
;
380 } IO_REMOVE_LOCK_DBG_BLOCK
;
382 typedef struct _IO_REMOVE_LOCK
{
383 IO_REMOVE_LOCK_COMMON_BLOCK Common
;
385 IO_REMOVE_LOCK_DBG_BLOCK Dbg
;
387 } IO_REMOVE_LOCK
, *PIO_REMOVE_LOCK
;
389 typedef struct _IO_WORKITEM
*PIO_WORKITEM
;
392 (DDKAPI IO_WORKITEM_ROUTINE
)(
393 IN PDEVICE_OBJECT DeviceObject
,
395 typedef IO_WORKITEM_ROUTINE
*PIO_WORKITEM_ROUTINE
;
397 typedef struct _SHARE_ACCESS
{
405 } SHARE_ACCESS
, *PSHARE_ACCESS
;
407 /* While MS WDK uses inheritance in C++, we cannot do this with gcc, as
408 inheritance, even from a struct renders the type non-POD. So we use
410 #define PCI_COMMON_HEADER_LAYOUT \
419 UCHAR CacheLineSize; \
420 UCHAR LatencyTimer; \
424 struct _PCI_HEADER_TYPE_0 { \
425 ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \
427 USHORT SubVendorID; \
428 USHORT SubSystemID; \
429 ULONG ROMBaseAddress; \
430 UCHAR CapabilitiesPtr; \
431 UCHAR Reserved1[3]; \
433 UCHAR InterruptLine; \
434 UCHAR InterruptPin; \
435 UCHAR MinimumGrant; \
436 UCHAR MaximumLatency; \
438 struct _PCI_HEADER_TYPE_1 { \
439 ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \
441 UCHAR SecondaryBus; \
442 UCHAR SubordinateBus; \
443 UCHAR SecondaryLatency; \
446 USHORT SecondaryStatus; \
448 USHORT MemoryLimit; \
449 USHORT PrefetchBase; \
450 USHORT PrefetchLimit; \
451 ULONG PrefetchBaseUpper32; \
452 ULONG PrefetchLimitUpper32; \
453 USHORT IOBaseUpper16; \
454 USHORT IOLimitUpper16; \
455 UCHAR CapabilitiesPtr; \
456 UCHAR Reserved1[3]; \
457 ULONG ROMBaseAddress; \
458 UCHAR InterruptLine; \
459 UCHAR InterruptPin; \
460 USHORT BridgeControl; \
462 struct _PCI_HEADER_TYPE_2 { \
463 ULONG SocketRegistersBaseAddress; \
464 UCHAR CapabilitiesPtr; \
466 USHORT SecondaryStatus; \
468 UCHAR SecondaryBus; \
469 UCHAR SubordinateBus; \
470 UCHAR SecondaryLatency; \
474 } Range[PCI_TYPE2_ADDRESSES-1]; \
475 UCHAR InterruptLine; \
476 UCHAR InterruptPin; \
477 USHORT BridgeControl; \
481 typedef struct _PCI_COMMON_HEADER
{
482 PCI_COMMON_HEADER_LAYOUT
483 } PCI_COMMON_HEADER
, *PPCI_COMMON_HEADER
;
486 typedef struct _PCI_COMMON_CONFIG
{
487 PCI_COMMON_HEADER_LAYOUT
488 UCHAR DeviceSpecific
[192];
489 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
491 typedef struct _PCI_COMMON_CONFIG
{
492 PCI_COMMON_HEADER DUMMYSTRUCTNAME
;
493 UCHAR DeviceSpecific
[192];
494 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
497 typedef enum _CREATE_FILE_TYPE
{
499 CreateFileTypeNamedPipe
,
500 CreateFileTypeMailslot
503 #define IO_FORCE_ACCESS_CHECK 0x001
504 #define IO_NO_PARAMETER_CHECKING 0x100
506 #define IO_REPARSE 0x0
507 #define IO_REMOUNT 0x1
509 typedef struct _IO_STATUS_BLOCK
{
510 _ANONYMOUS_UNION
union {
514 ULONG_PTR Information
;
515 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
517 typedef struct _PCI_SLOT_NUMBER
{
520 ULONG DeviceNumber
: 5;
521 ULONG FunctionNumber
: 3;
526 } PCI_SLOT_NUMBER
, *PPCI_SLOT_NUMBER
;
529 (DDKAPI
*PIO_APC_ROUTINE
)(
531 IN PIO_STATUS_BLOCK IoStatusBlock
,
535 (DDKAPI
*WMI_NOTIFICATION_CALLBACK
)(
539 #define EVENT_INCREMENT 1
540 #define IO_NO_INCREMENT 0
541 #define IO_CD_ROM_INCREMENT 1
542 #define IO_DISK_INCREMENT 1
543 #define IO_KEYBOARD_INCREMENT 6
544 #define IO_MAILSLOT_INCREMENT 2
545 #define IO_MOUSE_INCREMENT 6
546 #define IO_NAMED_PIPE_INCREMENT 2
547 #define IO_NETWORK_INCREMENT 2
548 #define IO_PARALLEL_INCREMENT 1
549 #define IO_SERIAL_INCREMENT 2
550 #define IO_SOUND_INCREMENT 8
551 #define IO_VIDEO_INCREMENT 1
552 #define SEMAPHORE_INCREMENT 1
554 #define MM_MAXIMUM_DISK_IO_SIZE (0x10000)
556 typedef struct _BOOTDISK_INFORMATION
{
557 LONGLONG BootPartitionOffset
;
558 LONGLONG SystemPartitionOffset
;
559 ULONG BootDeviceSignature
;
560 ULONG SystemDeviceSignature
;
561 } BOOTDISK_INFORMATION
, *PBOOTDISK_INFORMATION
;
563 typedef struct _BOOTDISK_INFORMATION_EX
{
564 LONGLONG BootPartitionOffset
;
565 LONGLONG SystemPartitionOffset
;
566 ULONG BootDeviceSignature
;
567 ULONG SystemDeviceSignature
;
569 GUID SystemDeviceGuid
;
570 BOOLEAN BootDeviceIsGpt
;
571 BOOLEAN SystemDeviceIsGpt
;
572 } BOOTDISK_INFORMATION_EX
, *PBOOTDISK_INFORMATION_EX
;
574 typedef struct _EISA_MEMORY_TYPE
{
581 UCHAR MoreEntries
: 1;
582 } EISA_MEMORY_TYPE
, *PEISA_MEMORY_TYPE
;
584 #include <pshpack1.h>
585 typedef struct _EISA_MEMORY_CONFIGURATION
{
586 EISA_MEMORY_TYPE ConfigurationByte
;
588 USHORT AddressLowWord
;
589 UCHAR AddressHighByte
;
591 } EISA_MEMORY_CONFIGURATION
, *PEISA_MEMORY_CONFIGURATION
;
594 typedef struct _EISA_IRQ_DESCRIPTOR
{
597 UCHAR LevelTriggered
: 1;
599 UCHAR MoreEntries
: 1;
600 } EISA_IRQ_DESCRIPTOR
, *PEISA_IRQ_DESCRIPTOR
;
602 typedef struct _EISA_IRQ_CONFIGURATION
{
603 EISA_IRQ_DESCRIPTOR ConfigurationByte
;
605 } EISA_IRQ_CONFIGURATION
, *PEISA_IRQ_CONFIGURATION
;
607 typedef struct _DMA_CONFIGURATION_BYTE0
{
611 UCHAR MoreEntries
: 1;
612 } DMA_CONFIGURATION_BYTE0
;
614 typedef struct _DMA_CONFIGURATION_BYTE1
{
616 UCHAR TransferSize
: 2;
619 } DMA_CONFIGURATION_BYTE1
;
621 typedef struct _EISA_DMA_CONFIGURATION
{
622 DMA_CONFIGURATION_BYTE0 ConfigurationByte0
;
623 DMA_CONFIGURATION_BYTE1 ConfigurationByte1
;
624 } EISA_DMA_CONFIGURATION
, *PEISA_DMA_CONFIGURATION
;
626 #include <pshpack1.h>
627 typedef struct _EISA_PORT_DESCRIPTOR
{
628 UCHAR NumberPorts
: 5;
631 UCHAR MoreEntries
: 1;
632 } EISA_PORT_DESCRIPTOR
, *PEISA_PORT_DESCRIPTOR
;
634 typedef struct _EISA_PORT_CONFIGURATION
{
635 EISA_PORT_DESCRIPTOR Configuration
;
637 } EISA_PORT_CONFIGURATION
, *PEISA_PORT_CONFIGURATION
;
640 typedef struct _CM_EISA_FUNCTION_INFORMATION
{
646 UCHAR Selections
[26];
648 UCHAR TypeString
[80];
649 EISA_MEMORY_CONFIGURATION EisaMemory
[9];
650 EISA_IRQ_CONFIGURATION EisaIrq
[7];
651 EISA_DMA_CONFIGURATION EisaDma
[4];
652 EISA_PORT_CONFIGURATION EisaPort
[20];
653 UCHAR InitializationData
[60];
654 } CM_EISA_FUNCTION_INFORMATION
, *PCM_EISA_FUNCTION_INFORMATION
;
656 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
658 #define EISA_FUNCTION_ENABLED 0x80
659 #define EISA_FREE_FORM_DATA 0x40
660 #define EISA_HAS_PORT_INIT_ENTRY 0x20
661 #define EISA_HAS_PORT_RANGE 0x10
662 #define EISA_HAS_DMA_ENTRY 0x08
663 #define EISA_HAS_IRQ_ENTRY 0x04
664 #define EISA_HAS_MEMORY_ENTRY 0x02
665 #define EISA_HAS_TYPE_ENTRY 0x01
666 #define EISA_HAS_INFORMATION \
667 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
668 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
670 typedef struct _CM_EISA_SLOT_INFORMATION
{
676 UCHAR NumberFunctions
;
677 UCHAR FunctionInformation
;
679 } CM_EISA_SLOT_INFORMATION
, *PCM_EISA_SLOT_INFORMATION
;
681 /* CM_EISA_SLOT_INFORMATION.ReturnCode */
683 #define EISA_INVALID_SLOT 0x80
684 #define EISA_INVALID_FUNCTION 0x81
685 #define EISA_INVALID_CONFIGURATION 0x82
686 #define EISA_EMPTY_SLOT 0x83
687 #define EISA_INVALID_BIOS_CALL 0x86
690 ** Plug and Play structures
694 (DDKAPI
*PINTERFACE_REFERENCE
)(
698 (DDKAPI
*PINTERFACE_DEREFERENCE
)(
702 (DDKAPI
*PTRANSLATE_BUS_ADDRESS
)(
704 IN PHYSICAL_ADDRESS BusAddress
,
706 IN OUT PULONG AddressSpace
,
707 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
709 typedef struct _DMA_ADAPTER
*
710 (DDKAPI
*PGET_DMA_ADAPTER
)(
712 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
713 OUT PULONG NumberOfMapRegisters
);
716 (DDKAPI
*PGET_SET_DEVICE_DATA
)(
723 /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
724 #define PCI_USE_SUBSYSTEM_IDS 0x00000001
725 #define PCI_USE_REVISION 0x00000002
726 #define PCI_USE_VENDEV_IDS 0x00000004
727 #define PCI_USE_CLASS_SUBCLASS 0x00000008
728 #define PCI_USE_PROGIF 0x00000010
729 #define PCI_USE_LOCAL_BUS 0x00000020
730 #define PCI_USE_LOCAL_DEVICE 0x00000040
732 typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS
{
743 } PCI_DEVICE_PRESENCE_PARAMETERS
, *PPCI_DEVICE_PRESENCE_PARAMETERS
;
746 (DDKAPI
*PPCI_IS_DEVICE_PRESENT
)(
750 IN USHORT SubVendorID
,
751 IN USHORT SubSystemID
,
755 (DDKAPI
*PPCI_IS_DEVICE_PRESENT_EX
)(
757 IN PPCI_DEVICE_PRESENCE_PARAMETERS Parameters
);
759 typedef struct _BUS_INTERFACE_STANDARD
{
763 PINTERFACE_REFERENCE InterfaceReference
;
764 PINTERFACE_DEREFERENCE InterfaceDereference
;
765 PTRANSLATE_BUS_ADDRESS TranslateBusAddress
;
766 PGET_DMA_ADAPTER GetDmaAdapter
;
767 PGET_SET_DEVICE_DATA SetBusData
;
768 PGET_SET_DEVICE_DATA GetBusData
;
769 } BUS_INTERFACE_STANDARD
, *PBUS_INTERFACE_STANDARD
;
771 typedef struct _PCI_DEVICE_PRESENT_INTERFACE
{
775 PINTERFACE_REFERENCE InterfaceReference
;
776 PINTERFACE_DEREFERENCE InterfaceDereference
;
777 PPCI_IS_DEVICE_PRESENT IsDevicePresent
;
778 PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx
;
779 } PCI_DEVICE_PRESENT_INTERFACE
, *PPCI_DEVICE_PRESENT_INTERFACE
;
781 typedef struct _DEVICE_CAPABILITIES
{
786 ULONG LockSupported
: 1;
787 ULONG EjectSupported
: 1;
789 ULONG DockDevice
: 1;
791 ULONG SilentInstall
: 1;
792 ULONG RawDeviceOK
: 1;
793 ULONG SurpriseRemovalOK
: 1;
794 ULONG WakeFromD0
: 1;
795 ULONG WakeFromD1
: 1;
796 ULONG WakeFromD2
: 1;
797 ULONG WakeFromD3
: 1;
798 ULONG HardwareDisabled
: 1;
799 ULONG NonDynamic
: 1;
800 ULONG WarmEjectSupported
: 1;
801 ULONG NoDisplayInUI
: 1;
805 DEVICE_POWER_STATE DeviceState
[PowerSystemMaximum
];
806 SYSTEM_POWER_STATE SystemWake
;
807 DEVICE_POWER_STATE DeviceWake
;
811 } DEVICE_CAPABILITIES
, *PDEVICE_CAPABILITIES
;
813 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION
{
817 GUID InterfaceClassGuid
;
818 PUNICODE_STRING SymbolicLinkName
;
819 } DEVICE_INTERFACE_CHANGE_NOTIFICATION
, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION
;
821 typedef struct _HWPROFILE_CHANGE_NOTIFICATION
{
825 } HWPROFILE_CHANGE_NOTIFICATION
, *PHWPROFILE_CHANGE_NOTIFICATION
;
829 typedef struct _INTERFACE
{
833 PINTERFACE_REFERENCE InterfaceReference
;
834 PINTERFACE_DEREFERENCE InterfaceDereference
;
835 } INTERFACE
, *PINTERFACE
;
837 typedef struct _PLUGPLAY_NOTIFICATION_HEADER
{
841 } PLUGPLAY_NOTIFICATION_HEADER
, *PPLUGPLAY_NOTIFICATION_HEADER
;
843 typedef ULONG PNP_DEVICE_STATE
, *PPNP_DEVICE_STATE
;
845 /* PNP_DEVICE_STATE */
847 #define PNP_DEVICE_DISABLED 0x00000001
848 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
849 #define PNP_DEVICE_FAILED 0x00000004
850 #define PNP_DEVICE_REMOVED 0x00000008
851 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
852 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
854 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION
{
858 struct _FILE_OBJECT
*FileObject
;
859 LONG NameBufferOffset
;
860 UCHAR CustomDataBuffer
[1];
861 } TARGET_DEVICE_CUSTOM_NOTIFICATION
, *PTARGET_DEVICE_CUSTOM_NOTIFICATION
;
863 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION
{
867 struct _FILE_OBJECT
*FileObject
;
868 } TARGET_DEVICE_REMOVAL_NOTIFICATION
, *PTARGET_DEVICE_REMOVAL_NOTIFICATION
;
870 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE
{
871 DeviceUsageTypeUndefined
,
872 DeviceUsageTypePaging
,
873 DeviceUsageTypeHibernation
,
874 DeviceUsageTypeDumpFile
875 } DEVICE_USAGE_NOTIFICATION_TYPE
;
877 typedef struct _POWER_SEQUENCE
{
881 } POWER_SEQUENCE
, *PPOWER_SEQUENCE
;
884 DevicePropertyDeviceDescription
= 0x0,
885 DevicePropertyHardwareID
= 0x1,
886 DevicePropertyCompatibleIDs
= 0x2,
887 DevicePropertyBootConfiguration
= 0x3,
888 DevicePropertyBootConfigurationTranslated
= 0x4,
889 DevicePropertyClassName
= 0x5,
890 DevicePropertyClassGuid
= 0x6,
891 DevicePropertyDriverKeyName
= 0x7,
892 DevicePropertyManufacturer
= 0x8,
893 DevicePropertyFriendlyName
= 0x9,
894 DevicePropertyLocationInformation
= 0xa,
895 DevicePropertyPhysicalDeviceObjectName
= 0xb,
896 DevicePropertyBusTypeGuid
= 0xc,
897 DevicePropertyLegacyBusType
= 0xd,
898 DevicePropertyBusNumber
= 0xe,
899 DevicePropertyEnumeratorName
= 0xf,
900 DevicePropertyAddress
= 0x10,
901 DevicePropertyUINumber
= 0x11,
902 DevicePropertyInstallState
= 0x12,
903 DevicePropertyRemovalPolicy
= 0x13,
904 DevicePropertyResourceRequirements
= 0x14,
905 DevicePropertyAllocatedResources
= 0x15,
906 DevicePropertyContainerID
= 0x16
907 } DEVICE_REGISTRY_PROPERTY
;
909 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY
{
910 EventCategoryReserved
,
911 EventCategoryHardwareProfileChange
,
912 EventCategoryDeviceInterfaceChange
,
913 EventCategoryTargetDeviceChange
914 } IO_NOTIFICATION_EVENT_CATEGORY
;
916 typedef enum _IO_PRIORITY_HINT
{
917 IoPriorityVeryLow
= 0,
925 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
928 (DDKAPI
*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE
)(
929 IN PVOID NotificationStructure
,
933 (DDKAPI
*PDEVICE_CHANGE_COMPLETE_CALLBACK
)(
936 typedef enum _FILE_INFORMATION_CLASS
{
937 FileDirectoryInformation
= 1,
938 FileFullDirectoryInformation
,
939 FileBothDirectoryInformation
,
940 FileBasicInformation
,
941 FileStandardInformation
,
942 FileInternalInformation
,
944 FileAccessInformation
,
946 FileRenameInformation
,
948 FileNamesInformation
,
949 FileDispositionInformation
,
950 FilePositionInformation
,
951 FileFullEaInformation
,
953 FileAlignmentInformation
,
955 FileAllocationInformation
,
956 FileEndOfFileInformation
,
957 FileAlternateNameInformation
,
958 FileStreamInformation
,
960 FilePipeLocalInformation
,
961 FilePipeRemoteInformation
,
962 FileMailslotQueryInformation
,
963 FileMailslotSetInformation
,
964 FileCompressionInformation
,
965 FileObjectIdInformation
,
966 FileCompletionInformation
,
967 FileMoveClusterInformation
,
968 FileQuotaInformation
,
969 FileReparsePointInformation
,
970 FileNetworkOpenInformation
,
971 FileAttributeTagInformation
,
972 FileTrackingInformation
,
973 FileIdBothDirectoryInformation
,
974 FileIdFullDirectoryInformation
,
975 FileValidDataLengthInformation
,
976 FileShortNameInformation
,
977 FileIoCompletionNotificationInformation
,
978 FileIoStatusBlockRangeInformation
,
979 FileIoPriorityHintInformation
,
980 FileSfioReserveInformation
,
981 FileSfioVolumeInformation
,
982 FileHardLinkInformation
,
983 FileProcessIdsUsingFileInformation
,
984 FileNormalizedNameInformation
,
985 FileNetworkPhysicalNameInformation
,
986 FileIdGlobalTxDirectoryInformation
,
987 FileIsRemoteDeviceInformation
,
988 FileAttributeCacheInformation
,
989 FileNumaNodeInformation
,
990 FileStandardLinkInformation
,
991 FileRemoteProtocolInformation
,
992 FileMaximumInformation
993 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
995 typedef struct _FILE_POSITION_INFORMATION
{
996 LARGE_INTEGER CurrentByteOffset
;
997 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
999 #include <pshpack8.h>
1000 typedef struct _FILE_BASIC_INFORMATION
{
1001 LARGE_INTEGER CreationTime
;
1002 LARGE_INTEGER LastAccessTime
;
1003 LARGE_INTEGER LastWriteTime
;
1004 LARGE_INTEGER ChangeTime
;
1005 ULONG FileAttributes
;
1006 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
1007 #include <poppack.h>
1009 typedef struct _FILE_STANDARD_INFORMATION
{
1010 LARGE_INTEGER AllocationSize
;
1011 LARGE_INTEGER EndOfFile
;
1012 ULONG NumberOfLinks
;
1013 BOOLEAN DeletePending
;
1015 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
1017 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
1018 LARGE_INTEGER CreationTime
;
1019 LARGE_INTEGER LastAccessTime
;
1020 LARGE_INTEGER LastWriteTime
;
1021 LARGE_INTEGER ChangeTime
;
1022 LARGE_INTEGER AllocationSize
;
1023 LARGE_INTEGER EndOfFile
;
1024 ULONG FileAttributes
;
1025 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
1027 typedef enum _FSINFOCLASS
{
1028 FileFsVolumeInformation
= 1,
1029 FileFsLabelInformation
,
1030 FileFsSizeInformation
,
1031 FileFsDeviceInformation
,
1032 FileFsAttributeInformation
,
1033 FileFsControlInformation
,
1034 FileFsFullSizeInformation
,
1035 FileFsObjectIdInformation
,
1036 FileFsDriverPathInformation
,
1037 FileFsVolumeFlagsInformation
,
1038 FileFsMaximumInformation
1039 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
1041 typedef struct _FILE_FS_DEVICE_INFORMATION
{
1042 DEVICE_TYPE DeviceType
;
1043 ULONG Characteristics
;
1044 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
1046 typedef struct _FILE_FULL_EA_INFORMATION
{
1047 ULONG NextEntryOffset
;
1050 USHORT EaValueLength
;
1052 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
1054 #define FM_LOCK_BIT (0x1)
1055 #define FM_LOCK_BIT_V (0x0)
1056 #define FM_LOCK_WAITER_WOKEN (0x2)
1057 #define FM_LOCK_WAITER_INC (0x4)
1059 typedef ULONG_PTR ERESOURCE_THREAD
, *PERESOURCE_THREAD
;
1061 typedef struct _OWNER_ENTRY
{
1062 ERESOURCE_THREAD OwnerThread
;
1063 _ANONYMOUS_UNION
union {
1067 } OWNER_ENTRY
, *POWNER_ENTRY
;
1069 typedef struct _ERESOURCE
1071 LIST_ENTRY SystemResourcesList
;
1072 POWNER_ENTRY OwnerTable
;
1075 volatile PKSEMAPHORE SharedWaiters
;
1076 volatile PKEVENT ExclusiveWaiters
;
1077 OWNER_ENTRY OwnerEntry
;
1078 ULONG ActiveEntries
;
1079 ULONG ContentionCount
;
1080 ULONG NumberOfSharedWaiters
;
1081 ULONG NumberOfExclusiveWaiters
;
1082 __GNU_EXTENSION
union
1085 ULONG_PTR CreatorBackTraceIndex
;
1087 KSPIN_LOCK SpinLock
;
1088 } ERESOURCE
, *PERESOURCE
;
1090 /* ERESOURCE.Flag */
1091 #define ResourceNeverExclusive 0x0010
1092 #define ResourceReleaseByOtherThread 0x0020
1093 #define ResourceOwnedExclusive 0x0080
1095 #define RESOURCE_HASH_TABLE_SIZE 64
1098 (DDKAPI
*PFAST_IO_CHECK_IF_POSSIBLE
)(
1099 IN
struct _FILE_OBJECT
*FileObject
,
1100 IN PLARGE_INTEGER FileOffset
,
1104 IN BOOLEAN CheckForReadOperation
,
1105 OUT PIO_STATUS_BLOCK IoStatus
,
1106 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1109 (DDKAPI
*PFAST_IO_READ
)(
1110 IN
struct _FILE_OBJECT
*FileObject
,
1111 IN PLARGE_INTEGER FileOffset
,
1116 OUT PIO_STATUS_BLOCK IoStatus
,
1117 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1120 (DDKAPI
*PFAST_IO_WRITE
)(
1121 IN
struct _FILE_OBJECT
*FileObject
,
1122 IN PLARGE_INTEGER FileOffset
,
1127 OUT PIO_STATUS_BLOCK IoStatus
,
1128 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1131 (DDKAPI
*PFAST_IO_QUERY_BASIC_INFO
)(
1132 IN
struct _FILE_OBJECT
*FileObject
,
1134 OUT PFILE_BASIC_INFORMATION Buffer
,
1135 OUT PIO_STATUS_BLOCK IoStatus
,
1136 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1139 (DDKAPI
*PFAST_IO_QUERY_STANDARD_INFO
)(
1140 IN
struct _FILE_OBJECT
*FileObject
,
1142 OUT PFILE_STANDARD_INFORMATION Buffer
,
1143 OUT PIO_STATUS_BLOCK IoStatus
,
1144 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1147 (DDKAPI
*PFAST_IO_LOCK
)(
1148 IN
struct _FILE_OBJECT
*FileObject
,
1149 IN PLARGE_INTEGER FileOffset
,
1150 IN PLARGE_INTEGER Length
,
1151 PEPROCESS ProcessId
,
1153 BOOLEAN FailImmediately
,
1154 BOOLEAN ExclusiveLock
,
1155 OUT PIO_STATUS_BLOCK IoStatus
,
1156 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1159 (DDKAPI
*PFAST_IO_UNLOCK_SINGLE
)(
1160 IN
struct _FILE_OBJECT
*FileObject
,
1161 IN PLARGE_INTEGER FileOffset
,
1162 IN PLARGE_INTEGER Length
,
1163 PEPROCESS ProcessId
,
1165 OUT PIO_STATUS_BLOCK IoStatus
,
1166 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1169 (DDKAPI
*PFAST_IO_UNLOCK_ALL
)(
1170 IN
struct _FILE_OBJECT
*FileObject
,
1171 PEPROCESS ProcessId
,
1172 OUT PIO_STATUS_BLOCK IoStatus
,
1173 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1176 (DDKAPI
*PFAST_IO_UNLOCK_ALL_BY_KEY
)(
1177 IN
struct _FILE_OBJECT
*FileObject
,
1180 OUT PIO_STATUS_BLOCK IoStatus
,
1181 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1184 (DDKAPI
*PFAST_IO_DEVICE_CONTROL
)(
1185 IN
struct _FILE_OBJECT
*FileObject
,
1187 IN PVOID InputBuffer OPTIONAL
,
1188 IN ULONG InputBufferLength
,
1189 OUT PVOID OutputBuffer OPTIONAL
,
1190 IN ULONG OutputBufferLength
,
1191 IN ULONG IoControlCode
,
1192 OUT PIO_STATUS_BLOCK IoStatus
,
1193 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1196 (DDKAPI
*PFAST_IO_ACQUIRE_FILE
)(
1197 IN
struct _FILE_OBJECT
*FileObject
);
1200 (DDKAPI
*PFAST_IO_RELEASE_FILE
)(
1201 IN
struct _FILE_OBJECT
*FileObject
);
1204 (DDKAPI
*PFAST_IO_DETACH_DEVICE
)(
1205 IN
struct _DEVICE_OBJECT
*SourceDevice
,
1206 IN
struct _DEVICE_OBJECT
*TargetDevice
);
1209 (DDKAPI
*PFAST_IO_QUERY_NETWORK_OPEN_INFO
)(
1210 IN
struct _FILE_OBJECT
*FileObject
,
1212 OUT
struct _FILE_NETWORK_OPEN_INFORMATION
*Buffer
,
1213 OUT
struct _IO_STATUS_BLOCK
*IoStatus
,
1214 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1217 (DDKAPI
*PFAST_IO_ACQUIRE_FOR_MOD_WRITE
)(
1218 IN
struct _FILE_OBJECT
*FileObject
,
1219 IN PLARGE_INTEGER EndingOffset
,
1220 OUT
struct _ERESOURCE
**ResourceToRelease
,
1221 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1224 (DDKAPI
*PFAST_IO_MDL_READ
)(
1225 IN
struct _FILE_OBJECT
*FileObject
,
1226 IN PLARGE_INTEGER FileOffset
,
1230 OUT PIO_STATUS_BLOCK IoStatus
,
1231 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1234 (DDKAPI
*PFAST_IO_MDL_READ_COMPLETE
)(
1235 IN
struct _FILE_OBJECT
*FileObject
,
1237 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1240 (DDKAPI
*PFAST_IO_PREPARE_MDL_WRITE
)(
1241 IN
struct _FILE_OBJECT
*FileObject
,
1242 IN PLARGE_INTEGER FileOffset
,
1246 OUT PIO_STATUS_BLOCK IoStatus
,
1247 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1250 (DDKAPI
*PFAST_IO_MDL_WRITE_COMPLETE
)(
1251 IN
struct _FILE_OBJECT
*FileObject
,
1252 IN PLARGE_INTEGER FileOffset
,
1254 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1257 (DDKAPI
*PFAST_IO_READ_COMPRESSED
)(
1258 IN
struct _FILE_OBJECT
*FileObject
,
1259 IN PLARGE_INTEGER FileOffset
,
1264 OUT PIO_STATUS_BLOCK IoStatus
,
1265 OUT
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
1266 IN ULONG CompressedDataInfoLength
,
1267 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1270 (DDKAPI
*PFAST_IO_WRITE_COMPRESSED
)(
1271 IN
struct _FILE_OBJECT
*FileObject
,
1272 IN PLARGE_INTEGER FileOffset
,
1277 OUT PIO_STATUS_BLOCK IoStatus
,
1278 IN
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
1279 IN ULONG CompressedDataInfoLength
,
1280 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1283 (DDKAPI
*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED
)(
1284 IN
struct _FILE_OBJECT
*FileObject
,
1286 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1289 (DDKAPI
*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)(
1290 IN
struct _FILE_OBJECT
*FileObject
,
1291 IN PLARGE_INTEGER FileOffset
,
1293 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1296 (DDKAPI
*PFAST_IO_QUERY_OPEN
)(
1297 IN
struct _IRP
*Irp
,
1298 OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
,
1299 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1302 (DDKAPI
*PFAST_IO_RELEASE_FOR_MOD_WRITE
)(
1303 IN
struct _FILE_OBJECT
*FileObject
,
1304 IN
struct _ERESOURCE
*ResourceToRelease
,
1305 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1308 (DDKAPI
*PFAST_IO_ACQUIRE_FOR_CCFLUSH
)(
1309 IN
struct _FILE_OBJECT
*FileObject
,
1310 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1313 (DDKAPI
*PFAST_IO_RELEASE_FOR_CCFLUSH
) (
1314 IN
struct _FILE_OBJECT
*FileObject
,
1315 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1317 typedef struct _FAST_IO_DISPATCH
{
1318 ULONG SizeOfFastIoDispatch
;
1319 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible
;
1320 PFAST_IO_READ FastIoRead
;
1321 PFAST_IO_WRITE FastIoWrite
;
1322 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo
;
1323 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo
;
1324 PFAST_IO_LOCK FastIoLock
;
1325 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle
;
1326 PFAST_IO_UNLOCK_ALL FastIoUnlockAll
;
1327 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey
;
1328 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl
;
1329 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection
;
1330 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection
;
1331 PFAST_IO_DETACH_DEVICE FastIoDetachDevice
;
1332 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo
;
1333 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite
;
1334 PFAST_IO_MDL_READ MdlRead
;
1335 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete
;
1336 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite
;
1337 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete
;
1338 PFAST_IO_READ_COMPRESSED FastIoReadCompressed
;
1339 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed
;
1340 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed
;
1341 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed
;
1342 PFAST_IO_QUERY_OPEN FastIoQueryOpen
;
1343 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite
;
1344 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush
;
1345 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush
;
1346 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
1348 typedef struct _SECTION_OBJECT_POINTERS
{
1349 PVOID DataSectionObject
;
1350 PVOID SharedCacheMap
;
1351 PVOID ImageSectionObject
;
1352 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
1354 typedef struct _IO_COMPLETION_CONTEXT
{
1357 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
1359 /* FILE_OBJECT.Flags */
1360 #define FO_FILE_OPEN 0x00000001
1361 #define FO_SYNCHRONOUS_IO 0x00000002
1362 #define FO_ALERTABLE_IO 0x00000004
1363 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
1364 #define FO_WRITE_THROUGH 0x00000010
1365 #define FO_SEQUENTIAL_ONLY 0x00000020
1366 #define FO_CACHE_SUPPORTED 0x00000040
1367 #define FO_NAMED_PIPE 0x00000080
1368 #define FO_STREAM_FILE 0x00000100
1369 #define FO_MAILSLOT 0x00000200
1370 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
1371 #define FO_QUEUE_IRP_TO_THREAD 0x00000400
1372 #define FO_DIRECT_DEVICE_OPEN 0x00000800
1373 #define FO_FILE_MODIFIED 0x00001000
1374 #define FO_FILE_SIZE_CHANGED 0x00002000
1375 #define FO_CLEANUP_COMPLETE 0x00004000
1376 #define FO_TEMPORARY_FILE 0x00008000
1377 #define FO_DELETE_ON_CLOSE 0x00010000
1378 #define FO_OPENED_CASE_SENSITIVE 0x00020000
1379 #define FO_HANDLE_CREATED 0x00040000
1380 #define FO_FILE_FAST_IO_READ 0x00080000
1381 #define FO_RANDOM_ACCESS 0x00100000
1382 #define FO_FILE_OPEN_CANCELLED 0x00200000
1383 #define FO_VOLUME_OPEN 0x00400000
1384 #define FO_REMOTE_ORIGIN 0x01000000
1385 #define FO_DISALLOW_EXCLUSIVE 0x02000000
1386 #define FO_SKIP_COMPLETION_PORT 0x02000000
1387 #define FO_SKIP_SET_EVENT 0x04000000
1388 #define FO_SKIP_SET_FAST_IO 0x08000000
1391 #define VPB_MOUNTED 0x0001
1392 #define VPB_LOCKED 0x0002
1393 #define VPB_PERSISTENT 0x0004
1394 #define VPB_REMOVE_PENDING 0x0008
1395 #define VPB_RAW_MOUNT 0x0010
1396 #define VPB_DIRECT_WRITES_ALLOWED 0x0020
1400 #define SL_FORCE_ACCESS_CHECK 0x01
1401 #define SL_OPEN_PAGING_FILE 0x02
1402 #define SL_OPEN_TARGET_DIRECTORY 0x04
1403 #define SL_CASE_SENSITIVE 0x80
1405 #define SL_KEY_SPECIFIED 0x01
1406 #define SL_OVERRIDE_VERIFY_VOLUME 0x02
1407 #define SL_WRITE_THROUGH 0x04
1408 #define SL_FT_SEQUENTIAL_WRITE 0x08
1410 #define SL_FAIL_IMMEDIATELY 0x01
1411 #define SL_EXCLUSIVE_LOCK 0x02
1413 #define SL_RESTART_SCAN 0x01
1414 #define SL_RETURN_SINGLE_ENTRY 0x02
1415 #define SL_INDEX_SPECIFIED 0x04
1417 #define SL_WATCH_TREE 0x01
1419 #define SL_ALLOW_RAW_MOUNT 0x01
1421 #define CTL_CODE(DeviceType, Function, Method, Access) \
1422 (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
1424 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
1426 #define IRP_NOCACHE 0x00000001
1427 #define IRP_PAGING_IO 0x00000002
1428 #define IRP_MOUNT_COMPLETION 0x00000002
1429 #define IRP_SYNCHRONOUS_API 0x00000004
1430 #define IRP_ASSOCIATED_IRP 0x00000008
1431 #define IRP_BUFFERED_IO 0x00000010
1432 #define IRP_DEALLOCATE_BUFFER 0x00000020
1433 #define IRP_INPUT_OPERATION 0x00000040
1434 #define IRP_SYNCHRONOUS_PAGING_IO 0x00000040
1435 #define IRP_CREATE_OPERATION 0x00000080
1436 #define IRP_READ_OPERATION 0x00000100
1437 #define IRP_WRITE_OPERATION 0x00000200
1438 #define IRP_CLOSE_OPERATION 0x00000400
1439 #define IRP_DEFER_IO_COMPLETION 0x00000800
1440 #define IRP_OB_QUERY_NAME 0x00001000
1441 #define IRP_HOLD_DEVICE_QUEUE 0x00002000
1443 #define IRP_QUOTA_CHARGED 0x01
1444 #define IRP_ALLOCATED_MUST_SUCCEED 0x02
1445 #define IRP_ALLOCATED_FIXED_SIZE 0x04
1446 #define IRP_LOOKASIDE_ALLOCATION 0x08
1449 ** IRP function codes
1452 #define IRP_MJ_CREATE 0x00
1453 #define IRP_MJ_CREATE_NAMED_PIPE 0x01
1454 #define IRP_MJ_CLOSE 0x02
1455 #define IRP_MJ_READ 0x03
1456 #define IRP_MJ_WRITE 0x04
1457 #define IRP_MJ_QUERY_INFORMATION 0x05
1458 #define IRP_MJ_SET_INFORMATION 0x06
1459 #define IRP_MJ_QUERY_EA 0x07
1460 #define IRP_MJ_SET_EA 0x08
1461 #define IRP_MJ_FLUSH_BUFFERS 0x09
1462 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
1463 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
1464 #define IRP_MJ_DIRECTORY_CONTROL 0x0c
1465 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
1466 #define IRP_MJ_DEVICE_CONTROL 0x0e
1467 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
1468 #define IRP_MJ_SCSI 0x0f
1469 #define IRP_MJ_SHUTDOWN 0x10
1470 #define IRP_MJ_LOCK_CONTROL 0x11
1471 #define IRP_MJ_CLEANUP 0x12
1472 #define IRP_MJ_CREATE_MAILSLOT 0x13
1473 #define IRP_MJ_QUERY_SECURITY 0x14
1474 #define IRP_MJ_SET_SECURITY 0x15
1475 #define IRP_MJ_POWER 0x16
1476 #define IRP_MJ_SYSTEM_CONTROL 0x17
1477 #define IRP_MJ_DEVICE_CHANGE 0x18
1478 #define IRP_MJ_QUERY_QUOTA 0x19
1479 #define IRP_MJ_SET_QUOTA 0x1a
1480 #define IRP_MJ_PNP 0x1b
1481 #define IRP_MJ_PNP_POWER 0x1b
1482 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
1484 #define IRP_MN_SCSI_CLASS 0x01
1486 #define IRP_MN_START_DEVICE 0x00
1487 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
1488 #define IRP_MN_REMOVE_DEVICE 0x02
1489 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
1490 #define IRP_MN_STOP_DEVICE 0x04
1491 #define IRP_MN_QUERY_STOP_DEVICE 0x05
1492 #define IRP_MN_CANCEL_STOP_DEVICE 0x06
1494 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
1495 #define IRP_MN_QUERY_INTERFACE 0x08
1496 #define IRP_MN_QUERY_CAPABILITIES 0x09
1497 #define IRP_MN_QUERY_RESOURCES 0x0A
1498 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
1499 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
1500 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
1502 #define IRP_MN_READ_CONFIG 0x0F
1503 #define IRP_MN_WRITE_CONFIG 0x10
1504 #define IRP_MN_EJECT 0x11
1505 #define IRP_MN_SET_LOCK 0x12
1506 #define IRP_MN_QUERY_ID 0x13
1507 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
1508 #define IRP_MN_QUERY_BUS_INFORMATION 0x15
1509 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
1510 #define IRP_MN_SURPRISE_REMOVAL 0x17
1512 #define IRP_MN_WAIT_WAKE 0x00
1513 #define IRP_MN_POWER_SEQUENCE 0x01
1514 #define IRP_MN_SET_POWER 0x02
1515 #define IRP_MN_QUERY_POWER 0x03
1517 #define IRP_MN_QUERY_ALL_DATA 0x00
1518 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
1519 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
1520 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
1521 #define IRP_MN_ENABLE_EVENTS 0x04
1522 #define IRP_MN_DISABLE_EVENTS 0x05
1523 #define IRP_MN_ENABLE_COLLECTION 0x06
1524 #define IRP_MN_DISABLE_COLLECTION 0x07
1525 #define IRP_MN_REGINFO 0x08
1526 #define IRP_MN_EXECUTE_METHOD 0x09
1528 #define IRP_MN_REGINFO_EX 0x0b
1530 typedef struct _FILE_OBJECT
1534 PDEVICE_OBJECT DeviceObject
;
1538 PSECTION_OBJECT_POINTERS SectionObjectPointer
;
1539 PVOID PrivateCacheMap
;
1540 NTSTATUS FinalStatus
;
1541 struct _FILE_OBJECT
*RelatedFileObject
;
1542 BOOLEAN LockOperation
;
1543 BOOLEAN DeletePending
;
1545 BOOLEAN WriteAccess
;
1546 BOOLEAN DeleteAccess
;
1548 BOOLEAN SharedWrite
;
1549 BOOLEAN SharedDelete
;
1551 UNICODE_STRING FileName
;
1552 LARGE_INTEGER CurrentByteOffset
;
1553 volatile ULONG Waiters
;
1554 volatile ULONG Busy
;
1558 volatile PIO_COMPLETION_CONTEXT CompletionContext
;
1559 KSPIN_LOCK IrpListLock
;
1561 volatile PVOID FileObjectExtension
;
1562 } FILE_OBJECT
, *PFILE_OBJECT
;
1564 typedef struct _IO_ERROR_LOG_PACKET
{
1565 UCHAR MajorFunctionCode
;
1567 USHORT DumpDataSize
;
1568 USHORT NumberOfStrings
;
1569 USHORT StringOffset
;
1570 USHORT EventCategory
;
1572 ULONG UniqueErrorValue
;
1573 NTSTATUS FinalStatus
;
1574 ULONG SequenceNumber
;
1575 ULONG IoControlCode
;
1576 LARGE_INTEGER DeviceOffset
;
1578 } IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
1580 typedef struct _IO_ERROR_LOG_MESSAGE
{
1583 USHORT DriverNameLength
;
1584 LARGE_INTEGER TimeStamp
;
1585 ULONG DriverNameOffset
;
1586 IO_ERROR_LOG_PACKET EntryData
;
1587 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
1589 #define ERROR_LOG_LIMIT_SIZE 240
1590 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
1591 sizeof(IO_ERROR_LOG_PACKET) + \
1592 (sizeof(WCHAR) * 40))
1593 #define ERROR_LOG_MESSAGE_LIMIT_SIZE \
1594 (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1595 #define IO_ERROR_LOG_MESSAGE_LENGTH \
1596 ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
1597 ERROR_LOG_MESSAGE_LIMIT_SIZE : \
1598 PORT_MAXIMUM_MESSAGE_LENGTH)
1599 #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
1600 IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1602 typedef enum _DMA_WIDTH
{
1607 } DMA_WIDTH
, *PDMA_WIDTH
;
1609 typedef enum _DMA_SPEED
{
1616 } DMA_SPEED
, *PDMA_SPEED
;
1618 /* DEVICE_DESCRIPTION.Version */
1620 #define DEVICE_DESCRIPTION_VERSION 0x0000
1621 #define DEVICE_DESCRIPTION_VERSION1 0x0001
1622 #define DEVICE_DESCRIPTION_VERSION2 0x0002
1624 typedef struct _DEVICE_DESCRIPTION
{
1627 BOOLEAN ScatterGather
;
1629 BOOLEAN AutoInitialize
;
1630 BOOLEAN Dma32BitAddresses
;
1631 BOOLEAN IgnoreCount
;
1633 BOOLEAN Dma64BitAddresses
;
1636 INTERFACE_TYPE InterfaceType
;
1639 ULONG MaximumLength
;
1641 } DEVICE_DESCRIPTION
, *PDEVICE_DESCRIPTION
;
1643 typedef enum _DEVICE_RELATION_TYPE
{
1648 TargetDeviceRelation
,
1651 } DEVICE_RELATION_TYPE
, *PDEVICE_RELATION_TYPE
;
1653 typedef struct _DEVICE_RELATIONS
{
1655 PDEVICE_OBJECT Objects
[1];
1656 } DEVICE_RELATIONS
, *PDEVICE_RELATIONS
;
1658 typedef struct _DEVOBJ_EXTENSION
1662 PDEVICE_OBJECT DeviceObject
;
1663 } DEVOBJ_EXTENSION
, *PDEVOBJ_EXTENSION
;
1665 typedef struct _SCATTER_GATHER_ELEMENT
{
1666 PHYSICAL_ADDRESS Address
;
1669 } SCATTER_GATHER_ELEMENT
, *PSCATTER_GATHER_ELEMENT
;
1671 #if defined(_MSC_EXTENSIONS)
1673 #if _MSC_VER >= 1200
1674 #pragma warning(push)
1676 #pragma warning(disable:4200)
1677 typedef struct _SCATTER_GATHER_LIST
{
1678 ULONG NumberOfElements
;
1680 SCATTER_GATHER_ELEMENT Elements
[1];
1681 } SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
1683 #if _MSC_VER >= 1200
1684 #pragma warning(pop)
1686 #pragma warning(default:4200)
1691 struct _SCATTER_GATHER_LIST
;
1692 typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
1697 (DDKAPI DRIVER_ADD_DEVICE
)(
1698 IN
struct _DRIVER_OBJECT
*DriverObject
,
1699 IN
struct _DEVICE_OBJECT
*PhysicalDeviceObject
);
1700 typedef DRIVER_ADD_DEVICE
*PDRIVER_ADD_DEVICE
;
1702 typedef struct _DRIVER_EXTENSION
{
1703 struct _DRIVER_OBJECT
*DriverObject
;
1704 PDRIVER_ADD_DEVICE AddDevice
;
1706 UNICODE_STRING ServiceKeyName
;
1707 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
1709 #define DRVO_UNLOAD_INVOKED 0x00000001
1710 #define DRVO_LEGACY_DRIVER 0x00000002
1711 #define DRVO_BUILTIN_DRIVER 0x00000004
1714 (DDKAPI DRIVER_INITIALIZE
)(
1715 IN
struct _DRIVER_OBJECT
*DriverObject
,
1716 IN PUNICODE_STRING RegistryPath
);
1717 typedef DRIVER_INITIALIZE
*PDRIVER_INITIALIZE
;
1720 (DDKAPI DRIVER_STARTIO
)(
1721 IN
struct _DEVICE_OBJECT
*DeviceObject
,
1722 IN
struct _IRP
*Irp
);
1723 typedef DRIVER_STARTIO
*PDRIVER_STARTIO
;
1726 (DDKAPI DRIVER_UNLOAD
)(
1727 IN
struct _DRIVER_OBJECT
*DriverObject
);
1728 typedef DRIVER_UNLOAD
*PDRIVER_UNLOAD
;
1731 (DDKAPI DRIVER_DISPATCH
)(
1732 IN
struct _DEVICE_OBJECT
*DeviceObject
,
1733 IN
struct _IRP
*Irp
);
1734 typedef DRIVER_DISPATCH
*PDRIVER_DISPATCH
;
1736 typedef struct _DRIVER_OBJECT
{
1739 PDEVICE_OBJECT DeviceObject
;
1743 PVOID DriverSection
;
1744 PDRIVER_EXTENSION DriverExtension
;
1745 UNICODE_STRING DriverName
;
1746 PUNICODE_STRING HardwareDatabase
;
1747 struct _FAST_IO_DISPATCH
*FastIoDispatch
;
1748 PDRIVER_INITIALIZE DriverInit
;
1749 PDRIVER_STARTIO DriverStartIo
;
1750 PDRIVER_UNLOAD DriverUnload
;
1751 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
1753 typedef struct _DRIVER_OBJECT
*PDRIVER_OBJECT
;
1755 typedef struct _DMA_ADAPTER
{
1758 struct _DMA_OPERATIONS
* DmaOperations
;
1759 } DMA_ADAPTER
, *PDMA_ADAPTER
;
1762 (DDKAPI
*PPUT_DMA_ADAPTER
)(
1763 IN PDMA_ADAPTER DmaAdapter
);
1766 (DDKAPI
*PALLOCATE_COMMON_BUFFER
)(
1767 IN PDMA_ADAPTER DmaAdapter
,
1769 OUT PPHYSICAL_ADDRESS LogicalAddress
,
1770 IN BOOLEAN CacheEnabled
);
1773 (DDKAPI
*PFREE_COMMON_BUFFER
)(
1774 IN PDMA_ADAPTER DmaAdapter
,
1776 IN PHYSICAL_ADDRESS LogicalAddress
,
1777 IN PVOID VirtualAddress
,
1778 IN BOOLEAN CacheEnabled
);
1781 (DDKAPI
*PALLOCATE_ADAPTER_CHANNEL
)(
1782 IN PDMA_ADAPTER DmaAdapter
,
1783 IN PDEVICE_OBJECT DeviceObject
,
1784 IN ULONG NumberOfMapRegisters
,
1785 IN PDRIVER_CONTROL ExecutionRoutine
,
1789 (DDKAPI
*PFLUSH_ADAPTER_BUFFERS
)(
1790 IN PDMA_ADAPTER DmaAdapter
,
1792 IN PVOID MapRegisterBase
,
1795 IN BOOLEAN WriteToDevice
);
1798 (DDKAPI
*PFREE_ADAPTER_CHANNEL
)(
1799 IN PDMA_ADAPTER DmaAdapter
);
1802 (DDKAPI
*PFREE_MAP_REGISTERS
)(
1803 IN PDMA_ADAPTER DmaAdapter
,
1804 PVOID MapRegisterBase
,
1805 ULONG NumberOfMapRegisters
);
1807 typedef PHYSICAL_ADDRESS
1808 (DDKAPI
*PMAP_TRANSFER
)(
1809 IN PDMA_ADAPTER DmaAdapter
,
1811 IN PVOID MapRegisterBase
,
1813 IN OUT PULONG Length
,
1814 IN BOOLEAN WriteToDevice
);
1817 (DDKAPI
*PGET_DMA_ALIGNMENT
)(
1818 IN PDMA_ADAPTER DmaAdapter
);
1821 (DDKAPI
*PREAD_DMA_COUNTER
)(
1822 IN PDMA_ADAPTER DmaAdapter
);
1825 (DDKAPI
*PDRIVER_LIST_CONTROL
)(
1826 IN
struct _DEVICE_OBJECT
*DeviceObject
,
1827 IN
struct _IRP
*Irp
,
1828 IN
struct _SCATTER_GATHER_LIST
*ScatterGather
,
1832 (DDKAPI
*PGET_SCATTER_GATHER_LIST
)(
1833 IN PDMA_ADAPTER DmaAdapter
,
1834 IN PDEVICE_OBJECT DeviceObject
,
1838 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
1840 IN BOOLEAN WriteToDevice
);
1843 (DDKAPI
*PPUT_SCATTER_GATHER_LIST
)(
1844 IN PDMA_ADAPTER DmaAdapter
,
1845 IN PSCATTER_GATHER_LIST ScatterGather
,
1846 IN BOOLEAN WriteToDevice
);
1849 (DDKAPI
*PCALCULATE_SCATTER_GATHER_LIST_SIZE
)(
1850 IN PDMA_ADAPTER DmaAdapter
,
1851 IN PMDL Mdl OPTIONAL
,
1854 OUT PULONG ScatterGatherListSize
,
1855 OUT PULONG pNumberOfMapRegisters OPTIONAL
);
1858 (DDKAPI
*PBUILD_SCATTER_GATHER_LIST
)(
1859 IN PDMA_ADAPTER DmaAdapter
,
1860 IN PDEVICE_OBJECT DeviceObject
,
1864 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
1866 IN BOOLEAN WriteToDevice
,
1867 IN PVOID ScatterGatherBuffer
,
1868 IN ULONG ScatterGatherLength
);
1871 (DDKAPI
*PBUILD_MDL_FROM_SCATTER_GATHER_LIST
)(
1872 IN PDMA_ADAPTER DmaAdapter
,
1873 IN PSCATTER_GATHER_LIST ScatterGather
,
1874 IN PMDL OriginalMdl
,
1875 OUT PMDL
*TargetMdl
);
1877 typedef struct _DMA_OPERATIONS
{
1879 PPUT_DMA_ADAPTER PutDmaAdapter
;
1880 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer
;
1881 PFREE_COMMON_BUFFER FreeCommonBuffer
;
1882 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
1883 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
1884 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
1885 PFREE_MAP_REGISTERS FreeMapRegisters
;
1886 PMAP_TRANSFER MapTransfer
;
1887 PGET_DMA_ALIGNMENT GetDmaAlignment
;
1888 PREAD_DMA_COUNTER ReadDmaCounter
;
1889 PGET_SCATTER_GATHER_LIST GetScatterGatherList
;
1890 PPUT_SCATTER_GATHER_LIST PutScatterGatherList
;
1891 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList
;
1892 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList
;
1893 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList
;
1894 } DMA_OPERATIONS
, *PDMA_OPERATIONS
;
1896 typedef struct _IO_RESOURCE_DESCRIPTOR
{
1899 UCHAR ShareDisposition
;
1907 PHYSICAL_ADDRESS MinimumAddress
;
1908 PHYSICAL_ADDRESS MaximumAddress
;
1913 PHYSICAL_ADDRESS MinimumAddress
;
1914 PHYSICAL_ADDRESS MaximumAddress
;
1917 ULONG MinimumVector
;
1918 ULONG MaximumVector
;
1921 ULONG MinimumChannel
;
1922 ULONG MaximumChannel
;
1927 PHYSICAL_ADDRESS MinimumAddress
;
1928 PHYSICAL_ADDRESS MaximumAddress
;
1945 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
1947 typedef struct _IO_RESOURCE_LIST
{
1951 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
1952 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
1954 typedef struct _IO_RESOURCE_REQUIREMENTS_LIST
{
1956 INTERFACE_TYPE InterfaceType
;
1960 ULONG AlternativeLists
;
1961 IO_RESOURCE_LIST List
[1];
1962 } IO_RESOURCE_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
1965 (DDKAPI DRIVER_CANCEL
)(
1966 IN
struct _DEVICE_OBJECT
*DeviceObject
,
1967 IN
struct _IRP
*Irp
);
1968 typedef DRIVER_CANCEL
*PDRIVER_CANCEL
;
1970 typedef struct _IRP
{
1973 struct _MDL
*MdlAddress
;
1976 struct _IRP
*MasterIrp
;
1977 volatile LONG IrpCount
;
1980 LIST_ENTRY ThreadListEntry
;
1981 IO_STATUS_BLOCK IoStatus
;
1982 KPROCESSOR_MODE RequestorMode
;
1983 BOOLEAN PendingReturned
;
1985 CHAR CurrentLocation
;
1988 CCHAR ApcEnvironment
;
1989 UCHAR AllocationFlags
;
1990 PIO_STATUS_BLOCK UserIosb
;
1994 _ANONYMOUS_UNION
union {
1995 PIO_APC_ROUTINE UserApcRoutine
;
1996 PVOID IssuingProcess
;
1998 PVOID UserApcContext
;
1999 } AsynchronousParameters
;
2000 LARGE_INTEGER AllocationSize
;
2002 volatile PDRIVER_CANCEL CancelRoutine
;
2006 _ANONYMOUS_UNION
union {
2007 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
2008 _ANONYMOUS_STRUCT
struct {
2009 PVOID DriverContext
[4];
2013 PCHAR AuxiliaryBuffer
;
2014 _ANONYMOUS_STRUCT
struct {
2015 LIST_ENTRY ListEntry
;
2016 _ANONYMOUS_UNION
union {
2017 struct _IO_STACK_LOCATION
*CurrentStackLocation
;
2021 struct _FILE_OBJECT
*OriginalFileObject
;
2024 PVOID CompletionKey
;
2027 typedef struct _IRP
*PIRP
;
2029 typedef enum _IO_PAGING_PRIORITY
{
2030 IoPagingPriorityInvalid
,
2031 IoPagingPriorityNormal
,
2032 IoPagingPriorityHigh
,
2033 IoPagingPriorityReserved1
,
2034 IoPagingPriorityReserved2
2035 } IO_PAGING_PRIORITY
;
2038 (DDKAPI IO_COMPLETION_ROUTINE
)(
2039 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2040 IN
struct _IRP
*Irp
,
2042 typedef IO_COMPLETION_ROUTINE
*PIO_COMPLETION_ROUTINE
;
2045 (DDKAPI
*PIO_DPC_ROUTINE
)(
2046 IN
struct _KDPC
*Dpc
,
2047 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2048 IN
struct _IRP
*Irp
,
2052 (DDKAPI
*PMM_DLL_INITIALIZE
)(
2053 IN PUNICODE_STRING RegistryPath
);
2056 (DDKAPI
*PMM_DLL_UNLOAD
)(
2060 (DDKAPI KSERVICE_ROUTINE
)(
2061 IN
struct _KINTERRUPT
*Interrupt
,
2062 IN PVOID ServiceContext
);
2063 typedef KSERVICE_ROUTINE
*PKSERVICE_ROUTINE
;
2066 (DDKAPI
*PIO_TIMER_ROUTINE
)(
2067 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2070 typedef struct _IO_SECURITY_CONTEXT
{
2071 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
2072 PACCESS_STATE AccessState
;
2073 ACCESS_MASK DesiredAccess
;
2074 ULONG FullCreateOptions
;
2075 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
2079 typedef struct _IO_CSQ_IRP_CONTEXT
{
2082 struct _IO_CSQ
*Csq
;
2083 } IO_CSQ_IRP_CONTEXT
, *PIO_CSQ_IRP_CONTEXT
;
2086 (DDKAPI
*PIO_CSQ_INSERT_IRP
)(
2087 IN
struct _IO_CSQ
*Csq
,
2091 (DDKAPI
*PIO_CSQ_REMOVE_IRP
)(
2092 IN
struct _IO_CSQ
*Csq
,
2096 (DDKAPI
*PIO_CSQ_PEEK_NEXT_IRP
)(
2097 IN
struct _IO_CSQ
*Csq
,
2099 IN PVOID PeekContext
);
2102 (DDKAPI
*PIO_CSQ_ACQUIRE_LOCK
)(
2103 IN
struct _IO_CSQ
*Csq
,
2107 (DDKAPI
*PIO_CSQ_RELEASE_LOCK
)(
2108 IN
struct _IO_CSQ
*Csq
,
2112 (DDKAPI
*PIO_CSQ_COMPLETE_CANCELED_IRP
)(
2113 IN
struct _IO_CSQ
*Csq
,
2116 typedef struct _IO_CSQ
{
2118 PIO_CSQ_INSERT_IRP CsqInsertIrp
;
2119 PIO_CSQ_REMOVE_IRP CsqRemoveIrp
;
2120 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
;
2121 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
;
2122 PIO_CSQ_RELEASE_LOCK CsqReleaseLock
;
2123 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
;
2124 PVOID ReservePointer
;
2127 typedef enum _BUS_QUERY_ID_TYPE
{
2129 BusQueryHardwareIDs
,
2130 BusQueryCompatibleIDs
,
2132 BusQueryDeviceSerialNumber
2133 } BUS_QUERY_ID_TYPE
, *PBUS_QUERY_ID_TYPE
;
2135 typedef enum _DEVICE_TEXT_TYPE
{
2136 DeviceTextDescription
,
2137 DeviceTextLocationInformation
2138 } DEVICE_TEXT_TYPE
, *PDEVICE_TEXT_TYPE
;
2140 typedef enum _WORK_QUEUE_TYPE
{
2143 HyperCriticalWorkQueue
,
2147 #if !defined(_AMD64_) && !defined(_IA64_)
2148 #include <pshpack4.h>
2150 typedef struct _IO_STACK_LOCATION
{
2151 UCHAR MajorFunction
;
2152 UCHAR MinorFunction
;
2157 PIO_SECURITY_CONTEXT SecurityContext
;
2159 USHORT POINTER_ALIGNMENT FileAttributes
;
2161 ULONG POINTER_ALIGNMENT EaLength
;
2165 ULONG POINTER_ALIGNMENT Key
;
2166 LARGE_INTEGER ByteOffset
;
2170 ULONG POINTER_ALIGNMENT Key
;
2171 LARGE_INTEGER ByteOffset
;
2175 PUNICODE_STRING FileName
;
2176 FILE_INFORMATION_CLASS FileInformationClass
;
2181 ULONG CompletionFilter
;
2185 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
2189 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
2190 PFILE_OBJECT FileObject
;
2191 _ANONYMOUS_UNION
union {
2192 _ANONYMOUS_STRUCT
struct {
2193 BOOLEAN ReplaceIfExists
;
2194 BOOLEAN AdvanceOnly
;
2197 HANDLE DeleteHandle
;
2211 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
2215 FS_INFORMATION_CLASS FsInformationClass
;
2218 ULONG OutputBufferLength
;
2219 ULONG InputBufferLength
;
2220 ULONG FsControlCode
;
2221 PVOID Type3InputBuffer
;
2222 } FileSystemControl
;
2224 PLARGE_INTEGER Length
;
2226 LARGE_INTEGER ByteOffset
;
2229 ULONG OutputBufferLength
;
2230 ULONG POINTER_ALIGNMENT InputBufferLength
;
2231 ULONG POINTER_ALIGNMENT IoControlCode
;
2232 PVOID Type3InputBuffer
;
2235 SECURITY_INFORMATION SecurityInformation
;
2236 ULONG POINTER_ALIGNMENT Length
;
2239 SECURITY_INFORMATION SecurityInformation
;
2240 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2244 PDEVICE_OBJECT DeviceObject
;
2248 PDEVICE_OBJECT DeviceObject
;
2251 struct _SCSI_REQUEST_BLOCK
*Srb
;
2256 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
2257 ULONG SidListLength
;
2263 DEVICE_RELATION_TYPE Type
;
2264 } QueryDeviceRelations
;
2266 CONST GUID
*InterfaceType
;
2269 PINTERFACE Interface
;
2270 PVOID InterfaceSpecificData
;
2273 PDEVICE_CAPABILITIES Capabilities
;
2274 } DeviceCapabilities
;
2276 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
2277 } FilterResourceRequirements
;
2282 ULONG POINTER_ALIGNMENT Length
;
2288 BUS_QUERY_ID_TYPE IdType
;
2291 DEVICE_TEXT_TYPE DeviceTextType
;
2292 LCID POINTER_ALIGNMENT LocaleId
;
2296 BOOLEAN Reserved
[3];
2297 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type
;
2298 } UsageNotification
;
2300 SYSTEM_POWER_STATE PowerState
;
2303 PPOWER_SEQUENCE PowerSequence
;
2306 ULONG SystemContext
;
2307 POWER_STATE_TYPE POINTER_ALIGNMENT Type
;
2308 POWER_STATE POINTER_ALIGNMENT State
;
2309 POWER_ACTION POINTER_ALIGNMENT ShutdownType
;
2312 PCM_RESOURCE_LIST AllocatedResources
;
2313 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
2316 ULONG_PTR ProviderId
;
2328 PDEVICE_OBJECT DeviceObject
;
2329 PFILE_OBJECT FileObject
;
2330 PIO_COMPLETION_ROUTINE CompletionRoutine
;
2332 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
2333 #if !defined(_AMD64_) && !defined(_IA64_)
2334 #include <poppack.h>
2337 /* IO_STACK_LOCATION.Control */
2339 #define SL_PENDING_RETURNED 0x01
2340 #define SL_ERROR_RETURNED 0x02
2341 #define SL_INVOKE_ON_CANCEL 0x20
2342 #define SL_INVOKE_ON_SUCCESS 0x40
2343 #define SL_INVOKE_ON_ERROR 0x80
2345 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
2347 #define PCI_WHICHSPACE_CONFIG 0x0
2348 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
2350 #define METHOD_BUFFERED 0
2351 #define METHOD_IN_DIRECT 1
2352 #define METHOD_OUT_DIRECT 2
2353 #define METHOD_NEITHER 3
2356 #define FILE_SUPERSEDED 0x00000000
2357 #define FILE_OPENED 0x00000001
2358 #define FILE_CREATED 0x00000002
2359 #define FILE_OVERWRITTEN 0x00000003
2360 #define FILE_EXISTS 0x00000004
2361 #define FILE_DOES_NOT_EXIST 0x00000005
2363 #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
2364 #define FILE_WRITE_TO_END_OF_FILE 0xffffffff
2366 /* also in winnt.h */
2367 #define FILE_LIST_DIRECTORY 0x00000001
2368 #define FILE_READ_DATA 0x00000001
2369 #define FILE_ADD_FILE 0x00000002
2370 #define FILE_WRITE_DATA 0x00000002
2371 #define FILE_ADD_SUBDIRECTORY 0x00000004
2372 #define FILE_APPEND_DATA 0x00000004
2373 #define FILE_CREATE_PIPE_INSTANCE 0x00000004
2374 #define FILE_READ_EA 0x00000008
2375 #define FILE_WRITE_EA 0x00000010
2376 #define FILE_EXECUTE 0x00000020
2377 #define FILE_TRAVERSE 0x00000020
2378 #define FILE_DELETE_CHILD 0x00000040
2379 #define FILE_READ_ATTRIBUTES 0x00000080
2380 #define FILE_WRITE_ATTRIBUTES 0x00000100
2382 #define FILE_SHARE_READ 0x00000001
2383 #define FILE_SHARE_WRITE 0x00000002
2384 #define FILE_SHARE_DELETE 0x00000004
2385 #define FILE_SHARE_VALID_FLAGS 0x00000007
2387 #define FILE_ATTRIBUTE_READONLY 0x00000001
2388 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
2389 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
2390 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
2391 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
2392 #define FILE_ATTRIBUTE_DEVICE 0x00000040
2393 #define FILE_ATTRIBUTE_NORMAL 0x00000080
2394 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
2395 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
2396 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
2397 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
2398 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
2399 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
2400 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
2402 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
2403 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
2405 #define FILE_VALID_OPTION_FLAGS 0x00ffffff
2406 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
2407 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
2408 #define FILE_VALID_SET_FLAGS 0x00000036
2410 #define FILE_SUPERSEDE 0x00000000
2411 #define FILE_OPEN 0x00000001
2412 #define FILE_CREATE 0x00000002
2413 #define FILE_OPEN_IF 0x00000003
2414 #define FILE_OVERWRITE 0x00000004
2415 #define FILE_OVERWRITE_IF 0x00000005
2416 #define FILE_MAXIMUM_DISPOSITION 0x00000005
2418 #define FILE_DIRECTORY_FILE 0x00000001
2419 #define FILE_WRITE_THROUGH 0x00000002
2420 #define FILE_SEQUENTIAL_ONLY 0x00000004
2421 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
2422 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
2423 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
2424 #define FILE_NON_DIRECTORY_FILE 0x00000040
2425 #define FILE_CREATE_TREE_CONNECTION 0x00000080
2426 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
2427 #define FILE_NO_EA_KNOWLEDGE 0x00000200
2428 #define FILE_OPEN_REMOTE_INSTANCE 0x00000400
2429 #define FILE_RANDOM_ACCESS 0x00000800
2430 #define FILE_DELETE_ON_CLOSE 0x00001000
2431 #define FILE_OPEN_BY_FILE_ID 0x00002000
2432 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
2433 #define FILE_NO_COMPRESSION 0x00008000
2434 #define FILE_RESERVE_OPFILTER 0x00100000
2435 #define FILE_OPEN_REPARSE_POINT 0x00200000
2436 #define FILE_OPEN_NO_RECALL 0x00400000
2437 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
2439 #define FILE_ANY_ACCESS 0x00000000
2440 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
2441 #define FILE_READ_ACCESS 0x00000001
2442 #define FILE_WRITE_ACCESS 0x00000002
2444 #define FILE_ALL_ACCESS \
2445 (STANDARD_RIGHTS_REQUIRED | \
2449 #define FILE_GENERIC_EXECUTE \
2450 (STANDARD_RIGHTS_EXECUTE | \
2451 FILE_READ_ATTRIBUTES | \
2455 #define FILE_GENERIC_READ \
2456 (STANDARD_RIGHTS_READ | \
2458 FILE_READ_ATTRIBUTES | \
2462 #define FILE_GENERIC_WRITE \
2463 (STANDARD_RIGHTS_WRITE | \
2465 FILE_WRITE_ATTRIBUTES | \
2467 FILE_APPEND_DATA | \