1 $
if (_WDMDDK_
|| _NTDDK_
)
2 /******************************************************************************
4 ******************************************************************************/
5 $
endif (_WDMDDK_
|| _NTDDK_
)
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 _Function_class_(DRIVER_CONTROL
)
186 typedef IO_ALLOCATION_ACTION
187 (NTAPI DRIVER_CONTROL
)(
188 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
189 _Inout_
struct _IRP
*Irp
,
190 _In_ PVOID MapRegisterBase
,
192 typedef DRIVER_CONTROL
*PDRIVER_CONTROL
;
194 typedef struct _WAIT_CONTEXT_BLOCK
{
195 KDEVICE_QUEUE_ENTRY WaitQueueEntry
;
196 PDRIVER_CONTROL DeviceRoutine
;
198 ULONG NumberOfMapRegisters
;
201 PKDPC BufferChainingDpc
;
202 } WAIT_CONTEXT_BLOCK
, *PWAIT_CONTEXT_BLOCK
;
206 /* DEVICE_OBJECT.Flags */
207 #define DO_DEVICE_HAS_NAME 0x00000040
208 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
209 #define DO_LONG_TERM_REQUESTS 0x00000200
210 #define DO_NEVER_LAST_DEVICE 0x00000400
211 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
212 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
213 #define DO_FORCE_NEITHER_IO 0x00080000
214 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
215 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
216 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
217 #define DO_DISALLOW_EXECUTE 0x00800000
221 /* DEVICE_OBJECT.Flags */
222 #define DO_UNLOAD_PENDING 0x00000001
223 #define DO_VERIFY_VOLUME 0x00000002
224 #define DO_BUFFERED_IO 0x00000004
225 #define DO_EXCLUSIVE 0x00000008
226 #define DO_DIRECT_IO 0x00000010
227 #define DO_MAP_IO_BUFFER 0x00000020
228 #define DO_DEVICE_INITIALIZING 0x00000080
229 #define DO_SHUTDOWN_REGISTERED 0x00000800
230 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
231 #define DO_POWER_PAGABLE 0x00002000
232 #define DO_POWER_INRUSH 0x00004000
234 /* DEVICE_OBJECT.Characteristics */
235 #define FILE_REMOVABLE_MEDIA 0x00000001
236 #define FILE_READ_ONLY_DEVICE 0x00000002
237 #define FILE_FLOPPY_DISKETTE 0x00000004
238 #define FILE_WRITE_ONCE_MEDIA 0x00000008
239 #define FILE_REMOTE_DEVICE 0x00000010
240 #define FILE_DEVICE_IS_MOUNTED 0x00000020
241 #define FILE_VIRTUAL_VOLUME 0x00000040
242 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
243 #define FILE_DEVICE_SECURE_OPEN 0x00000100
244 #define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800
245 #define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000
246 #define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000
248 /* DEVICE_OBJECT.AlignmentRequirement */
249 #define FILE_BYTE_ALIGNMENT 0x00000000
250 #define FILE_WORD_ALIGNMENT 0x00000001
251 #define FILE_LONG_ALIGNMENT 0x00000003
252 #define FILE_QUAD_ALIGNMENT 0x00000007
253 #define FILE_OCTA_ALIGNMENT 0x0000000f
254 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
255 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
256 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
257 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
258 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
261 $
if (_WDMDDK_
|| _DEVIOCTL_
)
262 /* DEVICE_OBJECT.DeviceType */
263 #define DEVICE_TYPE ULONG
265 $
endif (_WDMDDK_
|| _DEVIOCTL_
)
267 typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT
) _DEVICE_OBJECT
{
271 struct _DRIVER_OBJECT
*DriverObject
;
272 struct _DEVICE_OBJECT
*NextDevice
;
273 struct _DEVICE_OBJECT
*AttachedDevice
;
274 struct _IRP
*CurrentIrp
;
277 ULONG Characteristics
;
279 PVOID DeviceExtension
;
280 DEVICE_TYPE DeviceType
;
283 LIST_ENTRY ListEntry
;
284 WAIT_CONTEXT_BLOCK Wcb
;
286 ULONG AlignmentRequirement
;
287 KDEVICE_QUEUE DeviceQueue
;
289 ULONG ActiveThreadCount
;
290 PSECURITY_DESCRIPTOR SecurityDescriptor
;
294 struct _DEVOBJ_EXTENSION
*DeviceObjectExtension
;
296 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
298 typedef enum _IO_SESSION_STATE
{
299 IoSessionStateCreated
= 1,
300 IoSessionStateInitialized
,
301 IoSessionStateConnected
,
302 IoSessionStateDisconnected
,
303 IoSessionStateDisconnectedLoggedOn
,
304 IoSessionStateLoggedOn
,
305 IoSessionStateLoggedOff
,
306 IoSessionStateTerminated
,
308 } IO_SESSION_STATE
, *PIO_SESSION_STATE
;
310 typedef enum _IO_COMPLETION_ROUTINE_RESULT
{
311 ContinueCompletion
= STATUS_CONTINUE_COMPLETION
,
312 StopCompletion
= STATUS_MORE_PROCESSING_REQUIRED
313 } IO_COMPLETION_ROUTINE_RESULT
, *PIO_COMPLETION_ROUTINE_RESULT
;
315 typedef struct _IO_INTERRUPT_MESSAGE_INFO_ENTRY
{
316 PHYSICAL_ADDRESS MessageAddress
;
317 KAFFINITY TargetProcessorSet
;
318 PKINTERRUPT InterruptObject
;
322 KINTERRUPT_MODE Mode
;
323 KINTERRUPT_POLARITY Polarity
;
324 } IO_INTERRUPT_MESSAGE_INFO_ENTRY
, *PIO_INTERRUPT_MESSAGE_INFO_ENTRY
;
326 typedef struct _IO_INTERRUPT_MESSAGE_INFO
{
329 IO_INTERRUPT_MESSAGE_INFO_ENTRY MessageInfo
[1];
330 } IO_INTERRUPT_MESSAGE_INFO
, *PIO_INTERRUPT_MESSAGE_INFO
;
332 typedef struct _IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
{
333 _In_ PDEVICE_OBJECT PhysicalDeviceObject
;
334 _Out_ PKINTERRUPT
*InterruptObject
;
335 _In_ PKSERVICE_ROUTINE ServiceRoutine
;
336 _In_ PVOID ServiceContext
;
337 _In_opt_ PKSPIN_LOCK SpinLock
;
338 _In_ KIRQL SynchronizeIrql
;
339 _In_ BOOLEAN FloatingSave
;
340 _In_ BOOLEAN ShareVector
;
343 _In_ KINTERRUPT_MODE InterruptMode
;
344 _In_ KAFFINITY ProcessorEnableMask
;
346 } IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
;
348 typedef struct _IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
{
349 _In_ PDEVICE_OBJECT PhysicalDeviceObject
;
350 _Out_ PKINTERRUPT
*InterruptObject
;
351 _In_ PKSERVICE_ROUTINE ServiceRoutine
;
352 _In_ PVOID ServiceContext
;
353 _In_opt_ PKSPIN_LOCK SpinLock
;
354 _In_opt_ KIRQL SynchronizeIrql
;
355 _In_ BOOLEAN FloatingSave
;
356 } IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
;
358 typedef struct _IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
{
359 _In_ PDEVICE_OBJECT PhysicalDeviceObject
;
361 _Out_ PVOID
*Generic
;
362 _Out_ PIO_INTERRUPT_MESSAGE_INFO
*InterruptMessageTable
;
363 _Out_ PKINTERRUPT
*InterruptObject
;
365 _In_ PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine
;
366 _In_ PVOID ServiceContext
;
367 _In_opt_ PKSPIN_LOCK SpinLock
;
368 _In_opt_ KIRQL SynchronizeIrql
;
369 _In_ BOOLEAN FloatingSave
;
370 _In_opt_ PKSERVICE_ROUTINE FallBackServiceRoutine
;
371 } IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
;
373 typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS
{
374 _Inout_ ULONG Version
;
375 _ANONYMOUS_UNION
union {
376 IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified
;
377 IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased
;
378 IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased
;
380 } IO_CONNECT_INTERRUPT_PARAMETERS
, *PIO_CONNECT_INTERRUPT_PARAMETERS
;
382 typedef struct _IO_DISCONNECT_INTERRUPT_PARAMETERS
{
386 _In_ PKINTERRUPT InterruptObject
;
387 _In_ PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable
;
389 } IO_DISCONNECT_INTERRUPT_PARAMETERS
, *PIO_DISCONNECT_INTERRUPT_PARAMETERS
;
391 typedef enum _IO_ACCESS_TYPE
{
397 typedef enum _IO_ACCESS_MODE
{
402 typedef enum _IO_CONTAINER_NOTIFICATION_CLASS
{
403 IoSessionStateNotification
,
404 IoMaxContainerNotificationClass
405 } IO_CONTAINER_NOTIFICATION_CLASS
;
407 typedef struct _IO_SESSION_STATE_NOTIFICATION
{
413 } IO_SESSION_STATE_NOTIFICATION
, *PIO_SESSION_STATE_NOTIFICATION
;
415 typedef enum _IO_CONTAINER_INFORMATION_CLASS
{
416 IoSessionStateInformation
,
417 IoMaxContainerInformationClass
418 } IO_CONTAINER_INFORMATION_CLASS
;
420 typedef struct _IO_SESSION_STATE_INFORMATION
{
422 IO_SESSION_STATE SessionState
;
423 BOOLEAN LocalSession
;
424 } IO_SESSION_STATE_INFORMATION
, *PIO_SESSION_STATE_INFORMATION
;
426 #if (NTDDI_VERSION >= NTDDI_WIN7)
429 (NTAPI
*PIO_CONTAINER_NOTIFICATION_FUNCTION
)(
433 (NTAPI IO_SESSION_NOTIFICATION_FUNCTION
)(
434 _In_ PVOID SessionObject
,
438 _In_reads_bytes_opt_(PayloadLength
) PVOID NotificationPayload
,
439 _In_ ULONG PayloadLength
);
441 typedef IO_SESSION_NOTIFICATION_FUNCTION
*PIO_SESSION_NOTIFICATION_FUNCTION
;
445 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK
* PIO_REMOVE_LOCK_TRACKING_BLOCK
;
447 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK
{
450 volatile LONG IoCount
;
452 } IO_REMOVE_LOCK_COMMON_BLOCK
;
454 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK
{
457 LONGLONG MaxLockedTicks
;
461 volatile LONG LowMemoryCount
;
464 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks
;
465 } IO_REMOVE_LOCK_DBG_BLOCK
;
467 typedef struct _IO_REMOVE_LOCK
{
468 IO_REMOVE_LOCK_COMMON_BLOCK Common
;
470 IO_REMOVE_LOCK_DBG_BLOCK Dbg
;
472 } IO_REMOVE_LOCK
, *PIO_REMOVE_LOCK
;
474 typedef struct _IO_WORKITEM
*PIO_WORKITEM
;
476 _Function_class_(IO_WORKITEM_ROUTINE
)
477 _IRQL_requires_(PASSIVE_LEVEL
)
480 (NTAPI IO_WORKITEM_ROUTINE
)(
481 _In_ PDEVICE_OBJECT DeviceObject
,
482 _In_opt_ PVOID Context
);
483 typedef IO_WORKITEM_ROUTINE
*PIO_WORKITEM_ROUTINE
;
486 (NTAPI IO_WORKITEM_ROUTINE_EX
)(
488 _In_opt_ PVOID Context
,
489 _In_ PIO_WORKITEM IoWorkItem
);
490 typedef IO_WORKITEM_ROUTINE_EX
*PIO_WORKITEM_ROUTINE_EX
;
492 typedef struct _SHARE_ACCESS
{
500 } SHARE_ACCESS
, *PSHARE_ACCESS
;
502 typedef enum _CREATE_FILE_TYPE
{
504 CreateFileTypeNamedPipe
,
505 CreateFileTypeMailslot
508 #define IO_FORCE_ACCESS_CHECK 0x001
509 #define IO_NO_PARAMETER_CHECKING 0x100
511 #define IO_REPARSE 0x0
512 #define IO_REMOUNT 0x1
514 typedef struct _IO_STATUS_BLOCK
{
515 _ANONYMOUS_UNION
union {
519 ULONG_PTR Information
;
520 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
523 typedef struct _IO_STATUS_BLOCK32
{
526 } IO_STATUS_BLOCK32
, *PIO_STATUS_BLOCK32
;
530 (NTAPI
*PIO_APC_ROUTINE
)(
531 _In_ PVOID ApcContext
,
532 _In_ PIO_STATUS_BLOCK IoStatusBlock
,
533 _In_ ULONG Reserved
);
535 #define PIO_APC_ROUTINE_DEFINED
537 typedef enum _IO_SESSION_EVENT
{
538 IoSessionEventIgnore
= 0,
539 IoSessionEventCreated
,
540 IoSessionEventTerminated
,
541 IoSessionEventConnected
,
542 IoSessionEventDisconnected
,
544 IoSessionEventLogoff
,
546 } IO_SESSION_EVENT
, *PIO_SESSION_EVENT
;
548 #define IO_SESSION_STATE_ALL_EVENTS 0xffffffff
549 #define IO_SESSION_STATE_CREATION_EVENT 0x00000001
550 #define IO_SESSION_STATE_TERMINATION_EVENT 0x00000002
551 #define IO_SESSION_STATE_CONNECT_EVENT 0x00000004
552 #define IO_SESSION_STATE_DISCONNECT_EVENT 0x00000008
553 #define IO_SESSION_STATE_LOGON_EVENT 0x00000010
554 #define IO_SESSION_STATE_LOGOFF_EVENT 0x00000020
556 #define IO_SESSION_STATE_VALID_EVENT_MASK 0x0000003f
558 #define IO_SESSION_MAX_PAYLOAD_SIZE 256L
560 typedef struct _IO_SESSION_CONNECT_INFO
{
562 BOOLEAN LocalSession
;
563 } IO_SESSION_CONNECT_INFO
, *PIO_SESSION_CONNECT_INFO
;
565 #define EVENT_INCREMENT 1
566 #define IO_NO_INCREMENT 0
567 #define IO_CD_ROM_INCREMENT 1
568 #define IO_DISK_INCREMENT 1
569 #define IO_KEYBOARD_INCREMENT 6
570 #define IO_MAILSLOT_INCREMENT 2
571 #define IO_MOUSE_INCREMENT 6
572 #define IO_NAMED_PIPE_INCREMENT 2
573 #define IO_NETWORK_INCREMENT 2
574 #define IO_PARALLEL_INCREMENT 1
575 #define IO_SERIAL_INCREMENT 2
576 #define IO_SOUND_INCREMENT 8
577 #define IO_VIDEO_INCREMENT 1
578 #define SEMAPHORE_INCREMENT 1
580 #define MM_MAXIMUM_DISK_IO_SIZE (0x10000)
582 typedef struct _BOOTDISK_INFORMATION
{
583 LONGLONG BootPartitionOffset
;
584 LONGLONG SystemPartitionOffset
;
585 ULONG BootDeviceSignature
;
586 ULONG SystemDeviceSignature
;
587 } BOOTDISK_INFORMATION
, *PBOOTDISK_INFORMATION
;
589 typedef struct _BOOTDISK_INFORMATION_EX
{
590 LONGLONG BootPartitionOffset
;
591 LONGLONG SystemPartitionOffset
;
592 ULONG BootDeviceSignature
;
593 ULONG SystemDeviceSignature
;
595 GUID SystemDeviceGuid
;
596 BOOLEAN BootDeviceIsGpt
;
597 BOOLEAN SystemDeviceIsGpt
;
598 } BOOTDISK_INFORMATION_EX
, *PBOOTDISK_INFORMATION_EX
;
600 #if (NTDDI_VERSION >= NTDDI_WIN7)
602 typedef struct _LOADER_PARTITION_INFORMATION_EX
{
603 ULONG PartitionStyle
;
604 ULONG PartitionNumber
;
605 _ANONYMOUS_UNION
union {
610 } LOADER_PARTITION_INFORMATION_EX
, *PLOADER_PARTITION_INFORMATION_EX
;
612 typedef struct _BOOTDISK_INFORMATION_LITE
{
614 LOADER_PARTITION_INFORMATION_EX Entries
[1];
615 } BOOTDISK_INFORMATION_LITE
, *PBOOTDISK_INFORMATION_LITE
;
619 #if (NTDDI_VERSION >= NTDDI_VISTA)
620 typedef struct _BOOTDISK_INFORMATION_LITE
{
621 ULONG BootDeviceSignature
;
622 ULONG SystemDeviceSignature
;
624 GUID SystemDeviceGuid
;
625 BOOLEAN BootDeviceIsGpt
;
626 BOOLEAN SystemDeviceIsGpt
;
627 } BOOTDISK_INFORMATION_LITE
, *PBOOTDISK_INFORMATION_LITE
;
628 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
630 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
632 #include <pshpack1.h>
634 typedef struct _EISA_MEMORY_TYPE
{
642 } EISA_MEMORY_TYPE
, *PEISA_MEMORY_TYPE
;
644 typedef struct _EISA_MEMORY_CONFIGURATION
{
645 EISA_MEMORY_TYPE ConfigurationByte
;
647 USHORT AddressLowWord
;
648 UCHAR AddressHighByte
;
650 } EISA_MEMORY_CONFIGURATION
, *PEISA_MEMORY_CONFIGURATION
;
652 typedef struct _EISA_IRQ_DESCRIPTOR
{
655 UCHAR LevelTriggered
:1;
658 } EISA_IRQ_DESCRIPTOR
, *PEISA_IRQ_DESCRIPTOR
;
660 typedef struct _EISA_IRQ_CONFIGURATION
{
661 EISA_IRQ_DESCRIPTOR ConfigurationByte
;
663 } EISA_IRQ_CONFIGURATION
, *PEISA_IRQ_CONFIGURATION
;
665 typedef struct _DMA_CONFIGURATION_BYTE0
{
670 } DMA_CONFIGURATION_BYTE0
;
672 typedef struct _DMA_CONFIGURATION_BYTE1
{
674 UCHAR TransferSize
:2;
677 } DMA_CONFIGURATION_BYTE1
;
679 typedef struct _EISA_DMA_CONFIGURATION
{
680 DMA_CONFIGURATION_BYTE0 ConfigurationByte0
;
681 DMA_CONFIGURATION_BYTE1 ConfigurationByte1
;
682 } EISA_DMA_CONFIGURATION
, *PEISA_DMA_CONFIGURATION
;
684 typedef struct _EISA_PORT_DESCRIPTOR
{
689 } EISA_PORT_DESCRIPTOR
, *PEISA_PORT_DESCRIPTOR
;
691 typedef struct _EISA_PORT_CONFIGURATION
{
692 EISA_PORT_DESCRIPTOR Configuration
;
694 } EISA_PORT_CONFIGURATION
, *PEISA_PORT_CONFIGURATION
;
696 typedef struct _CM_EISA_SLOT_INFORMATION
{
702 UCHAR NumberFunctions
;
703 UCHAR FunctionInformation
;
705 } CM_EISA_SLOT_INFORMATION
, *PCM_EISA_SLOT_INFORMATION
;
707 typedef struct _CM_EISA_FUNCTION_INFORMATION
{
713 UCHAR Selections
[26];
715 UCHAR TypeString
[80];
716 EISA_MEMORY_CONFIGURATION EisaMemory
[9];
717 EISA_IRQ_CONFIGURATION EisaIrq
[7];
718 EISA_DMA_CONFIGURATION EisaDma
[4];
719 EISA_PORT_CONFIGURATION EisaPort
[20];
720 UCHAR InitializationData
[60];
721 } CM_EISA_FUNCTION_INFORMATION
, *PCM_EISA_FUNCTION_INFORMATION
;
725 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
727 #define EISA_FUNCTION_ENABLED 0x80
728 #define EISA_FREE_FORM_DATA 0x40
729 #define EISA_HAS_PORT_INIT_ENTRY 0x20
730 #define EISA_HAS_PORT_RANGE 0x10
731 #define EISA_HAS_DMA_ENTRY 0x08
732 #define EISA_HAS_IRQ_ENTRY 0x04
733 #define EISA_HAS_MEMORY_ENTRY 0x02
734 #define EISA_HAS_TYPE_ENTRY 0x01
735 #define EISA_HAS_INFORMATION \
736 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
737 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
739 #define EISA_MORE_ENTRIES 0x80
740 #define EISA_SYSTEM_MEMORY 0x00
741 #define EISA_MEMORY_TYPE_RAM 0x01
743 /* CM_EISA_SLOT_INFORMATION.ReturnCode */
745 #define EISA_INVALID_SLOT 0x80
746 #define EISA_INVALID_FUNCTION 0x81
747 #define EISA_INVALID_CONFIGURATION 0x82
748 #define EISA_EMPTY_SLOT 0x83
749 #define EISA_INVALID_BIOS_CALL 0x86
752 ** Plug and Play structures
756 (NTAPI
*PINTERFACE_REFERENCE
)(
760 (NTAPI
*PINTERFACE_DEREFERENCE
)(
763 _Function_class_(TRANSLATE_BUS_ADDRESS
)
766 (NTAPI TRANSLATE_BUS_ADDRESS
)(
767 _Inout_opt_ PVOID Context
,
768 _In_ PHYSICAL_ADDRESS BusAddress
,
770 _Out_ PULONG AddressSpace
,
771 _Out_ PPHYSICAL_ADDRESS TranslatedAddress
);
772 typedef TRANSLATE_BUS_ADDRESS
*PTRANSLATE_BUS_ADDRESS
;
774 _Function_class_(GET_DMA_ADAPTER
)
776 typedef struct _DMA_ADAPTER
*
777 (NTAPI GET_DMA_ADAPTER
)(
778 _Inout_opt_ PVOID Context
,
779 _In_
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
780 _Out_ PULONG NumberOfMapRegisters
);
781 typedef GET_DMA_ADAPTER
*PGET_DMA_ADAPTER
;
783 _Function_class_(GET_SET_DEVICE_DATA
)
786 (NTAPI GET_SET_DEVICE_DATA
)(
787 _Inout_opt_ PVOID Context
,
789 _Inout_updates_bytes_(Length
) PVOID Buffer
,
792 typedef GET_SET_DEVICE_DATA
*PGET_SET_DEVICE_DATA
;
794 typedef enum _DEVICE_INSTALL_STATE
{
795 InstallStateInstalled
,
796 InstallStateNeedsReinstall
,
797 InstallStateFailedInstall
,
798 InstallStateFinishInstall
799 } DEVICE_INSTALL_STATE
, *PDEVICE_INSTALL_STATE
;
801 typedef struct _LEGACY_BUS_INFORMATION
{
803 INTERFACE_TYPE LegacyBusType
;
805 } LEGACY_BUS_INFORMATION
, *PLEGACY_BUS_INFORMATION
;
807 typedef enum _DEVICE_REMOVAL_POLICY
{
808 RemovalPolicyExpectNoRemoval
= 1,
809 RemovalPolicyExpectOrderlyRemoval
= 2,
810 RemovalPolicyExpectSurpriseRemoval
= 3
811 } DEVICE_REMOVAL_POLICY
, *PDEVICE_REMOVAL_POLICY
;
814 (NTAPI
*PREENUMERATE_SELF
)(
817 typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD
{
821 PINTERFACE_REFERENCE InterfaceReference
;
822 PINTERFACE_DEREFERENCE InterfaceDereference
;
823 PREENUMERATE_SELF SurpriseRemoveAndReenumerateSelf
;
824 } REENUMERATE_SELF_INTERFACE_STANDARD
, *PREENUMERATE_SELF_INTERFACE_STANDARD
;
827 (NTAPI
*PIO_DEVICE_EJECT_CALLBACK
)(
828 _In_ NTSTATUS Status
,
829 _Inout_opt_ PVOID Context
);
831 #define PCI_DEVICE_PRESENT_INTERFACE_VERSION 1
833 /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
834 #define PCI_USE_SUBSYSTEM_IDS 0x00000001
835 #define PCI_USE_REVISION 0x00000002
836 #define PCI_USE_VENDEV_IDS 0x00000004
837 #define PCI_USE_CLASS_SUBCLASS 0x00000008
838 #define PCI_USE_PROGIF 0x00000010
839 #define PCI_USE_LOCAL_BUS 0x00000020
840 #define PCI_USE_LOCAL_DEVICE 0x00000040
842 typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS
{
853 } PCI_DEVICE_PRESENCE_PARAMETERS
, *PPCI_DEVICE_PRESENCE_PARAMETERS
;
855 _IRQL_requires_max_(PASSIVE_LEVEL
)
856 _Must_inspect_result_
858 (NTAPI PCI_IS_DEVICE_PRESENT
)(
859 _In_ USHORT VendorID
,
860 _In_ USHORT DeviceID
,
861 _In_ UCHAR RevisionID
,
862 _In_ USHORT SubVendorID
,
863 _In_ USHORT SubSystemID
,
865 typedef PCI_IS_DEVICE_PRESENT
*PPCI_IS_DEVICE_PRESENT
;
867 _IRQL_requires_max_(PASSIVE_LEVEL
)
868 _Must_inspect_result_
870 (NTAPI PCI_IS_DEVICE_PRESENT_EX
)(
872 _In_ PPCI_DEVICE_PRESENCE_PARAMETERS Parameters
);
873 typedef PCI_IS_DEVICE_PRESENT_EX
*PPCI_IS_DEVICE_PRESENT_EX
;
875 typedef struct _BUS_INTERFACE_STANDARD
{
879 PINTERFACE_REFERENCE InterfaceReference
;
880 PINTERFACE_DEREFERENCE InterfaceDereference
;
881 PTRANSLATE_BUS_ADDRESS TranslateBusAddress
;
882 PGET_DMA_ADAPTER GetDmaAdapter
;
883 PGET_SET_DEVICE_DATA SetBusData
;
884 PGET_SET_DEVICE_DATA GetBusData
;
885 } BUS_INTERFACE_STANDARD
, *PBUS_INTERFACE_STANDARD
;
887 typedef struct _PCI_DEVICE_PRESENT_INTERFACE
{
891 PINTERFACE_REFERENCE InterfaceReference
;
892 PINTERFACE_DEREFERENCE InterfaceDereference
;
893 PPCI_IS_DEVICE_PRESENT IsDevicePresent
;
894 PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx
;
895 } PCI_DEVICE_PRESENT_INTERFACE
, *PPCI_DEVICE_PRESENT_INTERFACE
;
897 _Struct_size_bytes_(Size
)
898 typedef struct _DEVICE_CAPABILITIES
{
899 _Field_range_(==, sizeof(struct _DEVICE_CAPABILITIES
)) USHORT Size
;
903 ULONG LockSupported
:1;
904 ULONG EjectSupported
:1;
908 ULONG SilentInstall
:1;
910 ULONG SurpriseRemovalOK
:1;
915 ULONG HardwareDisabled
:1;
917 ULONG WarmEjectSupported
:1;
918 ULONG NoDisplayInUI
:1;
922 DEVICE_POWER_STATE DeviceState
[PowerSystemMaximum
];
923 SYSTEM_POWER_STATE SystemWake
;
924 DEVICE_POWER_STATE DeviceWake
;
928 } DEVICE_CAPABILITIES
, *PDEVICE_CAPABILITIES
;
930 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION
{
934 GUID InterfaceClassGuid
;
935 PUNICODE_STRING SymbolicLinkName
;
936 } DEVICE_INTERFACE_CHANGE_NOTIFICATION
, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION
;
938 typedef struct _HWPROFILE_CHANGE_NOTIFICATION
{
942 } HWPROFILE_CHANGE_NOTIFICATION
, *PHWPROFILE_CHANGE_NOTIFICATION
;
946 typedef struct _INTERFACE
{
950 PINTERFACE_REFERENCE InterfaceReference
;
951 PINTERFACE_DEREFERENCE InterfaceDereference
;
952 } INTERFACE
, *PINTERFACE
;
954 typedef struct _PLUGPLAY_NOTIFICATION_HEADER
{
958 } PLUGPLAY_NOTIFICATION_HEADER
, *PPLUGPLAY_NOTIFICATION_HEADER
;
960 typedef ULONG PNP_DEVICE_STATE
, *PPNP_DEVICE_STATE
;
962 /* PNP_DEVICE_STATE */
964 #define PNP_DEVICE_DISABLED 0x00000001
965 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
966 #define PNP_DEVICE_FAILED 0x00000004
967 #define PNP_DEVICE_REMOVED 0x00000008
968 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
969 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
971 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION
{
975 struct _FILE_OBJECT
*FileObject
;
976 LONG NameBufferOffset
;
977 UCHAR CustomDataBuffer
[1];
978 } TARGET_DEVICE_CUSTOM_NOTIFICATION
, *PTARGET_DEVICE_CUSTOM_NOTIFICATION
;
980 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION
{
984 struct _FILE_OBJECT
*FileObject
;
985 } TARGET_DEVICE_REMOVAL_NOTIFICATION
, *PTARGET_DEVICE_REMOVAL_NOTIFICATION
;
987 #if (NTDDI_VERSION >= NTDDI_VISTA)
988 #include <devpropdef.h>
989 #define PLUGPLAY_PROPERTY_PERSISTENT 0x00000001
992 #define PNP_REPLACE_NO_MAP MAXLONGLONG
994 _Must_inspect_result_
996 (NTAPI
*PREPLACE_MAP_MEMORY
)(
997 _In_ PHYSICAL_ADDRESS TargetPhysicalAddress
,
998 _In_ PHYSICAL_ADDRESS SparePhysicalAddress
,
999 _Inout_ PLARGE_INTEGER NumberOfBytes
,
1000 _Outptr_ PVOID
*TargetAddress
,
1001 _Outptr_ PVOID
*SpareAddress
);
1003 typedef struct _PNP_REPLACE_MEMORY_LIST
{
1004 ULONG AllocatedCount
;
1006 ULONGLONG TotalLength
;
1008 PHYSICAL_ADDRESS Address
;
1010 } Ranges
[ANYSIZE_ARRAY
];
1011 } PNP_REPLACE_MEMORY_LIST
, *PPNP_REPLACE_MEMORY_LIST
;
1013 typedef struct _PNP_REPLACE_PROCESSOR_LIST
{
1014 PKAFFINITY Affinity
;
1015 _Field_range_(<=, MAXIMUM_GROUPS
) ULONG GroupCount
;
1016 ULONG AllocatedCount
;
1018 ULONG ApicIds
[ANYSIZE_ARRAY
];
1019 } PNP_REPLACE_PROCESSOR_LIST
, *PPNP_REPLACE_PROCESSOR_LIST
;
1021 typedef struct _PNP_REPLACE_PROCESSOR_LIST_V1
{
1022 KAFFINITY AffinityMask
;
1023 ULONG AllocatedCount
;
1025 ULONG ApicIds
[ANYSIZE_ARRAY
];
1026 } PNP_REPLACE_PROCESSOR_LIST_V1
, *PPNP_REPLACE_PROCESSOR_LIST_V1
;
1028 #define PNP_REPLACE_PARAMETERS_VERSION 2
1030 typedef struct _PNP_REPLACE_PARAMETERS
{
1035 PPNP_REPLACE_PROCESSOR_LIST TargetProcessors
;
1036 PPNP_REPLACE_PROCESSOR_LIST SpareProcessors
;
1037 PPNP_REPLACE_MEMORY_LIST TargetMemory
;
1038 PPNP_REPLACE_MEMORY_LIST SpareMemory
;
1039 PREPLACE_MAP_MEMORY MapMemory
;
1040 } PNP_REPLACE_PARAMETERS
, *PPNP_REPLACE_PARAMETERS
;
1043 (NTAPI
*PREPLACE_UNLOAD
)(
1046 _Must_inspect_result_
1048 (NTAPI
*PREPLACE_BEGIN
)(
1049 _In_ PPNP_REPLACE_PARAMETERS Parameters
,
1050 _Outptr_ PVOID
*Context
);
1052 _Must_inspect_result_
1054 (NTAPI
*PREPLACE_END
)(
1055 _In_ PVOID Context
);
1057 _Must_inspect_result_
1059 (NTAPI
*PREPLACE_MIRROR_PHYSICAL_MEMORY
)(
1061 _In_ PHYSICAL_ADDRESS PhysicalAddress
,
1062 _In_ LARGE_INTEGER ByteCount
);
1064 _Must_inspect_result_
1066 (NTAPI
*PREPLACE_SET_PROCESSOR_ID
)(
1069 _In_ BOOLEAN Target
);
1071 _Must_inspect_result_
1073 (NTAPI
*PREPLACE_SWAP
)(
1074 _In_ PVOID Context
);
1076 _Must_inspect_result_
1078 (NTAPI
*PREPLACE_INITIATE_HARDWARE_MIRROR
)(
1079 _In_ PVOID Context
);
1081 _Must_inspect_result_
1083 (NTAPI
*PREPLACE_MIRROR_PLATFORM_MEMORY
)(
1084 _In_ PVOID Context
);
1086 _Must_inspect_result_
1088 (NTAPI
*PREPLACE_GET_MEMORY_DESTINATION
)(
1090 _In_ PHYSICAL_ADDRESS SourceAddress
,
1091 _Out_ PPHYSICAL_ADDRESS DestinationAddress
);
1093 _Must_inspect_result_
1095 (NTAPI
*PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE
)(
1097 _In_ BOOLEAN Enable
);
1099 #define PNP_REPLACE_DRIVER_INTERFACE_VERSION 1
1100 #define PNP_REPLACE_DRIVER_INTERFACE_MINIMUM_SIZE \
1101 FIELD_OFFSET(PNP_REPLACE_DRIVER_INTERFACE, InitiateHardwareMirror)
1103 #define PNP_REPLACE_MEMORY_SUPPORTED 0x0001
1104 #define PNP_REPLACE_PROCESSOR_SUPPORTED 0x0002
1105 #define PNP_REPLACE_HARDWARE_MEMORY_MIRRORING 0x0004
1106 #define PNP_REPLACE_HARDWARE_PAGE_COPY 0x0008
1107 #define PNP_REPLACE_HARDWARE_QUIESCE 0x0010
1109 typedef struct _PNP_REPLACE_DRIVER_INTERFACE
{
1113 PREPLACE_UNLOAD Unload
;
1114 PREPLACE_BEGIN BeginReplace
;
1115 PREPLACE_END EndReplace
;
1116 PREPLACE_MIRROR_PHYSICAL_MEMORY MirrorPhysicalMemory
;
1117 PREPLACE_SET_PROCESSOR_ID SetProcessorId
;
1119 PREPLACE_INITIATE_HARDWARE_MIRROR InitiateHardwareMirror
;
1120 PREPLACE_MIRROR_PLATFORM_MEMORY MirrorPlatformMemory
;
1121 PREPLACE_GET_MEMORY_DESTINATION GetMemoryDestination
;
1122 PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE EnableDisableHardwareQuiesce
;
1123 } PNP_REPLACE_DRIVER_INTERFACE
, *PPNP_REPLACE_DRIVER_INTERFACE
;
1125 _Must_inspect_result_
1127 (NTAPI
*PREPLACE_DRIVER_INIT
)(
1128 _Inout_ PPNP_REPLACE_DRIVER_INTERFACE Interface
,
1131 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE
{
1132 DeviceUsageTypeUndefined
,
1133 DeviceUsageTypePaging
,
1134 DeviceUsageTypeHibernation
,
1135 DeviceUsageTypeDumpFile
1136 } DEVICE_USAGE_NOTIFICATION_TYPE
;
1138 typedef struct _POWER_SEQUENCE
{
1142 } POWER_SEQUENCE
, *PPOWER_SEQUENCE
;
1145 #define __string_type 0x1000
1146 #define __guid_type 0x2000
1147 #define __multiString_type 0x4000
1149 #define __string_type 0
1150 #define __guid_type 0
1151 #define __multiString_type 0
1155 DevicePropertyDeviceDescription
= 0x0 | __string_type
,
1156 DevicePropertyHardwareID
= 0x1 | __multiString_type
,
1157 DevicePropertyCompatibleIDs
= 0x2 | __multiString_type
,
1158 DevicePropertyBootConfiguration
= 0x3,
1159 DevicePropertyBootConfigurationTranslated
= 0x4,
1160 DevicePropertyClassName
= 0x5 | __string_type
,
1161 DevicePropertyClassGuid
= 0x6 | __string_type
,
1162 DevicePropertyDriverKeyName
= 0x7 | __string_type
,
1163 DevicePropertyManufacturer
= 0x8 | __string_type
,
1164 DevicePropertyFriendlyName
= 0x9 | __string_type
,
1165 DevicePropertyLocationInformation
= 0xa | __string_type
,
1166 DevicePropertyPhysicalDeviceObjectName
= 0xb | __string_type
,
1167 DevicePropertyBusTypeGuid
= 0xc | __guid_type
,
1168 DevicePropertyLegacyBusType
= 0xd,
1169 DevicePropertyBusNumber
= 0xe,
1170 DevicePropertyEnumeratorName
= 0xf | __string_type
,
1171 DevicePropertyAddress
= 0x10,
1172 DevicePropertyUINumber
= 0x11,
1173 DevicePropertyInstallState
= 0x12,
1174 DevicePropertyRemovalPolicy
= 0x13,
1175 DevicePropertyResourceRequirements
= 0x14,
1176 DevicePropertyAllocatedResources
= 0x15,
1177 DevicePropertyContainerID
= 0x16 | __string_type
1178 } DEVICE_REGISTRY_PROPERTY
;
1180 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY
{
1181 EventCategoryReserved
,
1182 EventCategoryHardwareProfileChange
,
1183 EventCategoryDeviceInterfaceChange
,
1184 EventCategoryTargetDeviceChange
1185 } IO_NOTIFICATION_EVENT_CATEGORY
;
1187 typedef enum _IO_PRIORITY_HINT
{
1188 IoPriorityVeryLow
= 0,
1196 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
1198 _Function_class_(DRIVER_NOTIFICATION_CALLBACK_ROUTINE
)
1199 _IRQL_requires_max_(PASSIVE_LEVEL
)
1201 (NTAPI DRIVER_NOTIFICATION_CALLBACK_ROUTINE
)(
1202 _In_ PVOID NotificationStructure
,
1203 _Inout_opt_ PVOID Context
);
1204 typedef DRIVER_NOTIFICATION_CALLBACK_ROUTINE
*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE
;
1206 _Function_class_(DEVICE_CHANGE_COMPLETE_CALLBACK
)
1207 _IRQL_requires_same_
1209 (NTAPI DEVICE_CHANGE_COMPLETE_CALLBACK
)(
1210 _Inout_opt_ PVOID Context
);
1211 typedef DEVICE_CHANGE_COMPLETE_CALLBACK
*PDEVICE_CHANGE_COMPLETE_CALLBACK
;
1213 typedef enum _FILE_INFORMATION_CLASS
{
1214 FileDirectoryInformation
= 1,
1215 FileFullDirectoryInformation
,
1216 FileBothDirectoryInformation
,
1217 FileBasicInformation
,
1218 FileStandardInformation
,
1219 FileInternalInformation
,
1221 FileAccessInformation
,
1222 FileNameInformation
,
1223 FileRenameInformation
,
1224 FileLinkInformation
,
1225 FileNamesInformation
,
1226 FileDispositionInformation
,
1227 FilePositionInformation
,
1228 FileFullEaInformation
,
1229 FileModeInformation
,
1230 FileAlignmentInformation
,
1232 FileAllocationInformation
,
1233 FileEndOfFileInformation
,
1234 FileAlternateNameInformation
,
1235 FileStreamInformation
,
1236 FilePipeInformation
,
1237 FilePipeLocalInformation
,
1238 FilePipeRemoteInformation
,
1239 FileMailslotQueryInformation
,
1240 FileMailslotSetInformation
,
1241 FileCompressionInformation
,
1242 FileObjectIdInformation
,
1243 FileCompletionInformation
,
1244 FileMoveClusterInformation
,
1245 FileQuotaInformation
,
1246 FileReparsePointInformation
,
1247 FileNetworkOpenInformation
,
1248 FileAttributeTagInformation
,
1249 FileTrackingInformation
,
1250 FileIdBothDirectoryInformation
,
1251 FileIdFullDirectoryInformation
,
1252 FileValidDataLengthInformation
,
1253 FileShortNameInformation
,
1254 #if (NTDDI_VERSION >= NTDDI_VISTA)
1255 FileIoCompletionNotificationInformation
,
1256 FileIoStatusBlockRangeInformation
,
1257 FileIoPriorityHintInformation
,
1258 FileSfioReserveInformation
,
1259 FileSfioVolumeInformation
,
1260 FileHardLinkInformation
,
1261 FileProcessIdsUsingFileInformation
,
1262 FileNormalizedNameInformation
,
1263 FileNetworkPhysicalNameInformation
,
1265 #if (NTDDI_VERSION >= NTDDI_WIN7)
1266 FileIdGlobalTxDirectoryInformation
,
1267 FileIsRemoteDeviceInformation
,
1268 FileAttributeCacheInformation
,
1269 FileNumaNodeInformation
,
1270 FileStandardLinkInformation
,
1271 FileRemoteProtocolInformation
,
1273 FileMaximumInformation
1274 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
1276 typedef enum _DIRECTORY_NOTIFY_INFORMATION_CLASS
{
1277 DirectoryNotifyInformation
= 1,
1278 DirectoryNotifyExtendedInformation
1279 } DIRECTORY_NOTIFY_INFORMATION_CLASS
, *PDIRECTORY_NOTIFY_INFORMATION_CLASS
;
1281 typedef struct _FILE_POSITION_INFORMATION
{
1282 LARGE_INTEGER CurrentByteOffset
;
1283 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
1285 typedef struct _FILE_BASIC_INFORMATION
{
1286 LARGE_INTEGER CreationTime
;
1287 LARGE_INTEGER LastAccessTime
;
1288 LARGE_INTEGER LastWriteTime
;
1289 LARGE_INTEGER ChangeTime
;
1290 ULONG FileAttributes
;
1291 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
1293 typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION
{
1294 IO_PRIORITY_HINT PriorityHint
;
1295 } FILE_IO_PRIORITY_HINT_INFORMATION
, *PFILE_IO_PRIORITY_HINT_INFORMATION
;
1297 typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
{
1299 } FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION
;
1301 typedef struct _FILE_IOSTATUSBLOCK_RANGE_INFORMATION
{
1302 PUCHAR IoStatusBlockRange
;
1304 } FILE_IOSTATUSBLOCK_RANGE_INFORMATION
, *PFILE_IOSTATUSBLOCK_RANGE_INFORMATION
;
1306 typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION
{
1308 } FILE_IS_REMOTE_DEVICE_INFORMATION
, *PFILE_IS_REMOTE_DEVICE_INFORMATION
;
1310 typedef struct _FILE_NUMA_NODE_INFORMATION
{
1312 } FILE_NUMA_NODE_INFORMATION
, *PFILE_NUMA_NODE_INFORMATION
;
1314 typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION
{
1315 ULONG NumberOfProcessIdsInList
;
1316 ULONG_PTR ProcessIdList
[1];
1317 } FILE_PROCESS_IDS_USING_FILE_INFORMATION
, *PFILE_PROCESS_IDS_USING_FILE_INFORMATION
;
1319 typedef struct _FILE_STANDARD_INFORMATION
{
1320 LARGE_INTEGER AllocationSize
;
1321 LARGE_INTEGER EndOfFile
;
1322 ULONG NumberOfLinks
;
1323 BOOLEAN DeletePending
;
1325 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
1327 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
1328 LARGE_INTEGER CreationTime
;
1329 LARGE_INTEGER LastAccessTime
;
1330 LARGE_INTEGER LastWriteTime
;
1331 LARGE_INTEGER ChangeTime
;
1332 LARGE_INTEGER AllocationSize
;
1333 LARGE_INTEGER EndOfFile
;
1334 ULONG FileAttributes
;
1335 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
1337 typedef enum _FSINFOCLASS
{
1338 FileFsVolumeInformation
= 1,
1339 FileFsLabelInformation
,
1340 FileFsSizeInformation
,
1341 FileFsDeviceInformation
,
1342 FileFsAttributeInformation
,
1343 FileFsControlInformation
,
1344 FileFsFullSizeInformation
,
1345 FileFsObjectIdInformation
,
1346 FileFsDriverPathInformation
,
1347 FileFsVolumeFlagsInformation
,
1348 FileFsMaximumInformation
1349 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
1351 typedef struct _FILE_FS_DEVICE_INFORMATION
{
1352 DEVICE_TYPE DeviceType
;
1353 ULONG Characteristics
;
1354 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
1356 typedef struct _FILE_FULL_EA_INFORMATION
{
1357 ULONG NextEntryOffset
;
1360 USHORT EaValueLength
;
1362 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
1364 typedef struct _FILE_SFIO_RESERVE_INFORMATION
{
1365 ULONG RequestsPerPeriod
;
1367 BOOLEAN RetryFailures
;
1368 BOOLEAN Discardable
;
1370 ULONG NumOutstandingRequests
;
1371 } FILE_SFIO_RESERVE_INFORMATION
, *PFILE_SFIO_RESERVE_INFORMATION
;
1373 typedef struct _FILE_SFIO_VOLUME_INFORMATION
{
1374 ULONG MaximumRequestsPerPeriod
;
1375 ULONG MinimumPeriod
;
1376 ULONG MinimumTransferSize
;
1377 } FILE_SFIO_VOLUME_INFORMATION
, *PFILE_SFIO_VOLUME_INFORMATION
;
1379 #define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1
1380 #define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2
1381 #define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4
1383 #define FM_LOCK_BIT (0x1)
1384 #define FM_LOCK_BIT_V (0x0)
1385 #define FM_LOCK_WAITER_WOKEN (0x2)
1386 #define FM_LOCK_WAITER_INC (0x4)
1388 _Function_class_(FAST_IO_CHECK_IF_POSSIBLE
)
1389 _IRQL_requires_same_
1391 (NTAPI FAST_IO_CHECK_IF_POSSIBLE
)(
1392 _In_
struct _FILE_OBJECT
*FileObject
,
1393 _In_ PLARGE_INTEGER FileOffset
,
1397 _In_ BOOLEAN CheckForReadOperation
,
1398 _Out_ PIO_STATUS_BLOCK IoStatus
,
1399 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1400 typedef FAST_IO_CHECK_IF_POSSIBLE
*PFAST_IO_CHECK_IF_POSSIBLE
;
1402 _Function_class_(FAST_IO_READ
)
1403 _IRQL_requires_same_
1405 (NTAPI FAST_IO_READ
)(
1406 _In_
struct _FILE_OBJECT
*FileObject
,
1407 _In_ PLARGE_INTEGER FileOffset
,
1412 _Out_ PIO_STATUS_BLOCK IoStatus
,
1413 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1414 typedef FAST_IO_READ
*PFAST_IO_READ
;
1416 _Function_class_(FAST_IO_WRITE
)
1417 _IRQL_requires_same_
1419 (NTAPI FAST_IO_WRITE
)(
1420 _In_
struct _FILE_OBJECT
*FileObject
,
1421 _In_ PLARGE_INTEGER FileOffset
,
1426 _Out_ PIO_STATUS_BLOCK IoStatus
,
1427 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1428 typedef FAST_IO_WRITE
*PFAST_IO_WRITE
;
1430 _Function_class_(FAST_IO_QUERY_BASIC_INFO
)
1431 _IRQL_requires_same_
1433 (NTAPI FAST_IO_QUERY_BASIC_INFO
)(
1434 _In_
struct _FILE_OBJECT
*FileObject
,
1436 _Out_ PFILE_BASIC_INFORMATION Buffer
,
1437 _Out_ PIO_STATUS_BLOCK IoStatus
,
1438 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1439 typedef FAST_IO_QUERY_BASIC_INFO
*PFAST_IO_QUERY_BASIC_INFO
;
1441 _Function_class_(FAST_IO_QUERY_STANDARD_INFO
)
1442 _IRQL_requires_same_
1444 (NTAPI FAST_IO_QUERY_STANDARD_INFO
)(
1445 _In_
struct _FILE_OBJECT
*FileObject
,
1447 _Out_ PFILE_STANDARD_INFORMATION Buffer
,
1448 _Out_ PIO_STATUS_BLOCK IoStatus
,
1449 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1450 typedef FAST_IO_QUERY_STANDARD_INFO
*PFAST_IO_QUERY_STANDARD_INFO
;
1452 _Function_class_(FAST_IO_LOCK
)
1453 _IRQL_requires_same_
1455 (NTAPI FAST_IO_LOCK
)(
1456 _In_
struct _FILE_OBJECT
*FileObject
,
1457 _In_ PLARGE_INTEGER FileOffset
,
1458 _In_ PLARGE_INTEGER Length
,
1459 _In_ PEPROCESS ProcessId
,
1461 _In_ BOOLEAN FailImmediately
,
1462 _In_ BOOLEAN ExclusiveLock
,
1463 _Out_ PIO_STATUS_BLOCK IoStatus
,
1464 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1465 typedef FAST_IO_LOCK
*PFAST_IO_LOCK
;
1467 _Function_class_(FAST_IO_UNLOCK_SINGLE
)
1468 _IRQL_requires_same_
1470 (NTAPI FAST_IO_UNLOCK_SINGLE
)(
1471 _In_
struct _FILE_OBJECT
*FileObject
,
1472 _In_ PLARGE_INTEGER FileOffset
,
1473 _In_ PLARGE_INTEGER Length
,
1474 _In_ PEPROCESS ProcessId
,
1476 _Out_ PIO_STATUS_BLOCK IoStatus
,
1477 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1478 typedef FAST_IO_UNLOCK_SINGLE
*PFAST_IO_UNLOCK_SINGLE
;
1480 _Function_class_(FAST_IO_UNLOCK_ALL
)
1481 _IRQL_requires_same_
1483 (NTAPI FAST_IO_UNLOCK_ALL
)(
1484 _In_
struct _FILE_OBJECT
*FileObject
,
1485 _In_ PEPROCESS ProcessId
,
1486 _Out_ PIO_STATUS_BLOCK IoStatus
,
1487 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1488 typedef FAST_IO_UNLOCK_ALL
*PFAST_IO_UNLOCK_ALL
;
1490 _Function_class_(FAST_IO_UNLOCK_ALL_BY_KEY
)
1491 _IRQL_requires_same_
1493 (NTAPI FAST_IO_UNLOCK_ALL_BY_KEY
)(
1494 _In_
struct _FILE_OBJECT
*FileObject
,
1495 _In_ PVOID ProcessId
,
1497 _Out_ PIO_STATUS_BLOCK IoStatus
,
1498 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1499 typedef FAST_IO_UNLOCK_ALL_BY_KEY
*PFAST_IO_UNLOCK_ALL_BY_KEY
;
1501 _Function_class_(FAST_IO_DEVICE_CONTROL
)
1502 _IRQL_requires_same_
1504 (NTAPI FAST_IO_DEVICE_CONTROL
)(
1505 _In_
struct _FILE_OBJECT
*FileObject
,
1507 _In_opt_ PVOID InputBuffer
,
1508 _In_ ULONG InputBufferLength
,
1509 _Out_opt_ PVOID OutputBuffer
,
1510 _In_ ULONG OutputBufferLength
,
1511 _In_ ULONG IoControlCode
,
1512 _Out_ PIO_STATUS_BLOCK IoStatus
,
1513 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1514 typedef FAST_IO_DEVICE_CONTROL
*PFAST_IO_DEVICE_CONTROL
;
1516 _Function_class_(FAST_IO_ACQUIRE_FILE
)
1517 _IRQL_requires_same_
1519 (NTAPI FAST_IO_ACQUIRE_FILE
)(
1520 _In_
struct _FILE_OBJECT
*FileObject
);
1521 typedef FAST_IO_ACQUIRE_FILE
*PFAST_IO_ACQUIRE_FILE
;
1523 _Function_class_(FAST_IO_RELEASE_FILE
)
1524 _IRQL_requires_same_
1526 (NTAPI FAST_IO_RELEASE_FILE
)(
1527 _In_
struct _FILE_OBJECT
*FileObject
);
1528 typedef FAST_IO_RELEASE_FILE
*PFAST_IO_RELEASE_FILE
;
1530 _Function_class_(FAST_IO_DETACH_DEVICE
)
1531 _IRQL_requires_same_
1533 (NTAPI FAST_IO_DETACH_DEVICE
)(
1534 _In_
struct _DEVICE_OBJECT
*SourceDevice
,
1535 _In_
struct _DEVICE_OBJECT
*TargetDevice
);
1536 typedef FAST_IO_DETACH_DEVICE
*PFAST_IO_DETACH_DEVICE
;
1538 _Function_class_(FAST_IO_QUERY_NETWORK_OPEN_INFO
)
1539 _IRQL_requires_same_
1541 (NTAPI FAST_IO_QUERY_NETWORK_OPEN_INFO
)(
1542 _In_
struct _FILE_OBJECT
*FileObject
,
1544 _Out_
struct _FILE_NETWORK_OPEN_INFORMATION
*Buffer
,
1545 _Out_
struct _IO_STATUS_BLOCK
*IoStatus
,
1546 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1547 typedef FAST_IO_QUERY_NETWORK_OPEN_INFO
*PFAST_IO_QUERY_NETWORK_OPEN_INFO
;
1549 _Function_class_(FAST_IO_ACQUIRE_FOR_MOD_WRITE
)
1550 _IRQL_requires_same_
1552 (NTAPI FAST_IO_ACQUIRE_FOR_MOD_WRITE
)(
1553 _In_
struct _FILE_OBJECT
*FileObject
,
1554 _In_ PLARGE_INTEGER EndingOffset
,
1555 _Out_
struct _ERESOURCE
**ResourceToRelease
,
1556 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1557 typedef FAST_IO_ACQUIRE_FOR_MOD_WRITE
*PFAST_IO_ACQUIRE_FOR_MOD_WRITE
;
1559 _Function_class_(FAST_IO_MDL_READ
)
1560 _IRQL_requires_same_
1562 (NTAPI FAST_IO_MDL_READ
)(
1563 _In_
struct _FILE_OBJECT
*FileObject
,
1564 _In_ PLARGE_INTEGER FileOffset
,
1567 _Out_ PMDL
*MdlChain
,
1568 _Out_ PIO_STATUS_BLOCK IoStatus
,
1569 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1570 typedef FAST_IO_MDL_READ
*PFAST_IO_MDL_READ
;
1572 _Function_class_(FAST_IO_MDL_READ_COMPLETE
)
1573 _IRQL_requires_same_
1575 (NTAPI FAST_IO_MDL_READ_COMPLETE
)(
1576 _In_
struct _FILE_OBJECT
*FileObject
,
1578 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1579 typedef FAST_IO_MDL_READ_COMPLETE
*PFAST_IO_MDL_READ_COMPLETE
;
1581 _Function_class_(FAST_IO_PREPARE_MDL_WRITE
)
1582 _IRQL_requires_same_
1584 (NTAPI FAST_IO_PREPARE_MDL_WRITE
)(
1585 _In_
struct _FILE_OBJECT
*FileObject
,
1586 _In_ PLARGE_INTEGER FileOffset
,
1589 _Out_ PMDL
*MdlChain
,
1590 _Out_ PIO_STATUS_BLOCK IoStatus
,
1591 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1592 typedef FAST_IO_PREPARE_MDL_WRITE
*PFAST_IO_PREPARE_MDL_WRITE
;
1594 _Function_class_(FAST_IO_MDL_WRITE_COMPLETE
)
1595 _IRQL_requires_same_
1597 (NTAPI FAST_IO_MDL_WRITE_COMPLETE
)(
1598 _In_
struct _FILE_OBJECT
*FileObject
,
1599 _In_ PLARGE_INTEGER FileOffset
,
1601 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1602 typedef FAST_IO_MDL_WRITE_COMPLETE
*PFAST_IO_MDL_WRITE_COMPLETE
;
1604 _Function_class_(FAST_IO_READ_COMPRESSED
)
1605 _IRQL_requires_same_
1607 (NTAPI FAST_IO_READ_COMPRESSED
)(
1608 _In_
struct _FILE_OBJECT
*FileObject
,
1609 _In_ PLARGE_INTEGER FileOffset
,
1613 _Out_ PMDL
*MdlChain
,
1614 _Out_ PIO_STATUS_BLOCK IoStatus
,
1615 _Out_
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
1616 _In_ ULONG CompressedDataInfoLength
,
1617 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1618 typedef FAST_IO_READ_COMPRESSED
*PFAST_IO_READ_COMPRESSED
;
1620 _Function_class_(FAST_IO_WRITE_COMPRESSED
)
1621 _IRQL_requires_same_
1623 (NTAPI FAST_IO_WRITE_COMPRESSED
)(
1624 _In_
struct _FILE_OBJECT
*FileObject
,
1625 _In_ PLARGE_INTEGER FileOffset
,
1629 _Out_ PMDL
*MdlChain
,
1630 _Out_ PIO_STATUS_BLOCK IoStatus
,
1631 _In_
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
1632 _In_ ULONG CompressedDataInfoLength
,
1633 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1634 typedef FAST_IO_WRITE_COMPRESSED
*PFAST_IO_WRITE_COMPRESSED
;
1636 _Function_class_(FAST_IO_MDL_READ_COMPLETE_COMPRESSED
)
1637 _IRQL_requires_same_
1639 (NTAPI FAST_IO_MDL_READ_COMPLETE_COMPRESSED
)(
1640 _In_
struct _FILE_OBJECT
*FileObject
,
1642 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1643 typedef FAST_IO_MDL_READ_COMPLETE_COMPRESSED
*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED
;
1645 _Function_class_(FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)
1646 _IRQL_requires_same_
1648 (NTAPI FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)(
1649 _In_
struct _FILE_OBJECT
*FileObject
,
1650 _In_ PLARGE_INTEGER FileOffset
,
1652 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1653 typedef FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
;
1655 _Function_class_(FAST_IO_QUERY_OPEN
)
1656 _IRQL_requires_same_
1658 (NTAPI FAST_IO_QUERY_OPEN
)(
1659 _Inout_
struct _IRP
*Irp
,
1660 _Out_ PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
,
1661 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1662 typedef FAST_IO_QUERY_OPEN
*PFAST_IO_QUERY_OPEN
;
1664 _Function_class_(FAST_IO_RELEASE_FOR_MOD_WRITE
)
1665 _IRQL_requires_same_
1667 (NTAPI FAST_IO_RELEASE_FOR_MOD_WRITE
)(
1668 _In_
struct _FILE_OBJECT
*FileObject
,
1669 _In_
struct _ERESOURCE
*ResourceToRelease
,
1670 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1671 typedef FAST_IO_RELEASE_FOR_MOD_WRITE
*PFAST_IO_RELEASE_FOR_MOD_WRITE
;
1673 _Function_class_(FAST_IO_ACQUIRE_FOR_CCFLUSH
)
1674 _IRQL_requires_same_
1676 (NTAPI FAST_IO_ACQUIRE_FOR_CCFLUSH
)(
1677 _In_
struct _FILE_OBJECT
*FileObject
,
1678 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1679 typedef FAST_IO_ACQUIRE_FOR_CCFLUSH
*PFAST_IO_ACQUIRE_FOR_CCFLUSH
;
1681 _Function_class_(FAST_IO_RELEASE_FOR_CCFLUSH
)
1682 _IRQL_requires_same_
1684 (NTAPI FAST_IO_RELEASE_FOR_CCFLUSH
)(
1685 _In_
struct _FILE_OBJECT
*FileObject
,
1686 _In_
struct _DEVICE_OBJECT
*DeviceObject
);
1687 typedef FAST_IO_RELEASE_FOR_CCFLUSH
*PFAST_IO_RELEASE_FOR_CCFLUSH
;
1689 typedef struct _FAST_IO_DISPATCH
{
1690 ULONG SizeOfFastIoDispatch
;
1691 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible
;
1692 PFAST_IO_READ FastIoRead
;
1693 PFAST_IO_WRITE FastIoWrite
;
1694 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo
;
1695 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo
;
1696 PFAST_IO_LOCK FastIoLock
;
1697 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle
;
1698 PFAST_IO_UNLOCK_ALL FastIoUnlockAll
;
1699 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey
;
1700 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl
;
1701 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection
;
1702 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection
;
1703 PFAST_IO_DETACH_DEVICE FastIoDetachDevice
;
1704 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo
;
1705 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite
;
1706 PFAST_IO_MDL_READ MdlRead
;
1707 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete
;
1708 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite
;
1709 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete
;
1710 PFAST_IO_READ_COMPRESSED FastIoReadCompressed
;
1711 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed
;
1712 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed
;
1713 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed
;
1714 PFAST_IO_QUERY_OPEN FastIoQueryOpen
;
1715 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite
;
1716 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush
;
1717 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush
;
1718 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
1720 typedef struct _SECTION_OBJECT_POINTERS
{
1721 PVOID DataSectionObject
;
1722 PVOID SharedCacheMap
;
1723 PVOID ImageSectionObject
;
1724 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
1726 typedef struct _IO_COMPLETION_CONTEXT
{
1729 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
1731 /* FILE_OBJECT.Flags */
1732 #define FO_FILE_OPEN 0x00000001
1733 #define FO_SYNCHRONOUS_IO 0x00000002
1734 #define FO_ALERTABLE_IO 0x00000004
1735 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
1736 #define FO_WRITE_THROUGH 0x00000010
1737 #define FO_SEQUENTIAL_ONLY 0x00000020
1738 #define FO_CACHE_SUPPORTED 0x00000040
1739 #define FO_NAMED_PIPE 0x00000080
1740 #define FO_STREAM_FILE 0x00000100
1741 #define FO_MAILSLOT 0x00000200
1742 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
1743 #define FO_QUEUE_IRP_TO_THREAD 0x00000400
1744 #define FO_DIRECT_DEVICE_OPEN 0x00000800
1745 #define FO_FILE_MODIFIED 0x00001000
1746 #define FO_FILE_SIZE_CHANGED 0x00002000
1747 #define FO_CLEANUP_COMPLETE 0x00004000
1748 #define FO_TEMPORARY_FILE 0x00008000
1749 #define FO_DELETE_ON_CLOSE 0x00010000
1750 #define FO_OPENED_CASE_SENSITIVE 0x00020000
1751 #define FO_HANDLE_CREATED 0x00040000
1752 #define FO_FILE_FAST_IO_READ 0x00080000
1753 #define FO_RANDOM_ACCESS 0x00100000
1754 #define FO_FILE_OPEN_CANCELLED 0x00200000
1755 #define FO_VOLUME_OPEN 0x00400000
1756 #define FO_REMOTE_ORIGIN 0x01000000
1757 #define FO_DISALLOW_EXCLUSIVE 0x02000000
1758 #define FO_SKIP_COMPLETION_PORT 0x02000000
1759 #define FO_SKIP_SET_EVENT 0x04000000
1760 #define FO_SKIP_SET_FAST_IO 0x08000000
1761 #define FO_FLAGS_VALID_ONLY_DURING_CREATE FO_DISALLOW_EXCLUSIVE
1764 #define VPB_MOUNTED 0x0001
1765 #define VPB_LOCKED 0x0002
1766 #define VPB_PERSISTENT 0x0004
1767 #define VPB_REMOVE_PENDING 0x0008
1768 #define VPB_RAW_MOUNT 0x0010
1769 #define VPB_DIRECT_WRITES_ALLOWED 0x0020
1771 /* IO_STACK_LOCATION.Flags */
1773 #define SL_FORCE_ACCESS_CHECK 0x01
1774 #define SL_OPEN_PAGING_FILE 0x02
1775 #define SL_OPEN_TARGET_DIRECTORY 0x04
1776 #define SL_STOP_ON_SYMLINK 0x08
1777 #define SL_CASE_SENSITIVE 0x80
1779 #define SL_KEY_SPECIFIED 0x01
1780 #define SL_OVERRIDE_VERIFY_VOLUME 0x02
1781 #define SL_WRITE_THROUGH 0x04
1782 #define SL_FT_SEQUENTIAL_WRITE 0x08
1783 #define SL_FORCE_DIRECT_WRITE 0x10
1784 #define SL_REALTIME_STREAM 0x20
1786 #define SL_READ_ACCESS_GRANTED 0x01
1787 #define SL_WRITE_ACCESS_GRANTED 0x04
1789 #define SL_FAIL_IMMEDIATELY 0x01
1790 #define SL_EXCLUSIVE_LOCK 0x02
1792 #define SL_RESTART_SCAN 0x01
1793 #define SL_RETURN_SINGLE_ENTRY 0x02
1794 #define SL_INDEX_SPECIFIED 0x04
1796 #define SL_WATCH_TREE 0x01
1798 #define SL_ALLOW_RAW_MOUNT 0x01
1801 $
if (_WDMDDK_
|| _DEVIOCTL_
)
1802 #define CTL_CODE(DeviceType, Function, Method, Access) \
1803 (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
1805 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
1807 #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
1809 $
endif (_WDMDDK_
|| _DEVIOCTL_
)
1813 #define IRP_NOCACHE 0x00000001
1814 #define IRP_PAGING_IO 0x00000002
1815 #define IRP_MOUNT_COMPLETION 0x00000002
1816 #define IRP_SYNCHRONOUS_API 0x00000004
1817 #define IRP_ASSOCIATED_IRP 0x00000008
1818 #define IRP_BUFFERED_IO 0x00000010
1819 #define IRP_DEALLOCATE_BUFFER 0x00000020
1820 #define IRP_INPUT_OPERATION 0x00000040
1821 #define IRP_SYNCHRONOUS_PAGING_IO 0x00000040
1822 #define IRP_CREATE_OPERATION 0x00000080
1823 #define IRP_READ_OPERATION 0x00000100
1824 #define IRP_WRITE_OPERATION 0x00000200
1825 #define IRP_CLOSE_OPERATION 0x00000400
1826 #define IRP_DEFER_IO_COMPLETION 0x00000800
1827 #define IRP_OB_QUERY_NAME 0x00001000
1828 #define IRP_HOLD_DEVICE_QUEUE 0x00002000
1829 /* The following 2 are missing in latest WDK */
1830 #define IRP_RETRY_IO_COMPLETION 0x00004000
1831 #define IRP_CLASS_CACHE_OPERATION 0x00008000
1833 /* IRP.AllocationFlags */
1834 #define IRP_QUOTA_CHARGED 0x01
1835 #define IRP_ALLOCATED_MUST_SUCCEED 0x02
1836 #define IRP_ALLOCATED_FIXED_SIZE 0x04
1837 #define IRP_LOOKASIDE_ALLOCATION 0x08
1840 ** IRP function codes
1843 #define IRP_MJ_CREATE 0x00
1844 #define IRP_MJ_CREATE_NAMED_PIPE 0x01
1845 #define IRP_MJ_CLOSE 0x02
1846 #define IRP_MJ_READ 0x03
1847 #define IRP_MJ_WRITE 0x04
1848 #define IRP_MJ_QUERY_INFORMATION 0x05
1849 #define IRP_MJ_SET_INFORMATION 0x06
1850 #define IRP_MJ_QUERY_EA 0x07
1851 #define IRP_MJ_SET_EA 0x08
1852 #define IRP_MJ_FLUSH_BUFFERS 0x09
1853 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
1854 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
1855 #define IRP_MJ_DIRECTORY_CONTROL 0x0c
1856 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
1857 #define IRP_MJ_DEVICE_CONTROL 0x0e
1858 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
1859 #define IRP_MJ_SCSI 0x0f
1860 #define IRP_MJ_SHUTDOWN 0x10
1861 #define IRP_MJ_LOCK_CONTROL 0x11
1862 #define IRP_MJ_CLEANUP 0x12
1863 #define IRP_MJ_CREATE_MAILSLOT 0x13
1864 #define IRP_MJ_QUERY_SECURITY 0x14
1865 #define IRP_MJ_SET_SECURITY 0x15
1866 #define IRP_MJ_POWER 0x16
1867 #define IRP_MJ_SYSTEM_CONTROL 0x17
1868 #define IRP_MJ_DEVICE_CHANGE 0x18
1869 #define IRP_MJ_QUERY_QUOTA 0x19
1870 #define IRP_MJ_SET_QUOTA 0x1a
1871 #define IRP_MJ_PNP 0x1b
1872 #define IRP_MJ_PNP_POWER 0x1b
1873 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
1875 #define IRP_MN_SCSI_CLASS 0x01
1877 #define IRP_MN_START_DEVICE 0x00
1878 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
1879 #define IRP_MN_REMOVE_DEVICE 0x02
1880 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
1881 #define IRP_MN_STOP_DEVICE 0x04
1882 #define IRP_MN_QUERY_STOP_DEVICE 0x05
1883 #define IRP_MN_CANCEL_STOP_DEVICE 0x06
1885 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
1886 #define IRP_MN_QUERY_INTERFACE 0x08
1887 #define IRP_MN_QUERY_CAPABILITIES 0x09
1888 #define IRP_MN_QUERY_RESOURCES 0x0A
1889 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
1890 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
1891 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
1893 #define IRP_MN_READ_CONFIG 0x0F
1894 #define IRP_MN_WRITE_CONFIG 0x10
1895 #define IRP_MN_EJECT 0x11
1896 #define IRP_MN_SET_LOCK 0x12
1897 #define IRP_MN_QUERY_ID 0x13
1898 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
1899 #define IRP_MN_QUERY_BUS_INFORMATION 0x15
1900 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
1901 #define IRP_MN_SURPRISE_REMOVAL 0x17
1902 #if (NTDDI_VERSION >= NTDDI_WIN7)
1903 #define IRP_MN_DEVICE_ENUMERATED 0x19
1906 #define IRP_MN_WAIT_WAKE 0x00
1907 #define IRP_MN_POWER_SEQUENCE 0x01
1908 #define IRP_MN_SET_POWER 0x02
1909 #define IRP_MN_QUERY_POWER 0x03
1911 #define IRP_MN_QUERY_ALL_DATA 0x00
1912 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
1913 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
1914 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
1915 #define IRP_MN_ENABLE_EVENTS 0x04
1916 #define IRP_MN_DISABLE_EVENTS 0x05
1917 #define IRP_MN_ENABLE_COLLECTION 0x06
1918 #define IRP_MN_DISABLE_COLLECTION 0x07
1919 #define IRP_MN_REGINFO 0x08
1920 #define IRP_MN_EXECUTE_METHOD 0x09
1922 #define IRP_MN_REGINFO_EX 0x0b
1924 typedef struct _FILE_OBJECT
{
1927 PDEVICE_OBJECT DeviceObject
;
1931 PSECTION_OBJECT_POINTERS SectionObjectPointer
;
1932 PVOID PrivateCacheMap
;
1933 NTSTATUS FinalStatus
;
1934 struct _FILE_OBJECT
*RelatedFileObject
;
1935 BOOLEAN LockOperation
;
1936 BOOLEAN DeletePending
;
1938 BOOLEAN WriteAccess
;
1939 BOOLEAN DeleteAccess
;
1941 BOOLEAN SharedWrite
;
1942 BOOLEAN SharedDelete
;
1944 UNICODE_STRING FileName
;
1945 LARGE_INTEGER CurrentByteOffset
;
1946 volatile ULONG Waiters
;
1947 volatile ULONG Busy
;
1951 volatile PIO_COMPLETION_CONTEXT CompletionContext
;
1952 KSPIN_LOCK IrpListLock
;
1954 volatile PVOID FileObjectExtension
;
1955 } FILE_OBJECT
, *PFILE_OBJECT
;
1957 typedef struct _IO_ERROR_LOG_PACKET
{
1958 UCHAR MajorFunctionCode
;
1960 USHORT DumpDataSize
;
1961 USHORT NumberOfStrings
;
1962 USHORT StringOffset
;
1963 USHORT EventCategory
;
1965 ULONG UniqueErrorValue
;
1966 NTSTATUS FinalStatus
;
1967 ULONG SequenceNumber
;
1968 ULONG IoControlCode
;
1969 LARGE_INTEGER DeviceOffset
;
1971 } IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
1973 typedef struct _IO_ERROR_LOG_MESSAGE
{
1976 USHORT DriverNameLength
;
1977 LARGE_INTEGER TimeStamp
;
1978 ULONG DriverNameOffset
;
1979 IO_ERROR_LOG_PACKET EntryData
;
1980 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
1982 /* See ndk/lpctypes.h */
1984 #define PORT_MAXIMUM_MESSAGE_LENGTH 512
1986 #define PORT_MAXIMUM_MESSAGE_LENGTH 256
1989 #define ERROR_LOG_LIMIT_SIZE 240
1990 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
1991 sizeof(IO_ERROR_LOG_PACKET) + \
1992 (sizeof(WCHAR) * 40))
1993 #define ERROR_LOG_MESSAGE_LIMIT_SIZE \
1994 (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1995 #define IO_ERROR_LOG_MESSAGE_LENGTH \
1996 ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
1997 ERROR_LOG_MESSAGE_LIMIT_SIZE : \
1998 PORT_MAXIMUM_MESSAGE_LENGTH)
1999 #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
2000 IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
2002 typedef enum _DMA_WIDTH
{
2007 } DMA_WIDTH
, *PDMA_WIDTH
;
2009 typedef enum _DMA_SPEED
{
2016 } DMA_SPEED
, *PDMA_SPEED
;
2018 /* DEVICE_DESCRIPTION.Version */
2020 #define DEVICE_DESCRIPTION_VERSION 0x0000
2021 #define DEVICE_DESCRIPTION_VERSION1 0x0001
2022 #define DEVICE_DESCRIPTION_VERSION2 0x0002
2024 typedef struct _DEVICE_DESCRIPTION
{
2027 BOOLEAN ScatterGather
;
2029 BOOLEAN AutoInitialize
;
2030 BOOLEAN Dma32BitAddresses
;
2031 BOOLEAN IgnoreCount
;
2033 BOOLEAN Dma64BitAddresses
;
2036 INTERFACE_TYPE InterfaceType
;
2039 ULONG MaximumLength
;
2041 } DEVICE_DESCRIPTION
, *PDEVICE_DESCRIPTION
;
2043 typedef enum _DEVICE_RELATION_TYPE
{
2048 TargetDeviceRelation
,
2051 } DEVICE_RELATION_TYPE
, *PDEVICE_RELATION_TYPE
;
2053 typedef struct _DEVICE_RELATIONS
{
2055 PDEVICE_OBJECT Objects
[1];
2056 } DEVICE_RELATIONS
, *PDEVICE_RELATIONS
;
2058 typedef struct _DEVOBJ_EXTENSION
{
2061 PDEVICE_OBJECT DeviceObject
;
2062 } DEVOBJ_EXTENSION
, *PDEVOBJ_EXTENSION
;
2064 typedef struct _SCATTER_GATHER_ELEMENT
{
2065 PHYSICAL_ADDRESS Address
;
2068 } SCATTER_GATHER_ELEMENT
, *PSCATTER_GATHER_ELEMENT
;
2070 #if defined(_MSC_EXTENSIONS) || defined(__GNUC__)
2072 #if defined(_MSC_VER)
2073 #if _MSC_VER >= 1200
2074 #pragma warning(push)
2076 #pragma warning(disable:4200)
2077 #endif /* _MSC_VER */
2079 typedef struct _SCATTER_GATHER_LIST
{
2080 ULONG NumberOfElements
;
2082 SCATTER_GATHER_ELEMENT Elements
[1];
2083 } SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
2085 #if defined(_MSC_VER)
2086 #if _MSC_VER >= 1200
2087 #pragma warning(pop)
2089 #pragma warning(default:4200)
2091 #endif /* _MSC_VER */
2093 #else /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
2095 struct _SCATTER_GATHER_LIST
;
2096 typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
2098 #endif /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
2100 _Function_class_(DRIVER_ADD_DEVICE
)
2101 _IRQL_requires_(PASSIVE_LEVEL
)
2102 _IRQL_requires_same_
2103 _When_(return>=0, _Kernel_clear_do_init_(__yes
))
2105 (NTAPI DRIVER_ADD_DEVICE
)(
2106 _In_
struct _DRIVER_OBJECT
*DriverObject
,
2107 _In_
struct _DEVICE_OBJECT
*PhysicalDeviceObject
);
2108 typedef DRIVER_ADD_DEVICE
*PDRIVER_ADD_DEVICE
;
2110 typedef struct _DRIVER_EXTENSION
{
2111 struct _DRIVER_OBJECT
*DriverObject
;
2112 PDRIVER_ADD_DEVICE AddDevice
;
2114 UNICODE_STRING ServiceKeyName
;
2115 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
2117 #define DRVO_UNLOAD_INVOKED 0x00000001
2118 #define DRVO_LEGACY_DRIVER 0x00000002
2119 #define DRVO_BUILTIN_DRIVER 0x00000004
2121 _Function_class_(DRIVER_INITIALIZE
)
2122 _IRQL_requires_same_
2124 (NTAPI DRIVER_INITIALIZE
)(
2125 _In_
struct _DRIVER_OBJECT
*DriverObject
,
2126 _In_ PUNICODE_STRING RegistryPath
);
2127 typedef DRIVER_INITIALIZE
*PDRIVER_INITIALIZE
;
2129 _Function_class_(DRIVER_STARTIO
)
2130 _IRQL_always_function_min_(DISPATCH_LEVEL
)
2131 _IRQL_requires_(DISPATCH_LEVEL
)
2132 _IRQL_requires_same_
2134 (NTAPI DRIVER_STARTIO
)(
2135 _Inout_
struct _DEVICE_OBJECT
*DeviceObject
,
2136 _Inout_
struct _IRP
*Irp
);
2137 typedef DRIVER_STARTIO
*PDRIVER_STARTIO
;
2139 _Function_class_(DRIVER_UNLOAD
)
2140 _IRQL_requires_(PASSIVE_LEVEL
)
2141 _IRQL_requires_same_
2143 (NTAPI DRIVER_UNLOAD
)(
2144 _In_
struct _DRIVER_OBJECT
*DriverObject
);
2145 typedef DRIVER_UNLOAD
*PDRIVER_UNLOAD
;
2147 _Function_class_(DRIVER_DISPATCH
)
2148 _IRQL_requires_max_(DISPATCH_LEVEL
)
2149 _IRQL_requires_same_
2151 (NTAPI DRIVER_DISPATCH
)(
2152 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
2153 _Inout_
struct _IRP
*Irp
);
2154 typedef DRIVER_DISPATCH
*PDRIVER_DISPATCH
;
2155 typedef DRIVER_DISPATCH DRIVER_DISPATCH_RAISED
;
2157 _Function_class_(DRIVER_DISPATCH
)
2158 _IRQL_requires_(PASSIVE_LEVEL
)
2159 _IRQL_requires_same_
2161 (NTAPI DRIVER_DISPATCH_PAGED
)(
2162 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
2163 _Inout_
struct _IRP
*Irp
);
2164 typedef DRIVER_DISPATCH_PAGED
*PDRIVER_DISPATCH_PAGED
;
2166 typedef struct _DRIVER_OBJECT
{
2169 PDEVICE_OBJECT DeviceObject
;
2173 PVOID DriverSection
;
2174 PDRIVER_EXTENSION DriverExtension
;
2175 UNICODE_STRING DriverName
;
2176 PUNICODE_STRING HardwareDatabase
;
2177 struct _FAST_IO_DISPATCH
*FastIoDispatch
;
2178 PDRIVER_INITIALIZE DriverInit
;
2179 PDRIVER_STARTIO DriverStartIo
;
2180 PDRIVER_UNLOAD DriverUnload
;
2181 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
2182 } DRIVER_OBJECT
, *PDRIVER_OBJECT
;
2184 typedef struct _DMA_ADAPTER
{
2187 struct _DMA_OPERATIONS
* DmaOperations
;
2188 } DMA_ADAPTER
, *PDMA_ADAPTER
;
2191 (NTAPI
*PPUT_DMA_ADAPTER
)(
2192 PDMA_ADAPTER DmaAdapter
);
2195 (NTAPI
*PALLOCATE_COMMON_BUFFER
)(
2196 _In_ PDMA_ADAPTER DmaAdapter
,
2198 _Out_ PPHYSICAL_ADDRESS LogicalAddress
,
2199 _In_ BOOLEAN CacheEnabled
);
2202 (NTAPI
*PFREE_COMMON_BUFFER
)(
2203 _In_ PDMA_ADAPTER DmaAdapter
,
2205 _In_ PHYSICAL_ADDRESS LogicalAddress
,
2206 _In_ PVOID VirtualAddress
,
2207 _In_ BOOLEAN CacheEnabled
);
2210 (NTAPI
*PALLOCATE_ADAPTER_CHANNEL
)(
2211 _In_ PDMA_ADAPTER DmaAdapter
,
2212 _In_ PDEVICE_OBJECT DeviceObject
,
2213 _In_ ULONG NumberOfMapRegisters
,
2214 _In_ PDRIVER_CONTROL ExecutionRoutine
,
2215 _In_ PVOID Context
);
2218 (NTAPI
*PFLUSH_ADAPTER_BUFFERS
)(
2219 _In_ PDMA_ADAPTER DmaAdapter
,
2221 _In_ PVOID MapRegisterBase
,
2222 _In_ PVOID CurrentVa
,
2224 _In_ BOOLEAN WriteToDevice
);
2227 (NTAPI
*PFREE_ADAPTER_CHANNEL
)(
2228 _In_ PDMA_ADAPTER DmaAdapter
);
2231 (NTAPI
*PFREE_MAP_REGISTERS
)(
2232 _In_ PDMA_ADAPTER DmaAdapter
,
2233 PVOID MapRegisterBase
,
2234 ULONG NumberOfMapRegisters
);
2236 typedef PHYSICAL_ADDRESS
2237 (NTAPI
*PMAP_TRANSFER
)(
2238 _In_ PDMA_ADAPTER DmaAdapter
,
2240 _In_ PVOID MapRegisterBase
,
2241 _In_ PVOID CurrentVa
,
2242 _Inout_ PULONG Length
,
2243 _In_ BOOLEAN WriteToDevice
);
2246 (NTAPI
*PGET_DMA_ALIGNMENT
)(
2247 _In_ PDMA_ADAPTER DmaAdapter
);
2250 (NTAPI
*PREAD_DMA_COUNTER
)(
2251 _In_ PDMA_ADAPTER DmaAdapter
);
2253 _Function_class_(DRIVER_LIST_CONTROL
)
2254 _IRQL_requires_same_
2256 (NTAPI DRIVER_LIST_CONTROL
)(
2257 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
2258 _In_
struct _IRP
*Irp
,
2259 _In_
struct _SCATTER_GATHER_LIST
*ScatterGather
,
2260 _In_ PVOID Context
);
2261 typedef DRIVER_LIST_CONTROL
*PDRIVER_LIST_CONTROL
;
2264 (NTAPI
*PGET_SCATTER_GATHER_LIST
)(
2265 _In_ PDMA_ADAPTER DmaAdapter
,
2266 _In_ PDEVICE_OBJECT DeviceObject
,
2268 _In_ PVOID CurrentVa
,
2270 _In_ PDRIVER_LIST_CONTROL ExecutionRoutine
,
2272 _In_ BOOLEAN WriteToDevice
);
2275 (NTAPI
*PPUT_SCATTER_GATHER_LIST
)(
2276 _In_ PDMA_ADAPTER DmaAdapter
,
2277 _In_ PSCATTER_GATHER_LIST ScatterGather
,
2278 _In_ BOOLEAN WriteToDevice
);
2281 (NTAPI
*PCALCULATE_SCATTER_GATHER_LIST_SIZE
)(
2282 _In_ PDMA_ADAPTER DmaAdapter
,
2283 _In_ PMDL Mdl OPTIONAL
,
2284 _In_ PVOID CurrentVa
,
2286 _Out_ PULONG ScatterGatherListSize
,
2287 _Out_ OPTIONAL PULONG pNumberOfMapRegisters
);
2290 (NTAPI
*PBUILD_SCATTER_GATHER_LIST
)(
2291 _In_ PDMA_ADAPTER DmaAdapter
,
2292 _In_ PDEVICE_OBJECT DeviceObject
,
2294 _In_ PVOID CurrentVa
,
2296 _In_ PDRIVER_LIST_CONTROL ExecutionRoutine
,
2298 _In_ BOOLEAN WriteToDevice
,
2299 _In_ PVOID ScatterGatherBuffer
,
2300 _In_ ULONG ScatterGatherLength
);
2303 (NTAPI
*PBUILD_MDL_FROM_SCATTER_GATHER_LIST
)(
2304 _In_ PDMA_ADAPTER DmaAdapter
,
2305 _In_ PSCATTER_GATHER_LIST ScatterGather
,
2306 _In_ PMDL OriginalMdl
,
2307 _Out_ PMDL
*TargetMdl
);
2309 typedef struct _DMA_OPERATIONS
{
2311 PPUT_DMA_ADAPTER PutDmaAdapter
;
2312 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer
;
2313 PFREE_COMMON_BUFFER FreeCommonBuffer
;
2314 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
2315 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
2316 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
2317 PFREE_MAP_REGISTERS FreeMapRegisters
;
2318 PMAP_TRANSFER MapTransfer
;
2319 PGET_DMA_ALIGNMENT GetDmaAlignment
;
2320 PREAD_DMA_COUNTER ReadDmaCounter
;
2321 PGET_SCATTER_GATHER_LIST GetScatterGatherList
;
2322 PPUT_SCATTER_GATHER_LIST PutScatterGatherList
;
2323 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList
;
2324 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList
;
2325 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList
;
2326 } DMA_OPERATIONS
, *PDMA_OPERATIONS
;
2328 typedef struct _IO_RESOURCE_DESCRIPTOR
{
2331 UCHAR ShareDisposition
;
2339 PHYSICAL_ADDRESS MinimumAddress
;
2340 PHYSICAL_ADDRESS MaximumAddress
;
2345 PHYSICAL_ADDRESS MinimumAddress
;
2346 PHYSICAL_ADDRESS MaximumAddress
;
2349 ULONG MinimumVector
;
2350 ULONG MaximumVector
;
2353 ULONG MinimumChannel
;
2354 ULONG MaximumChannel
;
2359 PHYSICAL_ADDRESS MinimumAddress
;
2360 PHYSICAL_ADDRESS MaximumAddress
;
2377 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
2379 typedef struct _IO_RESOURCE_LIST
{
2383 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
2384 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
2386 typedef struct _IO_RESOURCE_REQUIREMENTS_LIST
{
2388 INTERFACE_TYPE InterfaceType
;
2392 ULONG AlternativeLists
;
2393 IO_RESOURCE_LIST List
[1];
2394 } IO_RESOURCE_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
2396 _Function_class_(DRIVER_CANCEL
)
2397 _Requires_lock_held_(_Global_cancel_spin_lock_
)
2398 _Releases_lock_(_Global_cancel_spin_lock_
)
2399 _IRQL_requires_min_(DISPATCH_LEVEL
)
2400 _IRQL_requires_(DISPATCH_LEVEL
)
2402 (NTAPI DRIVER_CANCEL
)(
2403 _Inout_
struct _DEVICE_OBJECT
*DeviceObject
,
2404 _Inout_ _IRQL_uses_cancel_
struct _IRP
*Irp
);
2405 typedef DRIVER_CANCEL
*PDRIVER_CANCEL
;
2407 typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT
) _IRP
{
2410 struct _MDL
*MdlAddress
;
2413 struct _IRP
*MasterIrp
;
2414 volatile LONG IrpCount
;
2417 LIST_ENTRY ThreadListEntry
;
2418 IO_STATUS_BLOCK IoStatus
;
2419 KPROCESSOR_MODE RequestorMode
;
2420 BOOLEAN PendingReturned
;
2422 CHAR CurrentLocation
;
2425 CCHAR ApcEnvironment
;
2426 UCHAR AllocationFlags
;
2427 PIO_STATUS_BLOCK UserIosb
;
2431 _ANONYMOUS_UNION
union {
2432 PIO_APC_ROUTINE UserApcRoutine
;
2433 PVOID IssuingProcess
;
2435 PVOID UserApcContext
;
2436 } AsynchronousParameters
;
2437 LARGE_INTEGER AllocationSize
;
2439 volatile PDRIVER_CANCEL CancelRoutine
;
2443 _ANONYMOUS_UNION
union {
2444 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
2445 _ANONYMOUS_STRUCT
struct {
2446 PVOID DriverContext
[4];
2450 PCHAR AuxiliaryBuffer
;
2451 _ANONYMOUS_STRUCT
struct {
2452 LIST_ENTRY ListEntry
;
2453 _ANONYMOUS_UNION
union {
2454 struct _IO_STACK_LOCATION
*CurrentStackLocation
;
2458 struct _FILE_OBJECT
*OriginalFileObject
;
2461 PVOID CompletionKey
;
2465 typedef enum _IO_PAGING_PRIORITY
{
2466 IoPagingPriorityInvalid
,
2467 IoPagingPriorityNormal
,
2468 IoPagingPriorityHigh
,
2469 IoPagingPriorityReserved1
,
2470 IoPagingPriorityReserved2
2471 } IO_PAGING_PRIORITY
;
2473 _Function_class_(IO_COMPLETION_ROUTINE
)
2474 _IRQL_requires_same_
2476 (NTAPI IO_COMPLETION_ROUTINE
)(
2477 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
2478 _In_
struct _IRP
*Irp
,
2479 _In_opt_ PVOID Context
);
2480 typedef IO_COMPLETION_ROUTINE
*PIO_COMPLETION_ROUTINE
;
2482 _Function_class_(IO_DPC_ROUTINE
)
2483 _IRQL_always_function_min_(DISPATCH_LEVEL
)
2484 _IRQL_requires_(DISPATCH_LEVEL
)
2485 _IRQL_requires_same_
2487 (NTAPI IO_DPC_ROUTINE
)(
2488 _In_
struct _KDPC
*Dpc
,
2489 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
2490 _Inout_
struct _IRP
*Irp
,
2491 _In_opt_ PVOID Context
);
2492 typedef IO_DPC_ROUTINE
*PIO_DPC_ROUTINE
;
2495 (NTAPI
*PMM_DLL_INITIALIZE
)(
2496 _In_ PUNICODE_STRING RegistryPath
);
2499 (NTAPI
*PMM_DLL_UNLOAD
)(
2502 _Function_class_(IO_TIMER_ROUTINE
)
2503 _IRQL_requires_same_
2505 (NTAPI IO_TIMER_ROUTINE
)(
2506 _In_
struct _DEVICE_OBJECT
*DeviceObject
,
2507 _In_opt_ PVOID Context
);
2508 typedef IO_TIMER_ROUTINE
*PIO_TIMER_ROUTINE
;
2510 typedef struct _IO_SECURITY_CONTEXT
{
2511 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
2512 PACCESS_STATE AccessState
;
2513 ACCESS_MASK DesiredAccess
;
2514 ULONG FullCreateOptions
;
2515 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
2519 typedef struct _IO_CSQ_IRP_CONTEXT
{
2522 struct _IO_CSQ
*Csq
;
2523 } IO_CSQ_IRP_CONTEXT
, *PIO_CSQ_IRP_CONTEXT
;
2526 (NTAPI IO_CSQ_INSERT_IRP
)(
2527 _In_
struct _IO_CSQ
*Csq
,
2529 typedef IO_CSQ_INSERT_IRP
*PIO_CSQ_INSERT_IRP
;
2532 (NTAPI IO_CSQ_INSERT_IRP_EX
)(
2533 _In_
struct _IO_CSQ
*Csq
,
2535 _In_ PVOID InsertContext
);
2536 typedef IO_CSQ_INSERT_IRP_EX
*PIO_CSQ_INSERT_IRP_EX
;
2539 (NTAPI IO_CSQ_REMOVE_IRP
)(
2540 _In_
struct _IO_CSQ
*Csq
,
2542 typedef IO_CSQ_REMOVE_IRP
*PIO_CSQ_REMOVE_IRP
;
2545 (NTAPI IO_CSQ_PEEK_NEXT_IRP
)(
2546 _In_
struct _IO_CSQ
*Csq
,
2548 _In_ PVOID PeekContext
);
2549 typedef IO_CSQ_PEEK_NEXT_IRP
*PIO_CSQ_PEEK_NEXT_IRP
;
2552 (NTAPI IO_CSQ_ACQUIRE_LOCK
)(
2553 _In_
struct _IO_CSQ
*Csq
,
2555 typedef IO_CSQ_ACQUIRE_LOCK
*PIO_CSQ_ACQUIRE_LOCK
;
2558 (NTAPI IO_CSQ_RELEASE_LOCK
)(
2559 _In_
struct _IO_CSQ
*Csq
,
2561 typedef IO_CSQ_RELEASE_LOCK
*PIO_CSQ_RELEASE_LOCK
;
2564 (NTAPI IO_CSQ_COMPLETE_CANCELED_IRP
)(
2565 _In_
struct _IO_CSQ
*Csq
,
2567 typedef IO_CSQ_COMPLETE_CANCELED_IRP
*PIO_CSQ_COMPLETE_CANCELED_IRP
;
2569 typedef struct _IO_CSQ
{
2571 PIO_CSQ_INSERT_IRP CsqInsertIrp
;
2572 PIO_CSQ_REMOVE_IRP CsqRemoveIrp
;
2573 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
;
2574 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
;
2575 PIO_CSQ_RELEASE_LOCK CsqReleaseLock
;
2576 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
;
2577 PVOID ReservePointer
;
2580 typedef enum _BUS_QUERY_ID_TYPE
{
2582 BusQueryHardwareIDs
,
2583 BusQueryCompatibleIDs
,
2585 BusQueryDeviceSerialNumber
2586 } BUS_QUERY_ID_TYPE
, *PBUS_QUERY_ID_TYPE
;
2588 typedef enum _DEVICE_TEXT_TYPE
{
2589 DeviceTextDescription
,
2590 DeviceTextLocationInformation
2591 } DEVICE_TEXT_TYPE
, *PDEVICE_TEXT_TYPE
;
2594 (NTAPI
*PGPE_SERVICE_ROUTINE
)(
2598 _IRQL_requires_max_(DISPATCH_LEVEL
)
2599 _Must_inspect_result_
2601 (NTAPI
*PGPE_CONNECT_VECTOR
)(
2606 PGPE_SERVICE_ROUTINE
,
2610 _IRQL_requires_max_(DISPATCH_LEVEL
)
2611 _Must_inspect_result_
2613 (NTAPI
*PGPE_DISCONNECT_VECTOR
)(
2616 _IRQL_requires_max_(DISPATCH_LEVEL
)
2617 _Must_inspect_result_
2619 (NTAPI
*PGPE_ENABLE_EVENT
)(
2623 _IRQL_requires_max_(DISPATCH_LEVEL
)
2624 _Must_inspect_result_
2626 (NTAPI
*PGPE_DISABLE_EVENT
)(
2630 _IRQL_requires_max_(DISPATCH_LEVEL
)
2631 _Must_inspect_result_
2633 (NTAPI
*PGPE_CLEAR_STATUS
)(
2638 (NTAPI
*PDEVICE_NOTIFY_CALLBACK
)(
2642 _IRQL_requires_max_(DISPATCH_LEVEL
)
2643 _Must_inspect_result_
2645 (NTAPI
*PREGISTER_FOR_DEVICE_NOTIFICATIONS
)(
2647 PDEVICE_NOTIFY_CALLBACK
,
2650 _IRQL_requires_max_(DISPATCH_LEVEL
)
2652 (NTAPI
*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS
)(
2654 PDEVICE_NOTIFY_CALLBACK
);
2656 typedef struct _ACPI_INTERFACE_STANDARD
{
2660 PINTERFACE_REFERENCE InterfaceReference
;
2661 PINTERFACE_DEREFERENCE InterfaceDereference
;
2662 PGPE_CONNECT_VECTOR GpeConnectVector
;
2663 PGPE_DISCONNECT_VECTOR GpeDisconnectVector
;
2664 PGPE_ENABLE_EVENT GpeEnableEvent
;
2665 PGPE_DISABLE_EVENT GpeDisableEvent
;
2666 PGPE_CLEAR_STATUS GpeClearStatus
;
2667 PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications
;
2668 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications
;
2669 } ACPI_INTERFACE_STANDARD
, *PACPI_INTERFACE_STANDARD
;
2672 (NTAPI
*PGPE_SERVICE_ROUTINE2
)(
2673 PVOID ObjectContext
,
2674 PVOID ServiceContext
);
2676 _IRQL_requires_max_(DISPATCH_LEVEL
)
2677 _Must_inspect_result_
2679 (NTAPI
*PGPE_CONNECT_VECTOR2
)(
2682 KINTERRUPT_MODE Mode
,
2684 PGPE_SERVICE_ROUTINE ServiceRoutine
,
2685 PVOID ServiceContext
,
2686 PVOID
*ObjectContext
);
2688 _IRQL_requires_max_(DISPATCH_LEVEL
)
2689 _Must_inspect_result_
2691 (NTAPI
*PGPE_DISCONNECT_VECTOR2
)(
2693 PVOID ObjectContext
);
2695 _IRQL_requires_max_(DISPATCH_LEVEL
)
2696 _Must_inspect_result_
2698 (NTAPI
*PGPE_ENABLE_EVENT2
)(
2700 PVOID ObjectContext
);
2702 _IRQL_requires_max_(DISPATCH_LEVEL
)
2703 _Must_inspect_result_
2705 (NTAPI
*PGPE_DISABLE_EVENT2
)(
2707 PVOID ObjectContext
);
2709 _IRQL_requires_max_(DISPATCH_LEVEL
)
2710 _Must_inspect_result_
2712 (NTAPI
*PGPE_CLEAR_STATUS2
)(
2714 PVOID ObjectContext
);
2716 _IRQL_requires_max_(DISPATCH_LEVEL
)
2718 (NTAPI
*PDEVICE_NOTIFY_CALLBACK2
)(
2719 PVOID NotificationContext
,
2722 _IRQL_requires_max_(DISPATCH_LEVEL
)
2723 _Must_inspect_result_
2725 (NTAPI
*PREGISTER_FOR_DEVICE_NOTIFICATIONS2
)(
2727 PDEVICE_NOTIFY_CALLBACK2 NotificationHandler
,
2728 PVOID NotificationContext
);
2730 _IRQL_requires_max_(DISPATCH_LEVEL
)
2732 (NTAPI
*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2
)(
2735 typedef struct _ACPI_INTERFACE_STANDARD2
{
2739 PINTERFACE_REFERENCE InterfaceReference
;
2740 PINTERFACE_DEREFERENCE InterfaceDereference
;
2741 PGPE_CONNECT_VECTOR2 GpeConnectVector
;
2742 PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector
;
2743 PGPE_ENABLE_EVENT2 GpeEnableEvent
;
2744 PGPE_DISABLE_EVENT2 GpeDisableEvent
;
2745 PGPE_CLEAR_STATUS2 GpeClearStatus
;
2746 PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications
;
2747 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications
;
2748 } ACPI_INTERFACE_STANDARD2
, *PACPI_INTERFACE_STANDARD2
;
2750 #if !defined(_AMD64_) && !defined(_ARM_)
2751 #include <pshpack4.h>
2754 typedef struct _IO_STACK_LOCATION
{
2755 UCHAR MajorFunction
;
2756 UCHAR MinorFunction
;
2761 PIO_SECURITY_CONTEXT SecurityContext
;
2763 USHORT POINTER_ALIGNMENT FileAttributes
;
2765 ULONG POINTER_ALIGNMENT EaLength
;
2768 struct _IO_SECURITY_CONTEXT
*SecurityContext
;
2770 USHORT POINTER_ALIGNMENT Reserved
;
2772 struct _NAMED_PIPE_CREATE_PARAMETERS
*Parameters
;
2775 PIO_SECURITY_CONTEXT SecurityContext
;
2777 USHORT POINTER_ALIGNMENT Reserved
;
2779 struct _MAILSLOT_CREATE_PARAMETERS
*Parameters
;
2783 ULONG POINTER_ALIGNMENT Key
;
2784 LARGE_INTEGER ByteOffset
;
2788 ULONG POINTER_ALIGNMENT Key
;
2789 LARGE_INTEGER ByteOffset
;
2793 PUNICODE_STRING FileName
;
2794 FILE_INFORMATION_CLASS FileInformationClass
;
2795 ULONG POINTER_ALIGNMENT FileIndex
;
2799 ULONG POINTER_ALIGNMENT CompletionFilter
;
2803 ULONG POINTER_ALIGNMENT CompletionFilter
;
2804 DIRECTORY_NOTIFY_INFORMATION_CLASS POINTER_ALIGNMENT DirectoryNotifyInformationClass
;
2805 } NotifyDirectoryEx
;
2808 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
2812 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
2813 PFILE_OBJECT FileObject
;
2814 _ANONYMOUS_UNION
union {
2815 _ANONYMOUS_STRUCT
struct {
2816 BOOLEAN ReplaceIfExists
;
2817 BOOLEAN AdvanceOnly
;
2820 HANDLE DeleteHandle
;
2827 ULONG POINTER_ALIGNMENT EaIndex
;
2834 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
2838 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
2841 ULONG OutputBufferLength
;
2842 ULONG POINTER_ALIGNMENT InputBufferLength
;
2843 ULONG POINTER_ALIGNMENT FsControlCode
;
2844 PVOID Type3InputBuffer
;
2845 } FileSystemControl
;
2847 PLARGE_INTEGER Length
;
2848 ULONG POINTER_ALIGNMENT Key
;
2849 LARGE_INTEGER ByteOffset
;
2852 ULONG OutputBufferLength
;
2853 ULONG POINTER_ALIGNMENT InputBufferLength
;
2854 ULONG POINTER_ALIGNMENT IoControlCode
;
2855 PVOID Type3InputBuffer
;
2858 SECURITY_INFORMATION SecurityInformation
;
2859 ULONG POINTER_ALIGNMENT Length
;
2862 SECURITY_INFORMATION SecurityInformation
;
2863 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2867 PDEVICE_OBJECT DeviceObject
;
2871 PDEVICE_OBJECT DeviceObject
;
2874 struct _SCSI_REQUEST_BLOCK
*Srb
;
2879 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
2880 ULONG SidListLength
;
2886 DEVICE_RELATION_TYPE Type
;
2887 } QueryDeviceRelations
;
2889 CONST GUID
*InterfaceType
;
2892 PINTERFACE Interface
;
2893 PVOID InterfaceSpecificData
;
2896 PDEVICE_CAPABILITIES Capabilities
;
2897 } DeviceCapabilities
;
2899 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
2900 } FilterResourceRequirements
;
2905 ULONG POINTER_ALIGNMENT Length
;
2911 BUS_QUERY_ID_TYPE IdType
;
2914 DEVICE_TEXT_TYPE DeviceTextType
;
2915 LCID POINTER_ALIGNMENT LocaleId
;
2919 BOOLEAN Reserved
[3];
2920 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type
;
2921 } UsageNotification
;
2923 SYSTEM_POWER_STATE PowerState
;
2926 PPOWER_SEQUENCE PowerSequence
;
2930 ULONG SystemContext
;
2931 #if (NTDDI_VERSION >= NTDDI_VISTA)
2932 SYSTEM_POWER_STATE_CONTEXT SystemPowerStateContext
;
2933 #endif // (NTDDI_VERSION >= NTDDI_VISTA)
2935 POWER_STATE_TYPE POINTER_ALIGNMENT Type
;
2936 POWER_STATE POINTER_ALIGNMENT State
;
2937 POWER_ACTION POINTER_ALIGNMENT ShutdownType
;
2940 PCM_RESOURCE_LIST AllocatedResources
;
2941 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
2944 ULONG_PTR ProviderId
;
2956 PDEVICE_OBJECT DeviceObject
;
2957 PFILE_OBJECT FileObject
;
2958 PIO_COMPLETION_ROUTINE CompletionRoutine
;
2960 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
2962 #if !defined(_AMD64_) && !defined(_ARM_)
2963 #include "poppack.h"
2967 /* IO_STACK_LOCATION.Control */
2969 #define SL_PENDING_RETURNED 0x01
2970 #define SL_ERROR_RETURNED 0x02
2971 #define SL_INVOKE_ON_CANCEL 0x20
2972 #define SL_INVOKE_ON_SUCCESS 0x40
2973 #define SL_INVOKE_ON_ERROR 0x80
2976 $
if (_WDMDDK_
|| _DEVIOCTL_
)
2977 #define METHOD_BUFFERED 0
2978 #define METHOD_IN_DIRECT 1
2979 #define METHOD_OUT_DIRECT 2
2980 #define METHOD_NEITHER 3
2982 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
2983 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
2985 $
endif (_WDMDDK_
|| _DEVIOCTL_
)
2987 #define FILE_SUPERSEDED 0x00000000
2988 #define FILE_OPENED 0x00000001
2989 #define FILE_CREATED 0x00000002
2990 #define FILE_OVERWRITTEN 0x00000003
2991 #define FILE_EXISTS 0x00000004
2992 #define FILE_DOES_NOT_EXIST 0x00000005
2994 #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
2995 #define FILE_WRITE_TO_END_OF_FILE 0xffffffff
2997 /* also in winnt.h */
2998 #define FILE_LIST_DIRECTORY 0x00000001
2999 #define FILE_READ_DATA 0x00000001
3000 #define FILE_ADD_FILE 0x00000002
3001 #define FILE_WRITE_DATA 0x00000002
3002 #define FILE_ADD_SUBDIRECTORY 0x00000004
3003 #define FILE_APPEND_DATA 0x00000004
3004 #define FILE_CREATE_PIPE_INSTANCE 0x00000004
3005 #define FILE_READ_EA 0x00000008
3006 #define FILE_WRITE_EA 0x00000010
3007 #define FILE_EXECUTE 0x00000020
3008 #define FILE_TRAVERSE 0x00000020
3009 #define FILE_DELETE_CHILD 0x00000040
3010 #define FILE_READ_ATTRIBUTES 0x00000080
3011 #define FILE_WRITE_ATTRIBUTES 0x00000100
3013 #define FILE_SHARE_READ 0x00000001
3014 #define FILE_SHARE_WRITE 0x00000002
3015 #define FILE_SHARE_DELETE 0x00000004
3016 #define FILE_SHARE_VALID_FLAGS 0x00000007
3018 #define FILE_ATTRIBUTE_READONLY 0x00000001
3019 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
3020 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
3021 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
3022 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
3023 #define FILE_ATTRIBUTE_DEVICE 0x00000040
3024 #define FILE_ATTRIBUTE_NORMAL 0x00000080
3025 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
3026 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
3027 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
3028 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
3029 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
3030 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
3031 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
3032 #define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x00008000
3033 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000
3035 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
3036 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
3038 #define FILE_VALID_OPTION_FLAGS 0x00ffffff
3039 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
3040 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
3041 #define FILE_VALID_SET_FLAGS 0x00000036
3043 #define FILE_SUPERSEDE 0x00000000
3044 #define FILE_OPEN 0x00000001
3045 #define FILE_CREATE 0x00000002
3046 #define FILE_OPEN_IF 0x00000003
3047 #define FILE_OVERWRITE 0x00000004
3048 #define FILE_OVERWRITE_IF 0x00000005
3049 #define FILE_MAXIMUM_DISPOSITION 0x00000005
3051 #define FILE_DIRECTORY_FILE 0x00000001
3052 #define FILE_WRITE_THROUGH 0x00000002
3053 #define FILE_SEQUENTIAL_ONLY 0x00000004
3054 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
3055 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
3056 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
3057 #define FILE_NON_DIRECTORY_FILE 0x00000040
3058 #define FILE_CREATE_TREE_CONNECTION 0x00000080
3059 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
3060 #define FILE_NO_EA_KNOWLEDGE 0x00000200
3061 #define FILE_OPEN_REMOTE_INSTANCE 0x00000400
3062 #define FILE_RANDOM_ACCESS 0x00000800
3063 #define FILE_DELETE_ON_CLOSE 0x00001000
3064 #define FILE_OPEN_BY_FILE_ID 0x00002000
3065 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
3066 #define FILE_NO_COMPRESSION 0x00008000
3067 #if (NTDDI_VERSION >= NTDDI_WIN7)
3068 #define FILE_OPEN_REQUIRING_OPLOCK 0x00010000
3069 #define FILE_DISALLOW_EXCLUSIVE 0x00020000
3070 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
3071 #define FILE_RESERVE_OPFILTER 0x00100000
3072 #define FILE_OPEN_REPARSE_POINT 0x00200000
3073 #define FILE_OPEN_NO_RECALL 0x00400000
3074 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
3077 $
if (_WDMDDK_
|| _DEVIOCTL_
)
3078 #define FILE_ANY_ACCESS 0x00000000
3079 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
3080 #define FILE_READ_ACCESS 0x00000001
3081 #define FILE_WRITE_ACCESS 0x00000002
3083 $
endif (_WDMDDK_
|| _DEVIOCTL_
)
3085 #define FILE_ALL_ACCESS \
3086 (STANDARD_RIGHTS_REQUIRED | \
3090 #define FILE_GENERIC_EXECUTE \
3091 (STANDARD_RIGHTS_EXECUTE | \
3092 FILE_READ_ATTRIBUTES | \
3096 #define FILE_GENERIC_READ \
3097 (STANDARD_RIGHTS_READ | \
3099 FILE_READ_ATTRIBUTES | \
3103 #define FILE_GENERIC_WRITE \
3104 (STANDARD_RIGHTS_WRITE | \
3106 FILE_WRITE_ATTRIBUTES | \
3108 FILE_APPEND_DATA | \
3113 #define WMIREG_ACTION_REGISTER 1
3114 #define WMIREG_ACTION_DEREGISTER 2
3115 #define WMIREG_ACTION_REREGISTER 3
3116 #define WMIREG_ACTION_UPDATE_GUIDS 4
3117 #define WMIREG_ACTION_BLOCK_IRPS 5
3119 #define WMIREGISTER 0
3122 _Function_class_(WMI_NOTIFICATION_CALLBACK
)
3123 _IRQL_requires_same_
3125 (NTAPI FWMI_NOTIFICATION_CALLBACK
)(
3128 typedef FWMI_NOTIFICATION_CALLBACK
*WMI_NOTIFICATION_CALLBACK
;
3133 typedef struct _PCI_SLOT_NUMBER
{
3136 ULONG DeviceNumber
:5;
3137 ULONG FunctionNumber
:3;
3142 } PCI_SLOT_NUMBER
, *PPCI_SLOT_NUMBER
;
3144 #define PCI_TYPE0_ADDRESSES 6
3145 #define PCI_TYPE1_ADDRESSES 2
3146 #define PCI_TYPE2_ADDRESSES 5
3148 /* While MS WDK uses inheritance in C++, we cannot do this with gcc, as
3149 inheritance, even from a struct renders the type non-POD. So we use
3151 #define PCI_COMMON_HEADER_LAYOUT \
3160 UCHAR CacheLineSize; \
3161 UCHAR LatencyTimer; \
3165 struct _PCI_HEADER_TYPE_0 { \
3166 ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \
3168 USHORT SubVendorID; \
3169 USHORT SubSystemID; \
3170 ULONG ROMBaseAddress; \
3171 UCHAR CapabilitiesPtr; \
3172 UCHAR Reserved1[3]; \
3174 UCHAR InterruptLine; \
3175 UCHAR InterruptPin; \
3176 UCHAR MinimumGrant; \
3177 UCHAR MaximumLatency; \
3179 struct _PCI_HEADER_TYPE_1 { \
3180 ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \
3182 UCHAR SecondaryBus; \
3183 UCHAR SubordinateBus; \
3184 UCHAR SecondaryLatency; \
3187 USHORT SecondaryStatus; \
3188 USHORT MemoryBase; \
3189 USHORT MemoryLimit; \
3190 USHORT PrefetchBase; \
3191 USHORT PrefetchLimit; \
3192 ULONG PrefetchBaseUpper32; \
3193 ULONG PrefetchLimitUpper32; \
3194 USHORT IOBaseUpper16; \
3195 USHORT IOLimitUpper16; \
3196 UCHAR CapabilitiesPtr; \
3197 UCHAR Reserved1[3]; \
3198 ULONG ROMBaseAddress; \
3199 UCHAR InterruptLine; \
3200 UCHAR InterruptPin; \
3201 USHORT BridgeControl; \
3203 struct _PCI_HEADER_TYPE_2 { \
3204 ULONG SocketRegistersBaseAddress; \
3205 UCHAR CapabilitiesPtr; \
3207 USHORT SecondaryStatus; \
3209 UCHAR SecondaryBus; \
3210 UCHAR SubordinateBus; \
3211 UCHAR SecondaryLatency; \
3215 } Range[PCI_TYPE2_ADDRESSES-1]; \
3216 UCHAR InterruptLine; \
3217 UCHAR InterruptPin; \
3218 USHORT BridgeControl; \
3222 typedef struct _PCI_COMMON_HEADER
{
3223 PCI_COMMON_HEADER_LAYOUT
3224 } PCI_COMMON_HEADER
, *PPCI_COMMON_HEADER
;
3227 typedef struct _PCI_COMMON_CONFIG
{
3228 PCI_COMMON_HEADER_LAYOUT
3229 UCHAR DeviceSpecific
[192];
3230 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
3232 typedef struct _PCI_COMMON_CONFIG
{
3233 PCI_COMMON_HEADER DUMMYSTRUCTNAME
;
3234 UCHAR DeviceSpecific
[192];
3235 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
3238 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
3240 #define PCI_EXTENDED_CONFIG_LENGTH 0x1000
3242 #define PCI_MAX_DEVICES 32
3243 #define PCI_MAX_FUNCTION 8
3244 #define PCI_MAX_BRIDGE_NUMBER 0xFF
3245 #define PCI_INVALID_VENDORID 0xFFFF
3247 /* PCI_COMMON_CONFIG.HeaderType */
3248 #define PCI_MULTIFUNCTION 0x80
3249 #define PCI_DEVICE_TYPE 0x00
3250 #define PCI_BRIDGE_TYPE 0x01
3251 #define PCI_CARDBUS_BRIDGE_TYPE 0x02
3253 #define PCI_CONFIGURATION_TYPE(PciData) \
3254 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
3256 #define PCI_MULTIFUNCTION_DEVICE(PciData) \
3257 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
3259 /* PCI_COMMON_CONFIG.Command */
3260 #define PCI_ENABLE_IO_SPACE 0x0001
3261 #define PCI_ENABLE_MEMORY_SPACE 0x0002
3262 #define PCI_ENABLE_BUS_MASTER 0x0004
3263 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
3264 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
3265 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
3266 #define PCI_ENABLE_PARITY 0x0040
3267 #define PCI_ENABLE_WAIT_CYCLE 0x0080
3268 #define PCI_ENABLE_SERR 0x0100
3269 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
3270 #define PCI_DISABLE_LEVEL_INTERRUPT 0x0400
3272 /* PCI_COMMON_CONFIG.Status */
3273 #define PCI_STATUS_INTERRUPT_PENDING 0x0008
3274 #define PCI_STATUS_CAPABILITIES_LIST 0x0010
3275 #define PCI_STATUS_66MHZ_CAPABLE 0x0020
3276 #define PCI_STATUS_UDF_SUPPORTED 0x0040
3277 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
3278 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
3279 #define PCI_STATUS_DEVSEL 0x0600
3280 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
3281 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
3282 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
3283 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
3284 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
3286 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
3288 #define PCI_WHICHSPACE_CONFIG 0x0
3289 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
3291 #define PCI_CAPABILITY_ID_POWER_MANAGEMENT 0x01
3292 #define PCI_CAPABILITY_ID_AGP 0x02
3293 #define PCI_CAPABILITY_ID_VPD 0x03
3294 #define PCI_CAPABILITY_ID_SLOT_ID 0x04
3295 #define PCI_CAPABILITY_ID_MSI 0x05
3296 #define PCI_CAPABILITY_ID_CPCI_HOTSWAP 0x06
3297 #define PCI_CAPABILITY_ID_PCIX 0x07
3298 #define PCI_CAPABILITY_ID_HYPERTRANSPORT 0x08
3299 #define PCI_CAPABILITY_ID_VENDOR_SPECIFIC 0x09
3300 #define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A
3301 #define PCI_CAPABILITY_ID_CPCI_RES_CTRL 0x0B
3302 #define PCI_CAPABILITY_ID_SHPC 0x0C
3303 #define PCI_CAPABILITY_ID_P2P_SSID 0x0D
3304 #define PCI_CAPABILITY_ID_AGP_TARGET 0x0E
3305 #define PCI_CAPABILITY_ID_SECURE 0x0F
3306 #define PCI_CAPABILITY_ID_PCI_EXPRESS 0x10
3307 #define PCI_CAPABILITY_ID_MSIX 0x11
3309 typedef struct _PCI_CAPABILITIES_HEADER
{
3312 } PCI_CAPABILITIES_HEADER
, *PPCI_CAPABILITIES_HEADER
;
3314 typedef struct _PCI_PMC
{
3318 UCHAR DeviceSpecificInitialization
:1;
3320 struct _PM_SUPPORT
{
3330 } PCI_PMC
, *PPCI_PMC
;
3332 typedef struct _PCI_PMCSR
{
3333 USHORT PowerState
:2;
3336 USHORT DataSelect
:4;
3339 } PCI_PMCSR
, *PPCI_PMCSR
;
3341 typedef struct _PCI_PMCSR_BSE
{
3343 UCHAR D3HotSupportsStopClock
:1;
3344 UCHAR BusPowerClockControlEnabled
:1;
3345 } PCI_PMCSR_BSE
, *PPCI_PMCSR_BSE
;
3347 typedef struct _PCI_PM_CAPABILITY
{
3348 PCI_CAPABILITIES_HEADER Header
;
3350 PCI_PMC Capabilities
;
3354 PCI_PMCSR ControlStatus
;
3358 PCI_PMCSR_BSE BridgeSupport
;
3362 } PCI_PM_CAPABILITY
, *PPCI_PM_CAPABILITY
;
3365 PCI_CAPABILITIES_HEADER Header
;
3368 USHORT DataParityErrorRecoveryEnable
:1;
3369 USHORT EnableRelaxedOrdering
:1;
3370 USHORT MaxMemoryReadByteCount
:2;
3371 USHORT MaxOutstandingSplitTransactions
:3;
3378 ULONG FunctionNumber
:3;
3379 ULONG DeviceNumber
:5;
3381 ULONG Device64Bit
:1;
3382 ULONG Capable133MHz
:1;
3383 ULONG SplitCompletionDiscarded
:1;
3384 ULONG UnexpectedSplitCompletion
:1;
3385 ULONG DeviceComplexity
:1;
3386 ULONG DesignedMaxMemoryReadByteCount
:2;
3387 ULONG DesignedMaxOutstandingSplitTransactions
:3;
3388 ULONG DesignedMaxCumulativeReadSize
:3;
3389 ULONG ReceivedSplitCompletionErrorMessage
:1;
3390 ULONG CapablePCIX266
:1;
3391 ULONG CapablePCIX533
:1;
3395 } PCI_X_CAPABILITY
, *PPCI_X_CAPABILITY
;
3397 #define PCI_EXPRESS_ADVANCED_ERROR_REPORTING_CAP_ID 0x0001
3398 #define PCI_EXPRESS_VIRTUAL_CHANNEL_CAP_ID 0x0002
3399 #define PCI_EXPRESS_DEVICE_SERIAL_NUMBER_CAP_ID 0x0003
3400 #define PCI_EXPRESS_POWER_BUDGETING_CAP_ID 0x0004
3401 #define PCI_EXPRESS_RC_LINK_DECLARATION_CAP_ID 0x0005
3402 #define PCI_EXPRESS_RC_INTERNAL_LINK_CONTROL_CAP_ID 0x0006
3403 #define PCI_EXPRESS_RC_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION_CAP_ID 0x0007
3404 #define PCI_EXPRESS_MFVC_CAP_ID 0x0008
3405 #define PCI_EXPRESS_VC_AND_MFVC_CAP_ID 0x0009
3406 #define PCI_EXPRESS_RCRB_HEADER_CAP_ID 0x000A
3407 #define PCI_EXPRESS_SINGLE_ROOT_IO_VIRTUALIZATION_CAP_ID 0x0010
3409 typedef struct _PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
{
3410 USHORT CapabilityID
;
3413 } PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
, *PPCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
;
3415 typedef struct _PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
{
3416 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
3417 ULONG LowSerialNumber
;
3418 ULONG HighSerialNumber
;
3419 } PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
, *PPCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
;
3421 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
{
3422 _ANONYMOUS_STRUCT
struct {
3425 ULONG DataLinkProtocolError
:1;
3426 ULONG SurpriseDownError
:1;
3428 ULONG PoisonedTLP
:1;
3429 ULONG FlowControlProtocolError
:1;
3430 ULONG CompletionTimeout
:1;
3431 ULONG CompleterAbort
:1;
3432 ULONG UnexpectedCompletion
:1;
3433 ULONG ReceiverOverflow
:1;
3434 ULONG MalformedTLP
:1;
3436 ULONG UnsupportedRequestError
:1;
3440 } PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
;
3442 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
{
3443 _ANONYMOUS_STRUCT
struct {
3446 ULONG DataLinkProtocolError
:1;
3447 ULONG SurpriseDownError
:1;
3449 ULONG PoisonedTLP
:1;
3450 ULONG FlowControlProtocolError
:1;
3451 ULONG CompletionTimeout
:1;
3452 ULONG CompleterAbort
:1;
3453 ULONG UnexpectedCompletion
:1;
3454 ULONG ReceiverOverflow
:1;
3455 ULONG MalformedTLP
:1;
3457 ULONG UnsupportedRequestError
:1;
3461 } PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
;
3463 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
{
3464 _ANONYMOUS_STRUCT
struct {
3467 ULONG DataLinkProtocolError
:1;
3468 ULONG SurpriseDownError
:1;
3470 ULONG PoisonedTLP
:1;
3471 ULONG FlowControlProtocolError
:1;
3472 ULONG CompletionTimeout
:1;
3473 ULONG CompleterAbort
:1;
3474 ULONG UnexpectedCompletion
:1;
3475 ULONG ReceiverOverflow
:1;
3476 ULONG MalformedTLP
:1;
3478 ULONG UnsupportedRequestError
:1;
3482 } PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
;
3484 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_STATUS
{
3485 _ANONYMOUS_STRUCT
struct {
3486 ULONG ReceiverError
:1;
3490 ULONG ReplayNumRollover
:1;
3492 ULONG ReplayTimerTimeout
:1;
3493 ULONG AdvisoryNonFatalError
:1;
3497 } PCI_EXPRESS_CORRECTABLE_ERROR_STATUS
, *PPCI_CORRECTABLE_ERROR_STATUS
;
3499 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_MASK
{
3500 _ANONYMOUS_STRUCT
struct {
3501 ULONG ReceiverError
:1;
3505 ULONG ReplayNumRollover
:1;
3507 ULONG ReplayTimerTimeout
:1;
3508 ULONG AdvisoryNonFatalError
:1;
3512 } PCI_EXPRESS_CORRECTABLE_ERROR_MASK
, *PPCI_CORRECTABLE_ERROR_MASK
;
3514 typedef union _PCI_EXPRESS_AER_CAPABILITIES
{
3515 _ANONYMOUS_STRUCT
struct {
3516 ULONG FirstErrorPointer
:5;
3517 ULONG ECRCGenerationCapable
:1;
3518 ULONG ECRCGenerationEnable
:1;
3519 ULONG ECRCCheckCapable
:1;
3520 ULONG ECRCCheckEnable
:1;
3524 } PCI_EXPRESS_AER_CAPABILITIES
, *PPCI_EXPRESS_AER_CAPABILITIES
;
3526 typedef union _PCI_EXPRESS_ROOT_ERROR_COMMAND
{
3527 _ANONYMOUS_STRUCT
struct {
3528 ULONG CorrectableErrorReportingEnable
:1;
3529 ULONG NonFatalErrorReportingEnable
:1;
3530 ULONG FatalErrorReportingEnable
:1;
3534 } PCI_EXPRESS_ROOT_ERROR_COMMAND
, *PPCI_EXPRESS_ROOT_ERROR_COMMAND
;
3536 typedef union _PCI_EXPRESS_ROOT_ERROR_STATUS
{
3537 _ANONYMOUS_STRUCT
struct {
3538 ULONG CorrectableErrorReceived
:1;
3539 ULONG MultipleCorrectableErrorsReceived
:1;
3540 ULONG UncorrectableErrorReceived
:1;
3541 ULONG MultipleUncorrectableErrorsReceived
:1;
3542 ULONG FirstUncorrectableFatal
:1;
3543 ULONG NonFatalErrorMessagesReceived
:1;
3544 ULONG FatalErrorMessagesReceived
:1;
3546 ULONG AdvancedErrorInterruptMessageNumber
:5;
3549 } PCI_EXPRESS_ROOT_ERROR_STATUS
, *PPCI_EXPRESS_ROOT_ERROR_STATUS
;
3551 typedef union _PCI_EXPRESS_ERROR_SOURCE_ID
{
3552 _ANONYMOUS_STRUCT
struct {
3553 USHORT CorrectableSourceIdFun
:3;
3554 USHORT CorrectableSourceIdDev
:5;
3555 USHORT CorrectableSourceIdBus
:8;
3556 USHORT UncorrectableSourceIdFun
:3;
3557 USHORT UncorrectableSourceIdDev
:5;
3558 USHORT UncorrectableSourceIdBus
:8;
3561 } PCI_EXPRESS_ERROR_SOURCE_ID
, *PPCI_EXPRESS_ERROR_SOURCE_ID
;
3563 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
{
3564 _ANONYMOUS_STRUCT
struct {
3565 ULONG TargetAbortOnSplitCompletion
:1;
3566 ULONG MasterAbortOnSplitCompletion
:1;
3567 ULONG ReceivedTargetAbort
:1;
3568 ULONG ReceivedMasterAbort
:1;
3570 ULONG UnexpectedSplitCompletionError
:1;
3571 ULONG UncorrectableSplitCompletion
:1;
3572 ULONG UncorrectableDataError
:1;
3573 ULONG UncorrectableAttributeError
:1;
3574 ULONG UncorrectableAddressError
:1;
3575 ULONG DelayedTransactionDiscardTimerExpired
:1;
3576 ULONG PERRAsserted
:1;
3577 ULONG SERRAsserted
:1;
3578 ULONG InternalBridgeError
:1;
3582 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
;
3584 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
{
3585 _ANONYMOUS_STRUCT
struct {
3586 ULONG TargetAbortOnSplitCompletion
:1;
3587 ULONG MasterAbortOnSplitCompletion
:1;
3588 ULONG ReceivedTargetAbort
:1;
3589 ULONG ReceivedMasterAbort
:1;
3591 ULONG UnexpectedSplitCompletionError
:1;
3592 ULONG UncorrectableSplitCompletion
:1;
3593 ULONG UncorrectableDataError
:1;
3594 ULONG UncorrectableAttributeError
:1;
3595 ULONG UncorrectableAddressError
:1;
3596 ULONG DelayedTransactionDiscardTimerExpired
:1;
3597 ULONG PERRAsserted
:1;
3598 ULONG SERRAsserted
:1;
3599 ULONG InternalBridgeError
:1;
3603 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
;
3605 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
{
3606 _ANONYMOUS_STRUCT
struct {
3607 ULONG TargetAbortOnSplitCompletion
:1;
3608 ULONG MasterAbortOnSplitCompletion
:1;
3609 ULONG ReceivedTargetAbort
:1;
3610 ULONG ReceivedMasterAbort
:1;
3612 ULONG UnexpectedSplitCompletionError
:1;
3613 ULONG UncorrectableSplitCompletion
:1;
3614 ULONG UncorrectableDataError
:1;
3615 ULONG UncorrectableAttributeError
:1;
3616 ULONG UncorrectableAddressError
:1;
3617 ULONG DelayedTransactionDiscardTimerExpired
:1;
3618 ULONG PERRAsserted
:1;
3619 ULONG SERRAsserted
:1;
3620 ULONG InternalBridgeError
:1;
3624 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
;
3626 typedef union _PCI_EXPRESS_SEC_AER_CAPABILITIES
{
3627 _ANONYMOUS_STRUCT
struct {
3628 ULONG SecondaryUncorrectableFirstErrorPtr
:5;
3632 } PCI_EXPRESS_SEC_AER_CAPABILITIES
, *PPCI_EXPRESS_SEC_AER_CAPABILITIES
;
3634 #define ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING 0x00000001
3635 #define ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING 0x00000002
3636 #define ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING 0x00000004
3638 #define ROOT_CMD_ERROR_REPORTING_ENABLE_MASK \
3639 (ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING | \
3640 ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING | \
3641 ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING)
3643 typedef struct _PCI_EXPRESS_AER_CAPABILITY
{
3644 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
3645 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
3646 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
3647 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
3648 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
3649 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
3650 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
3652 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus
;
3653 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask
;
3654 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity
;
3655 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl
;
3656 ULONG SecHeaderLog
[4];
3657 } PCI_EXPRESS_AER_CAPABILITY
, *PPCI_EXPRESS_AER_CAPABILITY
;
3659 typedef struct _PCI_EXPRESS_ROOTPORT_AER_CAPABILITY
{
3660 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
3661 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
3662 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
3663 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
3664 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
3665 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
3666 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
3668 PCI_EXPRESS_ROOT_ERROR_COMMAND RootErrorCommand
;
3669 PCI_EXPRESS_ROOT_ERROR_STATUS RootErrorStatus
;
3670 PCI_EXPRESS_ERROR_SOURCE_ID ErrorSourceId
;
3671 } PCI_EXPRESS_ROOTPORT_AER_CAPABILITY
, *PPCI_EXPRESS_ROOTPORT_AER_CAPABILITY
;
3673 typedef struct _PCI_EXPRESS_BRIDGE_AER_CAPABILITY
{
3674 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
3675 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
3676 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
3677 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
3678 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
3679 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
3680 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
3682 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus
;
3683 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask
;
3684 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity
;
3685 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl
;
3686 ULONG SecHeaderLog
[4];
3687 } PCI_EXPRESS_BRIDGE_AER_CAPABILITY
, *PPCI_EXPRESS_BRIDGE_AER_CAPABILITY
;
3689 typedef union _PCI_EXPRESS_SRIOV_CAPS
{
3690 _ANONYMOUS_STRUCT
struct {
3691 ULONG VFMigrationCapable
:1;
3693 ULONG VFMigrationInterruptNumber
:11;
3696 } PCI_EXPRESS_SRIOV_CAPS
, *PPCI_EXPRESS_SRIOV_CAPS
;
3698 typedef union _PCI_EXPRESS_SRIOV_CONTROL
{
3699 _ANONYMOUS_STRUCT
struct {
3701 USHORT VFMigrationEnable
:1;
3702 USHORT VFMigrationInterruptEnable
:1;
3703 USHORT VFMemorySpaceEnable
:1;
3704 USHORT ARICapableHierarchy
:1;
3705 USHORT Reserved1
:11;
3708 } PCI_EXPRESS_SRIOV_CONTROL
, *PPCI_EXPRESS_SRIOV_CONTROL
;
3710 typedef union _PCI_EXPRESS_SRIOV_STATUS
{
3711 _ANONYMOUS_STRUCT
struct {
3712 USHORT VFMigrationStatus
:1;
3713 USHORT Reserved1
:15;
3716 } PCI_EXPRESS_SRIOV_STATUS
, *PPCI_EXPRESS_SRIOV_STATUS
;
3718 typedef union _PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
{
3719 _ANONYMOUS_STRUCT
struct {
3720 ULONG VFMigrationStateBIR
:3;
3721 ULONG VFMigrationStateOffset
:29;
3724 } PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
, *PPCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
;
3726 typedef struct _PCI_EXPRESS_SRIOV_CAPABILITY
{
3727 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
3728 PCI_EXPRESS_SRIOV_CAPS SRIOVCapabilities
;
3729 PCI_EXPRESS_SRIOV_CONTROL SRIOVControl
;
3730 PCI_EXPRESS_SRIOV_STATUS SRIOVStatus
;
3734 UCHAR FunctionDependencyLink
;
3736 USHORT FirstVFOffset
;
3740 ULONG SupportedPageSizes
;
3741 ULONG SystemPageSize
;
3742 ULONG BaseAddresses
[PCI_TYPE0_ADDRESSES
];
3743 PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY VFMigrationStateArrayOffset
;
3744 } PCI_EXPRESS_SRIOV_CAPABILITY
, *PPCI_EXPRESS_SRIOV_CAPABILITY
;
3746 /* PCI device classes */
3747 #define PCI_CLASS_PRE_20 0x00
3748 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
3749 #define PCI_CLASS_NETWORK_CTLR 0x02
3750 #define PCI_CLASS_DISPLAY_CTLR 0x03
3751 #define PCI_CLASS_MULTIMEDIA_DEV 0x04
3752 #define PCI_CLASS_MEMORY_CTLR 0x05
3753 #define PCI_CLASS_BRIDGE_DEV 0x06
3754 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
3755 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
3756 #define PCI_CLASS_INPUT_DEV 0x09
3757 #define PCI_CLASS_DOCKING_STATION 0x0a
3758 #define PCI_CLASS_PROCESSOR 0x0b
3759 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
3760 #define PCI_CLASS_WIRELESS_CTLR 0x0d
3761 #define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0e
3762 #define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0f
3763 #define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10
3764 #define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11
3765 #define PCI_CLASS_NOT_DEFINED 0xff
3767 /* PCI device subclasses for class 0 */
3768 #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
3769 #define PCI_SUBCLASS_PRE_20_VGA 0x01
3771 /* PCI device subclasses for class 1 (mass storage controllers)*/
3772 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
3773 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
3774 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
3775 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
3776 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
3777 #define PCI_SUBCLASS_MSC_OTHER 0x80
3779 /* PCI device subclasses for class 2 (network controllers)*/
3780 #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
3781 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
3782 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
3783 #define PCI_SUBCLASS_NET_ATM_CTLR 0x03
3784 #define PCI_SUBCLASS_NET_ISDN_CTLR 0x04
3785 #define PCI_SUBCLASS_NET_OTHER 0x80
3787 /* PCI device subclasses for class 3 (display controllers)*/
3788 #define PCI_SUBCLASS_VID_VGA_CTLR 0x00
3789 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01
3790 #define PCI_SUBCLASS_VID_3D_CTLR 0x02
3791 #define PCI_SUBCLASS_VID_OTHER 0x80
3793 /* PCI device subclasses for class 4 (multimedia device)*/
3794 #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
3795 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
3796 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
3797 #define PCI_SUBCLASS_MM_OTHER 0x80
3799 /* PCI device subclasses for class 5 (memory controller)*/
3800 #define PCI_SUBCLASS_MEM_RAM 0x00
3801 #define PCI_SUBCLASS_MEM_FLASH 0x01
3802 #define PCI_SUBCLASS_MEM_OTHER 0x80
3804 /* PCI device subclasses for class 6 (bridge device)*/
3805 #define PCI_SUBCLASS_BR_HOST 0x00
3806 #define PCI_SUBCLASS_BR_ISA 0x01
3807 #define PCI_SUBCLASS_BR_EISA 0x02
3808 #define PCI_SUBCLASS_BR_MCA 0x03
3809 #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
3810 #define PCI_SUBCLASS_BR_PCMCIA 0x05
3811 #define PCI_SUBCLASS_BR_NUBUS 0x06
3812 #define PCI_SUBCLASS_BR_CARDBUS 0x07
3813 #define PCI_SUBCLASS_BR_RACEWAY 0x08
3814 #define PCI_SUBCLASS_BR_OTHER 0x80
3816 #define PCI_SUBCLASS_COM_SERIAL 0x00
3817 #define PCI_SUBCLASS_COM_PARALLEL 0x01
3818 #define PCI_SUBCLASS_COM_MULTIPORT 0x02
3819 #define PCI_SUBCLASS_COM_MODEM 0x03
3820 #define PCI_SUBCLASS_COM_OTHER 0x80
3822 #define PCI_SUBCLASS_SYS_INTERRUPT_CTLR 0x00
3823 #define PCI_SUBCLASS_SYS_DMA_CTLR 0x01
3824 #define PCI_SUBCLASS_SYS_SYSTEM_TIMER 0x02
3825 #define PCI_SUBCLASS_SYS_REAL_TIME_CLOCK 0x03
3826 #define PCI_SUBCLASS_SYS_GEN_HOTPLUG_CTLR 0x04
3827 #define PCI_SUBCLASS_SYS_SDIO_CTRL 0x05
3828 #define PCI_SUBCLASS_SYS_OTHER 0x80
3830 #define PCI_SUBCLASS_INP_KEYBOARD 0x00
3831 #define PCI_SUBCLASS_INP_DIGITIZER 0x01
3832 #define PCI_SUBCLASS_INP_MOUSE 0x02
3833 #define PCI_SUBCLASS_INP_SCANNER 0x03
3834 #define PCI_SUBCLASS_INP_GAMEPORT 0x04
3835 #define PCI_SUBCLASS_INP_OTHER 0x80
3837 #define PCI_SUBCLASS_DOC_GENERIC 0x00
3838 #define PCI_SUBCLASS_DOC_OTHER 0x80
3840 #define PCI_SUBCLASS_PROC_386 0x00
3841 #define PCI_SUBCLASS_PROC_486 0x01
3842 #define PCI_SUBCLASS_PROC_PENTIUM 0x02
3843 #define PCI_SUBCLASS_PROC_ALPHA 0x10
3844 #define PCI_SUBCLASS_PROC_POWERPC 0x20
3845 #define PCI_SUBCLASS_PROC_COPROCESSOR 0x40
3847 /* PCI device subclasses for class C (serial bus controller)*/
3848 #define PCI_SUBCLASS_SB_IEEE1394 0x00
3849 #define PCI_SUBCLASS_SB_ACCESS 0x01
3850 #define PCI_SUBCLASS_SB_SSA 0x02
3851 #define PCI_SUBCLASS_SB_USB 0x03
3852 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
3853 #define PCI_SUBCLASS_SB_SMBUS 0x05
3855 #define PCI_SUBCLASS_WIRELESS_IRDA 0x00
3856 #define PCI_SUBCLASS_WIRELESS_CON_IR 0x01
3857 #define PCI_SUBCLASS_WIRELESS_RF 0x10
3858 #define PCI_SUBCLASS_WIRELESS_OTHER 0x80
3860 #define PCI_SUBCLASS_INTIO_I2O 0x00
3862 #define PCI_SUBCLASS_SAT_TV 0x01
3863 #define PCI_SUBCLASS_SAT_AUDIO 0x02
3864 #define PCI_SUBCLASS_SAT_VOICE 0x03
3865 #define PCI_SUBCLASS_SAT_DATA 0x04
3867 #define PCI_SUBCLASS_CRYPTO_NET_COMP 0x00
3868 #define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT 0x10
3869 #define PCI_SUBCLASS_CRYPTO_OTHER 0x80
3871 #define PCI_SUBCLASS_DASP_DPIO 0x00
3872 #define PCI_SUBCLASS_DASP_OTHER 0x80
3874 #define PCI_ADDRESS_IO_SPACE 0x00000001
3875 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
3876 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
3877 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
3878 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
3879 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
3881 #define PCI_TYPE_32BIT 0
3882 #define PCI_TYPE_20BIT 2
3883 #define PCI_TYPE_64BIT 4
3885 #define PCI_ROMADDRESS_ENABLED 0x00000001
3887 #endif /* _PCI_X_ */
3889 #define PCI_EXPRESS_LINK_QUIESCENT_INTERFACE_VERSION 1
3891 _IRQL_requires_max_(PASSIVE_LEVEL
)
3892 _Must_inspect_result_
3894 (NTAPI PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
)(
3895 _Inout_ PVOID Context
);
3896 typedef PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
*PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
;
3898 _IRQL_requires_max_(PASSIVE_LEVEL
)
3899 _Must_inspect_result_
3901 (NTAPI PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
)(
3902 _Inout_ PVOID Context
);
3903 typedef PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
*PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
;
3905 typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE
{
3909 PINTERFACE_REFERENCE InterfaceReference
;
3910 PINTERFACE_DEREFERENCE InterfaceDereference
;
3911 PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE PciExpressEnterLinkQuiescentMode
;
3912 PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE PciExpressExitLinkQuiescentMode
;
3913 } PCI_EXPRESS_LINK_QUIESCENT_INTERFACE
, *PPCI_EXPRESS_LINK_QUIESCENT_INTERFACE
;
3915 #define PCI_EXPRESS_ROOT_PORT_INTERFACE_VERSION 1
3918 (NTAPI
*PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE
)(
3920 _Out_writes_bytes_(Length
) PVOID Buffer
,
3925 (NTAPI
*PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE
)(
3927 _In_reads_bytes_(Length
) PVOID Buffer
,
3931 typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE
{
3935 PINTERFACE_REFERENCE InterfaceReference
;
3936 PINTERFACE_DEREFERENCE InterfaceDereference
;
3937 PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE ReadConfigSpace
;
3938 PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE WriteConfigSpace
;
3939 } PCI_EXPRESS_ROOT_PORT_INTERFACE
, *PPCI_EXPRESS_ROOT_PORT_INTERFACE
;
3941 #define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION 1
3943 _Must_inspect_result_
3945 (NTAPI PCI_MSIX_SET_ENTRY
)(
3947 _In_ ULONG TableEntry
,
3948 _In_ ULONG MessageNumber
);
3949 typedef PCI_MSIX_SET_ENTRY
*PPCI_MSIX_SET_ENTRY
;
3951 _Must_inspect_result_
3953 (NTAPI PCI_MSIX_MASKUNMASK_ENTRY
)(
3955 _In_ ULONG TableEntry
);
3956 typedef PCI_MSIX_MASKUNMASK_ENTRY
*PPCI_MSIX_MASKUNMASK_ENTRY
;
3958 _Must_inspect_result_
3960 (NTAPI PCI_MSIX_GET_ENTRY
)(
3962 _In_ ULONG TableEntry
,
3963 _Out_ PULONG MessageNumber
,
3964 _Out_ PBOOLEAN Masked
);
3965 typedef PCI_MSIX_GET_ENTRY
*PPCI_MSIX_GET_ENTRY
;
3967 _Must_inspect_result_
3969 (NTAPI PCI_MSIX_GET_TABLE_SIZE
)(
3971 _Out_ PULONG TableSize
);
3972 typedef PCI_MSIX_GET_TABLE_SIZE
*PPCI_MSIX_GET_TABLE_SIZE
;
3974 typedef struct _PCI_MSIX_TABLE_CONFIG_INTERFACE
{
3978 PINTERFACE_REFERENCE InterfaceReference
;
3979 PINTERFACE_DEREFERENCE InterfaceDereference
;
3980 PPCI_MSIX_SET_ENTRY SetTableEntry
;
3981 PPCI_MSIX_MASKUNMASK_ENTRY MaskTableEntry
;
3982 PPCI_MSIX_MASKUNMASK_ENTRY UnmaskTableEntry
;
3983 PPCI_MSIX_GET_ENTRY GetTableEntry
;
3984 PPCI_MSIX_GET_TABLE_SIZE GetTableSize
;
3985 } PCI_MSIX_TABLE_CONFIG_INTERFACE
, *PPCI_MSIX_TABLE_CONFIG_INTERFACE
;
3987 #define PCI_MSIX_TABLE_CONFIG_MINIMUM_SIZE \
3988 RTL_SIZEOF_THROUGH_FIELD(PCI_MSIX_TABLE_CONFIG_INTERFACE, UnmaskTableEntry)
3994 typedef enum _CONFIGURATION_TYPE
{
3997 FloatingPointProcessor
,
4007 MultiFunctionAdapter
,
4021 FloppyDiskPeripheral
,
4034 RealModeIrqRoutingTable
,
4035 RealModePCIEnumeration
,
4037 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
4038 #endif /* !_ARC_DDK_ */
4041 ** IRP function codes
4044 #define IRP_MN_QUERY_DIRECTORY 0x01
4045 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
4047 #define IRP_MN_USER_FS_REQUEST 0x00
4048 #define IRP_MN_MOUNT_VOLUME 0x01
4049 #define IRP_MN_VERIFY_VOLUME 0x02
4050 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
4051 #define IRP_MN_TRACK_LINK 0x04
4052 #define IRP_MN_KERNEL_CALL 0x04
4054 #define IRP_MN_LOCK 0x01
4055 #define IRP_MN_UNLOCK_SINGLE 0x02
4056 #define IRP_MN_UNLOCK_ALL 0x03
4057 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
4059 #define IRP_MN_FLUSH_AND_PURGE 0x01
4061 #define IRP_MN_NORMAL 0x00
4062 #define IRP_MN_DPC 0x01
4063 #define IRP_MN_MDL 0x02
4064 #define IRP_MN_COMPLETE 0x04
4065 #define IRP_MN_COMPRESSED 0x08
4067 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
4068 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
4069 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
4071 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
4073 #define IO_CHECK_CREATE_PARAMETERS 0x0200
4074 #define IO_ATTACH_DEVICE 0x0400
4075 #define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800
4078 (NTAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
4080 _In_ PUNICODE_STRING PathName
,
4081 _In_ INTERFACE_TYPE BusType
,
4082 _In_ ULONG BusNumber
,
4083 _In_ PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
4084 _In_ CONFIGURATION_TYPE ControllerType
,
4085 _In_ ULONG ControllerNumber
,
4086 _In_ PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
4087 _In_ CONFIGURATION_TYPE PeripheralType
,
4088 _In_ ULONG PeripheralNumber
,
4089 _In_ PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
4091 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
4092 IoQueryDeviceIdentifier
= 0,
4093 IoQueryDeviceConfigurationData
,
4094 IoQueryDeviceComponentInformation
,
4095 IoQueryDeviceMaxData
4096 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
4099 (NTAPI
*PDRIVER_REINITIALIZE
)(
4100 _In_
struct _DRIVER_OBJECT
*DriverObject
,
4101 _In_opt_ PVOID Context
,
4104 typedef struct _CONTROLLER_OBJECT
{
4107 PVOID ControllerExtension
;
4108 KDEVICE_QUEUE DeviceWaitQueue
;
4110 LARGE_INTEGER Spare2
;
4111 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
4113 #define DRVO_REINIT_REGISTERED 0x00000008
4114 #define DRVO_INITIALIZED 0x00000010
4115 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
4116 #define DRVO_LEGACY_RESOURCES 0x00000040
4118 typedef struct _CONFIGURATION_INFORMATION
{
4123 ULONG ScsiPortCount
;
4125 ULONG ParallelCount
;
4126 BOOLEAN AtDiskPrimaryAddressClaimed
;
4127 BOOLEAN AtDiskSecondaryAddressClaimed
;
4129 ULONG MediumChangerCount
;
4130 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
4132 typedef struct _DISK_SIGNATURE
{
4133 ULONG PartitionStyle
;
4134 _ANONYMOUS_UNION
union {
4143 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
4145 typedef struct _TXN_PARAMETER_BLOCK
{
4148 PVOID TransactionObject
;
4149 } TXN_PARAMETER_BLOCK
, *PTXN_PARAMETER_BLOCK
;
4151 #define TXF_MINIVERSION_DEFAULT_VIEW (0xFFFE)
4153 typedef struct _IO_DRIVER_CREATE_CONTEXT
{
4155 struct _ECP_LIST
*ExtraCreateParameter
;
4156 PVOID DeviceObjectHint
;
4157 PTXN_PARAMETER_BLOCK TxnParameters
;
4158 } IO_DRIVER_CREATE_CONTEXT
, *PIO_DRIVER_CREATE_CONTEXT
;
4160 typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD
{
4164 PINTERFACE_REFERENCE InterfaceReference
;
4165 PINTERFACE_DEREFERENCE InterfaceDereference
;
4166 PGET_SET_DEVICE_DATA SetBusData
;
4167 PGET_SET_DEVICE_DATA GetBusData
;
4169 } AGP_TARGET_BUS_INTERFACE_STANDARD
, *PAGP_TARGET_BUS_INTERFACE_STANDARD
;
4171 _IRQL_requires_max_(PASSIVE_LEVEL
)
4172 _Must_inspect_result_
4174 (NTAPI
*PGET_LOCATION_STRING
)(
4175 _Inout_opt_ PVOID Context
,
4177 _At_(*LocationStrings
,
4178 _When_(return == 0, __drv_allocatesMem(Mem
)))
4179 PZZWSTR
*LocationStrings
);
4181 typedef struct _PNP_LOCATION_INTERFACE
{
4185 PINTERFACE_REFERENCE InterfaceReference
;
4186 PINTERFACE_DEREFERENCE InterfaceDereference
;
4187 PGET_LOCATION_STRING GetLocationString
;
4188 } PNP_LOCATION_INTERFACE
, *PPNP_LOCATION_INTERFACE
;
4190 typedef enum _ARBITER_ACTION
{
4191 ArbiterActionTestAllocation
,
4192 ArbiterActionRetestAllocation
,
4193 ArbiterActionCommitAllocation
,
4194 ArbiterActionRollbackAllocation
,
4195 ArbiterActionQueryAllocatedResources
,
4196 ArbiterActionWriteReservedResources
,
4197 ArbiterActionQueryConflict
,
4198 ArbiterActionQueryArbitrate
,
4199 ArbiterActionAddReserved
,
4200 ArbiterActionBootAllocation
4201 } ARBITER_ACTION
, *PARBITER_ACTION
;
4203 typedef struct _ARBITER_CONFLICT_INFO
{
4204 PDEVICE_OBJECT OwningObject
;
4207 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
4209 typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS
{
4210 _Inout_ PLIST_ENTRY ArbitrationList
;
4211 _In_ ULONG AllocateFromCount
;
4212 _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
4213 } ARBITER_TEST_ALLOCATION_PARAMETERS
, *PARBITER_TEST_ALLOCATION_PARAMETERS
;
4215 typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS
{
4216 _Inout_ PLIST_ENTRY ArbitrationList
;
4217 _In_ ULONG AllocateFromCount
;
4218 _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
4219 } ARBITER_RETEST_ALLOCATION_PARAMETERS
, *PARBITER_RETEST_ALLOCATION_PARAMETERS
;
4221 typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS
{
4222 _Inout_ PLIST_ENTRY ArbitrationList
;
4223 } ARBITER_BOOT_ALLOCATION_PARAMETERS
, *PARBITER_BOOT_ALLOCATION_PARAMETERS
;
4225 typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
{
4226 _Out_ PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
4227 } ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
;
4229 typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS
{
4230 _In_ PDEVICE_OBJECT PhysicalDeviceObject
;
4231 _In_ PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
4232 _Out_ PULONG ConflictCount
;
4233 _Out_ PARBITER_CONFLICT_INFO
*Conflicts
;
4234 } ARBITER_QUERY_CONFLICT_PARAMETERS
, *PARBITER_QUERY_CONFLICT_PARAMETERS
;
4236 typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS
{
4237 _In_ PLIST_ENTRY ArbitrationList
;
4238 } ARBITER_QUERY_ARBITRATE_PARAMETERS
, *PARBITER_QUERY_ARBITRATE_PARAMETERS
;
4240 typedef struct _ARBITER_ADD_RESERVED_PARAMETERS
{
4241 _In_ PDEVICE_OBJECT ReserveDevice
;
4242 } ARBITER_ADD_RESERVED_PARAMETERS
, *PARBITER_ADD_RESERVED_PARAMETERS
;
4244 typedef struct _ARBITER_PARAMETERS
{
4246 ARBITER_TEST_ALLOCATION_PARAMETERS TestAllocation
;
4247 ARBITER_RETEST_ALLOCATION_PARAMETERS RetestAllocation
;
4248 ARBITER_BOOT_ALLOCATION_PARAMETERS BootAllocation
;
4249 ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS QueryAllocatedResources
;
4250 ARBITER_QUERY_CONFLICT_PARAMETERS QueryConflict
;
4251 ARBITER_QUERY_ARBITRATE_PARAMETERS QueryArbitrate
;
4252 ARBITER_ADD_RESERVED_PARAMETERS AddReserved
;
4254 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
4256 typedef enum _ARBITER_REQUEST_SOURCE
{
4257 ArbiterRequestUndefined
= -1,
4258 ArbiterRequestLegacyReported
,
4259 ArbiterRequestHalReported
,
4260 ArbiterRequestLegacyAssigned
,
4261 ArbiterRequestPnpDetected
,
4262 ArbiterRequestPnpEnumerated
4263 } ARBITER_REQUEST_SOURCE
;
4265 typedef enum _ARBITER_RESULT
{
4266 ArbiterResultUndefined
= -1,
4267 ArbiterResultSuccess
,
4268 ArbiterResultExternalConflict
,
4269 ArbiterResultNullRequest
4272 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
4274 typedef struct _ARBITER_LIST_ENTRY
{
4275 LIST_ENTRY ListEntry
;
4276 ULONG AlternativeCount
;
4277 PIO_RESOURCE_DESCRIPTOR Alternatives
;
4278 PDEVICE_OBJECT PhysicalDeviceObject
;
4279 ARBITER_REQUEST_SOURCE RequestSource
;
4282 INTERFACE_TYPE InterfaceType
;
4285 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
4286 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
4287 ARBITER_RESULT Result
;
4288 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
4291 (NTAPI
*PARBITER_HANDLER
)(
4292 _Inout_opt_ PVOID Context
,
4293 _In_ ARBITER_ACTION Action
,
4294 _Inout_ PARBITER_PARAMETERS Parameters
);
4296 #define ARBITER_PARTIAL 0x00000001
4298 typedef struct _ARBITER_INTERFACE
{
4302 PINTERFACE_REFERENCE InterfaceReference
;
4303 PINTERFACE_DEREFERENCE InterfaceDereference
;
4304 PARBITER_HANDLER ArbiterHandler
;
4306 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
4308 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
4309 TranslateChildToParent
,
4310 TranslateParentToChild
4311 } RESOURCE_TRANSLATION_DIRECTION
;
4314 (NTAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
4315 _Inout_opt_ PVOID Context
,
4316 _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
4317 _In_ RESOURCE_TRANSLATION_DIRECTION Direction
,
4318 _In_opt_ ULONG AlternativesCount
,
4319 _In_reads_opt_(AlternativesCount
) IO_RESOURCE_DESCRIPTOR Alternatives
[],
4320 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
4321 _Out_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
4324 (NTAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
4325 _Inout_opt_ PVOID Context
,
4326 _In_ PIO_RESOURCE_DESCRIPTOR Source
,
4327 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
4328 _Out_ PULONG TargetCount
,
4329 _Out_writes_(*TargetCount
) PIO_RESOURCE_DESCRIPTOR
*Target
);
4331 typedef struct _TRANSLATOR_INTERFACE
{
4335 PINTERFACE_REFERENCE InterfaceReference
;
4336 PINTERFACE_DEREFERENCE InterfaceDereference
;
4337 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
4338 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
4339 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
4341 typedef struct _PCI_AGP_CAPABILITY
{
4342 PCI_CAPABILITIES_HEADER Header
;
4346 struct _PCI_AGP_STATUS
{
4351 ULONG HostTransDisable
:1;
4353 ULONG ITA_Coherent
:1;
4354 ULONG SideBandAddressing
:1;
4355 ULONG CalibrationCycle
:3;
4356 ULONG AsyncRequestSize
:3;
4360 ULONG RequestQueueDepthMaximum
:8;
4362 struct _PCI_AGP_COMMAND
{
4365 ULONG FastWriteEnable
:1;
4366 ULONG FourGBEnable
:1;
4371 ULONG CalibrationCycle
:3;
4372 ULONG AsyncReqSize
:3;
4374 ULONG RequestQueueDepth
:8;
4376 } PCI_AGP_CAPABILITY
, *PPCI_AGP_CAPABILITY
;
4378 typedef enum _EXTENDED_AGP_REGISTER
{
4386 } EXTENDED_AGP_REGISTER
, *PEXTENDED_AGP_REGISTER
;
4388 typedef struct _PCI_AGP_ISOCH_STATUS
{
4395 } PCI_AGP_ISOCH_STATUS
, *PPCI_AGP_ISOCH_STATUS
;
4397 typedef struct _PCI_AGP_CONTROL
{
4399 ULONG GTLB_Enable
:1;
4401 ULONG CAL_Disable
:1;
4403 } PCI_AGP_CONTROL
, *PPCI_AGP_CONTROL
;
4405 typedef struct _PCI_AGP_APERTURE_PAGE_SIZE
{
4406 USHORT PageSizeMask
:11;
4408 USHORT PageSizeSelect
:4;
4409 } PCI_AGP_APERTURE_PAGE_SIZE
, *PPCI_AGP_APERTURE_PAGE_SIZE
;
4411 typedef struct _PCI_AGP_ISOCH_COMMAND
{
4415 } PCI_AGP_ISOCH_COMMAND
, *PPCI_AGP_ISOCH_COMMAND
;
4417 typedef struct PCI_AGP_EXTENDED_CAPABILITY
{
4418 PCI_AGP_ISOCH_STATUS IsochStatus
;
4419 PCI_AGP_CONTROL AgpControl
;
4420 USHORT ApertureSize
;
4421 PCI_AGP_APERTURE_PAGE_SIZE AperturePageSize
;
4424 PCI_AGP_ISOCH_COMMAND IsochCommand
;
4425 } PCI_AGP_EXTENDED_CAPABILITY
, *PPCI_AGP_EXTENDED_CAPABILITY
;
4427 #define PCI_AGP_RATE_1X 0x1
4428 #define PCI_AGP_RATE_2X 0x2
4429 #define PCI_AGP_RATE_4X 0x4
4431 #define PCIX_MODE_CONVENTIONAL_PCI 0x0
4432 #define PCIX_MODE1_66MHZ 0x1
4433 #define PCIX_MODE1_100MHZ 0x2
4434 #define PCIX_MODE1_133MHZ 0x3
4435 #define PCIX_MODE2_266_66MHZ 0x9
4436 #define PCIX_MODE2_266_100MHZ 0xA
4437 #define PCIX_MODE2_266_133MHZ 0xB
4438 #define PCIX_MODE2_533_66MHZ 0xD
4439 #define PCIX_MODE2_533_100MHZ 0xE
4440 #define PCIX_MODE2_533_133MHZ 0xF
4442 #define PCIX_VERSION_MODE1_ONLY 0x0
4443 #define PCIX_VERSION_MODE2_ECC 0x1
4444 #define PCIX_VERSION_DUAL_MODE_ECC 0x2
4446 typedef struct _PCIX_BRIDGE_CAPABILITY
{
4447 PCI_CAPABILITIES_HEADER Header
;
4449 _ANONYMOUS_STRUCT
struct {
4451 USHORT Bus133MHzCapable
:1;
4452 USHORT SplitCompletionDiscarded
:1;
4453 USHORT UnexpectedSplitCompletion
:1;
4454 USHORT SplitCompletionOverrun
:1;
4455 USHORT SplitRequestDelayed
:1;
4456 USHORT BusModeFrequency
:4;
4459 USHORT Bus266MHzCapable
:1;
4460 USHORT Bus533MHzCapable
:1;
4465 _ANONYMOUS_STRUCT
struct {
4466 ULONG FunctionNumber
:3;
4467 ULONG DeviceNumber
:5;
4469 ULONG Device64Bit
:1;
4470 ULONG Device133MHzCapable
:1;
4471 ULONG SplitCompletionDiscarded
:1;
4472 ULONG UnexpectedSplitCompletion
:1;
4473 ULONG SplitCompletionOverrun
:1;
4474 ULONG SplitRequestDelayed
:1;
4477 ULONG Device266MHzCapable
:1;
4478 ULONG Device533MHzCapable
:1;
4482 USHORT UpstreamSplitTransactionCapacity
;
4483 USHORT UpstreamSplitTransactionLimit
;
4484 USHORT DownstreamSplitTransactionCapacity
;
4485 USHORT DownstreamSplitTransactionLimit
;
4487 _ANONYMOUS_STRUCT
struct {
4488 ULONG SelectSecondaryRegisters
:1;
4489 ULONG ErrorPresentInOtherBank
:1;
4490 ULONG AdditionalCorrectableError
:1;
4491 ULONG AdditionalUncorrectableError
:1;
4493 ULONG ErrorCorrected
:1;
4495 ULONG ErrorFirstCommand
:4;
4496 ULONG ErrorSecondCommand
:4;
4497 ULONG ErrorUpperAttributes
:4;
4498 ULONG ControlUpdateEnable
:1;
4500 ULONG DisableSingleBitCorrection
:1;
4505 ULONG EccFirstAddress
;
4506 ULONG EccSecondAddress
;
4508 } PCIX_BRIDGE_CAPABILITY
, *PPCIX_BRIDGE_CAPABILITY
;
4510 typedef struct _PCI_SUBSYSTEM_IDS_CAPABILITY
{
4511 PCI_CAPABILITIES_HEADER Header
;
4515 } PCI_SUBSYSTEM_IDS_CAPABILITY
, *PPCI_SUBSYSTEM_IDS_CAPABILITY
;
4517 #define OSC_FIRMWARE_FAILURE 0x02
4518 #define OSC_UNRECOGNIZED_UUID 0x04
4519 #define OSC_UNRECOGNIZED_REVISION 0x08
4520 #define OSC_CAPABILITIES_MASKED 0x10
4522 #define PCI_ROOT_BUS_OSC_METHOD_CAPABILITY_REVISION 0x01
4524 typedef struct _PCI_ROOT_BUS_OSC_SUPPORT_FIELD
{
4526 _ANONYMOUS_STRUCT
struct {
4527 ULONG ExtendedConfigOpRegions
:1;
4528 ULONG ActiveStatePowerManagement
:1;
4529 ULONG ClockPowerManagement
:1;
4530 ULONG SegmentGroups
:1;
4531 ULONG MessageSignaledInterrupts
:1;
4532 ULONG WindowsHardwareErrorArchitecture
:1;
4537 } PCI_ROOT_BUS_OSC_SUPPORT_FIELD
, *PPCI_ROOT_BUS_OSC_SUPPORT_FIELD
;
4539 typedef struct _PCI_ROOT_BUS_OSC_CONTROL_FIELD
{
4541 _ANONYMOUS_STRUCT
struct {
4542 ULONG ExpressNativeHotPlug
:1;
4543 ULONG ShpcNativeHotPlug
:1;
4544 ULONG ExpressNativePME
:1;
4545 ULONG ExpressAdvancedErrorReporting
:1;
4546 ULONG ExpressCapabilityStructure
:1;
4551 } PCI_ROOT_BUS_OSC_CONTROL_FIELD
, *PPCI_ROOT_BUS_OSC_CONTROL_FIELD
;
4553 typedef enum _PCI_HARDWARE_INTERFACE
{
4558 } PCI_HARDWARE_INTERFACE
, *PPCI_HARDWARE_INTERFACE
;
4565 typedef struct _PCI_ROOT_BUS_HARDWARE_CAPABILITY
{
4566 PCI_HARDWARE_INTERFACE SecondaryInterface
;
4567 _ANONYMOUS_STRUCT
struct {
4568 BOOLEAN BusCapabilitiesFound
;
4569 ULONG CurrentSpeedAndMode
;
4570 ULONG SupportedSpeedsAndModes
;
4571 BOOLEAN DeviceIDMessagingCapable
;
4572 PCI_BUS_WIDTH SecondaryBusWidth
;
4574 PCI_ROOT_BUS_OSC_SUPPORT_FIELD OscFeatureSupport
;
4575 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlRequest
;
4576 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlGranted
;
4577 } PCI_ROOT_BUS_HARDWARE_CAPABILITY
, *PPCI_ROOT_BUS_HARDWARE_CAPABILITY
;
4579 typedef union _PCI_EXPRESS_CAPABILITIES_REGISTER
{
4580 _ANONYMOUS_STRUCT
struct {
4581 USHORT CapabilityVersion
:4;
4582 USHORT DeviceType
:4;
4583 USHORT SlotImplemented
:1;
4584 USHORT InterruptMessageNumber
:5;
4588 } PCI_EXPRESS_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_CAPABILITIES_REGISTER
;
4590 typedef union _PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
{
4591 _ANONYMOUS_STRUCT
struct {
4592 ULONG MaxPayloadSizeSupported
:3;
4593 ULONG PhantomFunctionsSupported
:2;
4594 ULONG ExtendedTagSupported
:1;
4595 ULONG L0sAcceptableLatency
:3;
4596 ULONG L1AcceptableLatency
:3;
4598 ULONG RoleBasedErrorReporting
:1;
4600 ULONG CapturedSlotPowerLimit
:8;
4601 ULONG CapturedSlotPowerLimitScale
:2;
4605 } PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
;
4607 #define PCI_EXPRESS_AER_DEVICE_CONTROL_MASK 0x07;
4609 typedef union _PCI_EXPRESS_DEVICE_CONTROL_REGISTER
{
4610 _ANONYMOUS_STRUCT
struct {
4611 USHORT CorrectableErrorEnable
:1;
4612 USHORT NonFatalErrorEnable
:1;
4613 USHORT FatalErrorEnable
:1;
4614 USHORT UnsupportedRequestErrorEnable
:1;
4615 USHORT EnableRelaxedOrder
:1;
4616 USHORT MaxPayloadSize
:3;
4617 USHORT ExtendedTagEnable
:1;
4618 USHORT PhantomFunctionsEnable
:1;
4619 USHORT AuxPowerEnable
:1;
4620 USHORT NoSnoopEnable
:1;
4621 USHORT MaxReadRequestSize
:3;
4622 USHORT BridgeConfigRetryEnable
:1;
4625 } PCI_EXPRESS_DEVICE_CONTROL_REGISTER
, *PPCI_EXPRESS_DEVICE_CONTROL_REGISTER
;
4627 #define PCI_EXPRESS_AER_DEVICE_STATUS_MASK 0x0F;
4629 typedef union _PCI_EXPRESS_DEVICE_STATUS_REGISTER
{
4630 _ANONYMOUS_STRUCT
struct {
4631 USHORT CorrectableErrorDetected
:1;
4632 USHORT NonFatalErrorDetected
:1;
4633 USHORT FatalErrorDetected
:1;
4634 USHORT UnsupportedRequestDetected
:1;
4635 USHORT AuxPowerDetected
:1;
4636 USHORT TransactionsPending
:1;
4640 } PCI_EXPRESS_DEVICE_STATUS_REGISTER
, *PPCI_EXPRESS_DEVICE_STATUS_REGISTER
;
4642 typedef union _PCI_EXPRESS_LINK_CAPABILITIES_REGISTER
{
4643 _ANONYMOUS_STRUCT
struct {
4644 ULONG MaximumLinkSpeed
:4;
4645 ULONG MaximumLinkWidth
:6;
4646 ULONG ActiveStatePMSupport
:2;
4647 ULONG L0sExitLatency
:3;
4648 ULONG L1ExitLatency
:3;
4649 ULONG ClockPowerManagement
:1;
4650 ULONG SurpriseDownErrorReportingCapable
:1;
4651 ULONG DataLinkLayerActiveReportingCapable
:1;
4656 } PCI_EXPRESS_LINK_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_LINK_CAPABILITIES_REGISTER
;
4658 typedef union _PCI_EXPRESS_LINK_CONTROL_REGISTER
{
4659 _ANONYMOUS_STRUCT
struct {
4660 USHORT ActiveStatePMControl
:2;
4662 USHORT ReadCompletionBoundary
:1;
4663 USHORT LinkDisable
:1;
4664 USHORT RetrainLink
:1;
4665 USHORT CommonClockConfig
:1;
4666 USHORT ExtendedSynch
:1;
4667 USHORT EnableClockPowerManagement
:1;
4671 } PCI_EXPRESS_LINK_CONTROL_REGISTER
, *PPCI_EXPRESS_LINK_CONTROL_REGISTER
;
4673 typedef union _PCI_EXPRESS_LINK_STATUS_REGISTER
{
4674 _ANONYMOUS_STRUCT
struct {
4678 USHORT LinkTraining
:1;
4679 USHORT SlotClockConfig
:1;
4680 USHORT DataLinkLayerActive
:1;
4684 } PCI_EXPRESS_LINK_STATUS_REGISTER
, *PPCI_EXPRESS_LINK_STATUS_REGISTER
;
4686 typedef union _PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
{
4687 _ANONYMOUS_STRUCT
struct {
4688 ULONG AttentionButtonPresent
:1;
4689 ULONG PowerControllerPresent
:1;
4690 ULONG MRLSensorPresent
:1;
4691 ULONG AttentionIndicatorPresent
:1;
4692 ULONG PowerIndicatorPresent
:1;
4693 ULONG HotPlugSurprise
:1;
4694 ULONG HotPlugCapable
:1;
4695 ULONG SlotPowerLimit
:8;
4696 ULONG SlotPowerLimitScale
:2;
4697 ULONG ElectromechanicalLockPresent
:1;
4698 ULONG NoCommandCompletedSupport
:1;
4699 ULONG PhysicalSlotNumber
:13;
4702 } PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
;
4704 typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER
{
4705 _ANONYMOUS_STRUCT
struct {
4706 USHORT AttentionButtonEnable
:1;
4707 USHORT PowerFaultDetectEnable
:1;
4708 USHORT MRLSensorEnable
:1;
4709 USHORT PresenceDetectEnable
:1;
4710 USHORT CommandCompletedEnable
:1;
4711 USHORT HotPlugInterruptEnable
:1;
4712 USHORT AttentionIndicatorControl
:2;
4713 USHORT PowerIndicatorControl
:2;
4714 USHORT PowerControllerControl
:1;
4715 USHORT ElectromechanicalLockControl
:1;
4716 USHORT DataLinkStateChangeEnable
:1;
4720 } PCI_EXPRESS_SLOT_CONTROL_REGISTER
, *PPCI_EXPRESS_SLOT_CONTROL_REGISTER
;
4722 typedef union _PCI_EXPRESS_SLOT_STATUS_REGISTER
{
4723 _ANONYMOUS_STRUCT
struct {
4724 USHORT AttentionButtonPressed
:1;
4725 USHORT PowerFaultDetected
:1;
4726 USHORT MRLSensorChanged
:1;
4727 USHORT PresenceDetectChanged
:1;
4728 USHORT CommandCompleted
:1;
4729 USHORT MRLSensorState
:1;
4730 USHORT PresenceDetectState
:1;
4731 USHORT ElectromechanicalLockEngaged
:1;
4732 USHORT DataLinkStateChanged
:1;
4736 } PCI_EXPRESS_SLOT_STATUS_REGISTER
, *PPCI_EXPRESS_SLOT_STATUS_REGISTER
;
4738 typedef union _PCI_EXPRESS_ROOT_CONTROL_REGISTER
{
4739 _ANONYMOUS_STRUCT
struct {
4740 USHORT CorrectableSerrEnable
:1;
4741 USHORT NonFatalSerrEnable
:1;
4742 USHORT FatalSerrEnable
:1;
4743 USHORT PMEInterruptEnable
:1;
4744 USHORT CRSSoftwareVisibilityEnable
:1;
4748 } PCI_EXPRESS_ROOT_CONTROL_REGISTER
, *PPCI_EXPRESS_ROOT_CONTROL_REGISTER
;
4750 typedef union _PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
{
4751 _ANONYMOUS_STRUCT
struct {
4752 USHORT CRSSoftwareVisibility
:1;
4756 } PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
;
4758 typedef union _PCI_EXPRESS_ROOT_STATUS_REGISTER
{
4759 _ANONYMOUS_STRUCT
struct {
4760 ULONG PMERequestorId
:16;
4766 } PCI_EXPRESS_ROOT_STATUS_REGISTER
, *PPCI_EXPRESS_ROOT_STATUS_REGISTER
;
4768 typedef struct _PCI_EXPRESS_CAPABILITY
{
4769 PCI_CAPABILITIES_HEADER Header
;
4770 PCI_EXPRESS_CAPABILITIES_REGISTER ExpressCapabilities
;
4771 PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER DeviceCapabilities
;
4772 PCI_EXPRESS_DEVICE_CONTROL_REGISTER DeviceControl
;
4773 PCI_EXPRESS_DEVICE_STATUS_REGISTER DeviceStatus
;
4774 PCI_EXPRESS_LINK_CAPABILITIES_REGISTER LinkCapabilities
;
4775 PCI_EXPRESS_LINK_CONTROL_REGISTER LinkControl
;
4776 PCI_EXPRESS_LINK_STATUS_REGISTER LinkStatus
;
4777 PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER SlotCapabilities
;
4778 PCI_EXPRESS_SLOT_CONTROL_REGISTER SlotControl
;
4779 PCI_EXPRESS_SLOT_STATUS_REGISTER SlotStatus
;
4780 PCI_EXPRESS_ROOT_CONTROL_REGISTER RootControl
;
4781 PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER RootCapabilities
;
4782 PCI_EXPRESS_ROOT_STATUS_REGISTER RootStatus
;
4783 } PCI_EXPRESS_CAPABILITY
, *PPCI_EXPRESS_CAPABILITY
;
4788 } PCI_EXPRESS_MRL_STATE
;
4793 } PCI_EXPRESS_CARD_PRESENCE
;
4799 } PCI_EXPRESS_INDICATOR_STATE
;
4804 } PCI_EXPRESS_POWER_STATE
;
4807 L0sEntrySupport
= 1,
4808 L0sAndL1EntrySupport
= 3
4809 } PCI_EXPRESS_ASPM_SUPPORT
;
4812 L0sAndL1EntryDisabled
,
4815 L0sAndL1EntryEnabled
4816 } PCI_EXPRESS_ASPM_CONTROL
;
4827 } PCI_EXPRESS_L0s_EXIT_LATENCY
;
4838 } PCI_EXPRESS_L1_EXIT_LATENCY
;
4841 PciExpressEndpoint
= 0,
4842 PciExpressLegacyEndpoint
,
4843 PciExpressRootPort
= 4,
4844 PciExpressUpstreamSwitchPort
,
4845 PciExpressDownstreamSwitchPort
,
4846 PciExpressToPciXBridge
,
4847 PciXToExpressBridge
,
4848 PciExpressRootComplexIntegratedEndpoint
,
4849 PciExpressRootComplexEventCollector
4850 } PCI_EXPRESS_DEVICE_TYPE
;
4853 MaxPayload128Bytes
= 0,
4856 MaxPayload1024Bytes
,
4857 MaxPayload2048Bytes
,
4859 } PCI_EXPRESS_MAX_PAYLOAD_SIZE
;
4861 typedef union _PCI_EXPRESS_PME_REQUESTOR_ID
{
4862 _ANONYMOUS_STRUCT
struct {
4863 USHORT FunctionNumber
:3;
4864 USHORT DeviceNumber
:5;
4868 } PCI_EXPRESS_PME_REQUESTOR_ID
, *PPCI_EXPRESS_PME_REQUESTOR_ID
;
4870 typedef enum _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE
{
4871 ResourceTypeSingle
= 0,
4873 ResourceTypeExtendedCounterConfiguration
,
4874 ResourceTypeOverflow
,
4876 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE
;
4878 typedef struct _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
{
4879 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE Type
;
4883 ULONG ExtendedRegisterAddress
;
4889 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
, *PPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
;
4891 typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST
{
4893 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors
[ANYSIZE_ARRAY
];
4894 } PHYSICAL_COUNTER_RESOURCE_LIST
, *PPHYSICAL_COUNTER_RESOURCE_LIST
;
4897 (NTAPI
*PciPin2Line
)(
4898 _In_
struct _BUS_HANDLER
*BusHandler
,
4899 _In_
struct _BUS_HANDLER
*RootHandler
,
4900 _In_ PCI_SLOT_NUMBER SlotNumber
,
4901 _In_ PPCI_COMMON_CONFIG PciData
);
4904 (NTAPI
*PciLine2Pin
)(
4905 _In_
struct _BUS_HANDLER
*BusHandler
,
4906 _In_
struct _BUS_HANDLER
*RootHandler
,
4907 _In_ PCI_SLOT_NUMBER SlotNumber
,
4908 _In_ PPCI_COMMON_CONFIG PciNewData
,
4909 _In_ PPCI_COMMON_CONFIG PciOldData
);
4912 (NTAPI
*PciReadWriteConfig
)(
4913 _In_
struct _BUS_HANDLER
*BusHandler
,
4914 _In_ PCI_SLOT_NUMBER Slot
,
4915 _In_reads_bytes_(Length
) PVOID Buffer
,
4919 #define PCI_DATA_TAG ' ICP'
4920 #define PCI_DATA_VERSION 1
4922 typedef struct _PCIBUSDATA
{
4925 PciReadWriteConfig ReadConfig
;
4926 PciReadWriteConfig WriteConfig
;
4927 PciPin2Line Pin2Line
;
4928 PciLine2Pin Line2Pin
;
4929 PCI_SLOT_NUMBER ParentSlot
;
4931 } PCIBUSDATA
, *PPCIBUSDATA
;
4933 #ifndef _PCIINTRF_X_
4934 #define _PCIINTRF_X_
4937 (NTAPI
*PCI_READ_WRITE_CONFIG
)(
4939 _In_ ULONG BusOffset
,
4941 _In_reads_bytes_(Length
) PVOID Buffer
,
4946 (NTAPI
*PCI_PIN_TO_LINE
)(
4948 _In_ PPCI_COMMON_CONFIG PciData
);
4951 (NTAPI
*PCI_LINE_TO_PIN
)(
4953 _In_ PPCI_COMMON_CONFIG PciNewData
,
4954 _In_ PPCI_COMMON_CONFIG PciOldData
);
4957 (NTAPI
*PCI_ROOT_BUS_CAPABILITY
)(
4959 _Out_ PPCI_ROOT_BUS_HARDWARE_CAPABILITY HardwareCapability
);
4962 (NTAPI
*PCI_EXPRESS_WAKE_CONTROL
)(
4964 _In_ BOOLEAN EnableWake
);
4966 typedef struct _PCI_BUS_INTERFACE_STANDARD
{
4970 PINTERFACE_REFERENCE InterfaceReference
;
4971 PINTERFACE_DEREFERENCE InterfaceDereference
;
4972 PCI_READ_WRITE_CONFIG ReadConfig
;
4973 PCI_READ_WRITE_CONFIG WriteConfig
;
4974 PCI_PIN_TO_LINE PinToLine
;
4975 PCI_LINE_TO_PIN LineToPin
;
4976 PCI_ROOT_BUS_CAPABILITY RootBusCapability
;
4977 PCI_EXPRESS_WAKE_CONTROL ExpressWakeControl
;
4978 } PCI_BUS_INTERFACE_STANDARD
, *PPCI_BUS_INTERFACE_STANDARD
;
4980 #define PCI_BUS_INTERFACE_STANDARD_VERSION 1
4982 #endif /* _PCIINTRF_X_ */
4984 #if (NTDDI_VERSION >= NTDDI_WIN7)
4986 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX 0x00004000
4987 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX 0x00008000
4988 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \
4989 (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \
4990 FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX)
4992 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200
4993 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300
4994 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300
4998 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 0x00000200
4999 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 0x00000300
5000 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 0x00000300
5002 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL
5003 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL
5004 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK
5006 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5008 #define FILE_CHARACTERISTICS_PROPAGATED (FILE_REMOVABLE_MEDIA | \
5009 FILE_READ_ONLY_DEVICE | \
5010 FILE_FLOPPY_DISKETTE | \
5011 FILE_WRITE_ONCE_MEDIA | \
5012 FILE_DEVICE_SECURE_OPEN)
5014 typedef struct _FILE_ALIGNMENT_INFORMATION
{
5015 ULONG AlignmentRequirement
;
5016 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
5018 typedef struct _FILE_NAME_INFORMATION
{
5019 ULONG FileNameLength
;
5021 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
5024 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
5025 ULONG FileAttributes
;
5027 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
5029 typedef struct _FILE_DISPOSITION_INFORMATION
{
5031 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
5033 typedef struct _FILE_END_OF_FILE_INFORMATION
{
5034 LARGE_INTEGER EndOfFile
;
5035 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
5037 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
5038 LARGE_INTEGER ValidDataLength
;
5039 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
5041 typedef struct _FILE_FS_LABEL_INFORMATION
{
5042 ULONG VolumeLabelLength
;
5043 WCHAR VolumeLabel
[1];
5044 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
5046 typedef struct _FILE_FS_VOLUME_INFORMATION
{
5047 LARGE_INTEGER VolumeCreationTime
;
5048 ULONG VolumeSerialNumber
;
5049 ULONG VolumeLabelLength
;
5050 BOOLEAN SupportsObjects
;
5051 WCHAR VolumeLabel
[1];
5052 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
5054 typedef struct _FILE_FS_SIZE_INFORMATION
{
5055 LARGE_INTEGER TotalAllocationUnits
;
5056 LARGE_INTEGER AvailableAllocationUnits
;
5057 ULONG SectorsPerAllocationUnit
;
5058 ULONG BytesPerSector
;
5059 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
5061 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
{
5062 LARGE_INTEGER TotalAllocationUnits
;
5063 LARGE_INTEGER CallerAvailableAllocationUnits
;
5064 LARGE_INTEGER ActualAvailableAllocationUnits
;
5065 ULONG SectorsPerAllocationUnit
;
5066 ULONG BytesPerSector
;
5067 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
5069 typedef struct _FILE_FS_OBJECTID_INFORMATION
{
5071 UCHAR ExtendedInfo
[48];
5072 } FILE_FS_OBJECTID_INFORMATION
, *PFILE_FS_OBJECTID_INFORMATION
;
5074 typedef union _FILE_SEGMENT_ELEMENT
{
5076 ULONGLONG Alignment
;
5077 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
5079 #define IOCTL_AVIO_ALLOCATE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5080 #define IOCTL_AVIO_FREE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5081 #define IOCTL_AVIO_MODIFY_STREAM CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5083 typedef enum _BUS_DATA_TYPE
{
5084 ConfigurationSpaceUndefined
= -1,
5092 PCMCIAConfiguration
,
5095 PNPISAConfiguration
,
5096 SgiInternalConfiguration
,
5098 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
5100 /* Some Server 2003 DDK definitions */
5101 #define PCI_INT_ROUTE_INTRF_STANDARD_VER 1
5104 (NTAPI
*PLEGACY_DEVICE_DETECTION_HANDLER
)(
5106 IN INTERFACE_TYPE LegacyBusType
,
5108 IN ULONG SlotNumber
,
5109 OUT PDEVICE_OBJECT
*PhysicalDeviceObject
);
5111 typedef struct _ROUTING_TOKEN
{
5115 } ROUTING_TOKEN
, *PROUTING_TOKEN
;
5118 (NTAPI
*PGET_INTERRUPT_ROUTING
)(
5119 IN PDEVICE_OBJECT Pdo
,
5122 OUT UCHAR
*InterruptLine
,
5123 OUT UCHAR
*InterruptPin
,
5124 OUT UCHAR
*ClassCode
,
5125 OUT UCHAR
*SubClassCode
,
5126 OUT PDEVICE_OBJECT
*ParentPdo
,
5127 OUT ROUTING_TOKEN
*RoutingToken
,
5131 (NTAPI
*PSET_INTERRUPT_ROUTING_TOKEN
)(
5132 IN PDEVICE_OBJECT Pdo
,
5133 IN PROUTING_TOKEN RoutingToken
);
5136 (NTAPI
*PUPDATE_INTERRUPT_LINE
)(
5137 IN PDEVICE_OBJECT Pdo
,
5138 IN UCHAR LineRegister
);
5140 typedef struct _INT_ROUTE_INTERFACE_STANDARD
{
5144 PINTERFACE_REFERENCE InterfaceReference
;
5145 PINTERFACE_DEREFERENCE InterfaceDereference
;
5146 PGET_INTERRUPT_ROUTING GetInterruptRouting
;
5147 PSET_INTERRUPT_ROUTING_TOKEN SetInterruptRoutingToken
;
5148 PUPDATE_INTERRUPT_LINE UpdateInterruptLine
;
5149 } INT_ROUTE_INTERFACE_STANDARD
, *PINT_ROUTE_INTERFACE_STANDARD
;
5151 typedef struct _LEGACY_DEVICE_DETECTION_INTERFACE
{
5155 PINTERFACE_REFERENCE InterfaceReference
;
5156 PINTERFACE_DEREFERENCE InterfaceDereference
;
5157 PLEGACY_DEVICE_DETECTION_HANDLER LegacyDeviceDetection
;
5158 } LEGACY_DEVICE_DETECTION_INTERFACE
, *PLEGACY_DEVICE_DETECTION_INTERFACE
;
5160 /* FIXME : These definitions don't exist in public headers */
5162 #define PCI_CB_INTRF_VERSION 1
5163 #define PCI_PME_INTRF_STANDARD_VER 1
5164 #define PNP_LOCATION_INTERFACE_VERSION 1
5166 DEFINE_GUID(GUID_PCI_CARDBUS_INTERFACE_PRIVATE
, 0xcca82f31, 0x54d6, 0x11d1, 0x82, 0x24, 0x00, 0xa0, 0xc9, 0x32, 0x43, 0x85);
5167 DEFINE_GUID(GUID_PCI_PME_INTERFACE
, 0xaac7e6ac, 0xbb0b, 0x11d2, 0xb4, 0x84, 0x00, 0xc0, 0x4f, 0x72, 0xde, 0x8b);
5170 (NTAPI
*PCARDBUSADD
)(
5171 IN PDEVICE_OBJECT DeviceObject
,
5172 IN OUT PVOID
*DeviceContext
);
5175 (NTAPI
*PCARDBUSDELETE
)(
5176 IN PVOID DeviceContext
);
5179 (NTAPI
*PCARDBUSPCIDISPATCH
)(
5180 IN PVOID DeviceContext
,
5184 (NTAPI
*PPME_SET_PME_ENABLE
)(
5185 IN PDEVICE_OBJECT Pdo
,
5186 IN BOOLEAN PmeEnable
);
5189 (NTAPI
*PPME_CLEAR_PME_STATUS
)(
5190 IN PDEVICE_OBJECT Pdo
);
5193 (NTAPI
*PPME_GET_INFORMATION
)(
5194 IN PDEVICE_OBJECT Pdo
,
5195 OUT PBOOLEAN PmeCapable
,
5196 OUT PBOOLEAN PmeStatus
,
5197 OUT PBOOLEAN PmeEnable
);
5199 typedef struct _PCI_CARDBUS_INTERFACE_PRIVATE
{
5203 PINTERFACE_REFERENCE InterfaceReference
;
5204 PINTERFACE_DEREFERENCE InterfaceDereference
;
5205 PDRIVER_OBJECT DriverObject
;
5206 PCARDBUSADD AddCardBus
;
5207 PCARDBUSDELETE DeleteCardBus
;
5208 PCARDBUSPCIDISPATCH DispatchPnp
;
5209 } PCI_CARDBUS_INTERFACE_PRIVATE
, *PPCI_CARDBUS_INTERFACE_PRIVATE
;
5211 typedef struct _PCI_PME_INTERFACE
{
5215 PINTERFACE_REFERENCE InterfaceReference
;
5216 PINTERFACE_DEREFERENCE InterfaceDereference
;
5217 PPME_GET_INFORMATION GetPmeInformation
;
5218 PPME_CLEAR_PME_STATUS ClearPmeStatus
;
5219 PPME_SET_PME_ENABLE UpdateEnable
;
5220 } PCI_PME_INTERFACE
, *PPCI_PME_INTERFACE
;
5225 #define FILE_OPLOCK_BROKEN_TO_LEVEL_2 0x00000007
5226 #define FILE_OPLOCK_BROKEN_TO_NONE 0x00000008
5227 #define FILE_OPBATCH_BREAK_UNDERWAY 0x00000009
5229 /* also in winnt.h */
5230 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
5231 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
5232 #define FILE_NOTIFY_CHANGE_NAME 0x00000003
5233 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
5234 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
5235 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
5236 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
5237 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
5238 #define FILE_NOTIFY_CHANGE_EA 0x00000080
5239 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
5240 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
5241 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
5242 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
5243 #define FILE_NOTIFY_VALID_MASK 0x00000fff
5245 #define FILE_ACTION_ADDED 0x00000001
5246 #define FILE_ACTION_REMOVED 0x00000002
5247 #define FILE_ACTION_MODIFIED 0x00000003
5248 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
5249 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
5250 #define FILE_ACTION_ADDED_STREAM 0x00000006
5251 #define FILE_ACTION_REMOVED_STREAM 0x00000007
5252 #define FILE_ACTION_MODIFIED_STREAM 0x00000008
5253 #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
5254 #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A
5255 #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B
5258 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
5259 #define FILE_PIPE_MESSAGE_TYPE 0x00000001
5261 #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS 0x00000000
5262 #define FILE_PIPE_REJECT_REMOTE_CLIENTS 0x00000002
5264 #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS 0x00000000
5265 #define FILE_PIPE_REJECT_REMOTE_CLIENTS 0x00000002
5266 #define FILE_PIPE_TYPE_VALID_MASK 0x00000003
5268 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
5269 #define FILE_PIPE_MESSAGE_MODE 0x00000001
5271 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
5272 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
5274 #define FILE_PIPE_INBOUND 0x00000000
5275 #define FILE_PIPE_OUTBOUND 0x00000001
5276 #define FILE_PIPE_FULL_DUPLEX 0x00000002
5278 #define FILE_PIPE_DISCONNECTED_STATE 0x00000001
5279 #define FILE_PIPE_LISTENING_STATE 0x00000002
5280 #define FILE_PIPE_CONNECTED_STATE 0x00000003
5281 #define FILE_PIPE_CLOSING_STATE 0x00000004
5283 #define FILE_PIPE_CLIENT_END 0x00000000
5284 #define FILE_PIPE_SERVER_END 0x00000001
5286 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
5287 #define FILE_CASE_PRESERVED_NAMES 0x00000002
5288 #define FILE_UNICODE_ON_DISK 0x00000004
5289 #define FILE_PERSISTENT_ACLS 0x00000008
5290 #define FILE_FILE_COMPRESSION 0x00000010
5291 #define FILE_VOLUME_QUOTAS 0x00000020
5292 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
5293 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
5294 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
5295 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
5296 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
5297 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
5298 #define FILE_NAMED_STREAMS 0x00040000
5299 #define FILE_READ_ONLY_VOLUME 0x00080000
5300 #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
5301 #define FILE_SUPPORTS_TRANSACTIONS 0x00200000
5302 #define FILE_SUPPORTS_HARD_LINKS 0x00400000
5303 #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
5304 #define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
5305 #define FILE_SUPPORTS_USN_JOURNAL 0x02000000
5306 #define FILE_SUPPORTS_INTEGRITY_STREAMS 0x04000000
5307 #define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000
5308 #define FILE_SUPPORTS_SPARSE_VDL 0x10000000
5309 #define FILE_DAX_VOLUME 0x20000000
5311 #define FILE_NEED_EA 0x00000080
5313 #define FILE_EA_TYPE_BINARY 0xfffe
5314 #define FILE_EA_TYPE_ASCII 0xfffd
5315 #define FILE_EA_TYPE_BITMAP 0xfffb
5316 #define FILE_EA_TYPE_METAFILE 0xfffa
5317 #define FILE_EA_TYPE_ICON 0xfff9
5318 #define FILE_EA_TYPE_EA 0xffee
5319 #define FILE_EA_TYPE_MVMT 0xffdf
5320 #define FILE_EA_TYPE_MVST 0xffde
5321 #define FILE_EA_TYPE_ASN1 0xffdd
5322 #define FILE_EA_TYPE_FAMILY_IDS 0xff01
5324 typedef struct _FILE_NOTIFY_INFORMATION
{
5325 ULONG NextEntryOffset
;
5327 ULONG FileNameLength
;
5329 } FILE_NOTIFY_INFORMATION
, *PFILE_NOTIFY_INFORMATION
;
5331 typedef struct _FILE_DIRECTORY_INFORMATION
{
5332 ULONG NextEntryOffset
;
5334 LARGE_INTEGER CreationTime
;
5335 LARGE_INTEGER LastAccessTime
;
5336 LARGE_INTEGER LastWriteTime
;
5337 LARGE_INTEGER ChangeTime
;
5338 LARGE_INTEGER EndOfFile
;
5339 LARGE_INTEGER AllocationSize
;
5340 ULONG FileAttributes
;
5341 ULONG FileNameLength
;
5343 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
5345 typedef struct _FILE_FULL_DIR_INFORMATION
{
5346 ULONG NextEntryOffset
;
5348 LARGE_INTEGER CreationTime
;
5349 LARGE_INTEGER LastAccessTime
;
5350 LARGE_INTEGER LastWriteTime
;
5351 LARGE_INTEGER ChangeTime
;
5352 LARGE_INTEGER EndOfFile
;
5353 LARGE_INTEGER AllocationSize
;
5354 ULONG FileAttributes
;
5355 ULONG FileNameLength
;
5358 } FILE_FULL_DIR_INFORMATION
, *PFILE_FULL_DIR_INFORMATION
;
5360 typedef struct _FILE_ID_FULL_DIR_INFORMATION
{
5361 ULONG NextEntryOffset
;
5363 LARGE_INTEGER CreationTime
;
5364 LARGE_INTEGER LastAccessTime
;
5365 LARGE_INTEGER LastWriteTime
;
5366 LARGE_INTEGER ChangeTime
;
5367 LARGE_INTEGER EndOfFile
;
5368 LARGE_INTEGER AllocationSize
;
5369 ULONG FileAttributes
;
5370 ULONG FileNameLength
;
5372 LARGE_INTEGER FileId
;
5374 } FILE_ID_FULL_DIR_INFORMATION
, *PFILE_ID_FULL_DIR_INFORMATION
;
5376 typedef struct _FILE_BOTH_DIR_INFORMATION
{
5377 ULONG NextEntryOffset
;
5379 LARGE_INTEGER CreationTime
;
5380 LARGE_INTEGER LastAccessTime
;
5381 LARGE_INTEGER LastWriteTime
;
5382 LARGE_INTEGER ChangeTime
;
5383 LARGE_INTEGER EndOfFile
;
5384 LARGE_INTEGER AllocationSize
;
5385 ULONG FileAttributes
;
5386 ULONG FileNameLength
;
5388 CCHAR ShortNameLength
;
5389 WCHAR ShortName
[12];
5391 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
5393 typedef struct _FILE_ID_BOTH_DIR_INFORMATION
{
5394 ULONG NextEntryOffset
;
5396 LARGE_INTEGER CreationTime
;
5397 LARGE_INTEGER LastAccessTime
;
5398 LARGE_INTEGER LastWriteTime
;
5399 LARGE_INTEGER ChangeTime
;
5400 LARGE_INTEGER EndOfFile
;
5401 LARGE_INTEGER AllocationSize
;
5402 ULONG FileAttributes
;
5403 ULONG FileNameLength
;
5405 CCHAR ShortNameLength
;
5406 WCHAR ShortName
[12];
5407 LARGE_INTEGER FileId
;
5409 } FILE_ID_BOTH_DIR_INFORMATION
, *PFILE_ID_BOTH_DIR_INFORMATION
;
5411 typedef struct _FILE_NAMES_INFORMATION
{
5412 ULONG NextEntryOffset
;
5414 ULONG FileNameLength
;
5416 } FILE_NAMES_INFORMATION
, *PFILE_NAMES_INFORMATION
;
5418 typedef struct _FILE_ID_GLOBAL_TX_DIR_INFORMATION
{
5419 ULONG NextEntryOffset
;
5421 LARGE_INTEGER CreationTime
;
5422 LARGE_INTEGER LastAccessTime
;
5423 LARGE_INTEGER LastWriteTime
;
5424 LARGE_INTEGER ChangeTime
;
5425 LARGE_INTEGER EndOfFile
;
5426 LARGE_INTEGER AllocationSize
;
5427 ULONG FileAttributes
;
5428 ULONG FileNameLength
;
5429 LARGE_INTEGER FileId
;
5430 GUID LockingTransactionId
;
5433 } FILE_ID_GLOBAL_TX_DIR_INFORMATION
, *PFILE_ID_GLOBAL_TX_DIR_INFORMATION
;
5435 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_WRITELOCKED 0x00000001
5436 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_TO_TX 0x00000002
5437 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_OUTSIDE_TX 0x00000004
5439 typedef struct _FILE_OBJECTID_INFORMATION
{
5440 LONGLONG FileReference
;
5442 _ANONYMOUS_UNION
union {
5443 _ANONYMOUS_STRUCT
struct {
5444 UCHAR BirthVolumeId
[16];
5445 UCHAR BirthObjectId
[16];
5448 UCHAR ExtendedInfo
[48];
5450 } FILE_OBJECTID_INFORMATION
, *PFILE_OBJECTID_INFORMATION
;
5452 #define ANSI_DOS_STAR ('<')
5453 #define ANSI_DOS_QM ('>')
5454 #define ANSI_DOS_DOT ('"')
5456 #define DOS_STAR (L'<')
5457 #define DOS_QM (L'>')
5458 #define DOS_DOT (L'"')
5460 typedef struct _FILE_INTERNAL_INFORMATION
{
5461 LARGE_INTEGER IndexNumber
;
5462 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
5464 typedef struct _FILE_EA_INFORMATION
{
5466 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
5468 typedef struct _FILE_ACCESS_INFORMATION
{
5469 ACCESS_MASK AccessFlags
;
5470 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
5472 typedef struct _FILE_MODE_INFORMATION
{
5474 } FILE_MODE_INFORMATION
, *PFILE_MODE_INFORMATION
;
5476 typedef struct _FILE_ALL_INFORMATION
{
5477 FILE_BASIC_INFORMATION BasicInformation
;
5478 FILE_STANDARD_INFORMATION StandardInformation
;
5479 FILE_INTERNAL_INFORMATION InternalInformation
;
5480 FILE_EA_INFORMATION EaInformation
;
5481 FILE_ACCESS_INFORMATION AccessInformation
;
5482 FILE_POSITION_INFORMATION PositionInformation
;
5483 FILE_MODE_INFORMATION ModeInformation
;
5484 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
5485 FILE_NAME_INFORMATION NameInformation
;
5486 } FILE_ALL_INFORMATION
, *PFILE_ALL_INFORMATION
;
5488 typedef struct _FILE_ALLOCATION_INFORMATION
{
5489 LARGE_INTEGER AllocationSize
;
5490 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
5492 typedef struct _FILE_COMPRESSION_INFORMATION
{
5493 LARGE_INTEGER CompressedFileSize
;
5494 USHORT CompressionFormat
;
5495 UCHAR CompressionUnitShift
;
5499 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
5501 typedef struct _FILE_LINK_INFORMATION
{
5502 BOOLEAN ReplaceIfExists
;
5503 HANDLE RootDirectory
;
5504 ULONG FileNameLength
;
5506 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
5508 typedef struct _FILE_MOVE_CLUSTER_INFORMATION
{
5510 HANDLE RootDirectory
;
5511 ULONG FileNameLength
;
5513 } FILE_MOVE_CLUSTER_INFORMATION
, *PFILE_MOVE_CLUSTER_INFORMATION
;
5515 typedef struct _FILE_RENAME_INFORMATION
{
5516 BOOLEAN ReplaceIfExists
;
5517 HANDLE RootDirectory
;
5518 ULONG FileNameLength
;
5520 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
5522 typedef struct _FILE_STREAM_INFORMATION
{
5523 ULONG NextEntryOffset
;
5524 ULONG StreamNameLength
;
5525 LARGE_INTEGER StreamSize
;
5526 LARGE_INTEGER StreamAllocationSize
;
5527 WCHAR StreamName
[1];
5528 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
5530 typedef struct _FILE_TRACKING_INFORMATION
{
5531 HANDLE DestinationFile
;
5532 ULONG ObjectInformationLength
;
5533 CHAR ObjectInformation
[1];
5534 } FILE_TRACKING_INFORMATION
, *PFILE_TRACKING_INFORMATION
;
5536 typedef struct _FILE_COMPLETION_INFORMATION
{
5539 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
5541 typedef struct _FILE_PIPE_INFORMATION
{
5543 ULONG CompletionMode
;
5544 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
5546 typedef struct _FILE_PIPE_LOCAL_INFORMATION
{
5547 ULONG NamedPipeType
;
5548 ULONG NamedPipeConfiguration
;
5549 ULONG MaximumInstances
;
5550 ULONG CurrentInstances
;
5552 ULONG ReadDataAvailable
;
5553 ULONG OutboundQuota
;
5554 ULONG WriteQuotaAvailable
;
5555 ULONG NamedPipeState
;
5557 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
5559 typedef struct _FILE_PIPE_REMOTE_INFORMATION
{
5560 LARGE_INTEGER CollectDataTime
;
5561 ULONG MaximumCollectionCount
;
5562 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
5564 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
{
5565 ULONG MaximumMessageSize
;
5566 ULONG MailslotQuota
;
5567 ULONG NextMessageSize
;
5568 ULONG MessagesAvailable
;
5569 LARGE_INTEGER ReadTimeout
;
5570 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
5572 typedef struct _FILE_MAILSLOT_SET_INFORMATION
{
5573 PLARGE_INTEGER ReadTimeout
;
5574 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
5576 typedef struct _FILE_REPARSE_POINT_INFORMATION
{
5577 LONGLONG FileReference
;
5579 } FILE_REPARSE_POINT_INFORMATION
, *PFILE_REPARSE_POINT_INFORMATION
;
5581 typedef struct _FILE_LINK_ENTRY_INFORMATION
{
5582 ULONG NextEntryOffset
;
5583 LONGLONG ParentFileId
;
5584 ULONG FileNameLength
;
5586 } FILE_LINK_ENTRY_INFORMATION
, *PFILE_LINK_ENTRY_INFORMATION
;
5588 typedef struct _FILE_LINKS_INFORMATION
{
5590 ULONG EntriesReturned
;
5591 FILE_LINK_ENTRY_INFORMATION Entry
;
5592 } FILE_LINKS_INFORMATION
, *PFILE_LINKS_INFORMATION
;
5594 typedef struct _FILE_NETWORK_PHYSICAL_NAME_INFORMATION
{
5595 ULONG FileNameLength
;
5597 } FILE_NETWORK_PHYSICAL_NAME_INFORMATION
, *PFILE_NETWORK_PHYSICAL_NAME_INFORMATION
;
5599 typedef struct _FILE_STANDARD_LINK_INFORMATION
{
5600 ULONG NumberOfAccessibleLinks
;
5601 ULONG TotalNumberOfLinks
;
5602 BOOLEAN DeletePending
;
5604 } FILE_STANDARD_LINK_INFORMATION
, *PFILE_STANDARD_LINK_INFORMATION
;
5606 typedef struct _FILE_GET_EA_INFORMATION
{
5607 ULONG NextEntryOffset
;
5610 } FILE_GET_EA_INFORMATION
, *PFILE_GET_EA_INFORMATION
;
5612 #define REMOTE_PROTOCOL_FLAG_LOOPBACK 0x00000001
5613 #define REMOTE_PROTOCOL_FLAG_OFFLINE 0x00000002
5615 typedef struct _FILE_REMOTE_PROTOCOL_INFORMATION
{
5616 USHORT StructureVersion
;
5617 USHORT StructureSize
;
5619 USHORT ProtocolMajorVersion
;
5620 USHORT ProtocolMinorVersion
;
5621 USHORT ProtocolRevision
;
5629 } ProtocolSpecificReserved
;
5630 } FILE_REMOTE_PROTOCOL_INFORMATION
, *PFILE_REMOTE_PROTOCOL_INFORMATION
;
5632 typedef struct _FILE_GET_QUOTA_INFORMATION
{
5633 ULONG NextEntryOffset
;
5636 } FILE_GET_QUOTA_INFORMATION
, *PFILE_GET_QUOTA_INFORMATION
;
5638 typedef struct _FILE_QUOTA_INFORMATION
{
5639 ULONG NextEntryOffset
;
5641 LARGE_INTEGER ChangeTime
;
5642 LARGE_INTEGER QuotaUsed
;
5643 LARGE_INTEGER QuotaThreshold
;
5644 LARGE_INTEGER QuotaLimit
;
5646 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
5648 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
{
5649 ULONG FileSystemAttributes
;
5650 ULONG MaximumComponentNameLength
;
5651 ULONG FileSystemNameLength
;
5652 WCHAR FileSystemName
[1];
5653 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
5655 typedef struct _FILE_FS_DRIVER_PATH_INFORMATION
{
5656 BOOLEAN DriverInPath
;
5657 ULONG DriverNameLength
;
5658 WCHAR DriverName
[1];
5659 } FILE_FS_DRIVER_PATH_INFORMATION
, *PFILE_FS_DRIVER_PATH_INFORMATION
;
5661 typedef struct _FILE_FS_VOLUME_FLAGS_INFORMATION
{
5663 } FILE_FS_VOLUME_FLAGS_INFORMATION
, *PFILE_FS_VOLUME_FLAGS_INFORMATION
;
5665 #define FILE_VC_QUOTA_NONE 0x00000000
5666 #define FILE_VC_QUOTA_TRACK 0x00000001
5667 #define FILE_VC_QUOTA_ENFORCE 0x00000002
5668 #define FILE_VC_QUOTA_MASK 0x00000003
5669 #define FILE_VC_CONTENT_INDEX_DISABLED 0x00000008
5670 #define FILE_VC_LOG_QUOTA_THRESHOLD 0x00000010
5671 #define FILE_VC_LOG_QUOTA_LIMIT 0x00000020
5672 #define FILE_VC_LOG_VOLUME_THRESHOLD 0x00000040
5673 #define FILE_VC_LOG_VOLUME_LIMIT 0x00000080
5674 #define FILE_VC_QUOTAS_INCOMPLETE 0x00000100
5675 #define FILE_VC_QUOTAS_REBUILDING 0x00000200
5676 #define FILE_VC_VALID_MASK 0x000003ff
5678 typedef struct _FILE_FS_CONTROL_INFORMATION
{
5679 LARGE_INTEGER FreeSpaceStartFiltering
;
5680 LARGE_INTEGER FreeSpaceThreshold
;
5681 LARGE_INTEGER FreeSpaceStopFiltering
;
5682 LARGE_INTEGER DefaultQuotaThreshold
;
5683 LARGE_INTEGER DefaultQuotaLimit
;
5684 ULONG FileSystemControlFlags
;
5685 } FILE_FS_CONTROL_INFORMATION
, *PFILE_FS_CONTROL_INFORMATION
;
5687 #ifndef _FILESYSTEMFSCTL_
5688 #define _FILESYSTEMFSCTL_
5690 #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
5691 #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
5692 #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
5693 #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
5694 #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
5695 #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
5696 #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
5697 #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
5698 #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
5699 #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
5700 #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
5701 #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
5702 #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS)
5703 #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
5704 #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
5705 #define FSCTL_SET_BOOTLOADER_ACCESSED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS)
5707 #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
5708 #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
5709 #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
5710 #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
5711 #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
5713 #if (_WIN32_WINNT >= 0x0400)
5715 #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
5716 #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
5717 #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS)
5718 #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS)
5719 #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5720 #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
5721 #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS)
5725 #if (_WIN32_WINNT >= 0x0500)
5727 #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS)
5728 #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5729 #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
5730 #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5731 #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5732 #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
5733 #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5734 #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_ANY_ACCESS)
5735 #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA)
5736 #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_ANY_ACCESS)
5737 #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5738 #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
5739 #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5740 #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA)
5741 #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA)
5742 #define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA)
5743 #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_NEITHER, FILE_ANY_ACCESS)
5744 #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS)
5745 #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_SPECIAL_ACCESS)
5746 #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_SPECIAL_ACCESS)
5747 #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_ANY_ACCESS)
5748 #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_ANY_ACCESS)
5749 #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_ANY_ACCESS)
5750 #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
5751 #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
5752 #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
5753 #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS)
5754 #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
5755 #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
5756 #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
5757 #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA)
5758 #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5762 #if (_WIN32_WINNT >= 0x0600)
5764 #define FSCTL_MAKE_MEDIA_COMPATIBLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA)
5765 #define FSCTL_SET_DEFECT_MANAGEMENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA)
5766 #define FSCTL_QUERY_SPARING_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS)
5767 #define FSCTL_QUERY_ON_DISK_VOLUME_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS)
5768 #define FSCTL_SET_VOLUME_COMPRESSION_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5769 #define FSCTL_TXFS_MODIFY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 81, METHOD_BUFFERED, FILE_WRITE_DATA)
5770 #define FSCTL_TXFS_QUERY_RM_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 82, METHOD_BUFFERED, FILE_READ_DATA)
5771 #define FSCTL_TXFS_ROLLFORWARD_REDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 84, METHOD_BUFFERED, FILE_WRITE_DATA)
5772 #define FSCTL_TXFS_ROLLFORWARD_UNDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 85, METHOD_BUFFERED, FILE_WRITE_DATA)
5773 #define FSCTL_TXFS_START_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 86, METHOD_BUFFERED, FILE_WRITE_DATA)
5774 #define FSCTL_TXFS_SHUTDOWN_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA)
5775 #define FSCTL_TXFS_READ_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 88, METHOD_BUFFERED, FILE_READ_DATA)
5776 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 89, METHOD_BUFFERED, FILE_WRITE_DATA)
5777 #define FSCTL_TXFS_CREATE_SECONDARY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 90, METHOD_BUFFERED, FILE_WRITE_DATA)
5778 #define FSCTL_TXFS_GET_METADATA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 91, METHOD_BUFFERED, FILE_READ_DATA)
5779 #define FSCTL_TXFS_GET_TRANSACTED_VERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 92, METHOD_BUFFERED, FILE_READ_DATA)
5780 #define FSCTL_TXFS_SAVEPOINT_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 94, METHOD_BUFFERED, FILE_WRITE_DATA)
5781 #define FSCTL_TXFS_CREATE_MINIVERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA)
5782 #define FSCTL_TXFS_TRANSACTION_ACTIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 99, METHOD_BUFFERED, FILE_READ_DATA)
5783 #define FSCTL_SET_ZERO_ON_DEALLOCATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5784 #define FSCTL_SET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS)
5785 #define FSCTL_GET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS)
5786 #define FSCTL_WAIT_FOR_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS)
5787 #define FSCTL_INITIATE_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS)
5788 #define FSCTL_CSC_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER, FILE_ANY_ACCESS)
5789 #define FSCTL_SHRINK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5790 #define FSCTL_SET_SHORT_NAME_BEHAVIOR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS)
5791 #define FSCTL_DFSR_SET_GHOST_HANDLE_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS)
5792 #define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES \
5793 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA)
5794 #define FSCTL_TXFS_LIST_TRANSACTIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA)
5795 #define FSCTL_QUERY_PAGEFILE_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS)
5796 #define FSCTL_RESET_VOLUME_ALLOCATION_HINTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 123, METHOD_BUFFERED, FILE_ANY_ACCESS)
5797 #define FSCTL_TXFS_READ_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 126, METHOD_BUFFERED, FILE_ANY_ACCESS)
5801 #if (_WIN32_WINNT >= 0x0601)
5803 #define FSCTL_QUERY_DEPENDENT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 124, METHOD_BUFFERED, FILE_ANY_ACCESS)
5804 #define FSCTL_SD_GLOBAL_CHANGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 125, METHOD_BUFFERED, FILE_ANY_ACCESS)
5805 #define FSCTL_LOOKUP_STREAM_FROM_CLUSTER CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 127, METHOD_BUFFERED, FILE_ANY_ACCESS)
5806 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 128, METHOD_BUFFERED, FILE_ANY_ACCESS)
5807 #define FSCTL_FILE_TYPE_NOTIFICATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 129, METHOD_BUFFERED, FILE_ANY_ACCESS)
5808 #define FSCTL_GET_BOOT_AREA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 140, METHOD_BUFFERED, FILE_ANY_ACCESS)
5809 #define FSCTL_GET_RETRIEVAL_POINTER_BASE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 141, METHOD_BUFFERED, FILE_ANY_ACCESS)
5810 #define FSCTL_SET_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS)
5811 #define FSCTL_QUERY_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 143, METHOD_BUFFERED, FILE_ANY_ACCESS)
5812 #define FSCTL_REQUEST_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 144, METHOD_BUFFERED, FILE_ANY_ACCESS)
5813 #define FSCTL_CSV_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 145, METHOD_BUFFERED, FILE_ANY_ACCESS)
5814 #define FSCTL_IS_CSV_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED, FILE_ANY_ACCESS)
5815 #define FSCTL_QUERY_FILE_SYSTEM_RECOGNITION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 147, METHOD_BUFFERED, FILE_ANY_ACCESS)
5816 #define FSCTL_CSV_GET_VOLUME_PATH_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 148, METHOD_BUFFERED, FILE_ANY_ACCESS)
5817 #define FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS)
5818 #define FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 150, METHOD_BUFFERED, FILE_ANY_ACCESS)
5819 #define FSCTL_IS_FILE_ON_CSV_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 151, METHOD_BUFFERED, FILE_ANY_ACCESS)
5820 #define FSCTL_CSV_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 155, METHOD_BUFFERED, FILE_ANY_ACCESS)
5822 typedef struct _CSV_NAMESPACE_INFO
{
5825 LARGE_INTEGER StartingOffset
;
5827 } CSV_NAMESPACE_INFO
, *PCSV_NAMESPACE_INFO
;
5829 #define CSV_NAMESPACE_INFO_V1 (sizeof(CSV_NAMESPACE_INFO))
5830 #define CSV_INVALID_DEVICE_NUMBER 0xFFFFFFFF
5834 #if (_WIN32_WINNT >= 0x0602)
5836 #define FSCTL_FILE_LEVEL_TRIM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 130, METHOD_BUFFERED, FILE_WRITE_DATA)
5837 #define FSCTL_CORRUPTION_HANDLING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 152, METHOD_BUFFERED, FILE_ANY_ACCESS)
5838 #define FSCTL_OFFLOAD_READ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 153, METHOD_BUFFERED, FILE_READ_ACCESS)
5839 #define FSCTL_OFFLOAD_WRITE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 154, METHOD_BUFFERED, FILE_WRITE_ACCESS)
5840 #define FSCTL_SET_PURGE_FAILURE_MODE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 156, METHOD_BUFFERED, FILE_ANY_ACCESS)
5841 #define FSCTL_QUERY_FILE_LAYOUT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 157, METHOD_NEITHER, FILE_ANY_ACCESS)
5842 #define FSCTL_IS_VOLUME_OWNED_BYCSVFS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 158, METHOD_BUFFERED, FILE_ANY_ACCESS)
5843 #define FSCTL_GET_INTEGRITY_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 159, METHOD_BUFFERED, FILE_ANY_ACCESS)
5844 #define FSCTL_SET_INTEGRITY_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 160, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
5845 #define FSCTL_QUERY_FILE_REGIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 161, METHOD_BUFFERED, FILE_ANY_ACCESS)
5846 #define FSCTL_DEDUP_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 165, METHOD_BUFFERED, FILE_ANY_ACCESS)
5847 #define FSCTL_DEDUP_QUERY_FILE_HASHES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 166, METHOD_NEITHER, FILE_READ_DATA)
5848 #define FSCTL_RKF_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 171, METHOD_NEITHER, FILE_ANY_ACCESS)
5849 #define FSCTL_SCRUB_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 172, METHOD_BUFFERED, FILE_ANY_ACCESS)
5850 #define FSCTL_REPAIR_COPIES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 173, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
5851 #define FSCTL_DISABLE_LOCAL_BUFFERING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 174, METHOD_BUFFERED, FILE_ANY_ACCESS)
5852 #define FSCTL_CSV_MGMT_LOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 175, METHOD_BUFFERED, FILE_ANY_ACCESS)
5853 #define FSCTL_CSV_QUERY_DOWN_LEVEL_FILE_SYSTEM_CHARACTERISTICS \
5854 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 176, METHOD_BUFFERED, FILE_ANY_ACCESS)
5855 #define FSCTL_ADVANCE_FILE_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 177, METHOD_BUFFERED, FILE_ANY_ACCESS)
5856 #define FSCTL_CSV_SYNC_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 178, METHOD_BUFFERED, FILE_ANY_ACCESS)
5857 #define FSCTL_CSV_QUERY_VETO_FILE_DIRECT_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 179, METHOD_BUFFERED, FILE_ANY_ACCESS)
5858 #define FSCTL_WRITE_USN_REASON CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 180, METHOD_BUFFERED, FILE_ANY_ACCESS)
5859 #define FSCTL_CSV_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 181, METHOD_BUFFERED, FILE_ANY_ACCESS)
5860 #define FSCTL_GET_REFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 182, METHOD_BUFFERED, FILE_ANY_ACCESS)
5864 #if (_WIN32_WINNT >= 0x0603)
5866 #define FSCTL_DUPLICATE_EXTENTS_TO_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 209, METHOD_BUFFERED, FILE_WRITE_DATA)
5870 #define FSCTL_MARK_AS_SYSTEM_HIVE FSCTL_SET_BOOTLOADER_ACCESSED
5872 typedef struct _PATHNAME_BUFFER
{
5873 ULONG PathNameLength
;
5875 } PATHNAME_BUFFER
, *PPATHNAME_BUFFER
;
5877 typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER
{
5878 UCHAR First0x24BytesOfBootSector
[0x24];
5879 } FSCTL_QUERY_FAT_BPB_BUFFER
, *PFSCTL_QUERY_FAT_BPB_BUFFER
;
5881 #if (_WIN32_WINNT >= 0x0400)
5883 typedef struct _NTFS_VOLUME_DATA_BUFFER
{
5884 LARGE_INTEGER VolumeSerialNumber
;
5885 LARGE_INTEGER NumberSectors
;
5886 LARGE_INTEGER TotalClusters
;
5887 LARGE_INTEGER FreeClusters
;
5888 LARGE_INTEGER TotalReserved
;
5889 ULONG BytesPerSector
;
5890 ULONG BytesPerCluster
;
5891 ULONG BytesPerFileRecordSegment
;
5892 ULONG ClustersPerFileRecordSegment
;
5893 LARGE_INTEGER MftValidDataLength
;
5894 LARGE_INTEGER MftStartLcn
;
5895 LARGE_INTEGER Mft2StartLcn
;
5896 LARGE_INTEGER MftZoneStart
;
5897 LARGE_INTEGER MftZoneEnd
;
5898 } NTFS_VOLUME_DATA_BUFFER
, *PNTFS_VOLUME_DATA_BUFFER
;
5900 typedef struct _NTFS_EXTENDED_VOLUME_DATA
{
5902 USHORT MajorVersion
;
5903 USHORT MinorVersion
;
5904 } NTFS_EXTENDED_VOLUME_DATA
, *PNTFS_EXTENDED_VOLUME_DATA
;
5906 typedef struct _STARTING_LCN_INPUT_BUFFER
{
5907 LARGE_INTEGER StartingLcn
;
5908 } STARTING_LCN_INPUT_BUFFER
, *PSTARTING_LCN_INPUT_BUFFER
;
5910 typedef struct _VOLUME_BITMAP_BUFFER
{
5911 LARGE_INTEGER StartingLcn
;
5912 LARGE_INTEGER BitmapSize
;
5914 } VOLUME_BITMAP_BUFFER
, *PVOLUME_BITMAP_BUFFER
;
5916 typedef struct _STARTING_VCN_INPUT_BUFFER
{
5917 LARGE_INTEGER StartingVcn
;
5918 } STARTING_VCN_INPUT_BUFFER
, *PSTARTING_VCN_INPUT_BUFFER
;
5920 typedef struct _RETRIEVAL_POINTERS_BUFFER
{
5922 LARGE_INTEGER StartingVcn
;
5924 LARGE_INTEGER NextVcn
;
5927 } RETRIEVAL_POINTERS_BUFFER
, *PRETRIEVAL_POINTERS_BUFFER
;
5929 typedef struct _NTFS_FILE_RECORD_INPUT_BUFFER
{
5930 LARGE_INTEGER FileReferenceNumber
;
5931 } NTFS_FILE_RECORD_INPUT_BUFFER
, *PNTFS_FILE_RECORD_INPUT_BUFFER
;
5933 typedef struct _NTFS_FILE_RECORD_OUTPUT_BUFFER
{
5934 LARGE_INTEGER FileReferenceNumber
;
5935 ULONG FileRecordLength
;
5936 UCHAR FileRecordBuffer
[1];
5937 } NTFS_FILE_RECORD_OUTPUT_BUFFER
, *PNTFS_FILE_RECORD_OUTPUT_BUFFER
;
5939 typedef struct _MOVE_FILE_DATA
{
5941 LARGE_INTEGER StartingVcn
;
5942 LARGE_INTEGER StartingLcn
;
5944 } MOVE_FILE_DATA
, *PMOVE_FILE_DATA
;
5946 typedef struct _MOVE_FILE_RECORD_DATA
{
5948 LARGE_INTEGER SourceFileRecord
;
5949 LARGE_INTEGER TargetFileRecord
;
5950 } MOVE_FILE_RECORD_DATA
, *PMOVE_FILE_RECORD_DATA
;
5953 typedef struct _MOVE_FILE_DATA32
{
5955 LARGE_INTEGER StartingVcn
;
5956 LARGE_INTEGER StartingLcn
;
5958 } MOVE_FILE_DATA32
, *PMOVE_FILE_DATA32
;
5961 #endif /* (_WIN32_WINNT >= 0x0400) */
5963 #if (_WIN32_WINNT >= 0x0500)
5965 typedef struct _FIND_BY_SID_DATA
{
5968 } FIND_BY_SID_DATA
, *PFIND_BY_SID_DATA
;
5970 typedef struct _FIND_BY_SID_OUTPUT
{
5971 ULONG NextEntryOffset
;
5973 ULONG FileNameLength
;
5975 } FIND_BY_SID_OUTPUT
, *PFIND_BY_SID_OUTPUT
;
5977 typedef struct _MFT_ENUM_DATA
{
5978 ULONGLONG StartFileReferenceNumber
;
5981 } MFT_ENUM_DATA
, *PMFT_ENUM_DATA
;
5983 typedef struct _CREATE_USN_JOURNAL_DATA
{
5984 ULONGLONG MaximumSize
;
5985 ULONGLONG AllocationDelta
;
5986 } CREATE_USN_JOURNAL_DATA
, *PCREATE_USN_JOURNAL_DATA
;
5988 typedef struct _READ_USN_JOURNAL_DATA
{
5991 ULONG ReturnOnlyOnClose
;
5993 ULONGLONG BytesToWaitFor
;
5994 ULONGLONG UsnJournalID
;
5995 } READ_USN_JOURNAL_DATA
, *PREAD_USN_JOURNAL_DATA
;
5997 typedef struct _USN_RECORD
{
5999 USHORT MajorVersion
;
6000 USHORT MinorVersion
;
6001 ULONGLONG FileReferenceNumber
;
6002 ULONGLONG ParentFileReferenceNumber
;
6004 LARGE_INTEGER TimeStamp
;
6008 ULONG FileAttributes
;
6009 USHORT FileNameLength
;
6010 USHORT FileNameOffset
;
6012 } USN_RECORD
, *PUSN_RECORD
;
6014 #define USN_PAGE_SIZE (0x1000)
6016 #define USN_REASON_DATA_OVERWRITE (0x00000001)
6017 #define USN_REASON_DATA_EXTEND (0x00000002)
6018 #define USN_REASON_DATA_TRUNCATION (0x00000004)
6019 #define USN_REASON_NAMED_DATA_OVERWRITE (0x00000010)
6020 #define USN_REASON_NAMED_DATA_EXTEND (0x00000020)
6021 #define USN_REASON_NAMED_DATA_TRUNCATION (0x00000040)
6022 #define USN_REASON_FILE_CREATE (0x00000100)
6023 #define USN_REASON_FILE_DELETE (0x00000200)
6024 #define USN_REASON_EA_CHANGE (0x00000400)
6025 #define USN_REASON_SECURITY_CHANGE (0x00000800)
6026 #define USN_REASON_RENAME_OLD_NAME (0x00001000)
6027 #define USN_REASON_RENAME_NEW_NAME (0x00002000)
6028 #define USN_REASON_INDEXABLE_CHANGE (0x00004000)
6029 #define USN_REASON_BASIC_INFO_CHANGE (0x00008000)
6030 #define USN_REASON_HARD_LINK_CHANGE (0x00010000)
6031 #define USN_REASON_COMPRESSION_CHANGE (0x00020000)
6032 #define USN_REASON_ENCRYPTION_CHANGE (0x00040000)
6033 #define USN_REASON_OBJECT_ID_CHANGE (0x00080000)
6034 #define USN_REASON_REPARSE_POINT_CHANGE (0x00100000)
6035 #define USN_REASON_STREAM_CHANGE (0x00200000)
6036 #define USN_REASON_TRANSACTED_CHANGE (0x00400000)
6037 #define USN_REASON_CLOSE (0x80000000)
6039 typedef struct _USN_JOURNAL_DATA
{
6040 ULONGLONG UsnJournalID
;
6045 ULONGLONG MaximumSize
;
6046 ULONGLONG AllocationDelta
;
6047 } USN_JOURNAL_DATA
, *PUSN_JOURNAL_DATA
;
6049 typedef struct _DELETE_USN_JOURNAL_DATA
{
6050 ULONGLONG UsnJournalID
;
6052 } DELETE_USN_JOURNAL_DATA
, *PDELETE_USN_JOURNAL_DATA
;
6054 #define USN_DELETE_FLAG_DELETE (0x00000001)
6055 #define USN_DELETE_FLAG_NOTIFY (0x00000002)
6056 #define USN_DELETE_VALID_FLAGS (0x00000003)
6058 typedef struct _MARK_HANDLE_INFO
{
6059 ULONG UsnSourceInfo
;
6060 HANDLE VolumeHandle
;
6062 } MARK_HANDLE_INFO
, *PMARK_HANDLE_INFO
;
6065 typedef struct _MARK_HANDLE_INFO32
{
6066 ULONG UsnSourceInfo
;
6067 UINT32 VolumeHandle
;
6069 } MARK_HANDLE_INFO32
, *PMARK_HANDLE_INFO32
;
6072 #define USN_SOURCE_DATA_MANAGEMENT (0x00000001)
6073 #define USN_SOURCE_AUXILIARY_DATA (0x00000002)
6074 #define USN_SOURCE_REPLICATION_MANAGEMENT (0x00000004)
6076 #define MARK_HANDLE_PROTECT_CLUSTERS (0x00000001)
6077 #define MARK_HANDLE_TXF_SYSTEM_LOG (0x00000004)
6078 #define MARK_HANDLE_NOT_TXF_SYSTEM_LOG (0x00000008)
6080 typedef struct _BULK_SECURITY_TEST_DATA
{
6081 ACCESS_MASK DesiredAccess
;
6082 ULONG SecurityIds
[1];
6083 } BULK_SECURITY_TEST_DATA
, *PBULK_SECURITY_TEST_DATA
;
6085 #define VOLUME_IS_DIRTY (0x00000001)
6086 #define VOLUME_UPGRADE_SCHEDULED (0x00000002)
6087 #define VOLUME_SESSION_OPEN (0x00000004)
6089 typedef struct _FILE_PREFETCH
{
6092 ULONGLONG Prefetch
[1];
6093 } FILE_PREFETCH
, *PFILE_PREFETCH
;
6095 typedef struct _FILE_PREFETCH_EX
{
6099 ULONGLONG Prefetch
[1];
6100 } FILE_PREFETCH_EX
, *PFILE_PREFETCH_EX
;
6102 #define FILE_PREFETCH_TYPE_FOR_CREATE 0x1
6103 #define FILE_PREFETCH_TYPE_FOR_DIRENUM 0x2
6104 #define FILE_PREFETCH_TYPE_FOR_CREATE_EX 0x3
6105 #define FILE_PREFETCH_TYPE_FOR_DIRENUM_EX 0x4
6107 #define FILE_PREFETCH_TYPE_MAX 0x4
6109 typedef struct _FILE_OBJECTID_BUFFER
{
6111 _ANONYMOUS_UNION
union {
6112 _ANONYMOUS_STRUCT
struct {
6113 UCHAR BirthVolumeId
[16];
6114 UCHAR BirthObjectId
[16];
6117 UCHAR ExtendedInfo
[48];
6119 } FILE_OBJECTID_BUFFER
, *PFILE_OBJECTID_BUFFER
;
6121 typedef struct _FILE_SET_SPARSE_BUFFER
{
6123 } FILE_SET_SPARSE_BUFFER
, *PFILE_SET_SPARSE_BUFFER
;
6125 typedef struct _FILE_ZERO_DATA_INFORMATION
{
6126 LARGE_INTEGER FileOffset
;
6127 LARGE_INTEGER BeyondFinalZero
;
6128 } FILE_ZERO_DATA_INFORMATION
, *PFILE_ZERO_DATA_INFORMATION
;
6130 typedef struct _FILE_ALLOCATED_RANGE_BUFFER
{
6131 LARGE_INTEGER FileOffset
;
6132 LARGE_INTEGER Length
;
6133 } FILE_ALLOCATED_RANGE_BUFFER
, *PFILE_ALLOCATED_RANGE_BUFFER
;
6135 typedef struct _ENCRYPTION_BUFFER
{
6136 ULONG EncryptionOperation
;
6138 } ENCRYPTION_BUFFER
, *PENCRYPTION_BUFFER
;
6140 #define FILE_SET_ENCRYPTION 0x00000001
6141 #define FILE_CLEAR_ENCRYPTION 0x00000002
6142 #define STREAM_SET_ENCRYPTION 0x00000003
6143 #define STREAM_CLEAR_ENCRYPTION 0x00000004
6145 #define MAXIMUM_ENCRYPTION_VALUE 0x00000004
6147 typedef struct _DECRYPTION_STATUS_BUFFER
{
6148 BOOLEAN NoEncryptedStreams
;
6149 } DECRYPTION_STATUS_BUFFER
, *PDECRYPTION_STATUS_BUFFER
;
6151 #define ENCRYPTION_FORMAT_DEFAULT (0x01)
6153 #define COMPRESSION_FORMAT_SPARSE (0x4000)
6155 typedef struct _REQUEST_RAW_ENCRYPTED_DATA
{
6156 LONGLONG FileOffset
;
6158 } REQUEST_RAW_ENCRYPTED_DATA
, *PREQUEST_RAW_ENCRYPTED_DATA
;
6160 typedef struct _ENCRYPTED_DATA_INFO
{
6161 ULONGLONG StartingFileOffset
;
6162 ULONG OutputBufferOffset
;
6163 ULONG BytesWithinFileSize
;
6164 ULONG BytesWithinValidDataLength
;
6165 USHORT CompressionFormat
;
6166 UCHAR DataUnitShift
;
6169 UCHAR EncryptionFormat
;
6170 USHORT NumberOfDataBlocks
;
6171 ULONG DataBlockSize
[ANYSIZE_ARRAY
];
6172 } ENCRYPTED_DATA_INFO
, *PENCRYPTED_DATA_INFO
;
6174 typedef struct _PLEX_READ_DATA_REQUEST
{
6175 LARGE_INTEGER ByteOffset
;
6178 } PLEX_READ_DATA_REQUEST
, *PPLEX_READ_DATA_REQUEST
;
6180 typedef struct _SI_COPYFILE
{
6181 ULONG SourceFileNameLength
;
6182 ULONG DestinationFileNameLength
;
6184 WCHAR FileNameBuffer
[1];
6185 } SI_COPYFILE
, *PSI_COPYFILE
;
6187 #define COPYFILE_SIS_LINK 0x0001
6188 #define COPYFILE_SIS_REPLACE 0x0002
6189 #define COPYFILE_SIS_FLAGS 0x0003
6191 #endif /* (_WIN32_WINNT >= 0x0500) */
6193 #if (_WIN32_WINNT >= 0x0600)
6195 typedef struct _FILE_MAKE_COMPATIBLE_BUFFER
{
6197 } FILE_MAKE_COMPATIBLE_BUFFER
, *PFILE_MAKE_COMPATIBLE_BUFFER
;
6199 typedef struct _FILE_SET_DEFECT_MGMT_BUFFER
{
6201 } FILE_SET_DEFECT_MGMT_BUFFER
, *PFILE_SET_DEFECT_MGMT_BUFFER
;
6203 typedef struct _FILE_QUERY_SPARING_BUFFER
{
6204 ULONG SparingUnitBytes
;
6205 BOOLEAN SoftwareSparing
;
6206 ULONG TotalSpareBlocks
;
6207 ULONG FreeSpareBlocks
;
6208 } FILE_QUERY_SPARING_BUFFER
, *PFILE_QUERY_SPARING_BUFFER
;
6210 typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER
{
6211 LARGE_INTEGER DirectoryCount
;
6212 LARGE_INTEGER FileCount
;
6213 USHORT FsFormatMajVersion
;
6214 USHORT FsFormatMinVersion
;
6215 WCHAR FsFormatName
[12];
6216 LARGE_INTEGER FormatTime
;
6217 LARGE_INTEGER LastUpdateTime
;
6218 WCHAR CopyrightInfo
[34];
6219 WCHAR AbstractInfo
[34];
6220 WCHAR FormattingImplementationInfo
[34];
6221 WCHAR LastModifyingImplementationInfo
[34];
6222 } FILE_QUERY_ON_DISK_VOL_INFO_BUFFER
, *PFILE_QUERY_ON_DISK_VOL_INFO_BUFFER
;
6224 #define SET_REPAIR_ENABLED (0x00000001)
6225 #define SET_REPAIR_VOLUME_BITMAP_SCAN (0x00000002)
6226 #define SET_REPAIR_DELETE_CROSSLINK (0x00000004)
6227 #define SET_REPAIR_WARN_ABOUT_DATA_LOSS (0x00000008)
6228 #define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT (0x00000010)
6229 #define SET_REPAIR_VALID_MASK (0x0000001F)
6231 typedef enum _SHRINK_VOLUME_REQUEST_TYPES
{
6235 } SHRINK_VOLUME_REQUEST_TYPES
, *PSHRINK_VOLUME_REQUEST_TYPES
;
6237 typedef struct _SHRINK_VOLUME_INFORMATION
{
6238 SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType
;
6240 LONGLONG NewNumberOfSectors
;
6241 } SHRINK_VOLUME_INFORMATION
, *PSHRINK_VOLUME_INFORMATION
;
6243 #define TXFS_RM_FLAG_LOGGING_MODE 0x00000001
6244 #define TXFS_RM_FLAG_RENAME_RM 0x00000002
6245 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000004
6246 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000008
6247 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000010
6248 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000020
6249 #define TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000040
6250 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000080
6251 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000100
6252 #define TXFS_RM_FLAG_GROW_LOG 0x00000400
6253 #define TXFS_RM_FLAG_SHRINK_LOG 0x00000800
6254 #define TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE 0x00001000
6255 #define TXFS_RM_FLAG_PRESERVE_CHANGES 0x00002000
6256 #define TXFS_RM_FLAG_RESET_RM_AT_NEXT_START 0x00004000
6257 #define TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START 0x00008000
6258 #define TXFS_RM_FLAG_PREFER_CONSISTENCY 0x00010000
6259 #define TXFS_RM_FLAG_PREFER_AVAILABILITY 0x00020000
6261 #define TXFS_LOGGING_MODE_SIMPLE (0x0001)
6262 #define TXFS_LOGGING_MODE_FULL (0x0002)
6264 #define TXFS_TRANSACTION_STATE_NONE 0x00
6265 #define TXFS_TRANSACTION_STATE_ACTIVE 0x01
6266 #define TXFS_TRANSACTION_STATE_PREPARED 0x02
6267 #define TXFS_TRANSACTION_STATE_NOTACTIVE 0x03
6269 #define TXFS_MODIFY_RM_VALID_FLAGS (TXFS_RM_FLAG_LOGGING_MODE | \
6270 TXFS_RM_FLAG_RENAME_RM | \
6271 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
6272 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
6273 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
6274 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
6275 TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
6276 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
6277 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
6278 TXFS_RM_FLAG_SHRINK_LOG | \
6279 TXFS_RM_FLAG_GROW_LOG | \
6280 TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE | \
6281 TXFS_RM_FLAG_PRESERVE_CHANGES | \
6282 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
6283 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
6284 TXFS_RM_FLAG_PREFER_CONSISTENCY | \
6285 TXFS_RM_FLAG_PREFER_AVAILABILITY)
6287 typedef struct _TXFS_MODIFY_RM
{
6289 ULONG LogContainerCountMax
;
6290 ULONG LogContainerCountMin
;
6291 ULONG LogContainerCount
;
6292 ULONG LogGrowthIncrement
;
6293 ULONG LogAutoShrinkPercentage
;
6296 } TXFS_MODIFY_RM
, *PTXFS_MODIFY_RM
;
6298 #define TXFS_RM_STATE_NOT_STARTED 0
6299 #define TXFS_RM_STATE_STARTING 1
6300 #define TXFS_RM_STATE_ACTIVE 2
6301 #define TXFS_RM_STATE_SHUTTING_DOWN 3
6303 #define TXFS_QUERY_RM_INFORMATION_VALID_FLAGS \
6304 (TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
6305 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
6306 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
6307 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
6308 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
6309 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
6310 TXFS_RM_FLAG_PREFER_CONSISTENCY | \
6311 TXFS_RM_FLAG_PREFER_AVAILABILITY)
6313 typedef struct _TXFS_QUERY_RM_INFORMATION
{
6314 ULONG BytesRequired
;
6316 ULONGLONG CurrentLsn
;
6317 ULONGLONG ArchiveTailLsn
;
6318 ULONGLONG LogContainerSize
;
6319 LARGE_INTEGER HighestVirtualClock
;
6320 ULONG LogContainerCount
;
6321 ULONG LogContainerCountMax
;
6322 ULONG LogContainerCountMin
;
6323 ULONG LogGrowthIncrement
;
6324 ULONG LogAutoShrinkPercentage
;
6329 ULONGLONG LogCapacity
;
6333 ULONGLONG TransactionCount
;
6334 ULONGLONG OnePCCount
;
6335 ULONGLONG TwoPCCount
;
6336 ULONGLONG NumberLogFileFull
;
6337 ULONGLONG OldestTransactionAge
;
6339 ULONG TmLogPathOffset
;
6340 } TXFS_QUERY_RM_INFORMATION
, *PTXFS_QUERY_RM_INFORMATION
;
6342 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN 0x01
6343 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK 0x02
6345 #define TXFS_ROLLFORWARD_REDO_VALID_FLAGS \
6346 (TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN | \
6347 TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK)
6349 typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION
{
6350 LARGE_INTEGER LastVirtualClock
;
6351 ULONGLONG LastRedoLsn
;
6352 ULONGLONG HighestRecoveryLsn
;
6354 } TXFS_ROLLFORWARD_REDO_INFORMATION
, *PTXFS_ROLLFORWARD_REDO_INFORMATION
;
6356 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000001
6357 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000002
6358 #define TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE 0x00000004
6359 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000008
6360 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000010
6361 #define TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000020
6362 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000040
6363 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000080
6365 #define TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT 0x00000200
6366 #define TXFS_START_RM_FLAG_LOGGING_MODE 0x00000400
6367 #define TXFS_START_RM_FLAG_PRESERVE_CHANGES 0x00000800
6369 #define TXFS_START_RM_FLAG_PREFER_CONSISTENCY 0x00001000
6370 #define TXFS_START_RM_FLAG_PREFER_AVAILABILITY 0x00002000
6372 #define TXFS_START_RM_VALID_FLAGS \
6373 (TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
6374 TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
6375 TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE | \
6376 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
6377 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
6378 TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
6379 TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT | \
6380 TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
6381 TXFS_START_RM_FLAG_LOGGING_MODE | \
6382 TXFS_START_RM_FLAG_PRESERVE_CHANGES | \
6383 TXFS_START_RM_FLAG_PREFER_CONSISTENCY | \
6384 TXFS_START_RM_FLAG_PREFER_AVAILABILITY)
6386 typedef struct _TXFS_START_RM_INFORMATION
{
6388 ULONGLONG LogContainerSize
;
6389 ULONG LogContainerCountMin
;
6390 ULONG LogContainerCountMax
;
6391 ULONG LogGrowthIncrement
;
6392 ULONG LogAutoShrinkPercentage
;
6393 ULONG TmLogPathOffset
;
6394 USHORT TmLogPathLength
;
6396 USHORT LogPathLength
;
6399 } TXFS_START_RM_INFORMATION
, *PTXFS_START_RM_INFORMATION
;
6401 typedef struct _TXFS_GET_METADATA_INFO_OUT
{
6406 GUID LockingTransaction
;
6408 ULONG TransactionState
;
6409 } TXFS_GET_METADATA_INFO_OUT
, *PTXFS_GET_METADATA_INFO_OUT
;
6411 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_CREATED 0x00000001
6412 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_DELETED 0x00000002
6414 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY
{
6422 } TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY
, *PTXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY
;
6424 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES
{
6425 GUID KtmTransaction
;
6426 ULONGLONG NumberOfFiles
;
6427 ULONGLONG BufferSizeRequired
;
6429 } TXFS_LIST_TRANSACTION_LOCKED_FILES
, *PTXFS_LIST_TRANSACTION_LOCKED_FILES
;
6431 typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY
{
6433 ULONG TransactionState
;
6437 } TXFS_LIST_TRANSACTIONS_ENTRY
, *PTXFS_LIST_TRANSACTIONS_ENTRY
;
6439 typedef struct _TXFS_LIST_TRANSACTIONS
{
6440 ULONGLONG NumberOfTransactions
;
6441 ULONGLONG BufferSizeRequired
;
6442 } TXFS_LIST_TRANSACTIONS
, *PTXFS_LIST_TRANSACTIONS
;
6444 typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT
{
6445 _ANONYMOUS_UNION
union {
6449 } TXFS_READ_BACKUP_INFORMATION_OUT
, *PTXFS_READ_BACKUP_INFORMATION_OUT
;
6451 typedef struct _TXFS_WRITE_BACKUP_INFORMATION
{
6453 } TXFS_WRITE_BACKUP_INFORMATION
, *PTXFS_WRITE_BACKUP_INFORMATION
;
6455 #define TXFS_TRANSACTED_VERSION_NONTRANSACTED 0xFFFFFFFE
6456 #define TXFS_TRANSACTED_VERSION_UNCOMMITTED 0xFFFFFFFF
6458 typedef struct _TXFS_GET_TRANSACTED_VERSION
{
6459 ULONG ThisBaseVersion
;
6460 ULONG LatestVersion
;
6461 USHORT ThisMiniVersion
;
6462 USHORT FirstMiniVersion
;
6463 USHORT LatestMiniVersion
;
6464 } TXFS_GET_TRANSACTED_VERSION
, *PTXFS_GET_TRANSACTED_VERSION
;
6466 #define TXFS_SAVEPOINT_SET 0x00000001
6467 #define TXFS_SAVEPOINT_ROLLBACK 0x00000002
6468 #define TXFS_SAVEPOINT_CLEAR 0x00000004
6469 #define TXFS_SAVEPOINT_CLEAR_ALL 0x00000010
6471 typedef struct _TXFS_SAVEPOINT_INFORMATION
{
6472 HANDLE KtmTransaction
;
6475 } TXFS_SAVEPOINT_INFORMATION
, *PTXFS_SAVEPOINT_INFORMATION
;
6477 typedef struct _TXFS_CREATE_MINIVERSION_INFO
{
6478 USHORT StructureVersion
;
6479 USHORT StructureLength
;
6482 } TXFS_CREATE_MINIVERSION_INFO
, *PTXFS_CREATE_MINIVERSION_INFO
;
6484 typedef struct _TXFS_TRANSACTION_ACTIVE_INFO
{
6485 BOOLEAN TransactionsActiveAtSnapshot
;
6486 } TXFS_TRANSACTION_ACTIVE_INFO
, *PTXFS_TRANSACTION_ACTIVE_INFO
;
6488 #endif /* (_WIN32_WINNT >= 0x0600) */
6490 #if (_WIN32_WINNT >= 0x0601)
6492 #define MARK_HANDLE_REALTIME (0x00000020)
6493 #define MARK_HANDLE_NOT_REALTIME (0x00000040)
6495 #define NO_8DOT3_NAME_PRESENT (0x00000001)
6496 #define REMOVED_8DOT3_NAME (0x00000002)
6498 #define PERSISTENT_VOLUME_STATE_SHORT_NAME_CREATION_DISABLED (0x00000001)
6500 typedef struct _BOOT_AREA_INFO
{
6501 ULONG BootSectorCount
;
6503 LARGE_INTEGER Offset
;
6505 } BOOT_AREA_INFO
, *PBOOT_AREA_INFO
;
6507 typedef struct _RETRIEVAL_POINTER_BASE
{
6508 LARGE_INTEGER FileAreaOffset
;
6509 } RETRIEVAL_POINTER_BASE
, *PRETRIEVAL_POINTER_BASE
;
6511 typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION
{
6516 } FILE_FS_PERSISTENT_VOLUME_INFORMATION
, *PFILE_FS_PERSISTENT_VOLUME_INFORMATION
;
6518 typedef struct _FILE_SYSTEM_RECOGNITION_INFORMATION
{
6520 } FILE_SYSTEM_RECOGNITION_INFORMATION
, *PFILE_SYSTEM_RECOGNITION_INFORMATION
;
6522 #define OPLOCK_LEVEL_CACHE_READ (0x00000001)
6523 #define OPLOCK_LEVEL_CACHE_HANDLE (0x00000002)
6524 #define OPLOCK_LEVEL_CACHE_WRITE (0x00000004)
6526 #define REQUEST_OPLOCK_INPUT_FLAG_REQUEST (0x00000001)
6527 #define REQUEST_OPLOCK_INPUT_FLAG_ACK (0x00000002)
6528 #define REQUEST_OPLOCK_INPUT_FLAG_COMPLETE_ACK_ON_CLOSE (0x00000004)
6530 #define REQUEST_OPLOCK_CURRENT_VERSION 1
6532 typedef struct _REQUEST_OPLOCK_INPUT_BUFFER
{
6533 USHORT StructureVersion
;
6534 USHORT StructureLength
;
6535 ULONG RequestedOplockLevel
;
6537 } REQUEST_OPLOCK_INPUT_BUFFER
, *PREQUEST_OPLOCK_INPUT_BUFFER
;
6539 #define REQUEST_OPLOCK_OUTPUT_FLAG_ACK_REQUIRED (0x00000001)
6540 #define REQUEST_OPLOCK_OUTPUT_FLAG_MODES_PROVIDED (0x00000002)
6542 typedef struct _REQUEST_OPLOCK_OUTPUT_BUFFER
{
6543 USHORT StructureVersion
;
6544 USHORT StructureLength
;
6545 ULONG OriginalOplockLevel
;
6546 ULONG NewOplockLevel
;
6548 ACCESS_MASK AccessMode
;
6550 } REQUEST_OPLOCK_OUTPUT_BUFFER
, *PREQUEST_OPLOCK_OUTPUT_BUFFER
;
6552 #define SD_GLOBAL_CHANGE_TYPE_MACHINE_SID 1
6554 typedef struct _SD_CHANGE_MACHINE_SID_INPUT
{
6555 USHORT CurrentMachineSIDOffset
;
6556 USHORT CurrentMachineSIDLength
;
6557 USHORT NewMachineSIDOffset
;
6558 USHORT NewMachineSIDLength
;
6559 } SD_CHANGE_MACHINE_SID_INPUT
, *PSD_CHANGE_MACHINE_SID_INPUT
;
6561 typedef struct _SD_CHANGE_MACHINE_SID_OUTPUT
{
6562 ULONGLONG NumSDChangedSuccess
;
6563 ULONGLONG NumSDChangedFail
;
6564 ULONGLONG NumSDUnused
;
6565 ULONGLONG NumSDTotal
;
6566 ULONGLONG NumMftSDChangedSuccess
;
6567 ULONGLONG NumMftSDChangedFail
;
6568 ULONGLONG NumMftSDTotal
;
6569 } SD_CHANGE_MACHINE_SID_OUTPUT
, *PSD_CHANGE_MACHINE_SID_OUTPUT
;
6571 typedef struct _SD_GLOBAL_CHANGE_INPUT
{
6574 _ANONYMOUS_UNION
union {
6575 SD_CHANGE_MACHINE_SID_INPUT SdChange
;
6577 } SD_GLOBAL_CHANGE_INPUT
, *PSD_GLOBAL_CHANGE_INPUT
;
6579 typedef struct _SD_GLOBAL_CHANGE_OUTPUT
{
6582 _ANONYMOUS_UNION
union {
6583 SD_CHANGE_MACHINE_SID_OUTPUT SdChange
;
6585 } SD_GLOBAL_CHANGE_OUTPUT
, *PSD_GLOBAL_CHANGE_OUTPUT
;
6587 #define ENCRYPTED_DATA_INFO_SPARSE_FILE 1
6589 typedef struct _EXTENDED_ENCRYPTED_DATA_INFO
{
6594 } EXTENDED_ENCRYPTED_DATA_INFO
, *PEXTENDED_ENCRYPTED_DATA_INFO
;
6596 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_INPUT
{
6598 ULONG NumberOfClusters
;
6599 LARGE_INTEGER Cluster
[1];
6600 } LOOKUP_STREAM_FROM_CLUSTER_INPUT
, *PLOOKUP_STREAM_FROM_CLUSTER_INPUT
;
6602 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_OUTPUT
{
6604 ULONG NumberOfMatches
;
6605 ULONG BufferSizeRequired
;
6606 } LOOKUP_STREAM_FROM_CLUSTER_OUTPUT
, *PLOOKUP_STREAM_FROM_CLUSTER_OUTPUT
;
6608 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_PAGE_FILE 0x00000001
6609 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_DENY_DEFRAG_SET 0x00000002
6610 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_FS_SYSTEM_FILE 0x00000004
6611 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_TXF_SYSTEM_FILE 0x00000008
6613 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_MASK 0xff000000
6614 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_DATA 0x01000000
6615 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_INDEX 0x02000000
6616 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_SYSTEM 0x03000000
6618 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_ENTRY
{
6621 LARGE_INTEGER Reserved
;
6622 LARGE_INTEGER Cluster
;
6624 } LOOKUP_STREAM_FROM_CLUSTER_ENTRY
, *PLOOKUP_STREAM_FROM_CLUSTER_ENTRY
;
6626 typedef struct _FILE_TYPE_NOTIFICATION_INPUT
{
6628 ULONG NumFileTypeIDs
;
6630 } FILE_TYPE_NOTIFICATION_INPUT
, *PFILE_TYPE_NOTIFICATION_INPUT
;
6632 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_BEGIN 0x00000001
6633 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_END 0x00000002
6635 DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_PAGE_FILE
, 0x0d0a64a1, 0x38fc, 0x4db8, 0x9f, 0xe7, 0x3f, 0x43, 0x52, 0xcd, 0x7c, 0x5c);
6636 DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_HIBERNATION_FILE
, 0xb7624d64, 0xb9a3, 0x4cf8, 0x80, 0x11, 0x5b, 0x86, 0xc9, 0x40, 0xe7, 0xb7);
6637 DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_CRASHDUMP_FILE
, 0x9d453eb7, 0xd2a6, 0x4dbd, 0xa2, 0xe3, 0xfb, 0xd0, 0xed, 0x91, 0x09, 0xa9);
6639 #ifndef _VIRTUAL_STORAGE_TYPE_DEFINED
6640 #define _VIRTUAL_STORAGE_TYPE_DEFINED
6641 typedef struct _VIRTUAL_STORAGE_TYPE
{
6644 } VIRTUAL_STORAGE_TYPE
, *PVIRTUAL_STORAGE_TYPE
;
6647 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST
{
6650 } STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_REQUEST
;
6652 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_HOST_VOLUMES 0x1
6653 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_GUEST_VOLUMES 0x2
6655 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY
{
6657 ULONG DependencyTypeFlags
;
6658 ULONG ProviderSpecificFlags
;
6659 VIRTUAL_STORAGE_TYPE VirtualStorageType
;
6660 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY
;
6662 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY
{
6664 ULONG DependencyTypeFlags
;
6665 ULONG ProviderSpecificFlags
;
6666 VIRTUAL_STORAGE_TYPE VirtualStorageType
;
6667 ULONG AncestorLevel
;
6668 ULONG HostVolumeNameOffset
;
6669 ULONG HostVolumeNameSize
;
6670 ULONG DependentVolumeNameOffset
;
6671 ULONG DependentVolumeNameSize
;
6672 ULONG RelativePathOffset
;
6673 ULONG RelativePathSize
;
6674 ULONG DependentDeviceNameOffset
;
6675 ULONG DependentDeviceNameSize
;
6676 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY
;
6678 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE
{
6679 ULONG ResponseLevel
;
6680 ULONG NumberEntries
;
6681 _ANONYMOUS_UNION
union {
6682 STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY Lev1Depends
[0];
6683 STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY Lev2Depends
[0];
6685 } STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE
;
6687 #endif /* (_WIN32_WINNT >= 0x0601) */
6689 typedef struct _FILESYSTEM_STATISTICS
{
6690 USHORT FileSystemType
;
6692 ULONG SizeOfCompleteStructure
;
6693 ULONG UserFileReads
;
6694 ULONG UserFileReadBytes
;
6695 ULONG UserDiskReads
;
6696 ULONG UserFileWrites
;
6697 ULONG UserFileWriteBytes
;
6698 ULONG UserDiskWrites
;
6699 ULONG MetaDataReads
;
6700 ULONG MetaDataReadBytes
;
6701 ULONG MetaDataDiskReads
;
6702 ULONG MetaDataWrites
;
6703 ULONG MetaDataWriteBytes
;
6704 ULONG MetaDataDiskWrites
;
6705 } FILESYSTEM_STATISTICS
, *PFILESYSTEM_STATISTICS
;
6707 #define FILESYSTEM_STATISTICS_TYPE_NTFS 1
6708 #define FILESYSTEM_STATISTICS_TYPE_FAT 2
6709 #define FILESYSTEM_STATISTICS_TYPE_EXFAT 3
6711 typedef struct _FAT_STATISTICS
{
6713 ULONG SuccessfulCreates
;
6714 ULONG FailedCreates
;
6715 ULONG NonCachedReads
;
6716 ULONG NonCachedReadBytes
;
6717 ULONG NonCachedWrites
;
6718 ULONG NonCachedWriteBytes
;
6719 ULONG NonCachedDiskReads
;
6720 ULONG NonCachedDiskWrites
;
6721 } FAT_STATISTICS
, *PFAT_STATISTICS
;
6723 typedef struct _EXFAT_STATISTICS
{
6725 ULONG SuccessfulCreates
;
6726 ULONG FailedCreates
;
6727 ULONG NonCachedReads
;
6728 ULONG NonCachedReadBytes
;
6729 ULONG NonCachedWrites
;
6730 ULONG NonCachedWriteBytes
;
6731 ULONG NonCachedDiskReads
;
6732 ULONG NonCachedDiskWrites
;
6733 } EXFAT_STATISTICS
, *PEXFAT_STATISTICS
;
6735 typedef struct _NTFS_STATISTICS
{
6736 ULONG LogFileFullExceptions
;
6737 ULONG OtherExceptions
;
6741 ULONG MftWriteBytes
;
6747 } MftWritesUserLevel
;
6748 USHORT MftWritesFlushForLogFileFull
;
6749 USHORT MftWritesLazyWriter
;
6750 USHORT MftWritesUserRequest
;
6752 ULONG Mft2WriteBytes
;
6758 } Mft2WritesUserLevel
;
6759 USHORT Mft2WritesFlushForLogFileFull
;
6760 USHORT Mft2WritesLazyWriter
;
6761 USHORT Mft2WritesUserRequest
;
6762 ULONG RootIndexReads
;
6763 ULONG RootIndexReadBytes
;
6764 ULONG RootIndexWrites
;
6765 ULONG RootIndexWriteBytes
;
6767 ULONG BitmapReadBytes
;
6769 ULONG BitmapWriteBytes
;
6770 USHORT BitmapWritesFlushForLogFileFull
;
6771 USHORT BitmapWritesLazyWriter
;
6772 USHORT BitmapWritesUserRequest
;
6777 } BitmapWritesUserLevel
;
6778 ULONG MftBitmapReads
;
6779 ULONG MftBitmapReadBytes
;
6780 ULONG MftBitmapWrites
;
6781 ULONG MftBitmapWriteBytes
;
6782 USHORT MftBitmapWritesFlushForLogFileFull
;
6783 USHORT MftBitmapWritesLazyWriter
;
6784 USHORT MftBitmapWritesUserRequest
;
6790 } MftBitmapWritesUserLevel
;
6791 ULONG UserIndexReads
;
6792 ULONG UserIndexReadBytes
;
6793 ULONG UserIndexWrites
;
6794 ULONG UserIndexWriteBytes
;
6796 ULONG LogFileReadBytes
;
6797 ULONG LogFileWrites
;
6798 ULONG LogFileWriteBytes
;
6805 ULONG HintsClusters
;
6807 ULONG CacheClusters
;
6809 ULONG CacheMissClusters
;
6811 } NTFS_STATISTICS
, *PNTFS_STATISTICS
;
6813 #endif /* _FILESYSTEMFSCTL_ */
6815 #define SYMLINK_FLAG_RELATIVE 1
6817 typedef struct _REPARSE_DATA_BUFFER
{
6819 USHORT ReparseDataLength
;
6821 _ANONYMOUS_UNION
union {
6823 USHORT SubstituteNameOffset
;
6824 USHORT SubstituteNameLength
;
6825 USHORT PrintNameOffset
;
6826 USHORT PrintNameLength
;
6828 WCHAR PathBuffer
[1];
6829 } SymbolicLinkReparseBuffer
;
6831 USHORT SubstituteNameOffset
;
6832 USHORT SubstituteNameLength
;
6833 USHORT PrintNameOffset
;
6834 USHORT PrintNameLength
;
6835 WCHAR PathBuffer
[1];
6836 } MountPointReparseBuffer
;
6838 UCHAR DataBuffer
[1];
6839 } GenericReparseBuffer
;
6841 } REPARSE_DATA_BUFFER
, *PREPARSE_DATA_BUFFER
;
6843 #define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
6845 typedef struct _REPARSE_GUID_DATA_BUFFER
{
6847 USHORT ReparseDataLength
;
6851 UCHAR DataBuffer
[1];
6852 } GenericReparseBuffer
;
6853 } REPARSE_GUID_DATA_BUFFER
, *PREPARSE_GUID_DATA_BUFFER
;
6855 #define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
6857 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 )
6859 /* Reserved reparse tags */
6860 #define IO_REPARSE_TAG_RESERVED_ZERO (0)
6861 #define IO_REPARSE_TAG_RESERVED_ONE (1)
6862 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE
6864 #define IsReparseTagMicrosoft(_tag) (((_tag) & 0x80000000))
6865 #define IsReparseTagNameSurrogate(_tag) (((_tag) & 0x20000000))
6867 #define IO_REPARSE_TAG_VALID_VALUES (0xF000FFFF)
6869 #define IsReparseTagValid(tag) ( \
6870 !((tag) & ~IO_REPARSE_TAG_VALID_VALUES) && \
6871 ((tag) > IO_REPARSE_TAG_RESERVED_RANGE) \
6874 /* MicroSoft reparse point tags */
6875 #define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L)
6876 #define IO_REPARSE_TAG_HSM (0xC0000004L)
6877 #define IO_REPARSE_TAG_DRIVE_EXTENDER (0x80000005L)
6878 #define IO_REPARSE_TAG_HSM2 (0x80000006L)
6879 #define IO_REPARSE_TAG_SIS (0x80000007L)
6880 #define IO_REPARSE_TAG_WIM (0x80000008L)
6881 #define IO_REPARSE_TAG_CSV (0x80000009L)
6882 #define IO_REPARSE_TAG_DFS (0x8000000AL)
6883 #define IO_REPARSE_TAG_FILTER_MANAGER (0x8000000BL)
6884 #define IO_REPARSE_TAG_SYMLINK (0xA000000CL)
6885 #define IO_REPARSE_TAG_IIS_CACHE (0xA0000010L)
6886 #define IO_REPARSE_TAG_DFSR (0x80000012L)
6889 typedef struct _REPARSE_INDEX_KEY
{
6890 ULONG FileReparseTag
;
6891 LARGE_INTEGER FileId
;
6892 } REPARSE_INDEX_KEY
, *PREPARSE_INDEX_KEY
;
6895 #define FSCTL_LMR_GET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,58,METHOD_BUFFERED,FILE_ANY_ACCESS)
6896 #define FSCTL_LMR_SET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,59,METHOD_BUFFERED,FILE_ANY_ACCESS)
6897 #define IOCTL_LMR_ARE_FILE_OBJECTS_ON_SAME_SERVER CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,60,METHOD_BUFFERED,FILE_ANY_ACCESS)
6899 #define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
6900 #define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
6901 #define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
6902 #define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
6903 #define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
6904 #define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
6905 #define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
6906 #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
6907 #define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
6908 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
6909 #define FSCTL_PIPE_GET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
6910 #define FSCTL_PIPE_SET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
6911 #define FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
6912 #define FSCTL_PIPE_SET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
6913 #define FSCTL_PIPE_GET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
6914 #define FSCTL_PIPE_SET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
6915 #define FSCTL_PIPE_FLUSH CTL_CODE(FILE_DEVICE_NAMED_PIPE, 16, METHOD_BUFFERED, FILE_WRITE_DATA)
6917 #define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
6918 #define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
6919 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
6920 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
6922 #define FILE_PIPE_READ_DATA 0x00000000
6923 #define FILE_PIPE_WRITE_SPACE 0x00000001
6925 typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER
{
6928 } FILE_PIPE_ASSIGN_EVENT_BUFFER
, *PFILE_PIPE_ASSIGN_EVENT_BUFFER
;
6930 typedef struct _FILE_PIPE_EVENT_BUFFER
{
6931 ULONG NamedPipeState
;
6935 ULONG NumberRequests
;
6936 } FILE_PIPE_EVENT_BUFFER
, *PFILE_PIPE_EVENT_BUFFER
;
6938 typedef struct _FILE_PIPE_PEEK_BUFFER
{
6939 ULONG NamedPipeState
;
6940 ULONG ReadDataAvailable
;
6941 ULONG NumberOfMessages
;
6942 ULONG MessageLength
;
6944 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
6946 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
{
6947 LARGE_INTEGER Timeout
;
6949 BOOLEAN TimeoutSpecified
;
6951 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
6953 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER
{
6954 #if !defined(BUILD_WOW6432)
6955 PVOID ClientSession
;
6956 PVOID ClientProcess
;
6958 ULONGLONG ClientSession
;
6959 ULONGLONG ClientProcess
;
6961 } FILE_PIPE_CLIENT_PROCESS_BUFFER
, *PFILE_PIPE_CLIENT_PROCESS_BUFFER
;
6963 #define FILE_PIPE_COMPUTER_NAME_LENGTH 15
6965 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER_EX
{
6966 #if !defined(BUILD_WOW6432)
6967 PVOID ClientSession
;
6968 PVOID ClientProcess
;
6970 ULONGLONG ClientSession
;
6971 ULONGLONG ClientProcess
;
6973 USHORT ClientComputerNameLength
;
6974 WCHAR ClientComputerBuffer
[FILE_PIPE_COMPUTER_NAME_LENGTH
+1];
6975 } FILE_PIPE_CLIENT_PROCESS_BUFFER_EX
, *PFILE_PIPE_CLIENT_PROCESS_BUFFER_EX
;
6977 #define FSCTL_MAILSLOT_PEEK CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
6979 typedef enum _LINK_TRACKING_INFORMATION_TYPE
{
6980 NtfsLinkTrackingInformation
,
6981 DfsLinkTrackingInformation
6982 } LINK_TRACKING_INFORMATION_TYPE
, *PLINK_TRACKING_INFORMATION_TYPE
;
6984 typedef struct _LINK_TRACKING_INFORMATION
{
6985 LINK_TRACKING_INFORMATION_TYPE Type
;
6987 } LINK_TRACKING_INFORMATION
, *PLINK_TRACKING_INFORMATION
;
6989 typedef struct _REMOTE_LINK_TRACKING_INFORMATION
{
6990 PVOID TargetFileObject
;
6991 ULONG TargetLinkTrackingInformationLength
;
6992 UCHAR TargetLinkTrackingInformationBuffer
[1];
6993 } REMOTE_LINK_TRACKING_INFORMATION
, *PREMOTE_LINK_TRACKING_INFORMATION
;
6995 #define IO_OPEN_PAGING_FILE 0x0002
6996 #define IO_OPEN_TARGET_DIRECTORY 0x0004
6997 #define IO_STOP_ON_SYMLINK 0x0008
6998 #define IO_MM_PAGING_FILE 0x0010
7000 _Function_class_(DRIVER_FS_NOTIFICATION
)
7002 (NTAPI DRIVER_FS_NOTIFICATION
)(
7003 _In_ PDEVICE_OBJECT DeviceObject
,
7004 _In_ BOOLEAN FsActive
);
7005 typedef DRIVER_FS_NOTIFICATION
*PDRIVER_FS_NOTIFICATION
;
7007 typedef enum _FS_FILTER_SECTION_SYNC_TYPE
{
7009 SyncTypeCreateSection
7010 } FS_FILTER_SECTION_SYNC_TYPE
, *PFS_FILTER_SECTION_SYNC_TYPE
;
7012 typedef enum _FS_FILTER_STREAM_FO_NOTIFICATION_TYPE
{
7013 NotifyTypeCreate
= 0,
7015 } FS_FILTER_STREAM_FO_NOTIFICATION_TYPE
, *PFS_FILTER_STREAM_FO_NOTIFICATION_TYPE
;
7017 typedef union _FS_FILTER_PARAMETERS
{
7019 PLARGE_INTEGER EndingOffset
;
7020 PERESOURCE
*ResourceToRelease
;
7021 } AcquireForModifiedPageWriter
;
7023 PERESOURCE ResourceToRelease
;
7024 } ReleaseForModifiedPageWriter
;
7026 FS_FILTER_SECTION_SYNC_TYPE SyncType
;
7027 ULONG PageProtection
;
7028 } AcquireForSectionSynchronization
;
7030 FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType
;
7031 BOOLEAN POINTER_ALIGNMENT SafeToRecurse
;
7032 } NotifyStreamFileObject
;
7040 } FS_FILTER_PARAMETERS
, *PFS_FILTER_PARAMETERS
;
7042 #define FS_FILTER_ACQUIRE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-1
7043 #define FS_FILTER_RELEASE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-2
7044 #define FS_FILTER_ACQUIRE_FOR_MOD_WRITE (UCHAR)-3
7045 #define FS_FILTER_RELEASE_FOR_MOD_WRITE (UCHAR)-4
7046 #define FS_FILTER_ACQUIRE_FOR_CC_FLUSH (UCHAR)-5
7047 #define FS_FILTER_RELEASE_FOR_CC_FLUSH (UCHAR)-6
7049 typedef struct _FS_FILTER_CALLBACK_DATA
{
7050 ULONG SizeOfFsFilterCallbackData
;
7053 struct _DEVICE_OBJECT
*DeviceObject
;
7054 struct _FILE_OBJECT
*FileObject
;
7055 FS_FILTER_PARAMETERS Parameters
;
7056 } FS_FILTER_CALLBACK_DATA
, *PFS_FILTER_CALLBACK_DATA
;
7059 (NTAPI
*PFS_FILTER_CALLBACK
) (
7060 _In_ PFS_FILTER_CALLBACK_DATA Data
,
7061 _Out_ PVOID
*CompletionContext
);
7064 (NTAPI
*PFS_FILTER_COMPLETION_CALLBACK
) (
7065 _In_ PFS_FILTER_CALLBACK_DATA Data
,
7066 _In_ NTSTATUS OperationStatus
,
7067 _In_ PVOID CompletionContext
);
7069 typedef struct _FS_FILTER_CALLBACKS
{
7070 ULONG SizeOfFsFilterCallbacks
;
7072 PFS_FILTER_CALLBACK PreAcquireForSectionSynchronization
;
7073 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization
;
7074 PFS_FILTER_CALLBACK PreReleaseForSectionSynchronization
;
7075 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization
;
7076 PFS_FILTER_CALLBACK PreAcquireForCcFlush
;
7077 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush
;
7078 PFS_FILTER_CALLBACK PreReleaseForCcFlush
;
7079 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush
;
7080 PFS_FILTER_CALLBACK PreAcquireForModifiedPageWriter
;
7081 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter
;
7082 PFS_FILTER_CALLBACK PreReleaseForModifiedPageWriter
;
7083 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter
;
7084 } FS_FILTER_CALLBACKS
, *PFS_FILTER_CALLBACKS
;
7086 extern NTKERNELAPI KSPIN_LOCK IoStatisticsLock
;
7087 extern NTKERNELAPI ULONG IoReadOperationCount
;
7088 extern NTKERNELAPI ULONG IoWriteOperationCount
;
7089 extern NTKERNELAPI ULONG IoOtherOperationCount
;
7090 extern NTKERNELAPI LARGE_INTEGER IoReadTransferCount
;
7091 extern NTKERNELAPI LARGE_INTEGER IoWriteTransferCount
;
7092 extern NTKERNELAPI LARGE_INTEGER IoOtherTransferCount
;
7094 #define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE 64
7095 #define IO_FILE_OBJECT_PAGED_POOL_CHARGE 1024
7097 #if (NTDDI_VERSION >= NTDDI_VISTA)
7098 typedef struct _IO_PRIORITY_INFO
{
7100 ULONG ThreadPriority
;
7102 IO_PRIORITY_HINT IoPriority
;
7103 } IO_PRIORITY_INFO
, *PIO_PRIORITY_INFO
;