1 $
if (_WDMDDK_
|| _NTDDK_
)
2 /******************************************************************************
4 ******************************************************************************/
9 #define STATUS_CONTINUE_COMPLETION STATUS_SUCCESS
11 #define CONNECT_FULLY_SPECIFIED 0x1
12 #define CONNECT_LINE_BASED 0x2
13 #define CONNECT_MESSAGE_BASED 0x3
14 #define CONNECT_FULLY_SPECIFIED_GROUP 0x4
15 #define CONNECT_CURRENT_VERSION 0x4
17 #define POOL_COLD_ALLOCATION 256
18 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
19 #define POOL_RAISE_IF_ALLOCATION_FAILURE 16
21 #define IO_TYPE_ADAPTER 1
22 #define IO_TYPE_CONTROLLER 2
23 #define IO_TYPE_DEVICE 3
24 #define IO_TYPE_DRIVER 4
25 #define IO_TYPE_FILE 5
27 #define IO_TYPE_MASTER_ADAPTER 7
28 #define IO_TYPE_OPEN_PACKET 8
29 #define IO_TYPE_TIMER 9
30 #define IO_TYPE_VPB 10
31 #define IO_TYPE_ERROR_LOG 11
32 #define IO_TYPE_ERROR_MESSAGE 12
33 #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
35 #define IO_TYPE_CSQ_IRP_CONTEXT 1
37 #define IO_TYPE_CSQ_EX 3
39 /* IO_RESOURCE_DESCRIPTOR.Option */
40 #define IO_RESOURCE_PREFERRED 0x01
41 #define IO_RESOURCE_DEFAULT 0x02
42 #define IO_RESOURCE_ALTERNATIVE 0x08
45 $
if (_WDMDDK_
|| _DEVIOCTL_
)
46 #define FILE_DEVICE_BEEP 0x00000001
47 #define FILE_DEVICE_CD_ROM 0x00000002
48 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
49 #define FILE_DEVICE_CONTROLLER 0x00000004
50 #define FILE_DEVICE_DATALINK 0x00000005
51 #define FILE_DEVICE_DFS 0x00000006
52 #define FILE_DEVICE_DISK 0x00000007
53 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
54 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
55 #define FILE_DEVICE_INPORT_PORT 0x0000000a
56 #define FILE_DEVICE_KEYBOARD 0x0000000b
57 #define FILE_DEVICE_MAILSLOT 0x0000000c
58 #define FILE_DEVICE_MIDI_IN 0x0000000d
59 #define FILE_DEVICE_MIDI_OUT 0x0000000e
60 #define FILE_DEVICE_MOUSE 0x0000000f
61 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
62 #define FILE_DEVICE_NAMED_PIPE 0x00000011
63 #define FILE_DEVICE_NETWORK 0x00000012
64 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
65 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
66 #define FILE_DEVICE_NULL 0x00000015
67 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
68 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
69 #define FILE_DEVICE_PRINTER 0x00000018
70 #define FILE_DEVICE_SCANNER 0x00000019
71 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
72 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
73 #define FILE_DEVICE_SCREEN 0x0000001c
74 #define FILE_DEVICE_SOUND 0x0000001d
75 #define FILE_DEVICE_STREAMS 0x0000001e
76 #define FILE_DEVICE_TAPE 0x0000001f
77 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
78 #define FILE_DEVICE_TRANSPORT 0x00000021
79 #define FILE_DEVICE_UNKNOWN 0x00000022
80 #define FILE_DEVICE_VIDEO 0x00000023
81 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
82 #define FILE_DEVICE_WAVE_IN 0x00000025
83 #define FILE_DEVICE_WAVE_OUT 0x00000026
84 #define FILE_DEVICE_8042_PORT 0x00000027
85 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
86 #define FILE_DEVICE_BATTERY 0x00000029
87 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
88 #define FILE_DEVICE_MODEM 0x0000002b
89 #define FILE_DEVICE_VDM 0x0000002c
90 #define FILE_DEVICE_MASS_STORAGE 0x0000002d
91 #define FILE_DEVICE_SMB 0x0000002e
92 #define FILE_DEVICE_KS 0x0000002f
93 #define FILE_DEVICE_CHANGER 0x00000030
94 #define FILE_DEVICE_SMARTCARD 0x00000031
95 #define FILE_DEVICE_ACPI 0x00000032
96 #define FILE_DEVICE_DVD 0x00000033
97 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
98 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
99 #define FILE_DEVICE_DFS_VOLUME 0x00000036
100 #define FILE_DEVICE_SERENUM 0x00000037
101 #define FILE_DEVICE_TERMSRV 0x00000038
102 #define FILE_DEVICE_KSEC 0x00000039
103 #define FILE_DEVICE_FIPS 0x0000003A
104 #define FILE_DEVICE_INFINIBAND 0x0000003B
105 #define FILE_DEVICE_VMBUS 0x0000003E
106 #define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F
107 #define FILE_DEVICE_WPD 0x00000040
108 #define FILE_DEVICE_BLUETOOTH 0x00000041
109 #define FILE_DEVICE_MT_COMPOSITE 0x00000042
110 #define FILE_DEVICE_MT_TRANSPORT 0x00000043
111 #define FILE_DEVICE_BIOMETRIC 0x00000044
112 #define FILE_DEVICE_PMI 0x00000045
114 $
endif (_WDMDDK_
|| _DEVIOCTL_
)
116 #if defined(NT_PROCESSOR_GROUPS)
118 typedef USHORT IRQ_DEVICE_POLICY
, *PIRQ_DEVICE_POLICY
;
120 typedef enum _IRQ_DEVICE_POLICY_USHORT
{
121 IrqPolicyMachineDefault
= 0,
122 IrqPolicyAllCloseProcessors
= 1,
123 IrqPolicyOneCloseProcessor
= 2,
124 IrqPolicyAllProcessorsInMachine
= 3,
125 IrqPolicyAllProcessorsInGroup
= 3,
126 IrqPolicySpecifiedProcessors
= 4,
127 IrqPolicySpreadMessagesAcrossAllProcessors
= 5};
129 #else /* defined(NT_PROCESSOR_GROUPS) */
131 typedef enum _IRQ_DEVICE_POLICY
{
132 IrqPolicyMachineDefault
= 0,
133 IrqPolicyAllCloseProcessors
,
134 IrqPolicyOneCloseProcessor
,
135 IrqPolicyAllProcessorsInMachine
,
136 IrqPolicySpecifiedProcessors
,
137 IrqPolicySpreadMessagesAcrossAllProcessors
138 } IRQ_DEVICE_POLICY
, *PIRQ_DEVICE_POLICY
;
142 typedef enum _IRQ_PRIORITY
{
143 IrqPriorityUndefined
= 0,
147 } IRQ_PRIORITY
, *PIRQ_PRIORITY
;
149 typedef enum _IRQ_GROUP_POLICY
{
150 GroupAffinityAllGroupZero
= 0,
151 GroupAffinityDontCare
152 } IRQ_GROUP_POLICY
, *PIRQ_GROUP_POLICY
;
154 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
156 typedef struct _OBJECT_HANDLE_INFORMATION
{
157 ULONG HandleAttributes
;
158 ACCESS_MASK GrantedAccess
;
159 } OBJECT_HANDLE_INFORMATION
, *POBJECT_HANDLE_INFORMATION
;
161 typedef struct _CLIENT_ID
{
162 HANDLE UniqueProcess
;
164 } CLIENT_ID
, *PCLIENT_ID
;
166 typedef struct _VPB
{
170 USHORT VolumeLabelLength
;
171 struct _DEVICE_OBJECT
*DeviceObject
;
172 struct _DEVICE_OBJECT
*RealDevice
;
174 ULONG ReferenceCount
;
175 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
/ sizeof(WCHAR
)];
178 typedef enum _IO_ALLOCATION_ACTION
{
181 DeallocateObjectKeepRegisters
182 } IO_ALLOCATION_ACTION
, *PIO_ALLOCATION_ACTION
;
184 typedef IO_ALLOCATION_ACTION
185 (NTAPI DRIVER_CONTROL
)(
186 IN
struct _DEVICE_OBJECT
*DeviceObject
,
188 IN PVOID MapRegisterBase
,
190 typedef DRIVER_CONTROL
*PDRIVER_CONTROL
;
192 typedef struct _WAIT_CONTEXT_BLOCK
{
193 KDEVICE_QUEUE_ENTRY WaitQueueEntry
;
194 PDRIVER_CONTROL DeviceRoutine
;
196 ULONG NumberOfMapRegisters
;
199 PKDPC BufferChainingDpc
;
200 } WAIT_CONTEXT_BLOCK
, *PWAIT_CONTEXT_BLOCK
;
204 /* DEVICE_OBJECT.Flags */
205 #define DO_DEVICE_HAS_NAME 0x00000040
206 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
207 #define DO_LONG_TERM_REQUESTS 0x00000200
208 #define DO_NEVER_LAST_DEVICE 0x00000400
209 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
210 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
211 #define DO_FORCE_NEITHER_IO 0x00080000
212 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
213 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
214 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
215 #define DO_DISALLOW_EXECUTE 0x00800000
219 /* DEVICE_OBJECT.Flags */
220 #define DO_VERIFY_VOLUME 0x00000002
221 #define DO_BUFFERED_IO 0x00000004
222 #define DO_EXCLUSIVE 0x00000008
223 #define DO_DIRECT_IO 0x00000010
224 #define DO_MAP_IO_BUFFER 0x00000020
225 #define DO_DEVICE_INITIALIZING 0x00000080
226 #define DO_SHUTDOWN_REGISTERED 0x00000800
227 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
228 #define DO_POWER_PAGABLE 0x00002000
229 #define DO_POWER_INRUSH 0x00004000
231 /* DEVICE_OBJECT.Characteristics */
232 #define FILE_REMOVABLE_MEDIA 0x00000001
233 #define FILE_READ_ONLY_DEVICE 0x00000002
234 #define FILE_FLOPPY_DISKETTE 0x00000004
235 #define FILE_WRITE_ONCE_MEDIA 0x00000008
236 #define FILE_REMOTE_DEVICE 0x00000010
237 #define FILE_DEVICE_IS_MOUNTED 0x00000020
238 #define FILE_VIRTUAL_VOLUME 0x00000040
239 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
240 #define FILE_DEVICE_SECURE_OPEN 0x00000100
241 #define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800
242 #define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000
243 #define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000
245 /* DEVICE_OBJECT.AlignmentRequirement */
246 #define FILE_BYTE_ALIGNMENT 0x00000000
247 #define FILE_WORD_ALIGNMENT 0x00000001
248 #define FILE_LONG_ALIGNMENT 0x00000003
249 #define FILE_QUAD_ALIGNMENT 0x00000007
250 #define FILE_OCTA_ALIGNMENT 0x0000000f
251 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
252 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
253 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
254 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
255 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
258 $
if (_WDMDDK_
|| _DEVIOCTL_
)
259 /* DEVICE_OBJECT.DeviceType */
260 #define DEVICE_TYPE ULONG
264 typedef struct _DEVICE_OBJECT
{
268 struct _DRIVER_OBJECT
*DriverObject
;
269 struct _DEVICE_OBJECT
*NextDevice
;
270 struct _DEVICE_OBJECT
*AttachedDevice
;
271 struct _IRP
*CurrentIrp
;
274 ULONG Characteristics
;
276 PVOID DeviceExtension
;
277 DEVICE_TYPE DeviceType
;
280 LIST_ENTRY ListEntry
;
281 WAIT_CONTEXT_BLOCK Wcb
;
283 ULONG AlignmentRequirement
;
284 KDEVICE_QUEUE DeviceQueue
;
286 ULONG ActiveThreadCount
;
287 PSECURITY_DESCRIPTOR SecurityDescriptor
;
291 struct _DEVOBJ_EXTENSION
*DeviceObjectExtension
;
293 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
295 typedef enum _IO_SESSION_STATE
{
296 IoSessionStateCreated
= 1,
297 IoSessionStateInitialized
,
298 IoSessionStateConnected
,
299 IoSessionStateDisconnected
,
300 IoSessionStateDisconnectedLoggedOn
,
301 IoSessionStateLoggedOn
,
302 IoSessionStateLoggedOff
,
303 IoSessionStateTerminated
,
305 } IO_SESSION_STATE
, *PIO_SESSION_STATE
;
307 typedef enum _IO_COMPLETION_ROUTINE_RESULT
{
308 ContinueCompletion
= STATUS_CONTINUE_COMPLETION
,
309 StopCompletion
= STATUS_MORE_PROCESSING_REQUIRED
310 } IO_COMPLETION_ROUTINE_RESULT
, *PIO_COMPLETION_ROUTINE_RESULT
;
312 typedef struct _IO_INTERRUPT_MESSAGE_INFO_ENTRY
{
313 PHYSICAL_ADDRESS MessageAddress
;
314 KAFFINITY TargetProcessorSet
;
315 PKINTERRUPT InterruptObject
;
319 KINTERRUPT_MODE Mode
;
320 KINTERRUPT_POLARITY Polarity
;
321 } IO_INTERRUPT_MESSAGE_INFO_ENTRY
, *PIO_INTERRUPT_MESSAGE_INFO_ENTRY
;
323 typedef struct _IO_INTERRUPT_MESSAGE_INFO
{
326 IO_INTERRUPT_MESSAGE_INFO_ENTRY MessageInfo
[1];
327 } IO_INTERRUPT_MESSAGE_INFO
, *PIO_INTERRUPT_MESSAGE_INFO
;
329 typedef struct _IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
{
330 IN PDEVICE_OBJECT PhysicalDeviceObject
;
331 OUT PKINTERRUPT
*InterruptObject
;
332 IN PKSERVICE_ROUTINE ServiceRoutine
;
333 IN PVOID ServiceContext
;
334 IN PKSPIN_LOCK SpinLock OPTIONAL
;
335 IN KIRQL SynchronizeIrql
;
336 IN BOOLEAN FloatingSave
;
337 IN BOOLEAN ShareVector
;
340 IN KINTERRUPT_MODE InterruptMode
;
341 IN KAFFINITY ProcessorEnableMask
;
343 } IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
;
345 typedef struct _IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
{
346 IN PDEVICE_OBJECT PhysicalDeviceObject
;
347 OUT PKINTERRUPT
*InterruptObject
;
348 IN PKSERVICE_ROUTINE ServiceRoutine
;
349 IN PVOID ServiceContext
;
350 IN PKSPIN_LOCK SpinLock OPTIONAL
;
351 IN KIRQL SynchronizeIrql OPTIONAL
;
352 IN BOOLEAN FloatingSave
;
353 } IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
;
355 typedef struct _IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
{
356 IN PDEVICE_OBJECT PhysicalDeviceObject
;
359 OUT PIO_INTERRUPT_MESSAGE_INFO
*InterruptMessageTable
;
360 OUT PKINTERRUPT
*InterruptObject
;
362 IN PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine
;
363 IN PVOID ServiceContext
;
364 IN PKSPIN_LOCK SpinLock OPTIONAL
;
365 IN KIRQL SynchronizeIrql OPTIONAL
;
366 IN BOOLEAN FloatingSave
;
367 IN PKSERVICE_ROUTINE FallBackServiceRoutine OPTIONAL
;
368 } IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
;
370 typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS
{
371 IN OUT ULONG Version
;
372 _ANONYMOUS_UNION
union {
373 IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified
;
374 IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased
;
375 IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased
;
377 } IO_CONNECT_INTERRUPT_PARAMETERS
, *PIO_CONNECT_INTERRUPT_PARAMETERS
;
379 typedef struct _IO_DISCONNECT_INTERRUPT_PARAMETERS
{
383 IN PKINTERRUPT InterruptObject
;
384 IN PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable
;
386 } IO_DISCONNECT_INTERRUPT_PARAMETERS
, *PIO_DISCONNECT_INTERRUPT_PARAMETERS
;
388 typedef enum _IO_ACCESS_TYPE
{
394 typedef enum _IO_ACCESS_MODE
{
399 typedef enum _IO_CONTAINER_NOTIFICATION_CLASS
{
400 IoSessionStateNotification
,
401 IoMaxContainerNotificationClass
402 } IO_CONTAINER_NOTIFICATION_CLASS
;
404 typedef struct _IO_SESSION_STATE_NOTIFICATION
{
410 } IO_SESSION_STATE_NOTIFICATION
, *PIO_SESSION_STATE_NOTIFICATION
;
412 typedef enum _IO_CONTAINER_INFORMATION_CLASS
{
413 IoSessionStateInformation
,
414 IoMaxContainerInformationClass
415 } IO_CONTAINER_INFORMATION_CLASS
;
417 typedef struct _IO_SESSION_STATE_INFORMATION
{
419 IO_SESSION_STATE SessionState
;
420 BOOLEAN LocalSession
;
421 } IO_SESSION_STATE_INFORMATION
, *PIO_SESSION_STATE_INFORMATION
;
423 #if (NTDDI_VERSION >= NTDDI_WIN7)
426 (NTAPI
*PIO_CONTAINER_NOTIFICATION_FUNCTION
)(
430 (NTAPI IO_SESSION_NOTIFICATION_FUNCTION
)(
431 IN PVOID SessionObject
,
435 IN PVOID NotificationPayload
,
436 IN ULONG PayloadLength
);
438 typedef IO_SESSION_NOTIFICATION_FUNCTION
*PIO_SESSION_NOTIFICATION_FUNCTION
;
442 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK
* PIO_REMOVE_LOCK_TRACKING_BLOCK
;
444 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK
{
447 volatile LONG IoCount
;
449 } IO_REMOVE_LOCK_COMMON_BLOCK
;
451 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK
{
454 LONGLONG MaxLockedTicks
;
458 volatile LONG LowMemoryCount
;
461 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks
;
462 } IO_REMOVE_LOCK_DBG_BLOCK
;
464 typedef struct _IO_REMOVE_LOCK
{
465 IO_REMOVE_LOCK_COMMON_BLOCK Common
;
467 IO_REMOVE_LOCK_DBG_BLOCK Dbg
;
469 } IO_REMOVE_LOCK
, *PIO_REMOVE_LOCK
;
471 typedef struct _IO_WORKITEM
*PIO_WORKITEM
;
474 (NTAPI IO_WORKITEM_ROUTINE
)(
475 IN PDEVICE_OBJECT DeviceObject
,
477 typedef IO_WORKITEM_ROUTINE
*PIO_WORKITEM_ROUTINE
;
480 (NTAPI IO_WORKITEM_ROUTINE_EX
)(
482 IN PVOID Context OPTIONAL
,
483 IN PIO_WORKITEM IoWorkItem
);
484 typedef IO_WORKITEM_ROUTINE_EX
*PIO_WORKITEM_ROUTINE_EX
;
486 typedef struct _SHARE_ACCESS
{
494 } SHARE_ACCESS
, *PSHARE_ACCESS
;
496 /* While MS WDK uses inheritance in C++, we cannot do this with gcc, as
497 inheritance, even from a struct renders the type non-POD. So we use
499 #define PCI_COMMON_HEADER_LAYOUT \
508 UCHAR CacheLineSize; \
509 UCHAR LatencyTimer; \
513 struct _PCI_HEADER_TYPE_0 { \
514 ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \
516 USHORT SubVendorID; \
517 USHORT SubSystemID; \
518 ULONG ROMBaseAddress; \
519 UCHAR CapabilitiesPtr; \
520 UCHAR Reserved1[3]; \
522 UCHAR InterruptLine; \
523 UCHAR InterruptPin; \
524 UCHAR MinimumGrant; \
525 UCHAR MaximumLatency; \
527 struct _PCI_HEADER_TYPE_1 { \
528 ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \
530 UCHAR SecondaryBus; \
531 UCHAR SubordinateBus; \
532 UCHAR SecondaryLatency; \
535 USHORT SecondaryStatus; \
537 USHORT MemoryLimit; \
538 USHORT PrefetchBase; \
539 USHORT PrefetchLimit; \
540 ULONG PrefetchBaseUpper32; \
541 ULONG PrefetchLimitUpper32; \
542 USHORT IOBaseUpper16; \
543 USHORT IOLimitUpper16; \
544 UCHAR CapabilitiesPtr; \
545 UCHAR Reserved1[3]; \
546 ULONG ROMBaseAddress; \
547 UCHAR InterruptLine; \
548 UCHAR InterruptPin; \
549 USHORT BridgeControl; \
551 struct _PCI_HEADER_TYPE_2 { \
552 ULONG SocketRegistersBaseAddress; \
553 UCHAR CapabilitiesPtr; \
555 USHORT SecondaryStatus; \
557 UCHAR SecondaryBus; \
558 UCHAR SubordinateBus; \
559 UCHAR SecondaryLatency; \
563 } Range[PCI_TYPE2_ADDRESSES-1]; \
564 UCHAR InterruptLine; \
565 UCHAR InterruptPin; \
566 USHORT BridgeControl; \
570 typedef enum _CREATE_FILE_TYPE
{
572 CreateFileTypeNamedPipe
,
573 CreateFileTypeMailslot
576 #define IO_FORCE_ACCESS_CHECK 0x001
577 #define IO_NO_PARAMETER_CHECKING 0x100
579 #define IO_REPARSE 0x0
580 #define IO_REMOUNT 0x1
582 typedef struct _IO_STATUS_BLOCK
{
583 _ANONYMOUS_UNION
union {
587 ULONG_PTR Information
;
588 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
591 typedef struct _IO_STATUS_BLOCK32
{
594 } IO_STATUS_BLOCK32
, *PIO_STATUS_BLOCK32
;
598 (NTAPI
*PIO_APC_ROUTINE
)(
600 IN PIO_STATUS_BLOCK IoStatusBlock
,
603 #define PIO_APC_ROUTINE_DEFINED
605 typedef enum _IO_SESSION_EVENT
{
606 IoSessionEventIgnore
= 0,
607 IoSessionEventCreated
,
608 IoSessionEventTerminated
,
609 IoSessionEventConnected
,
610 IoSessionEventDisconnected
,
612 IoSessionEventLogoff
,
614 } IO_SESSION_EVENT
, *PIO_SESSION_EVENT
;
616 #define IO_SESSION_STATE_ALL_EVENTS 0xffffffff
617 #define IO_SESSION_STATE_CREATION_EVENT 0x00000001
618 #define IO_SESSION_STATE_TERMINATION_EVENT 0x00000002
619 #define IO_SESSION_STATE_CONNECT_EVENT 0x00000004
620 #define IO_SESSION_STATE_DISCONNECT_EVENT 0x00000008
621 #define IO_SESSION_STATE_LOGON_EVENT 0x00000010
622 #define IO_SESSION_STATE_LOGOFF_EVENT 0x00000020
624 #define IO_SESSION_STATE_VALID_EVENT_MASK 0x0000003f
626 #define IO_SESSION_MAX_PAYLOAD_SIZE 256L
628 typedef struct _IO_SESSION_CONNECT_INFO
{
630 BOOLEAN LocalSession
;
631 } IO_SESSION_CONNECT_INFO
, *PIO_SESSION_CONNECT_INFO
;
633 #define EVENT_INCREMENT 1
634 #define IO_NO_INCREMENT 0
635 #define IO_CD_ROM_INCREMENT 1
636 #define IO_DISK_INCREMENT 1
637 #define IO_KEYBOARD_INCREMENT 6
638 #define IO_MAILSLOT_INCREMENT 2
639 #define IO_MOUSE_INCREMENT 6
640 #define IO_NAMED_PIPE_INCREMENT 2
641 #define IO_NETWORK_INCREMENT 2
642 #define IO_PARALLEL_INCREMENT 1
643 #define IO_SERIAL_INCREMENT 2
644 #define IO_SOUND_INCREMENT 8
645 #define IO_VIDEO_INCREMENT 1
646 #define SEMAPHORE_INCREMENT 1
648 #define MM_MAXIMUM_DISK_IO_SIZE (0x10000)
650 typedef struct _BOOTDISK_INFORMATION
{
651 LONGLONG BootPartitionOffset
;
652 LONGLONG SystemPartitionOffset
;
653 ULONG BootDeviceSignature
;
654 ULONG SystemDeviceSignature
;
655 } BOOTDISK_INFORMATION
, *PBOOTDISK_INFORMATION
;
657 typedef struct _BOOTDISK_INFORMATION_EX
{
658 LONGLONG BootPartitionOffset
;
659 LONGLONG SystemPartitionOffset
;
660 ULONG BootDeviceSignature
;
661 ULONG SystemDeviceSignature
;
663 GUID SystemDeviceGuid
;
664 BOOLEAN BootDeviceIsGpt
;
665 BOOLEAN SystemDeviceIsGpt
;
666 } BOOTDISK_INFORMATION_EX
, *PBOOTDISK_INFORMATION_EX
;
668 #if (NTDDI_VERSION >= NTDDI_WIN7)
670 typedef struct _LOADER_PARTITION_INFORMATION_EX
{
671 ULONG PartitionStyle
;
672 ULONG PartitionNumber
;
673 _ANONYMOUS_UNION
union {
678 } LOADER_PARTITION_INFORMATION_EX
, *PLOADER_PARTITION_INFORMATION_EX
;
680 typedef struct _BOOTDISK_INFORMATION_LITE
{
682 LOADER_PARTITION_INFORMATION_EX Entries
[1];
683 } BOOTDISK_INFORMATION_LITE
, *PBOOTDISK_INFORMATION_LITE
;
687 #if (NTDDI_VERSION >= NTDDI_VISTA)
688 typedef struct _BOOTDISK_INFORMATION_LITE
{
689 ULONG BootDeviceSignature
;
690 ULONG SystemDeviceSignature
;
692 GUID SystemDeviceGuid
;
693 BOOLEAN BootDeviceIsGpt
;
694 BOOLEAN SystemDeviceIsGpt
;
695 } BOOTDISK_INFORMATION_LITE
, *PBOOTDISK_INFORMATION_LITE
;
696 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
698 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
700 #include <pshpack1.h>
702 typedef struct _EISA_MEMORY_TYPE
{
710 } EISA_MEMORY_TYPE
, *PEISA_MEMORY_TYPE
;
712 typedef struct _EISA_MEMORY_CONFIGURATION
{
713 EISA_MEMORY_TYPE ConfigurationByte
;
715 USHORT AddressLowWord
;
716 UCHAR AddressHighByte
;
718 } EISA_MEMORY_CONFIGURATION
, *PEISA_MEMORY_CONFIGURATION
;
720 typedef struct _EISA_IRQ_DESCRIPTOR
{
723 UCHAR LevelTriggered
:1;
726 } EISA_IRQ_DESCRIPTOR
, *PEISA_IRQ_DESCRIPTOR
;
728 typedef struct _EISA_IRQ_CONFIGURATION
{
729 EISA_IRQ_DESCRIPTOR ConfigurationByte
;
731 } EISA_IRQ_CONFIGURATION
, *PEISA_IRQ_CONFIGURATION
;
733 typedef struct _DMA_CONFIGURATION_BYTE0
{
738 } DMA_CONFIGURATION_BYTE0
;
740 typedef struct _DMA_CONFIGURATION_BYTE1
{
742 UCHAR TransferSize
:2;
745 } DMA_CONFIGURATION_BYTE1
;
747 typedef struct _EISA_DMA_CONFIGURATION
{
748 DMA_CONFIGURATION_BYTE0 ConfigurationByte0
;
749 DMA_CONFIGURATION_BYTE1 ConfigurationByte1
;
750 } EISA_DMA_CONFIGURATION
, *PEISA_DMA_CONFIGURATION
;
752 typedef struct _EISA_PORT_DESCRIPTOR
{
757 } EISA_PORT_DESCRIPTOR
, *PEISA_PORT_DESCRIPTOR
;
759 typedef struct _EISA_PORT_CONFIGURATION
{
760 EISA_PORT_DESCRIPTOR Configuration
;
762 } EISA_PORT_CONFIGURATION
, *PEISA_PORT_CONFIGURATION
;
764 typedef struct _CM_EISA_SLOT_INFORMATION
{
770 UCHAR NumberFunctions
;
771 UCHAR FunctionInformation
;
773 } CM_EISA_SLOT_INFORMATION
, *PCM_EISA_SLOT_INFORMATION
;
775 typedef struct _CM_EISA_FUNCTION_INFORMATION
{
781 UCHAR Selections
[26];
783 UCHAR TypeString
[80];
784 EISA_MEMORY_CONFIGURATION EisaMemory
[9];
785 EISA_IRQ_CONFIGURATION EisaIrq
[7];
786 EISA_DMA_CONFIGURATION EisaDma
[4];
787 EISA_PORT_CONFIGURATION EisaPort
[20];
788 UCHAR InitializationData
[60];
789 } CM_EISA_FUNCTION_INFORMATION
, *PCM_EISA_FUNCTION_INFORMATION
;
793 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
795 #define EISA_FUNCTION_ENABLED 0x80
796 #define EISA_FREE_FORM_DATA 0x40
797 #define EISA_HAS_PORT_INIT_ENTRY 0x20
798 #define EISA_HAS_PORT_RANGE 0x10
799 #define EISA_HAS_DMA_ENTRY 0x08
800 #define EISA_HAS_IRQ_ENTRY 0x04
801 #define EISA_HAS_MEMORY_ENTRY 0x02
802 #define EISA_HAS_TYPE_ENTRY 0x01
803 #define EISA_HAS_INFORMATION \
804 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
805 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
807 #define EISA_MORE_ENTRIES 0x80
808 #define EISA_SYSTEM_MEMORY 0x00
809 #define EISA_MEMORY_TYPE_RAM 0x01
811 /* CM_EISA_SLOT_INFORMATION.ReturnCode */
813 #define EISA_INVALID_SLOT 0x80
814 #define EISA_INVALID_FUNCTION 0x81
815 #define EISA_INVALID_CONFIGURATION 0x82
816 #define EISA_EMPTY_SLOT 0x83
817 #define EISA_INVALID_BIOS_CALL 0x86
820 ** Plug and Play structures
824 (NTAPI
*PINTERFACE_REFERENCE
)(
828 (NTAPI
*PINTERFACE_DEREFERENCE
)(
832 (NTAPI TRANSLATE_BUS_ADDRESS
)(
834 IN PHYSICAL_ADDRESS BusAddress
,
836 IN OUT PULONG AddressSpace
,
837 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
838 typedef TRANSLATE_BUS_ADDRESS
*PTRANSLATE_BUS_ADDRESS
;
840 typedef struct _DMA_ADAPTER
*
841 (NTAPI GET_DMA_ADAPTER
)(
843 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
844 OUT PULONG NumberOfMapRegisters
);
845 typedef GET_DMA_ADAPTER
*PGET_DMA_ADAPTER
;
848 (NTAPI GET_SET_DEVICE_DATA
)(
854 typedef GET_SET_DEVICE_DATA
*PGET_SET_DEVICE_DATA
;
856 typedef enum _DEVICE_INSTALL_STATE
{
857 InstallStateInstalled
,
858 InstallStateNeedsReinstall
,
859 InstallStateFailedInstall
,
860 InstallStateFinishInstall
861 } DEVICE_INSTALL_STATE
, *PDEVICE_INSTALL_STATE
;
863 typedef struct _LEGACY_BUS_INFORMATION
{
865 INTERFACE_TYPE LegacyBusType
;
867 } LEGACY_BUS_INFORMATION
, *PLEGACY_BUS_INFORMATION
;
869 typedef enum _DEVICE_REMOVAL_POLICY
{
870 RemovalPolicyExpectNoRemoval
= 1,
871 RemovalPolicyExpectOrderlyRemoval
= 2,
872 RemovalPolicyExpectSurpriseRemoval
= 3
873 } DEVICE_REMOVAL_POLICY
, *PDEVICE_REMOVAL_POLICY
;
876 (NTAPI
*PREENUMERATE_SELF
)(
879 typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD
{
883 PINTERFACE_REFERENCE InterfaceReference
;
884 PINTERFACE_DEREFERENCE InterfaceDereference
;
885 PREENUMERATE_SELF SurpriseRemoveAndReenumerateSelf
;
886 } REENUMERATE_SELF_INTERFACE_STANDARD
, *PREENUMERATE_SELF_INTERFACE_STANDARD
;
889 (NTAPI
*PIO_DEVICE_EJECT_CALLBACK
)(
891 IN OUT PVOID Context OPTIONAL
);
893 #define PCI_DEVICE_PRESENT_INTERFACE_VERSION 1
895 /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
896 #define PCI_USE_SUBSYSTEM_IDS 0x00000001
897 #define PCI_USE_REVISION 0x00000002
898 #define PCI_USE_VENDEV_IDS 0x00000004
899 #define PCI_USE_CLASS_SUBCLASS 0x00000008
900 #define PCI_USE_PROGIF 0x00000010
901 #define PCI_USE_LOCAL_BUS 0x00000020
902 #define PCI_USE_LOCAL_DEVICE 0x00000040
904 typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS
{
915 } PCI_DEVICE_PRESENCE_PARAMETERS
, *PPCI_DEVICE_PRESENCE_PARAMETERS
;
918 (NTAPI PCI_IS_DEVICE_PRESENT
)(
922 IN USHORT SubVendorID
,
923 IN USHORT SubSystemID
,
925 typedef PCI_IS_DEVICE_PRESENT
*PPCI_IS_DEVICE_PRESENT
;
928 (NTAPI PCI_IS_DEVICE_PRESENT_EX
)(
930 IN PPCI_DEVICE_PRESENCE_PARAMETERS Parameters
);
931 typedef PCI_IS_DEVICE_PRESENT_EX
*PPCI_IS_DEVICE_PRESENT_EX
;
933 typedef struct _BUS_INTERFACE_STANDARD
{
937 PINTERFACE_REFERENCE InterfaceReference
;
938 PINTERFACE_DEREFERENCE InterfaceDereference
;
939 PTRANSLATE_BUS_ADDRESS TranslateBusAddress
;
940 PGET_DMA_ADAPTER GetDmaAdapter
;
941 PGET_SET_DEVICE_DATA SetBusData
;
942 PGET_SET_DEVICE_DATA GetBusData
;
943 } BUS_INTERFACE_STANDARD
, *PBUS_INTERFACE_STANDARD
;
945 typedef struct _PCI_DEVICE_PRESENT_INTERFACE
{
949 PINTERFACE_REFERENCE InterfaceReference
;
950 PINTERFACE_DEREFERENCE InterfaceDereference
;
951 PPCI_IS_DEVICE_PRESENT IsDevicePresent
;
952 PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx
;
953 } PCI_DEVICE_PRESENT_INTERFACE
, *PPCI_DEVICE_PRESENT_INTERFACE
;
955 typedef struct _DEVICE_CAPABILITIES
{
960 ULONG LockSupported
:1;
961 ULONG EjectSupported
:1;
965 ULONG SilentInstall
:1;
967 ULONG SurpriseRemovalOK
:1;
972 ULONG HardwareDisabled
:1;
974 ULONG WarmEjectSupported
:1;
975 ULONG NoDisplayInUI
:1;
979 DEVICE_POWER_STATE DeviceState
[PowerSystemMaximum
];
980 SYSTEM_POWER_STATE SystemWake
;
981 DEVICE_POWER_STATE DeviceWake
;
985 } DEVICE_CAPABILITIES
, *PDEVICE_CAPABILITIES
;
987 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION
{
991 GUID InterfaceClassGuid
;
992 PUNICODE_STRING SymbolicLinkName
;
993 } DEVICE_INTERFACE_CHANGE_NOTIFICATION
, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION
;
995 typedef struct _HWPROFILE_CHANGE_NOTIFICATION
{
999 } HWPROFILE_CHANGE_NOTIFICATION
, *PHWPROFILE_CHANGE_NOTIFICATION
;
1003 typedef struct _INTERFACE
{
1007 PINTERFACE_REFERENCE InterfaceReference
;
1008 PINTERFACE_DEREFERENCE InterfaceDereference
;
1009 } INTERFACE
, *PINTERFACE
;
1011 typedef struct _PLUGPLAY_NOTIFICATION_HEADER
{
1015 } PLUGPLAY_NOTIFICATION_HEADER
, *PPLUGPLAY_NOTIFICATION_HEADER
;
1017 typedef ULONG PNP_DEVICE_STATE
, *PPNP_DEVICE_STATE
;
1019 /* PNP_DEVICE_STATE */
1021 #define PNP_DEVICE_DISABLED 0x00000001
1022 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
1023 #define PNP_DEVICE_FAILED 0x00000004
1024 #define PNP_DEVICE_REMOVED 0x00000008
1025 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
1026 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
1028 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION
{
1032 struct _FILE_OBJECT
*FileObject
;
1033 LONG NameBufferOffset
;
1034 UCHAR CustomDataBuffer
[1];
1035 } TARGET_DEVICE_CUSTOM_NOTIFICATION
, *PTARGET_DEVICE_CUSTOM_NOTIFICATION
;
1037 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION
{
1041 struct _FILE_OBJECT
*FileObject
;
1042 } TARGET_DEVICE_REMOVAL_NOTIFICATION
, *PTARGET_DEVICE_REMOVAL_NOTIFICATION
;
1044 #if (NTDDI_VERSION >= NTDDI_VISTA)
1045 #include <devpropdef.h>
1046 #define PLUGPLAY_PROPERTY_PERSISTENT 0x00000001
1049 #define PNP_REPLACE_NO_MAP MAXLONGLONG
1052 (NTAPI
*PREPLACE_MAP_MEMORY
)(
1053 IN PHYSICAL_ADDRESS TargetPhysicalAddress
,
1054 IN PHYSICAL_ADDRESS SparePhysicalAddress
,
1055 IN OUT PLARGE_INTEGER NumberOfBytes
,
1056 OUT PVOID
*TargetAddress
,
1057 OUT PVOID
*SpareAddress
);
1059 typedef struct _PNP_REPLACE_MEMORY_LIST
{
1060 ULONG AllocatedCount
;
1062 ULONGLONG TotalLength
;
1064 PHYSICAL_ADDRESS Address
;
1066 } Ranges
[ANYSIZE_ARRAY
];
1067 } PNP_REPLACE_MEMORY_LIST
, *PPNP_REPLACE_MEMORY_LIST
;
1069 typedef struct _PNP_REPLACE_PROCESSOR_LIST
{
1070 PKAFFINITY Affinity
;
1072 ULONG AllocatedCount
;
1074 ULONG ApicIds
[ANYSIZE_ARRAY
];
1075 } PNP_REPLACE_PROCESSOR_LIST
, *PPNP_REPLACE_PROCESSOR_LIST
;
1077 typedef struct _PNP_REPLACE_PROCESSOR_LIST_V1
{
1078 KAFFINITY AffinityMask
;
1079 ULONG AllocatedCount
;
1081 ULONG ApicIds
[ANYSIZE_ARRAY
];
1082 } PNP_REPLACE_PROCESSOR_LIST_V1
, *PPNP_REPLACE_PROCESSOR_LIST_V1
;
1084 #define PNP_REPLACE_PARAMETERS_VERSION 2
1086 typedef struct _PNP_REPLACE_PARAMETERS
{
1091 PPNP_REPLACE_PROCESSOR_LIST TargetProcessors
;
1092 PPNP_REPLACE_PROCESSOR_LIST SpareProcessors
;
1093 PPNP_REPLACE_MEMORY_LIST TargetMemory
;
1094 PPNP_REPLACE_MEMORY_LIST SpareMemory
;
1095 PREPLACE_MAP_MEMORY MapMemory
;
1096 } PNP_REPLACE_PARAMETERS
, *PPNP_REPLACE_PARAMETERS
;
1099 (NTAPI
*PREPLACE_UNLOAD
)(
1103 (NTAPI
*PREPLACE_BEGIN
)(
1104 IN PPNP_REPLACE_PARAMETERS Parameters
,
1105 OUT PVOID
*Context
);
1108 (NTAPI
*PREPLACE_END
)(
1112 (NTAPI
*PREPLACE_MIRROR_PHYSICAL_MEMORY
)(
1114 IN PHYSICAL_ADDRESS PhysicalAddress
,
1115 IN LARGE_INTEGER ByteCount
);
1118 (NTAPI
*PREPLACE_SET_PROCESSOR_ID
)(
1124 (NTAPI
*PREPLACE_SWAP
)(
1128 (NTAPI
*PREPLACE_INITIATE_HARDWARE_MIRROR
)(
1132 (NTAPI
*PREPLACE_MIRROR_PLATFORM_MEMORY
)(
1136 (NTAPI
*PREPLACE_GET_MEMORY_DESTINATION
)(
1138 IN PHYSICAL_ADDRESS SourceAddress
,
1139 OUT PPHYSICAL_ADDRESS DestinationAddress
);
1142 (NTAPI
*PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE
)(
1146 #define PNP_REPLACE_DRIVER_INTERFACE_VERSION 1
1147 #define PNP_REPLACE_DRIVER_INTERFACE_MINIMUM_SIZE \
1148 FIELD_OFFSET(PNP_REPLACE_DRIVER_INTERFACE, InitiateHardwareMirror)
1150 #define PNP_REPLACE_MEMORY_SUPPORTED 0x0001
1151 #define PNP_REPLACE_PROCESSOR_SUPPORTED 0x0002
1152 #define PNP_REPLACE_HARDWARE_MEMORY_MIRRORING 0x0004
1153 #define PNP_REPLACE_HARDWARE_PAGE_COPY 0x0008
1154 #define PNP_REPLACE_HARDWARE_QUIESCE 0x0010
1156 typedef struct _PNP_REPLACE_DRIVER_INTERFACE
{
1160 PREPLACE_UNLOAD Unload
;
1161 PREPLACE_BEGIN BeginReplace
;
1162 PREPLACE_END EndReplace
;
1163 PREPLACE_MIRROR_PHYSICAL_MEMORY MirrorPhysicalMemory
;
1164 PREPLACE_SET_PROCESSOR_ID SetProcessorId
;
1166 PREPLACE_INITIATE_HARDWARE_MIRROR InitiateHardwareMirror
;
1167 PREPLACE_MIRROR_PLATFORM_MEMORY MirrorPlatformMemory
;
1168 PREPLACE_GET_MEMORY_DESTINATION GetMemoryDestination
;
1169 PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE EnableDisableHardwareQuiesce
;
1170 } PNP_REPLACE_DRIVER_INTERFACE
, *PPNP_REPLACE_DRIVER_INTERFACE
;
1173 (NTAPI
*PREPLACE_DRIVER_INIT
)(
1174 IN OUT PPNP_REPLACE_DRIVER_INTERFACE Interface
,
1177 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE
{
1178 DeviceUsageTypeUndefined
,
1179 DeviceUsageTypePaging
,
1180 DeviceUsageTypeHibernation
,
1181 DeviceUsageTypeDumpFile
1182 } DEVICE_USAGE_NOTIFICATION_TYPE
;
1184 typedef struct _POWER_SEQUENCE
{
1188 } POWER_SEQUENCE
, *PPOWER_SEQUENCE
;
1191 DevicePropertyDeviceDescription
= 0x0,
1192 DevicePropertyHardwareID
= 0x1,
1193 DevicePropertyCompatibleIDs
= 0x2,
1194 DevicePropertyBootConfiguration
= 0x3,
1195 DevicePropertyBootConfigurationTranslated
= 0x4,
1196 DevicePropertyClassName
= 0x5,
1197 DevicePropertyClassGuid
= 0x6,
1198 DevicePropertyDriverKeyName
= 0x7,
1199 DevicePropertyManufacturer
= 0x8,
1200 DevicePropertyFriendlyName
= 0x9,
1201 DevicePropertyLocationInformation
= 0xa,
1202 DevicePropertyPhysicalDeviceObjectName
= 0xb,
1203 DevicePropertyBusTypeGuid
= 0xc,
1204 DevicePropertyLegacyBusType
= 0xd,
1205 DevicePropertyBusNumber
= 0xe,
1206 DevicePropertyEnumeratorName
= 0xf,
1207 DevicePropertyAddress
= 0x10,
1208 DevicePropertyUINumber
= 0x11,
1209 DevicePropertyInstallState
= 0x12,
1210 DevicePropertyRemovalPolicy
= 0x13,
1211 DevicePropertyResourceRequirements
= 0x14,
1212 DevicePropertyAllocatedResources
= 0x15,
1213 DevicePropertyContainerID
= 0x16
1214 } DEVICE_REGISTRY_PROPERTY
;
1216 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY
{
1217 EventCategoryReserved
,
1218 EventCategoryHardwareProfileChange
,
1219 EventCategoryDeviceInterfaceChange
,
1220 EventCategoryTargetDeviceChange
1221 } IO_NOTIFICATION_EVENT_CATEGORY
;
1223 typedef enum _IO_PRIORITY_HINT
{
1224 IoPriorityVeryLow
= 0,
1232 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
1235 (NTAPI DRIVER_NOTIFICATION_CALLBACK_ROUTINE
)(
1236 IN PVOID NotificationStructure
,
1238 typedef DRIVER_NOTIFICATION_CALLBACK_ROUTINE
*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE
;
1241 (NTAPI DEVICE_CHANGE_COMPLETE_CALLBACK
)(
1243 typedef DEVICE_CHANGE_COMPLETE_CALLBACK
*PDEVICE_CHANGE_COMPLETE_CALLBACK
;
1245 typedef enum _FILE_INFORMATION_CLASS
{
1246 FileDirectoryInformation
= 1,
1247 FileFullDirectoryInformation
,
1248 FileBothDirectoryInformation
,
1249 FileBasicInformation
,
1250 FileStandardInformation
,
1251 FileInternalInformation
,
1253 FileAccessInformation
,
1254 FileNameInformation
,
1255 FileRenameInformation
,
1256 FileLinkInformation
,
1257 FileNamesInformation
,
1258 FileDispositionInformation
,
1259 FilePositionInformation
,
1260 FileFullEaInformation
,
1261 FileModeInformation
,
1262 FileAlignmentInformation
,
1264 FileAllocationInformation
,
1265 FileEndOfFileInformation
,
1266 FileAlternateNameInformation
,
1267 FileStreamInformation
,
1268 FilePipeInformation
,
1269 FilePipeLocalInformation
,
1270 FilePipeRemoteInformation
,
1271 FileMailslotQueryInformation
,
1272 FileMailslotSetInformation
,
1273 FileCompressionInformation
,
1274 FileObjectIdInformation
,
1275 FileCompletionInformation
,
1276 FileMoveClusterInformation
,
1277 FileQuotaInformation
,
1278 FileReparsePointInformation
,
1279 FileNetworkOpenInformation
,
1280 FileAttributeTagInformation
,
1281 FileTrackingInformation
,
1282 FileIdBothDirectoryInformation
,
1283 FileIdFullDirectoryInformation
,
1284 FileValidDataLengthInformation
,
1285 FileShortNameInformation
,
1286 FileIoCompletionNotificationInformation
,
1287 FileIoStatusBlockRangeInformation
,
1288 FileIoPriorityHintInformation
,
1289 FileSfioReserveInformation
,
1290 FileSfioVolumeInformation
,
1291 FileHardLinkInformation
,
1292 FileProcessIdsUsingFileInformation
,
1293 FileNormalizedNameInformation
,
1294 FileNetworkPhysicalNameInformation
,
1295 FileIdGlobalTxDirectoryInformation
,
1296 FileIsRemoteDeviceInformation
,
1297 FileAttributeCacheInformation
,
1298 FileNumaNodeInformation
,
1299 FileStandardLinkInformation
,
1300 FileRemoteProtocolInformation
,
1301 FileMaximumInformation
1302 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
1304 typedef struct _FILE_POSITION_INFORMATION
{
1305 LARGE_INTEGER CurrentByteOffset
;
1306 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
1308 typedef struct _FILE_BASIC_INFORMATION
{
1309 LARGE_INTEGER CreationTime
;
1310 LARGE_INTEGER LastAccessTime
;
1311 LARGE_INTEGER LastWriteTime
;
1312 LARGE_INTEGER ChangeTime
;
1313 ULONG FileAttributes
;
1314 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
1316 typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION
{
1317 IO_PRIORITY_HINT PriorityHint
;
1318 } FILE_IO_PRIORITY_HINT_INFORMATION
, *PFILE_IO_PRIORITY_HINT_INFORMATION
;
1320 typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
{
1322 } FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION
;
1324 typedef struct _FILE_IOSTATUSBLOCK_RANGE_INFORMATION
{
1325 PUCHAR IoStatusBlockRange
;
1327 } FILE_IOSTATUSBLOCK_RANGE_INFORMATION
, *PFILE_IOSTATUSBLOCK_RANGE_INFORMATION
;
1329 typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION
{
1331 } FILE_IS_REMOTE_DEVICE_INFORMATION
, *PFILE_IS_REMOTE_DEVICE_INFORMATION
;
1333 typedef struct _FILE_NUMA_NODE_INFORMATION
{
1335 } FILE_NUMA_NODE_INFORMATION
, *PFILE_NUMA_NODE_INFORMATION
;
1337 typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION
{
1338 ULONG NumberOfProcessIdsInList
;
1339 ULONG_PTR ProcessIdList
[1];
1340 } FILE_PROCESS_IDS_USING_FILE_INFORMATION
, *PFILE_PROCESS_IDS_USING_FILE_INFORMATION
;
1342 typedef struct _FILE_STANDARD_INFORMATION
{
1343 LARGE_INTEGER AllocationSize
;
1344 LARGE_INTEGER EndOfFile
;
1345 ULONG NumberOfLinks
;
1346 BOOLEAN DeletePending
;
1348 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
1350 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
1351 LARGE_INTEGER CreationTime
;
1352 LARGE_INTEGER LastAccessTime
;
1353 LARGE_INTEGER LastWriteTime
;
1354 LARGE_INTEGER ChangeTime
;
1355 LARGE_INTEGER AllocationSize
;
1356 LARGE_INTEGER EndOfFile
;
1357 ULONG FileAttributes
;
1358 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
1360 typedef enum _FSINFOCLASS
{
1361 FileFsVolumeInformation
= 1,
1362 FileFsLabelInformation
,
1363 FileFsSizeInformation
,
1364 FileFsDeviceInformation
,
1365 FileFsAttributeInformation
,
1366 FileFsControlInformation
,
1367 FileFsFullSizeInformation
,
1368 FileFsObjectIdInformation
,
1369 FileFsDriverPathInformation
,
1370 FileFsVolumeFlagsInformation
,
1371 FileFsMaximumInformation
1372 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
1374 typedef struct _FILE_FS_DEVICE_INFORMATION
{
1375 DEVICE_TYPE DeviceType
;
1376 ULONG Characteristics
;
1377 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
1379 typedef struct _FILE_FULL_EA_INFORMATION
{
1380 ULONG NextEntryOffset
;
1383 USHORT EaValueLength
;
1385 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
1387 typedef struct _FILE_SFIO_RESERVE_INFORMATION
{
1388 ULONG RequestsPerPeriod
;
1390 BOOLEAN RetryFailures
;
1391 BOOLEAN Discardable
;
1393 ULONG NumOutstandingRequests
;
1394 } FILE_SFIO_RESERVE_INFORMATION
, *PFILE_SFIO_RESERVE_INFORMATION
;
1396 typedef struct _FILE_SFIO_VOLUME_INFORMATION
{
1397 ULONG MaximumRequestsPerPeriod
;
1398 ULONG MinimumPeriod
;
1399 ULONG MinimumTransferSize
;
1400 } FILE_SFIO_VOLUME_INFORMATION
, *PFILE_SFIO_VOLUME_INFORMATION
;
1402 #define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1
1403 #define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2
1404 #define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4
1406 #define FM_LOCK_BIT (0x1)
1407 #define FM_LOCK_BIT_V (0x0)
1408 #define FM_LOCK_WAITER_WOKEN (0x2)
1409 #define FM_LOCK_WAITER_INC (0x4)
1412 (NTAPI FAST_IO_CHECK_IF_POSSIBLE
)(
1413 IN
struct _FILE_OBJECT
*FileObject
,
1414 IN PLARGE_INTEGER FileOffset
,
1418 IN BOOLEAN CheckForReadOperation
,
1419 OUT PIO_STATUS_BLOCK IoStatus
,
1420 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1421 typedef FAST_IO_CHECK_IF_POSSIBLE
*PFAST_IO_CHECK_IF_POSSIBLE
;
1424 (NTAPI FAST_IO_READ
)(
1425 IN
struct _FILE_OBJECT
*FileObject
,
1426 IN PLARGE_INTEGER FileOffset
,
1431 OUT PIO_STATUS_BLOCK IoStatus
,
1432 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1433 typedef FAST_IO_READ
*PFAST_IO_READ
;
1436 (NTAPI FAST_IO_WRITE
)(
1437 IN
struct _FILE_OBJECT
*FileObject
,
1438 IN PLARGE_INTEGER FileOffset
,
1443 OUT PIO_STATUS_BLOCK IoStatus
,
1444 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1445 typedef FAST_IO_WRITE
*PFAST_IO_WRITE
;
1448 (NTAPI FAST_IO_QUERY_BASIC_INFO
)(
1449 IN
struct _FILE_OBJECT
*FileObject
,
1451 OUT PFILE_BASIC_INFORMATION Buffer
,
1452 OUT PIO_STATUS_BLOCK IoStatus
,
1453 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1454 typedef FAST_IO_QUERY_BASIC_INFO
*PFAST_IO_QUERY_BASIC_INFO
;
1457 (NTAPI FAST_IO_QUERY_STANDARD_INFO
)(
1458 IN
struct _FILE_OBJECT
*FileObject
,
1460 OUT PFILE_STANDARD_INFORMATION Buffer
,
1461 OUT PIO_STATUS_BLOCK IoStatus
,
1462 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1463 typedef FAST_IO_QUERY_STANDARD_INFO
*PFAST_IO_QUERY_STANDARD_INFO
;
1466 (NTAPI FAST_IO_LOCK
)(
1467 IN
struct _FILE_OBJECT
*FileObject
,
1468 IN PLARGE_INTEGER FileOffset
,
1469 IN PLARGE_INTEGER Length
,
1470 PEPROCESS ProcessId
,
1472 BOOLEAN FailImmediately
,
1473 BOOLEAN ExclusiveLock
,
1474 OUT PIO_STATUS_BLOCK IoStatus
,
1475 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1476 typedef FAST_IO_LOCK
*PFAST_IO_LOCK
;
1479 (NTAPI FAST_IO_UNLOCK_SINGLE
)(
1480 IN
struct _FILE_OBJECT
*FileObject
,
1481 IN PLARGE_INTEGER FileOffset
,
1482 IN PLARGE_INTEGER Length
,
1483 PEPROCESS ProcessId
,
1485 OUT PIO_STATUS_BLOCK IoStatus
,
1486 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1487 typedef FAST_IO_UNLOCK_SINGLE
*PFAST_IO_UNLOCK_SINGLE
;
1490 (NTAPI FAST_IO_UNLOCK_ALL
)(
1491 IN
struct _FILE_OBJECT
*FileObject
,
1492 PEPROCESS ProcessId
,
1493 OUT PIO_STATUS_BLOCK IoStatus
,
1494 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1495 typedef FAST_IO_UNLOCK_ALL
*PFAST_IO_UNLOCK_ALL
;
1498 (NTAPI FAST_IO_UNLOCK_ALL_BY_KEY
)(
1499 IN
struct _FILE_OBJECT
*FileObject
,
1502 OUT PIO_STATUS_BLOCK IoStatus
,
1503 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1504 typedef FAST_IO_UNLOCK_ALL_BY_KEY
*PFAST_IO_UNLOCK_ALL_BY_KEY
;
1507 (NTAPI FAST_IO_DEVICE_CONTROL
)(
1508 IN
struct _FILE_OBJECT
*FileObject
,
1510 IN PVOID InputBuffer OPTIONAL
,
1511 IN ULONG InputBufferLength
,
1512 OUT PVOID OutputBuffer OPTIONAL
,
1513 IN ULONG OutputBufferLength
,
1514 IN ULONG IoControlCode
,
1515 OUT PIO_STATUS_BLOCK IoStatus
,
1516 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1517 typedef FAST_IO_DEVICE_CONTROL
*PFAST_IO_DEVICE_CONTROL
;
1520 (NTAPI FAST_IO_ACQUIRE_FILE
)(
1521 IN
struct _FILE_OBJECT
*FileObject
);
1522 typedef FAST_IO_ACQUIRE_FILE
*PFAST_IO_ACQUIRE_FILE
;
1525 (NTAPI FAST_IO_RELEASE_FILE
)(
1526 IN
struct _FILE_OBJECT
*FileObject
);
1527 typedef FAST_IO_RELEASE_FILE
*PFAST_IO_RELEASE_FILE
;
1530 (NTAPI FAST_IO_DETACH_DEVICE
)(
1531 IN
struct _DEVICE_OBJECT
*SourceDevice
,
1532 IN
struct _DEVICE_OBJECT
*TargetDevice
);
1533 typedef FAST_IO_DETACH_DEVICE
*PFAST_IO_DETACH_DEVICE
;
1536 (NTAPI FAST_IO_QUERY_NETWORK_OPEN_INFO
)(
1537 IN
struct _FILE_OBJECT
*FileObject
,
1539 OUT
struct _FILE_NETWORK_OPEN_INFORMATION
*Buffer
,
1540 OUT
struct _IO_STATUS_BLOCK
*IoStatus
,
1541 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1542 typedef FAST_IO_QUERY_NETWORK_OPEN_INFO
*PFAST_IO_QUERY_NETWORK_OPEN_INFO
;
1545 (NTAPI FAST_IO_ACQUIRE_FOR_MOD_WRITE
)(
1546 IN
struct _FILE_OBJECT
*FileObject
,
1547 IN PLARGE_INTEGER EndingOffset
,
1548 OUT
struct _ERESOURCE
**ResourceToRelease
,
1549 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1550 typedef FAST_IO_ACQUIRE_FOR_MOD_WRITE
*PFAST_IO_ACQUIRE_FOR_MOD_WRITE
;
1553 (NTAPI FAST_IO_MDL_READ
)(
1554 IN
struct _FILE_OBJECT
*FileObject
,
1555 IN PLARGE_INTEGER FileOffset
,
1559 OUT PIO_STATUS_BLOCK IoStatus
,
1560 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1561 typedef FAST_IO_MDL_READ
*PFAST_IO_MDL_READ
;
1564 (NTAPI FAST_IO_MDL_READ_COMPLETE
)(
1565 IN
struct _FILE_OBJECT
*FileObject
,
1567 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1568 typedef FAST_IO_MDL_READ_COMPLETE
*PFAST_IO_MDL_READ_COMPLETE
;
1571 (NTAPI FAST_IO_PREPARE_MDL_WRITE
)(
1572 IN
struct _FILE_OBJECT
*FileObject
,
1573 IN PLARGE_INTEGER FileOffset
,
1577 OUT PIO_STATUS_BLOCK IoStatus
,
1578 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1579 typedef FAST_IO_PREPARE_MDL_WRITE
*PFAST_IO_PREPARE_MDL_WRITE
;
1582 (NTAPI FAST_IO_MDL_WRITE_COMPLETE
)(
1583 IN
struct _FILE_OBJECT
*FileObject
,
1584 IN PLARGE_INTEGER FileOffset
,
1586 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1587 typedef FAST_IO_MDL_WRITE_COMPLETE
*PFAST_IO_MDL_WRITE_COMPLETE
;
1590 (NTAPI FAST_IO_READ_COMPRESSED
)(
1591 IN
struct _FILE_OBJECT
*FileObject
,
1592 IN PLARGE_INTEGER FileOffset
,
1597 OUT PIO_STATUS_BLOCK IoStatus
,
1598 OUT
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
1599 IN ULONG CompressedDataInfoLength
,
1600 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1601 typedef FAST_IO_READ_COMPRESSED
*PFAST_IO_READ_COMPRESSED
;
1604 (NTAPI FAST_IO_WRITE_COMPRESSED
)(
1605 IN
struct _FILE_OBJECT
*FileObject
,
1606 IN PLARGE_INTEGER FileOffset
,
1611 OUT PIO_STATUS_BLOCK IoStatus
,
1612 IN
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
1613 IN ULONG CompressedDataInfoLength
,
1614 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1615 typedef FAST_IO_WRITE_COMPRESSED
*PFAST_IO_WRITE_COMPRESSED
;
1618 (NTAPI FAST_IO_MDL_READ_COMPLETE_COMPRESSED
)(
1619 IN
struct _FILE_OBJECT
*FileObject
,
1621 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1622 typedef FAST_IO_MDL_READ_COMPLETE_COMPRESSED
*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED
;
1625 (NTAPI FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)(
1626 IN
struct _FILE_OBJECT
*FileObject
,
1627 IN PLARGE_INTEGER FileOffset
,
1629 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1630 typedef FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
;
1633 (NTAPI FAST_IO_QUERY_OPEN
)(
1634 IN
struct _IRP
*Irp
,
1635 OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
,
1636 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1637 typedef FAST_IO_QUERY_OPEN
*PFAST_IO_QUERY_OPEN
;
1640 (NTAPI FAST_IO_RELEASE_FOR_MOD_WRITE
)(
1641 IN
struct _FILE_OBJECT
*FileObject
,
1642 IN
struct _ERESOURCE
*ResourceToRelease
,
1643 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1644 typedef FAST_IO_RELEASE_FOR_MOD_WRITE
*PFAST_IO_RELEASE_FOR_MOD_WRITE
;
1647 (NTAPI FAST_IO_ACQUIRE_FOR_CCFLUSH
)(
1648 IN
struct _FILE_OBJECT
*FileObject
,
1649 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1650 typedef FAST_IO_ACQUIRE_FOR_CCFLUSH
*PFAST_IO_ACQUIRE_FOR_CCFLUSH
;
1653 (NTAPI FAST_IO_RELEASE_FOR_CCFLUSH
)(
1654 IN
struct _FILE_OBJECT
*FileObject
,
1655 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1656 typedef FAST_IO_RELEASE_FOR_CCFLUSH
*PFAST_IO_RELEASE_FOR_CCFLUSH
;
1658 typedef struct _FAST_IO_DISPATCH
{
1659 ULONG SizeOfFastIoDispatch
;
1660 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible
;
1661 PFAST_IO_READ FastIoRead
;
1662 PFAST_IO_WRITE FastIoWrite
;
1663 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo
;
1664 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo
;
1665 PFAST_IO_LOCK FastIoLock
;
1666 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle
;
1667 PFAST_IO_UNLOCK_ALL FastIoUnlockAll
;
1668 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey
;
1669 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl
;
1670 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection
;
1671 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection
;
1672 PFAST_IO_DETACH_DEVICE FastIoDetachDevice
;
1673 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo
;
1674 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite
;
1675 PFAST_IO_MDL_READ MdlRead
;
1676 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete
;
1677 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite
;
1678 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete
;
1679 PFAST_IO_READ_COMPRESSED FastIoReadCompressed
;
1680 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed
;
1681 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed
;
1682 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed
;
1683 PFAST_IO_QUERY_OPEN FastIoQueryOpen
;
1684 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite
;
1685 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush
;
1686 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush
;
1687 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
1689 typedef struct _SECTION_OBJECT_POINTERS
{
1690 PVOID DataSectionObject
;
1691 PVOID SharedCacheMap
;
1692 PVOID ImageSectionObject
;
1693 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
1695 typedef struct _IO_COMPLETION_CONTEXT
{
1698 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
1700 /* FILE_OBJECT.Flags */
1701 #define FO_FILE_OPEN 0x00000001
1702 #define FO_SYNCHRONOUS_IO 0x00000002
1703 #define FO_ALERTABLE_IO 0x00000004
1704 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
1705 #define FO_WRITE_THROUGH 0x00000010
1706 #define FO_SEQUENTIAL_ONLY 0x00000020
1707 #define FO_CACHE_SUPPORTED 0x00000040
1708 #define FO_NAMED_PIPE 0x00000080
1709 #define FO_STREAM_FILE 0x00000100
1710 #define FO_MAILSLOT 0x00000200
1711 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
1712 #define FO_QUEUE_IRP_TO_THREAD 0x00000400
1713 #define FO_DIRECT_DEVICE_OPEN 0x00000800
1714 #define FO_FILE_MODIFIED 0x00001000
1715 #define FO_FILE_SIZE_CHANGED 0x00002000
1716 #define FO_CLEANUP_COMPLETE 0x00004000
1717 #define FO_TEMPORARY_FILE 0x00008000
1718 #define FO_DELETE_ON_CLOSE 0x00010000
1719 #define FO_OPENED_CASE_SENSITIVE 0x00020000
1720 #define FO_HANDLE_CREATED 0x00040000
1721 #define FO_FILE_FAST_IO_READ 0x00080000
1722 #define FO_RANDOM_ACCESS 0x00100000
1723 #define FO_FILE_OPEN_CANCELLED 0x00200000
1724 #define FO_VOLUME_OPEN 0x00400000
1725 #define FO_REMOTE_ORIGIN 0x01000000
1726 #define FO_DISALLOW_EXCLUSIVE 0x02000000
1727 #define FO_SKIP_COMPLETION_PORT 0x02000000
1728 #define FO_SKIP_SET_EVENT 0x04000000
1729 #define FO_SKIP_SET_FAST_IO 0x08000000
1730 #define FO_FLAGS_VALID_ONLY_DURING_CREATE FO_DISALLOW_EXCLUSIVE
1733 #define VPB_MOUNTED 0x0001
1734 #define VPB_LOCKED 0x0002
1735 #define VPB_PERSISTENT 0x0004
1736 #define VPB_REMOVE_PENDING 0x0008
1737 #define VPB_RAW_MOUNT 0x0010
1738 #define VPB_DIRECT_WRITES_ALLOWED 0x0020
1742 #define SL_FORCE_ACCESS_CHECK 0x01
1743 #define SL_OPEN_PAGING_FILE 0x02
1744 #define SL_OPEN_TARGET_DIRECTORY 0x04
1745 #define SL_STOP_ON_SYMLINK 0x08
1746 #define SL_CASE_SENSITIVE 0x80
1748 #define SL_KEY_SPECIFIED 0x01
1749 #define SL_OVERRIDE_VERIFY_VOLUME 0x02
1750 #define SL_WRITE_THROUGH 0x04
1751 #define SL_FT_SEQUENTIAL_WRITE 0x08
1752 #define SL_FORCE_DIRECT_WRITE 0x10
1753 #define SL_REALTIME_STREAM 0x20
1755 #define SL_READ_ACCESS_GRANTED 0x01
1756 #define SL_WRITE_ACCESS_GRANTED 0x04
1758 #define SL_FAIL_IMMEDIATELY 0x01
1759 #define SL_EXCLUSIVE_LOCK 0x02
1761 #define SL_RESTART_SCAN 0x01
1762 #define SL_RETURN_SINGLE_ENTRY 0x02
1763 #define SL_INDEX_SPECIFIED 0x04
1765 #define SL_WATCH_TREE 0x01
1767 #define SL_ALLOW_RAW_MOUNT 0x01
1770 $
if (_WDMDDK_
|| _DEVIOCTL_
)
1771 #define CTL_CODE(DeviceType, Function, Method, Access) \
1772 (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
1774 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
1776 #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
1778 $
endif (_WDMDDK_
|| _DEVIOCTL_
)
1780 #define IRP_NOCACHE 0x00000001
1781 #define IRP_PAGING_IO 0x00000002
1782 #define IRP_MOUNT_COMPLETION 0x00000002
1783 #define IRP_SYNCHRONOUS_API 0x00000004
1784 #define IRP_ASSOCIATED_IRP 0x00000008
1785 #define IRP_BUFFERED_IO 0x00000010
1786 #define IRP_DEALLOCATE_BUFFER 0x00000020
1787 #define IRP_INPUT_OPERATION 0x00000040
1788 #define IRP_SYNCHRONOUS_PAGING_IO 0x00000040
1789 #define IRP_CREATE_OPERATION 0x00000080
1790 #define IRP_READ_OPERATION 0x00000100
1791 #define IRP_WRITE_OPERATION 0x00000200
1792 #define IRP_CLOSE_OPERATION 0x00000400
1793 #define IRP_DEFER_IO_COMPLETION 0x00000800
1794 #define IRP_OB_QUERY_NAME 0x00001000
1795 #define IRP_HOLD_DEVICE_QUEUE 0x00002000
1796 /* The following 2 are missing in latest WDK */
1797 #define IRP_RETRY_IO_COMPLETION 0x00004000
1798 #define IRP_CLASS_CACHE_OPERATION 0x00008000
1800 #define IRP_QUOTA_CHARGED 0x01
1801 #define IRP_ALLOCATED_MUST_SUCCEED 0x02
1802 #define IRP_ALLOCATED_FIXED_SIZE 0x04
1803 #define IRP_LOOKASIDE_ALLOCATION 0x08
1806 ** IRP function codes
1809 #define IRP_MJ_CREATE 0x00
1810 #define IRP_MJ_CREATE_NAMED_PIPE 0x01
1811 #define IRP_MJ_CLOSE 0x02
1812 #define IRP_MJ_READ 0x03
1813 #define IRP_MJ_WRITE 0x04
1814 #define IRP_MJ_QUERY_INFORMATION 0x05
1815 #define IRP_MJ_SET_INFORMATION 0x06
1816 #define IRP_MJ_QUERY_EA 0x07
1817 #define IRP_MJ_SET_EA 0x08
1818 #define IRP_MJ_FLUSH_BUFFERS 0x09
1819 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
1820 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
1821 #define IRP_MJ_DIRECTORY_CONTROL 0x0c
1822 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
1823 #define IRP_MJ_DEVICE_CONTROL 0x0e
1824 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
1825 #define IRP_MJ_SCSI 0x0f
1826 #define IRP_MJ_SHUTDOWN 0x10
1827 #define IRP_MJ_LOCK_CONTROL 0x11
1828 #define IRP_MJ_CLEANUP 0x12
1829 #define IRP_MJ_CREATE_MAILSLOT 0x13
1830 #define IRP_MJ_QUERY_SECURITY 0x14
1831 #define IRP_MJ_SET_SECURITY 0x15
1832 #define IRP_MJ_POWER 0x16
1833 #define IRP_MJ_SYSTEM_CONTROL 0x17
1834 #define IRP_MJ_DEVICE_CHANGE 0x18
1835 #define IRP_MJ_QUERY_QUOTA 0x19
1836 #define IRP_MJ_SET_QUOTA 0x1a
1837 #define IRP_MJ_PNP 0x1b
1838 #define IRP_MJ_PNP_POWER 0x1b
1839 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
1841 #define IRP_MN_SCSI_CLASS 0x01
1843 #define IRP_MN_START_DEVICE 0x00
1844 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
1845 #define IRP_MN_REMOVE_DEVICE 0x02
1846 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
1847 #define IRP_MN_STOP_DEVICE 0x04
1848 #define IRP_MN_QUERY_STOP_DEVICE 0x05
1849 #define IRP_MN_CANCEL_STOP_DEVICE 0x06
1851 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
1852 #define IRP_MN_QUERY_INTERFACE 0x08
1853 #define IRP_MN_QUERY_CAPABILITIES 0x09
1854 #define IRP_MN_QUERY_RESOURCES 0x0A
1855 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
1856 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
1857 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
1859 #define IRP_MN_READ_CONFIG 0x0F
1860 #define IRP_MN_WRITE_CONFIG 0x10
1861 #define IRP_MN_EJECT 0x11
1862 #define IRP_MN_SET_LOCK 0x12
1863 #define IRP_MN_QUERY_ID 0x13
1864 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
1865 #define IRP_MN_QUERY_BUS_INFORMATION 0x15
1866 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
1867 #define IRP_MN_SURPRISE_REMOVAL 0x17
1868 #if (NTDDI_VERSION >= NTDDI_WIN7)
1869 #define IRP_MN_DEVICE_ENUMERATED 0x19
1872 #define IRP_MN_WAIT_WAKE 0x00
1873 #define IRP_MN_POWER_SEQUENCE 0x01
1874 #define IRP_MN_SET_POWER 0x02
1875 #define IRP_MN_QUERY_POWER 0x03
1877 #define IRP_MN_QUERY_ALL_DATA 0x00
1878 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
1879 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
1880 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
1881 #define IRP_MN_ENABLE_EVENTS 0x04
1882 #define IRP_MN_DISABLE_EVENTS 0x05
1883 #define IRP_MN_ENABLE_COLLECTION 0x06
1884 #define IRP_MN_DISABLE_COLLECTION 0x07
1885 #define IRP_MN_REGINFO 0x08
1886 #define IRP_MN_EXECUTE_METHOD 0x09
1888 #define IRP_MN_REGINFO_EX 0x0b
1890 typedef struct _FILE_OBJECT
{
1893 PDEVICE_OBJECT DeviceObject
;
1897 PSECTION_OBJECT_POINTERS SectionObjectPointer
;
1898 PVOID PrivateCacheMap
;
1899 NTSTATUS FinalStatus
;
1900 struct _FILE_OBJECT
*RelatedFileObject
;
1901 BOOLEAN LockOperation
;
1902 BOOLEAN DeletePending
;
1904 BOOLEAN WriteAccess
;
1905 BOOLEAN DeleteAccess
;
1907 BOOLEAN SharedWrite
;
1908 BOOLEAN SharedDelete
;
1910 UNICODE_STRING FileName
;
1911 LARGE_INTEGER CurrentByteOffset
;
1912 volatile ULONG Waiters
;
1913 volatile ULONG Busy
;
1917 volatile PIO_COMPLETION_CONTEXT CompletionContext
;
1918 KSPIN_LOCK IrpListLock
;
1920 volatile PVOID FileObjectExtension
;
1921 } FILE_OBJECT
, *PFILE_OBJECT
;
1923 typedef struct _IO_ERROR_LOG_PACKET
{
1924 UCHAR MajorFunctionCode
;
1926 USHORT DumpDataSize
;
1927 USHORT NumberOfStrings
;
1928 USHORT StringOffset
;
1929 USHORT EventCategory
;
1931 ULONG UniqueErrorValue
;
1932 NTSTATUS FinalStatus
;
1933 ULONG SequenceNumber
;
1934 ULONG IoControlCode
;
1935 LARGE_INTEGER DeviceOffset
;
1937 } IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
1939 typedef struct _IO_ERROR_LOG_MESSAGE
{
1942 USHORT DriverNameLength
;
1943 LARGE_INTEGER TimeStamp
;
1944 ULONG DriverNameOffset
;
1945 IO_ERROR_LOG_PACKET EntryData
;
1946 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
1948 #define ERROR_LOG_LIMIT_SIZE 240
1949 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
1950 sizeof(IO_ERROR_LOG_PACKET) + \
1951 (sizeof(WCHAR) * 40))
1952 #define ERROR_LOG_MESSAGE_LIMIT_SIZE \
1953 (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1954 #define IO_ERROR_LOG_MESSAGE_LENGTH \
1955 ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
1956 ERROR_LOG_MESSAGE_LIMIT_SIZE : \
1957 PORT_MAXIMUM_MESSAGE_LENGTH)
1958 #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
1959 IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1962 #define PORT_MAXIMUM_MESSAGE_LENGTH 512
1964 #define PORT_MAXIMUM_MESSAGE_LENGTH 256
1967 typedef enum _DMA_WIDTH
{
1972 } DMA_WIDTH
, *PDMA_WIDTH
;
1974 typedef enum _DMA_SPEED
{
1981 } DMA_SPEED
, *PDMA_SPEED
;
1983 /* DEVICE_DESCRIPTION.Version */
1985 #define DEVICE_DESCRIPTION_VERSION 0x0000
1986 #define DEVICE_DESCRIPTION_VERSION1 0x0001
1987 #define DEVICE_DESCRIPTION_VERSION2 0x0002
1989 typedef struct _DEVICE_DESCRIPTION
{
1992 BOOLEAN ScatterGather
;
1994 BOOLEAN AutoInitialize
;
1995 BOOLEAN Dma32BitAddresses
;
1996 BOOLEAN IgnoreCount
;
1998 BOOLEAN Dma64BitAddresses
;
2001 INTERFACE_TYPE InterfaceType
;
2004 ULONG MaximumLength
;
2006 } DEVICE_DESCRIPTION
, *PDEVICE_DESCRIPTION
;
2008 typedef enum _DEVICE_RELATION_TYPE
{
2013 TargetDeviceRelation
,
2016 } DEVICE_RELATION_TYPE
, *PDEVICE_RELATION_TYPE
;
2018 typedef struct _DEVICE_RELATIONS
{
2020 PDEVICE_OBJECT Objects
[1];
2021 } DEVICE_RELATIONS
, *PDEVICE_RELATIONS
;
2023 typedef struct _DEVOBJ_EXTENSION
{
2026 PDEVICE_OBJECT DeviceObject
;
2027 } DEVOBJ_EXTENSION
, *PDEVOBJ_EXTENSION
;
2029 typedef struct _SCATTER_GATHER_ELEMENT
{
2030 PHYSICAL_ADDRESS Address
;
2033 } SCATTER_GATHER_ELEMENT
, *PSCATTER_GATHER_ELEMENT
;
2035 #if defined(_MSC_EXTENSIONS) || defined(__GNUC__)
2037 #if defined(_MSC_VER)
2038 #if _MSC_VER >= 1200
2039 #pragma warning(push)
2041 #pragma warning(disable:4200)
2042 #endif /* _MSC_VER */
2044 typedef struct _SCATTER_GATHER_LIST
{
2045 ULONG NumberOfElements
;
2047 SCATTER_GATHER_ELEMENT Elements
[1];
2048 } SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
2050 #if defined(_MSC_VER)
2051 #if _MSC_VER >= 1200
2052 #pragma warning(pop)
2054 #pragma warning(default:4200)
2056 #endif /* _MSC_VER */
2058 #else /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
2060 struct _SCATTER_GATHER_LIST
;
2061 typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
2063 #endif /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
2066 (NTAPI DRIVER_ADD_DEVICE
)(
2067 IN
struct _DRIVER_OBJECT
*DriverObject
,
2068 IN
struct _DEVICE_OBJECT
*PhysicalDeviceObject
);
2069 typedef DRIVER_ADD_DEVICE
*PDRIVER_ADD_DEVICE
;
2071 typedef struct _DRIVER_EXTENSION
{
2072 struct _DRIVER_OBJECT
*DriverObject
;
2073 PDRIVER_ADD_DEVICE AddDevice
;
2075 UNICODE_STRING ServiceKeyName
;
2076 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
2078 #define DRVO_UNLOAD_INVOKED 0x00000001
2079 #define DRVO_LEGACY_DRIVER 0x00000002
2080 #define DRVO_BUILTIN_DRIVER 0x00000004
2083 (NTAPI DRIVER_INITIALIZE
)(
2084 IN
struct _DRIVER_OBJECT
*DriverObject
,
2085 IN PUNICODE_STRING RegistryPath
);
2086 typedef DRIVER_INITIALIZE
*PDRIVER_INITIALIZE
;
2089 (NTAPI DRIVER_STARTIO
)(
2090 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2091 IN
struct _IRP
*Irp
);
2092 typedef DRIVER_STARTIO
*PDRIVER_STARTIO
;
2095 (NTAPI DRIVER_UNLOAD
)(
2096 IN
struct _DRIVER_OBJECT
*DriverObject
);
2097 typedef DRIVER_UNLOAD
*PDRIVER_UNLOAD
;
2100 (NTAPI DRIVER_DISPATCH
)(
2101 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2102 IN
struct _IRP
*Irp
);
2103 typedef DRIVER_DISPATCH
*PDRIVER_DISPATCH
;
2105 typedef struct _DRIVER_OBJECT
{
2108 PDEVICE_OBJECT DeviceObject
;
2112 PVOID DriverSection
;
2113 PDRIVER_EXTENSION DriverExtension
;
2114 UNICODE_STRING DriverName
;
2115 PUNICODE_STRING HardwareDatabase
;
2116 struct _FAST_IO_DISPATCH
*FastIoDispatch
;
2117 PDRIVER_INITIALIZE DriverInit
;
2118 PDRIVER_STARTIO DriverStartIo
;
2119 PDRIVER_UNLOAD DriverUnload
;
2120 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
2121 } DRIVER_OBJECT
, *PDRIVER_OBJECT
;
2123 typedef struct _DMA_ADAPTER
{
2126 struct _DMA_OPERATIONS
* DmaOperations
;
2127 } DMA_ADAPTER
, *PDMA_ADAPTER
;
2130 (NTAPI
*PPUT_DMA_ADAPTER
)(
2131 IN PDMA_ADAPTER DmaAdapter
);
2134 (NTAPI
*PALLOCATE_COMMON_BUFFER
)(
2135 IN PDMA_ADAPTER DmaAdapter
,
2137 OUT PPHYSICAL_ADDRESS LogicalAddress
,
2138 IN BOOLEAN CacheEnabled
);
2141 (NTAPI
*PFREE_COMMON_BUFFER
)(
2142 IN PDMA_ADAPTER DmaAdapter
,
2144 IN PHYSICAL_ADDRESS LogicalAddress
,
2145 IN PVOID VirtualAddress
,
2146 IN BOOLEAN CacheEnabled
);
2149 (NTAPI
*PALLOCATE_ADAPTER_CHANNEL
)(
2150 IN PDMA_ADAPTER DmaAdapter
,
2151 IN PDEVICE_OBJECT DeviceObject
,
2152 IN ULONG NumberOfMapRegisters
,
2153 IN PDRIVER_CONTROL ExecutionRoutine
,
2157 (NTAPI
*PFLUSH_ADAPTER_BUFFERS
)(
2158 IN PDMA_ADAPTER DmaAdapter
,
2160 IN PVOID MapRegisterBase
,
2163 IN BOOLEAN WriteToDevice
);
2166 (NTAPI
*PFREE_ADAPTER_CHANNEL
)(
2167 IN PDMA_ADAPTER DmaAdapter
);
2170 (NTAPI
*PFREE_MAP_REGISTERS
)(
2171 IN PDMA_ADAPTER DmaAdapter
,
2172 PVOID MapRegisterBase
,
2173 ULONG NumberOfMapRegisters
);
2175 typedef PHYSICAL_ADDRESS
2176 (NTAPI
*PMAP_TRANSFER
)(
2177 IN PDMA_ADAPTER DmaAdapter
,
2179 IN PVOID MapRegisterBase
,
2181 IN OUT PULONG Length
,
2182 IN BOOLEAN WriteToDevice
);
2185 (NTAPI
*PGET_DMA_ALIGNMENT
)(
2186 IN PDMA_ADAPTER DmaAdapter
);
2189 (NTAPI
*PREAD_DMA_COUNTER
)(
2190 IN PDMA_ADAPTER DmaAdapter
);
2193 (NTAPI DRIVER_LIST_CONTROL
)(
2194 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2195 IN
struct _IRP
*Irp
,
2196 IN
struct _SCATTER_GATHER_LIST
*ScatterGather
,
2198 typedef DRIVER_LIST_CONTROL
*PDRIVER_LIST_CONTROL
;
2201 (NTAPI
*PGET_SCATTER_GATHER_LIST
)(
2202 IN PDMA_ADAPTER DmaAdapter
,
2203 IN PDEVICE_OBJECT DeviceObject
,
2207 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
2209 IN BOOLEAN WriteToDevice
);
2212 (NTAPI
*PPUT_SCATTER_GATHER_LIST
)(
2213 IN PDMA_ADAPTER DmaAdapter
,
2214 IN PSCATTER_GATHER_LIST ScatterGather
,
2215 IN BOOLEAN WriteToDevice
);
2218 (NTAPI
*PCALCULATE_SCATTER_GATHER_LIST_SIZE
)(
2219 IN PDMA_ADAPTER DmaAdapter
,
2220 IN PMDL Mdl OPTIONAL
,
2223 OUT PULONG ScatterGatherListSize
,
2224 OUT PULONG pNumberOfMapRegisters OPTIONAL
);
2227 (NTAPI
*PBUILD_SCATTER_GATHER_LIST
)(
2228 IN PDMA_ADAPTER DmaAdapter
,
2229 IN PDEVICE_OBJECT DeviceObject
,
2233 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
2235 IN BOOLEAN WriteToDevice
,
2236 IN PVOID ScatterGatherBuffer
,
2237 IN ULONG ScatterGatherLength
);
2240 (NTAPI
*PBUILD_MDL_FROM_SCATTER_GATHER_LIST
)(
2241 IN PDMA_ADAPTER DmaAdapter
,
2242 IN PSCATTER_GATHER_LIST ScatterGather
,
2243 IN PMDL OriginalMdl
,
2244 OUT PMDL
*TargetMdl
);
2246 typedef struct _DMA_OPERATIONS
{
2248 PPUT_DMA_ADAPTER PutDmaAdapter
;
2249 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer
;
2250 PFREE_COMMON_BUFFER FreeCommonBuffer
;
2251 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
2252 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
2253 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
2254 PFREE_MAP_REGISTERS FreeMapRegisters
;
2255 PMAP_TRANSFER MapTransfer
;
2256 PGET_DMA_ALIGNMENT GetDmaAlignment
;
2257 PREAD_DMA_COUNTER ReadDmaCounter
;
2258 PGET_SCATTER_GATHER_LIST GetScatterGatherList
;
2259 PPUT_SCATTER_GATHER_LIST PutScatterGatherList
;
2260 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList
;
2261 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList
;
2262 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList
;
2263 } DMA_OPERATIONS
, *PDMA_OPERATIONS
;
2265 typedef struct _IO_RESOURCE_DESCRIPTOR
{
2268 UCHAR ShareDisposition
;
2276 PHYSICAL_ADDRESS MinimumAddress
;
2277 PHYSICAL_ADDRESS MaximumAddress
;
2282 PHYSICAL_ADDRESS MinimumAddress
;
2283 PHYSICAL_ADDRESS MaximumAddress
;
2286 ULONG MinimumVector
;
2287 ULONG MaximumVector
;
2290 ULONG MinimumChannel
;
2291 ULONG MaximumChannel
;
2296 PHYSICAL_ADDRESS MinimumAddress
;
2297 PHYSICAL_ADDRESS MaximumAddress
;
2314 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
2316 typedef struct _IO_RESOURCE_LIST
{
2320 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
2321 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
2323 typedef struct _IO_RESOURCE_REQUIREMENTS_LIST
{
2325 INTERFACE_TYPE InterfaceType
;
2329 ULONG AlternativeLists
;
2330 IO_RESOURCE_LIST List
[1];
2331 } IO_RESOURCE_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
2334 (NTAPI DRIVER_CANCEL
)(
2335 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2336 IN
struct _IRP
*Irp
);
2337 typedef DRIVER_CANCEL
*PDRIVER_CANCEL
;
2339 typedef struct _IRP
{
2342 struct _MDL
*MdlAddress
;
2345 struct _IRP
*MasterIrp
;
2346 volatile LONG IrpCount
;
2349 LIST_ENTRY ThreadListEntry
;
2350 IO_STATUS_BLOCK IoStatus
;
2351 KPROCESSOR_MODE RequestorMode
;
2352 BOOLEAN PendingReturned
;
2354 CHAR CurrentLocation
;
2357 CCHAR ApcEnvironment
;
2358 UCHAR AllocationFlags
;
2359 PIO_STATUS_BLOCK UserIosb
;
2363 _ANONYMOUS_UNION
union {
2364 PIO_APC_ROUTINE UserApcRoutine
;
2365 PVOID IssuingProcess
;
2367 PVOID UserApcContext
;
2368 } AsynchronousParameters
;
2369 LARGE_INTEGER AllocationSize
;
2371 volatile PDRIVER_CANCEL CancelRoutine
;
2375 _ANONYMOUS_UNION
union {
2376 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
2377 _ANONYMOUS_STRUCT
struct {
2378 PVOID DriverContext
[4];
2382 PCHAR AuxiliaryBuffer
;
2383 _ANONYMOUS_STRUCT
struct {
2384 LIST_ENTRY ListEntry
;
2385 _ANONYMOUS_UNION
union {
2386 struct _IO_STACK_LOCATION
*CurrentStackLocation
;
2390 struct _FILE_OBJECT
*OriginalFileObject
;
2393 PVOID CompletionKey
;
2397 typedef enum _IO_PAGING_PRIORITY
{
2398 IoPagingPriorityInvalid
,
2399 IoPagingPriorityNormal
,
2400 IoPagingPriorityHigh
,
2401 IoPagingPriorityReserved1
,
2402 IoPagingPriorityReserved2
2403 } IO_PAGING_PRIORITY
;
2406 (NTAPI IO_COMPLETION_ROUTINE
)(
2407 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2408 IN
struct _IRP
*Irp
,
2410 typedef IO_COMPLETION_ROUTINE
*PIO_COMPLETION_ROUTINE
;
2413 (NTAPI IO_DPC_ROUTINE
)(
2414 IN
struct _KDPC
*Dpc
,
2415 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2416 IN
struct _IRP
*Irp
,
2418 typedef IO_DPC_ROUTINE
*PIO_DPC_ROUTINE
;
2421 (NTAPI
*PMM_DLL_INITIALIZE
)(
2422 IN PUNICODE_STRING RegistryPath
);
2425 (NTAPI
*PMM_DLL_UNLOAD
)(
2429 (NTAPI IO_TIMER_ROUTINE
)(
2430 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2432 typedef IO_TIMER_ROUTINE
*PIO_TIMER_ROUTINE
;
2434 typedef struct _IO_SECURITY_CONTEXT
{
2435 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
2436 PACCESS_STATE AccessState
;
2437 ACCESS_MASK DesiredAccess
;
2438 ULONG FullCreateOptions
;
2439 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
2443 typedef struct _IO_CSQ_IRP_CONTEXT
{
2446 struct _IO_CSQ
*Csq
;
2447 } IO_CSQ_IRP_CONTEXT
, *PIO_CSQ_IRP_CONTEXT
;
2450 (NTAPI
*PIO_CSQ_INSERT_IRP
)(
2451 IN
struct _IO_CSQ
*Csq
,
2455 (NTAPI IO_CSQ_INSERT_IRP_EX
)(
2456 IN
struct _IO_CSQ
*Csq
,
2458 IN PVOID InsertContext
);
2459 typedef IO_CSQ_INSERT_IRP_EX
*PIO_CSQ_INSERT_IRP_EX
;
2462 (NTAPI
*PIO_CSQ_REMOVE_IRP
)(
2463 IN
struct _IO_CSQ
*Csq
,
2467 (NTAPI
*PIO_CSQ_PEEK_NEXT_IRP
)(
2468 IN
struct _IO_CSQ
*Csq
,
2470 IN PVOID PeekContext
);
2473 (NTAPI
*PIO_CSQ_ACQUIRE_LOCK
)(
2474 IN
struct _IO_CSQ
*Csq
,
2478 (NTAPI
*PIO_CSQ_RELEASE_LOCK
)(
2479 IN
struct _IO_CSQ
*Csq
,
2483 (NTAPI
*PIO_CSQ_COMPLETE_CANCELED_IRP
)(
2484 IN
struct _IO_CSQ
*Csq
,
2487 typedef struct _IO_CSQ
{
2489 PIO_CSQ_INSERT_IRP CsqInsertIrp
;
2490 PIO_CSQ_REMOVE_IRP CsqRemoveIrp
;
2491 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
;
2492 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
;
2493 PIO_CSQ_RELEASE_LOCK CsqReleaseLock
;
2494 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
;
2495 PVOID ReservePointer
;
2498 typedef enum _BUS_QUERY_ID_TYPE
{
2500 BusQueryHardwareIDs
,
2501 BusQueryCompatibleIDs
,
2503 BusQueryDeviceSerialNumber
2504 } BUS_QUERY_ID_TYPE
, *PBUS_QUERY_ID_TYPE
;
2506 typedef enum _DEVICE_TEXT_TYPE
{
2507 DeviceTextDescription
,
2508 DeviceTextLocationInformation
2509 } DEVICE_TEXT_TYPE
, *PDEVICE_TEXT_TYPE
;
2512 (NTAPI
*PGPE_SERVICE_ROUTINE
)(
2517 (NTAPI
*PGPE_CONNECT_VECTOR
)(
2522 PGPE_SERVICE_ROUTINE
,
2527 (NTAPI
*PGPE_DISCONNECT_VECTOR
)(
2531 (NTAPI
*PGPE_ENABLE_EVENT
)(
2536 (NTAPI
*PGPE_DISABLE_EVENT
)(
2541 (NTAPI
*PGPE_CLEAR_STATUS
)(
2546 (NTAPI
*PDEVICE_NOTIFY_CALLBACK
)(
2551 (NTAPI
*PREGISTER_FOR_DEVICE_NOTIFICATIONS
)(
2553 PDEVICE_NOTIFY_CALLBACK
,
2557 (NTAPI
*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS
)(
2559 PDEVICE_NOTIFY_CALLBACK
);
2561 typedef struct _ACPI_INTERFACE_STANDARD
{
2565 PINTERFACE_REFERENCE InterfaceReference
;
2566 PINTERFACE_DEREFERENCE InterfaceDereference
;
2567 PGPE_CONNECT_VECTOR GpeConnectVector
;
2568 PGPE_DISCONNECT_VECTOR GpeDisconnectVector
;
2569 PGPE_ENABLE_EVENT GpeEnableEvent
;
2570 PGPE_DISABLE_EVENT GpeDisableEvent
;
2571 PGPE_CLEAR_STATUS GpeClearStatus
;
2572 PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications
;
2573 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications
;
2574 } ACPI_INTERFACE_STANDARD
, *PACPI_INTERFACE_STANDARD
;
2577 (NTAPI
*PGPE_SERVICE_ROUTINE2
)(
2578 PVOID ObjectContext
,
2579 PVOID ServiceContext
);
2582 (NTAPI
*PGPE_CONNECT_VECTOR2
)(
2585 KINTERRUPT_MODE Mode
,
2587 PGPE_SERVICE_ROUTINE ServiceRoutine
,
2588 PVOID ServiceContext
,
2589 PVOID
*ObjectContext
);
2592 (NTAPI
*PGPE_DISCONNECT_VECTOR2
)(
2594 PVOID ObjectContext
);
2597 (NTAPI
*PGPE_ENABLE_EVENT2
)(
2599 PVOID ObjectContext
);
2602 (NTAPI
*PGPE_DISABLE_EVENT2
)(
2604 PVOID ObjectContext
);
2607 (NTAPI
*PGPE_CLEAR_STATUS2
)(
2609 PVOID ObjectContext
);
2612 (NTAPI
*PDEVICE_NOTIFY_CALLBACK2
)(
2613 PVOID NotificationContext
,
2617 (NTAPI
*PREGISTER_FOR_DEVICE_NOTIFICATIONS2
)(
2619 PDEVICE_NOTIFY_CALLBACK2 NotificationHandler
,
2620 PVOID NotificationContext
);
2623 (NTAPI
*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2
)(
2626 typedef struct _ACPI_INTERFACE_STANDARD2
{
2630 PINTERFACE_REFERENCE InterfaceReference
;
2631 PINTERFACE_DEREFERENCE InterfaceDereference
;
2632 PGPE_CONNECT_VECTOR2 GpeConnectVector
;
2633 PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector
;
2634 PGPE_ENABLE_EVENT2 GpeEnableEvent
;
2635 PGPE_DISABLE_EVENT2 GpeDisableEvent
;
2636 PGPE_CLEAR_STATUS2 GpeClearStatus
;
2637 PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications
;
2638 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications
;
2639 } ACPI_INTERFACE_STANDARD2
, *PACPI_INTERFACE_STANDARD2
;
2641 #if !defined(_AMD64_) && !defined(_IA64_)
2642 #include <pshpack4.h>
2644 typedef struct _IO_STACK_LOCATION
{
2645 UCHAR MajorFunction
;
2646 UCHAR MinorFunction
;
2651 PIO_SECURITY_CONTEXT SecurityContext
;
2653 USHORT POINTER_ALIGNMENT FileAttributes
;
2655 ULONG POINTER_ALIGNMENT EaLength
;
2659 ULONG POINTER_ALIGNMENT Key
;
2660 LARGE_INTEGER ByteOffset
;
2664 ULONG POINTER_ALIGNMENT Key
;
2665 LARGE_INTEGER ByteOffset
;
2669 PUNICODE_STRING FileName
;
2670 FILE_INFORMATION_CLASS FileInformationClass
;
2675 ULONG CompletionFilter
;
2679 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
2683 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
2684 PFILE_OBJECT FileObject
;
2685 _ANONYMOUS_UNION
union {
2686 _ANONYMOUS_STRUCT
struct {
2687 BOOLEAN ReplaceIfExists
;
2688 BOOLEAN AdvanceOnly
;
2691 HANDLE DeleteHandle
;
2705 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
2709 FS_INFORMATION_CLASS FsInformationClass
;
2712 ULONG OutputBufferLength
;
2713 ULONG InputBufferLength
;
2714 ULONG FsControlCode
;
2715 PVOID Type3InputBuffer
;
2716 } FileSystemControl
;
2718 PLARGE_INTEGER Length
;
2720 LARGE_INTEGER ByteOffset
;
2723 ULONG OutputBufferLength
;
2724 ULONG POINTER_ALIGNMENT InputBufferLength
;
2725 ULONG POINTER_ALIGNMENT IoControlCode
;
2726 PVOID Type3InputBuffer
;
2729 SECURITY_INFORMATION SecurityInformation
;
2730 ULONG POINTER_ALIGNMENT Length
;
2733 SECURITY_INFORMATION SecurityInformation
;
2734 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2738 PDEVICE_OBJECT DeviceObject
;
2742 PDEVICE_OBJECT DeviceObject
;
2745 struct _SCSI_REQUEST_BLOCK
*Srb
;
2750 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
2751 ULONG SidListLength
;
2757 DEVICE_RELATION_TYPE Type
;
2758 } QueryDeviceRelations
;
2760 CONST GUID
*InterfaceType
;
2763 PINTERFACE Interface
;
2764 PVOID InterfaceSpecificData
;
2767 PDEVICE_CAPABILITIES Capabilities
;
2768 } DeviceCapabilities
;
2770 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
2771 } FilterResourceRequirements
;
2776 ULONG POINTER_ALIGNMENT Length
;
2782 BUS_QUERY_ID_TYPE IdType
;
2785 DEVICE_TEXT_TYPE DeviceTextType
;
2786 LCID POINTER_ALIGNMENT LocaleId
;
2790 BOOLEAN Reserved
[3];
2791 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type
;
2792 } UsageNotification
;
2794 SYSTEM_POWER_STATE PowerState
;
2797 PPOWER_SEQUENCE PowerSequence
;
2800 ULONG SystemContext
;
2801 POWER_STATE_TYPE POINTER_ALIGNMENT Type
;
2802 POWER_STATE POINTER_ALIGNMENT State
;
2803 POWER_ACTION POINTER_ALIGNMENT ShutdownType
;
2806 PCM_RESOURCE_LIST AllocatedResources
;
2807 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
2810 ULONG_PTR ProviderId
;
2822 PDEVICE_OBJECT DeviceObject
;
2823 PFILE_OBJECT FileObject
;
2824 PIO_COMPLETION_ROUTINE CompletionRoutine
;
2826 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
2827 #if !defined(_AMD64_) && !defined(_IA64_)
2828 #include <poppack.h>
2831 /* IO_STACK_LOCATION.Control */
2833 #define SL_PENDING_RETURNED 0x01
2834 #define SL_ERROR_RETURNED 0x02
2835 #define SL_INVOKE_ON_CANCEL 0x20
2836 #define SL_INVOKE_ON_SUCCESS 0x40
2837 #define SL_INVOKE_ON_ERROR 0x80
2840 $
if (_WDMDDK_
|| _DEVIOCTL_
)
2841 #define METHOD_BUFFERED 0
2842 #define METHOD_IN_DIRECT 1
2843 #define METHOD_OUT_DIRECT 2
2844 #define METHOD_NEITHER 3
2846 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
2847 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
2849 $
endif (_WDMDDK_
|| _DEVIOCTL_
)
2851 #define FILE_SUPERSEDED 0x00000000
2852 #define FILE_OPENED 0x00000001
2853 #define FILE_CREATED 0x00000002
2854 #define FILE_OVERWRITTEN 0x00000003
2855 #define FILE_EXISTS 0x00000004
2856 #define FILE_DOES_NOT_EXIST 0x00000005
2858 #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
2859 #define FILE_WRITE_TO_END_OF_FILE 0xffffffff
2861 /* also in winnt.h */
2862 #define FILE_LIST_DIRECTORY 0x00000001
2863 #define FILE_READ_DATA 0x00000001
2864 #define FILE_ADD_FILE 0x00000002
2865 #define FILE_WRITE_DATA 0x00000002
2866 #define FILE_ADD_SUBDIRECTORY 0x00000004
2867 #define FILE_APPEND_DATA 0x00000004
2868 #define FILE_CREATE_PIPE_INSTANCE 0x00000004
2869 #define FILE_READ_EA 0x00000008
2870 #define FILE_WRITE_EA 0x00000010
2871 #define FILE_EXECUTE 0x00000020
2872 #define FILE_TRAVERSE 0x00000020
2873 #define FILE_DELETE_CHILD 0x00000040
2874 #define FILE_READ_ATTRIBUTES 0x00000080
2875 #define FILE_WRITE_ATTRIBUTES 0x00000100
2877 #define FILE_SHARE_READ 0x00000001
2878 #define FILE_SHARE_WRITE 0x00000002
2879 #define FILE_SHARE_DELETE 0x00000004
2880 #define FILE_SHARE_VALID_FLAGS 0x00000007
2882 #define FILE_ATTRIBUTE_READONLY 0x00000001
2883 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
2884 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
2885 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
2886 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
2887 #define FILE_ATTRIBUTE_DEVICE 0x00000040
2888 #define FILE_ATTRIBUTE_NORMAL 0x00000080
2889 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
2890 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
2891 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
2892 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
2893 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
2894 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
2895 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
2896 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000
2898 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
2899 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
2901 #define FILE_VALID_OPTION_FLAGS 0x00ffffff
2902 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
2903 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
2904 #define FILE_VALID_SET_FLAGS 0x00000036
2906 #define FILE_SUPERSEDE 0x00000000
2907 #define FILE_OPEN 0x00000001
2908 #define FILE_CREATE 0x00000002
2909 #define FILE_OPEN_IF 0x00000003
2910 #define FILE_OVERWRITE 0x00000004
2911 #define FILE_OVERWRITE_IF 0x00000005
2912 #define FILE_MAXIMUM_DISPOSITION 0x00000005
2914 #define FILE_DIRECTORY_FILE 0x00000001
2915 #define FILE_WRITE_THROUGH 0x00000002
2916 #define FILE_SEQUENTIAL_ONLY 0x00000004
2917 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
2918 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
2919 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
2920 #define FILE_NON_DIRECTORY_FILE 0x00000040
2921 #define FILE_CREATE_TREE_CONNECTION 0x00000080
2922 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
2923 #define FILE_NO_EA_KNOWLEDGE 0x00000200
2924 #define FILE_OPEN_REMOTE_INSTANCE 0x00000400
2925 #define FILE_RANDOM_ACCESS 0x00000800
2926 #define FILE_DELETE_ON_CLOSE 0x00001000
2927 #define FILE_OPEN_BY_FILE_ID 0x00002000
2928 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
2929 #define FILE_NO_COMPRESSION 0x00008000
2930 #if (NTDDI_VERSION >= NTDDI_WIN7)
2931 #define FILE_OPEN_REQUIRING_OPLOCK 0x00010000
2932 #define FILE_DISALLOW_EXCLUSIVE 0x00020000
2933 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
2934 #define FILE_RESERVE_OPFILTER 0x00100000
2935 #define FILE_OPEN_REPARSE_POINT 0x00200000
2936 #define FILE_OPEN_NO_RECALL 0x00400000
2937 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
2940 $
if (_WDMDDK_
|| _DEVIOCTL_
)
2941 #define FILE_ANY_ACCESS 0x00000000
2942 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
2943 #define FILE_READ_ACCESS 0x00000001
2944 #define FILE_WRITE_ACCESS 0x00000002
2946 $
endif (_WDMDDK_
|| _DEVIOCTL_
)
2948 #define FILE_ALL_ACCESS \
2949 (STANDARD_RIGHTS_REQUIRED | \
2953 #define FILE_GENERIC_EXECUTE \
2954 (STANDARD_RIGHTS_EXECUTE | \
2955 FILE_READ_ATTRIBUTES | \
2959 #define FILE_GENERIC_READ \
2960 (STANDARD_RIGHTS_READ | \
2962 FILE_READ_ATTRIBUTES | \
2966 #define FILE_GENERIC_WRITE \
2967 (STANDARD_RIGHTS_WRITE | \
2969 FILE_WRITE_ATTRIBUTES | \
2971 FILE_APPEND_DATA | \
2976 #define WMIREG_ACTION_REGISTER 1
2977 #define WMIREG_ACTION_DEREGISTER 2
2978 #define WMIREG_ACTION_REREGISTER 3
2979 #define WMIREG_ACTION_UPDATE_GUIDS 4
2980 #define WMIREG_ACTION_BLOCK_IRPS 5
2982 #define WMIREGISTER 0
2986 (NTAPI FWMI_NOTIFICATION_CALLBACK
)(
2989 typedef FWMI_NOTIFICATION_CALLBACK
*WMI_NOTIFICATION_CALLBACK
;
2994 typedef struct _PCI_SLOT_NUMBER
{
2997 ULONG DeviceNumber
:5;
2998 ULONG FunctionNumber
:3;
3003 } PCI_SLOT_NUMBER
, *PPCI_SLOT_NUMBER
;
3005 #define PCI_TYPE0_ADDRESSES 6
3006 #define PCI_TYPE1_ADDRESSES 2
3007 #define PCI_TYPE2_ADDRESSES 5
3009 typedef struct _PCI_COMMON_HEADER
{
3010 PCI_COMMON_HEADER_LAYOUT
3011 } PCI_COMMON_HEADER
, *PPCI_COMMON_HEADER
;
3014 typedef struct _PCI_COMMON_CONFIG
{
3015 PCI_COMMON_HEADER_LAYOUT
3016 UCHAR DeviceSpecific
[192];
3017 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
3019 typedef struct _PCI_COMMON_CONFIG
{
3020 PCI_COMMON_HEADER DUMMYSTRUCTNAME
;
3021 UCHAR DeviceSpecific
[192];
3022 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
3025 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
3027 #define PCI_EXTENDED_CONFIG_LENGTH 0x1000
3029 #define PCI_MAX_DEVICES 32
3030 #define PCI_MAX_FUNCTION 8
3031 #define PCI_MAX_BRIDGE_NUMBER 0xFF
3032 #define PCI_INVALID_VENDORID 0xFFFF
3034 /* PCI_COMMON_CONFIG.HeaderType */
3035 #define PCI_MULTIFUNCTION 0x80
3036 #define PCI_DEVICE_TYPE 0x00
3037 #define PCI_BRIDGE_TYPE 0x01
3038 #define PCI_CARDBUS_BRIDGE_TYPE 0x02
3040 #define PCI_CONFIGURATION_TYPE(PciData) \
3041 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
3043 #define PCI_MULTIFUNCTION_DEVICE(PciData) \
3044 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
3046 /* PCI_COMMON_CONFIG.Command */
3047 #define PCI_ENABLE_IO_SPACE 0x0001
3048 #define PCI_ENABLE_MEMORY_SPACE 0x0002
3049 #define PCI_ENABLE_BUS_MASTER 0x0004
3050 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
3051 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
3052 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
3053 #define PCI_ENABLE_PARITY 0x0040
3054 #define PCI_ENABLE_WAIT_CYCLE 0x0080
3055 #define PCI_ENABLE_SERR 0x0100
3056 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
3057 #define PCI_DISABLE_LEVEL_INTERRUPT 0x0400
3059 /* PCI_COMMON_CONFIG.Status */
3060 #define PCI_STATUS_INTERRUPT_PENDING 0x0008
3061 #define PCI_STATUS_CAPABILITIES_LIST 0x0010
3062 #define PCI_STATUS_66MHZ_CAPABLE 0x0020
3063 #define PCI_STATUS_UDF_SUPPORTED 0x0040
3064 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
3065 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
3066 #define PCI_STATUS_DEVSEL 0x0600
3067 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
3068 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
3069 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
3070 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
3071 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
3073 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
3075 #define PCI_WHICHSPACE_CONFIG 0x0
3076 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
3078 #define PCI_CAPABILITY_ID_POWER_MANAGEMENT 0x01
3079 #define PCI_CAPABILITY_ID_AGP 0x02
3080 #define PCI_CAPABILITY_ID_VPD 0x03
3081 #define PCI_CAPABILITY_ID_SLOT_ID 0x04
3082 #define PCI_CAPABILITY_ID_MSI 0x05
3083 #define PCI_CAPABILITY_ID_CPCI_HOTSWAP 0x06
3084 #define PCI_CAPABILITY_ID_PCIX 0x07
3085 #define PCI_CAPABILITY_ID_HYPERTRANSPORT 0x08
3086 #define PCI_CAPABILITY_ID_VENDOR_SPECIFIC 0x09
3087 #define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A
3088 #define PCI_CAPABILITY_ID_CPCI_RES_CTRL 0x0B
3089 #define PCI_CAPABILITY_ID_SHPC 0x0C
3090 #define PCI_CAPABILITY_ID_P2P_SSID 0x0D
3091 #define PCI_CAPABILITY_ID_AGP_TARGET 0x0E
3092 #define PCI_CAPABILITY_ID_SECURE 0x0F
3093 #define PCI_CAPABILITY_ID_PCI_EXPRESS 0x10
3094 #define PCI_CAPABILITY_ID_MSIX 0x11
3096 typedef struct _PCI_CAPABILITIES_HEADER
{
3099 } PCI_CAPABILITIES_HEADER
, *PPCI_CAPABILITIES_HEADER
;
3101 typedef struct _PCI_PMC
{
3105 UCHAR DeviceSpecificInitialization
:1;
3107 struct _PM_SUPPORT
{
3117 } PCI_PMC
, *PPCI_PMC
;
3119 typedef struct _PCI_PMCSR
{
3120 USHORT PowerState
:2;
3123 USHORT DataSelect
:4;
3126 } PCI_PMCSR
, *PPCI_PMCSR
;
3128 typedef struct _PCI_PMCSR_BSE
{
3130 UCHAR D3HotSupportsStopClock
:1;
3131 UCHAR BusPowerClockControlEnabled
:1;
3132 } PCI_PMCSR_BSE
, *PPCI_PMCSR_BSE
;
3134 typedef struct _PCI_PM_CAPABILITY
{
3135 PCI_CAPABILITIES_HEADER Header
;
3137 PCI_PMC Capabilities
;
3141 PCI_PMCSR ControlStatus
;
3145 PCI_PMCSR_BSE BridgeSupport
;
3149 } PCI_PM_CAPABILITY
, *PPCI_PM_CAPABILITY
;
3152 PCI_CAPABILITIES_HEADER Header
;
3155 USHORT DataParityErrorRecoveryEnable
:1;
3156 USHORT EnableRelaxedOrdering
:1;
3157 USHORT MaxMemoryReadByteCount
:2;
3158 USHORT MaxOutstandingSplitTransactions
:3;
3165 ULONG FunctionNumber
:3;
3166 ULONG DeviceNumber
:5;
3168 ULONG Device64Bit
:1;
3169 ULONG Capable133MHz
:1;
3170 ULONG SplitCompletionDiscarded
:1;
3171 ULONG UnexpectedSplitCompletion
:1;
3172 ULONG DeviceComplexity
:1;
3173 ULONG DesignedMaxMemoryReadByteCount
:2;
3174 ULONG DesignedMaxOutstandingSplitTransactions
:3;
3175 ULONG DesignedMaxCumulativeReadSize
:3;
3176 ULONG ReceivedSplitCompletionErrorMessage
:1;
3177 ULONG CapablePCIX266
:1;
3178 ULONG CapablePCIX533
:1;
3182 } PCI_X_CAPABILITY
, *PPCI_X_CAPABILITY
;
3184 #define PCI_EXPRESS_ADVANCED_ERROR_REPORTING_CAP_ID 0x0001
3185 #define PCI_EXPRESS_VIRTUAL_CHANNEL_CAP_ID 0x0002
3186 #define PCI_EXPRESS_DEVICE_SERIAL_NUMBER_CAP_ID 0x0003
3187 #define PCI_EXPRESS_POWER_BUDGETING_CAP_ID 0x0004
3188 #define PCI_EXPRESS_RC_LINK_DECLARATION_CAP_ID 0x0005
3189 #define PCI_EXPRESS_RC_INTERNAL_LINK_CONTROL_CAP_ID 0x0006
3190 #define PCI_EXPRESS_RC_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION_CAP_ID 0x0007
3191 #define PCI_EXPRESS_MFVC_CAP_ID 0x0008
3192 #define PCI_EXPRESS_VC_AND_MFVC_CAP_ID 0x0009
3193 #define PCI_EXPRESS_RCRB_HEADER_CAP_ID 0x000A
3194 #define PCI_EXPRESS_SINGLE_ROOT_IO_VIRTUALIZATION_CAP_ID 0x0010
3196 typedef struct _PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
{
3197 USHORT CapabilityID
;
3200 } PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
, *PPCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
;
3202 typedef struct _PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
{
3203 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
3204 ULONG LowSerialNumber
;
3205 ULONG HighSerialNumber
;
3206 } PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
, *PPCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
;
3208 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
{
3209 _ANONYMOUS_STRUCT
struct {
3212 ULONG DataLinkProtocolError
:1;
3213 ULONG SurpriseDownError
:1;
3215 ULONG PoisonedTLP
:1;
3216 ULONG FlowControlProtocolError
:1;
3217 ULONG CompletionTimeout
:1;
3218 ULONG CompleterAbort
:1;
3219 ULONG UnexpectedCompletion
:1;
3220 ULONG ReceiverOverflow
:1;
3221 ULONG MalformedTLP
:1;
3223 ULONG UnsupportedRequestError
:1;
3227 } PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
;
3229 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
{
3230 _ANONYMOUS_STRUCT
struct {
3233 ULONG DataLinkProtocolError
:1;
3234 ULONG SurpriseDownError
:1;
3236 ULONG PoisonedTLP
:1;
3237 ULONG FlowControlProtocolError
:1;
3238 ULONG CompletionTimeout
:1;
3239 ULONG CompleterAbort
:1;
3240 ULONG UnexpectedCompletion
:1;
3241 ULONG ReceiverOverflow
:1;
3242 ULONG MalformedTLP
:1;
3244 ULONG UnsupportedRequestError
:1;
3248 } PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
;
3250 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
{
3251 _ANONYMOUS_STRUCT
struct {
3254 ULONG DataLinkProtocolError
:1;
3255 ULONG SurpriseDownError
:1;
3257 ULONG PoisonedTLP
:1;
3258 ULONG FlowControlProtocolError
:1;
3259 ULONG CompletionTimeout
:1;
3260 ULONG CompleterAbort
:1;
3261 ULONG UnexpectedCompletion
:1;
3262 ULONG ReceiverOverflow
:1;
3263 ULONG MalformedTLP
:1;
3265 ULONG UnsupportedRequestError
:1;
3269 } PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
;
3271 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_STATUS
{
3272 _ANONYMOUS_STRUCT
struct {
3273 ULONG ReceiverError
:1;
3277 ULONG ReplayNumRollover
:1;
3279 ULONG ReplayTimerTimeout
:1;
3280 ULONG AdvisoryNonFatalError
:1;
3284 } PCI_EXPRESS_CORRECTABLE_ERROR_STATUS
, *PPCI_CORRECTABLE_ERROR_STATUS
;
3286 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_MASK
{
3287 _ANONYMOUS_STRUCT
struct {
3288 ULONG ReceiverError
:1;
3292 ULONG ReplayNumRollover
:1;
3294 ULONG ReplayTimerTimeout
:1;
3295 ULONG AdvisoryNonFatalError
:1;
3299 } PCI_EXPRESS_CORRECTABLE_ERROR_MASK
, *PPCI_CORRECTABLE_ERROR_MASK
;
3301 typedef union _PCI_EXPRESS_AER_CAPABILITIES
{
3302 _ANONYMOUS_STRUCT
struct {
3303 ULONG FirstErrorPointer
:5;
3304 ULONG ECRCGenerationCapable
:1;
3305 ULONG ECRCGenerationEnable
:1;
3306 ULONG ECRCCheckCapable
:1;
3307 ULONG ECRCCheckEnable
:1;
3311 } PCI_EXPRESS_AER_CAPABILITIES
, *PPCI_EXPRESS_AER_CAPABILITIES
;
3313 typedef union _PCI_EXPRESS_ROOT_ERROR_COMMAND
{
3314 _ANONYMOUS_STRUCT
struct {
3315 ULONG CorrectableErrorReportingEnable
:1;
3316 ULONG NonFatalErrorReportingEnable
:1;
3317 ULONG FatalErrorReportingEnable
:1;
3321 } PCI_EXPRESS_ROOT_ERROR_COMMAND
, *PPCI_EXPRESS_ROOT_ERROR_COMMAND
;
3323 typedef union _PCI_EXPRESS_ROOT_ERROR_STATUS
{
3324 _ANONYMOUS_STRUCT
struct {
3325 ULONG CorrectableErrorReceived
:1;
3326 ULONG MultipleCorrectableErrorsReceived
:1;
3327 ULONG UncorrectableErrorReceived
:1;
3328 ULONG MultipleUncorrectableErrorsReceived
:1;
3329 ULONG FirstUncorrectableFatal
:1;
3330 ULONG NonFatalErrorMessagesReceived
:1;
3331 ULONG FatalErrorMessagesReceived
:1;
3333 ULONG AdvancedErrorInterruptMessageNumber
:5;
3336 } PCI_EXPRESS_ROOT_ERROR_STATUS
, *PPCI_EXPRESS_ROOT_ERROR_STATUS
;
3338 typedef union _PCI_EXPRESS_ERROR_SOURCE_ID
{
3339 _ANONYMOUS_STRUCT
struct {
3340 USHORT CorrectableSourceIdFun
:3;
3341 USHORT CorrectableSourceIdDev
:5;
3342 USHORT CorrectableSourceIdBus
:8;
3343 USHORT UncorrectableSourceIdFun
:3;
3344 USHORT UncorrectableSourceIdDev
:5;
3345 USHORT UncorrectableSourceIdBus
:8;
3348 } PCI_EXPRESS_ERROR_SOURCE_ID
, *PPCI_EXPRESS_ERROR_SOURCE_ID
;
3350 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
{
3351 _ANONYMOUS_STRUCT
struct {
3352 ULONG TargetAbortOnSplitCompletion
:1;
3353 ULONG MasterAbortOnSplitCompletion
:1;
3354 ULONG ReceivedTargetAbort
:1;
3355 ULONG ReceivedMasterAbort
:1;
3357 ULONG UnexpectedSplitCompletionError
:1;
3358 ULONG UncorrectableSplitCompletion
:1;
3359 ULONG UncorrectableDataError
:1;
3360 ULONG UncorrectableAttributeError
:1;
3361 ULONG UncorrectableAddressError
:1;
3362 ULONG DelayedTransactionDiscardTimerExpired
:1;
3363 ULONG PERRAsserted
:1;
3364 ULONG SERRAsserted
:1;
3365 ULONG InternalBridgeError
:1;
3369 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
;
3371 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
{
3372 _ANONYMOUS_STRUCT
struct {
3373 ULONG TargetAbortOnSplitCompletion
:1;
3374 ULONG MasterAbortOnSplitCompletion
:1;
3375 ULONG ReceivedTargetAbort
:1;
3376 ULONG ReceivedMasterAbort
:1;
3378 ULONG UnexpectedSplitCompletionError
:1;
3379 ULONG UncorrectableSplitCompletion
:1;
3380 ULONG UncorrectableDataError
:1;
3381 ULONG UncorrectableAttributeError
:1;
3382 ULONG UncorrectableAddressError
:1;
3383 ULONG DelayedTransactionDiscardTimerExpired
:1;
3384 ULONG PERRAsserted
:1;
3385 ULONG SERRAsserted
:1;
3386 ULONG InternalBridgeError
:1;
3390 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
;
3392 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
{
3393 _ANONYMOUS_STRUCT
struct {
3394 ULONG TargetAbortOnSplitCompletion
:1;
3395 ULONG MasterAbortOnSplitCompletion
:1;
3396 ULONG ReceivedTargetAbort
:1;
3397 ULONG ReceivedMasterAbort
:1;
3399 ULONG UnexpectedSplitCompletionError
:1;
3400 ULONG UncorrectableSplitCompletion
:1;
3401 ULONG UncorrectableDataError
:1;
3402 ULONG UncorrectableAttributeError
:1;
3403 ULONG UncorrectableAddressError
:1;
3404 ULONG DelayedTransactionDiscardTimerExpired
:1;
3405 ULONG PERRAsserted
:1;
3406 ULONG SERRAsserted
:1;
3407 ULONG InternalBridgeError
:1;
3411 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
;
3413 typedef union _PCI_EXPRESS_SEC_AER_CAPABILITIES
{
3414 _ANONYMOUS_STRUCT
struct {
3415 ULONG SecondaryUncorrectableFirstErrorPtr
:5;
3419 } PCI_EXPRESS_SEC_AER_CAPABILITIES
, *PPCI_EXPRESS_SEC_AER_CAPABILITIES
;
3421 #define ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING 0x00000001
3422 #define ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING 0x00000002
3423 #define ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING 0x00000004
3425 #define ROOT_CMD_ERROR_REPORTING_ENABLE_MASK \
3426 (ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING | \
3427 ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING | \
3428 ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING)
3430 typedef struct _PCI_EXPRESS_AER_CAPABILITY
{
3431 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
3432 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
3433 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
3434 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
3435 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
3436 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
3437 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
3439 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus
;
3440 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask
;
3441 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity
;
3442 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl
;
3443 ULONG SecHeaderLog
[4];
3444 } PCI_EXPRESS_AER_CAPABILITY
, *PPCI_EXPRESS_AER_CAPABILITY
;
3446 typedef struct _PCI_EXPRESS_ROOTPORT_AER_CAPABILITY
{
3447 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
3448 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
3449 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
3450 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
3451 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
3452 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
3453 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
3455 PCI_EXPRESS_ROOT_ERROR_COMMAND RootErrorCommand
;
3456 PCI_EXPRESS_ROOT_ERROR_STATUS RootErrorStatus
;
3457 PCI_EXPRESS_ERROR_SOURCE_ID ErrorSourceId
;
3458 } PCI_EXPRESS_ROOTPORT_AER_CAPABILITY
, *PPCI_EXPRESS_ROOTPORT_AER_CAPABILITY
;
3460 typedef struct _PCI_EXPRESS_BRIDGE_AER_CAPABILITY
{
3461 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
3462 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
3463 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
3464 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
3465 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
3466 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
3467 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
3469 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus
;
3470 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask
;
3471 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity
;
3472 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl
;
3473 ULONG SecHeaderLog
[4];
3474 } PCI_EXPRESS_BRIDGE_AER_CAPABILITY
, *PPCI_EXPRESS_BRIDGE_AER_CAPABILITY
;
3476 typedef union _PCI_EXPRESS_SRIOV_CAPS
{
3477 _ANONYMOUS_STRUCT
struct {
3478 ULONG VFMigrationCapable
:1;
3480 ULONG VFMigrationInterruptNumber
:11;
3483 } PCI_EXPRESS_SRIOV_CAPS
, *PPCI_EXPRESS_SRIOV_CAPS
;
3485 typedef union _PCI_EXPRESS_SRIOV_CONTROL
{
3486 _ANONYMOUS_STRUCT
struct {
3488 USHORT VFMigrationEnable
:1;
3489 USHORT VFMigrationInterruptEnable
:1;
3490 USHORT VFMemorySpaceEnable
:1;
3491 USHORT ARICapableHierarchy
:1;
3492 USHORT Reserved1
:11;
3495 } PCI_EXPRESS_SRIOV_CONTROL
, *PPCI_EXPRESS_SRIOV_CONTROL
;
3497 typedef union _PCI_EXPRESS_SRIOV_STATUS
{
3498 _ANONYMOUS_STRUCT
struct {
3499 USHORT VFMigrationStatus
:1;
3500 USHORT Reserved1
:15;
3503 } PCI_EXPRESS_SRIOV_STATUS
, *PPCI_EXPRESS_SRIOV_STATUS
;
3505 typedef union _PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
{
3506 _ANONYMOUS_STRUCT
struct {
3507 ULONG VFMigrationStateBIR
:3;
3508 ULONG VFMigrationStateOffset
:29;
3511 } PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
, *PPCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
;
3513 typedef struct _PCI_EXPRESS_SRIOV_CAPABILITY
{
3514 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
3515 PCI_EXPRESS_SRIOV_CAPS SRIOVCapabilities
;
3516 PCI_EXPRESS_SRIOV_CONTROL SRIOVControl
;
3517 PCI_EXPRESS_SRIOV_STATUS SRIOVStatus
;
3521 UCHAR FunctionDependencyLink
;
3523 USHORT FirstVFOffset
;
3527 ULONG SupportedPageSizes
;
3528 ULONG SystemPageSize
;
3529 ULONG BaseAddresses
[PCI_TYPE0_ADDRESSES
];
3530 PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY VFMigrationStateArrayOffset
;
3531 } PCI_EXPRESS_SRIOV_CAPABILITY
, *PPCI_EXPRESS_SRIOV_CAPABILITY
;
3533 /* PCI device classes */
3534 #define PCI_CLASS_PRE_20 0x00
3535 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
3536 #define PCI_CLASS_NETWORK_CTLR 0x02
3537 #define PCI_CLASS_DISPLAY_CTLR 0x03
3538 #define PCI_CLASS_MULTIMEDIA_DEV 0x04
3539 #define PCI_CLASS_MEMORY_CTLR 0x05
3540 #define PCI_CLASS_BRIDGE_DEV 0x06
3541 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
3542 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
3543 #define PCI_CLASS_INPUT_DEV 0x09
3544 #define PCI_CLASS_DOCKING_STATION 0x0a
3545 #define PCI_CLASS_PROCESSOR 0x0b
3546 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
3547 #define PCI_CLASS_WIRELESS_CTLR 0x0d
3548 #define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0e
3549 #define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0f
3550 #define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10
3551 #define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11
3552 #define PCI_CLASS_NOT_DEFINED 0xff
3554 /* PCI device subclasses for class 0 */
3555 #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
3556 #define PCI_SUBCLASS_PRE_20_VGA 0x01
3558 /* PCI device subclasses for class 1 (mass storage controllers)*/
3559 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
3560 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
3561 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
3562 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
3563 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
3564 #define PCI_SUBCLASS_MSC_OTHER 0x80
3566 /* PCI device subclasses for class 2 (network controllers)*/
3567 #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
3568 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
3569 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
3570 #define PCI_SUBCLASS_NET_ATM_CTLR 0x03
3571 #define PCI_SUBCLASS_NET_ISDN_CTLR 0x04
3572 #define PCI_SUBCLASS_NET_OTHER 0x80
3574 /* PCI device subclasses for class 3 (display controllers)*/
3575 #define PCI_SUBCLASS_VID_VGA_CTLR 0x00
3576 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01
3577 #define PCI_SUBCLASS_VID_3D_CTLR 0x02
3578 #define PCI_SUBCLASS_VID_OTHER 0x80
3580 /* PCI device subclasses for class 4 (multimedia device)*/
3581 #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
3582 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
3583 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
3584 #define PCI_SUBCLASS_MM_OTHER 0x80
3586 /* PCI device subclasses for class 5 (memory controller)*/
3587 #define PCI_SUBCLASS_MEM_RAM 0x00
3588 #define PCI_SUBCLASS_MEM_FLASH 0x01
3589 #define PCI_SUBCLASS_MEM_OTHER 0x80
3591 /* PCI device subclasses for class 6 (bridge device)*/
3592 #define PCI_SUBCLASS_BR_HOST 0x00
3593 #define PCI_SUBCLASS_BR_ISA 0x01
3594 #define PCI_SUBCLASS_BR_EISA 0x02
3595 #define PCI_SUBCLASS_BR_MCA 0x03
3596 #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
3597 #define PCI_SUBCLASS_BR_PCMCIA 0x05
3598 #define PCI_SUBCLASS_BR_NUBUS 0x06
3599 #define PCI_SUBCLASS_BR_CARDBUS 0x07
3600 #define PCI_SUBCLASS_BR_RACEWAY 0x08
3601 #define PCI_SUBCLASS_BR_OTHER 0x80
3603 #define PCI_SUBCLASS_COM_SERIAL 0x00
3604 #define PCI_SUBCLASS_COM_PARALLEL 0x01
3605 #define PCI_SUBCLASS_COM_MULTIPORT 0x02
3606 #define PCI_SUBCLASS_COM_MODEM 0x03
3607 #define PCI_SUBCLASS_COM_OTHER 0x80
3609 #define PCI_SUBCLASS_SYS_INTERRUPT_CTLR 0x00
3610 #define PCI_SUBCLASS_SYS_DMA_CTLR 0x01
3611 #define PCI_SUBCLASS_SYS_SYSTEM_TIMER 0x02
3612 #define PCI_SUBCLASS_SYS_REAL_TIME_CLOCK 0x03
3613 #define PCI_SUBCLASS_SYS_GEN_HOTPLUG_CTLR 0x04
3614 #define PCI_SUBCLASS_SYS_SDIO_CTRL 0x05
3615 #define PCI_SUBCLASS_SYS_OTHER 0x80
3617 #define PCI_SUBCLASS_INP_KEYBOARD 0x00
3618 #define PCI_SUBCLASS_INP_DIGITIZER 0x01
3619 #define PCI_SUBCLASS_INP_MOUSE 0x02
3620 #define PCI_SUBCLASS_INP_SCANNER 0x03
3621 #define PCI_SUBCLASS_INP_GAMEPORT 0x04
3622 #define PCI_SUBCLASS_INP_OTHER 0x80
3624 #define PCI_SUBCLASS_DOC_GENERIC 0x00
3625 #define PCI_SUBCLASS_DOC_OTHER 0x80
3627 #define PCI_SUBCLASS_PROC_386 0x00
3628 #define PCI_SUBCLASS_PROC_486 0x01
3629 #define PCI_SUBCLASS_PROC_PENTIUM 0x02
3630 #define PCI_SUBCLASS_PROC_ALPHA 0x10
3631 #define PCI_SUBCLASS_PROC_POWERPC 0x20
3632 #define PCI_SUBCLASS_PROC_COPROCESSOR 0x40
3634 /* PCI device subclasses for class C (serial bus controller)*/
3635 #define PCI_SUBCLASS_SB_IEEE1394 0x00
3636 #define PCI_SUBCLASS_SB_ACCESS 0x01
3637 #define PCI_SUBCLASS_SB_SSA 0x02
3638 #define PCI_SUBCLASS_SB_USB 0x03
3639 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
3640 #define PCI_SUBCLASS_SB_SMBUS 0x05
3642 #define PCI_SUBCLASS_WIRELESS_IRDA 0x00
3643 #define PCI_SUBCLASS_WIRELESS_CON_IR 0x01
3644 #define PCI_SUBCLASS_WIRELESS_RF 0x10
3645 #define PCI_SUBCLASS_WIRELESS_OTHER 0x80
3647 #define PCI_SUBCLASS_INTIO_I2O 0x00
3649 #define PCI_SUBCLASS_SAT_TV 0x01
3650 #define PCI_SUBCLASS_SAT_AUDIO 0x02
3651 #define PCI_SUBCLASS_SAT_VOICE 0x03
3652 #define PCI_SUBCLASS_SAT_DATA 0x04
3654 #define PCI_SUBCLASS_CRYPTO_NET_COMP 0x00
3655 #define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT 0x10
3656 #define PCI_SUBCLASS_CRYPTO_OTHER 0x80
3658 #define PCI_SUBCLASS_DASP_DPIO 0x00
3659 #define PCI_SUBCLASS_DASP_OTHER 0x80
3661 #define PCI_ADDRESS_IO_SPACE 0x00000001
3662 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
3663 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
3664 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
3665 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
3666 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
3668 #define PCI_TYPE_32BIT 0
3669 #define PCI_TYPE_20BIT 2
3670 #define PCI_TYPE_64BIT 4
3672 #define PCI_ROMADDRESS_ENABLED 0x00000001
3674 #endif /* _PCI_X_ */
3676 #define PCI_EXPRESS_LINK_QUIESCENT_INTERFACE_VERSION 1
3679 (NTAPI PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
)(
3680 IN OUT PVOID Context
);
3681 typedef PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
*PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
;
3684 (NTAPI PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
)(
3685 IN OUT PVOID Context
);
3686 typedef PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
*PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
;
3688 typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE
{
3692 PINTERFACE_REFERENCE InterfaceReference
;
3693 PINTERFACE_DEREFERENCE InterfaceDereference
;
3694 PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE PciExpressEnterLinkQuiescentMode
;
3695 PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE PciExpressExitLinkQuiescentMode
;
3696 } PCI_EXPRESS_LINK_QUIESCENT_INTERFACE
, *PPCI_EXPRESS_LINK_QUIESCENT_INTERFACE
;
3698 #define PCI_EXPRESS_ROOT_PORT_INTERFACE_VERSION 1
3701 (NTAPI
*PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE
)(
3708 (NTAPI
*PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE
)(
3714 typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE
{
3718 PINTERFACE_REFERENCE InterfaceReference
;
3719 PINTERFACE_DEREFERENCE InterfaceDereference
;
3720 PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE ReadConfigSpace
;
3721 PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE WriteConfigSpace
;
3722 } PCI_EXPRESS_ROOT_PORT_INTERFACE
, *PPCI_EXPRESS_ROOT_PORT_INTERFACE
;
3724 #define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION 1
3727 (NTAPI PCI_MSIX_SET_ENTRY
)(
3729 IN ULONG TableEntry
,
3730 IN ULONG MessageNumber
);
3731 typedef PCI_MSIX_SET_ENTRY
*PPCI_MSIX_SET_ENTRY
;
3734 (NTAPI PCI_MSIX_MASKUNMASK_ENTRY
)(
3736 IN ULONG TableEntry
);
3737 typedef PCI_MSIX_MASKUNMASK_ENTRY
*PPCI_MSIX_MASKUNMASK_ENTRY
;
3740 (NTAPI PCI_MSIX_GET_ENTRY
)(
3742 IN ULONG TableEntry
,
3743 OUT PULONG MessageNumber
,
3744 OUT PBOOLEAN Masked
);
3745 typedef PCI_MSIX_GET_ENTRY
*PPCI_MSIX_GET_ENTRY
;
3748 (NTAPI PCI_MSIX_GET_TABLE_SIZE
)(
3750 OUT PULONG TableSize
);
3751 typedef PCI_MSIX_GET_TABLE_SIZE
*PPCI_MSIX_GET_TABLE_SIZE
;
3753 typedef struct _PCI_MSIX_TABLE_CONFIG_INTERFACE
{
3757 PINTERFACE_REFERENCE InterfaceReference
;
3758 PINTERFACE_DEREFERENCE InterfaceDereference
;
3759 PPCI_MSIX_SET_ENTRY SetTableEntry
;
3760 PPCI_MSIX_MASKUNMASK_ENTRY MaskTableEntry
;
3761 PPCI_MSIX_MASKUNMASK_ENTRY UnmaskTableEntry
;
3762 PPCI_MSIX_GET_ENTRY GetTableEntry
;
3763 PPCI_MSIX_GET_TABLE_SIZE GetTableSize
;
3764 } PCI_MSIX_TABLE_CONFIG_INTERFACE
, *PPCI_MSIX_TABLE_CONFIG_INTERFACE
;
3766 #define PCI_MSIX_TABLE_CONFIG_MINIMUM_SIZE \
3767 RTL_SIZEOF_THROUGH_FIELD(PCI_MSIX_TABLE_CONFIG_INTERFACE, UnmaskTableEntry)
3773 typedef enum _CONFIGURATION_TYPE
{
3776 FloatingPointProcessor
,
3786 MultiFunctionAdapter
,
3800 FloppyDiskPeripheral
,
3813 RealModeIrqRoutingTable
,
3814 RealModePCIEnumeration
,
3816 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
3817 #endif /* !_ARC_DDK_ */
3820 ** IRP function codes
3823 #define IRP_MN_QUERY_DIRECTORY 0x01
3824 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
3826 #define IRP_MN_USER_FS_REQUEST 0x00
3827 #define IRP_MN_MOUNT_VOLUME 0x01
3828 #define IRP_MN_VERIFY_VOLUME 0x02
3829 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
3830 #define IRP_MN_TRACK_LINK 0x04
3831 #define IRP_MN_KERNEL_CALL 0x04
3833 #define IRP_MN_LOCK 0x01
3834 #define IRP_MN_UNLOCK_SINGLE 0x02
3835 #define IRP_MN_UNLOCK_ALL 0x03
3836 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
3838 #define IRP_MN_FLUSH_AND_PURGE 0x01
3840 #define IRP_MN_NORMAL 0x00
3841 #define IRP_MN_DPC 0x01
3842 #define IRP_MN_MDL 0x02
3843 #define IRP_MN_COMPLETE 0x04
3844 #define IRP_MN_COMPRESSED 0x08
3846 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
3847 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
3848 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
3850 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
3852 #define IO_CHECK_CREATE_PARAMETERS 0x0200
3853 #define IO_ATTACH_DEVICE 0x0400
3854 #define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800
3857 (NTAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
3859 IN PUNICODE_STRING PathName
,
3860 IN INTERFACE_TYPE BusType
,
3862 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
3863 IN CONFIGURATION_TYPE ControllerType
,
3864 IN ULONG ControllerNumber
,
3865 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
3866 IN CONFIGURATION_TYPE PeripheralType
,
3867 IN ULONG PeripheralNumber
,
3868 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
3870 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
3871 IoQueryDeviceIdentifier
= 0,
3872 IoQueryDeviceConfigurationData
,
3873 IoQueryDeviceComponentInformation
,
3874 IoQueryDeviceMaxData
3875 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
3878 (NTAPI
*PDRIVER_REINITIALIZE
)(
3879 IN
struct _DRIVER_OBJECT
*DriverObject
,
3880 IN PVOID Context OPTIONAL
,
3883 typedef struct _CONTROLLER_OBJECT
{
3886 PVOID ControllerExtension
;
3887 KDEVICE_QUEUE DeviceWaitQueue
;
3889 LARGE_INTEGER Spare2
;
3890 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
3892 #define DRVO_REINIT_REGISTERED 0x00000008
3893 #define DRVO_INITIALIZED 0x00000010
3894 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
3895 #define DRVO_LEGACY_RESOURCES 0x00000040
3897 typedef struct _CONFIGURATION_INFORMATION
{
3902 ULONG ScsiPortCount
;
3904 ULONG ParallelCount
;
3905 BOOLEAN AtDiskPrimaryAddressClaimed
;
3906 BOOLEAN AtDiskSecondaryAddressClaimed
;
3908 ULONG MediumChangerCount
;
3909 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
3911 typedef struct _DISK_SIGNATURE
{
3912 ULONG PartitionStyle
;
3913 _ANONYMOUS_UNION
union {
3922 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
3924 typedef struct _TXN_PARAMETER_BLOCK
{
3927 PVOID TransactionObject
;
3928 } TXN_PARAMETER_BLOCK
, *PTXN_PARAMETER_BLOCK
;
3930 #define TXF_MINIVERSION_DEFAULT_VIEW (0xFFFE)
3932 typedef struct _IO_DRIVER_CREATE_CONTEXT
{
3934 struct _ECP_LIST
*ExtraCreateParameter
;
3935 PVOID DeviceObjectHint
;
3936 PTXN_PARAMETER_BLOCK TxnParameters
;
3937 } IO_DRIVER_CREATE_CONTEXT
, *PIO_DRIVER_CREATE_CONTEXT
;
3939 typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD
{
3943 PINTERFACE_REFERENCE InterfaceReference
;
3944 PINTERFACE_DEREFERENCE InterfaceDereference
;
3945 PGET_SET_DEVICE_DATA SetBusData
;
3946 PGET_SET_DEVICE_DATA GetBusData
;
3948 } AGP_TARGET_BUS_INTERFACE_STANDARD
, *PAGP_TARGET_BUS_INTERFACE_STANDARD
;
3951 (NTAPI
*PGET_LOCATION_STRING
)(
3952 IN OUT PVOID Context OPTIONAL
,
3953 OUT PWCHAR
*LocationStrings
);
3955 typedef struct _PNP_LOCATION_INTERFACE
{
3959 PINTERFACE_REFERENCE InterfaceReference
;
3960 PINTERFACE_DEREFERENCE InterfaceDereference
;
3961 PGET_LOCATION_STRING GetLocationString
;
3962 } PNP_LOCATION_INTERFACE
, *PPNP_LOCATION_INTERFACE
;
3964 typedef enum _ARBITER_ACTION
{
3965 ArbiterActionTestAllocation
,
3966 ArbiterActionRetestAllocation
,
3967 ArbiterActionCommitAllocation
,
3968 ArbiterActionRollbackAllocation
,
3969 ArbiterActionQueryAllocatedResources
,
3970 ArbiterActionWriteReservedResources
,
3971 ArbiterActionQueryConflict
,
3972 ArbiterActionQueryArbitrate
,
3973 ArbiterActionAddReserved
,
3974 ArbiterActionBootAllocation
3975 } ARBITER_ACTION
, *PARBITER_ACTION
;
3977 typedef struct _ARBITER_CONFLICT_INFO
{
3978 PDEVICE_OBJECT OwningObject
;
3981 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
3983 typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS
{
3984 IN OUT PLIST_ENTRY ArbitrationList
;
3985 IN ULONG AllocateFromCount
;
3986 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
3987 } ARBITER_TEST_ALLOCATION_PARAMETERS
, *PARBITER_TEST_ALLOCATION_PARAMETERS
;
3989 typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS
{
3990 IN OUT PLIST_ENTRY ArbitrationList
;
3991 IN ULONG AllocateFromCount
;
3992 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
3993 } ARBITER_RETEST_ALLOCATION_PARAMETERS
, *PARBITER_RETEST_ALLOCATION_PARAMETERS
;
3995 typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS
{
3996 IN OUT PLIST_ENTRY ArbitrationList
;
3997 } ARBITER_BOOT_ALLOCATION_PARAMETERS
, *PARBITER_BOOT_ALLOCATION_PARAMETERS
;
3999 typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
{
4000 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
4001 } ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
;
4003 typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS
{
4004 IN PDEVICE_OBJECT PhysicalDeviceObject
;
4005 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
4006 OUT PULONG ConflictCount
;
4007 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
4008 } ARBITER_QUERY_CONFLICT_PARAMETERS
, *PARBITER_QUERY_CONFLICT_PARAMETERS
;
4010 typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS
{
4011 IN PLIST_ENTRY ArbitrationList
;
4012 } ARBITER_QUERY_ARBITRATE_PARAMETERS
, *PARBITER_QUERY_ARBITRATE_PARAMETERS
;
4014 typedef struct _ARBITER_ADD_RESERVED_PARAMETERS
{
4015 IN PDEVICE_OBJECT ReserveDevice
;
4016 } ARBITER_ADD_RESERVED_PARAMETERS
, *PARBITER_ADD_RESERVED_PARAMETERS
;
4018 typedef struct _ARBITER_PARAMETERS
{
4020 ARBITER_TEST_ALLOCATION_PARAMETERS TestAllocation
;
4021 ARBITER_RETEST_ALLOCATION_PARAMETERS RetestAllocation
;
4022 ARBITER_BOOT_ALLOCATION_PARAMETERS BootAllocation
;
4023 ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS QueryAllocatedResources
;
4024 ARBITER_QUERY_CONFLICT_PARAMETERS QueryConflict
;
4025 ARBITER_QUERY_ARBITRATE_PARAMETERS QueryArbitrate
;
4026 ARBITER_ADD_RESERVED_PARAMETERS AddReserved
;
4028 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
4030 typedef enum _ARBITER_REQUEST_SOURCE
{
4031 ArbiterRequestUndefined
= -1,
4032 ArbiterRequestLegacyReported
,
4033 ArbiterRequestHalReported
,
4034 ArbiterRequestLegacyAssigned
,
4035 ArbiterRequestPnpDetected
,
4036 ArbiterRequestPnpEnumerated
4037 } ARBITER_REQUEST_SOURCE
;
4039 typedef enum _ARBITER_RESULT
{
4040 ArbiterResultUndefined
= -1,
4041 ArbiterResultSuccess
,
4042 ArbiterResultExternalConflict
,
4043 ArbiterResultNullRequest
4046 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
4048 typedef struct _ARBITER_LIST_ENTRY
{
4049 LIST_ENTRY ListEntry
;
4050 ULONG AlternativeCount
;
4051 PIO_RESOURCE_DESCRIPTOR Alternatives
;
4052 PDEVICE_OBJECT PhysicalDeviceObject
;
4053 ARBITER_REQUEST_SOURCE RequestSource
;
4056 INTERFACE_TYPE InterfaceType
;
4059 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
4060 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
4061 ARBITER_RESULT Result
;
4062 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
4065 (NTAPI
*PARBITER_HANDLER
)(
4066 IN OUT PVOID Context
,
4067 IN ARBITER_ACTION Action
,
4068 IN OUT PARBITER_PARAMETERS Parameters
);
4070 #define ARBITER_PARTIAL 0x00000001
4072 typedef struct _ARBITER_INTERFACE
{
4076 PINTERFACE_REFERENCE InterfaceReference
;
4077 PINTERFACE_DEREFERENCE InterfaceDereference
;
4078 PARBITER_HANDLER ArbiterHandler
;
4080 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
4082 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
4083 TranslateChildToParent
,
4084 TranslateParentToChild
4085 } RESOURCE_TRANSLATION_DIRECTION
;
4088 (NTAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
4089 IN OUT PVOID Context OPTIONAL
,
4090 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
4091 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
4092 IN ULONG AlternativesCount OPTIONAL
,
4093 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
4094 IN PDEVICE_OBJECT PhysicalDeviceObject
,
4095 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
4098 (NTAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
4099 IN OUT PVOID Context OPTIONAL
,
4100 IN PIO_RESOURCE_DESCRIPTOR Source
,
4101 IN PDEVICE_OBJECT PhysicalDeviceObject
,
4102 OUT PULONG TargetCount
,
4103 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
4105 typedef struct _TRANSLATOR_INTERFACE
{
4109 PINTERFACE_REFERENCE InterfaceReference
;
4110 PINTERFACE_DEREFERENCE InterfaceDereference
;
4111 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
4112 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
4113 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
4115 typedef struct _PCI_AGP_CAPABILITY
{
4116 PCI_CAPABILITIES_HEADER Header
;
4120 struct _PCI_AGP_STATUS
{
4125 ULONG HostTransDisable
:1;
4127 ULONG ITA_Coherent
:1;
4128 ULONG SideBandAddressing
:1;
4129 ULONG CalibrationCycle
:3;
4130 ULONG AsyncRequestSize
:3;
4134 ULONG RequestQueueDepthMaximum
:8;
4136 struct _PCI_AGP_COMMAND
{
4139 ULONG FastWriteEnable
:1;
4140 ULONG FourGBEnable
:1;
4145 ULONG CalibrationCycle
:3;
4146 ULONG AsyncReqSize
:3;
4148 ULONG RequestQueueDepth
:8;
4150 } PCI_AGP_CAPABILITY
, *PPCI_AGP_CAPABILITY
;
4152 typedef enum _EXTENDED_AGP_REGISTER
{
4160 } EXTENDED_AGP_REGISTER
, *PEXTENDED_AGP_REGISTER
;
4162 typedef struct _PCI_AGP_ISOCH_STATUS
{
4169 } PCI_AGP_ISOCH_STATUS
, *PPCI_AGP_ISOCH_STATUS
;
4171 typedef struct _PCI_AGP_CONTROL
{
4173 ULONG GTLB_Enable
:1;
4175 ULONG CAL_Disable
:1;
4177 } PCI_AGP_CONTROL
, *PPCI_AGP_CONTROL
;
4179 typedef struct _PCI_AGP_APERTURE_PAGE_SIZE
{
4180 USHORT PageSizeMask
:11;
4182 USHORT PageSizeSelect
:4;
4183 } PCI_AGP_APERTURE_PAGE_SIZE
, *PPCI_AGP_APERTURE_PAGE_SIZE
;
4185 typedef struct _PCI_AGP_ISOCH_COMMAND
{
4189 } PCI_AGP_ISOCH_COMMAND
, *PPCI_AGP_ISOCH_COMMAND
;
4191 typedef struct PCI_AGP_EXTENDED_CAPABILITY
{
4192 PCI_AGP_ISOCH_STATUS IsochStatus
;
4193 PCI_AGP_CONTROL AgpControl
;
4194 USHORT ApertureSize
;
4195 PCI_AGP_APERTURE_PAGE_SIZE AperturePageSize
;
4198 PCI_AGP_ISOCH_COMMAND IsochCommand
;
4199 } PCI_AGP_EXTENDED_CAPABILITY
, *PPCI_AGP_EXTENDED_CAPABILITY
;
4201 #define PCI_AGP_RATE_1X 0x1
4202 #define PCI_AGP_RATE_2X 0x2
4203 #define PCI_AGP_RATE_4X 0x4
4205 #define PCIX_MODE_CONVENTIONAL_PCI 0x0
4206 #define PCIX_MODE1_66MHZ 0x1
4207 #define PCIX_MODE1_100MHZ 0x2
4208 #define PCIX_MODE1_133MHZ 0x3
4209 #define PCIX_MODE2_266_66MHZ 0x9
4210 #define PCIX_MODE2_266_100MHZ 0xA
4211 #define PCIX_MODE2_266_133MHZ 0xB
4212 #define PCIX_MODE2_533_66MHZ 0xD
4213 #define PCIX_MODE2_533_100MHZ 0xE
4214 #define PCIX_MODE2_533_133MHZ 0xF
4216 #define PCIX_VERSION_MODE1_ONLY 0x0
4217 #define PCIX_VERSION_MODE2_ECC 0x1
4218 #define PCIX_VERSION_DUAL_MODE_ECC 0x2
4220 typedef struct _PCIX_BRIDGE_CAPABILITY
{
4221 PCI_CAPABILITIES_HEADER Header
;
4223 _ANONYMOUS_STRUCT
struct {
4225 USHORT Bus133MHzCapable
:1;
4226 USHORT SplitCompletionDiscarded
:1;
4227 USHORT UnexpectedSplitCompletion
:1;
4228 USHORT SplitCompletionOverrun
:1;
4229 USHORT SplitRequestDelayed
:1;
4230 USHORT BusModeFrequency
:4;
4233 USHORT Bus266MHzCapable
:1;
4234 USHORT Bus533MHzCapable
:1;
4239 _ANONYMOUS_STRUCT
struct {
4240 ULONG FunctionNumber
:3;
4241 ULONG DeviceNumber
:5;
4243 ULONG Device64Bit
:1;
4244 ULONG Device133MHzCapable
:1;
4245 ULONG SplitCompletionDiscarded
:1;
4246 ULONG UnexpectedSplitCompletion
:1;
4247 ULONG SplitCompletionOverrun
:1;
4248 ULONG SplitRequestDelayed
:1;
4251 ULONG Device266MHzCapable
:1;
4252 ULONG Device533MHzCapable
:1;
4256 USHORT UpstreamSplitTransactionCapacity
;
4257 USHORT UpstreamSplitTransactionLimit
;
4258 USHORT DownstreamSplitTransactionCapacity
;
4259 USHORT DownstreamSplitTransactionLimit
;
4261 _ANONYMOUS_STRUCT
struct {
4262 ULONG SelectSecondaryRegisters
:1;
4263 ULONG ErrorPresentInOtherBank
:1;
4264 ULONG AdditionalCorrectableError
:1;
4265 ULONG AdditionalUncorrectableError
:1;
4267 ULONG ErrorCorrected
:1;
4269 ULONG ErrorFirstCommand
:4;
4270 ULONG ErrorSecondCommand
:4;
4271 ULONG ErrorUpperAttributes
:4;
4272 ULONG ControlUpdateEnable
:1;
4274 ULONG DisableSingleBitCorrection
:1;
4279 ULONG EccFirstAddress
;
4280 ULONG EccSecondAddress
;
4282 } PCIX_BRIDGE_CAPABILITY
, *PPCIX_BRIDGE_CAPABILITY
;
4284 typedef struct _PCI_SUBSYSTEM_IDS_CAPABILITY
{
4285 PCI_CAPABILITIES_HEADER Header
;
4289 } PCI_SUBSYSTEM_IDS_CAPABILITY
, *PPCI_SUBSYSTEM_IDS_CAPABILITY
;
4291 #define OSC_FIRMWARE_FAILURE 0x02
4292 #define OSC_UNRECOGNIZED_UUID 0x04
4293 #define OSC_UNRECOGNIZED_REVISION 0x08
4294 #define OSC_CAPABILITIES_MASKED 0x10
4296 #define PCI_ROOT_BUS_OSC_METHOD_CAPABILITY_REVISION 0x01
4298 typedef struct _PCI_ROOT_BUS_OSC_SUPPORT_FIELD
{
4300 _ANONYMOUS_STRUCT
struct {
4301 ULONG ExtendedConfigOpRegions
:1;
4302 ULONG ActiveStatePowerManagement
:1;
4303 ULONG ClockPowerManagement
:1;
4304 ULONG SegmentGroups
:1;
4305 ULONG MessageSignaledInterrupts
:1;
4306 ULONG WindowsHardwareErrorArchitecture
:1;
4311 } PCI_ROOT_BUS_OSC_SUPPORT_FIELD
, *PPCI_ROOT_BUS_OSC_SUPPORT_FIELD
;
4313 typedef struct _PCI_ROOT_BUS_OSC_CONTROL_FIELD
{
4315 _ANONYMOUS_STRUCT
struct {
4316 ULONG ExpressNativeHotPlug
:1;
4317 ULONG ShpcNativeHotPlug
:1;
4318 ULONG ExpressNativePME
:1;
4319 ULONG ExpressAdvancedErrorReporting
:1;
4320 ULONG ExpressCapabilityStructure
:1;
4325 } PCI_ROOT_BUS_OSC_CONTROL_FIELD
, *PPCI_ROOT_BUS_OSC_CONTROL_FIELD
;
4327 typedef enum _PCI_HARDWARE_INTERFACE
{
4332 } PCI_HARDWARE_INTERFACE
, *PPCI_HARDWARE_INTERFACE
;
4339 typedef struct _PCI_ROOT_BUS_HARDWARE_CAPABILITY
{
4340 PCI_HARDWARE_INTERFACE SecondaryInterface
;
4341 _ANONYMOUS_STRUCT
struct {
4342 BOOLEAN BusCapabilitiesFound
;
4343 ULONG CurrentSpeedAndMode
;
4344 ULONG SupportedSpeedsAndModes
;
4345 BOOLEAN DeviceIDMessagingCapable
;
4346 PCI_BUS_WIDTH SecondaryBusWidth
;
4348 PCI_ROOT_BUS_OSC_SUPPORT_FIELD OscFeatureSupport
;
4349 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlRequest
;
4350 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlGranted
;
4351 } PCI_ROOT_BUS_HARDWARE_CAPABILITY
, *PPCI_ROOT_BUS_HARDWARE_CAPABILITY
;
4353 typedef union _PCI_EXPRESS_CAPABILITIES_REGISTER
{
4354 _ANONYMOUS_STRUCT
struct {
4355 USHORT CapabilityVersion
:4;
4356 USHORT DeviceType
:4;
4357 USHORT SlotImplemented
:1;
4358 USHORT InterruptMessageNumber
:5;
4362 } PCI_EXPRESS_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_CAPABILITIES_REGISTER
;
4364 typedef union _PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
{
4365 _ANONYMOUS_STRUCT
struct {
4366 ULONG MaxPayloadSizeSupported
:3;
4367 ULONG PhantomFunctionsSupported
:2;
4368 ULONG ExtendedTagSupported
:1;
4369 ULONG L0sAcceptableLatency
:3;
4370 ULONG L1AcceptableLatency
:3;
4372 ULONG RoleBasedErrorReporting
:1;
4374 ULONG CapturedSlotPowerLimit
:8;
4375 ULONG CapturedSlotPowerLimitScale
:2;
4379 } PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
;
4381 #define PCI_EXPRESS_AER_DEVICE_CONTROL_MASK 0x07;
4383 typedef union _PCI_EXPRESS_DEVICE_CONTROL_REGISTER
{
4384 _ANONYMOUS_STRUCT
struct {
4385 USHORT CorrectableErrorEnable
:1;
4386 USHORT NonFatalErrorEnable
:1;
4387 USHORT FatalErrorEnable
:1;
4388 USHORT UnsupportedRequestErrorEnable
:1;
4389 USHORT EnableRelaxedOrder
:1;
4390 USHORT MaxPayloadSize
:3;
4391 USHORT ExtendedTagEnable
:1;
4392 USHORT PhantomFunctionsEnable
:1;
4393 USHORT AuxPowerEnable
:1;
4394 USHORT NoSnoopEnable
:1;
4395 USHORT MaxReadRequestSize
:3;
4396 USHORT BridgeConfigRetryEnable
:1;
4399 } PCI_EXPRESS_DEVICE_CONTROL_REGISTER
, *PPCI_EXPRESS_DEVICE_CONTROL_REGISTER
;
4401 #define PCI_EXPRESS_AER_DEVICE_STATUS_MASK 0x0F;
4403 typedef union _PCI_EXPRESS_DEVICE_STATUS_REGISTER
{
4404 _ANONYMOUS_STRUCT
struct {
4405 USHORT CorrectableErrorDetected
:1;
4406 USHORT NonFatalErrorDetected
:1;
4407 USHORT FatalErrorDetected
:1;
4408 USHORT UnsupportedRequestDetected
:1;
4409 USHORT AuxPowerDetected
:1;
4410 USHORT TransactionsPending
:1;
4414 } PCI_EXPRESS_DEVICE_STATUS_REGISTER
, *PPCI_EXPRESS_DEVICE_STATUS_REGISTER
;
4416 typedef union _PCI_EXPRESS_LINK_CAPABILITIES_REGISTER
{
4417 _ANONYMOUS_STRUCT
struct {
4418 ULONG MaximumLinkSpeed
:4;
4419 ULONG MaximumLinkWidth
:6;
4420 ULONG ActiveStatePMSupport
:2;
4421 ULONG L0sExitLatency
:3;
4422 ULONG L1ExitLatency
:3;
4423 ULONG ClockPowerManagement
:1;
4424 ULONG SurpriseDownErrorReportingCapable
:1;
4425 ULONG DataLinkLayerActiveReportingCapable
:1;
4430 } PCI_EXPRESS_LINK_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_LINK_CAPABILITIES_REGISTER
;
4432 typedef union _PCI_EXPRESS_LINK_CONTROL_REGISTER
{
4433 _ANONYMOUS_STRUCT
struct {
4434 USHORT ActiveStatePMControl
:2;
4436 USHORT ReadCompletionBoundary
:1;
4437 USHORT LinkDisable
:1;
4438 USHORT RetrainLink
:1;
4439 USHORT CommonClockConfig
:1;
4440 USHORT ExtendedSynch
:1;
4441 USHORT EnableClockPowerManagement
:1;
4445 } PCI_EXPRESS_LINK_CONTROL_REGISTER
, *PPCI_EXPRESS_LINK_CONTROL_REGISTER
;
4447 typedef union _PCI_EXPRESS_LINK_STATUS_REGISTER
{
4448 _ANONYMOUS_STRUCT
struct {
4452 USHORT LinkTraining
:1;
4453 USHORT SlotClockConfig
:1;
4454 USHORT DataLinkLayerActive
:1;
4458 } PCI_EXPRESS_LINK_STATUS_REGISTER
, *PPCI_EXPRESS_LINK_STATUS_REGISTER
;
4460 typedef union _PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
{
4461 _ANONYMOUS_STRUCT
struct {
4462 ULONG AttentionButtonPresent
:1;
4463 ULONG PowerControllerPresent
:1;
4464 ULONG MRLSensorPresent
:1;
4465 ULONG AttentionIndicatorPresent
:1;
4466 ULONG PowerIndicatorPresent
:1;
4467 ULONG HotPlugSurprise
:1;
4468 ULONG HotPlugCapable
:1;
4469 ULONG SlotPowerLimit
:8;
4470 ULONG SlotPowerLimitScale
:2;
4471 ULONG ElectromechanicalLockPresent
:1;
4472 ULONG NoCommandCompletedSupport
:1;
4473 ULONG PhysicalSlotNumber
:13;
4476 } PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
;
4478 typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER
{
4479 _ANONYMOUS_STRUCT
struct {
4480 USHORT AttentionButtonEnable
:1;
4481 USHORT PowerFaultDetectEnable
:1;
4482 USHORT MRLSensorEnable
:1;
4483 USHORT PresenceDetectEnable
:1;
4484 USHORT CommandCompletedEnable
:1;
4485 USHORT HotPlugInterruptEnable
:1;
4486 USHORT AttentionIndicatorControl
:2;
4487 USHORT PowerIndicatorControl
:2;
4488 USHORT PowerControllerControl
:1;
4489 USHORT ElectromechanicalLockControl
:1;
4490 USHORT DataLinkStateChangeEnable
:1;
4494 } PCI_EXPRESS_SLOT_CONTROL_REGISTER
, *PPCI_EXPRESS_SLOT_CONTROL_REGISTER
;
4496 typedef union _PCI_EXPRESS_SLOT_STATUS_REGISTER
{
4497 _ANONYMOUS_STRUCT
struct {
4498 USHORT AttentionButtonPressed
:1;
4499 USHORT PowerFaultDetected
:1;
4500 USHORT MRLSensorChanged
:1;
4501 USHORT PresenceDetectChanged
:1;
4502 USHORT CommandCompleted
:1;
4503 USHORT MRLSensorState
:1;
4504 USHORT PresenceDetectState
:1;
4505 USHORT ElectromechanicalLockEngaged
:1;
4506 USHORT DataLinkStateChanged
:1;
4510 } PCI_EXPRESS_SLOT_STATUS_REGISTER
, *PPCI_EXPRESS_SLOT_STATUS_REGISTER
;
4512 typedef union _PCI_EXPRESS_ROOT_CONTROL_REGISTER
{
4513 _ANONYMOUS_STRUCT
struct {
4514 USHORT CorrectableSerrEnable
:1;
4515 USHORT NonFatalSerrEnable
:1;
4516 USHORT FatalSerrEnable
:1;
4517 USHORT PMEInterruptEnable
:1;
4518 USHORT CRSSoftwareVisibilityEnable
:1;
4522 } PCI_EXPRESS_ROOT_CONTROL_REGISTER
, *PPCI_EXPRESS_ROOT_CONTROL_REGISTER
;
4524 typedef union _PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
{
4525 _ANONYMOUS_STRUCT
struct {
4526 USHORT CRSSoftwareVisibility
:1;
4530 } PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
;
4532 typedef union _PCI_EXPRESS_ROOT_STATUS_REGISTER
{
4533 _ANONYMOUS_STRUCT
struct {
4534 ULONG PMERequestorId
:16;
4540 } PCI_EXPRESS_ROOT_STATUS_REGISTER
, *PPCI_EXPRESS_ROOT_STATUS_REGISTER
;
4542 typedef struct _PCI_EXPRESS_CAPABILITY
{
4543 PCI_CAPABILITIES_HEADER Header
;
4544 PCI_EXPRESS_CAPABILITIES_REGISTER ExpressCapabilities
;
4545 PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER DeviceCapabilities
;
4546 PCI_EXPRESS_DEVICE_CONTROL_REGISTER DeviceControl
;
4547 PCI_EXPRESS_DEVICE_STATUS_REGISTER DeviceStatus
;
4548 PCI_EXPRESS_LINK_CAPABILITIES_REGISTER LinkCapabilities
;
4549 PCI_EXPRESS_LINK_CONTROL_REGISTER LinkControl
;
4550 PCI_EXPRESS_LINK_STATUS_REGISTER LinkStatus
;
4551 PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER SlotCapabilities
;
4552 PCI_EXPRESS_SLOT_CONTROL_REGISTER SlotControl
;
4553 PCI_EXPRESS_SLOT_STATUS_REGISTER SlotStatus
;
4554 PCI_EXPRESS_ROOT_CONTROL_REGISTER RootControl
;
4555 PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER RootCapabilities
;
4556 PCI_EXPRESS_ROOT_STATUS_REGISTER RootStatus
;
4557 } PCI_EXPRESS_CAPABILITY
, *PPCI_EXPRESS_CAPABILITY
;
4562 } PCI_EXPRESS_MRL_STATE
;
4567 } PCI_EXPRESS_CARD_PRESENCE
;
4573 } PCI_EXPRESS_INDICATOR_STATE
;
4578 } PCI_EXPRESS_POWER_STATE
;
4581 L0sEntrySupport
= 1,
4582 L0sAndL1EntrySupport
= 3
4583 } PCI_EXPRESS_ASPM_SUPPORT
;
4586 L0sAndL1EntryDisabled
,
4589 L0sAndL1EntryEnabled
4590 } PCI_EXPRESS_ASPM_CONTROL
;
4601 } PCI_EXPRESS_L0s_EXIT_LATENCY
;
4612 } PCI_EXPRESS_L1_EXIT_LATENCY
;
4615 PciExpressEndpoint
= 0,
4616 PciExpressLegacyEndpoint
,
4617 PciExpressRootPort
= 4,
4618 PciExpressUpstreamSwitchPort
,
4619 PciExpressDownstreamSwitchPort
,
4620 PciExpressToPciXBridge
,
4621 PciXToExpressBridge
,
4622 PciExpressRootComplexIntegratedEndpoint
,
4623 PciExpressRootComplexEventCollector
4624 } PCI_EXPRESS_DEVICE_TYPE
;
4627 MaxPayload128Bytes
= 0,
4630 MaxPayload1024Bytes
,
4631 MaxPayload2048Bytes
,
4633 } PCI_EXPRESS_MAX_PAYLOAD_SIZE
;
4635 typedef union _PCI_EXPRESS_PME_REQUESTOR_ID
{
4636 _ANONYMOUS_STRUCT
struct {
4637 USHORT FunctionNumber
:3;
4638 USHORT DeviceNumber
:5;
4642 } PCI_EXPRESS_PME_REQUESTOR_ID
, *PPCI_EXPRESS_PME_REQUESTOR_ID
;
4644 typedef enum _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE
{
4645 ResourceTypeSingle
= 0,
4647 ResourceTypeExtendedCounterConfiguration
,
4648 ResourceTypeOverflow
,
4650 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE
;
4652 typedef struct _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
{
4653 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE Type
;
4657 ULONG ExtendedRegisterAddress
;
4663 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
, *PPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
;
4665 typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST
{
4667 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors
[ANYSIZE_ARRAY
];
4668 } PHYSICAL_COUNTER_RESOURCE_LIST
, *PPHYSICAL_COUNTER_RESOURCE_LIST
;
4671 (NTAPI
*PciPin2Line
)(
4672 IN
struct _BUS_HANDLER
*BusHandler
,
4673 IN
struct _BUS_HANDLER
*RootHandler
,
4674 IN PCI_SLOT_NUMBER SlotNumber
,
4675 IN PPCI_COMMON_CONFIG PciData
);
4678 (NTAPI
*PciLine2Pin
)(
4679 IN
struct _BUS_HANDLER
*BusHandler
,
4680 IN
struct _BUS_HANDLER
*RootHandler
,
4681 IN PCI_SLOT_NUMBER SlotNumber
,
4682 IN PPCI_COMMON_CONFIG PciNewData
,
4683 IN PPCI_COMMON_CONFIG PciOldData
);
4686 (NTAPI
*PciReadWriteConfig
)(
4687 IN
struct _BUS_HANDLER
*BusHandler
,
4688 IN PCI_SLOT_NUMBER Slot
,
4693 #define PCI_DATA_TAG ' ICP'
4694 #define PCI_DATA_VERSION 1
4696 typedef struct _PCIBUSDATA
{
4699 PciReadWriteConfig ReadConfig
;
4700 PciReadWriteConfig WriteConfig
;
4701 PciPin2Line Pin2Line
;
4702 PciLine2Pin Line2Pin
;
4703 PCI_SLOT_NUMBER ParentSlot
;
4705 } PCIBUSDATA
, *PPCIBUSDATA
;
4707 #ifndef _PCIINTRF_X_
4708 #define _PCIINTRF_X_
4711 (NTAPI
*PCI_READ_WRITE_CONFIG
)(
4720 (NTAPI
*PCI_PIN_TO_LINE
)(
4722 IN PPCI_COMMON_CONFIG PciData
);
4725 (NTAPI
*PCI_LINE_TO_PIN
)(
4727 IN PPCI_COMMON_CONFIG PciNewData
,
4728 IN PPCI_COMMON_CONFIG PciOldData
);
4731 (NTAPI
*PCI_ROOT_BUS_CAPABILITY
)(
4733 OUT PPCI_ROOT_BUS_HARDWARE_CAPABILITY HardwareCapability
);
4736 (NTAPI
*PCI_EXPRESS_WAKE_CONTROL
)(
4738 IN BOOLEAN EnableWake
);
4740 typedef struct _PCI_BUS_INTERFACE_STANDARD
{
4744 PINTERFACE_REFERENCE InterfaceReference
;
4745 PINTERFACE_DEREFERENCE InterfaceDereference
;
4746 PCI_READ_WRITE_CONFIG ReadConfig
;
4747 PCI_READ_WRITE_CONFIG WriteConfig
;
4748 PCI_PIN_TO_LINE PinToLine
;
4749 PCI_LINE_TO_PIN LineToPin
;
4750 PCI_ROOT_BUS_CAPABILITY RootBusCapability
;
4751 PCI_EXPRESS_WAKE_CONTROL ExpressWakeControl
;
4752 } PCI_BUS_INTERFACE_STANDARD
, *PPCI_BUS_INTERFACE_STANDARD
;
4754 #define PCI_BUS_INTERFACE_STANDARD_VERSION 1
4756 #endif /* _PCIINTRF_X_ */
4758 #if (NTDDI_VERSION >= NTDDI_WIN7)
4760 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX 0x00004000
4761 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX 0x00008000
4762 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \
4763 (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \
4764 FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX)
4766 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200
4767 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300
4768 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300
4772 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 0x00000200
4773 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 0x00000300
4774 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 0x00000300
4776 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL
4777 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL
4778 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK
4780 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4782 #define FILE_CHARACTERISTICS_PROPAGATED (FILE_REMOVABLE_MEDIA | \
4783 FILE_READ_ONLY_DEVICE | \
4784 FILE_FLOPPY_DISKETTE | \
4785 FILE_WRITE_ONCE_MEDIA | \
4786 FILE_DEVICE_SECURE_OPEN)
4788 typedef struct _FILE_ALIGNMENT_INFORMATION
{
4789 ULONG AlignmentRequirement
;
4790 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
4792 typedef struct _FILE_NAME_INFORMATION
{
4793 ULONG FileNameLength
;
4795 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
4798 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
4799 ULONG FileAttributes
;
4801 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
4803 typedef struct _FILE_DISPOSITION_INFORMATION
{
4805 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
4807 typedef struct _FILE_END_OF_FILE_INFORMATION
{
4808 LARGE_INTEGER EndOfFile
;
4809 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
4811 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
4812 LARGE_INTEGER ValidDataLength
;
4813 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
4815 typedef struct _FILE_FS_LABEL_INFORMATION
{
4816 ULONG VolumeLabelLength
;
4817 WCHAR VolumeLabel
[1];
4818 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
4820 typedef struct _FILE_FS_VOLUME_INFORMATION
{
4821 LARGE_INTEGER VolumeCreationTime
;
4822 ULONG VolumeSerialNumber
;
4823 ULONG VolumeLabelLength
;
4824 BOOLEAN SupportsObjects
;
4825 WCHAR VolumeLabel
[1];
4826 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
4828 typedef struct _FILE_FS_SIZE_INFORMATION
{
4829 LARGE_INTEGER TotalAllocationUnits
;
4830 LARGE_INTEGER AvailableAllocationUnits
;
4831 ULONG SectorsPerAllocationUnit
;
4832 ULONG BytesPerSector
;
4833 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
4835 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
{
4836 LARGE_INTEGER TotalAllocationUnits
;
4837 LARGE_INTEGER CallerAvailableAllocationUnits
;
4838 LARGE_INTEGER ActualAvailableAllocationUnits
;
4839 ULONG SectorsPerAllocationUnit
;
4840 ULONG BytesPerSector
;
4841 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
4843 typedef struct _FILE_FS_OBJECTID_INFORMATION
{
4845 UCHAR ExtendedInfo
[48];
4846 } FILE_FS_OBJECTID_INFORMATION
, *PFILE_FS_OBJECTID_INFORMATION
;
4848 typedef union _FILE_SEGMENT_ELEMENT
{
4850 ULONGLONG Alignment
;
4851 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
4853 #define IOCTL_AVIO_ALLOCATE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
4854 #define IOCTL_AVIO_FREE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
4855 #define IOCTL_AVIO_MODIFY_STREAM CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
4857 typedef enum _BUS_DATA_TYPE
{
4858 ConfigurationSpaceUndefined
= -1,
4866 PCMCIAConfiguration
,
4869 PNPISAConfiguration
,
4870 SgiInternalConfiguration
,
4872 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
4874 /* Some Server 2003 DDK definitions */
4875 #define PCI_INT_ROUTE_INTRF_STANDARD_VER 1
4878 (NTAPI
*PLEGACY_DEVICE_DETECTION_HANDLER
)(
4880 IN INTERFACE_TYPE LegacyBusType
,
4882 IN ULONG SlotNumber
,
4883 OUT PDEVICE_OBJECT
*PhysicalDeviceObject
);
4885 typedef struct _ROUTING_TOKEN
{
4889 } ROUTING_TOKEN
, *PROUTING_TOKEN
;
4892 (NTAPI
*PGET_INTERRUPT_ROUTING
)(
4893 IN PDEVICE_OBJECT Pdo
,
4896 OUT UCHAR
*InterruptLine
,
4897 OUT UCHAR
*InterruptPin
,
4898 OUT UCHAR
*ClassCode
,
4899 OUT UCHAR
*SubClassCode
,
4900 OUT PDEVICE_OBJECT
*ParentPdo
,
4901 OUT ROUTING_TOKEN
*RoutingToken
,
4905 (NTAPI
*PSET_INTERRUPT_ROUTING_TOKEN
)(
4906 IN PDEVICE_OBJECT Pdo
,
4907 IN PROUTING_TOKEN RoutingToken
);
4910 (NTAPI
*PUPDATE_INTERRUPT_LINE
)(
4911 IN PDEVICE_OBJECT Pdo
,
4912 IN UCHAR LineRegister
);
4914 typedef struct _INT_ROUTE_INTERFACE_STANDARD
{
4918 PINTERFACE_REFERENCE InterfaceReference
;
4919 PINTERFACE_DEREFERENCE InterfaceDereference
;
4920 PGET_INTERRUPT_ROUTING GetInterruptRouting
;
4921 PSET_INTERRUPT_ROUTING_TOKEN SetInterruptRoutingToken
;
4922 PUPDATE_INTERRUPT_LINE UpdateInterruptLine
;
4923 } INT_ROUTE_INTERFACE_STANDARD
, *PINT_ROUTE_INTERFACE_STANDARD
;
4925 typedef struct _LEGACY_DEVICE_DETECTION_INTERFACE
{
4929 PINTERFACE_REFERENCE InterfaceReference
;
4930 PINTERFACE_DEREFERENCE InterfaceDereference
;
4931 PLEGACY_DEVICE_DETECTION_HANDLER LegacyDeviceDetection
;
4932 } LEGACY_DEVICE_DETECTION_INTERFACE
, *PLEGACY_DEVICE_DETECTION_INTERFACE
;
4934 /* FIXME : These definitions don't exist in public headers */
4936 #define PCI_CB_INTRF_VERSION 1
4937 #define PCI_PME_INTRF_STANDARD_VER 1
4938 #define PNP_LOCATION_INTERFACE_VERSION 1
4940 DEFINE_GUID(GUID_PCI_CARDBUS_INTERFACE_PRIVATE
, 0xcca82f31, 0x54d6, 0x11d1, 0x82, 0x24, 0x00, 0xa0, 0xc9, 0x32, 0x43, 0x85);
4941 DEFINE_GUID(GUID_PCI_PME_INTERFACE
, 0xaac7e6ac, 0xbb0b, 0x11d2, 0xb4, 0x84, 0x00, 0xc0, 0x4f, 0x72, 0xde, 0x8b);
4944 (NTAPI
*PCARDBUSADD
)(
4945 IN PDEVICE_OBJECT DeviceObject
,
4946 IN OUT PVOID
*DeviceContext
);
4949 (NTAPI
*PCARDBUSDELETE
)(
4950 IN PVOID DeviceContext
);
4953 (NTAPI
*PCARDBUSPCIDISPATCH
)(
4954 IN PVOID DeviceContext
,
4958 (NTAPI
*PPME_SET_PME_ENABLE
)(
4959 IN PDEVICE_OBJECT Pdo
,
4960 IN BOOLEAN PmeEnable
);
4963 (NTAPI
*PPME_CLEAR_PME_STATUS
)(
4964 IN PDEVICE_OBJECT Pdo
);
4967 (NTAPI
*PPME_GET_INFORMATION
)(
4968 IN PDEVICE_OBJECT Pdo
,
4969 OUT PBOOLEAN PmeCapable
,
4970 OUT PBOOLEAN PmeStatus
,
4971 OUT PBOOLEAN PmeEnable
);
4973 typedef struct _PCI_CARDBUS_INTERFACE_PRIVATE
{
4977 PINTERFACE_REFERENCE InterfaceReference
;
4978 PINTERFACE_DEREFERENCE InterfaceDereference
;
4979 PDRIVER_OBJECT DriverObject
;
4980 PCARDBUSADD AddCardBus
;
4981 PCARDBUSDELETE DeleteCardBus
;
4982 PCARDBUSPCIDISPATCH DispatchPnp
;
4983 } PCI_CARDBUS_INTERFACE_PRIVATE
, *PPCI_CARDBUS_INTERFACE_PRIVATE
;
4985 typedef struct _PCI_PME_INTERFACE
{
4989 PINTERFACE_REFERENCE InterfaceReference
;
4990 PINTERFACE_DEREFERENCE InterfaceDereference
;
4991 PPME_GET_INFORMATION GetPmeInformation
;
4992 PPME_CLEAR_PME_STATUS ClearPmeStatus
;
4993 PPME_SET_PME_ENABLE UpdateEnable
;
4994 } PCI_PME_INTERFACE
, *PPCI_PME_INTERFACE
;
4999 #define FILE_OPLOCK_BROKEN_TO_LEVEL_2 0x00000007
5000 #define FILE_OPLOCK_BROKEN_TO_NONE 0x00000008
5001 #define FILE_OPBATCH_BREAK_UNDERWAY 0x00000009
5003 /* also in winnt.h */
5004 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
5005 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
5006 #define FILE_NOTIFY_CHANGE_NAME 0x00000003
5007 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
5008 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
5009 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
5010 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
5011 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
5012 #define FILE_NOTIFY_CHANGE_EA 0x00000080
5013 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
5014 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
5015 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
5016 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
5017 #define FILE_NOTIFY_VALID_MASK 0x00000fff
5019 #define FILE_ACTION_ADDED 0x00000001
5020 #define FILE_ACTION_REMOVED 0x00000002
5021 #define FILE_ACTION_MODIFIED 0x00000003
5022 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
5023 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
5024 #define FILE_ACTION_ADDED_STREAM 0x00000006
5025 #define FILE_ACTION_REMOVED_STREAM 0x00000007
5026 #define FILE_ACTION_MODIFIED_STREAM 0x00000008
5027 #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
5028 #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A
5029 #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B
5032 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
5033 #define FILE_PIPE_MESSAGE_TYPE 0x00000001
5035 #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS 0x00000000
5036 #define FILE_PIPE_REJECT_REMOTE_CLIENTS 0x00000002
5038 #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS 0x00000000
5039 #define FILE_PIPE_REJECT_REMOTE_CLIENTS 0x00000002
5040 #define FILE_PIPE_TYPE_VALID_MASK 0x00000003
5042 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
5043 #define FILE_PIPE_MESSAGE_MODE 0x00000001
5045 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
5046 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
5048 #define FILE_PIPE_INBOUND 0x00000000
5049 #define FILE_PIPE_OUTBOUND 0x00000001
5050 #define FILE_PIPE_FULL_DUPLEX 0x00000002
5052 #define FILE_PIPE_DISCONNECTED_STATE 0x00000001
5053 #define FILE_PIPE_LISTENING_STATE 0x00000002
5054 #define FILE_PIPE_CONNECTED_STATE 0x00000003
5055 #define FILE_PIPE_CLOSING_STATE 0x00000004
5057 #define FILE_PIPE_CLIENT_END 0x00000000
5058 #define FILE_PIPE_SERVER_END 0x00000001
5060 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
5061 #define FILE_CASE_PRESERVED_NAMES 0x00000002
5062 #define FILE_UNICODE_ON_DISK 0x00000004
5063 #define FILE_PERSISTENT_ACLS 0x00000008
5064 #define FILE_FILE_COMPRESSION 0x00000010
5065 #define FILE_VOLUME_QUOTAS 0x00000020
5066 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
5067 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
5068 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
5069 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
5070 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
5071 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
5072 #define FILE_NAMED_STREAMS 0x00040000
5073 #define FILE_READ_ONLY_VOLUME 0x00080000
5074 #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
5075 #define FILE_SUPPORTS_TRANSACTIONS 0x00200000
5076 #define FILE_SUPPORTS_HARD_LINKS 0x00400000
5077 #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
5078 #define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
5079 #define FILE_SUPPORTS_USN_JOURNAL 0x02000000
5081 #define FILE_NEED_EA 0x00000080
5083 #define FILE_EA_TYPE_BINARY 0xfffe
5084 #define FILE_EA_TYPE_ASCII 0xfffd
5085 #define FILE_EA_TYPE_BITMAP 0xfffb
5086 #define FILE_EA_TYPE_METAFILE 0xfffa
5087 #define FILE_EA_TYPE_ICON 0xfff9
5088 #define FILE_EA_TYPE_EA 0xffee
5089 #define FILE_EA_TYPE_MVMT 0xffdf
5090 #define FILE_EA_TYPE_MVST 0xffde
5091 #define FILE_EA_TYPE_ASN1 0xffdd
5092 #define FILE_EA_TYPE_FAMILY_IDS 0xff01
5094 typedef struct _FILE_NOTIFY_INFORMATION
{
5095 ULONG NextEntryOffset
;
5097 ULONG FileNameLength
;
5099 } FILE_NOTIFY_INFORMATION
, *PFILE_NOTIFY_INFORMATION
;
5101 typedef struct _FILE_DIRECTORY_INFORMATION
{
5102 ULONG NextEntryOffset
;
5104 LARGE_INTEGER CreationTime
;
5105 LARGE_INTEGER LastAccessTime
;
5106 LARGE_INTEGER LastWriteTime
;
5107 LARGE_INTEGER ChangeTime
;
5108 LARGE_INTEGER EndOfFile
;
5109 LARGE_INTEGER AllocationSize
;
5110 ULONG FileAttributes
;
5111 ULONG FileNameLength
;
5113 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
5115 typedef struct _FILE_FULL_DIR_INFORMATION
{
5116 ULONG NextEntryOffset
;
5118 LARGE_INTEGER CreationTime
;
5119 LARGE_INTEGER LastAccessTime
;
5120 LARGE_INTEGER LastWriteTime
;
5121 LARGE_INTEGER ChangeTime
;
5122 LARGE_INTEGER EndOfFile
;
5123 LARGE_INTEGER AllocationSize
;
5124 ULONG FileAttributes
;
5125 ULONG FileNameLength
;
5128 } FILE_FULL_DIR_INFORMATION
, *PFILE_FULL_DIR_INFORMATION
;
5130 typedef struct _FILE_ID_FULL_DIR_INFORMATION
{
5131 ULONG NextEntryOffset
;
5133 LARGE_INTEGER CreationTime
;
5134 LARGE_INTEGER LastAccessTime
;
5135 LARGE_INTEGER LastWriteTime
;
5136 LARGE_INTEGER ChangeTime
;
5137 LARGE_INTEGER EndOfFile
;
5138 LARGE_INTEGER AllocationSize
;
5139 ULONG FileAttributes
;
5140 ULONG FileNameLength
;
5142 LARGE_INTEGER FileId
;
5144 } FILE_ID_FULL_DIR_INFORMATION
, *PFILE_ID_FULL_DIR_INFORMATION
;
5146 typedef struct _FILE_BOTH_DIR_INFORMATION
{
5147 ULONG NextEntryOffset
;
5149 LARGE_INTEGER CreationTime
;
5150 LARGE_INTEGER LastAccessTime
;
5151 LARGE_INTEGER LastWriteTime
;
5152 LARGE_INTEGER ChangeTime
;
5153 LARGE_INTEGER EndOfFile
;
5154 LARGE_INTEGER AllocationSize
;
5155 ULONG FileAttributes
;
5156 ULONG FileNameLength
;
5158 CCHAR ShortNameLength
;
5159 WCHAR ShortName
[12];
5161 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
5163 typedef struct _FILE_ID_BOTH_DIR_INFORMATION
{
5164 ULONG NextEntryOffset
;
5166 LARGE_INTEGER CreationTime
;
5167 LARGE_INTEGER LastAccessTime
;
5168 LARGE_INTEGER LastWriteTime
;
5169 LARGE_INTEGER ChangeTime
;
5170 LARGE_INTEGER EndOfFile
;
5171 LARGE_INTEGER AllocationSize
;
5172 ULONG FileAttributes
;
5173 ULONG FileNameLength
;
5175 CCHAR ShortNameLength
;
5176 WCHAR ShortName
[12];
5177 LARGE_INTEGER FileId
;
5179 } FILE_ID_BOTH_DIR_INFORMATION
, *PFILE_ID_BOTH_DIR_INFORMATION
;
5181 typedef struct _FILE_NAMES_INFORMATION
{
5182 ULONG NextEntryOffset
;
5184 ULONG FileNameLength
;
5186 } FILE_NAMES_INFORMATION
, *PFILE_NAMES_INFORMATION
;
5188 typedef struct _FILE_ID_GLOBAL_TX_DIR_INFORMATION
{
5189 ULONG NextEntryOffset
;
5191 LARGE_INTEGER CreationTime
;
5192 LARGE_INTEGER LastAccessTime
;
5193 LARGE_INTEGER LastWriteTime
;
5194 LARGE_INTEGER ChangeTime
;
5195 LARGE_INTEGER EndOfFile
;
5196 LARGE_INTEGER AllocationSize
;
5197 ULONG FileAttributes
;
5198 ULONG FileNameLength
;
5199 LARGE_INTEGER FileId
;
5200 GUID LockingTransactionId
;
5203 } FILE_ID_GLOBAL_TX_DIR_INFORMATION
, *PFILE_ID_GLOBAL_TX_DIR_INFORMATION
;
5205 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_WRITELOCKED 0x00000001
5206 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_TO_TX 0x00000002
5207 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_OUTSIDE_TX 0x00000004
5209 typedef struct _FILE_OBJECTID_INFORMATION
{
5210 LONGLONG FileReference
;
5212 _ANONYMOUS_UNION
union {
5213 _ANONYMOUS_STRUCT
struct {
5214 UCHAR BirthVolumeId
[16];
5215 UCHAR BirthObjectId
[16];
5218 UCHAR ExtendedInfo
[48];
5220 } FILE_OBJECTID_INFORMATION
, *PFILE_OBJECTID_INFORMATION
;
5222 #define ANSI_DOS_STAR ('<')
5223 #define ANSI_DOS_QM ('>')
5224 #define ANSI_DOS_DOT ('"')
5226 #define DOS_STAR (L'<')
5227 #define DOS_QM (L'>')
5228 #define DOS_DOT (L'"')
5230 typedef struct _FILE_INTERNAL_INFORMATION
{
5231 LARGE_INTEGER IndexNumber
;
5232 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
5234 typedef struct _FILE_EA_INFORMATION
{
5236 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
5238 typedef struct _FILE_ACCESS_INFORMATION
{
5239 ACCESS_MASK AccessFlags
;
5240 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
5242 typedef struct _FILE_MODE_INFORMATION
{
5244 } FILE_MODE_INFORMATION
, *PFILE_MODE_INFORMATION
;
5246 typedef struct _FILE_ALL_INFORMATION
{
5247 FILE_BASIC_INFORMATION BasicInformation
;
5248 FILE_STANDARD_INFORMATION StandardInformation
;
5249 FILE_INTERNAL_INFORMATION InternalInformation
;
5250 FILE_EA_INFORMATION EaInformation
;
5251 FILE_ACCESS_INFORMATION AccessInformation
;
5252 FILE_POSITION_INFORMATION PositionInformation
;
5253 FILE_MODE_INFORMATION ModeInformation
;
5254 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
5255 FILE_NAME_INFORMATION NameInformation
;
5256 } FILE_ALL_INFORMATION
, *PFILE_ALL_INFORMATION
;
5258 typedef struct _FILE_ALLOCATION_INFORMATION
{
5259 LARGE_INTEGER AllocationSize
;
5260 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
5262 typedef struct _FILE_COMPRESSION_INFORMATION
{
5263 LARGE_INTEGER CompressedFileSize
;
5264 USHORT CompressionFormat
;
5265 UCHAR CompressionUnitShift
;
5269 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
5271 typedef struct _FILE_LINK_INFORMATION
{
5272 BOOLEAN ReplaceIfExists
;
5273 HANDLE RootDirectory
;
5274 ULONG FileNameLength
;
5276 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
5278 typedef struct _FILE_MOVE_CLUSTER_INFORMATION
{
5280 HANDLE RootDirectory
;
5281 ULONG FileNameLength
;
5283 } FILE_MOVE_CLUSTER_INFORMATION
, *PFILE_MOVE_CLUSTER_INFORMATION
;
5285 typedef struct _FILE_RENAME_INFORMATION
{
5286 BOOLEAN ReplaceIfExists
;
5287 HANDLE RootDirectory
;
5288 ULONG FileNameLength
;
5290 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
5292 typedef struct _FILE_STREAM_INFORMATION
{
5293 ULONG NextEntryOffset
;
5294 ULONG StreamNameLength
;
5295 LARGE_INTEGER StreamSize
;
5296 LARGE_INTEGER StreamAllocationSize
;
5297 WCHAR StreamName
[1];
5298 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
5300 typedef struct _FILE_TRACKING_INFORMATION
{
5301 HANDLE DestinationFile
;
5302 ULONG ObjectInformationLength
;
5303 CHAR ObjectInformation
[1];
5304 } FILE_TRACKING_INFORMATION
, *PFILE_TRACKING_INFORMATION
;
5306 typedef struct _FILE_COMPLETION_INFORMATION
{
5309 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
5311 typedef struct _FILE_PIPE_INFORMATION
{
5313 ULONG CompletionMode
;
5314 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
5316 typedef struct _FILE_PIPE_LOCAL_INFORMATION
{
5317 ULONG NamedPipeType
;
5318 ULONG NamedPipeConfiguration
;
5319 ULONG MaximumInstances
;
5320 ULONG CurrentInstances
;
5322 ULONG ReadDataAvailable
;
5323 ULONG OutboundQuota
;
5324 ULONG WriteQuotaAvailable
;
5325 ULONG NamedPipeState
;
5327 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
5329 typedef struct _FILE_PIPE_REMOTE_INFORMATION
{
5330 LARGE_INTEGER CollectDataTime
;
5331 ULONG MaximumCollectionCount
;
5332 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
5334 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
{
5335 ULONG MaximumMessageSize
;
5336 ULONG MailslotQuota
;
5337 ULONG NextMessageSize
;
5338 ULONG MessagesAvailable
;
5339 LARGE_INTEGER ReadTimeout
;
5340 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
5342 typedef struct _FILE_MAILSLOT_SET_INFORMATION
{
5343 PLARGE_INTEGER ReadTimeout
;
5344 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
5346 typedef struct _FILE_REPARSE_POINT_INFORMATION
{
5347 LONGLONG FileReference
;
5349 } FILE_REPARSE_POINT_INFORMATION
, *PFILE_REPARSE_POINT_INFORMATION
;
5351 typedef struct _FILE_LINK_ENTRY_INFORMATION
{
5352 ULONG NextEntryOffset
;
5353 LONGLONG ParentFileId
;
5354 ULONG FileNameLength
;
5356 } FILE_LINK_ENTRY_INFORMATION
, *PFILE_LINK_ENTRY_INFORMATION
;
5358 typedef struct _FILE_LINKS_INFORMATION
{
5360 ULONG EntriesReturned
;
5361 FILE_LINK_ENTRY_INFORMATION Entry
;
5362 } FILE_LINKS_INFORMATION
, *PFILE_LINKS_INFORMATION
;
5364 typedef struct _FILE_NETWORK_PHYSICAL_NAME_INFORMATION
{
5365 ULONG FileNameLength
;
5367 } FILE_NETWORK_PHYSICAL_NAME_INFORMATION
, *PFILE_NETWORK_PHYSICAL_NAME_INFORMATION
;
5369 typedef struct _FILE_STANDARD_LINK_INFORMATION
{
5370 ULONG NumberOfAccessibleLinks
;
5371 ULONG TotalNumberOfLinks
;
5372 BOOLEAN DeletePending
;
5374 } FILE_STANDARD_LINK_INFORMATION
, *PFILE_STANDARD_LINK_INFORMATION
;
5376 typedef struct _FILE_GET_EA_INFORMATION
{
5377 ULONG NextEntryOffset
;
5380 } FILE_GET_EA_INFORMATION
, *PFILE_GET_EA_INFORMATION
;
5382 #define REMOTE_PROTOCOL_FLAG_LOOPBACK 0x00000001
5383 #define REMOTE_PROTOCOL_FLAG_OFFLINE 0x00000002
5385 typedef struct _FILE_REMOTE_PROTOCOL_INFORMATION
{
5386 USHORT StructureVersion
;
5387 USHORT StructureSize
;
5389 USHORT ProtocolMajorVersion
;
5390 USHORT ProtocolMinorVersion
;
5391 USHORT ProtocolRevision
;
5399 } ProtocolSpecificReserved
;
5400 } FILE_REMOTE_PROTOCOL_INFORMATION
, *PFILE_REMOTE_PROTOCOL_INFORMATION
;
5402 typedef struct _FILE_GET_QUOTA_INFORMATION
{
5403 ULONG NextEntryOffset
;
5406 } FILE_GET_QUOTA_INFORMATION
, *PFILE_GET_QUOTA_INFORMATION
;
5408 typedef struct _FILE_QUOTA_INFORMATION
{
5409 ULONG NextEntryOffset
;
5411 LARGE_INTEGER ChangeTime
;
5412 LARGE_INTEGER QuotaUsed
;
5413 LARGE_INTEGER QuotaThreshold
;
5414 LARGE_INTEGER QuotaLimit
;
5416 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
5418 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
{
5419 ULONG FileSystemAttributes
;
5420 ULONG MaximumComponentNameLength
;
5421 ULONG FileSystemNameLength
;
5422 WCHAR FileSystemName
[1];
5423 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
5425 typedef struct _FILE_FS_DRIVER_PATH_INFORMATION
{
5426 BOOLEAN DriverInPath
;
5427 ULONG DriverNameLength
;
5428 WCHAR DriverName
[1];
5429 } FILE_FS_DRIVER_PATH_INFORMATION
, *PFILE_FS_DRIVER_PATH_INFORMATION
;
5431 typedef struct _FILE_FS_VOLUME_FLAGS_INFORMATION
{
5433 } FILE_FS_VOLUME_FLAGS_INFORMATION
, *PFILE_FS_VOLUME_FLAGS_INFORMATION
;
5435 #define FILE_VC_QUOTA_NONE 0x00000000
5436 #define FILE_VC_QUOTA_TRACK 0x00000001
5437 #define FILE_VC_QUOTA_ENFORCE 0x00000002
5438 #define FILE_VC_QUOTA_MASK 0x00000003
5439 #define FILE_VC_CONTENT_INDEX_DISABLED 0x00000008
5440 #define FILE_VC_LOG_QUOTA_THRESHOLD 0x00000010
5441 #define FILE_VC_LOG_QUOTA_LIMIT 0x00000020
5442 #define FILE_VC_LOG_VOLUME_THRESHOLD 0x00000040
5443 #define FILE_VC_LOG_VOLUME_LIMIT 0x00000080
5444 #define FILE_VC_QUOTAS_INCOMPLETE 0x00000100
5445 #define FILE_VC_QUOTAS_REBUILDING 0x00000200
5446 #define FILE_VC_VALID_MASK 0x000003ff
5448 typedef struct _FILE_FS_CONTROL_INFORMATION
{
5449 LARGE_INTEGER FreeSpaceStartFiltering
;
5450 LARGE_INTEGER FreeSpaceThreshold
;
5451 LARGE_INTEGER FreeSpaceStopFiltering
;
5452 LARGE_INTEGER DefaultQuotaThreshold
;
5453 LARGE_INTEGER DefaultQuotaLimit
;
5454 ULONG FileSystemControlFlags
;
5455 } FILE_FS_CONTROL_INFORMATION
, *PFILE_FS_CONTROL_INFORMATION
;
5457 #ifndef _FILESYSTEMFSCTL_
5458 #define _FILESYSTEMFSCTL_
5460 #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
5461 #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
5462 #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
5463 #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
5464 #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
5465 #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
5466 #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
5467 #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
5468 #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
5469 #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
5470 #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
5471 #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
5472 #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS)
5473 #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
5474 #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
5475 #define FSCTL_SET_BOOTLOADER_ACCESSED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS)
5477 #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
5478 #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
5479 #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
5480 #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
5481 #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
5483 #if (_WIN32_WINNT >= 0x0400)
5485 #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
5486 #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
5487 #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS)
5488 #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS)
5489 #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
5490 #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
5491 #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS)
5495 #if (_WIN32_WINNT >= 0x0500)
5497 #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS)
5498 #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_WRITE_DATA)
5499 #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
5500 #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_WRITE_DATA)
5501 #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_WRITE_DATA)
5502 #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
5503 #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_WRITE_DATA)
5504 #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_READ_DATA)
5505 #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA)
5506 #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_READ_DATA)
5507 #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_WRITE_DATA)
5508 #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
5509 #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_WRITE_DATA)
5510 #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA)
5511 #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA)
5512 #define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA)
5513 #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_BUFFERED, FILE_ANY_ACCESS)
5514 #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS)
5515 #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_ANY_ACCESS)
5516 #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_ANY_ACCESS)
5517 #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_READ_DATA)
5518 #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_READ_DATA)
5519 #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_READ_DATA)
5520 #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
5521 #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
5522 #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
5523 #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS)
5524 #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
5525 #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
5526 #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
5527 #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA)
5528 #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5532 #if (_WIN32_WINNT >= 0x0600)
5534 #define FSCTL_MAKE_MEDIA_COMPATIBLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA)
5535 #define FSCTL_SET_DEFECT_MANAGEMENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA)
5536 #define FSCTL_QUERY_SPARING_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS)
5537 #define FSCTL_QUERY_ON_DISK_VOLUME_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS)
5538 #define FSCTL_SET_VOLUME_COMPRESSION_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5539 #define FSCTL_TXFS_MODIFY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 81, METHOD_BUFFERED, FILE_WRITE_DATA)
5540 #define FSCTL_TXFS_QUERY_RM_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 82, METHOD_BUFFERED, FILE_READ_DATA)
5541 #define FSCTL_TXFS_ROLLFORWARD_REDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 84, METHOD_BUFFERED, FILE_WRITE_DATA)
5542 #define FSCTL_TXFS_ROLLFORWARD_UNDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 85, METHOD_BUFFERED, FILE_WRITE_DATA)
5543 #define FSCTL_TXFS_START_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 86, METHOD_BUFFERED, FILE_WRITE_DATA)
5544 #define FSCTL_TXFS_SHUTDOWN_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA)
5545 #define FSCTL_TXFS_READ_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 88, METHOD_BUFFERED, FILE_READ_DATA)
5546 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 89, METHOD_BUFFERED, FILE_WRITE_DATA)
5547 #define FSCTL_TXFS_CREATE_SECONDARY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 90, METHOD_BUFFERED, FILE_WRITE_DATA)
5548 #define FSCTL_TXFS_GET_METADATA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 91, METHOD_BUFFERED, FILE_READ_DATA)
5549 #define FSCTL_TXFS_GET_TRANSACTED_VERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 92, METHOD_BUFFERED, FILE_READ_DATA)
5550 #define FSCTL_TXFS_SAVEPOINT_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 94, METHOD_BUFFERED, FILE_WRITE_DATA)
5551 #define FSCTL_TXFS_CREATE_MINIVERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA)
5552 #define FSCTL_TXFS_TRANSACTION_ACTIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 99, METHOD_BUFFERED, FILE_READ_DATA)
5553 #define FSCTL_SET_ZERO_ON_DEALLOCATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5554 #define FSCTL_SET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS)
5555 #define FSCTL_GET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS)
5556 #define FSCTL_WAIT_FOR_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS)
5557 #define FSCTL_INITIATE_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS)
5558 #define FSCTL_CSC_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER, FILE_ANY_ACCESS)
5559 #define FSCTL_SHRINK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5560 #define FSCTL_SET_SHORT_NAME_BEHAVIOR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS)
5561 #define FSCTL_DFSR_SET_GHOST_HANDLE_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS)
5563 #define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES \
5564 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA)
5565 #define FSCTL_TXFS_LIST_TRANSACTIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA)
5566 #define FSCTL_QUERY_PAGEFILE_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS)
5567 #define FSCTL_RESET_VOLUME_ALLOCATION_HINTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 123, METHOD_BUFFERED, FILE_ANY_ACCESS)
5568 #define FSCTL_TXFS_READ_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 126, METHOD_BUFFERED, FILE_ANY_ACCESS)
5572 #if (_WIN32_WINNT >= 0x0601)
5574 #define FSCTL_QUERY_DEPENDENT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 124, METHOD_BUFFERED, FILE_ANY_ACCESS)
5575 #define FSCTL_SD_GLOBAL_CHANGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 125, METHOD_BUFFERED, FILE_ANY_ACCESS)
5576 #define FSCTL_LOOKUP_STREAM_FROM_CLUSTER CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 127, METHOD_BUFFERED, FILE_ANY_ACCESS)
5577 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 128, METHOD_BUFFERED, FILE_ANY_ACCESS)
5578 #define FSCTL_FILE_TYPE_NOTIFICATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 129, METHOD_BUFFERED, FILE_ANY_ACCESS)
5579 #define FSCTL_GET_BOOT_AREA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 140, METHOD_BUFFERED, FILE_ANY_ACCESS)
5580 #define FSCTL_GET_RETRIEVAL_POINTER_BASE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 141, METHOD_BUFFERED, FILE_ANY_ACCESS)
5581 #define FSCTL_SET_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS)
5582 #define FSCTL_QUERY_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 143, METHOD_BUFFERED, FILE_ANY_ACCESS)
5584 #define FSCTL_REQUEST_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 144, METHOD_BUFFERED, FILE_ANY_ACCESS)
5586 #define FSCTL_CSV_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 145, METHOD_BUFFERED, FILE_ANY_ACCESS)
5587 #define FSCTL_IS_CSV_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED, FILE_ANY_ACCESS)
5589 #define FSCTL_QUERY_FILE_SYSTEM_RECOGNITION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 147, METHOD_BUFFERED, FILE_ANY_ACCESS)
5590 #define FSCTL_CSV_GET_VOLUME_PATH_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 148, METHOD_BUFFERED, FILE_ANY_ACCESS)
5591 #define FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS)
5592 #define FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 150, METHOD_BUFFERED, FILE_ANY_ACCESS)
5593 #define FSCTL_IS_FILE_ON_CSV_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 151, METHOD_BUFFERED, FILE_ANY_ACCESS)
5595 typedef struct _CSV_NAMESPACE_INFO
{
5598 LARGE_INTEGER StartingOffset
;
5600 } CSV_NAMESPACE_INFO
, *PCSV_NAMESPACE_INFO
;
5602 #define CSV_NAMESPACE_INFO_V1 (sizeof(CSV_NAMESPACE_INFO))
5603 #define CSV_INVALID_DEVICE_NUMBER 0xFFFFFFFF
5607 #define FSCTL_MARK_AS_SYSTEM_HIVE FSCTL_SET_BOOTLOADER_ACCESSED
5609 typedef struct _PATHNAME_BUFFER
{
5610 ULONG PathNameLength
;
5612 } PATHNAME_BUFFER
, *PPATHNAME_BUFFER
;
5614 typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER
{
5615 UCHAR First0x24BytesOfBootSector
[0x24];
5616 } FSCTL_QUERY_FAT_BPB_BUFFER
, *PFSCTL_QUERY_FAT_BPB_BUFFER
;
5618 #if (_WIN32_WINNT >= 0x0400)
5620 typedef struct _NTFS_VOLUME_DATA_BUFFER
{
5621 LARGE_INTEGER VolumeSerialNumber
;
5622 LARGE_INTEGER NumberSectors
;
5623 LARGE_INTEGER TotalClusters
;
5624 LARGE_INTEGER FreeClusters
;
5625 LARGE_INTEGER TotalReserved
;
5626 ULONG BytesPerSector
;
5627 ULONG BytesPerCluster
;
5628 ULONG BytesPerFileRecordSegment
;
5629 ULONG ClustersPerFileRecordSegment
;
5630 LARGE_INTEGER MftValidDataLength
;
5631 LARGE_INTEGER MftStartLcn
;
5632 LARGE_INTEGER Mft2StartLcn
;
5633 LARGE_INTEGER MftZoneStart
;
5634 LARGE_INTEGER MftZoneEnd
;
5635 } NTFS_VOLUME_DATA_BUFFER
, *PNTFS_VOLUME_DATA_BUFFER
;
5637 typedef struct _NTFS_EXTENDED_VOLUME_DATA
{
5639 USHORT MajorVersion
;
5640 USHORT MinorVersion
;
5641 } NTFS_EXTENDED_VOLUME_DATA
, *PNTFS_EXTENDED_VOLUME_DATA
;
5643 typedef struct _STARTING_LCN_INPUT_BUFFER
{
5644 LARGE_INTEGER StartingLcn
;
5645 } STARTING_LCN_INPUT_BUFFER
, *PSTARTING_LCN_INPUT_BUFFER
;
5647 typedef struct _VOLUME_BITMAP_BUFFER
{
5648 LARGE_INTEGER StartingLcn
;
5649 LARGE_INTEGER BitmapSize
;
5651 } VOLUME_BITMAP_BUFFER
, *PVOLUME_BITMAP_BUFFER
;
5653 typedef struct _STARTING_VCN_INPUT_BUFFER
{
5654 LARGE_INTEGER StartingVcn
;
5655 } STARTING_VCN_INPUT_BUFFER
, *PSTARTING_VCN_INPUT_BUFFER
;
5657 typedef struct _RETRIEVAL_POINTERS_BUFFER
{
5659 LARGE_INTEGER StartingVcn
;
5661 LARGE_INTEGER NextVcn
;
5664 } RETRIEVAL_POINTERS_BUFFER
, *PRETRIEVAL_POINTERS_BUFFER
;
5666 typedef struct _NTFS_FILE_RECORD_INPUT_BUFFER
{
5667 LARGE_INTEGER FileReferenceNumber
;
5668 } NTFS_FILE_RECORD_INPUT_BUFFER
, *PNTFS_FILE_RECORD_INPUT_BUFFER
;
5670 typedef struct _NTFS_FILE_RECORD_OUTPUT_BUFFER
{
5671 LARGE_INTEGER FileReferenceNumber
;
5672 ULONG FileRecordLength
;
5673 UCHAR FileRecordBuffer
[1];
5674 } NTFS_FILE_RECORD_OUTPUT_BUFFER
, *PNTFS_FILE_RECORD_OUTPUT_BUFFER
;
5676 typedef struct _MOVE_FILE_DATA
{
5678 LARGE_INTEGER StartingVcn
;
5679 LARGE_INTEGER StartingLcn
;
5681 } MOVE_FILE_DATA
, *PMOVE_FILE_DATA
;
5683 typedef struct _MOVE_FILE_RECORD_DATA
{
5685 LARGE_INTEGER SourceFileRecord
;
5686 LARGE_INTEGER TargetFileRecord
;
5687 } MOVE_FILE_RECORD_DATA
, *PMOVE_FILE_RECORD_DATA
;
5690 typedef struct _MOVE_FILE_DATA32
{
5692 LARGE_INTEGER StartingVcn
;
5693 LARGE_INTEGER StartingLcn
;
5695 } MOVE_FILE_DATA32
, *PMOVE_FILE_DATA32
;
5698 #endif /* (_WIN32_WINNT >= 0x0400) */
5700 #if (_WIN32_WINNT >= 0x0500)
5702 typedef struct _FIND_BY_SID_DATA
{
5705 } FIND_BY_SID_DATA
, *PFIND_BY_SID_DATA
;
5707 typedef struct _FIND_BY_SID_OUTPUT
{
5708 ULONG NextEntryOffset
;
5710 ULONG FileNameLength
;
5712 } FIND_BY_SID_OUTPUT
, *PFIND_BY_SID_OUTPUT
;
5714 typedef struct _MFT_ENUM_DATA
{
5715 ULONGLONG StartFileReferenceNumber
;
5718 } MFT_ENUM_DATA
, *PMFT_ENUM_DATA
;
5720 typedef struct _CREATE_USN_JOURNAL_DATA
{
5721 ULONGLONG MaximumSize
;
5722 ULONGLONG AllocationDelta
;
5723 } CREATE_USN_JOURNAL_DATA
, *PCREATE_USN_JOURNAL_DATA
;
5725 typedef struct _READ_USN_JOURNAL_DATA
{
5728 ULONG ReturnOnlyOnClose
;
5730 ULONGLONG BytesToWaitFor
;
5731 ULONGLONG UsnJournalID
;
5732 } READ_USN_JOURNAL_DATA
, *PREAD_USN_JOURNAL_DATA
;
5734 typedef struct _USN_RECORD
{
5736 USHORT MajorVersion
;
5737 USHORT MinorVersion
;
5738 ULONGLONG FileReferenceNumber
;
5739 ULONGLONG ParentFileReferenceNumber
;
5741 LARGE_INTEGER TimeStamp
;
5745 ULONG FileAttributes
;
5746 USHORT FileNameLength
;
5747 USHORT FileNameOffset
;
5749 } USN_RECORD
, *PUSN_RECORD
;
5751 #define USN_PAGE_SIZE (0x1000)
5753 #define USN_REASON_DATA_OVERWRITE (0x00000001)
5754 #define USN_REASON_DATA_EXTEND (0x00000002)
5755 #define USN_REASON_DATA_TRUNCATION (0x00000004)
5756 #define USN_REASON_NAMED_DATA_OVERWRITE (0x00000010)
5757 #define USN_REASON_NAMED_DATA_EXTEND (0x00000020)
5758 #define USN_REASON_NAMED_DATA_TRUNCATION (0x00000040)
5759 #define USN_REASON_FILE_CREATE (0x00000100)
5760 #define USN_REASON_FILE_DELETE (0x00000200)
5761 #define USN_REASON_EA_CHANGE (0x00000400)
5762 #define USN_REASON_SECURITY_CHANGE (0x00000800)
5763 #define USN_REASON_RENAME_OLD_NAME (0x00001000)
5764 #define USN_REASON_RENAME_NEW_NAME (0x00002000)
5765 #define USN_REASON_INDEXABLE_CHANGE (0x00004000)
5766 #define USN_REASON_BASIC_INFO_CHANGE (0x00008000)
5767 #define USN_REASON_HARD_LINK_CHANGE (0x00010000)
5768 #define USN_REASON_COMPRESSION_CHANGE (0x00020000)
5769 #define USN_REASON_ENCRYPTION_CHANGE (0x00040000)
5770 #define USN_REASON_OBJECT_ID_CHANGE (0x00080000)
5771 #define USN_REASON_REPARSE_POINT_CHANGE (0x00100000)
5772 #define USN_REASON_STREAM_CHANGE (0x00200000)
5773 #define USN_REASON_TRANSACTED_CHANGE (0x00400000)
5774 #define USN_REASON_CLOSE (0x80000000)
5776 typedef struct _USN_JOURNAL_DATA
{
5777 ULONGLONG UsnJournalID
;
5782 ULONGLONG MaximumSize
;
5783 ULONGLONG AllocationDelta
;
5784 } USN_JOURNAL_DATA
, *PUSN_JOURNAL_DATA
;
5786 typedef struct _DELETE_USN_JOURNAL_DATA
{
5787 ULONGLONG UsnJournalID
;
5789 } DELETE_USN_JOURNAL_DATA
, *PDELETE_USN_JOURNAL_DATA
;
5791 #define USN_DELETE_FLAG_DELETE (0x00000001)
5792 #define USN_DELETE_FLAG_NOTIFY (0x00000002)
5793 #define USN_DELETE_VALID_FLAGS (0x00000003)
5795 typedef struct _MARK_HANDLE_INFO
{
5796 ULONG UsnSourceInfo
;
5797 HANDLE VolumeHandle
;
5799 } MARK_HANDLE_INFO
, *PMARK_HANDLE_INFO
;
5802 typedef struct _MARK_HANDLE_INFO32
{
5803 ULONG UsnSourceInfo
;
5804 UINT32 VolumeHandle
;
5806 } MARK_HANDLE_INFO32
, *PMARK_HANDLE_INFO32
;
5809 #define USN_SOURCE_DATA_MANAGEMENT (0x00000001)
5810 #define USN_SOURCE_AUXILIARY_DATA (0x00000002)
5811 #define USN_SOURCE_REPLICATION_MANAGEMENT (0x00000004)
5813 #define MARK_HANDLE_PROTECT_CLUSTERS (0x00000001)
5814 #define MARK_HANDLE_TXF_SYSTEM_LOG (0x00000004)
5815 #define MARK_HANDLE_NOT_TXF_SYSTEM_LOG (0x00000008)
5817 typedef struct _BULK_SECURITY_TEST_DATA
{
5818 ACCESS_MASK DesiredAccess
;
5819 ULONG SecurityIds
[1];
5820 } BULK_SECURITY_TEST_DATA
, *PBULK_SECURITY_TEST_DATA
;
5822 #define VOLUME_IS_DIRTY (0x00000001)
5823 #define VOLUME_UPGRADE_SCHEDULED (0x00000002)
5824 #define VOLUME_SESSION_OPEN (0x00000004)
5826 typedef struct _FILE_PREFETCH
{
5829 ULONGLONG Prefetch
[1];
5830 } FILE_PREFETCH
, *PFILE_PREFETCH
;
5832 typedef struct _FILE_PREFETCH_EX
{
5836 ULONGLONG Prefetch
[1];
5837 } FILE_PREFETCH_EX
, *PFILE_PREFETCH_EX
;
5839 #define FILE_PREFETCH_TYPE_FOR_CREATE 0x1
5840 #define FILE_PREFETCH_TYPE_FOR_DIRENUM 0x2
5841 #define FILE_PREFETCH_TYPE_FOR_CREATE_EX 0x3
5842 #define FILE_PREFETCH_TYPE_FOR_DIRENUM_EX 0x4
5844 #define FILE_PREFETCH_TYPE_MAX 0x4
5846 typedef struct _FILE_OBJECTID_BUFFER
{
5848 _ANONYMOUS_UNION
union {
5849 _ANONYMOUS_STRUCT
struct {
5850 UCHAR BirthVolumeId
[16];
5851 UCHAR BirthObjectId
[16];
5854 UCHAR ExtendedInfo
[48];
5856 } FILE_OBJECTID_BUFFER
, *PFILE_OBJECTID_BUFFER
;
5858 typedef struct _FILE_SET_SPARSE_BUFFER
{
5860 } FILE_SET_SPARSE_BUFFER
, *PFILE_SET_SPARSE_BUFFER
;
5862 typedef struct _FILE_ZERO_DATA_INFORMATION
{
5863 LARGE_INTEGER FileOffset
;
5864 LARGE_INTEGER BeyondFinalZero
;
5865 } FILE_ZERO_DATA_INFORMATION
, *PFILE_ZERO_DATA_INFORMATION
;
5867 typedef struct _FILE_ALLOCATED_RANGE_BUFFER
{
5868 LARGE_INTEGER FileOffset
;
5869 LARGE_INTEGER Length
;
5870 } FILE_ALLOCATED_RANGE_BUFFER
, *PFILE_ALLOCATED_RANGE_BUFFER
;
5872 typedef struct _ENCRYPTION_BUFFER
{
5873 ULONG EncryptionOperation
;
5875 } ENCRYPTION_BUFFER
, *PENCRYPTION_BUFFER
;
5877 #define FILE_SET_ENCRYPTION 0x00000001
5878 #define FILE_CLEAR_ENCRYPTION 0x00000002
5879 #define STREAM_SET_ENCRYPTION 0x00000003
5880 #define STREAM_CLEAR_ENCRYPTION 0x00000004
5882 #define MAXIMUM_ENCRYPTION_VALUE 0x00000004
5884 typedef struct _DECRYPTION_STATUS_BUFFER
{
5885 BOOLEAN NoEncryptedStreams
;
5886 } DECRYPTION_STATUS_BUFFER
, *PDECRYPTION_STATUS_BUFFER
;
5888 #define ENCRYPTION_FORMAT_DEFAULT (0x01)
5890 #define COMPRESSION_FORMAT_SPARSE (0x4000)
5892 typedef struct _REQUEST_RAW_ENCRYPTED_DATA
{
5893 LONGLONG FileOffset
;
5895 } REQUEST_RAW_ENCRYPTED_DATA
, *PREQUEST_RAW_ENCRYPTED_DATA
;
5897 typedef struct _ENCRYPTED_DATA_INFO
{
5898 ULONGLONG StartingFileOffset
;
5899 ULONG OutputBufferOffset
;
5900 ULONG BytesWithinFileSize
;
5901 ULONG BytesWithinValidDataLength
;
5902 USHORT CompressionFormat
;
5903 UCHAR DataUnitShift
;
5906 UCHAR EncryptionFormat
;
5907 USHORT NumberOfDataBlocks
;
5908 ULONG DataBlockSize
[ANYSIZE_ARRAY
];
5909 } ENCRYPTED_DATA_INFO
, *PENCRYPTED_DATA_INFO
;
5911 typedef struct _PLEX_READ_DATA_REQUEST
{
5912 LARGE_INTEGER ByteOffset
;
5915 } PLEX_READ_DATA_REQUEST
, *PPLEX_READ_DATA_REQUEST
;
5917 typedef struct _SI_COPYFILE
{
5918 ULONG SourceFileNameLength
;
5919 ULONG DestinationFileNameLength
;
5921 WCHAR FileNameBuffer
[1];
5922 } SI_COPYFILE
, *PSI_COPYFILE
;
5924 #define COPYFILE_SIS_LINK 0x0001
5925 #define COPYFILE_SIS_REPLACE 0x0002
5926 #define COPYFILE_SIS_FLAGS 0x0003
5928 #endif /* (_WIN32_WINNT >= 0x0500) */
5930 #if (_WIN32_WINNT >= 0x0600)
5932 typedef struct _FILE_MAKE_COMPATIBLE_BUFFER
{
5934 } FILE_MAKE_COMPATIBLE_BUFFER
, *PFILE_MAKE_COMPATIBLE_BUFFER
;
5936 typedef struct _FILE_SET_DEFECT_MGMT_BUFFER
{
5938 } FILE_SET_DEFECT_MGMT_BUFFER
, *PFILE_SET_DEFECT_MGMT_BUFFER
;
5940 typedef struct _FILE_QUERY_SPARING_BUFFER
{
5941 ULONG SparingUnitBytes
;
5942 BOOLEAN SoftwareSparing
;
5943 ULONG TotalSpareBlocks
;
5944 ULONG FreeSpareBlocks
;
5945 } FILE_QUERY_SPARING_BUFFER
, *PFILE_QUERY_SPARING_BUFFER
;
5947 typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER
{
5948 LARGE_INTEGER DirectoryCount
;
5949 LARGE_INTEGER FileCount
;
5950 USHORT FsFormatMajVersion
;
5951 USHORT FsFormatMinVersion
;
5952 WCHAR FsFormatName
[12];
5953 LARGE_INTEGER FormatTime
;
5954 LARGE_INTEGER LastUpdateTime
;
5955 WCHAR CopyrightInfo
[34];
5956 WCHAR AbstractInfo
[34];
5957 WCHAR FormattingImplementationInfo
[34];
5958 WCHAR LastModifyingImplementationInfo
[34];
5959 } FILE_QUERY_ON_DISK_VOL_INFO_BUFFER
, *PFILE_QUERY_ON_DISK_VOL_INFO_BUFFER
;
5961 #define SET_REPAIR_ENABLED (0x00000001)
5962 #define SET_REPAIR_VOLUME_BITMAP_SCAN (0x00000002)
5963 #define SET_REPAIR_DELETE_CROSSLINK (0x00000004)
5964 #define SET_REPAIR_WARN_ABOUT_DATA_LOSS (0x00000008)
5965 #define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT (0x00000010)
5966 #define SET_REPAIR_VALID_MASK (0x0000001F)
5968 typedef enum _SHRINK_VOLUME_REQUEST_TYPES
{
5972 } SHRINK_VOLUME_REQUEST_TYPES
, *PSHRINK_VOLUME_REQUEST_TYPES
;
5974 typedef struct _SHRINK_VOLUME_INFORMATION
{
5975 SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType
;
5977 LONGLONG NewNumberOfSectors
;
5978 } SHRINK_VOLUME_INFORMATION
, *PSHRINK_VOLUME_INFORMATION
;
5980 #define TXFS_RM_FLAG_LOGGING_MODE 0x00000001
5981 #define TXFS_RM_FLAG_RENAME_RM 0x00000002
5982 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000004
5983 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000008
5984 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000010
5985 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000020
5986 #define TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000040
5987 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000080
5988 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000100
5989 #define TXFS_RM_FLAG_GROW_LOG 0x00000400
5990 #define TXFS_RM_FLAG_SHRINK_LOG 0x00000800
5991 #define TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE 0x00001000
5992 #define TXFS_RM_FLAG_PRESERVE_CHANGES 0x00002000
5993 #define TXFS_RM_FLAG_RESET_RM_AT_NEXT_START 0x00004000
5994 #define TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START 0x00008000
5995 #define TXFS_RM_FLAG_PREFER_CONSISTENCY 0x00010000
5996 #define TXFS_RM_FLAG_PREFER_AVAILABILITY 0x00020000
5998 #define TXFS_LOGGING_MODE_SIMPLE (0x0001)
5999 #define TXFS_LOGGING_MODE_FULL (0x0002)
6001 #define TXFS_TRANSACTION_STATE_NONE 0x00
6002 #define TXFS_TRANSACTION_STATE_ACTIVE 0x01
6003 #define TXFS_TRANSACTION_STATE_PREPARED 0x02
6004 #define TXFS_TRANSACTION_STATE_NOTACTIVE 0x03
6006 #define TXFS_MODIFY_RM_VALID_FLAGS (TXFS_RM_FLAG_LOGGING_MODE | \
6007 TXFS_RM_FLAG_RENAME_RM | \
6008 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
6009 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
6010 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
6011 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
6012 TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
6013 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
6014 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
6015 TXFS_RM_FLAG_SHRINK_LOG | \
6016 TXFS_RM_FLAG_GROW_LOG | \
6017 TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE | \
6018 TXFS_RM_FLAG_PRESERVE_CHANGES | \
6019 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
6020 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
6021 TXFS_RM_FLAG_PREFER_CONSISTENCY | \
6022 TXFS_RM_FLAG_PREFER_AVAILABILITY)
6024 typedef struct _TXFS_MODIFY_RM
{
6026 ULONG LogContainerCountMax
;
6027 ULONG LogContainerCountMin
;
6028 ULONG LogContainerCount
;
6029 ULONG LogGrowthIncrement
;
6030 ULONG LogAutoShrinkPercentage
;
6033 } TXFS_MODIFY_RM
, *PTXFS_MODIFY_RM
;
6035 #define TXFS_RM_STATE_NOT_STARTED 0
6036 #define TXFS_RM_STATE_STARTING 1
6037 #define TXFS_RM_STATE_ACTIVE 2
6038 #define TXFS_RM_STATE_SHUTTING_DOWN 3
6040 #define TXFS_QUERY_RM_INFORMATION_VALID_FLAGS \
6041 (TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
6042 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
6043 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
6044 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
6045 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
6046 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
6047 TXFS_RM_FLAG_PREFER_CONSISTENCY | \
6048 TXFS_RM_FLAG_PREFER_AVAILABILITY)
6050 typedef struct _TXFS_QUERY_RM_INFORMATION
{
6051 ULONG BytesRequired
;
6053 ULONGLONG CurrentLsn
;
6054 ULONGLONG ArchiveTailLsn
;
6055 ULONGLONG LogContainerSize
;
6056 LARGE_INTEGER HighestVirtualClock
;
6057 ULONG LogContainerCount
;
6058 ULONG LogContainerCountMax
;
6059 ULONG LogContainerCountMin
;
6060 ULONG LogGrowthIncrement
;
6061 ULONG LogAutoShrinkPercentage
;
6066 ULONGLONG LogCapacity
;
6070 ULONGLONG TransactionCount
;
6071 ULONGLONG OnePCCount
;
6072 ULONGLONG TwoPCCount
;
6073 ULONGLONG NumberLogFileFull
;
6074 ULONGLONG OldestTransactionAge
;
6076 ULONG TmLogPathOffset
;
6077 } TXFS_QUERY_RM_INFORMATION
, *PTXFS_QUERY_RM_INFORMATION
;
6079 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN 0x01
6080 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK 0x02
6082 #define TXFS_ROLLFORWARD_REDO_VALID_FLAGS \
6083 (TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN | \
6084 TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK)
6086 typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION
{
6087 LARGE_INTEGER LastVirtualClock
;
6088 ULONGLONG LastRedoLsn
;
6089 ULONGLONG HighestRecoveryLsn
;
6091 } TXFS_ROLLFORWARD_REDO_INFORMATION
, *PTXFS_ROLLFORWARD_REDO_INFORMATION
;
6093 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000001
6094 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000002
6095 #define TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE 0x00000004
6096 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000008
6097 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000010
6098 #define TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000020
6099 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000040
6100 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000080
6102 #define TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT 0x00000200
6103 #define TXFS_START_RM_FLAG_LOGGING_MODE 0x00000400
6104 #define TXFS_START_RM_FLAG_PRESERVE_CHANGES 0x00000800
6106 #define TXFS_START_RM_FLAG_PREFER_CONSISTENCY 0x00001000
6107 #define TXFS_START_RM_FLAG_PREFER_AVAILABILITY 0x00002000
6109 #define TXFS_START_RM_VALID_FLAGS \
6110 (TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
6111 TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
6112 TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE | \
6113 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
6114 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
6115 TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
6116 TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT | \
6117 TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
6118 TXFS_START_RM_FLAG_LOGGING_MODE | \
6119 TXFS_START_RM_FLAG_PRESERVE_CHANGES | \
6120 TXFS_START_RM_FLAG_PREFER_CONSISTENCY | \
6121 TXFS_START_RM_FLAG_PREFER_AVAILABILITY)
6123 typedef struct _TXFS_START_RM_INFORMATION
{
6125 ULONGLONG LogContainerSize
;
6126 ULONG LogContainerCountMin
;
6127 ULONG LogContainerCountMax
;
6128 ULONG LogGrowthIncrement
;
6129 ULONG LogAutoShrinkPercentage
;
6130 ULONG TmLogPathOffset
;
6131 USHORT TmLogPathLength
;
6133 USHORT LogPathLength
;
6136 } TXFS_START_RM_INFORMATION
, *PTXFS_START_RM_INFORMATION
;
6138 typedef struct _TXFS_GET_METADATA_INFO_OUT
{
6143 GUID LockingTransaction
;
6145 ULONG TransactionState
;
6146 } TXFS_GET_METADATA_INFO_OUT
, *PTXFS_GET_METADATA_INFO_OUT
;
6148 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_CREATED 0x00000001
6149 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_DELETED 0x00000002
6151 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY
{
6159 } TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY
, *PTXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY
;
6161 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES
{
6162 GUID KtmTransaction
;
6163 ULONGLONG NumberOfFiles
;
6164 ULONGLONG BufferSizeRequired
;
6166 } TXFS_LIST_TRANSACTION_LOCKED_FILES
, *PTXFS_LIST_TRANSACTION_LOCKED_FILES
;
6168 typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY
{
6170 ULONG TransactionState
;
6174 } TXFS_LIST_TRANSACTIONS_ENTRY
, *PTXFS_LIST_TRANSACTIONS_ENTRY
;
6176 typedef struct _TXFS_LIST_TRANSACTIONS
{
6177 ULONGLONG NumberOfTransactions
;
6178 ULONGLONG BufferSizeRequired
;
6179 } TXFS_LIST_TRANSACTIONS
, *PTXFS_LIST_TRANSACTIONS
;
6181 typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT
{
6182 _ANONYMOUS_UNION
union {
6186 } TXFS_READ_BACKUP_INFORMATION_OUT
, *PTXFS_READ_BACKUP_INFORMATION_OUT
;
6188 typedef struct _TXFS_WRITE_BACKUP_INFORMATION
{
6190 } TXFS_WRITE_BACKUP_INFORMATION
, *PTXFS_WRITE_BACKUP_INFORMATION
;
6192 #define TXFS_TRANSACTED_VERSION_NONTRANSACTED 0xFFFFFFFE
6193 #define TXFS_TRANSACTED_VERSION_UNCOMMITTED 0xFFFFFFFF
6195 typedef struct _TXFS_GET_TRANSACTED_VERSION
{
6196 ULONG ThisBaseVersion
;
6197 ULONG LatestVersion
;
6198 USHORT ThisMiniVersion
;
6199 USHORT FirstMiniVersion
;
6200 USHORT LatestMiniVersion
;
6201 } TXFS_GET_TRANSACTED_VERSION
, *PTXFS_GET_TRANSACTED_VERSION
;
6203 #define TXFS_SAVEPOINT_SET 0x00000001
6204 #define TXFS_SAVEPOINT_ROLLBACK 0x00000002
6205 #define TXFS_SAVEPOINT_CLEAR 0x00000004
6206 #define TXFS_SAVEPOINT_CLEAR_ALL 0x00000010
6208 typedef struct _TXFS_SAVEPOINT_INFORMATION
{
6209 HANDLE KtmTransaction
;
6212 } TXFS_SAVEPOINT_INFORMATION
, *PTXFS_SAVEPOINT_INFORMATION
;
6214 typedef struct _TXFS_CREATE_MINIVERSION_INFO
{
6215 USHORT StructureVersion
;
6216 USHORT StructureLength
;
6219 } TXFS_CREATE_MINIVERSION_INFO
, *PTXFS_CREATE_MINIVERSION_INFO
;
6221 typedef struct _TXFS_TRANSACTION_ACTIVE_INFO
{
6222 BOOLEAN TransactionsActiveAtSnapshot
;
6223 } TXFS_TRANSACTION_ACTIVE_INFO
, *PTXFS_TRANSACTION_ACTIVE_INFO
;
6225 #endif /* (_WIN32_WINNT >= 0x0600) */
6227 #if (_WIN32_WINNT >= 0x0601)
6229 #define MARK_HANDLE_REALTIME (0x00000020)
6230 #define MARK_HANDLE_NOT_REALTIME (0x00000040)
6232 #define NO_8DOT3_NAME_PRESENT (0x00000001)
6233 #define REMOVED_8DOT3_NAME (0x00000002)
6235 #define PERSISTENT_VOLUME_STATE_SHORT_NAME_CREATION_DISABLED (0x00000001)
6237 typedef struct _BOOT_AREA_INFO
{
6238 ULONG BootSectorCount
;
6240 LARGE_INTEGER Offset
;
6242 } BOOT_AREA_INFO
, *PBOOT_AREA_INFO
;
6244 typedef struct _RETRIEVAL_POINTER_BASE
{
6245 LARGE_INTEGER FileAreaOffset
;
6246 } RETRIEVAL_POINTER_BASE
, *PRETRIEVAL_POINTER_BASE
;
6248 typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION
{
6253 } FILE_FS_PERSISTENT_VOLUME_INFORMATION
, *PFILE_FS_PERSISTENT_VOLUME_INFORMATION
;
6255 typedef struct _FILE_SYSTEM_RECOGNITION_INFORMATION
{
6257 } FILE_SYSTEM_RECOGNITION_INFORMATION
, *PFILE_SYSTEM_RECOGNITION_INFORMATION
;
6259 #define OPLOCK_LEVEL_CACHE_READ (0x00000001)
6260 #define OPLOCK_LEVEL_CACHE_HANDLE (0x00000002)
6261 #define OPLOCK_LEVEL_CACHE_WRITE (0x00000004)
6263 #define REQUEST_OPLOCK_INPUT_FLAG_REQUEST (0x00000001)
6264 #define REQUEST_OPLOCK_INPUT_FLAG_ACK (0x00000002)
6265 #define REQUEST_OPLOCK_INPUT_FLAG_COMPLETE_ACK_ON_CLOSE (0x00000004)
6267 #define REQUEST_OPLOCK_CURRENT_VERSION 1
6269 typedef struct _REQUEST_OPLOCK_INPUT_BUFFER
{
6270 USHORT StructureVersion
;
6271 USHORT StructureLength
;
6272 ULONG RequestedOplockLevel
;
6274 } REQUEST_OPLOCK_INPUT_BUFFER
, *PREQUEST_OPLOCK_INPUT_BUFFER
;
6276 #define REQUEST_OPLOCK_OUTPUT_FLAG_ACK_REQUIRED (0x00000001)
6277 #define REQUEST_OPLOCK_OUTPUT_FLAG_MODES_PROVIDED (0x00000002)
6279 typedef struct _REQUEST_OPLOCK_OUTPUT_BUFFER
{
6280 USHORT StructureVersion
;
6281 USHORT StructureLength
;
6282 ULONG OriginalOplockLevel
;
6283 ULONG NewOplockLevel
;
6285 ACCESS_MASK AccessMode
;
6287 } REQUEST_OPLOCK_OUTPUT_BUFFER
, *PREQUEST_OPLOCK_OUTPUT_BUFFER
;
6289 #define SD_GLOBAL_CHANGE_TYPE_MACHINE_SID 1
6291 typedef struct _SD_CHANGE_MACHINE_SID_INPUT
{
6292 USHORT CurrentMachineSIDOffset
;
6293 USHORT CurrentMachineSIDLength
;
6294 USHORT NewMachineSIDOffset
;
6295 USHORT NewMachineSIDLength
;
6296 } SD_CHANGE_MACHINE_SID_INPUT
, *PSD_CHANGE_MACHINE_SID_INPUT
;
6298 typedef struct _SD_CHANGE_MACHINE_SID_OUTPUT
{
6299 ULONGLONG NumSDChangedSuccess
;
6300 ULONGLONG NumSDChangedFail
;
6301 ULONGLONG NumSDUnused
;
6302 ULONGLONG NumSDTotal
;
6303 ULONGLONG NumMftSDChangedSuccess
;
6304 ULONGLONG NumMftSDChangedFail
;
6305 ULONGLONG NumMftSDTotal
;
6306 } SD_CHANGE_MACHINE_SID_OUTPUT
, *PSD_CHANGE_MACHINE_SID_OUTPUT
;
6308 typedef struct _SD_GLOBAL_CHANGE_INPUT
{
6311 _ANONYMOUS_UNION
union {
6312 SD_CHANGE_MACHINE_SID_INPUT SdChange
;
6314 } SD_GLOBAL_CHANGE_INPUT
, *PSD_GLOBAL_CHANGE_INPUT
;
6316 typedef struct _SD_GLOBAL_CHANGE_OUTPUT
{
6319 _ANONYMOUS_UNION
union {
6320 SD_CHANGE_MACHINE_SID_OUTPUT SdChange
;
6322 } SD_GLOBAL_CHANGE_OUTPUT
, *PSD_GLOBAL_CHANGE_OUTPUT
;
6324 #define ENCRYPTED_DATA_INFO_SPARSE_FILE 1
6326 typedef struct _EXTENDED_ENCRYPTED_DATA_INFO
{
6331 } EXTENDED_ENCRYPTED_DATA_INFO
, *PEXTENDED_ENCRYPTED_DATA_INFO
;
6333 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_INPUT
{
6335 ULONG NumberOfClusters
;
6336 LARGE_INTEGER Cluster
[1];
6337 } LOOKUP_STREAM_FROM_CLUSTER_INPUT
, *PLOOKUP_STREAM_FROM_CLUSTER_INPUT
;
6339 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_OUTPUT
{
6341 ULONG NumberOfMatches
;
6342 ULONG BufferSizeRequired
;
6343 } LOOKUP_STREAM_FROM_CLUSTER_OUTPUT
, *PLOOKUP_STREAM_FROM_CLUSTER_OUTPUT
;
6345 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_PAGE_FILE 0x00000001
6346 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_DENY_DEFRAG_SET 0x00000002
6347 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_FS_SYSTEM_FILE 0x00000004
6348 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_TXF_SYSTEM_FILE 0x00000008
6350 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_MASK 0xff000000
6351 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_DATA 0x01000000
6352 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_INDEX 0x02000000
6353 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_SYSTEM 0x03000000
6355 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_ENTRY
{
6358 LARGE_INTEGER Reserved
;
6359 LARGE_INTEGER Cluster
;
6361 } LOOKUP_STREAM_FROM_CLUSTER_ENTRY
, *PLOOKUP_STREAM_FROM_CLUSTER_ENTRY
;
6363 typedef struct _FILE_TYPE_NOTIFICATION_INPUT
{
6365 ULONG NumFileTypeIDs
;
6367 } FILE_TYPE_NOTIFICATION_INPUT
, *PFILE_TYPE_NOTIFICATION_INPUT
;
6369 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_BEGIN 0x00000001
6370 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_END 0x00000002
6372 DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_PAGE_FILE
, 0x0d0a64a1, 0x38fc, 0x4db8, 0x9f, 0xe7, 0x3f, 0x43, 0x52, 0xcd, 0x7c, 0x5c);
6373 DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_HIBERNATION_FILE
, 0xb7624d64, 0xb9a3, 0x4cf8, 0x80, 0x11, 0x5b, 0x86, 0xc9, 0x40, 0xe7, 0xb7);
6374 DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_CRASHDUMP_FILE
, 0x9d453eb7, 0xd2a6, 0x4dbd, 0xa2, 0xe3, 0xfb, 0xd0, 0xed, 0x91, 0x09, 0xa9);
6376 #ifndef _VIRTUAL_STORAGE_TYPE_DEFINED
6377 #define _VIRTUAL_STORAGE_TYPE_DEFINED
6378 typedef struct _VIRTUAL_STORAGE_TYPE
{
6381 } VIRTUAL_STORAGE_TYPE
, *PVIRTUAL_STORAGE_TYPE
;
6384 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST
{
6387 } STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_REQUEST
;
6389 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_HOST_VOLUMES 0x1
6390 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_GUEST_VOLUMES 0x2
6392 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY
{
6394 ULONG DependencyTypeFlags
;
6395 ULONG ProviderSpecificFlags
;
6396 VIRTUAL_STORAGE_TYPE VirtualStorageType
;
6397 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY
;
6399 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY
{
6401 ULONG DependencyTypeFlags
;
6402 ULONG ProviderSpecificFlags
;
6403 VIRTUAL_STORAGE_TYPE VirtualStorageType
;
6404 ULONG AncestorLevel
;
6405 ULONG HostVolumeNameOffset
;
6406 ULONG HostVolumeNameSize
;
6407 ULONG DependentVolumeNameOffset
;
6408 ULONG DependentVolumeNameSize
;
6409 ULONG RelativePathOffset
;
6410 ULONG RelativePathSize
;
6411 ULONG DependentDeviceNameOffset
;
6412 ULONG DependentDeviceNameSize
;
6413 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY
;
6415 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE
{
6416 ULONG ResponseLevel
;
6417 ULONG NumberEntries
;
6418 _ANONYMOUS_UNION
union {
6419 STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY Lev1Depends
[];
6420 STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY Lev2Depends
[];
6422 } STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE
;
6424 #endif /* (_WIN32_WINNT >= 0x0601) */
6426 typedef struct _FILESYSTEM_STATISTICS
{
6427 USHORT FileSystemType
;
6429 ULONG SizeOfCompleteStructure
;
6430 ULONG UserFileReads
;
6431 ULONG UserFileReadBytes
;
6432 ULONG UserDiskReads
;
6433 ULONG UserFileWrites
;
6434 ULONG UserFileWriteBytes
;
6435 ULONG UserDiskWrites
;
6436 ULONG MetaDataReads
;
6437 ULONG MetaDataReadBytes
;
6438 ULONG MetaDataDiskReads
;
6439 ULONG MetaDataWrites
;
6440 ULONG MetaDataWriteBytes
;
6441 ULONG MetaDataDiskWrites
;
6442 } FILESYSTEM_STATISTICS
, *PFILESYSTEM_STATISTICS
;
6444 #define FILESYSTEM_STATISTICS_TYPE_NTFS 1
6445 #define FILESYSTEM_STATISTICS_TYPE_FAT 2
6446 #define FILESYSTEM_STATISTICS_TYPE_EXFAT 3
6448 typedef struct _FAT_STATISTICS
{
6450 ULONG SuccessfulCreates
;
6451 ULONG FailedCreates
;
6452 ULONG NonCachedReads
;
6453 ULONG NonCachedReadBytes
;
6454 ULONG NonCachedWrites
;
6455 ULONG NonCachedWriteBytes
;
6456 ULONG NonCachedDiskReads
;
6457 ULONG NonCachedDiskWrites
;
6458 } FAT_STATISTICS
, *PFAT_STATISTICS
;
6460 typedef struct _EXFAT_STATISTICS
{
6462 ULONG SuccessfulCreates
;
6463 ULONG FailedCreates
;
6464 ULONG NonCachedReads
;
6465 ULONG NonCachedReadBytes
;
6466 ULONG NonCachedWrites
;
6467 ULONG NonCachedWriteBytes
;
6468 ULONG NonCachedDiskReads
;
6469 ULONG NonCachedDiskWrites
;
6470 } EXFAT_STATISTICS
, *PEXFAT_STATISTICS
;
6472 typedef struct _NTFS_STATISTICS
{
6473 ULONG LogFileFullExceptions
;
6474 ULONG OtherExceptions
;
6478 ULONG MftWriteBytes
;
6484 } MftWritesUserLevel
;
6485 USHORT MftWritesFlushForLogFileFull
;
6486 USHORT MftWritesLazyWriter
;
6487 USHORT MftWritesUserRequest
;
6489 ULONG Mft2WriteBytes
;
6495 } Mft2WritesUserLevel
;
6496 USHORT Mft2WritesFlushForLogFileFull
;
6497 USHORT Mft2WritesLazyWriter
;
6498 USHORT Mft2WritesUserRequest
;
6499 ULONG RootIndexReads
;
6500 ULONG RootIndexReadBytes
;
6501 ULONG RootIndexWrites
;
6502 ULONG RootIndexWriteBytes
;
6504 ULONG BitmapReadBytes
;
6506 ULONG BitmapWriteBytes
;
6507 USHORT BitmapWritesFlushForLogFileFull
;
6508 USHORT BitmapWritesLazyWriter
;
6509 USHORT BitmapWritesUserRequest
;
6514 } BitmapWritesUserLevel
;
6515 ULONG MftBitmapReads
;
6516 ULONG MftBitmapReadBytes
;
6517 ULONG MftBitmapWrites
;
6518 ULONG MftBitmapWriteBytes
;
6519 USHORT MftBitmapWritesFlushForLogFileFull
;
6520 USHORT MftBitmapWritesLazyWriter
;
6521 USHORT MftBitmapWritesUserRequest
;
6527 } MftBitmapWritesUserLevel
;
6528 ULONG UserIndexReads
;
6529 ULONG UserIndexReadBytes
;
6530 ULONG UserIndexWrites
;
6531 ULONG UserIndexWriteBytes
;
6533 ULONG LogFileReadBytes
;
6534 ULONG LogFileWrites
;
6535 ULONG LogFileWriteBytes
;
6542 ULONG HintsClusters
;
6544 ULONG CacheClusters
;
6546 ULONG CacheMissClusters
;
6548 } NTFS_STATISTICS
, *PNTFS_STATISTICS
;
6550 #endif /* _FILESYSTEMFSCTL_ */
6552 #define SYMLINK_FLAG_RELATIVE 1
6554 typedef struct _REPARSE_DATA_BUFFER
{
6556 USHORT ReparseDataLength
;
6558 _ANONYMOUS_UNION
union {
6560 USHORT SubstituteNameOffset
;
6561 USHORT SubstituteNameLength
;
6562 USHORT PrintNameOffset
;
6563 USHORT PrintNameLength
;
6565 WCHAR PathBuffer
[1];
6566 } SymbolicLinkReparseBuffer
;
6568 USHORT SubstituteNameOffset
;
6569 USHORT SubstituteNameLength
;
6570 USHORT PrintNameOffset
;
6571 USHORT PrintNameLength
;
6572 WCHAR PathBuffer
[1];
6573 } MountPointReparseBuffer
;
6575 UCHAR DataBuffer
[1];
6576 } GenericReparseBuffer
;
6578 } REPARSE_DATA_BUFFER
, *PREPARSE_DATA_BUFFER
;
6580 #define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
6582 typedef struct _REPARSE_GUID_DATA_BUFFER
{
6584 USHORT ReparseDataLength
;
6588 UCHAR DataBuffer
[1];
6589 } GenericReparseBuffer
;
6590 } REPARSE_GUID_DATA_BUFFER
, *PREPARSE_GUID_DATA_BUFFER
;
6592 #define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
6594 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 )
6596 /* Reserved reparse tags */
6597 #define IO_REPARSE_TAG_RESERVED_ZERO (0)
6598 #define IO_REPARSE_TAG_RESERVED_ONE (1)
6599 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE
6601 #define IsReparseTagMicrosoft(_tag) (((_tag) & 0x80000000))
6602 #define IsReparseTagNameSurrogate(_tag) (((_tag) & 0x20000000))
6604 #define IO_REPARSE_TAG_VALID_VALUES (0xF000FFFF)
6606 #define IsReparseTagValid(tag) ( \
6607 !((tag) & ~IO_REPARSE_TAG_VALID_VALUES) && \
6608 ((tag) > IO_REPARSE_TAG_RESERVED_RANGE) \
6611 /* MicroSoft reparse point tags */
6612 #define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L)
6613 #define IO_REPARSE_TAG_HSM (0xC0000004L)
6614 #define IO_REPARSE_TAG_DRIVE_EXTENDER (0x80000005L)
6615 #define IO_REPARSE_TAG_HSM2 (0x80000006L)
6616 #define IO_REPARSE_TAG_SIS (0x80000007L)
6617 #define IO_REPARSE_TAG_WIM (0x80000008L)
6618 #define IO_REPARSE_TAG_CSV (0x80000009L)
6619 #define IO_REPARSE_TAG_DFS (0x8000000AL)
6620 #define IO_REPARSE_TAG_FILTER_MANAGER (0x8000000BL)
6621 #define IO_REPARSE_TAG_SYMLINK (0xA000000CL)
6622 #define IO_REPARSE_TAG_IIS_CACHE (0xA0000010L)
6623 #define IO_REPARSE_TAG_DFSR (0x80000012L)
6626 typedef struct _REPARSE_INDEX_KEY
{
6627 ULONG FileReparseTag
;
6628 LARGE_INTEGER FileId
;
6629 } REPARSE_INDEX_KEY
, *PREPARSE_INDEX_KEY
;
6632 #define FSCTL_LMR_GET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,58,METHOD_BUFFERED,FILE_ANY_ACCESS)
6633 #define FSCTL_LMR_SET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,59,METHOD_BUFFERED,FILE_ANY_ACCESS)
6634 #define IOCTL_LMR_ARE_FILE_OBJECTS_ON_SAME_SERVER CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,60,METHOD_BUFFERED,FILE_ANY_ACCESS)
6636 #define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
6637 #define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
6638 #define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
6639 #define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
6640 #define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
6641 #define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
6642 #define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
6643 #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
6644 #define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
6645 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
6646 #define FSCTL_PIPE_GET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
6647 #define FSCTL_PIPE_SET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
6648 #define FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
6649 #define FSCTL_PIPE_SET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
6650 #define FSCTL_PIPE_GET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
6651 #define FSCTL_PIPE_SET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
6652 #define FSCTL_PIPE_FLUSH CTL_CODE(FILE_DEVICE_NAMED_PIPE, 16, METHOD_BUFFERED, FILE_WRITE_DATA)
6654 #define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
6655 #define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
6656 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
6657 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
6659 #define FILE_PIPE_READ_DATA 0x00000000
6660 #define FILE_PIPE_WRITE_SPACE 0x00000001
6662 typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER
{
6665 } FILE_PIPE_ASSIGN_EVENT_BUFFER
, *PFILE_PIPE_ASSIGN_EVENT_BUFFER
;
6667 typedef struct _FILE_PIPE_EVENT_BUFFER
{
6668 ULONG NamedPipeState
;
6672 ULONG NumberRequests
;
6673 } FILE_PIPE_EVENT_BUFFER
, *PFILE_PIPE_EVENT_BUFFER
;
6675 typedef struct _FILE_PIPE_PEEK_BUFFER
{
6676 ULONG NamedPipeState
;
6677 ULONG ReadDataAvailable
;
6678 ULONG NumberOfMessages
;
6679 ULONG MessageLength
;
6681 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
6683 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
{
6684 LARGE_INTEGER Timeout
;
6686 BOOLEAN TimeoutSpecified
;
6688 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
6690 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER
{
6691 #if !defined(BUILD_WOW6432)
6692 PVOID ClientSession
;
6693 PVOID ClientProcess
;
6695 ULONGLONG ClientSession
;
6696 ULONGLONG ClientProcess
;
6698 } FILE_PIPE_CLIENT_PROCESS_BUFFER
, *PFILE_PIPE_CLIENT_PROCESS_BUFFER
;
6700 #define FILE_PIPE_COMPUTER_NAME_LENGTH 15
6702 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER_EX
{
6703 #if !defined(BUILD_WOW6432)
6704 PVOID ClientSession
;
6705 PVOID ClientProcess
;
6707 ULONGLONG ClientSession
;
6708 ULONGLONG ClientProcess
;
6710 USHORT ClientComputerNameLength
;
6711 WCHAR ClientComputerBuffer
[FILE_PIPE_COMPUTER_NAME_LENGTH
+1];
6712 } FILE_PIPE_CLIENT_PROCESS_BUFFER_EX
, *PFILE_PIPE_CLIENT_PROCESS_BUFFER_EX
;
6714 #define FSCTL_MAILSLOT_PEEK CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
6716 typedef enum _LINK_TRACKING_INFORMATION_TYPE
{
6717 NtfsLinkTrackingInformation
,
6718 DfsLinkTrackingInformation
6719 } LINK_TRACKING_INFORMATION_TYPE
, *PLINK_TRACKING_INFORMATION_TYPE
;
6721 typedef struct _LINK_TRACKING_INFORMATION
{
6722 LINK_TRACKING_INFORMATION_TYPE Type
;
6724 } LINK_TRACKING_INFORMATION
, *PLINK_TRACKING_INFORMATION
;
6726 typedef struct _REMOTE_LINK_TRACKING_INFORMATION
{
6727 PVOID TargetFileObject
;
6728 ULONG TargetLinkTrackingInformationLength
;
6729 UCHAR TargetLinkTrackingInformationBuffer
[1];
6730 } REMOTE_LINK_TRACKING_INFORMATION
, *PREMOTE_LINK_TRACKING_INFORMATION
;
6732 #define IO_OPEN_PAGING_FILE 0x0002
6733 #define IO_OPEN_TARGET_DIRECTORY 0x0004
6734 #define IO_STOP_ON_SYMLINK 0x0008
6735 #define IO_MM_PAGING_FILE 0x0010
6738 (NTAPI
*PDRIVER_FS_NOTIFICATION
) (
6739 IN PDEVICE_OBJECT DeviceObject
,
6740 IN BOOLEAN FsActive
);
6742 typedef enum _FS_FILTER_SECTION_SYNC_TYPE
{
6744 SyncTypeCreateSection
6745 } FS_FILTER_SECTION_SYNC_TYPE
, *PFS_FILTER_SECTION_SYNC_TYPE
;
6747 typedef enum _FS_FILTER_STREAM_FO_NOTIFICATION_TYPE
{
6748 NotifyTypeCreate
= 0,
6750 } FS_FILTER_STREAM_FO_NOTIFICATION_TYPE
, *PFS_FILTER_STREAM_FO_NOTIFICATION_TYPE
;
6752 typedef union _FS_FILTER_PARAMETERS
{
6754 PLARGE_INTEGER EndingOffset
;
6755 PERESOURCE
*ResourceToRelease
;
6756 } AcquireForModifiedPageWriter
;
6758 PERESOURCE ResourceToRelease
;
6759 } ReleaseForModifiedPageWriter
;
6761 FS_FILTER_SECTION_SYNC_TYPE SyncType
;
6762 ULONG PageProtection
;
6763 } AcquireForSectionSynchronization
;
6765 FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType
;
6766 BOOLEAN POINTER_ALIGNMENT SafeToRecurse
;
6767 } NotifyStreamFileObject
;
6775 } FS_FILTER_PARAMETERS
, *PFS_FILTER_PARAMETERS
;
6777 #define FS_FILTER_ACQUIRE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-1
6778 #define FS_FILTER_RELEASE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-2
6779 #define FS_FILTER_ACQUIRE_FOR_MOD_WRITE (UCHAR)-3
6780 #define FS_FILTER_RELEASE_FOR_MOD_WRITE (UCHAR)-4
6781 #define FS_FILTER_ACQUIRE_FOR_CC_FLUSH (UCHAR)-5
6782 #define FS_FILTER_RELEASE_FOR_CC_FLUSH (UCHAR)-6
6784 typedef struct _FS_FILTER_CALLBACK_DATA
{
6785 ULONG SizeOfFsFilterCallbackData
;
6788 struct _DEVICE_OBJECT
*DeviceObject
;
6789 struct _FILE_OBJECT
*FileObject
;
6790 FS_FILTER_PARAMETERS Parameters
;
6791 } FS_FILTER_CALLBACK_DATA
, *PFS_FILTER_CALLBACK_DATA
;
6794 (NTAPI
*PFS_FILTER_CALLBACK
) (
6795 IN PFS_FILTER_CALLBACK_DATA Data
,
6796 OUT PVOID
*CompletionContext
);
6799 (NTAPI
*PFS_FILTER_COMPLETION_CALLBACK
) (
6800 IN PFS_FILTER_CALLBACK_DATA Data
,
6801 IN NTSTATUS OperationStatus
,
6802 IN PVOID CompletionContext
);
6804 typedef struct _FS_FILTER_CALLBACKS
{
6805 ULONG SizeOfFsFilterCallbacks
;
6807 PFS_FILTER_CALLBACK PreAcquireForSectionSynchronization
;
6808 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization
;
6809 PFS_FILTER_CALLBACK PreReleaseForSectionSynchronization
;
6810 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization
;
6811 PFS_FILTER_CALLBACK PreAcquireForCcFlush
;
6812 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush
;
6813 PFS_FILTER_CALLBACK PreReleaseForCcFlush
;
6814 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush
;
6815 PFS_FILTER_CALLBACK PreAcquireForModifiedPageWriter
;
6816 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter
;
6817 PFS_FILTER_CALLBACK PreReleaseForModifiedPageWriter
;
6818 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter
;
6819 } FS_FILTER_CALLBACKS
, *PFS_FILTER_CALLBACKS
;
6821 #if (NTDDI_VERSION >= NTDDI_WINXP)
6825 FsRtlRegisterFileSystemFilterCallbacks(
6826 IN
struct _DRIVER_OBJECT
*FilterDriverObject
,
6827 IN PFS_FILTER_CALLBACKS Callbacks
);
6828 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
6830 #if (NTDDI_VERSION >= NTDDI_VISTA)
6834 FsRtlNotifyStreamFileObject(
6835 IN
struct _FILE_OBJECT
* StreamFileObject
,
6836 IN
struct _DEVICE_OBJECT
*DeviceObjectHint OPTIONAL
,
6837 IN FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType
,
6838 IN BOOLEAN SafeToRecurse
);
6839 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
6841 #define DO_VERIFY_VOLUME 0x00000002
6842 #define DO_BUFFERED_IO 0x00000004
6843 #define DO_EXCLUSIVE 0x00000008
6844 #define DO_DIRECT_IO 0x00000010
6845 #define DO_MAP_IO_BUFFER 0x00000020
6846 #define DO_DEVICE_HAS_NAME 0x00000040
6847 #define DO_DEVICE_INITIALIZING 0x00000080
6848 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
6849 #define DO_LONG_TERM_REQUESTS 0x00000200
6850 #define DO_NEVER_LAST_DEVICE 0x00000400
6851 #define DO_SHUTDOWN_REGISTERED 0x00000800
6852 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
6853 #define DO_POWER_PAGABLE 0x00002000
6854 #define DO_POWER_INRUSH 0x00004000
6855 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
6856 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
6857 #define DO_FORCE_NEITHER_IO 0x00080000
6858 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
6859 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
6860 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
6861 #define DO_DISALLOW_EXECUTE 0x00800000
6863 extern KSPIN_LOCK IoStatisticsLock
;
6864 extern ULONG IoReadOperationCount
;
6865 extern ULONG IoWriteOperationCount
;
6866 extern ULONG IoOtherOperationCount
;
6867 extern LARGE_INTEGER IoReadTransferCount
;
6868 extern LARGE_INTEGER IoWriteTransferCount
;
6869 extern LARGE_INTEGER IoOtherTransferCount
;
6871 #define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE 64
6872 #define IO_FILE_OBJECT_PAGED_POOL_CHARGE 1024
6874 #if (NTDDI_VERSION >= NTDDI_VISTA)
6875 typedef struct _IO_PRIORITY_INFO
{
6877 ULONG ThreadPriority
;
6879 IO_PRIORITY_HINT IoPriority
;
6880 } IO_PRIORITY_INFO
, *PIO_PRIORITY_INFO
;