[XDK]
[reactos.git] / reactos / sdk / include / xdk / iotypes.h
1 $if (_WDMDDK_ || _NTDDK_)
2 /******************************************************************************
3 * I/O Manager Types *
4 ******************************************************************************/
5 $endif (_WDMDDK_ || _NTDDK_)
6
7 $if (_WDMDDK_)
8
9 #define STATUS_CONTINUE_COMPLETION STATUS_SUCCESS
10
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
16
17 #define POOL_COLD_ALLOCATION 256
18 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
19 #define POOL_RAISE_IF_ALLOCATION_FAILURE 16
20
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
26 #define IO_TYPE_IRP 6
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
34
35 #define IO_TYPE_CSQ_IRP_CONTEXT 1
36 #define IO_TYPE_CSQ 2
37 #define IO_TYPE_CSQ_EX 3
38
39 /* IO_RESOURCE_DESCRIPTOR.Option */
40 #define IO_RESOURCE_PREFERRED 0x01
41 #define IO_RESOURCE_DEFAULT 0x02
42 #define IO_RESOURCE_ALTERNATIVE 0x08
43
44 $endif (_WDMDDK_)
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
113
114 $endif (_WDMDDK_ || _DEVIOCTL_)
115 $if (_WDMDDK_)
116 #if defined(NT_PROCESSOR_GROUPS)
117
118 typedef USHORT IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY;
119
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};
128
129 #else /* defined(NT_PROCESSOR_GROUPS) */
130
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;
139
140 #endif
141
142 typedef enum _IRQ_PRIORITY {
143 IrqPriorityUndefined = 0,
144 IrqPriorityLow,
145 IrqPriorityNormal,
146 IrqPriorityHigh
147 } IRQ_PRIORITY, *PIRQ_PRIORITY;
148
149 typedef enum _IRQ_GROUP_POLICY {
150 GroupAffinityAllGroupZero = 0,
151 GroupAffinityDontCare
152 } IRQ_GROUP_POLICY, *PIRQ_GROUP_POLICY;
153
154 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
155
156 typedef struct _OBJECT_HANDLE_INFORMATION {
157 ULONG HandleAttributes;
158 ACCESS_MASK GrantedAccess;
159 } OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION;
160
161 typedef struct _CLIENT_ID {
162 HANDLE UniqueProcess;
163 HANDLE UniqueThread;
164 } CLIENT_ID, *PCLIENT_ID;
165
166 typedef struct _VPB {
167 CSHORT Type;
168 CSHORT Size;
169 USHORT Flags;
170 USHORT VolumeLabelLength;
171 struct _DEVICE_OBJECT *DeviceObject;
172 struct _DEVICE_OBJECT *RealDevice;
173 ULONG SerialNumber;
174 ULONG ReferenceCount;
175 WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)];
176 } VPB, *PVPB;
177
178 typedef enum _IO_ALLOCATION_ACTION {
179 KeepObject = 1,
180 DeallocateObject,
181 DeallocateObjectKeepRegisters
182 } IO_ALLOCATION_ACTION, *PIO_ALLOCATION_ACTION;
183
184 _Function_class_(DRIVER_CONTROL)
185 _IRQL_requires_same_
186 typedef IO_ALLOCATION_ACTION
187 (NTAPI DRIVER_CONTROL)(
188 _In_ struct _DEVICE_OBJECT *DeviceObject,
189 _Inout_ struct _IRP *Irp,
190 _In_ PVOID MapRegisterBase,
191 _In_ PVOID Context);
192 typedef DRIVER_CONTROL *PDRIVER_CONTROL;
193
194 typedef struct _WAIT_CONTEXT_BLOCK {
195 KDEVICE_QUEUE_ENTRY WaitQueueEntry;
196 PDRIVER_CONTROL DeviceRoutine;
197 PVOID DeviceContext;
198 ULONG NumberOfMapRegisters;
199 PVOID DeviceObject;
200 PVOID CurrentIrp;
201 PKDPC BufferChainingDpc;
202 } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
203
204 $endif (_WDMDDK_)
205 $if (_NTDDK_)
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
218
219 $endif (_NTDDK_)
220 $if (_WDMDDK_)
221 /* DEVICE_OBJECT.Flags */
222 #define DO_VERIFY_VOLUME 0x00000002
223 #define DO_BUFFERED_IO 0x00000004
224 #define DO_EXCLUSIVE 0x00000008
225 #define DO_DIRECT_IO 0x00000010
226 #define DO_MAP_IO_BUFFER 0x00000020
227 #define DO_DEVICE_INITIALIZING 0x00000080
228 #define DO_SHUTDOWN_REGISTERED 0x00000800
229 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
230 #define DO_POWER_PAGABLE 0x00002000
231 #define DO_POWER_INRUSH 0x00004000
232
233 /* DEVICE_OBJECT.Characteristics */
234 #define FILE_REMOVABLE_MEDIA 0x00000001
235 #define FILE_READ_ONLY_DEVICE 0x00000002
236 #define FILE_FLOPPY_DISKETTE 0x00000004
237 #define FILE_WRITE_ONCE_MEDIA 0x00000008
238 #define FILE_REMOTE_DEVICE 0x00000010
239 #define FILE_DEVICE_IS_MOUNTED 0x00000020
240 #define FILE_VIRTUAL_VOLUME 0x00000040
241 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
242 #define FILE_DEVICE_SECURE_OPEN 0x00000100
243 #define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800
244 #define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000
245 #define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000
246
247 /* DEVICE_OBJECT.AlignmentRequirement */
248 #define FILE_BYTE_ALIGNMENT 0x00000000
249 #define FILE_WORD_ALIGNMENT 0x00000001
250 #define FILE_LONG_ALIGNMENT 0x00000003
251 #define FILE_QUAD_ALIGNMENT 0x00000007
252 #define FILE_OCTA_ALIGNMENT 0x0000000f
253 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
254 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
255 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
256 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
257 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
258
259 $endif (_NTDDK_)
260 $if (_WDMDDK_ || _DEVIOCTL_)
261 /* DEVICE_OBJECT.DeviceType */
262 #define DEVICE_TYPE ULONG
263
264 $endif (_WDMDDK_ || _DEVIOCTL_)
265 $if (_WDMDDK_)
266 typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _DEVICE_OBJECT {
267 CSHORT Type;
268 USHORT Size;
269 LONG ReferenceCount;
270 struct _DRIVER_OBJECT *DriverObject;
271 struct _DEVICE_OBJECT *NextDevice;
272 struct _DEVICE_OBJECT *AttachedDevice;
273 struct _IRP *CurrentIrp;
274 PIO_TIMER Timer;
275 ULONG Flags;
276 ULONG Characteristics;
277 volatile PVPB Vpb;
278 PVOID DeviceExtension;
279 DEVICE_TYPE DeviceType;
280 CCHAR StackSize;
281 union {
282 LIST_ENTRY ListEntry;
283 WAIT_CONTEXT_BLOCK Wcb;
284 } Queue;
285 ULONG AlignmentRequirement;
286 KDEVICE_QUEUE DeviceQueue;
287 KDPC Dpc;
288 ULONG ActiveThreadCount;
289 PSECURITY_DESCRIPTOR SecurityDescriptor;
290 KEVENT DeviceLock;
291 USHORT SectorSize;
292 USHORT Spare1;
293 struct _DEVOBJ_EXTENSION *DeviceObjectExtension;
294 PVOID Reserved;
295 } DEVICE_OBJECT, *PDEVICE_OBJECT;
296
297 typedef enum _IO_SESSION_STATE {
298 IoSessionStateCreated = 1,
299 IoSessionStateInitialized,
300 IoSessionStateConnected,
301 IoSessionStateDisconnected,
302 IoSessionStateDisconnectedLoggedOn,
303 IoSessionStateLoggedOn,
304 IoSessionStateLoggedOff,
305 IoSessionStateTerminated,
306 IoSessionStateMax
307 } IO_SESSION_STATE, *PIO_SESSION_STATE;
308
309 typedef enum _IO_COMPLETION_ROUTINE_RESULT {
310 ContinueCompletion = STATUS_CONTINUE_COMPLETION,
311 StopCompletion = STATUS_MORE_PROCESSING_REQUIRED
312 } IO_COMPLETION_ROUTINE_RESULT, *PIO_COMPLETION_ROUTINE_RESULT;
313
314 typedef struct _IO_INTERRUPT_MESSAGE_INFO_ENTRY {
315 PHYSICAL_ADDRESS MessageAddress;
316 KAFFINITY TargetProcessorSet;
317 PKINTERRUPT InterruptObject;
318 ULONG MessageData;
319 ULONG Vector;
320 KIRQL Irql;
321 KINTERRUPT_MODE Mode;
322 KINTERRUPT_POLARITY Polarity;
323 } IO_INTERRUPT_MESSAGE_INFO_ENTRY, *PIO_INTERRUPT_MESSAGE_INFO_ENTRY;
324
325 typedef struct _IO_INTERRUPT_MESSAGE_INFO {
326 KIRQL UnifiedIrql;
327 ULONG MessageCount;
328 IO_INTERRUPT_MESSAGE_INFO_ENTRY MessageInfo[1];
329 } IO_INTERRUPT_MESSAGE_INFO, *PIO_INTERRUPT_MESSAGE_INFO;
330
331 typedef struct _IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS {
332 _In_ PDEVICE_OBJECT PhysicalDeviceObject;
333 _Out_ PKINTERRUPT *InterruptObject;
334 _In_ PKSERVICE_ROUTINE ServiceRoutine;
335 _In_ PVOID ServiceContext;
336 _In_opt_ PKSPIN_LOCK SpinLock;
337 _In_ KIRQL SynchronizeIrql;
338 _In_ BOOLEAN FloatingSave;
339 _In_ BOOLEAN ShareVector;
340 _In_ ULONG Vector;
341 _In_ KIRQL Irql;
342 _In_ KINTERRUPT_MODE InterruptMode;
343 _In_ KAFFINITY ProcessorEnableMask;
344 _In_ USHORT Group;
345 } IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS, *PIO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS;
346
347 typedef struct _IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS {
348 _In_ PDEVICE_OBJECT PhysicalDeviceObject;
349 _Out_ PKINTERRUPT *InterruptObject;
350 _In_ PKSERVICE_ROUTINE ServiceRoutine;
351 _In_ PVOID ServiceContext;
352 _In_opt_ PKSPIN_LOCK SpinLock;
353 _In_opt_ KIRQL SynchronizeIrql;
354 _In_ BOOLEAN FloatingSave;
355 } IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS;
356
357 typedef struct _IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS {
358 _In_ PDEVICE_OBJECT PhysicalDeviceObject;
359 union {
360 _Out_ PVOID *Generic;
361 _Out_ PIO_INTERRUPT_MESSAGE_INFO *InterruptMessageTable;
362 _Out_ PKINTERRUPT *InterruptObject;
363 } ConnectionContext;
364 _In_ PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine;
365 _In_ PVOID ServiceContext;
366 _In_opt_ PKSPIN_LOCK SpinLock;
367 _In_opt_ KIRQL SynchronizeIrql;
368 _In_ BOOLEAN FloatingSave;
369 _In_opt_ PKSERVICE_ROUTINE FallBackServiceRoutine;
370 } IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS;
371
372 typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS {
373 _Inout_ ULONG Version;
374 _ANONYMOUS_UNION union {
375 IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified;
376 IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased;
377 IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased;
378 } DUMMYUNIONNAME;
379 } IO_CONNECT_INTERRUPT_PARAMETERS, *PIO_CONNECT_INTERRUPT_PARAMETERS;
380
381 typedef struct _IO_DISCONNECT_INTERRUPT_PARAMETERS {
382 _In_ ULONG Version;
383 union {
384 _In_ PVOID Generic;
385 _In_ PKINTERRUPT InterruptObject;
386 _In_ PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable;
387 } ConnectionContext;
388 } IO_DISCONNECT_INTERRUPT_PARAMETERS, *PIO_DISCONNECT_INTERRUPT_PARAMETERS;
389
390 typedef enum _IO_ACCESS_TYPE {
391 ReadAccess,
392 WriteAccess,
393 ModifyAccess
394 } IO_ACCESS_TYPE;
395
396 typedef enum _IO_ACCESS_MODE {
397 SequentialAccess,
398 RandomAccess
399 } IO_ACCESS_MODE;
400
401 typedef enum _IO_CONTAINER_NOTIFICATION_CLASS {
402 IoSessionStateNotification,
403 IoMaxContainerNotificationClass
404 } IO_CONTAINER_NOTIFICATION_CLASS;
405
406 typedef struct _IO_SESSION_STATE_NOTIFICATION {
407 ULONG Size;
408 ULONG Flags;
409 PVOID IoObject;
410 ULONG EventMask;
411 PVOID Context;
412 } IO_SESSION_STATE_NOTIFICATION, *PIO_SESSION_STATE_NOTIFICATION;
413
414 typedef enum _IO_CONTAINER_INFORMATION_CLASS {
415 IoSessionStateInformation,
416 IoMaxContainerInformationClass
417 } IO_CONTAINER_INFORMATION_CLASS;
418
419 typedef struct _IO_SESSION_STATE_INFORMATION {
420 ULONG SessionId;
421 IO_SESSION_STATE SessionState;
422 BOOLEAN LocalSession;
423 } IO_SESSION_STATE_INFORMATION, *PIO_SESSION_STATE_INFORMATION;
424
425 #if (NTDDI_VERSION >= NTDDI_WIN7)
426
427 typedef NTSTATUS
428 (NTAPI *PIO_CONTAINER_NOTIFICATION_FUNCTION)(
429 VOID);
430
431 typedef NTSTATUS
432 (NTAPI IO_SESSION_NOTIFICATION_FUNCTION)(
433 _In_ PVOID SessionObject,
434 _In_ PVOID IoObject,
435 _In_ ULONG Event,
436 _In_ PVOID Context,
437 _In_reads_bytes_opt_(PayloadLength) PVOID NotificationPayload,
438 _In_ ULONG PayloadLength);
439
440 typedef IO_SESSION_NOTIFICATION_FUNCTION *PIO_SESSION_NOTIFICATION_FUNCTION;
441
442 #endif
443
444 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK * PIO_REMOVE_LOCK_TRACKING_BLOCK;
445
446 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK {
447 BOOLEAN Removed;
448 BOOLEAN Reserved[3];
449 volatile LONG IoCount;
450 KEVENT RemoveEvent;
451 } IO_REMOVE_LOCK_COMMON_BLOCK;
452
453 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK {
454 LONG Signature;
455 LONG HighWatermark;
456 LONGLONG MaxLockedTicks;
457 LONG AllocateTag;
458 LIST_ENTRY LockList;
459 KSPIN_LOCK Spin;
460 volatile LONG LowMemoryCount;
461 ULONG Reserved1[4];
462 PVOID Reserved2;
463 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks;
464 } IO_REMOVE_LOCK_DBG_BLOCK;
465
466 typedef struct _IO_REMOVE_LOCK {
467 IO_REMOVE_LOCK_COMMON_BLOCK Common;
468 #if DBG
469 IO_REMOVE_LOCK_DBG_BLOCK Dbg;
470 #endif
471 } IO_REMOVE_LOCK, *PIO_REMOVE_LOCK;
472
473 typedef struct _IO_WORKITEM *PIO_WORKITEM;
474
475 _Function_class_(IO_WORKITEM_ROUTINE)
476 _IRQL_requires_(PASSIVE_LEVEL)
477 _IRQL_requires_same_
478 typedef VOID
479 (NTAPI IO_WORKITEM_ROUTINE)(
480 _In_ PDEVICE_OBJECT DeviceObject,
481 _In_opt_ PVOID Context);
482 typedef IO_WORKITEM_ROUTINE *PIO_WORKITEM_ROUTINE;
483
484 typedef VOID
485 (NTAPI IO_WORKITEM_ROUTINE_EX)(
486 _In_ PVOID IoObject,
487 _In_opt_ PVOID Context,
488 _In_ PIO_WORKITEM IoWorkItem);
489 typedef IO_WORKITEM_ROUTINE_EX *PIO_WORKITEM_ROUTINE_EX;
490
491 typedef struct _SHARE_ACCESS {
492 ULONG OpenCount;
493 ULONG Readers;
494 ULONG Writers;
495 ULONG Deleters;
496 ULONG SharedRead;
497 ULONG SharedWrite;
498 ULONG SharedDelete;
499 } SHARE_ACCESS, *PSHARE_ACCESS;
500
501 typedef enum _CREATE_FILE_TYPE {
502 CreateFileTypeNone,
503 CreateFileTypeNamedPipe,
504 CreateFileTypeMailslot
505 } CREATE_FILE_TYPE;
506
507 #define IO_FORCE_ACCESS_CHECK 0x001
508 #define IO_NO_PARAMETER_CHECKING 0x100
509
510 #define IO_REPARSE 0x0
511 #define IO_REMOUNT 0x1
512
513 typedef struct _IO_STATUS_BLOCK {
514 _ANONYMOUS_UNION union {
515 NTSTATUS Status;
516 PVOID Pointer;
517 } DUMMYUNIONNAME;
518 ULONG_PTR Information;
519 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
520
521 #if defined(_WIN64)
522 typedef struct _IO_STATUS_BLOCK32 {
523 NTSTATUS Status;
524 ULONG Information;
525 } IO_STATUS_BLOCK32, *PIO_STATUS_BLOCK32;
526 #endif
527
528 typedef VOID
529 (NTAPI *PIO_APC_ROUTINE)(
530 _In_ PVOID ApcContext,
531 _In_ PIO_STATUS_BLOCK IoStatusBlock,
532 _In_ ULONG Reserved);
533
534 #define PIO_APC_ROUTINE_DEFINED
535
536 typedef enum _IO_SESSION_EVENT {
537 IoSessionEventIgnore = 0,
538 IoSessionEventCreated,
539 IoSessionEventTerminated,
540 IoSessionEventConnected,
541 IoSessionEventDisconnected,
542 IoSessionEventLogon,
543 IoSessionEventLogoff,
544 IoSessionEventMax
545 } IO_SESSION_EVENT, *PIO_SESSION_EVENT;
546
547 #define IO_SESSION_STATE_ALL_EVENTS 0xffffffff
548 #define IO_SESSION_STATE_CREATION_EVENT 0x00000001
549 #define IO_SESSION_STATE_TERMINATION_EVENT 0x00000002
550 #define IO_SESSION_STATE_CONNECT_EVENT 0x00000004
551 #define IO_SESSION_STATE_DISCONNECT_EVENT 0x00000008
552 #define IO_SESSION_STATE_LOGON_EVENT 0x00000010
553 #define IO_SESSION_STATE_LOGOFF_EVENT 0x00000020
554
555 #define IO_SESSION_STATE_VALID_EVENT_MASK 0x0000003f
556
557 #define IO_SESSION_MAX_PAYLOAD_SIZE 256L
558
559 typedef struct _IO_SESSION_CONNECT_INFO {
560 ULONG SessionId;
561 BOOLEAN LocalSession;
562 } IO_SESSION_CONNECT_INFO, *PIO_SESSION_CONNECT_INFO;
563
564 #define EVENT_INCREMENT 1
565 #define IO_NO_INCREMENT 0
566 #define IO_CD_ROM_INCREMENT 1
567 #define IO_DISK_INCREMENT 1
568 #define IO_KEYBOARD_INCREMENT 6
569 #define IO_MAILSLOT_INCREMENT 2
570 #define IO_MOUSE_INCREMENT 6
571 #define IO_NAMED_PIPE_INCREMENT 2
572 #define IO_NETWORK_INCREMENT 2
573 #define IO_PARALLEL_INCREMENT 1
574 #define IO_SERIAL_INCREMENT 2
575 #define IO_SOUND_INCREMENT 8
576 #define IO_VIDEO_INCREMENT 1
577 #define SEMAPHORE_INCREMENT 1
578
579 #define MM_MAXIMUM_DISK_IO_SIZE (0x10000)
580
581 typedef struct _BOOTDISK_INFORMATION {
582 LONGLONG BootPartitionOffset;
583 LONGLONG SystemPartitionOffset;
584 ULONG BootDeviceSignature;
585 ULONG SystemDeviceSignature;
586 } BOOTDISK_INFORMATION, *PBOOTDISK_INFORMATION;
587
588 typedef struct _BOOTDISK_INFORMATION_EX {
589 LONGLONG BootPartitionOffset;
590 LONGLONG SystemPartitionOffset;
591 ULONG BootDeviceSignature;
592 ULONG SystemDeviceSignature;
593 GUID BootDeviceGuid;
594 GUID SystemDeviceGuid;
595 BOOLEAN BootDeviceIsGpt;
596 BOOLEAN SystemDeviceIsGpt;
597 } BOOTDISK_INFORMATION_EX, *PBOOTDISK_INFORMATION_EX;
598
599 #if (NTDDI_VERSION >= NTDDI_WIN7)
600
601 typedef struct _LOADER_PARTITION_INFORMATION_EX {
602 ULONG PartitionStyle;
603 ULONG PartitionNumber;
604 _ANONYMOUS_UNION union {
605 ULONG Signature;
606 GUID DeviceId;
607 } DUMMYUNIONNAME;
608 ULONG Flags;
609 } LOADER_PARTITION_INFORMATION_EX, *PLOADER_PARTITION_INFORMATION_EX;
610
611 typedef struct _BOOTDISK_INFORMATION_LITE {
612 ULONG NumberEntries;
613 LOADER_PARTITION_INFORMATION_EX Entries[1];
614 } BOOTDISK_INFORMATION_LITE, *PBOOTDISK_INFORMATION_LITE;
615
616 #else
617
618 #if (NTDDI_VERSION >= NTDDI_VISTA)
619 typedef struct _BOOTDISK_INFORMATION_LITE {
620 ULONG BootDeviceSignature;
621 ULONG SystemDeviceSignature;
622 GUID BootDeviceGuid;
623 GUID SystemDeviceGuid;
624 BOOLEAN BootDeviceIsGpt;
625 BOOLEAN SystemDeviceIsGpt;
626 } BOOTDISK_INFORMATION_LITE, *PBOOTDISK_INFORMATION_LITE;
627 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
628
629 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
630
631 #include <pshpack1.h>
632
633 typedef struct _EISA_MEMORY_TYPE {
634 UCHAR ReadWrite:1;
635 UCHAR Cached:1;
636 UCHAR Reserved0:1;
637 UCHAR Type:2;
638 UCHAR Shared:1;
639 UCHAR Reserved1:1;
640 UCHAR MoreEntries:1;
641 } EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE;
642
643 typedef struct _EISA_MEMORY_CONFIGURATION {
644 EISA_MEMORY_TYPE ConfigurationByte;
645 UCHAR DataSize;
646 USHORT AddressLowWord;
647 UCHAR AddressHighByte;
648 USHORT MemorySize;
649 } EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION;
650
651 typedef struct _EISA_IRQ_DESCRIPTOR {
652 UCHAR Interrupt:4;
653 UCHAR Reserved:1;
654 UCHAR LevelTriggered:1;
655 UCHAR Shared:1;
656 UCHAR MoreEntries:1;
657 } EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR;
658
659 typedef struct _EISA_IRQ_CONFIGURATION {
660 EISA_IRQ_DESCRIPTOR ConfigurationByte;
661 UCHAR Reserved;
662 } EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION;
663
664 typedef struct _DMA_CONFIGURATION_BYTE0 {
665 UCHAR Channel:3;
666 UCHAR Reserved:3;
667 UCHAR Shared:1;
668 UCHAR MoreEntries:1;
669 } DMA_CONFIGURATION_BYTE0;
670
671 typedef struct _DMA_CONFIGURATION_BYTE1 {
672 UCHAR Reserved0:2;
673 UCHAR TransferSize:2;
674 UCHAR Timing:2;
675 UCHAR Reserved1:2;
676 } DMA_CONFIGURATION_BYTE1;
677
678 typedef struct _EISA_DMA_CONFIGURATION {
679 DMA_CONFIGURATION_BYTE0 ConfigurationByte0;
680 DMA_CONFIGURATION_BYTE1 ConfigurationByte1;
681 } EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION;
682
683 typedef struct _EISA_PORT_DESCRIPTOR {
684 UCHAR NumberPorts:5;
685 UCHAR Reserved:1;
686 UCHAR Shared:1;
687 UCHAR MoreEntries:1;
688 } EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR;
689
690 typedef struct _EISA_PORT_CONFIGURATION {
691 EISA_PORT_DESCRIPTOR Configuration;
692 USHORT PortAddress;
693 } EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION;
694
695 typedef struct _CM_EISA_SLOT_INFORMATION {
696 UCHAR ReturnCode;
697 UCHAR ReturnFlags;
698 UCHAR MajorRevision;
699 UCHAR MinorRevision;
700 USHORT Checksum;
701 UCHAR NumberFunctions;
702 UCHAR FunctionInformation;
703 ULONG CompressedId;
704 } CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION;
705
706 typedef struct _CM_EISA_FUNCTION_INFORMATION {
707 ULONG CompressedId;
708 UCHAR IdSlotFlags1;
709 UCHAR IdSlotFlags2;
710 UCHAR MinorRevision;
711 UCHAR MajorRevision;
712 UCHAR Selections[26];
713 UCHAR FunctionFlags;
714 UCHAR TypeString[80];
715 EISA_MEMORY_CONFIGURATION EisaMemory[9];
716 EISA_IRQ_CONFIGURATION EisaIrq[7];
717 EISA_DMA_CONFIGURATION EisaDma[4];
718 EISA_PORT_CONFIGURATION EisaPort[20];
719 UCHAR InitializationData[60];
720 } CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION;
721
722 #include <poppack.h>
723
724 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
725
726 #define EISA_FUNCTION_ENABLED 0x80
727 #define EISA_FREE_FORM_DATA 0x40
728 #define EISA_HAS_PORT_INIT_ENTRY 0x20
729 #define EISA_HAS_PORT_RANGE 0x10
730 #define EISA_HAS_DMA_ENTRY 0x08
731 #define EISA_HAS_IRQ_ENTRY 0x04
732 #define EISA_HAS_MEMORY_ENTRY 0x02
733 #define EISA_HAS_TYPE_ENTRY 0x01
734 #define EISA_HAS_INFORMATION \
735 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
736 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
737
738 #define EISA_MORE_ENTRIES 0x80
739 #define EISA_SYSTEM_MEMORY 0x00
740 #define EISA_MEMORY_TYPE_RAM 0x01
741
742 /* CM_EISA_SLOT_INFORMATION.ReturnCode */
743
744 #define EISA_INVALID_SLOT 0x80
745 #define EISA_INVALID_FUNCTION 0x81
746 #define EISA_INVALID_CONFIGURATION 0x82
747 #define EISA_EMPTY_SLOT 0x83
748 #define EISA_INVALID_BIOS_CALL 0x86
749
750 /*
751 ** Plug and Play structures
752 */
753
754 typedef VOID
755 (NTAPI *PINTERFACE_REFERENCE)(
756 PVOID Context);
757
758 typedef VOID
759 (NTAPI *PINTERFACE_DEREFERENCE)(
760 PVOID Context);
761
762 _Function_class_(TRANSLATE_BUS_ADDRESS)
763 _IRQL_requires_same_
764 typedef BOOLEAN
765 (NTAPI TRANSLATE_BUS_ADDRESS)(
766 _Inout_opt_ PVOID Context,
767 _In_ PHYSICAL_ADDRESS BusAddress,
768 _In_ ULONG Length,
769 _Out_ PULONG AddressSpace,
770 _Out_ PPHYSICAL_ADDRESS TranslatedAddress);
771 typedef TRANSLATE_BUS_ADDRESS *PTRANSLATE_BUS_ADDRESS;
772
773 _Function_class_(GET_DMA_ADAPTER)
774 _IRQL_requires_same_
775 typedef struct _DMA_ADAPTER*
776 (NTAPI GET_DMA_ADAPTER)(
777 _Inout_opt_ PVOID Context,
778 _In_ struct _DEVICE_DESCRIPTION *DeviceDescriptor,
779 _Out_ PULONG NumberOfMapRegisters);
780 typedef GET_DMA_ADAPTER *PGET_DMA_ADAPTER;
781
782 _Function_class_(GET_SET_DEVICE_DATA)
783 _IRQL_requires_same_
784 typedef ULONG
785 (NTAPI GET_SET_DEVICE_DATA)(
786 _Inout_opt_ PVOID Context,
787 _In_ ULONG DataType,
788 _Inout_updates_bytes_(Length) PVOID Buffer,
789 _In_ ULONG Offset,
790 _In_ ULONG Length);
791 typedef GET_SET_DEVICE_DATA *PGET_SET_DEVICE_DATA;
792
793 typedef enum _DEVICE_INSTALL_STATE {
794 InstallStateInstalled,
795 InstallStateNeedsReinstall,
796 InstallStateFailedInstall,
797 InstallStateFinishInstall
798 } DEVICE_INSTALL_STATE, *PDEVICE_INSTALL_STATE;
799
800 typedef struct _LEGACY_BUS_INFORMATION {
801 GUID BusTypeGuid;
802 INTERFACE_TYPE LegacyBusType;
803 ULONG BusNumber;
804 } LEGACY_BUS_INFORMATION, *PLEGACY_BUS_INFORMATION;
805
806 typedef enum _DEVICE_REMOVAL_POLICY {
807 RemovalPolicyExpectNoRemoval = 1,
808 RemovalPolicyExpectOrderlyRemoval = 2,
809 RemovalPolicyExpectSurpriseRemoval = 3
810 } DEVICE_REMOVAL_POLICY, *PDEVICE_REMOVAL_POLICY;
811
812 typedef VOID
813 (NTAPI *PREENUMERATE_SELF)(
814 _In_ PVOID Context);
815
816 typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD {
817 USHORT Size;
818 USHORT Version;
819 PVOID Context;
820 PINTERFACE_REFERENCE InterfaceReference;
821 PINTERFACE_DEREFERENCE InterfaceDereference;
822 PREENUMERATE_SELF SurpriseRemoveAndReenumerateSelf;
823 } REENUMERATE_SELF_INTERFACE_STANDARD, *PREENUMERATE_SELF_INTERFACE_STANDARD;
824
825 typedef VOID
826 (NTAPI *PIO_DEVICE_EJECT_CALLBACK)(
827 _In_ NTSTATUS Status,
828 _Inout_opt_ PVOID Context);
829
830 #define PCI_DEVICE_PRESENT_INTERFACE_VERSION 1
831
832 /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
833 #define PCI_USE_SUBSYSTEM_IDS 0x00000001
834 #define PCI_USE_REVISION 0x00000002
835 #define PCI_USE_VENDEV_IDS 0x00000004
836 #define PCI_USE_CLASS_SUBCLASS 0x00000008
837 #define PCI_USE_PROGIF 0x00000010
838 #define PCI_USE_LOCAL_BUS 0x00000020
839 #define PCI_USE_LOCAL_DEVICE 0x00000040
840
841 typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS {
842 ULONG Size;
843 ULONG Flags;
844 USHORT VendorID;
845 USHORT DeviceID;
846 UCHAR RevisionID;
847 USHORT SubVendorID;
848 USHORT SubSystemID;
849 UCHAR BaseClass;
850 UCHAR SubClass;
851 UCHAR ProgIf;
852 } PCI_DEVICE_PRESENCE_PARAMETERS, *PPCI_DEVICE_PRESENCE_PARAMETERS;
853
854 _IRQL_requires_max_(PASSIVE_LEVEL)
855 _Must_inspect_result_
856 typedef BOOLEAN
857 (NTAPI PCI_IS_DEVICE_PRESENT)(
858 _In_ USHORT VendorID,
859 _In_ USHORT DeviceID,
860 _In_ UCHAR RevisionID,
861 _In_ USHORT SubVendorID,
862 _In_ USHORT SubSystemID,
863 _In_ ULONG Flags);
864 typedef PCI_IS_DEVICE_PRESENT *PPCI_IS_DEVICE_PRESENT;
865
866 _IRQL_requires_max_(PASSIVE_LEVEL)
867 _Must_inspect_result_
868 typedef BOOLEAN
869 (NTAPI PCI_IS_DEVICE_PRESENT_EX)(
870 _In_ PVOID Context,
871 _In_ PPCI_DEVICE_PRESENCE_PARAMETERS Parameters);
872 typedef PCI_IS_DEVICE_PRESENT_EX *PPCI_IS_DEVICE_PRESENT_EX;
873
874 typedef struct _BUS_INTERFACE_STANDARD {
875 USHORT Size;
876 USHORT Version;
877 PVOID Context;
878 PINTERFACE_REFERENCE InterfaceReference;
879 PINTERFACE_DEREFERENCE InterfaceDereference;
880 PTRANSLATE_BUS_ADDRESS TranslateBusAddress;
881 PGET_DMA_ADAPTER GetDmaAdapter;
882 PGET_SET_DEVICE_DATA SetBusData;
883 PGET_SET_DEVICE_DATA GetBusData;
884 } BUS_INTERFACE_STANDARD, *PBUS_INTERFACE_STANDARD;
885
886 typedef struct _PCI_DEVICE_PRESENT_INTERFACE {
887 USHORT Size;
888 USHORT Version;
889 PVOID Context;
890 PINTERFACE_REFERENCE InterfaceReference;
891 PINTERFACE_DEREFERENCE InterfaceDereference;
892 PPCI_IS_DEVICE_PRESENT IsDevicePresent;
893 PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx;
894 } PCI_DEVICE_PRESENT_INTERFACE, *PPCI_DEVICE_PRESENT_INTERFACE;
895
896 _Struct_size_bytes_(Size)
897 typedef struct _DEVICE_CAPABILITIES {
898 _Field_range_(==, sizeof(struct _DEVICE_CAPABILITIES)) USHORT Size;
899 USHORT Version;
900 ULONG DeviceD1:1;
901 ULONG DeviceD2:1;
902 ULONG LockSupported:1;
903 ULONG EjectSupported:1;
904 ULONG Removable:1;
905 ULONG DockDevice:1;
906 ULONG UniqueID:1;
907 ULONG SilentInstall:1;
908 ULONG RawDeviceOK:1;
909 ULONG SurpriseRemovalOK:1;
910 ULONG WakeFromD0:1;
911 ULONG WakeFromD1:1;
912 ULONG WakeFromD2:1;
913 ULONG WakeFromD3:1;
914 ULONG HardwareDisabled:1;
915 ULONG NonDynamic:1;
916 ULONG WarmEjectSupported:1;
917 ULONG NoDisplayInUI:1;
918 ULONG Reserved:14;
919 ULONG Address;
920 ULONG UINumber;
921 DEVICE_POWER_STATE DeviceState[PowerSystemMaximum];
922 SYSTEM_POWER_STATE SystemWake;
923 DEVICE_POWER_STATE DeviceWake;
924 ULONG D1Latency;
925 ULONG D2Latency;
926 ULONG D3Latency;
927 } DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES;
928
929 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION {
930 USHORT Version;
931 USHORT Size;
932 GUID Event;
933 GUID InterfaceClassGuid;
934 PUNICODE_STRING SymbolicLinkName;
935 } DEVICE_INTERFACE_CHANGE_NOTIFICATION, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION;
936
937 typedef struct _HWPROFILE_CHANGE_NOTIFICATION {
938 USHORT Version;
939 USHORT Size;
940 GUID Event;
941 } HWPROFILE_CHANGE_NOTIFICATION, *PHWPROFILE_CHANGE_NOTIFICATION;
942
943 #undef INTERFACE
944
945 typedef struct _INTERFACE {
946 USHORT Size;
947 USHORT Version;
948 PVOID Context;
949 PINTERFACE_REFERENCE InterfaceReference;
950 PINTERFACE_DEREFERENCE InterfaceDereference;
951 } INTERFACE, *PINTERFACE;
952
953 typedef struct _PLUGPLAY_NOTIFICATION_HEADER {
954 USHORT Version;
955 USHORT Size;
956 GUID Event;
957 } PLUGPLAY_NOTIFICATION_HEADER, *PPLUGPLAY_NOTIFICATION_HEADER;
958
959 typedef ULONG PNP_DEVICE_STATE, *PPNP_DEVICE_STATE;
960
961 /* PNP_DEVICE_STATE */
962
963 #define PNP_DEVICE_DISABLED 0x00000001
964 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
965 #define PNP_DEVICE_FAILED 0x00000004
966 #define PNP_DEVICE_REMOVED 0x00000008
967 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
968 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
969
970 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION {
971 USHORT Version;
972 USHORT Size;
973 GUID Event;
974 struct _FILE_OBJECT *FileObject;
975 LONG NameBufferOffset;
976 UCHAR CustomDataBuffer[1];
977 } TARGET_DEVICE_CUSTOM_NOTIFICATION, *PTARGET_DEVICE_CUSTOM_NOTIFICATION;
978
979 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION {
980 USHORT Version;
981 USHORT Size;
982 GUID Event;
983 struct _FILE_OBJECT *FileObject;
984 } TARGET_DEVICE_REMOVAL_NOTIFICATION, *PTARGET_DEVICE_REMOVAL_NOTIFICATION;
985
986 #if (NTDDI_VERSION >= NTDDI_VISTA)
987 #include <devpropdef.h>
988 #define PLUGPLAY_PROPERTY_PERSISTENT 0x00000001
989 #endif
990
991 #define PNP_REPLACE_NO_MAP MAXLONGLONG
992
993 _Must_inspect_result_
994 typedef NTSTATUS
995 (NTAPI *PREPLACE_MAP_MEMORY)(
996 _In_ PHYSICAL_ADDRESS TargetPhysicalAddress,
997 _In_ PHYSICAL_ADDRESS SparePhysicalAddress,
998 _Inout_ PLARGE_INTEGER NumberOfBytes,
999 _Outptr_ PVOID *TargetAddress,
1000 _Outptr_ PVOID *SpareAddress);
1001
1002 typedef struct _PNP_REPLACE_MEMORY_LIST {
1003 ULONG AllocatedCount;
1004 ULONG Count;
1005 ULONGLONG TotalLength;
1006 struct {
1007 PHYSICAL_ADDRESS Address;
1008 ULONGLONG Length;
1009 } Ranges[ANYSIZE_ARRAY];
1010 } PNP_REPLACE_MEMORY_LIST, *PPNP_REPLACE_MEMORY_LIST;
1011
1012 typedef struct _PNP_REPLACE_PROCESSOR_LIST {
1013 PKAFFINITY Affinity;
1014 _Field_range_(<=, MAXIMUM_GROUPS) ULONG GroupCount;
1015 ULONG AllocatedCount;
1016 ULONG Count;
1017 ULONG ApicIds[ANYSIZE_ARRAY];
1018 } PNP_REPLACE_PROCESSOR_LIST, *PPNP_REPLACE_PROCESSOR_LIST;
1019
1020 typedef struct _PNP_REPLACE_PROCESSOR_LIST_V1 {
1021 KAFFINITY AffinityMask;
1022 ULONG AllocatedCount;
1023 ULONG Count;
1024 ULONG ApicIds[ANYSIZE_ARRAY];
1025 } PNP_REPLACE_PROCESSOR_LIST_V1, *PPNP_REPLACE_PROCESSOR_LIST_V1;
1026
1027 #define PNP_REPLACE_PARAMETERS_VERSION 2
1028
1029 typedef struct _PNP_REPLACE_PARAMETERS {
1030 ULONG Size;
1031 ULONG Version;
1032 ULONG64 Target;
1033 ULONG64 Spare;
1034 PPNP_REPLACE_PROCESSOR_LIST TargetProcessors;
1035 PPNP_REPLACE_PROCESSOR_LIST SpareProcessors;
1036 PPNP_REPLACE_MEMORY_LIST TargetMemory;
1037 PPNP_REPLACE_MEMORY_LIST SpareMemory;
1038 PREPLACE_MAP_MEMORY MapMemory;
1039 } PNP_REPLACE_PARAMETERS, *PPNP_REPLACE_PARAMETERS;
1040
1041 typedef VOID
1042 (NTAPI *PREPLACE_UNLOAD)(
1043 VOID);
1044
1045 _Must_inspect_result_
1046 typedef NTSTATUS
1047 (NTAPI *PREPLACE_BEGIN)(
1048 _In_ PPNP_REPLACE_PARAMETERS Parameters,
1049 _Outptr_ PVOID *Context);
1050
1051 _Must_inspect_result_
1052 typedef NTSTATUS
1053 (NTAPI *PREPLACE_END)(
1054 _In_ PVOID Context);
1055
1056 _Must_inspect_result_
1057 typedef NTSTATUS
1058 (NTAPI *PREPLACE_MIRROR_PHYSICAL_MEMORY)(
1059 _In_ PVOID Context,
1060 _In_ PHYSICAL_ADDRESS PhysicalAddress,
1061 _In_ LARGE_INTEGER ByteCount);
1062
1063 _Must_inspect_result_
1064 typedef NTSTATUS
1065 (NTAPI *PREPLACE_SET_PROCESSOR_ID)(
1066 _In_ PVOID Context,
1067 _In_ ULONG ApicId,
1068 _In_ BOOLEAN Target);
1069
1070 _Must_inspect_result_
1071 typedef NTSTATUS
1072 (NTAPI *PREPLACE_SWAP)(
1073 _In_ PVOID Context);
1074
1075 _Must_inspect_result_
1076 typedef NTSTATUS
1077 (NTAPI *PREPLACE_INITIATE_HARDWARE_MIRROR)(
1078 _In_ PVOID Context);
1079
1080 _Must_inspect_result_
1081 typedef NTSTATUS
1082 (NTAPI *PREPLACE_MIRROR_PLATFORM_MEMORY)(
1083 _In_ PVOID Context);
1084
1085 _Must_inspect_result_
1086 typedef NTSTATUS
1087 (NTAPI *PREPLACE_GET_MEMORY_DESTINATION)(
1088 _In_ PVOID Context,
1089 _In_ PHYSICAL_ADDRESS SourceAddress,
1090 _Out_ PPHYSICAL_ADDRESS DestinationAddress);
1091
1092 _Must_inspect_result_
1093 typedef NTSTATUS
1094 (NTAPI *PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE)(
1095 _In_ PVOID Context,
1096 _In_ BOOLEAN Enable);
1097
1098 #define PNP_REPLACE_DRIVER_INTERFACE_VERSION 1
1099 #define PNP_REPLACE_DRIVER_INTERFACE_MINIMUM_SIZE \
1100 FIELD_OFFSET(PNP_REPLACE_DRIVER_INTERFACE, InitiateHardwareMirror)
1101
1102 #define PNP_REPLACE_MEMORY_SUPPORTED 0x0001
1103 #define PNP_REPLACE_PROCESSOR_SUPPORTED 0x0002
1104 #define PNP_REPLACE_HARDWARE_MEMORY_MIRRORING 0x0004
1105 #define PNP_REPLACE_HARDWARE_PAGE_COPY 0x0008
1106 #define PNP_REPLACE_HARDWARE_QUIESCE 0x0010
1107
1108 typedef struct _PNP_REPLACE_DRIVER_INTERFACE {
1109 ULONG Size;
1110 ULONG Version;
1111 ULONG Flags;
1112 PREPLACE_UNLOAD Unload;
1113 PREPLACE_BEGIN BeginReplace;
1114 PREPLACE_END EndReplace;
1115 PREPLACE_MIRROR_PHYSICAL_MEMORY MirrorPhysicalMemory;
1116 PREPLACE_SET_PROCESSOR_ID SetProcessorId;
1117 PREPLACE_SWAP Swap;
1118 PREPLACE_INITIATE_HARDWARE_MIRROR InitiateHardwareMirror;
1119 PREPLACE_MIRROR_PLATFORM_MEMORY MirrorPlatformMemory;
1120 PREPLACE_GET_MEMORY_DESTINATION GetMemoryDestination;
1121 PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE EnableDisableHardwareQuiesce;
1122 } PNP_REPLACE_DRIVER_INTERFACE, *PPNP_REPLACE_DRIVER_INTERFACE;
1123
1124 _Must_inspect_result_
1125 typedef NTSTATUS
1126 (NTAPI *PREPLACE_DRIVER_INIT)(
1127 _Inout_ PPNP_REPLACE_DRIVER_INTERFACE Interface,
1128 _In_ PVOID Unused);
1129
1130 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE {
1131 DeviceUsageTypeUndefined,
1132 DeviceUsageTypePaging,
1133 DeviceUsageTypeHibernation,
1134 DeviceUsageTypeDumpFile
1135 } DEVICE_USAGE_NOTIFICATION_TYPE;
1136
1137 typedef struct _POWER_SEQUENCE {
1138 ULONG SequenceD1;
1139 ULONG SequenceD2;
1140 ULONG SequenceD3;
1141 } POWER_SEQUENCE, *PPOWER_SEQUENCE;
1142
1143 #ifdef _PREFAST_
1144 #define __string_type 0x1000
1145 #define __guid_type 0x2000
1146 #define __multiString_type 0x4000
1147 #else
1148 #define __string_type 0
1149 #define __guid_type 0
1150 #define __multiString_type 0
1151 #endif
1152
1153 typedef enum {
1154 DevicePropertyDeviceDescription = 0x0 | __string_type,
1155 DevicePropertyHardwareID = 0x1 | __multiString_type,
1156 DevicePropertyCompatibleIDs = 0x2 | __multiString_type,
1157 DevicePropertyBootConfiguration = 0x3,
1158 DevicePropertyBootConfigurationTranslated = 0x4,
1159 DevicePropertyClassName = 0x5 | __string_type,
1160 DevicePropertyClassGuid = 0x6 | __string_type,
1161 DevicePropertyDriverKeyName = 0x7 | __string_type,
1162 DevicePropertyManufacturer = 0x8 | __string_type,
1163 DevicePropertyFriendlyName = 0x9 | __string_type,
1164 DevicePropertyLocationInformation = 0xa | __string_type,
1165 DevicePropertyPhysicalDeviceObjectName = 0xb | __string_type,
1166 DevicePropertyBusTypeGuid = 0xc | __guid_type,
1167 DevicePropertyLegacyBusType = 0xd,
1168 DevicePropertyBusNumber = 0xe,
1169 DevicePropertyEnumeratorName = 0xf | __string_type,
1170 DevicePropertyAddress = 0x10,
1171 DevicePropertyUINumber = 0x11,
1172 DevicePropertyInstallState = 0x12,
1173 DevicePropertyRemovalPolicy = 0x13,
1174 DevicePropertyResourceRequirements = 0x14,
1175 DevicePropertyAllocatedResources = 0x15,
1176 DevicePropertyContainerID = 0x16 | __string_type
1177 } DEVICE_REGISTRY_PROPERTY;
1178
1179 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY {
1180 EventCategoryReserved,
1181 EventCategoryHardwareProfileChange,
1182 EventCategoryDeviceInterfaceChange,
1183 EventCategoryTargetDeviceChange
1184 } IO_NOTIFICATION_EVENT_CATEGORY;
1185
1186 typedef enum _IO_PRIORITY_HINT {
1187 IoPriorityVeryLow = 0,
1188 IoPriorityLow,
1189 IoPriorityNormal,
1190 IoPriorityHigh,
1191 IoPriorityCritical,
1192 MaxIoPriorityTypes
1193 } IO_PRIORITY_HINT;
1194
1195 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
1196
1197 _Function_class_(DRIVER_NOTIFICATION_CALLBACK_ROUTINE)
1198 _IRQL_requires_max_(PASSIVE_LEVEL)
1199 typedef NTSTATUS
1200 (NTAPI DRIVER_NOTIFICATION_CALLBACK_ROUTINE)(
1201 _In_ PVOID NotificationStructure,
1202 _Inout_opt_ PVOID Context);
1203 typedef DRIVER_NOTIFICATION_CALLBACK_ROUTINE *PDRIVER_NOTIFICATION_CALLBACK_ROUTINE;
1204
1205 _Function_class_(DEVICE_CHANGE_COMPLETE_CALLBACK)
1206 _IRQL_requires_same_
1207 typedef VOID
1208 (NTAPI DEVICE_CHANGE_COMPLETE_CALLBACK)(
1209 _Inout_opt_ PVOID Context);
1210 typedef DEVICE_CHANGE_COMPLETE_CALLBACK *PDEVICE_CHANGE_COMPLETE_CALLBACK;
1211
1212 typedef enum _FILE_INFORMATION_CLASS {
1213 FileDirectoryInformation = 1,
1214 FileFullDirectoryInformation,
1215 FileBothDirectoryInformation,
1216 FileBasicInformation,
1217 FileStandardInformation,
1218 FileInternalInformation,
1219 FileEaInformation,
1220 FileAccessInformation,
1221 FileNameInformation,
1222 FileRenameInformation,
1223 FileLinkInformation,
1224 FileNamesInformation,
1225 FileDispositionInformation,
1226 FilePositionInformation,
1227 FileFullEaInformation,
1228 FileModeInformation,
1229 FileAlignmentInformation,
1230 FileAllInformation,
1231 FileAllocationInformation,
1232 FileEndOfFileInformation,
1233 FileAlternateNameInformation,
1234 FileStreamInformation,
1235 FilePipeInformation,
1236 FilePipeLocalInformation,
1237 FilePipeRemoteInformation,
1238 FileMailslotQueryInformation,
1239 FileMailslotSetInformation,
1240 FileCompressionInformation,
1241 FileObjectIdInformation,
1242 FileCompletionInformation,
1243 FileMoveClusterInformation,
1244 FileQuotaInformation,
1245 FileReparsePointInformation,
1246 FileNetworkOpenInformation,
1247 FileAttributeTagInformation,
1248 FileTrackingInformation,
1249 FileIdBothDirectoryInformation,
1250 FileIdFullDirectoryInformation,
1251 FileValidDataLengthInformation,
1252 FileShortNameInformation,
1253 #if (NTDDI_VERSION >= NTDDI_VISTA)
1254 FileIoCompletionNotificationInformation,
1255 FileIoStatusBlockRangeInformation,
1256 FileIoPriorityHintInformation,
1257 FileSfioReserveInformation,
1258 FileSfioVolumeInformation,
1259 FileHardLinkInformation,
1260 FileProcessIdsUsingFileInformation,
1261 FileNormalizedNameInformation,
1262 FileNetworkPhysicalNameInformation,
1263 #endif
1264 #if (NTDDI_VERSION >= NTDDI_WIN7)
1265 FileIdGlobalTxDirectoryInformation,
1266 FileIsRemoteDeviceInformation,
1267 FileAttributeCacheInformation,
1268 FileNumaNodeInformation,
1269 FileStandardLinkInformation,
1270 FileRemoteProtocolInformation,
1271 #endif
1272 FileMaximumInformation
1273 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
1274
1275 typedef struct _FILE_POSITION_INFORMATION {
1276 LARGE_INTEGER CurrentByteOffset;
1277 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
1278
1279 typedef struct _FILE_BASIC_INFORMATION {
1280 LARGE_INTEGER CreationTime;
1281 LARGE_INTEGER LastAccessTime;
1282 LARGE_INTEGER LastWriteTime;
1283 LARGE_INTEGER ChangeTime;
1284 ULONG FileAttributes;
1285 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
1286
1287 typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION {
1288 IO_PRIORITY_HINT PriorityHint;
1289 } FILE_IO_PRIORITY_HINT_INFORMATION, *PFILE_IO_PRIORITY_HINT_INFORMATION;
1290
1291 typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION {
1292 ULONG Flags;
1293 } FILE_IO_COMPLETION_NOTIFICATION_INFORMATION, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION;
1294
1295 typedef struct _FILE_IOSTATUSBLOCK_RANGE_INFORMATION {
1296 PUCHAR IoStatusBlockRange;
1297 ULONG Length;
1298 } FILE_IOSTATUSBLOCK_RANGE_INFORMATION, *PFILE_IOSTATUSBLOCK_RANGE_INFORMATION;
1299
1300 typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION {
1301 BOOLEAN IsRemote;
1302 } FILE_IS_REMOTE_DEVICE_INFORMATION, *PFILE_IS_REMOTE_DEVICE_INFORMATION;
1303
1304 typedef struct _FILE_NUMA_NODE_INFORMATION {
1305 USHORT NodeNumber;
1306 } FILE_NUMA_NODE_INFORMATION, *PFILE_NUMA_NODE_INFORMATION;
1307
1308 typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION {
1309 ULONG NumberOfProcessIdsInList;
1310 ULONG_PTR ProcessIdList[1];
1311 } FILE_PROCESS_IDS_USING_FILE_INFORMATION, *PFILE_PROCESS_IDS_USING_FILE_INFORMATION;
1312
1313 typedef struct _FILE_STANDARD_INFORMATION {
1314 LARGE_INTEGER AllocationSize;
1315 LARGE_INTEGER EndOfFile;
1316 ULONG NumberOfLinks;
1317 BOOLEAN DeletePending;
1318 BOOLEAN Directory;
1319 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
1320
1321 typedef struct _FILE_NETWORK_OPEN_INFORMATION {
1322 LARGE_INTEGER CreationTime;
1323 LARGE_INTEGER LastAccessTime;
1324 LARGE_INTEGER LastWriteTime;
1325 LARGE_INTEGER ChangeTime;
1326 LARGE_INTEGER AllocationSize;
1327 LARGE_INTEGER EndOfFile;
1328 ULONG FileAttributes;
1329 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
1330
1331 typedef enum _FSINFOCLASS {
1332 FileFsVolumeInformation = 1,
1333 FileFsLabelInformation,
1334 FileFsSizeInformation,
1335 FileFsDeviceInformation,
1336 FileFsAttributeInformation,
1337 FileFsControlInformation,
1338 FileFsFullSizeInformation,
1339 FileFsObjectIdInformation,
1340 FileFsDriverPathInformation,
1341 FileFsVolumeFlagsInformation,
1342 FileFsMaximumInformation
1343 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
1344
1345 typedef struct _FILE_FS_DEVICE_INFORMATION {
1346 DEVICE_TYPE DeviceType;
1347 ULONG Characteristics;
1348 } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
1349
1350 typedef struct _FILE_FULL_EA_INFORMATION {
1351 ULONG NextEntryOffset;
1352 UCHAR Flags;
1353 UCHAR EaNameLength;
1354 USHORT EaValueLength;
1355 CHAR EaName[1];
1356 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
1357
1358 typedef struct _FILE_SFIO_RESERVE_INFORMATION {
1359 ULONG RequestsPerPeriod;
1360 ULONG Period;
1361 BOOLEAN RetryFailures;
1362 BOOLEAN Discardable;
1363 ULONG RequestSize;
1364 ULONG NumOutstandingRequests;
1365 } FILE_SFIO_RESERVE_INFORMATION, *PFILE_SFIO_RESERVE_INFORMATION;
1366
1367 typedef struct _FILE_SFIO_VOLUME_INFORMATION {
1368 ULONG MaximumRequestsPerPeriod;
1369 ULONG MinimumPeriod;
1370 ULONG MinimumTransferSize;
1371 } FILE_SFIO_VOLUME_INFORMATION, *PFILE_SFIO_VOLUME_INFORMATION;
1372
1373 #define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1
1374 #define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2
1375 #define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4
1376
1377 #define FM_LOCK_BIT (0x1)
1378 #define FM_LOCK_BIT_V (0x0)
1379 #define FM_LOCK_WAITER_WOKEN (0x2)
1380 #define FM_LOCK_WAITER_INC (0x4)
1381
1382 _Function_class_(FAST_IO_CHECK_IF_POSSIBLE)
1383 _IRQL_requires_same_
1384 typedef BOOLEAN
1385 (NTAPI FAST_IO_CHECK_IF_POSSIBLE)(
1386 _In_ struct _FILE_OBJECT *FileObject,
1387 _In_ PLARGE_INTEGER FileOffset,
1388 _In_ ULONG Length,
1389 _In_ BOOLEAN Wait,
1390 _In_ ULONG LockKey,
1391 _In_ BOOLEAN CheckForReadOperation,
1392 _Out_ PIO_STATUS_BLOCK IoStatus,
1393 _In_ struct _DEVICE_OBJECT *DeviceObject);
1394 typedef FAST_IO_CHECK_IF_POSSIBLE *PFAST_IO_CHECK_IF_POSSIBLE;
1395
1396 _Function_class_(FAST_IO_READ)
1397 _IRQL_requires_same_
1398 typedef BOOLEAN
1399 (NTAPI FAST_IO_READ)(
1400 _In_ struct _FILE_OBJECT *FileObject,
1401 _In_ PLARGE_INTEGER FileOffset,
1402 _In_ ULONG Length,
1403 _In_ BOOLEAN Wait,
1404 _In_ ULONG LockKey,
1405 _Out_ PVOID Buffer,
1406 _Out_ PIO_STATUS_BLOCK IoStatus,
1407 _In_ struct _DEVICE_OBJECT *DeviceObject);
1408 typedef FAST_IO_READ *PFAST_IO_READ;
1409
1410 _Function_class_(FAST_IO_WRITE)
1411 _IRQL_requires_same_
1412 typedef BOOLEAN
1413 (NTAPI FAST_IO_WRITE)(
1414 _In_ struct _FILE_OBJECT *FileObject,
1415 _In_ PLARGE_INTEGER FileOffset,
1416 _In_ ULONG Length,
1417 _In_ BOOLEAN Wait,
1418 _In_ ULONG LockKey,
1419 _In_ PVOID Buffer,
1420 _Out_ PIO_STATUS_BLOCK IoStatus,
1421 _In_ struct _DEVICE_OBJECT *DeviceObject);
1422 typedef FAST_IO_WRITE *PFAST_IO_WRITE;
1423
1424 _Function_class_(FAST_IO_QUERY_BASIC_INFO)
1425 _IRQL_requires_same_
1426 typedef BOOLEAN
1427 (NTAPI FAST_IO_QUERY_BASIC_INFO)(
1428 _In_ struct _FILE_OBJECT *FileObject,
1429 _In_ BOOLEAN Wait,
1430 _Out_ PFILE_BASIC_INFORMATION Buffer,
1431 _Out_ PIO_STATUS_BLOCK IoStatus,
1432 _In_ struct _DEVICE_OBJECT *DeviceObject);
1433 typedef FAST_IO_QUERY_BASIC_INFO *PFAST_IO_QUERY_BASIC_INFO;
1434
1435 _Function_class_(FAST_IO_QUERY_STANDARD_INFO)
1436 _IRQL_requires_same_
1437 typedef BOOLEAN
1438 (NTAPI FAST_IO_QUERY_STANDARD_INFO)(
1439 _In_ struct _FILE_OBJECT *FileObject,
1440 _In_ BOOLEAN Wait,
1441 _Out_ PFILE_STANDARD_INFORMATION Buffer,
1442 _Out_ PIO_STATUS_BLOCK IoStatus,
1443 _In_ struct _DEVICE_OBJECT *DeviceObject);
1444 typedef FAST_IO_QUERY_STANDARD_INFO *PFAST_IO_QUERY_STANDARD_INFO;
1445
1446 _Function_class_(FAST_IO_LOCK)
1447 _IRQL_requires_same_
1448 typedef BOOLEAN
1449 (NTAPI FAST_IO_LOCK)(
1450 _In_ struct _FILE_OBJECT *FileObject,
1451 _In_ PLARGE_INTEGER FileOffset,
1452 _In_ PLARGE_INTEGER Length,
1453 _In_ PEPROCESS ProcessId,
1454 _In_ ULONG Key,
1455 _In_ BOOLEAN FailImmediately,
1456 _In_ BOOLEAN ExclusiveLock,
1457 _Out_ PIO_STATUS_BLOCK IoStatus,
1458 _In_ struct _DEVICE_OBJECT *DeviceObject);
1459 typedef FAST_IO_LOCK *PFAST_IO_LOCK;
1460
1461 _Function_class_(FAST_IO_UNLOCK_SINGLE)
1462 _IRQL_requires_same_
1463 typedef BOOLEAN
1464 (NTAPI FAST_IO_UNLOCK_SINGLE)(
1465 _In_ struct _FILE_OBJECT *FileObject,
1466 _In_ PLARGE_INTEGER FileOffset,
1467 _In_ PLARGE_INTEGER Length,
1468 _In_ PEPROCESS ProcessId,
1469 _In_ ULONG Key,
1470 _Out_ PIO_STATUS_BLOCK IoStatus,
1471 _In_ struct _DEVICE_OBJECT *DeviceObject);
1472 typedef FAST_IO_UNLOCK_SINGLE *PFAST_IO_UNLOCK_SINGLE;
1473
1474 _Function_class_(FAST_IO_UNLOCK_ALL)
1475 _IRQL_requires_same_
1476 typedef BOOLEAN
1477 (NTAPI FAST_IO_UNLOCK_ALL)(
1478 _In_ struct _FILE_OBJECT *FileObject,
1479 _In_ PEPROCESS ProcessId,
1480 _Out_ PIO_STATUS_BLOCK IoStatus,
1481 _In_ struct _DEVICE_OBJECT *DeviceObject);
1482 typedef FAST_IO_UNLOCK_ALL *PFAST_IO_UNLOCK_ALL;
1483
1484 _Function_class_(FAST_IO_UNLOCK_ALL_BY_KEY)
1485 _IRQL_requires_same_
1486 typedef BOOLEAN
1487 (NTAPI FAST_IO_UNLOCK_ALL_BY_KEY)(
1488 _In_ struct _FILE_OBJECT *FileObject,
1489 _In_ PVOID ProcessId,
1490 _In_ ULONG Key,
1491 _Out_ PIO_STATUS_BLOCK IoStatus,
1492 _In_ struct _DEVICE_OBJECT *DeviceObject);
1493 typedef FAST_IO_UNLOCK_ALL_BY_KEY *PFAST_IO_UNLOCK_ALL_BY_KEY;
1494
1495 _Function_class_(FAST_IO_DEVICE_CONTROL)
1496 _IRQL_requires_same_
1497 typedef BOOLEAN
1498 (NTAPI FAST_IO_DEVICE_CONTROL)(
1499 _In_ struct _FILE_OBJECT *FileObject,
1500 _In_ BOOLEAN Wait,
1501 _In_opt_ PVOID InputBuffer,
1502 _In_ ULONG InputBufferLength,
1503 _Out_opt_ PVOID OutputBuffer,
1504 _In_ ULONG OutputBufferLength,
1505 _In_ ULONG IoControlCode,
1506 _Out_ PIO_STATUS_BLOCK IoStatus,
1507 _In_ struct _DEVICE_OBJECT *DeviceObject);
1508 typedef FAST_IO_DEVICE_CONTROL *PFAST_IO_DEVICE_CONTROL;
1509
1510 _Function_class_(FAST_IO_ACQUIRE_FILE)
1511 _IRQL_requires_same_
1512 typedef VOID
1513 (NTAPI FAST_IO_ACQUIRE_FILE)(
1514 _In_ struct _FILE_OBJECT *FileObject);
1515 typedef FAST_IO_ACQUIRE_FILE *PFAST_IO_ACQUIRE_FILE;
1516
1517 _Function_class_(FAST_IO_RELEASE_FILE)
1518 _IRQL_requires_same_
1519 typedef VOID
1520 (NTAPI FAST_IO_RELEASE_FILE)(
1521 _In_ struct _FILE_OBJECT *FileObject);
1522 typedef FAST_IO_RELEASE_FILE *PFAST_IO_RELEASE_FILE;
1523
1524 _Function_class_(FAST_IO_DETACH_DEVICE)
1525 _IRQL_requires_same_
1526 typedef VOID
1527 (NTAPI FAST_IO_DETACH_DEVICE)(
1528 _In_ struct _DEVICE_OBJECT *SourceDevice,
1529 _In_ struct _DEVICE_OBJECT *TargetDevice);
1530 typedef FAST_IO_DETACH_DEVICE *PFAST_IO_DETACH_DEVICE;
1531
1532 _Function_class_(FAST_IO_QUERY_NETWORK_OPEN_INFO)
1533 _IRQL_requires_same_
1534 typedef BOOLEAN
1535 (NTAPI FAST_IO_QUERY_NETWORK_OPEN_INFO)(
1536 _In_ struct _FILE_OBJECT *FileObject,
1537 _In_ BOOLEAN Wait,
1538 _Out_ struct _FILE_NETWORK_OPEN_INFORMATION *Buffer,
1539 _Out_ struct _IO_STATUS_BLOCK *IoStatus,
1540 _In_ struct _DEVICE_OBJECT *DeviceObject);
1541 typedef FAST_IO_QUERY_NETWORK_OPEN_INFO *PFAST_IO_QUERY_NETWORK_OPEN_INFO;
1542
1543 _Function_class_(FAST_IO_ACQUIRE_FOR_MOD_WRITE)
1544 _IRQL_requires_same_
1545 typedef NTSTATUS
1546 (NTAPI FAST_IO_ACQUIRE_FOR_MOD_WRITE)(
1547 _In_ struct _FILE_OBJECT *FileObject,
1548 _In_ PLARGE_INTEGER EndingOffset,
1549 _Out_ struct _ERESOURCE **ResourceToRelease,
1550 _In_ struct _DEVICE_OBJECT *DeviceObject);
1551 typedef FAST_IO_ACQUIRE_FOR_MOD_WRITE *PFAST_IO_ACQUIRE_FOR_MOD_WRITE;
1552
1553 _Function_class_(FAST_IO_MDL_READ)
1554 _IRQL_requires_same_
1555 typedef BOOLEAN
1556 (NTAPI FAST_IO_MDL_READ)(
1557 _In_ struct _FILE_OBJECT *FileObject,
1558 _In_ PLARGE_INTEGER FileOffset,
1559 _In_ ULONG Length,
1560 _In_ ULONG LockKey,
1561 _Out_ PMDL *MdlChain,
1562 _Out_ PIO_STATUS_BLOCK IoStatus,
1563 _In_ struct _DEVICE_OBJECT *DeviceObject);
1564 typedef FAST_IO_MDL_READ *PFAST_IO_MDL_READ;
1565
1566 _Function_class_(FAST_IO_MDL_READ_COMPLETE)
1567 _IRQL_requires_same_
1568 typedef BOOLEAN
1569 (NTAPI FAST_IO_MDL_READ_COMPLETE)(
1570 _In_ struct _FILE_OBJECT *FileObject,
1571 _In_ PMDL MdlChain,
1572 _In_ struct _DEVICE_OBJECT *DeviceObject);
1573 typedef FAST_IO_MDL_READ_COMPLETE *PFAST_IO_MDL_READ_COMPLETE;
1574
1575 _Function_class_(FAST_IO_PREPARE_MDL_WRITE)
1576 _IRQL_requires_same_
1577 typedef BOOLEAN
1578 (NTAPI FAST_IO_PREPARE_MDL_WRITE)(
1579 _In_ struct _FILE_OBJECT *FileObject,
1580 _In_ PLARGE_INTEGER FileOffset,
1581 _In_ ULONG Length,
1582 _In_ ULONG LockKey,
1583 _Out_ PMDL *MdlChain,
1584 _Out_ PIO_STATUS_BLOCK IoStatus,
1585 _In_ struct _DEVICE_OBJECT *DeviceObject);
1586 typedef FAST_IO_PREPARE_MDL_WRITE *PFAST_IO_PREPARE_MDL_WRITE;
1587
1588 _Function_class_(FAST_IO_MDL_WRITE_COMPLETE)
1589 _IRQL_requires_same_
1590 typedef BOOLEAN
1591 (NTAPI FAST_IO_MDL_WRITE_COMPLETE)(
1592 _In_ struct _FILE_OBJECT *FileObject,
1593 _In_ PLARGE_INTEGER FileOffset,
1594 _In_ PMDL MdlChain,
1595 _In_ struct _DEVICE_OBJECT *DeviceObject);
1596 typedef FAST_IO_MDL_WRITE_COMPLETE *PFAST_IO_MDL_WRITE_COMPLETE;
1597
1598 _Function_class_(FAST_IO_READ_COMPRESSED)
1599 _IRQL_requires_same_
1600 typedef BOOLEAN
1601 (NTAPI FAST_IO_READ_COMPRESSED)(
1602 _In_ struct _FILE_OBJECT *FileObject,
1603 _In_ PLARGE_INTEGER FileOffset,
1604 _In_ ULONG Length,
1605 _In_ ULONG LockKey,
1606 _Out_ PVOID Buffer,
1607 _Out_ PMDL *MdlChain,
1608 _Out_ PIO_STATUS_BLOCK IoStatus,
1609 _Out_ struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
1610 _In_ ULONG CompressedDataInfoLength,
1611 _In_ struct _DEVICE_OBJECT *DeviceObject);
1612 typedef FAST_IO_READ_COMPRESSED *PFAST_IO_READ_COMPRESSED;
1613
1614 _Function_class_(FAST_IO_WRITE_COMPRESSED)
1615 _IRQL_requires_same_
1616 typedef BOOLEAN
1617 (NTAPI FAST_IO_WRITE_COMPRESSED)(
1618 _In_ struct _FILE_OBJECT *FileObject,
1619 _In_ PLARGE_INTEGER FileOffset,
1620 _In_ ULONG Length,
1621 _In_ ULONG LockKey,
1622 _In_ PVOID Buffer,
1623 _Out_ PMDL *MdlChain,
1624 _Out_ PIO_STATUS_BLOCK IoStatus,
1625 _In_ struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
1626 _In_ ULONG CompressedDataInfoLength,
1627 _In_ struct _DEVICE_OBJECT *DeviceObject);
1628 typedef FAST_IO_WRITE_COMPRESSED *PFAST_IO_WRITE_COMPRESSED;
1629
1630 _Function_class_(FAST_IO_MDL_READ_COMPLETE_COMPRESSED)
1631 _IRQL_requires_same_
1632 typedef BOOLEAN
1633 (NTAPI FAST_IO_MDL_READ_COMPLETE_COMPRESSED)(
1634 _In_ struct _FILE_OBJECT *FileObject,
1635 _In_ PMDL MdlChain,
1636 _In_ struct _DEVICE_OBJECT *DeviceObject);
1637 typedef FAST_IO_MDL_READ_COMPLETE_COMPRESSED *PFAST_IO_MDL_READ_COMPLETE_COMPRESSED;
1638
1639 _Function_class_(FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)
1640 _IRQL_requires_same_
1641 typedef BOOLEAN
1642 (NTAPI FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)(
1643 _In_ struct _FILE_OBJECT *FileObject,
1644 _In_ PLARGE_INTEGER FileOffset,
1645 _In_ PMDL MdlChain,
1646 _In_ struct _DEVICE_OBJECT *DeviceObject);
1647 typedef FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED *PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED;
1648
1649 _Function_class_(FAST_IO_QUERY_OPEN)
1650 _IRQL_requires_same_
1651 typedef BOOLEAN
1652 (NTAPI FAST_IO_QUERY_OPEN)(
1653 _Inout_ struct _IRP *Irp,
1654 _Out_ PFILE_NETWORK_OPEN_INFORMATION NetworkInformation,
1655 _In_ struct _DEVICE_OBJECT *DeviceObject);
1656 typedef FAST_IO_QUERY_OPEN *PFAST_IO_QUERY_OPEN;
1657
1658 _Function_class_(FAST_IO_RELEASE_FOR_MOD_WRITE)
1659 _IRQL_requires_same_
1660 typedef NTSTATUS
1661 (NTAPI FAST_IO_RELEASE_FOR_MOD_WRITE)(
1662 _In_ struct _FILE_OBJECT *FileObject,
1663 _In_ struct _ERESOURCE *ResourceToRelease,
1664 _In_ struct _DEVICE_OBJECT *DeviceObject);
1665 typedef FAST_IO_RELEASE_FOR_MOD_WRITE *PFAST_IO_RELEASE_FOR_MOD_WRITE;
1666
1667 _Function_class_(FAST_IO_ACQUIRE_FOR_CCFLUSH)
1668 _IRQL_requires_same_
1669 typedef NTSTATUS
1670 (NTAPI FAST_IO_ACQUIRE_FOR_CCFLUSH)(
1671 _In_ struct _FILE_OBJECT *FileObject,
1672 _In_ struct _DEVICE_OBJECT *DeviceObject);
1673 typedef FAST_IO_ACQUIRE_FOR_CCFLUSH *PFAST_IO_ACQUIRE_FOR_CCFLUSH;
1674
1675 _Function_class_(FAST_IO_RELEASE_FOR_CCFLUSH)
1676 _IRQL_requires_same_
1677 typedef NTSTATUS
1678 (NTAPI FAST_IO_RELEASE_FOR_CCFLUSH)(
1679 _In_ struct _FILE_OBJECT *FileObject,
1680 _In_ struct _DEVICE_OBJECT *DeviceObject);
1681 typedef FAST_IO_RELEASE_FOR_CCFLUSH *PFAST_IO_RELEASE_FOR_CCFLUSH;
1682
1683 typedef struct _FAST_IO_DISPATCH {
1684 ULONG SizeOfFastIoDispatch;
1685 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible;
1686 PFAST_IO_READ FastIoRead;
1687 PFAST_IO_WRITE FastIoWrite;
1688 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo;
1689 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo;
1690 PFAST_IO_LOCK FastIoLock;
1691 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle;
1692 PFAST_IO_UNLOCK_ALL FastIoUnlockAll;
1693 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey;
1694 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl;
1695 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection;
1696 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection;
1697 PFAST_IO_DETACH_DEVICE FastIoDetachDevice;
1698 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo;
1699 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite;
1700 PFAST_IO_MDL_READ MdlRead;
1701 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete;
1702 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite;
1703 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete;
1704 PFAST_IO_READ_COMPRESSED FastIoReadCompressed;
1705 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed;
1706 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed;
1707 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed;
1708 PFAST_IO_QUERY_OPEN FastIoQueryOpen;
1709 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite;
1710 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush;
1711 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush;
1712 } FAST_IO_DISPATCH, *PFAST_IO_DISPATCH;
1713
1714 typedef struct _SECTION_OBJECT_POINTERS {
1715 PVOID DataSectionObject;
1716 PVOID SharedCacheMap;
1717 PVOID ImageSectionObject;
1718 } SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS;
1719
1720 typedef struct _IO_COMPLETION_CONTEXT {
1721 PVOID Port;
1722 PVOID Key;
1723 } IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT;
1724
1725 /* FILE_OBJECT.Flags */
1726 #define FO_FILE_OPEN 0x00000001
1727 #define FO_SYNCHRONOUS_IO 0x00000002
1728 #define FO_ALERTABLE_IO 0x00000004
1729 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
1730 #define FO_WRITE_THROUGH 0x00000010
1731 #define FO_SEQUENTIAL_ONLY 0x00000020
1732 #define FO_CACHE_SUPPORTED 0x00000040
1733 #define FO_NAMED_PIPE 0x00000080
1734 #define FO_STREAM_FILE 0x00000100
1735 #define FO_MAILSLOT 0x00000200
1736 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
1737 #define FO_QUEUE_IRP_TO_THREAD 0x00000400
1738 #define FO_DIRECT_DEVICE_OPEN 0x00000800
1739 #define FO_FILE_MODIFIED 0x00001000
1740 #define FO_FILE_SIZE_CHANGED 0x00002000
1741 #define FO_CLEANUP_COMPLETE 0x00004000
1742 #define FO_TEMPORARY_FILE 0x00008000
1743 #define FO_DELETE_ON_CLOSE 0x00010000
1744 #define FO_OPENED_CASE_SENSITIVE 0x00020000
1745 #define FO_HANDLE_CREATED 0x00040000
1746 #define FO_FILE_FAST_IO_READ 0x00080000
1747 #define FO_RANDOM_ACCESS 0x00100000
1748 #define FO_FILE_OPEN_CANCELLED 0x00200000
1749 #define FO_VOLUME_OPEN 0x00400000
1750 #define FO_REMOTE_ORIGIN 0x01000000
1751 #define FO_DISALLOW_EXCLUSIVE 0x02000000
1752 #define FO_SKIP_COMPLETION_PORT 0x02000000
1753 #define FO_SKIP_SET_EVENT 0x04000000
1754 #define FO_SKIP_SET_FAST_IO 0x08000000
1755 #define FO_FLAGS_VALID_ONLY_DURING_CREATE FO_DISALLOW_EXCLUSIVE
1756
1757 /* VPB.Flags */
1758 #define VPB_MOUNTED 0x0001
1759 #define VPB_LOCKED 0x0002
1760 #define VPB_PERSISTENT 0x0004
1761 #define VPB_REMOVE_PENDING 0x0008
1762 #define VPB_RAW_MOUNT 0x0010
1763 #define VPB_DIRECT_WRITES_ALLOWED 0x0020
1764
1765 /* IO_STACK_LOCATION.Flags */
1766
1767 #define SL_FORCE_ACCESS_CHECK 0x01
1768 #define SL_OPEN_PAGING_FILE 0x02
1769 #define SL_OPEN_TARGET_DIRECTORY 0x04
1770 #define SL_STOP_ON_SYMLINK 0x08
1771 #define SL_CASE_SENSITIVE 0x80
1772
1773 #define SL_KEY_SPECIFIED 0x01
1774 #define SL_OVERRIDE_VERIFY_VOLUME 0x02
1775 #define SL_WRITE_THROUGH 0x04
1776 #define SL_FT_SEQUENTIAL_WRITE 0x08
1777 #define SL_FORCE_DIRECT_WRITE 0x10
1778 #define SL_REALTIME_STREAM 0x20
1779
1780 #define SL_READ_ACCESS_GRANTED 0x01
1781 #define SL_WRITE_ACCESS_GRANTED 0x04
1782
1783 #define SL_FAIL_IMMEDIATELY 0x01
1784 #define SL_EXCLUSIVE_LOCK 0x02
1785
1786 #define SL_RESTART_SCAN 0x01
1787 #define SL_RETURN_SINGLE_ENTRY 0x02
1788 #define SL_INDEX_SPECIFIED 0x04
1789
1790 #define SL_WATCH_TREE 0x01
1791
1792 #define SL_ALLOW_RAW_MOUNT 0x01
1793
1794 $endif (_WDMDDK_)
1795 $if (_WDMDDK_ || _DEVIOCTL_)
1796 #define CTL_CODE(DeviceType, Function, Method, Access) \
1797 (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
1798
1799 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
1800
1801 #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
1802
1803 $endif (_WDMDDK_ || _DEVIOCTL_)
1804 $if (_WDMDDK_)
1805
1806 /* IRP.Flags */
1807 #define IRP_NOCACHE 0x00000001
1808 #define IRP_PAGING_IO 0x00000002
1809 #define IRP_MOUNT_COMPLETION 0x00000002
1810 #define IRP_SYNCHRONOUS_API 0x00000004
1811 #define IRP_ASSOCIATED_IRP 0x00000008
1812 #define IRP_BUFFERED_IO 0x00000010
1813 #define IRP_DEALLOCATE_BUFFER 0x00000020
1814 #define IRP_INPUT_OPERATION 0x00000040
1815 #define IRP_SYNCHRONOUS_PAGING_IO 0x00000040
1816 #define IRP_CREATE_OPERATION 0x00000080
1817 #define IRP_READ_OPERATION 0x00000100
1818 #define IRP_WRITE_OPERATION 0x00000200
1819 #define IRP_CLOSE_OPERATION 0x00000400
1820 #define IRP_DEFER_IO_COMPLETION 0x00000800
1821 #define IRP_OB_QUERY_NAME 0x00001000
1822 #define IRP_HOLD_DEVICE_QUEUE 0x00002000
1823 /* The following 2 are missing in latest WDK */
1824 #define IRP_RETRY_IO_COMPLETION 0x00004000
1825 #define IRP_CLASS_CACHE_OPERATION 0x00008000
1826
1827 /* IRP.AllocationFlags */
1828 #define IRP_QUOTA_CHARGED 0x01
1829 #define IRP_ALLOCATED_MUST_SUCCEED 0x02
1830 #define IRP_ALLOCATED_FIXED_SIZE 0x04
1831 #define IRP_LOOKASIDE_ALLOCATION 0x08
1832
1833 /*
1834 ** IRP function codes
1835 */
1836
1837 #define IRP_MJ_CREATE 0x00
1838 #define IRP_MJ_CREATE_NAMED_PIPE 0x01
1839 #define IRP_MJ_CLOSE 0x02
1840 #define IRP_MJ_READ 0x03
1841 #define IRP_MJ_WRITE 0x04
1842 #define IRP_MJ_QUERY_INFORMATION 0x05
1843 #define IRP_MJ_SET_INFORMATION 0x06
1844 #define IRP_MJ_QUERY_EA 0x07
1845 #define IRP_MJ_SET_EA 0x08
1846 #define IRP_MJ_FLUSH_BUFFERS 0x09
1847 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
1848 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
1849 #define IRP_MJ_DIRECTORY_CONTROL 0x0c
1850 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
1851 #define IRP_MJ_DEVICE_CONTROL 0x0e
1852 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
1853 #define IRP_MJ_SCSI 0x0f
1854 #define IRP_MJ_SHUTDOWN 0x10
1855 #define IRP_MJ_LOCK_CONTROL 0x11
1856 #define IRP_MJ_CLEANUP 0x12
1857 #define IRP_MJ_CREATE_MAILSLOT 0x13
1858 #define IRP_MJ_QUERY_SECURITY 0x14
1859 #define IRP_MJ_SET_SECURITY 0x15
1860 #define IRP_MJ_POWER 0x16
1861 #define IRP_MJ_SYSTEM_CONTROL 0x17
1862 #define IRP_MJ_DEVICE_CHANGE 0x18
1863 #define IRP_MJ_QUERY_QUOTA 0x19
1864 #define IRP_MJ_SET_QUOTA 0x1a
1865 #define IRP_MJ_PNP 0x1b
1866 #define IRP_MJ_PNP_POWER 0x1b
1867 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
1868
1869 #define IRP_MN_SCSI_CLASS 0x01
1870
1871 #define IRP_MN_START_DEVICE 0x00
1872 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
1873 #define IRP_MN_REMOVE_DEVICE 0x02
1874 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
1875 #define IRP_MN_STOP_DEVICE 0x04
1876 #define IRP_MN_QUERY_STOP_DEVICE 0x05
1877 #define IRP_MN_CANCEL_STOP_DEVICE 0x06
1878
1879 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
1880 #define IRP_MN_QUERY_INTERFACE 0x08
1881 #define IRP_MN_QUERY_CAPABILITIES 0x09
1882 #define IRP_MN_QUERY_RESOURCES 0x0A
1883 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
1884 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
1885 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
1886
1887 #define IRP_MN_READ_CONFIG 0x0F
1888 #define IRP_MN_WRITE_CONFIG 0x10
1889 #define IRP_MN_EJECT 0x11
1890 #define IRP_MN_SET_LOCK 0x12
1891 #define IRP_MN_QUERY_ID 0x13
1892 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
1893 #define IRP_MN_QUERY_BUS_INFORMATION 0x15
1894 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
1895 #define IRP_MN_SURPRISE_REMOVAL 0x17
1896 #if (NTDDI_VERSION >= NTDDI_WIN7)
1897 #define IRP_MN_DEVICE_ENUMERATED 0x19
1898 #endif
1899
1900 #define IRP_MN_WAIT_WAKE 0x00
1901 #define IRP_MN_POWER_SEQUENCE 0x01
1902 #define IRP_MN_SET_POWER 0x02
1903 #define IRP_MN_QUERY_POWER 0x03
1904
1905 #define IRP_MN_QUERY_ALL_DATA 0x00
1906 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
1907 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
1908 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
1909 #define IRP_MN_ENABLE_EVENTS 0x04
1910 #define IRP_MN_DISABLE_EVENTS 0x05
1911 #define IRP_MN_ENABLE_COLLECTION 0x06
1912 #define IRP_MN_DISABLE_COLLECTION 0x07
1913 #define IRP_MN_REGINFO 0x08
1914 #define IRP_MN_EXECUTE_METHOD 0x09
1915
1916 #define IRP_MN_REGINFO_EX 0x0b
1917
1918 typedef struct _FILE_OBJECT {
1919 CSHORT Type;
1920 CSHORT Size;
1921 PDEVICE_OBJECT DeviceObject;
1922 PVPB Vpb;
1923 PVOID FsContext;
1924 PVOID FsContext2;
1925 PSECTION_OBJECT_POINTERS SectionObjectPointer;
1926 PVOID PrivateCacheMap;
1927 NTSTATUS FinalStatus;
1928 struct _FILE_OBJECT *RelatedFileObject;
1929 BOOLEAN LockOperation;
1930 BOOLEAN DeletePending;
1931 BOOLEAN ReadAccess;
1932 BOOLEAN WriteAccess;
1933 BOOLEAN DeleteAccess;
1934 BOOLEAN SharedRead;
1935 BOOLEAN SharedWrite;
1936 BOOLEAN SharedDelete;
1937 ULONG Flags;
1938 UNICODE_STRING FileName;
1939 LARGE_INTEGER CurrentByteOffset;
1940 volatile ULONG Waiters;
1941 volatile ULONG Busy;
1942 PVOID LastLock;
1943 KEVENT Lock;
1944 KEVENT Event;
1945 volatile PIO_COMPLETION_CONTEXT CompletionContext;
1946 KSPIN_LOCK IrpListLock;
1947 LIST_ENTRY IrpList;
1948 volatile PVOID FileObjectExtension;
1949 } FILE_OBJECT, *PFILE_OBJECT;
1950
1951 typedef struct _IO_ERROR_LOG_PACKET {
1952 UCHAR MajorFunctionCode;
1953 UCHAR RetryCount;
1954 USHORT DumpDataSize;
1955 USHORT NumberOfStrings;
1956 USHORT StringOffset;
1957 USHORT EventCategory;
1958 NTSTATUS ErrorCode;
1959 ULONG UniqueErrorValue;
1960 NTSTATUS FinalStatus;
1961 ULONG SequenceNumber;
1962 ULONG IoControlCode;
1963 LARGE_INTEGER DeviceOffset;
1964 ULONG DumpData[1];
1965 } IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET;
1966
1967 typedef struct _IO_ERROR_LOG_MESSAGE {
1968 USHORT Type;
1969 USHORT Size;
1970 USHORT DriverNameLength;
1971 LARGE_INTEGER TimeStamp;
1972 ULONG DriverNameOffset;
1973 IO_ERROR_LOG_PACKET EntryData;
1974 } IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE;
1975
1976 #define ERROR_LOG_LIMIT_SIZE 240
1977 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
1978 sizeof(IO_ERROR_LOG_PACKET) + \
1979 (sizeof(WCHAR) * 40))
1980 #define ERROR_LOG_MESSAGE_LIMIT_SIZE \
1981 (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1982 #define IO_ERROR_LOG_MESSAGE_LENGTH \
1983 ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
1984 ERROR_LOG_MESSAGE_LIMIT_SIZE : \
1985 PORT_MAXIMUM_MESSAGE_LENGTH)
1986 #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
1987 IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1988
1989 #ifdef _WIN64
1990 #define PORT_MAXIMUM_MESSAGE_LENGTH 512
1991 #else
1992 #define PORT_MAXIMUM_MESSAGE_LENGTH 256
1993 #endif
1994
1995 typedef enum _DMA_WIDTH {
1996 Width8Bits,
1997 Width16Bits,
1998 Width32Bits,
1999 MaximumDmaWidth
2000 } DMA_WIDTH, *PDMA_WIDTH;
2001
2002 typedef enum _DMA_SPEED {
2003 Compatible,
2004 TypeA,
2005 TypeB,
2006 TypeC,
2007 TypeF,
2008 MaximumDmaSpeed
2009 } DMA_SPEED, *PDMA_SPEED;
2010
2011 /* DEVICE_DESCRIPTION.Version */
2012
2013 #define DEVICE_DESCRIPTION_VERSION 0x0000
2014 #define DEVICE_DESCRIPTION_VERSION1 0x0001
2015 #define DEVICE_DESCRIPTION_VERSION2 0x0002
2016
2017 typedef struct _DEVICE_DESCRIPTION {
2018 ULONG Version;
2019 BOOLEAN Master;
2020 BOOLEAN ScatterGather;
2021 BOOLEAN DemandMode;
2022 BOOLEAN AutoInitialize;
2023 BOOLEAN Dma32BitAddresses;
2024 BOOLEAN IgnoreCount;
2025 BOOLEAN Reserved1;
2026 BOOLEAN Dma64BitAddresses;
2027 ULONG BusNumber;
2028 ULONG DmaChannel;
2029 INTERFACE_TYPE InterfaceType;
2030 DMA_WIDTH DmaWidth;
2031 DMA_SPEED DmaSpeed;
2032 ULONG MaximumLength;
2033 ULONG DmaPort;
2034 } DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION;
2035
2036 typedef enum _DEVICE_RELATION_TYPE {
2037 BusRelations,
2038 EjectionRelations,
2039 PowerRelations,
2040 RemovalRelations,
2041 TargetDeviceRelation,
2042 SingleBusRelations,
2043 TransportRelations
2044 } DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE;
2045
2046 typedef struct _DEVICE_RELATIONS {
2047 ULONG Count;
2048 PDEVICE_OBJECT Objects[1];
2049 } DEVICE_RELATIONS, *PDEVICE_RELATIONS;
2050
2051 typedef struct _DEVOBJ_EXTENSION {
2052 CSHORT Type;
2053 USHORT Size;
2054 PDEVICE_OBJECT DeviceObject;
2055 } DEVOBJ_EXTENSION, *PDEVOBJ_EXTENSION;
2056
2057 typedef struct _SCATTER_GATHER_ELEMENT {
2058 PHYSICAL_ADDRESS Address;
2059 ULONG Length;
2060 ULONG_PTR Reserved;
2061 } SCATTER_GATHER_ELEMENT, *PSCATTER_GATHER_ELEMENT;
2062
2063 #if defined(_MSC_EXTENSIONS) || defined(__GNUC__)
2064
2065 #if defined(_MSC_VER)
2066 #if _MSC_VER >= 1200
2067 #pragma warning(push)
2068 #endif
2069 #pragma warning(disable:4200)
2070 #endif /* _MSC_VER */
2071
2072 typedef struct _SCATTER_GATHER_LIST {
2073 ULONG NumberOfElements;
2074 ULONG_PTR Reserved;
2075 SCATTER_GATHER_ELEMENT Elements[1];
2076 } SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST;
2077
2078 #if defined(_MSC_VER)
2079 #if _MSC_VER >= 1200
2080 #pragma warning(pop)
2081 #else
2082 #pragma warning(default:4200)
2083 #endif
2084 #endif /* _MSC_VER */
2085
2086 #else /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
2087
2088 struct _SCATTER_GATHER_LIST;
2089 typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST;
2090
2091 #endif /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
2092
2093 _Function_class_(DRIVER_ADD_DEVICE)
2094 _IRQL_requires_(PASSIVE_LEVEL)
2095 _IRQL_requires_same_
2096 _When_(return>=0, _Kernel_clear_do_init_(__yes))
2097 typedef NTSTATUS
2098 (NTAPI DRIVER_ADD_DEVICE)(
2099 _In_ struct _DRIVER_OBJECT *DriverObject,
2100 _In_ struct _DEVICE_OBJECT *PhysicalDeviceObject);
2101 typedef DRIVER_ADD_DEVICE *PDRIVER_ADD_DEVICE;
2102
2103 typedef struct _DRIVER_EXTENSION {
2104 struct _DRIVER_OBJECT *DriverObject;
2105 PDRIVER_ADD_DEVICE AddDevice;
2106 ULONG Count;
2107 UNICODE_STRING ServiceKeyName;
2108 } DRIVER_EXTENSION, *PDRIVER_EXTENSION;
2109
2110 #define DRVO_UNLOAD_INVOKED 0x00000001
2111 #define DRVO_LEGACY_DRIVER 0x00000002
2112 #define DRVO_BUILTIN_DRIVER 0x00000004
2113
2114 _Function_class_(DRIVER_INITIALIZE)
2115 _IRQL_requires_same_
2116 typedef NTSTATUS
2117 (NTAPI DRIVER_INITIALIZE)(
2118 _In_ struct _DRIVER_OBJECT *DriverObject,
2119 _In_ PUNICODE_STRING RegistryPath);
2120 typedef DRIVER_INITIALIZE *PDRIVER_INITIALIZE;
2121
2122 _Function_class_(DRIVER_STARTIO)
2123 _IRQL_always_function_min_(DISPATCH_LEVEL)
2124 _IRQL_requires_(DISPATCH_LEVEL)
2125 _IRQL_requires_same_
2126 typedef VOID
2127 (NTAPI DRIVER_STARTIO)(
2128 _Inout_ struct _DEVICE_OBJECT *DeviceObject,
2129 _Inout_ struct _IRP *Irp);
2130 typedef DRIVER_STARTIO *PDRIVER_STARTIO;
2131
2132 _Function_class_(DRIVER_UNLOAD)
2133 _IRQL_requires_(PASSIVE_LEVEL)
2134 _IRQL_requires_same_
2135 typedef VOID
2136 (NTAPI DRIVER_UNLOAD)(
2137 _In_ struct _DRIVER_OBJECT *DriverObject);
2138 typedef DRIVER_UNLOAD *PDRIVER_UNLOAD;
2139
2140 _Function_class_(DRIVER_DISPATCH)
2141 _IRQL_requires_max_(DISPATCH_LEVEL)
2142 _IRQL_requires_same_
2143 typedef NTSTATUS
2144 (NTAPI DRIVER_DISPATCH)(
2145 _In_ struct _DEVICE_OBJECT *DeviceObject,
2146 _Inout_ struct _IRP *Irp);
2147 typedef DRIVER_DISPATCH *PDRIVER_DISPATCH;
2148 typedef DRIVER_DISPATCH DRIVER_DISPATCH_RAISED;
2149
2150 _Function_class_(DRIVER_DISPATCH)
2151 _IRQL_requires_(PASSIVE_LEVEL)
2152 _IRQL_requires_same_
2153 typedef NTSTATUS
2154 (NTAPI DRIVER_DISPATCH_PAGED)(
2155 _In_ struct _DEVICE_OBJECT *DeviceObject,
2156 _Inout_ struct _IRP *Irp);
2157 typedef DRIVER_DISPATCH_PAGED *PDRIVER_DISPATCH_PAGED;
2158
2159 typedef struct _DRIVER_OBJECT {
2160 CSHORT Type;
2161 CSHORT Size;
2162 PDEVICE_OBJECT DeviceObject;
2163 ULONG Flags;
2164 PVOID DriverStart;
2165 ULONG DriverSize;
2166 PVOID DriverSection;
2167 PDRIVER_EXTENSION DriverExtension;
2168 UNICODE_STRING DriverName;
2169 PUNICODE_STRING HardwareDatabase;
2170 struct _FAST_IO_DISPATCH *FastIoDispatch;
2171 PDRIVER_INITIALIZE DriverInit;
2172 PDRIVER_STARTIO DriverStartIo;
2173 PDRIVER_UNLOAD DriverUnload;
2174 PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
2175 } DRIVER_OBJECT, *PDRIVER_OBJECT;
2176
2177 typedef struct _DMA_ADAPTER {
2178 USHORT Version;
2179 USHORT Size;
2180 struct _DMA_OPERATIONS* DmaOperations;
2181 } DMA_ADAPTER, *PDMA_ADAPTER;
2182
2183 typedef VOID
2184 (NTAPI *PPUT_DMA_ADAPTER)(
2185 PDMA_ADAPTER DmaAdapter);
2186
2187 typedef PVOID
2188 (NTAPI *PALLOCATE_COMMON_BUFFER)(
2189 _In_ PDMA_ADAPTER DmaAdapter,
2190 _In_ ULONG Length,
2191 _Out_ PPHYSICAL_ADDRESS LogicalAddress,
2192 _In_ BOOLEAN CacheEnabled);
2193
2194 typedef VOID
2195 (NTAPI *PFREE_COMMON_BUFFER)(
2196 _In_ PDMA_ADAPTER DmaAdapter,
2197 _In_ ULONG Length,
2198 _In_ PHYSICAL_ADDRESS LogicalAddress,
2199 _In_ PVOID VirtualAddress,
2200 _In_ BOOLEAN CacheEnabled);
2201
2202 typedef NTSTATUS
2203 (NTAPI *PALLOCATE_ADAPTER_CHANNEL)(
2204 _In_ PDMA_ADAPTER DmaAdapter,
2205 _In_ PDEVICE_OBJECT DeviceObject,
2206 _In_ ULONG NumberOfMapRegisters,
2207 _In_ PDRIVER_CONTROL ExecutionRoutine,
2208 _In_ PVOID Context);
2209
2210 typedef BOOLEAN
2211 (NTAPI *PFLUSH_ADAPTER_BUFFERS)(
2212 _In_ PDMA_ADAPTER DmaAdapter,
2213 _In_ PMDL Mdl,
2214 _In_ PVOID MapRegisterBase,
2215 _In_ PVOID CurrentVa,
2216 _In_ ULONG Length,
2217 _In_ BOOLEAN WriteToDevice);
2218
2219 typedef VOID
2220 (NTAPI *PFREE_ADAPTER_CHANNEL)(
2221 _In_ PDMA_ADAPTER DmaAdapter);
2222
2223 typedef VOID
2224 (NTAPI *PFREE_MAP_REGISTERS)(
2225 _In_ PDMA_ADAPTER DmaAdapter,
2226 PVOID MapRegisterBase,
2227 ULONG NumberOfMapRegisters);
2228
2229 typedef PHYSICAL_ADDRESS
2230 (NTAPI *PMAP_TRANSFER)(
2231 _In_ PDMA_ADAPTER DmaAdapter,
2232 _In_ PMDL Mdl,
2233 _In_ PVOID MapRegisterBase,
2234 _In_ PVOID CurrentVa,
2235 _Inout_ PULONG Length,
2236 _In_ BOOLEAN WriteToDevice);
2237
2238 typedef ULONG
2239 (NTAPI *PGET_DMA_ALIGNMENT)(
2240 _In_ PDMA_ADAPTER DmaAdapter);
2241
2242 typedef ULONG
2243 (NTAPI *PREAD_DMA_COUNTER)(
2244 _In_ PDMA_ADAPTER DmaAdapter);
2245
2246 _Function_class_(DRIVER_LIST_CONTROL)
2247 _IRQL_requires_same_
2248 typedef VOID
2249 (NTAPI DRIVER_LIST_CONTROL)(
2250 _In_ struct _DEVICE_OBJECT *DeviceObject,
2251 _In_ struct _IRP *Irp,
2252 _In_ struct _SCATTER_GATHER_LIST *ScatterGather,
2253 _In_ PVOID Context);
2254 typedef DRIVER_LIST_CONTROL *PDRIVER_LIST_CONTROL;
2255
2256 typedef NTSTATUS
2257 (NTAPI *PGET_SCATTER_GATHER_LIST)(
2258 _In_ PDMA_ADAPTER DmaAdapter,
2259 _In_ PDEVICE_OBJECT DeviceObject,
2260 _In_ PMDL Mdl,
2261 _In_ PVOID CurrentVa,
2262 _In_ ULONG Length,
2263 _In_ PDRIVER_LIST_CONTROL ExecutionRoutine,
2264 _In_ PVOID Context,
2265 _In_ BOOLEAN WriteToDevice);
2266
2267 typedef VOID
2268 (NTAPI *PPUT_SCATTER_GATHER_LIST)(
2269 _In_ PDMA_ADAPTER DmaAdapter,
2270 _In_ PSCATTER_GATHER_LIST ScatterGather,
2271 _In_ BOOLEAN WriteToDevice);
2272
2273 typedef NTSTATUS
2274 (NTAPI *PCALCULATE_SCATTER_GATHER_LIST_SIZE)(
2275 _In_ PDMA_ADAPTER DmaAdapter,
2276 _In_ PMDL Mdl OPTIONAL,
2277 _In_ PVOID CurrentVa,
2278 _In_ ULONG Length,
2279 _Out_ PULONG ScatterGatherListSize,
2280 _Out_ OPTIONAL PULONG pNumberOfMapRegisters);
2281
2282 typedef NTSTATUS
2283 (NTAPI *PBUILD_SCATTER_GATHER_LIST)(
2284 _In_ PDMA_ADAPTER DmaAdapter,
2285 _In_ PDEVICE_OBJECT DeviceObject,
2286 _In_ PMDL Mdl,
2287 _In_ PVOID CurrentVa,
2288 _In_ ULONG Length,
2289 _In_ PDRIVER_LIST_CONTROL ExecutionRoutine,
2290 _In_ PVOID Context,
2291 _In_ BOOLEAN WriteToDevice,
2292 _In_ PVOID ScatterGatherBuffer,
2293 _In_ ULONG ScatterGatherLength);
2294
2295 typedef NTSTATUS
2296 (NTAPI *PBUILD_MDL_FROM_SCATTER_GATHER_LIST)(
2297 _In_ PDMA_ADAPTER DmaAdapter,
2298 _In_ PSCATTER_GATHER_LIST ScatterGather,
2299 _In_ PMDL OriginalMdl,
2300 _Out_ PMDL *TargetMdl);
2301
2302 typedef struct _DMA_OPERATIONS {
2303 ULONG Size;
2304 PPUT_DMA_ADAPTER PutDmaAdapter;
2305 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer;
2306 PFREE_COMMON_BUFFER FreeCommonBuffer;
2307 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel;
2308 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers;
2309 PFREE_ADAPTER_CHANNEL FreeAdapterChannel;
2310 PFREE_MAP_REGISTERS FreeMapRegisters;
2311 PMAP_TRANSFER MapTransfer;
2312 PGET_DMA_ALIGNMENT GetDmaAlignment;
2313 PREAD_DMA_COUNTER ReadDmaCounter;
2314 PGET_SCATTER_GATHER_LIST GetScatterGatherList;
2315 PPUT_SCATTER_GATHER_LIST PutScatterGatherList;
2316 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList;
2317 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList;
2318 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList;
2319 } DMA_OPERATIONS, *PDMA_OPERATIONS;
2320
2321 typedef struct _IO_RESOURCE_DESCRIPTOR {
2322 UCHAR Option;
2323 UCHAR Type;
2324 UCHAR ShareDisposition;
2325 UCHAR Spare1;
2326 USHORT Flags;
2327 USHORT Spare2;
2328 union {
2329 struct {
2330 ULONG Length;
2331 ULONG Alignment;
2332 PHYSICAL_ADDRESS MinimumAddress;
2333 PHYSICAL_ADDRESS MaximumAddress;
2334 } Port;
2335 struct {
2336 ULONG Length;
2337 ULONG Alignment;
2338 PHYSICAL_ADDRESS MinimumAddress;
2339 PHYSICAL_ADDRESS MaximumAddress;
2340 } Memory;
2341 struct {
2342 ULONG MinimumVector;
2343 ULONG MaximumVector;
2344 } Interrupt;
2345 struct {
2346 ULONG MinimumChannel;
2347 ULONG MaximumChannel;
2348 } Dma;
2349 struct {
2350 ULONG Length;
2351 ULONG Alignment;
2352 PHYSICAL_ADDRESS MinimumAddress;
2353 PHYSICAL_ADDRESS MaximumAddress;
2354 } Generic;
2355 struct {
2356 ULONG Data[3];
2357 } DevicePrivate;
2358 struct {
2359 ULONG Length;
2360 ULONG MinBusNumber;
2361 ULONG MaxBusNumber;
2362 ULONG Reserved;
2363 } BusNumber;
2364 struct {
2365 ULONG Priority;
2366 ULONG Reserved1;
2367 ULONG Reserved2;
2368 } ConfigData;
2369 } u;
2370 } IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
2371
2372 typedef struct _IO_RESOURCE_LIST {
2373 USHORT Version;
2374 USHORT Revision;
2375 ULONG Count;
2376 IO_RESOURCE_DESCRIPTOR Descriptors[1];
2377 } IO_RESOURCE_LIST, *PIO_RESOURCE_LIST;
2378
2379 typedef struct _IO_RESOURCE_REQUIREMENTS_LIST {
2380 ULONG ListSize;
2381 INTERFACE_TYPE InterfaceType;
2382 ULONG BusNumber;
2383 ULONG SlotNumber;
2384 ULONG Reserved[3];
2385 ULONG AlternativeLists;
2386 IO_RESOURCE_LIST List[1];
2387 } IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;
2388
2389 _Function_class_(DRIVER_CANCEL)
2390 _Requires_lock_held_(_Global_cancel_spin_lock_)
2391 _Releases_lock_(_Global_cancel_spin_lock_)
2392 _IRQL_requires_min_(DISPATCH_LEVEL)
2393 _IRQL_requires_(DISPATCH_LEVEL)
2394 typedef VOID
2395 (NTAPI DRIVER_CANCEL)(
2396 _Inout_ struct _DEVICE_OBJECT *DeviceObject,
2397 _Inout_ _IRQL_uses_cancel_ struct _IRP *Irp);
2398 typedef DRIVER_CANCEL *PDRIVER_CANCEL;
2399
2400 typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _IRP {
2401 CSHORT Type;
2402 USHORT Size;
2403 struct _MDL *MdlAddress;
2404 ULONG Flags;
2405 union {
2406 struct _IRP *MasterIrp;
2407 volatile LONG IrpCount;
2408 PVOID SystemBuffer;
2409 } AssociatedIrp;
2410 LIST_ENTRY ThreadListEntry;
2411 IO_STATUS_BLOCK IoStatus;
2412 KPROCESSOR_MODE RequestorMode;
2413 BOOLEAN PendingReturned;
2414 CHAR StackCount;
2415 CHAR CurrentLocation;
2416 BOOLEAN Cancel;
2417 KIRQL CancelIrql;
2418 CCHAR ApcEnvironment;
2419 UCHAR AllocationFlags;
2420 PIO_STATUS_BLOCK UserIosb;
2421 PKEVENT UserEvent;
2422 union {
2423 struct {
2424 _ANONYMOUS_UNION union {
2425 PIO_APC_ROUTINE UserApcRoutine;
2426 PVOID IssuingProcess;
2427 } DUMMYUNIONNAME;
2428 PVOID UserApcContext;
2429 } AsynchronousParameters;
2430 LARGE_INTEGER AllocationSize;
2431 } Overlay;
2432 volatile PDRIVER_CANCEL CancelRoutine;
2433 PVOID UserBuffer;
2434 union {
2435 struct {
2436 _ANONYMOUS_UNION union {
2437 KDEVICE_QUEUE_ENTRY DeviceQueueEntry;
2438 _ANONYMOUS_STRUCT struct {
2439 PVOID DriverContext[4];
2440 } DUMMYSTRUCTNAME;
2441 } DUMMYUNIONNAME;
2442 PETHREAD Thread;
2443 PCHAR AuxiliaryBuffer;
2444 _ANONYMOUS_STRUCT struct {
2445 LIST_ENTRY ListEntry;
2446 _ANONYMOUS_UNION union {
2447 struct _IO_STACK_LOCATION *CurrentStackLocation;
2448 ULONG PacketType;
2449 } DUMMYUNIONNAME;
2450 } DUMMYSTRUCTNAME;
2451 struct _FILE_OBJECT *OriginalFileObject;
2452 } Overlay;
2453 KAPC Apc;
2454 PVOID CompletionKey;
2455 } Tail;
2456 } IRP, *PIRP;
2457
2458 typedef enum _IO_PAGING_PRIORITY {
2459 IoPagingPriorityInvalid,
2460 IoPagingPriorityNormal,
2461 IoPagingPriorityHigh,
2462 IoPagingPriorityReserved1,
2463 IoPagingPriorityReserved2
2464 } IO_PAGING_PRIORITY;
2465
2466 _Function_class_(IO_COMPLETION_ROUTINE)
2467 _IRQL_requires_same_
2468 typedef NTSTATUS
2469 (NTAPI IO_COMPLETION_ROUTINE)(
2470 _In_ struct _DEVICE_OBJECT *DeviceObject,
2471 _In_ struct _IRP *Irp,
2472 _In_opt_ PVOID Context);
2473 typedef IO_COMPLETION_ROUTINE *PIO_COMPLETION_ROUTINE;
2474
2475 _Function_class_(IO_DPC_ROUTINE)
2476 _IRQL_always_function_min_(DISPATCH_LEVEL)
2477 _IRQL_requires_(DISPATCH_LEVEL)
2478 _IRQL_requires_same_
2479 typedef VOID
2480 (NTAPI IO_DPC_ROUTINE)(
2481 _In_ struct _KDPC *Dpc,
2482 _In_ struct _DEVICE_OBJECT *DeviceObject,
2483 _Inout_ struct _IRP *Irp,
2484 _In_opt_ PVOID Context);
2485 typedef IO_DPC_ROUTINE *PIO_DPC_ROUTINE;
2486
2487 typedef NTSTATUS
2488 (NTAPI *PMM_DLL_INITIALIZE)(
2489 _In_ PUNICODE_STRING RegistryPath);
2490
2491 typedef NTSTATUS
2492 (NTAPI *PMM_DLL_UNLOAD)(
2493 VOID);
2494
2495 _Function_class_(IO_TIMER_ROUTINE)
2496 _IRQL_requires_same_
2497 typedef VOID
2498 (NTAPI IO_TIMER_ROUTINE)(
2499 _In_ struct _DEVICE_OBJECT *DeviceObject,
2500 _In_opt_ PVOID Context);
2501 typedef IO_TIMER_ROUTINE *PIO_TIMER_ROUTINE;
2502
2503 typedef struct _IO_SECURITY_CONTEXT {
2504 PSECURITY_QUALITY_OF_SERVICE SecurityQos;
2505 PACCESS_STATE AccessState;
2506 ACCESS_MASK DesiredAccess;
2507 ULONG FullCreateOptions;
2508 } IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT;
2509
2510 struct _IO_CSQ;
2511
2512 typedef struct _IO_CSQ_IRP_CONTEXT {
2513 ULONG Type;
2514 struct _IRP *Irp;
2515 struct _IO_CSQ *Csq;
2516 } IO_CSQ_IRP_CONTEXT, *PIO_CSQ_IRP_CONTEXT;
2517
2518 typedef VOID
2519 (NTAPI IO_CSQ_INSERT_IRP)(
2520 _In_ struct _IO_CSQ *Csq,
2521 _In_ PIRP Irp);
2522 typedef IO_CSQ_INSERT_IRP *PIO_CSQ_INSERT_IRP;
2523
2524 typedef NTSTATUS
2525 (NTAPI IO_CSQ_INSERT_IRP_EX)(
2526 _In_ struct _IO_CSQ *Csq,
2527 _In_ PIRP Irp,
2528 _In_ PVOID InsertContext);
2529 typedef IO_CSQ_INSERT_IRP_EX *PIO_CSQ_INSERT_IRP_EX;
2530
2531 typedef VOID
2532 (NTAPI IO_CSQ_REMOVE_IRP)(
2533 _In_ struct _IO_CSQ *Csq,
2534 _In_ PIRP Irp);
2535 typedef IO_CSQ_REMOVE_IRP *PIO_CSQ_REMOVE_IRP;
2536
2537 typedef PIRP
2538 (NTAPI IO_CSQ_PEEK_NEXT_IRP)(
2539 _In_ struct _IO_CSQ *Csq,
2540 _In_ PIRP Irp,
2541 _In_ PVOID PeekContext);
2542 typedef IO_CSQ_PEEK_NEXT_IRP *PIO_CSQ_PEEK_NEXT_IRP;
2543
2544 typedef VOID
2545 (NTAPI IO_CSQ_ACQUIRE_LOCK)(
2546 _In_ struct _IO_CSQ *Csq,
2547 _Out_ PKIRQL Irql);
2548 typedef IO_CSQ_ACQUIRE_LOCK *PIO_CSQ_ACQUIRE_LOCK;
2549
2550 typedef VOID
2551 (NTAPI IO_CSQ_RELEASE_LOCK)(
2552 _In_ struct _IO_CSQ *Csq,
2553 _In_ KIRQL Irql);
2554 typedef IO_CSQ_RELEASE_LOCK *PIO_CSQ_RELEASE_LOCK;
2555
2556 typedef VOID
2557 (NTAPI IO_CSQ_COMPLETE_CANCELED_IRP)(
2558 _In_ struct _IO_CSQ *Csq,
2559 _In_ PIRP Irp);
2560 typedef IO_CSQ_COMPLETE_CANCELED_IRP *PIO_CSQ_COMPLETE_CANCELED_IRP;
2561
2562 typedef struct _IO_CSQ {
2563 ULONG Type;
2564 PIO_CSQ_INSERT_IRP CsqInsertIrp;
2565 PIO_CSQ_REMOVE_IRP CsqRemoveIrp;
2566 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp;
2567 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock;
2568 PIO_CSQ_RELEASE_LOCK CsqReleaseLock;
2569 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp;
2570 PVOID ReservePointer;
2571 } IO_CSQ, *PIO_CSQ;
2572
2573 typedef enum _BUS_QUERY_ID_TYPE {
2574 BusQueryDeviceID,
2575 BusQueryHardwareIDs,
2576 BusQueryCompatibleIDs,
2577 BusQueryInstanceID,
2578 BusQueryDeviceSerialNumber
2579 } BUS_QUERY_ID_TYPE, *PBUS_QUERY_ID_TYPE;
2580
2581 typedef enum _DEVICE_TEXT_TYPE {
2582 DeviceTextDescription,
2583 DeviceTextLocationInformation
2584 } DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE;
2585
2586 typedef BOOLEAN
2587 (NTAPI *PGPE_SERVICE_ROUTINE)(
2588 PVOID,
2589 PVOID);
2590
2591 _IRQL_requires_max_(DISPATCH_LEVEL)
2592 _Must_inspect_result_
2593 typedef NTSTATUS
2594 (NTAPI *PGPE_CONNECT_VECTOR)(
2595 PDEVICE_OBJECT,
2596 ULONG,
2597 KINTERRUPT_MODE,
2598 BOOLEAN,
2599 PGPE_SERVICE_ROUTINE,
2600 PVOID,
2601 PVOID);
2602
2603 _IRQL_requires_max_(DISPATCH_LEVEL)
2604 _Must_inspect_result_
2605 typedef NTSTATUS
2606 (NTAPI *PGPE_DISCONNECT_VECTOR)(
2607 PVOID);
2608
2609 _IRQL_requires_max_(DISPATCH_LEVEL)
2610 _Must_inspect_result_
2611 typedef NTSTATUS
2612 (NTAPI *PGPE_ENABLE_EVENT)(
2613 PDEVICE_OBJECT,
2614 PVOID);
2615
2616 _IRQL_requires_max_(DISPATCH_LEVEL)
2617 _Must_inspect_result_
2618 typedef NTSTATUS
2619 (NTAPI *PGPE_DISABLE_EVENT)(
2620 PDEVICE_OBJECT,
2621 PVOID);
2622
2623 _IRQL_requires_max_(DISPATCH_LEVEL)
2624 _Must_inspect_result_
2625 typedef NTSTATUS
2626 (NTAPI *PGPE_CLEAR_STATUS)(
2627 PDEVICE_OBJECT,
2628 PVOID);
2629
2630 typedef VOID
2631 (NTAPI *PDEVICE_NOTIFY_CALLBACK)(
2632 PVOID,
2633 ULONG);
2634
2635 _IRQL_requires_max_(DISPATCH_LEVEL)
2636 _Must_inspect_result_
2637 typedef NTSTATUS
2638 (NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS)(
2639 PDEVICE_OBJECT,
2640 PDEVICE_NOTIFY_CALLBACK,
2641 PVOID);
2642
2643 _IRQL_requires_max_(DISPATCH_LEVEL)
2644 typedef VOID
2645 (NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS)(
2646 PDEVICE_OBJECT,
2647 PDEVICE_NOTIFY_CALLBACK);
2648
2649 typedef struct _ACPI_INTERFACE_STANDARD {
2650 USHORT Size;
2651 USHORT Version;
2652 PVOID Context;
2653 PINTERFACE_REFERENCE InterfaceReference;
2654 PINTERFACE_DEREFERENCE InterfaceDereference;
2655 PGPE_CONNECT_VECTOR GpeConnectVector;
2656 PGPE_DISCONNECT_VECTOR GpeDisconnectVector;
2657 PGPE_ENABLE_EVENT GpeEnableEvent;
2658 PGPE_DISABLE_EVENT GpeDisableEvent;
2659 PGPE_CLEAR_STATUS GpeClearStatus;
2660 PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications;
2661 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications;
2662 } ACPI_INTERFACE_STANDARD, *PACPI_INTERFACE_STANDARD;
2663
2664 typedef BOOLEAN
2665 (NTAPI *PGPE_SERVICE_ROUTINE2)(
2666 PVOID ObjectContext,
2667 PVOID ServiceContext);
2668
2669 _IRQL_requires_max_(DISPATCH_LEVEL)
2670 _Must_inspect_result_
2671 typedef NTSTATUS
2672 (NTAPI *PGPE_CONNECT_VECTOR2)(
2673 PVOID Context,
2674 ULONG GpeNumber,
2675 KINTERRUPT_MODE Mode,
2676 BOOLEAN Shareable,
2677 PGPE_SERVICE_ROUTINE ServiceRoutine,
2678 PVOID ServiceContext,
2679 PVOID *ObjectContext);
2680
2681 _IRQL_requires_max_(DISPATCH_LEVEL)
2682 _Must_inspect_result_
2683 typedef NTSTATUS
2684 (NTAPI *PGPE_DISCONNECT_VECTOR2)(
2685 PVOID Context,
2686 PVOID ObjectContext);
2687
2688 _IRQL_requires_max_(DISPATCH_LEVEL)
2689 _Must_inspect_result_
2690 typedef NTSTATUS
2691 (NTAPI *PGPE_ENABLE_EVENT2)(
2692 PVOID Context,
2693 PVOID ObjectContext);
2694
2695 _IRQL_requires_max_(DISPATCH_LEVEL)
2696 _Must_inspect_result_
2697 typedef NTSTATUS
2698 (NTAPI *PGPE_DISABLE_EVENT2)(
2699 PVOID Context,
2700 PVOID ObjectContext);
2701
2702 _IRQL_requires_max_(DISPATCH_LEVEL)
2703 _Must_inspect_result_
2704 typedef NTSTATUS
2705 (NTAPI *PGPE_CLEAR_STATUS2)(
2706 PVOID Context,
2707 PVOID ObjectContext);
2708
2709 _IRQL_requires_max_(DISPATCH_LEVEL)
2710 typedef VOID
2711 (NTAPI *PDEVICE_NOTIFY_CALLBACK2)(
2712 PVOID NotificationContext,
2713 ULONG NotifyCode);
2714
2715 _IRQL_requires_max_(DISPATCH_LEVEL)
2716 _Must_inspect_result_
2717 typedef NTSTATUS
2718 (NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS2)(
2719 PVOID Context,
2720 PDEVICE_NOTIFY_CALLBACK2 NotificationHandler,
2721 PVOID NotificationContext);
2722
2723 _IRQL_requires_max_(DISPATCH_LEVEL)
2724 typedef VOID
2725 (NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2)(
2726 PVOID Context);
2727
2728 typedef struct _ACPI_INTERFACE_STANDARD2 {
2729 USHORT Size;
2730 USHORT Version;
2731 PVOID Context;
2732 PINTERFACE_REFERENCE InterfaceReference;
2733 PINTERFACE_DEREFERENCE InterfaceDereference;
2734 PGPE_CONNECT_VECTOR2 GpeConnectVector;
2735 PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector;
2736 PGPE_ENABLE_EVENT2 GpeEnableEvent;
2737 PGPE_DISABLE_EVENT2 GpeDisableEvent;
2738 PGPE_CLEAR_STATUS2 GpeClearStatus;
2739 PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications;
2740 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications;
2741 } ACPI_INTERFACE_STANDARD2, *PACPI_INTERFACE_STANDARD2;
2742
2743 #if !defined(_AMD64_) && !defined(_IA64_)
2744 #include <pshpack4.h>
2745 #endif
2746 typedef struct _IO_STACK_LOCATION {
2747 UCHAR MajorFunction;
2748 UCHAR MinorFunction;
2749 UCHAR Flags;
2750 UCHAR Control;
2751 union {
2752 struct {
2753 PIO_SECURITY_CONTEXT SecurityContext;
2754 ULONG Options;
2755 USHORT POINTER_ALIGNMENT FileAttributes;
2756 USHORT ShareAccess;
2757 ULONG POINTER_ALIGNMENT EaLength;
2758 } Create;
2759 struct {
2760 ULONG Length;
2761 ULONG POINTER_ALIGNMENT Key;
2762 LARGE_INTEGER ByteOffset;
2763 } Read;
2764 struct {
2765 ULONG Length;
2766 ULONG POINTER_ALIGNMENT Key;
2767 LARGE_INTEGER ByteOffset;
2768 } Write;
2769 struct {
2770 ULONG Length;
2771 PUNICODE_STRING FileName;
2772 FILE_INFORMATION_CLASS FileInformationClass;
2773 ULONG FileIndex;
2774 } QueryDirectory;
2775 struct {
2776 ULONG Length;
2777 ULONG CompletionFilter;
2778 } NotifyDirectory;
2779 struct {
2780 ULONG Length;
2781 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
2782 } QueryFile;
2783 struct {
2784 ULONG Length;
2785 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
2786 PFILE_OBJECT FileObject;
2787 _ANONYMOUS_UNION union {
2788 _ANONYMOUS_STRUCT struct {
2789 BOOLEAN ReplaceIfExists;
2790 BOOLEAN AdvanceOnly;
2791 } DUMMYSTRUCTNAME;
2792 ULONG ClusterCount;
2793 HANDLE DeleteHandle;
2794 } DUMMYUNIONNAME;
2795 } SetFile;
2796 struct {
2797 ULONG Length;
2798 PVOID EaList;
2799 ULONG EaListLength;
2800 ULONG EaIndex;
2801 } QueryEa;
2802 struct {
2803 ULONG Length;
2804 } SetEa;
2805 struct {
2806 ULONG Length;
2807 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
2808 } QueryVolume;
2809 struct {
2810 ULONG Length;
2811 FS_INFORMATION_CLASS FsInformationClass;
2812 } SetVolume;
2813 struct {
2814 ULONG OutputBufferLength;
2815 ULONG InputBufferLength;
2816 ULONG FsControlCode;
2817 PVOID Type3InputBuffer;
2818 } FileSystemControl;
2819 struct {
2820 PLARGE_INTEGER Length;
2821 ULONG Key;
2822 LARGE_INTEGER ByteOffset;
2823 } LockControl;
2824 struct {
2825 ULONG OutputBufferLength;
2826 ULONG POINTER_ALIGNMENT InputBufferLength;
2827 ULONG POINTER_ALIGNMENT IoControlCode;
2828 PVOID Type3InputBuffer;
2829 } DeviceIoControl;
2830 struct {
2831 SECURITY_INFORMATION SecurityInformation;
2832 ULONG POINTER_ALIGNMENT Length;
2833 } QuerySecurity;
2834 struct {
2835 SECURITY_INFORMATION SecurityInformation;
2836 PSECURITY_DESCRIPTOR SecurityDescriptor;
2837 } SetSecurity;
2838 struct {
2839 PVPB Vpb;
2840 PDEVICE_OBJECT DeviceObject;
2841 } MountVolume;
2842 struct {
2843 PVPB Vpb;
2844 PDEVICE_OBJECT DeviceObject;
2845 } VerifyVolume;
2846 struct {
2847 struct _SCSI_REQUEST_BLOCK *Srb;
2848 } Scsi;
2849 struct {
2850 ULONG Length;
2851 PSID StartSid;
2852 struct _FILE_GET_QUOTA_INFORMATION *SidList;
2853 ULONG SidListLength;
2854 } QueryQuota;
2855 struct {
2856 ULONG Length;
2857 } SetQuota;
2858 struct {
2859 DEVICE_RELATION_TYPE Type;
2860 } QueryDeviceRelations;
2861 struct {
2862 CONST GUID *InterfaceType;
2863 USHORT Size;
2864 USHORT Version;
2865 PINTERFACE Interface;
2866 PVOID InterfaceSpecificData;
2867 } QueryInterface;
2868 struct {
2869 PDEVICE_CAPABILITIES Capabilities;
2870 } DeviceCapabilities;
2871 struct {
2872 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
2873 } FilterResourceRequirements;
2874 struct {
2875 ULONG WhichSpace;
2876 PVOID Buffer;
2877 ULONG Offset;
2878 ULONG POINTER_ALIGNMENT Length;
2879 } ReadWriteConfig;
2880 struct {
2881 BOOLEAN Lock;
2882 } SetLock;
2883 struct {
2884 BUS_QUERY_ID_TYPE IdType;
2885 } QueryId;
2886 struct {
2887 DEVICE_TEXT_TYPE DeviceTextType;
2888 LCID POINTER_ALIGNMENT LocaleId;
2889 } QueryDeviceText;
2890 struct {
2891 BOOLEAN InPath;
2892 BOOLEAN Reserved[3];
2893 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type;
2894 } UsageNotification;
2895 struct {
2896 SYSTEM_POWER_STATE PowerState;
2897 } WaitWake;
2898 struct {
2899 PPOWER_SEQUENCE PowerSequence;
2900 } PowerSequence;
2901 struct {
2902 ULONG SystemContext;
2903 POWER_STATE_TYPE POINTER_ALIGNMENT Type;
2904 POWER_STATE POINTER_ALIGNMENT State;
2905 POWER_ACTION POINTER_ALIGNMENT ShutdownType;
2906 } Power;
2907 struct {
2908 PCM_RESOURCE_LIST AllocatedResources;
2909 PCM_RESOURCE_LIST AllocatedResourcesTranslated;
2910 } StartDevice;
2911 struct {
2912 ULONG_PTR ProviderId;
2913 PVOID DataPath;
2914 ULONG BufferSize;
2915 PVOID Buffer;
2916 } WMI;
2917 struct {
2918 PVOID Argument1;
2919 PVOID Argument2;
2920 PVOID Argument3;
2921 PVOID Argument4;
2922 } Others;
2923 } Parameters;
2924 PDEVICE_OBJECT DeviceObject;
2925 PFILE_OBJECT FileObject;
2926 PIO_COMPLETION_ROUTINE CompletionRoutine;
2927 PVOID Context;
2928 } IO_STACK_LOCATION, *PIO_STACK_LOCATION;
2929 #if !defined(_AMD64_) && !defined(_IA64_)
2930 #include <poppack.h>
2931 #endif
2932
2933 /* IO_STACK_LOCATION.Control */
2934
2935 #define SL_PENDING_RETURNED 0x01
2936 #define SL_ERROR_RETURNED 0x02
2937 #define SL_INVOKE_ON_CANCEL 0x20
2938 #define SL_INVOKE_ON_SUCCESS 0x40
2939 #define SL_INVOKE_ON_ERROR 0x80
2940
2941 $endif (_WDMDDK_)
2942 $if (_WDMDDK_ || _DEVIOCTL_)
2943 #define METHOD_BUFFERED 0
2944 #define METHOD_IN_DIRECT 1
2945 #define METHOD_OUT_DIRECT 2
2946 #define METHOD_NEITHER 3
2947
2948 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
2949 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
2950
2951 $endif (_WDMDDK_ || _DEVIOCTL_)
2952 $if (_WDMDDK_)
2953 #define FILE_SUPERSEDED 0x00000000
2954 #define FILE_OPENED 0x00000001
2955 #define FILE_CREATED 0x00000002
2956 #define FILE_OVERWRITTEN 0x00000003
2957 #define FILE_EXISTS 0x00000004
2958 #define FILE_DOES_NOT_EXIST 0x00000005
2959
2960 #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
2961 #define FILE_WRITE_TO_END_OF_FILE 0xffffffff
2962
2963 /* also in winnt.h */
2964 #define FILE_LIST_DIRECTORY 0x00000001
2965 #define FILE_READ_DATA 0x00000001
2966 #define FILE_ADD_FILE 0x00000002
2967 #define FILE_WRITE_DATA 0x00000002
2968 #define FILE_ADD_SUBDIRECTORY 0x00000004
2969 #define FILE_APPEND_DATA 0x00000004
2970 #define FILE_CREATE_PIPE_INSTANCE 0x00000004
2971 #define FILE_READ_EA 0x00000008
2972 #define FILE_WRITE_EA 0x00000010
2973 #define FILE_EXECUTE 0x00000020
2974 #define FILE_TRAVERSE 0x00000020
2975 #define FILE_DELETE_CHILD 0x00000040
2976 #define FILE_READ_ATTRIBUTES 0x00000080
2977 #define FILE_WRITE_ATTRIBUTES 0x00000100
2978
2979 #define FILE_SHARE_READ 0x00000001
2980 #define FILE_SHARE_WRITE 0x00000002
2981 #define FILE_SHARE_DELETE 0x00000004
2982 #define FILE_SHARE_VALID_FLAGS 0x00000007
2983
2984 #define FILE_ATTRIBUTE_READONLY 0x00000001
2985 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
2986 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
2987 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
2988 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
2989 #define FILE_ATTRIBUTE_DEVICE 0x00000040
2990 #define FILE_ATTRIBUTE_NORMAL 0x00000080
2991 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
2992 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
2993 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
2994 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
2995 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
2996 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
2997 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
2998 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000
2999
3000 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
3001 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
3002
3003 #define FILE_VALID_OPTION_FLAGS 0x00ffffff
3004 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
3005 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
3006 #define FILE_VALID_SET_FLAGS 0x00000036
3007
3008 #define FILE_SUPERSEDE 0x00000000
3009 #define FILE_OPEN 0x00000001
3010 #define FILE_CREATE 0x00000002
3011 #define FILE_OPEN_IF 0x00000003
3012 #define FILE_OVERWRITE 0x00000004
3013 #define FILE_OVERWRITE_IF 0x00000005
3014 #define FILE_MAXIMUM_DISPOSITION 0x00000005
3015
3016 #define FILE_DIRECTORY_FILE 0x00000001
3017 #define FILE_WRITE_THROUGH 0x00000002
3018 #define FILE_SEQUENTIAL_ONLY 0x00000004
3019 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
3020 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
3021 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
3022 #define FILE_NON_DIRECTORY_FILE 0x00000040
3023 #define FILE_CREATE_TREE_CONNECTION 0x00000080
3024 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
3025 #define FILE_NO_EA_KNOWLEDGE 0x00000200
3026 #define FILE_OPEN_REMOTE_INSTANCE 0x00000400
3027 #define FILE_RANDOM_ACCESS 0x00000800
3028 #define FILE_DELETE_ON_CLOSE 0x00001000
3029 #define FILE_OPEN_BY_FILE_ID 0x00002000
3030 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
3031 #define FILE_NO_COMPRESSION 0x00008000
3032 #if (NTDDI_VERSION >= NTDDI_WIN7)
3033 #define FILE_OPEN_REQUIRING_OPLOCK 0x00010000
3034 #define FILE_DISALLOW_EXCLUSIVE 0x00020000
3035 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
3036 #define FILE_RESERVE_OPFILTER 0x00100000
3037 #define FILE_OPEN_REPARSE_POINT 0x00200000
3038 #define FILE_OPEN_NO_RECALL 0x00400000
3039 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
3040
3041 $endif (_WDMDDK_)
3042 $if (_WDMDDK_ || _DEVIOCTL_)
3043 #define FILE_ANY_ACCESS 0x00000000
3044 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
3045 #define FILE_READ_ACCESS 0x00000001
3046 #define FILE_WRITE_ACCESS 0x00000002
3047
3048 $endif (_WDMDDK_ || _DEVIOCTL_)
3049 $if (_WDMDDK_)
3050 #define FILE_ALL_ACCESS \
3051 (STANDARD_RIGHTS_REQUIRED | \
3052 SYNCHRONIZE | \
3053 0x1FF)
3054
3055 #define FILE_GENERIC_EXECUTE \
3056 (STANDARD_RIGHTS_EXECUTE | \
3057 FILE_READ_ATTRIBUTES | \
3058 FILE_EXECUTE | \
3059 SYNCHRONIZE)
3060
3061 #define FILE_GENERIC_READ \
3062 (STANDARD_RIGHTS_READ | \
3063 FILE_READ_DATA | \
3064 FILE_READ_ATTRIBUTES | \
3065 FILE_READ_EA | \
3066 SYNCHRONIZE)
3067
3068 #define FILE_GENERIC_WRITE \
3069 (STANDARD_RIGHTS_WRITE | \
3070 FILE_WRITE_DATA | \
3071 FILE_WRITE_ATTRIBUTES | \
3072 FILE_WRITE_EA | \
3073 FILE_APPEND_DATA | \
3074 SYNCHRONIZE)
3075
3076 /* end winnt.h */
3077
3078 #define WMIREG_ACTION_REGISTER 1
3079 #define WMIREG_ACTION_DEREGISTER 2
3080 #define WMIREG_ACTION_REREGISTER 3
3081 #define WMIREG_ACTION_UPDATE_GUIDS 4
3082 #define WMIREG_ACTION_BLOCK_IRPS 5
3083
3084 #define WMIREGISTER 0
3085 #define WMIUPDATE 1
3086
3087 _Function_class_(WMI_NOTIFICATION_CALLBACK)
3088 _IRQL_requires_same_
3089 typedef VOID
3090 (NTAPI FWMI_NOTIFICATION_CALLBACK)(
3091 PVOID Wnode,
3092 PVOID Context);
3093 typedef FWMI_NOTIFICATION_CALLBACK *WMI_NOTIFICATION_CALLBACK;
3094
3095 #ifndef _PCI_X_
3096 #define _PCI_X_
3097
3098 typedef struct _PCI_SLOT_NUMBER {
3099 union {
3100 struct {
3101 ULONG DeviceNumber:5;
3102 ULONG FunctionNumber:3;
3103 ULONG Reserved:24;
3104 } bits;
3105 ULONG AsULONG;
3106 } u;
3107 } PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER;
3108
3109 #define PCI_TYPE0_ADDRESSES 6
3110 #define PCI_TYPE1_ADDRESSES 2
3111 #define PCI_TYPE2_ADDRESSES 5
3112
3113 /* While MS WDK uses inheritance in C++, we cannot do this with gcc, as
3114 inheritance, even from a struct renders the type non-POD. So we use
3115 this hack */
3116 #define PCI_COMMON_HEADER_LAYOUT \
3117 USHORT VendorID; \
3118 USHORT DeviceID; \
3119 USHORT Command; \
3120 USHORT Status; \
3121 UCHAR RevisionID; \
3122 UCHAR ProgIf; \
3123 UCHAR SubClass; \
3124 UCHAR BaseClass; \
3125 UCHAR CacheLineSize; \
3126 UCHAR LatencyTimer; \
3127 UCHAR HeaderType; \
3128 UCHAR BIST; \
3129 union { \
3130 struct _PCI_HEADER_TYPE_0 { \
3131 ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \
3132 ULONG CIS; \
3133 USHORT SubVendorID; \
3134 USHORT SubSystemID; \
3135 ULONG ROMBaseAddress; \
3136 UCHAR CapabilitiesPtr; \
3137 UCHAR Reserved1[3]; \
3138 ULONG Reserved2; \
3139 UCHAR InterruptLine; \
3140 UCHAR InterruptPin; \
3141 UCHAR MinimumGrant; \
3142 UCHAR MaximumLatency; \
3143 } type0; \
3144 struct _PCI_HEADER_TYPE_1 { \
3145 ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \
3146 UCHAR PrimaryBus; \
3147 UCHAR SecondaryBus; \
3148 UCHAR SubordinateBus; \
3149 UCHAR SecondaryLatency; \
3150 UCHAR IOBase; \
3151 UCHAR IOLimit; \
3152 USHORT SecondaryStatus; \
3153 USHORT MemoryBase; \
3154 USHORT MemoryLimit; \
3155 USHORT PrefetchBase; \
3156 USHORT PrefetchLimit; \
3157 ULONG PrefetchBaseUpper32; \
3158 ULONG PrefetchLimitUpper32; \
3159 USHORT IOBaseUpper16; \
3160 USHORT IOLimitUpper16; \
3161 UCHAR CapabilitiesPtr; \
3162 UCHAR Reserved1[3]; \
3163 ULONG ROMBaseAddress; \
3164 UCHAR InterruptLine; \
3165 UCHAR InterruptPin; \
3166 USHORT BridgeControl; \
3167 } type1; \
3168 struct _PCI_HEADER_TYPE_2 { \
3169 ULONG SocketRegistersBaseAddress; \
3170 UCHAR CapabilitiesPtr; \
3171 UCHAR Reserved; \
3172 USHORT SecondaryStatus; \
3173 UCHAR PrimaryBus; \
3174 UCHAR SecondaryBus; \
3175 UCHAR SubordinateBus; \
3176 UCHAR SecondaryLatency; \
3177 struct { \
3178 ULONG Base; \
3179 ULONG Limit; \
3180 } Range[PCI_TYPE2_ADDRESSES-1]; \
3181 UCHAR InterruptLine; \
3182 UCHAR InterruptPin; \
3183 USHORT BridgeControl; \
3184 } type2; \
3185 } u;
3186
3187 typedef struct _PCI_COMMON_HEADER {
3188 PCI_COMMON_HEADER_LAYOUT
3189 } PCI_COMMON_HEADER, *PPCI_COMMON_HEADER;
3190
3191 #ifdef __cplusplus
3192 typedef struct _PCI_COMMON_CONFIG {
3193 PCI_COMMON_HEADER_LAYOUT
3194 UCHAR DeviceSpecific[192];
3195 } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
3196 #else
3197 typedef struct _PCI_COMMON_CONFIG {
3198 PCI_COMMON_HEADER DUMMYSTRUCTNAME;
3199 UCHAR DeviceSpecific[192];
3200 } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
3201 #endif
3202
3203 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
3204
3205 #define PCI_EXTENDED_CONFIG_LENGTH 0x1000
3206
3207 #define PCI_MAX_DEVICES 32
3208 #define PCI_MAX_FUNCTION 8
3209 #define PCI_MAX_BRIDGE_NUMBER 0xFF
3210 #define PCI_INVALID_VENDORID 0xFFFF
3211
3212 /* PCI_COMMON_CONFIG.HeaderType */
3213 #define PCI_MULTIFUNCTION 0x80
3214 #define PCI_DEVICE_TYPE 0x00
3215 #define PCI_BRIDGE_TYPE 0x01
3216 #define PCI_CARDBUS_BRIDGE_TYPE 0x02
3217
3218 #define PCI_CONFIGURATION_TYPE(PciData) \
3219 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
3220
3221 #define PCI_MULTIFUNCTION_DEVICE(PciData) \
3222 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
3223
3224 /* PCI_COMMON_CONFIG.Command */
3225 #define PCI_ENABLE_IO_SPACE 0x0001
3226 #define PCI_ENABLE_MEMORY_SPACE 0x0002
3227 #define PCI_ENABLE_BUS_MASTER 0x0004
3228 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
3229 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
3230 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
3231 #define PCI_ENABLE_PARITY 0x0040
3232 #define PCI_ENABLE_WAIT_CYCLE 0x0080
3233 #define PCI_ENABLE_SERR 0x0100
3234 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
3235 #define PCI_DISABLE_LEVEL_INTERRUPT 0x0400
3236
3237 /* PCI_COMMON_CONFIG.Status */
3238 #define PCI_STATUS_INTERRUPT_PENDING 0x0008
3239 #define PCI_STATUS_CAPABILITIES_LIST 0x0010
3240 #define PCI_STATUS_66MHZ_CAPABLE 0x0020
3241 #define PCI_STATUS_UDF_SUPPORTED 0x0040
3242 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
3243 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
3244 #define PCI_STATUS_DEVSEL 0x0600
3245 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
3246 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
3247 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
3248 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
3249 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
3250
3251 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
3252
3253 #define PCI_WHICHSPACE_CONFIG 0x0
3254 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
3255
3256 #define PCI_CAPABILITY_ID_POWER_MANAGEMENT 0x01
3257 #define PCI_CAPABILITY_ID_AGP 0x02
3258 #define PCI_CAPABILITY_ID_VPD 0x03
3259 #define PCI_CAPABILITY_ID_SLOT_ID 0x04
3260 #define PCI_CAPABILITY_ID_MSI 0x05
3261 #define PCI_CAPABILITY_ID_CPCI_HOTSWAP 0x06
3262 #define PCI_CAPABILITY_ID_PCIX 0x07
3263 #define PCI_CAPABILITY_ID_HYPERTRANSPORT 0x08
3264 #define PCI_CAPABILITY_ID_VENDOR_SPECIFIC 0x09
3265 #define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A
3266 #define PCI_CAPABILITY_ID_CPCI_RES_CTRL 0x0B
3267 #define PCI_CAPABILITY_ID_SHPC 0x0C
3268 #define PCI_CAPABILITY_ID_P2P_SSID 0x0D
3269 #define PCI_CAPABILITY_ID_AGP_TARGET 0x0E
3270 #define PCI_CAPABILITY_ID_SECURE 0x0F
3271 #define PCI_CAPABILITY_ID_PCI_EXPRESS 0x10
3272 #define PCI_CAPABILITY_ID_MSIX 0x11
3273
3274 typedef struct _PCI_CAPABILITIES_HEADER {
3275 UCHAR CapabilityID;
3276 UCHAR Next;
3277 } PCI_CAPABILITIES_HEADER, *PPCI_CAPABILITIES_HEADER;
3278
3279 typedef struct _PCI_PMC {
3280 UCHAR Version:3;
3281 UCHAR PMEClock:1;
3282 UCHAR Rsvd1:1;
3283 UCHAR DeviceSpecificInitialization:1;
3284 UCHAR Rsvd2:2;
3285 struct _PM_SUPPORT {
3286 UCHAR Rsvd2:1;
3287 UCHAR D1:1;
3288 UCHAR D2:1;
3289 UCHAR PMED0:1;
3290 UCHAR PMED1:1;
3291 UCHAR PMED2:1;
3292 UCHAR PMED3Hot:1;
3293 UCHAR PMED3Cold:1;
3294 } Support;
3295 } PCI_PMC, *PPCI_PMC;
3296
3297 typedef struct _PCI_PMCSR {
3298 USHORT PowerState:2;
3299 USHORT Rsvd1:6;
3300 USHORT PMEEnable:1;
3301 USHORT DataSelect:4;
3302 USHORT DataScale:2;
3303 USHORT PMEStatus:1;
3304 } PCI_PMCSR, *PPCI_PMCSR;
3305
3306 typedef struct _PCI_PMCSR_BSE {
3307 UCHAR Rsvd1:6;
3308 UCHAR D3HotSupportsStopClock:1;
3309 UCHAR BusPowerClockControlEnabled:1;
3310 } PCI_PMCSR_BSE, *PPCI_PMCSR_BSE;
3311
3312 typedef struct _PCI_PM_CAPABILITY {
3313 PCI_CAPABILITIES_HEADER Header;
3314 union {
3315 PCI_PMC Capabilities;
3316 USHORT AsUSHORT;
3317 } PMC;
3318 union {
3319 PCI_PMCSR ControlStatus;
3320 USHORT AsUSHORT;
3321 } PMCSR;
3322 union {
3323 PCI_PMCSR_BSE BridgeSupport;
3324 UCHAR AsUCHAR;
3325 } PMCSR_BSE;
3326 UCHAR Data;
3327 } PCI_PM_CAPABILITY, *PPCI_PM_CAPABILITY;
3328
3329 typedef struct {
3330 PCI_CAPABILITIES_HEADER Header;
3331 union {
3332 struct {
3333 USHORT DataParityErrorRecoveryEnable:1;
3334 USHORT EnableRelaxedOrdering:1;
3335 USHORT MaxMemoryReadByteCount:2;
3336 USHORT MaxOutstandingSplitTransactions:3;
3337 USHORT Reserved:9;
3338 } bits;
3339 USHORT AsUSHORT;
3340 } Command;
3341 union {
3342 struct {
3343 ULONG FunctionNumber:3;
3344 ULONG DeviceNumber:5;
3345 ULONG BusNumber:8;
3346 ULONG Device64Bit:1;
3347 ULONG Capable133MHz:1;
3348 ULONG SplitCompletionDiscarded:1;
3349 ULONG UnexpectedSplitCompletion:1;
3350 ULONG DeviceComplexity:1;
3351 ULONG DesignedMaxMemoryReadByteCount:2;
3352 ULONG DesignedMaxOutstandingSplitTransactions:3;
3353 ULONG DesignedMaxCumulativeReadSize:3;
3354 ULONG ReceivedSplitCompletionErrorMessage:1;
3355 ULONG CapablePCIX266:1;
3356 ULONG CapablePCIX533:1;
3357 } bits;
3358 ULONG AsULONG;
3359 } Status;
3360 } PCI_X_CAPABILITY, *PPCI_X_CAPABILITY;
3361
3362 #define PCI_EXPRESS_ADVANCED_ERROR_REPORTING_CAP_ID 0x0001
3363 #define PCI_EXPRESS_VIRTUAL_CHANNEL_CAP_ID 0x0002
3364 #define PCI_EXPRESS_DEVICE_SERIAL_NUMBER_CAP_ID 0x0003
3365 #define PCI_EXPRESS_POWER_BUDGETING_CAP_ID 0x0004
3366 #define PCI_EXPRESS_RC_LINK_DECLARATION_CAP_ID 0x0005
3367 #define PCI_EXPRESS_RC_INTERNAL_LINK_CONTROL_CAP_ID 0x0006
3368 #define PCI_EXPRESS_RC_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION_CAP_ID 0x0007
3369 #define PCI_EXPRESS_MFVC_CAP_ID 0x0008
3370 #define PCI_EXPRESS_VC_AND_MFVC_CAP_ID 0x0009
3371 #define PCI_EXPRESS_RCRB_HEADER_CAP_ID 0x000A
3372 #define PCI_EXPRESS_SINGLE_ROOT_IO_VIRTUALIZATION_CAP_ID 0x0010
3373
3374 typedef struct _PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER {
3375 USHORT CapabilityID;
3376 USHORT Version:4;
3377 USHORT Next:12;
3378 } PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER, *PPCI_EXPRESS_ENHANCED_CAPABILITY_HEADER;
3379
3380 typedef struct _PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY {
3381 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
3382 ULONG LowSerialNumber;
3383 ULONG HighSerialNumber;
3384 } PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY, *PPCI_EXPRESS_SERIAL_NUMBER_CAPABILITY;
3385
3386 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS {
3387 _ANONYMOUS_STRUCT struct {
3388 ULONG Undefined:1;
3389 ULONG Reserved1:3;
3390 ULONG DataLinkProtocolError:1;
3391 ULONG SurpriseDownError:1;
3392 ULONG Reserved2:6;
3393 ULONG PoisonedTLP:1;
3394 ULONG FlowControlProtocolError:1;
3395 ULONG CompletionTimeout:1;
3396 ULONG CompleterAbort:1;
3397 ULONG UnexpectedCompletion:1;
3398 ULONG ReceiverOverflow:1;
3399 ULONG MalformedTLP:1;
3400 ULONG ECRCError:1;
3401 ULONG UnsupportedRequestError:1;
3402 ULONG Reserved3:11;
3403 } DUMMYSTRUCTNAME;
3404 ULONG AsULONG;
3405 } PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS;
3406
3407 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK {
3408 _ANONYMOUS_STRUCT struct {
3409 ULONG Undefined:1;
3410 ULONG Reserved1:3;
3411 ULONG DataLinkProtocolError:1;
3412 ULONG SurpriseDownError:1;
3413 ULONG Reserved2:6;
3414 ULONG PoisonedTLP:1;
3415 ULONG FlowControlProtocolError:1;
3416 ULONG CompletionTimeout:1;
3417 ULONG CompleterAbort:1;
3418 ULONG UnexpectedCompletion:1;
3419 ULONG ReceiverOverflow:1;
3420 ULONG MalformedTLP:1;
3421 ULONG ECRCError:1;
3422 ULONG UnsupportedRequestError:1;
3423 ULONG Reserved3:11;
3424 } DUMMYSTRUCTNAME;
3425 ULONG AsULONG;
3426 } PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_MASK;
3427
3428 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY {
3429 _ANONYMOUS_STRUCT struct {
3430 ULONG Undefined:1;
3431 ULONG Reserved1:3;
3432 ULONG DataLinkProtocolError:1;
3433 ULONG SurpriseDownError:1;
3434 ULONG Reserved2:6;
3435 ULONG PoisonedTLP:1;
3436 ULONG FlowControlProtocolError:1;
3437 ULONG CompletionTimeout:1;
3438 ULONG CompleterAbort:1;
3439 ULONG UnexpectedCompletion:1;
3440 ULONG ReceiverOverflow:1;
3441 ULONG MalformedTLP:1;
3442 ULONG ECRCError:1;
3443 ULONG UnsupportedRequestError:1;
3444 ULONG Reserved3:11;
3445 } DUMMYSTRUCTNAME;
3446 ULONG AsULONG;
3447 } PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY;
3448
3449 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_STATUS {
3450 _ANONYMOUS_STRUCT struct {
3451 ULONG ReceiverError:1;
3452 ULONG Reserved1:5;
3453 ULONG BadTLP:1;
3454 ULONG BadDLLP:1;
3455 ULONG ReplayNumRollover:1;
3456 ULONG Reserved2:3;
3457 ULONG ReplayTimerTimeout:1;
3458 ULONG AdvisoryNonFatalError:1;
3459 ULONG Reserved3:18;
3460 } DUMMYSTRUCTNAME;
3461 ULONG AsULONG;
3462 } PCI_EXPRESS_CORRECTABLE_ERROR_STATUS, *PPCI_CORRECTABLE_ERROR_STATUS;
3463
3464 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_MASK {
3465 _ANONYMOUS_STRUCT struct {
3466 ULONG ReceiverError:1;
3467 ULONG Reserved1:5;
3468 ULONG BadTLP:1;
3469 ULONG BadDLLP:1;
3470 ULONG ReplayNumRollover:1;
3471 ULONG Reserved2:3;
3472 ULONG ReplayTimerTimeout:1;
3473 ULONG AdvisoryNonFatalError:1;
3474 ULONG Reserved3:18;
3475 } DUMMYSTRUCTNAME;
3476 ULONG AsULONG;
3477 } PCI_EXPRESS_CORRECTABLE_ERROR_MASK, *PPCI_CORRECTABLE_ERROR_MASK;
3478
3479 typedef union _PCI_EXPRESS_AER_CAPABILITIES {
3480 _ANONYMOUS_STRUCT struct {
3481 ULONG FirstErrorPointer:5;
3482 ULONG ECRCGenerationCapable:1;
3483 ULONG ECRCGenerationEnable:1;
3484 ULONG ECRCCheckCapable:1;
3485 ULONG ECRCCheckEnable:1;
3486 ULONG Reserved:23;
3487 } DUMMYSTRUCTNAME;
3488 ULONG AsULONG;
3489 } PCI_EXPRESS_AER_CAPABILITIES, *PPCI_EXPRESS_AER_CAPABILITIES;
3490
3491 typedef union _PCI_EXPRESS_ROOT_ERROR_COMMAND {
3492 _ANONYMOUS_STRUCT struct {
3493 ULONG CorrectableErrorReportingEnable:1;
3494 ULONG NonFatalErrorReportingEnable:1;
3495 ULONG FatalErrorReportingEnable:1;
3496 ULONG Reserved:29;
3497 } DUMMYSTRUCTNAME;
3498 ULONG AsULONG;
3499 } PCI_EXPRESS_ROOT_ERROR_COMMAND, *PPCI_EXPRESS_ROOT_ERROR_COMMAND;
3500
3501 typedef union _PCI_EXPRESS_ROOT_ERROR_STATUS {
3502 _ANONYMOUS_STRUCT struct {
3503 ULONG CorrectableErrorReceived:1;
3504 ULONG MultipleCorrectableErrorsReceived:1;
3505 ULONG UncorrectableErrorReceived:1;
3506 ULONG MultipleUncorrectableErrorsReceived:1;
3507 ULONG FirstUncorrectableFatal:1;
3508 ULONG NonFatalErrorMessagesReceived:1;
3509 ULONG FatalErrorMessagesReceived:1;
3510 ULONG Reserved:20;
3511 ULONG AdvancedErrorInterruptMessageNumber:5;
3512 } DUMMYSTRUCTNAME;
3513 ULONG AsULONG;
3514 } PCI_EXPRESS_ROOT_ERROR_STATUS, *PPCI_EXPRESS_ROOT_ERROR_STATUS;
3515
3516 typedef union _PCI_EXPRESS_ERROR_SOURCE_ID {
3517 _ANONYMOUS_STRUCT struct {
3518 USHORT CorrectableSourceIdFun:3;
3519 USHORT CorrectableSourceIdDev:5;
3520 USHORT CorrectableSourceIdBus:8;
3521 USHORT UncorrectableSourceIdFun:3;
3522 USHORT UncorrectableSourceIdDev:5;
3523 USHORT UncorrectableSourceIdBus:8;
3524 } DUMMYSTRUCTNAME;
3525 ULONG AsULONG;
3526 } PCI_EXPRESS_ERROR_SOURCE_ID, *PPCI_EXPRESS_ERROR_SOURCE_ID;
3527
3528 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS {
3529 _ANONYMOUS_STRUCT struct {
3530 ULONG TargetAbortOnSplitCompletion:1;
3531 ULONG MasterAbortOnSplitCompletion:1;
3532 ULONG ReceivedTargetAbort:1;
3533 ULONG ReceivedMasterAbort:1;
3534 ULONG RsvdZ:1;
3535 ULONG UnexpectedSplitCompletionError:1;
3536 ULONG UncorrectableSplitCompletion:1;
3537 ULONG UncorrectableDataError:1;
3538 ULONG UncorrectableAttributeError:1;
3539 ULONG UncorrectableAddressError:1;
3540 ULONG DelayedTransactionDiscardTimerExpired:1;
3541 ULONG PERRAsserted:1;
3542 ULONG SERRAsserted:1;
3543 ULONG InternalBridgeError:1;
3544 ULONG Reserved:18;
3545 } DUMMYSTRUCTNAME;
3546 ULONG AsULONG;
3547 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS;
3548
3549 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK {
3550 _ANONYMOUS_STRUCT struct {
3551 ULONG TargetAbortOnSplitCompletion:1;
3552 ULONG MasterAbortOnSplitCompletion:1;
3553 ULONG ReceivedTargetAbort:1;
3554 ULONG ReceivedMasterAbort:1;
3555 ULONG RsvdZ:1;
3556 ULONG UnexpectedSplitCompletionError:1;
3557 ULONG UncorrectableSplitCompletion:1;
3558 ULONG UncorrectableDataError:1;
3559 ULONG UncorrectableAttributeError:1;
3560 ULONG UncorrectableAddressError:1;
3561 ULONG DelayedTransactionDiscardTimerExpired:1;
3562 ULONG PERRAsserted:1;
3563 ULONG SERRAsserted:1;
3564 ULONG InternalBridgeError:1;
3565 ULONG Reserved:18;
3566 } DUMMYSTRUCTNAME;
3567 ULONG AsULONG;
3568 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK;
3569
3570 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY {
3571 _ANONYMOUS_STRUCT struct {
3572 ULONG TargetAbortOnSplitCompletion:1;
3573 ULONG MasterAbortOnSplitCompletion:1;
3574 ULONG ReceivedTargetAbort:1;
3575 ULONG ReceivedMasterAbort:1;
3576 ULONG RsvdZ:1;
3577 ULONG UnexpectedSplitCompletionError:1;
3578 ULONG UncorrectableSplitCompletion:1;
3579 ULONG UncorrectableDataError:1;
3580 ULONG UncorrectableAttributeError:1;
3581 ULONG UncorrectableAddressError:1;
3582 ULONG DelayedTransactionDiscardTimerExpired:1;
3583 ULONG PERRAsserted:1;
3584 ULONG SERRAsserted:1;
3585 ULONG InternalBridgeError:1;
3586 ULONG Reserved:18;
3587 } DUMMYSTRUCTNAME;
3588 ULONG AsULONG;
3589 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY;
3590
3591 typedef union _PCI_EXPRESS_SEC_AER_CAPABILITIES {
3592 _ANONYMOUS_STRUCT struct {
3593 ULONG SecondaryUncorrectableFirstErrorPtr:5;
3594 ULONG Reserved:27;
3595 } DUMMYSTRUCTNAME;
3596 ULONG AsULONG;
3597 } PCI_EXPRESS_SEC_AER_CAPABILITIES, *PPCI_EXPRESS_SEC_AER_CAPABILITIES;
3598
3599 #define ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING 0x00000001
3600 #define ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING 0x00000002
3601 #define ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING 0x00000004
3602
3603 #define ROOT_CMD_ERROR_REPORTING_ENABLE_MASK \
3604 (ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING | \
3605 ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING | \
3606 ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING)
3607
3608 typedef struct _PCI_EXPRESS_AER_CAPABILITY {
3609 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
3610 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus;
3611 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask;
3612 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity;
3613 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus;
3614 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask;
3615 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl;
3616 ULONG HeaderLog[4];
3617 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus;
3618 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask;
3619 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity;
3620 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl;
3621 ULONG SecHeaderLog[4];
3622 } PCI_EXPRESS_AER_CAPABILITY, *PPCI_EXPRESS_AER_CAPABILITY;
3623
3624 typedef struct _PCI_EXPRESS_ROOTPORT_AER_CAPABILITY {
3625 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
3626 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus;
3627 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask;
3628 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity;
3629 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus;
3630 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask;
3631 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl;
3632 ULONG HeaderLog[4];
3633 PCI_EXPRESS_ROOT_ERROR_COMMAND RootErrorCommand;
3634 PCI_EXPRESS_ROOT_ERROR_STATUS RootErrorStatus;
3635 PCI_EXPRESS_ERROR_SOURCE_ID ErrorSourceId;
3636 } PCI_EXPRESS_ROOTPORT_AER_CAPABILITY, *PPCI_EXPRESS_ROOTPORT_AER_CAPABILITY;
3637
3638 typedef struct _PCI_EXPRESS_BRIDGE_AER_CAPABILITY {
3639 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
3640 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus;
3641 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask;
3642 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity;
3643 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus;
3644 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask;
3645 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl;
3646 ULONG HeaderLog[4];
3647 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus;
3648 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask;
3649 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity;
3650 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl;
3651 ULONG SecHeaderLog[4];
3652 } PCI_EXPRESS_BRIDGE_AER_CAPABILITY, *PPCI_EXPRESS_BRIDGE_AER_CAPABILITY;
3653
3654 typedef union _PCI_EXPRESS_SRIOV_CAPS {
3655 _ANONYMOUS_STRUCT struct {
3656 ULONG VFMigrationCapable:1;
3657 ULONG Reserved1:20;
3658 ULONG VFMigrationInterruptNumber:11;
3659 } DUMMYSTRUCTNAME;
3660 ULONG AsULONG;
3661 } PCI_EXPRESS_SRIOV_CAPS, *PPCI_EXPRESS_SRIOV_CAPS;
3662
3663 typedef union _PCI_EXPRESS_SRIOV_CONTROL {
3664 _ANONYMOUS_STRUCT struct {
3665 USHORT VFEnable:1;
3666 USHORT VFMigrationEnable:1;
3667 USHORT VFMigrationInterruptEnable:1;
3668 USHORT VFMemorySpaceEnable:1;
3669 USHORT ARICapableHierarchy:1;
3670 USHORT Reserved1:11;
3671 } DUMMYSTRUCTNAME;
3672 USHORT AsUSHORT;
3673 } PCI_EXPRESS_SRIOV_CONTROL, *PPCI_EXPRESS_SRIOV_CONTROL;
3674
3675 typedef union _PCI_EXPRESS_SRIOV_STATUS {
3676 _ANONYMOUS_STRUCT struct {
3677 USHORT VFMigrationStatus:1;
3678 USHORT Reserved1:15;
3679 } DUMMYSTRUCTNAME;
3680 USHORT AsUSHORT;
3681 } PCI_EXPRESS_SRIOV_STATUS, *PPCI_EXPRESS_SRIOV_STATUS;
3682
3683 typedef union _PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY {
3684 _ANONYMOUS_STRUCT struct {
3685 ULONG VFMigrationStateBIR:3;
3686 ULONG VFMigrationStateOffset:29;
3687 } DUMMYSTRUCTNAME;
3688 ULONG AsULONG;
3689 } PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY, *PPCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY;
3690
3691 typedef struct _PCI_EXPRESS_SRIOV_CAPABILITY {
3692 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
3693 PCI_EXPRESS_SRIOV_CAPS SRIOVCapabilities;
3694 PCI_EXPRESS_SRIOV_CONTROL SRIOVControl;
3695 PCI_EXPRESS_SRIOV_STATUS SRIOVStatus;
3696 USHORT InitialVFs;
3697 USHORT TotalVFs;
3698 USHORT NumVFs;
3699 UCHAR FunctionDependencyLink;
3700 UCHAR RsvdP1;
3701 USHORT FirstVFOffset;
3702 USHORT VFStride;
3703 USHORT RsvdP2;
3704 USHORT VFDeviceId;
3705 ULONG SupportedPageSizes;
3706 ULONG SystemPageSize;
3707 ULONG BaseAddresses[PCI_TYPE0_ADDRESSES];
3708 PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY VFMigrationStateArrayOffset;
3709 } PCI_EXPRESS_SRIOV_CAPABILITY, *PPCI_EXPRESS_SRIOV_CAPABILITY;
3710
3711 /* PCI device classes */
3712 #define PCI_CLASS_PRE_20 0x00
3713 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
3714 #define PCI_CLASS_NETWORK_CTLR 0x02
3715 #define PCI_CLASS_DISPLAY_CTLR 0x03
3716 #define PCI_CLASS_MULTIMEDIA_DEV 0x04
3717 #define PCI_CLASS_MEMORY_CTLR 0x05
3718 #define PCI_CLASS_BRIDGE_DEV 0x06
3719 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
3720 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
3721 #define PCI_CLASS_INPUT_DEV 0x09
3722 #define PCI_CLASS_DOCKING_STATION 0x0a
3723 #define PCI_CLASS_PROCESSOR 0x0b
3724 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
3725 #define PCI_CLASS_WIRELESS_CTLR 0x0d
3726 #define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0e
3727 #define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0f
3728 #define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10
3729 #define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11
3730 #define PCI_CLASS_NOT_DEFINED 0xff
3731
3732 /* PCI device subclasses for class 0 */
3733 #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
3734 #define PCI_SUBCLASS_PRE_20_VGA 0x01
3735
3736 /* PCI device subclasses for class 1 (mass storage controllers)*/
3737 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
3738 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
3739 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
3740 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
3741 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
3742 #define PCI_SUBCLASS_MSC_OTHER 0x80
3743
3744 /* PCI device subclasses for class 2 (network controllers)*/
3745 #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
3746 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
3747 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
3748 #define PCI_SUBCLASS_NET_ATM_CTLR 0x03
3749 #define PCI_SUBCLASS_NET_ISDN_CTLR 0x04
3750 #define PCI_SUBCLASS_NET_OTHER 0x80
3751
3752 /* PCI device subclasses for class 3 (display controllers)*/
3753 #define PCI_SUBCLASS_VID_VGA_CTLR 0x00
3754 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01
3755 #define PCI_SUBCLASS_VID_3D_CTLR 0x02
3756 #define PCI_SUBCLASS_VID_OTHER 0x80
3757
3758 /* PCI device subclasses for class 4 (multimedia device)*/
3759 #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
3760 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
3761 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
3762 #define PCI_SUBCLASS_MM_OTHER 0x80
3763
3764 /* PCI device subclasses for class 5 (memory controller)*/
3765 #define PCI_SUBCLASS_MEM_RAM 0x00
3766 #define PCI_SUBCLASS_MEM_FLASH 0x01
3767 #define PCI_SUBCLASS_MEM_OTHER 0x80
3768
3769 /* PCI device subclasses for class 6 (bridge device)*/
3770 #define PCI_SUBCLASS_BR_HOST 0x00
3771 #define PCI_SUBCLASS_BR_ISA 0x01
3772 #define PCI_SUBCLASS_BR_EISA 0x02
3773 #define PCI_SUBCLASS_BR_MCA 0x03
3774 #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
3775 #define PCI_SUBCLASS_BR_PCMCIA 0x05
3776 #define PCI_SUBCLASS_BR_NUBUS 0x06
3777 #define PCI_SUBCLASS_BR_CARDBUS 0x07
3778 #define PCI_SUBCLASS_BR_RACEWAY 0x08
3779 #define PCI_SUBCLASS_BR_OTHER 0x80
3780
3781 #define PCI_SUBCLASS_COM_SERIAL 0x00
3782 #define PCI_SUBCLASS_COM_PARALLEL 0x01
3783 #define PCI_SUBCLASS_COM_MULTIPORT 0x02
3784 #define PCI_SUBCLASS_COM_MODEM 0x03
3785 #define PCI_SUBCLASS_COM_OTHER 0x80
3786
3787 #define PCI_SUBCLASS_SYS_INTERRUPT_CTLR 0x00
3788 #define PCI_SUBCLASS_SYS_DMA_CTLR 0x01
3789 #define PCI_SUBCLASS_SYS_SYSTEM_TIMER 0x02
3790 #define PCI_SUBCLASS_SYS_REAL_TIME_CLOCK 0x03
3791 #define PCI_SUBCLASS_SYS_GEN_HOTPLUG_CTLR 0x04
3792 #define PCI_SUBCLASS_SYS_SDIO_CTRL 0x05
3793 #define PCI_SUBCLASS_SYS_OTHER 0x80
3794
3795 #define PCI_SUBCLASS_INP_KEYBOARD 0x00
3796 #define PCI_SUBCLASS_INP_DIGITIZER 0x01
3797 #define PCI_SUBCLASS_INP_MOUSE 0x02
3798 #define PCI_SUBCLASS_INP_SCANNER 0x03
3799 #define PCI_SUBCLASS_INP_GAMEPORT 0x04
3800 #define PCI_SUBCLASS_INP_OTHER 0x80
3801
3802 #define PCI_SUBCLASS_DOC_GENERIC 0x00
3803 #define PCI_SUBCLASS_DOC_OTHER 0x80
3804
3805 #define PCI_SUBCLASS_PROC_386 0x00
3806 #define PCI_SUBCLASS_PROC_486 0x01
3807 #define PCI_SUBCLASS_PROC_PENTIUM 0x02
3808 #define PCI_SUBCLASS_PROC_ALPHA 0x10
3809 #define PCI_SUBCLASS_PROC_POWERPC 0x20
3810 #define PCI_SUBCLASS_PROC_COPROCESSOR 0x40
3811
3812 /* PCI device subclasses for class C (serial bus controller)*/
3813 #define PCI_SUBCLASS_SB_IEEE1394 0x00
3814 #define PCI_SUBCLASS_SB_ACCESS 0x01
3815 #define PCI_SUBCLASS_SB_SSA 0x02
3816 #define PCI_SUBCLASS_SB_USB 0x03
3817 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
3818 #define PCI_SUBCLASS_SB_SMBUS 0x05
3819
3820 #define PCI_SUBCLASS_WIRELESS_IRDA 0x00
3821 #define PCI_SUBCLASS_WIRELESS_CON_IR 0x01
3822 #define PCI_SUBCLASS_WIRELESS_RF 0x10
3823 #define PCI_SUBCLASS_WIRELESS_OTHER 0x80
3824
3825 #define PCI_SUBCLASS_INTIO_I2O 0x00
3826
3827 #define PCI_SUBCLASS_SAT_TV 0x01
3828 #define PCI_SUBCLASS_SAT_AUDIO 0x02
3829 #define PCI_SUBCLASS_SAT_VOICE 0x03
3830 #define PCI_SUBCLASS_SAT_DATA 0x04
3831
3832 #define PCI_SUBCLASS_CRYPTO_NET_COMP 0x00
3833 #define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT 0x10
3834 #define PCI_SUBCLASS_CRYPTO_OTHER 0x80
3835
3836 #define PCI_SUBCLASS_DASP_DPIO 0x00
3837 #define PCI_SUBCLASS_DASP_OTHER 0x80
3838
3839 #define PCI_ADDRESS_IO_SPACE 0x00000001
3840 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
3841 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
3842 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
3843 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
3844 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
3845
3846 #define PCI_TYPE_32BIT 0
3847 #define PCI_TYPE_20BIT 2
3848 #define PCI_TYPE_64BIT 4
3849
3850 #define PCI_ROMADDRESS_ENABLED 0x00000001
3851
3852 #endif /* _PCI_X_ */
3853
3854 #define PCI_EXPRESS_LINK_QUIESCENT_INTERFACE_VERSION 1
3855
3856 _IRQL_requires_max_(PASSIVE_LEVEL)
3857 _Must_inspect_result_
3858 typedef NTSTATUS
3859 (NTAPI PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE)(
3860 _Inout_ PVOID Context);
3861 typedef PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE *PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE;
3862
3863 _IRQL_requires_max_(PASSIVE_LEVEL)
3864 _Must_inspect_result_
3865 typedef NTSTATUS
3866 (NTAPI PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE)(
3867 _Inout_ PVOID Context);
3868 typedef PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE *PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE;
3869
3870 typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE {
3871 USHORT Size;
3872 USHORT Version;
3873 PVOID Context;
3874 PINTERFACE_REFERENCE InterfaceReference;
3875 PINTERFACE_DEREFERENCE InterfaceDereference;
3876 PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE PciExpressEnterLinkQuiescentMode;
3877 PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE PciExpressExitLinkQuiescentMode;
3878 } PCI_EXPRESS_LINK_QUIESCENT_INTERFACE, *PPCI_EXPRESS_LINK_QUIESCENT_INTERFACE;
3879
3880 #define PCI_EXPRESS_ROOT_PORT_INTERFACE_VERSION 1
3881
3882 typedef ULONG
3883 (NTAPI *PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE)(
3884 _In_ PVOID Context,
3885 _Out_writes_bytes_(Length) PVOID Buffer,
3886 _In_ ULONG Offset,
3887 _In_ ULONG Length);
3888
3889 typedef ULONG
3890 (NTAPI *PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE)(
3891 _In_ PVOID Context,
3892 _In_reads_bytes_(Length) PVOID Buffer,
3893 _In_ ULONG Offset,
3894 _In_ ULONG Length);
3895
3896 typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE {
3897 USHORT Size;
3898 USHORT Version;
3899 PVOID Context;
3900 PINTERFACE_REFERENCE InterfaceReference;
3901 PINTERFACE_DEREFERENCE InterfaceDereference;
3902 PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE ReadConfigSpace;
3903 PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE WriteConfigSpace;
3904 } PCI_EXPRESS_ROOT_PORT_INTERFACE, *PPCI_EXPRESS_ROOT_PORT_INTERFACE;
3905
3906 #define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION 1
3907
3908 _Must_inspect_result_
3909 typedef NTSTATUS
3910 (NTAPI PCI_MSIX_SET_ENTRY)(
3911 _In_ PVOID Context,
3912 _In_ ULONG TableEntry,
3913 _In_ ULONG MessageNumber);
3914 typedef PCI_MSIX_SET_ENTRY *PPCI_MSIX_SET_ENTRY;
3915
3916 _Must_inspect_result_
3917 typedef NTSTATUS
3918 (NTAPI PCI_MSIX_MASKUNMASK_ENTRY)(
3919 _In_ PVOID Context,
3920 _In_ ULONG TableEntry);
3921 typedef PCI_MSIX_MASKUNMASK_ENTRY *PPCI_MSIX_MASKUNMASK_ENTRY;
3922
3923 _Must_inspect_result_
3924 typedef NTSTATUS
3925 (NTAPI PCI_MSIX_GET_ENTRY)(
3926 _In_ PVOID Context,
3927 _In_ ULONG TableEntry,
3928 _Out_ PULONG MessageNumber,
3929 _Out_ PBOOLEAN Masked);
3930 typedef PCI_MSIX_GET_ENTRY *PPCI_MSIX_GET_ENTRY;
3931
3932 _Must_inspect_result_
3933 typedef NTSTATUS
3934 (NTAPI PCI_MSIX_GET_TABLE_SIZE)(
3935 _In_ PVOID Context,
3936 _Out_ PULONG TableSize);
3937 typedef PCI_MSIX_GET_TABLE_SIZE *PPCI_MSIX_GET_TABLE_SIZE;
3938
3939 typedef struct _PCI_MSIX_TABLE_CONFIG_INTERFACE {
3940 USHORT Size;
3941 USHORT Version;
3942 PVOID Context;
3943 PINTERFACE_REFERENCE InterfaceReference;
3944 PINTERFACE_DEREFERENCE InterfaceDereference;
3945 PPCI_MSIX_SET_ENTRY SetTableEntry;
3946 PPCI_MSIX_MASKUNMASK_ENTRY MaskTableEntry;
3947 PPCI_MSIX_MASKUNMASK_ENTRY UnmaskTableEntry;
3948 PPCI_MSIX_GET_ENTRY GetTableEntry;
3949 PPCI_MSIX_GET_TABLE_SIZE GetTableSize;
3950 } PCI_MSIX_TABLE_CONFIG_INTERFACE, *PPCI_MSIX_TABLE_CONFIG_INTERFACE;
3951
3952 #define PCI_MSIX_TABLE_CONFIG_MINIMUM_SIZE \
3953 RTL_SIZEOF_THROUGH_FIELD(PCI_MSIX_TABLE_CONFIG_INTERFACE, UnmaskTableEntry)
3954
3955 $endif (_WDMDDK_)
3956 $if (_NTDDK_)
3957 #ifndef _ARC_DDK_
3958 #define _ARC_DDK_
3959 typedef enum _CONFIGURATION_TYPE {
3960 ArcSystem,
3961 CentralProcessor,
3962 FloatingPointProcessor,
3963 PrimaryIcache,
3964 PrimaryDcache,
3965 SecondaryIcache,
3966 SecondaryDcache,
3967 SecondaryCache,
3968 EisaAdapter,
3969 TcAdapter,
3970 ScsiAdapter,
3971 DtiAdapter,
3972 MultiFunctionAdapter,
3973 DiskController,
3974 TapeController,
3975 CdromController,
3976 WormController,
3977 SerialController,
3978 NetworkController,
3979 DisplayController,
3980 ParallelController,
3981 PointerController,
3982 KeyboardController,
3983 AudioController,
3984 OtherController,
3985 DiskPeripheral,
3986 FloppyDiskPeripheral,
3987 TapePeripheral,
3988 ModemPeripheral,
3989 MonitorPeripheral,
3990 PrinterPeripheral,
3991 PointerPeripheral,
3992 KeyboardPeripheral,
3993 TerminalPeripheral,
3994 OtherPeripheral,
3995 LinePeripheral,
3996 NetworkPeripheral,
3997 SystemMemory,
3998 DockingInformation,
3999 RealModeIrqRoutingTable,
4000 RealModePCIEnumeration,
4001 MaximumType
4002 } CONFIGURATION_TYPE, *PCONFIGURATION_TYPE;
4003 #endif /* !_ARC_DDK_ */
4004
4005 /*
4006 ** IRP function codes
4007 */
4008
4009 #define IRP_MN_QUERY_DIRECTORY 0x01
4010 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
4011
4012 #define IRP_MN_USER_FS_REQUEST 0x00
4013 #define IRP_MN_MOUNT_VOLUME 0x01
4014 #define IRP_MN_VERIFY_VOLUME 0x02
4015 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
4016 #define IRP_MN_TRACK_LINK 0x04
4017 #define IRP_MN_KERNEL_CALL 0x04
4018
4019 #define IRP_MN_LOCK 0x01
4020 #define IRP_MN_UNLOCK_SINGLE 0x02
4021 #define IRP_MN_UNLOCK_ALL 0x03
4022 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
4023
4024 #define IRP_MN_FLUSH_AND_PURGE 0x01
4025
4026 #define IRP_MN_NORMAL 0x00
4027 #define IRP_MN_DPC 0x01
4028 #define IRP_MN_MDL 0x02
4029 #define IRP_MN_COMPLETE 0x04
4030 #define IRP_MN_COMPRESSED 0x08
4031
4032 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
4033 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
4034 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
4035
4036 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
4037
4038 #define IO_CHECK_CREATE_PARAMETERS 0x0200
4039 #define IO_ATTACH_DEVICE 0x0400
4040 #define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800
4041
4042 typedef NTSTATUS
4043 (NTAPI *PIO_QUERY_DEVICE_ROUTINE)(
4044 _In_ PVOID Context,
4045 _In_ PUNICODE_STRING PathName,
4046 _In_ INTERFACE_TYPE BusType,
4047 _In_ ULONG BusNumber,
4048 _In_ PKEY_VALUE_FULL_INFORMATION *BusInformation,
4049 _In_ CONFIGURATION_TYPE ControllerType,
4050 _In_ ULONG ControllerNumber,
4051 _In_ PKEY_VALUE_FULL_INFORMATION *ControllerInformation,
4052 _In_ CONFIGURATION_TYPE PeripheralType,
4053 _In_ ULONG PeripheralNumber,
4054 _In_ PKEY_VALUE_FULL_INFORMATION *PeripheralInformation);
4055
4056 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT {
4057 IoQueryDeviceIdentifier = 0,
4058 IoQueryDeviceConfigurationData,
4059 IoQueryDeviceComponentInformation,
4060 IoQueryDeviceMaxData
4061 } IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT;
4062
4063 typedef VOID
4064 (NTAPI *PDRIVER_REINITIALIZE)(
4065 _In_ struct _DRIVER_OBJECT *DriverObject,
4066 _In_opt_ PVOID Context,
4067 _In_ ULONG Count);
4068
4069 typedef struct _CONTROLLER_OBJECT {
4070 CSHORT Type;
4071 CSHORT Size;
4072 PVOID ControllerExtension;
4073 KDEVICE_QUEUE DeviceWaitQueue;
4074 ULONG Spare1;
4075 LARGE_INTEGER Spare2;
4076 } CONTROLLER_OBJECT, *PCONTROLLER_OBJECT;
4077
4078 #define DRVO_REINIT_REGISTERED 0x00000008
4079 #define DRVO_INITIALIZED 0x00000010
4080 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
4081 #define DRVO_LEGACY_RESOURCES 0x00000040
4082
4083 typedef struct _CONFIGURATION_INFORMATION {
4084 ULONG DiskCount;
4085 ULONG FloppyCount;
4086 ULONG CdRomCount;
4087 ULONG TapeCount;
4088 ULONG ScsiPortCount;
4089 ULONG SerialCount;
4090 ULONG ParallelCount;
4091 BOOLEAN AtDiskPrimaryAddressClaimed;
4092 BOOLEAN AtDiskSecondaryAddressClaimed;
4093 ULONG Version;
4094 ULONG MediumChangerCount;
4095 } CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION;
4096
4097 typedef struct _DISK_SIGNATURE {
4098 ULONG PartitionStyle;
4099 _ANONYMOUS_UNION union {
4100 struct {
4101 ULONG Signature;
4102 ULONG CheckSum;
4103 } Mbr;
4104 struct {
4105 GUID DiskId;
4106 } Gpt;
4107 } DUMMYUNIONNAME;
4108 } DISK_SIGNATURE, *PDISK_SIGNATURE;
4109
4110 typedef struct _TXN_PARAMETER_BLOCK {
4111 USHORT Length;
4112 USHORT TxFsContext;
4113 PVOID TransactionObject;
4114 } TXN_PARAMETER_BLOCK, *PTXN_PARAMETER_BLOCK;
4115
4116 #define TXF_MINIVERSION_DEFAULT_VIEW (0xFFFE)
4117
4118 typedef struct _IO_DRIVER_CREATE_CONTEXT {
4119 CSHORT Size;
4120 struct _ECP_LIST *ExtraCreateParameter;
4121 PVOID DeviceObjectHint;
4122 PTXN_PARAMETER_BLOCK TxnParameters;
4123 } IO_DRIVER_CREATE_CONTEXT, *PIO_DRIVER_CREATE_CONTEXT;
4124
4125 typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD {
4126 USHORT Size;
4127 USHORT Version;
4128 PVOID Context;
4129 PINTERFACE_REFERENCE InterfaceReference;
4130 PINTERFACE_DEREFERENCE InterfaceDereference;
4131 PGET_SET_DEVICE_DATA SetBusData;
4132 PGET_SET_DEVICE_DATA GetBusData;
4133 UCHAR CapabilityID;
4134 } AGP_TARGET_BUS_INTERFACE_STANDARD, *PAGP_TARGET_BUS_INTERFACE_STANDARD;
4135
4136 _IRQL_requires_max_(PASSIVE_LEVEL)
4137 _Must_inspect_result_
4138 typedef NTSTATUS
4139 (NTAPI *PGET_LOCATION_STRING)(
4140 _Inout_opt_ PVOID Context,
4141 _Outptr_
4142 _At_(*LocationStrings,
4143 _When_(return == 0, __drv_allocatesMem(Mem)))
4144 PZZWSTR *LocationStrings);
4145
4146 typedef struct _PNP_LOCATION_INTERFACE {
4147 USHORT Size;
4148 USHORT Version;
4149 PVOID Context;
4150 PINTERFACE_REFERENCE InterfaceReference;
4151 PINTERFACE_DEREFERENCE InterfaceDereference;
4152 PGET_LOCATION_STRING GetLocationString;
4153 } PNP_LOCATION_INTERFACE, *PPNP_LOCATION_INTERFACE;
4154
4155 typedef enum _ARBITER_ACTION {
4156 ArbiterActionTestAllocation,
4157 ArbiterActionRetestAllocation,
4158 ArbiterActionCommitAllocation,
4159 ArbiterActionRollbackAllocation,
4160 ArbiterActionQueryAllocatedResources,
4161 ArbiterActionWriteReservedResources,
4162 ArbiterActionQueryConflict,
4163 ArbiterActionQueryArbitrate,
4164 ArbiterActionAddReserved,
4165 ArbiterActionBootAllocation
4166 } ARBITER_ACTION, *PARBITER_ACTION;
4167
4168 typedef struct _ARBITER_CONFLICT_INFO {
4169 PDEVICE_OBJECT OwningObject;
4170 ULONGLONG Start;
4171 ULONGLONG End;
4172 } ARBITER_CONFLICT_INFO, *PARBITER_CONFLICT_INFO;
4173
4174 typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS {
4175 _Inout_ PLIST_ENTRY ArbitrationList;
4176 _In_ ULONG AllocateFromCount;
4177 _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom;
4178 } ARBITER_TEST_ALLOCATION_PARAMETERS, *PARBITER_TEST_ALLOCATION_PARAMETERS;
4179
4180 typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS {
4181 _Inout_ PLIST_ENTRY ArbitrationList;
4182 _In_ ULONG AllocateFromCount;
4183 _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom;
4184 } ARBITER_RETEST_ALLOCATION_PARAMETERS, *PARBITER_RETEST_ALLOCATION_PARAMETERS;
4185
4186 typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS {
4187 _Inout_ PLIST_ENTRY ArbitrationList;
4188 } ARBITER_BOOT_ALLOCATION_PARAMETERS, *PARBITER_BOOT_ALLOCATION_PARAMETERS;
4189
4190 typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS {
4191 _Out_ PCM_PARTIAL_RESOURCE_LIST *AllocatedResources;
4192 } ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS;
4193
4194 typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS {
4195 _In_ PDEVICE_OBJECT PhysicalDeviceObject;
4196 _In_ PIO_RESOURCE_DESCRIPTOR ConflictingResource;
4197 _Out_ PULONG ConflictCount;
4198 _Out_ PARBITER_CONFLICT_INFO *Conflicts;
4199 } ARBITER_QUERY_CONFLICT_PARAMETERS, *PARBITER_QUERY_CONFLICT_PARAMETERS;
4200
4201 typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS {
4202 _In_ PLIST_ENTRY ArbitrationList;
4203 } ARBITER_QUERY_ARBITRATE_PARAMETERS, *PARBITER_QUERY_ARBITRATE_PARAMETERS;
4204
4205 typedef struct _ARBITER_ADD_RESERVED_PARAMETERS {
4206 _In_ PDEVICE_OBJECT ReserveDevice;
4207 } ARBITER_ADD_RESERVED_PARAMETERS, *PARBITER_ADD_RESERVED_PARAMETERS;
4208
4209 typedef struct _ARBITER_PARAMETERS {
4210 union {
4211 ARBITER_TEST_ALLOCATION_PARAMETERS TestAllocation;
4212 ARBITER_RETEST_ALLOCATION_PARAMETERS RetestAllocation;
4213 ARBITER_BOOT_ALLOCATION_PARAMETERS BootAllocation;
4214 ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS QueryAllocatedResources;
4215 ARBITER_QUERY_CONFLICT_PARAMETERS QueryConflict;
4216 ARBITER_QUERY_ARBITRATE_PARAMETERS QueryArbitrate;
4217 ARBITER_ADD_RESERVED_PARAMETERS AddReserved;
4218 } Parameters;
4219 } ARBITER_PARAMETERS, *PARBITER_PARAMETERS;
4220
4221 typedef enum _ARBITER_REQUEST_SOURCE {
4222 ArbiterRequestUndefined = -1,
4223 ArbiterRequestLegacyReported,
4224 ArbiterRequestHalReported,
4225 ArbiterRequestLegacyAssigned,
4226 ArbiterRequestPnpDetected,
4227 ArbiterRequestPnpEnumerated
4228 } ARBITER_REQUEST_SOURCE;
4229
4230 typedef enum _ARBITER_RESULT {
4231 ArbiterResultUndefined = -1,
4232 ArbiterResultSuccess,
4233 ArbiterResultExternalConflict,
4234 ArbiterResultNullRequest
4235 } ARBITER_RESULT;
4236
4237 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
4238
4239 typedef struct _ARBITER_LIST_ENTRY {
4240 LIST_ENTRY ListEntry;
4241 ULONG AlternativeCount;
4242 PIO_RESOURCE_DESCRIPTOR Alternatives;
4243 PDEVICE_OBJECT PhysicalDeviceObject;
4244 ARBITER_REQUEST_SOURCE RequestSource;
4245 ULONG Flags;
4246 LONG_PTR WorkSpace;
4247 INTERFACE_TYPE InterfaceType;
4248 ULONG SlotNumber;
4249 ULONG BusNumber;
4250 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment;
4251 PIO_RESOURCE_DESCRIPTOR SelectedAlternative;
4252 ARBITER_RESULT Result;
4253 } ARBITER_LIST_ENTRY, *PARBITER_LIST_ENTRY;
4254
4255 typedef NTSTATUS
4256 (NTAPI *PARBITER_HANDLER)(
4257 _Inout_opt_ PVOID Context,
4258 _In_ ARBITER_ACTION Action,
4259 _Inout_ PARBITER_PARAMETERS Parameters);
4260
4261 #define ARBITER_PARTIAL 0x00000001
4262
4263 typedef struct _ARBITER_INTERFACE {
4264 USHORT Size;
4265 USHORT Version;
4266 PVOID Context;
4267 PINTERFACE_REFERENCE InterfaceReference;
4268 PINTERFACE_DEREFERENCE InterfaceDereference;
4269 PARBITER_HANDLER ArbiterHandler;
4270 ULONG Flags;
4271 } ARBITER_INTERFACE, *PARBITER_INTERFACE;
4272
4273 typedef enum _RESOURCE_TRANSLATION_DIRECTION {
4274 TranslateChildToParent,
4275 TranslateParentToChild
4276 } RESOURCE_TRANSLATION_DIRECTION;
4277
4278 typedef NTSTATUS
4279 (NTAPI *PTRANSLATE_RESOURCE_HANDLER)(
4280 _Inout_opt_ PVOID Context,
4281 _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Source,
4282 _In_ RESOURCE_TRANSLATION_DIRECTION Direction,
4283 _In_opt_ ULONG AlternativesCount,
4284 _In_reads_opt_(AlternativesCount) IO_RESOURCE_DESCRIPTOR Alternatives[],
4285 _In_ PDEVICE_OBJECT PhysicalDeviceObject,
4286 _Out_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Target);
4287
4288 typedef NTSTATUS
4289 (NTAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)(
4290 _Inout_opt_ PVOID Context,
4291 _In_ PIO_RESOURCE_DESCRIPTOR Source,
4292 _In_ PDEVICE_OBJECT PhysicalDeviceObject,
4293 _Out_ PULONG TargetCount,
4294 _Out_writes_(*TargetCount) PIO_RESOURCE_DESCRIPTOR *Target);
4295
4296 typedef struct _TRANSLATOR_INTERFACE {
4297 USHORT Size;
4298 USHORT Version;
4299 PVOID Context;
4300 PINTERFACE_REFERENCE InterfaceReference;
4301 PINTERFACE_DEREFERENCE InterfaceDereference;
4302 PTRANSLATE_RESOURCE_HANDLER TranslateResources;
4303 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements;
4304 } TRANSLATOR_INTERFACE, *PTRANSLATOR_INTERFACE;
4305
4306 typedef struct _PCI_AGP_CAPABILITY {
4307 PCI_CAPABILITIES_HEADER Header;
4308 USHORT Minor:4;
4309 USHORT Major:4;
4310 USHORT Rsvd1:8;
4311 struct _PCI_AGP_STATUS {
4312 ULONG Rate:3;
4313 ULONG Agp3Mode:1;
4314 ULONG FastWrite:1;
4315 ULONG FourGB:1;
4316 ULONG HostTransDisable:1;
4317 ULONG Gart64:1;
4318 ULONG ITA_Coherent:1;
4319 ULONG SideBandAddressing:1;
4320 ULONG CalibrationCycle:3;
4321 ULONG AsyncRequestSize:3;
4322 ULONG Rsvd1:1;
4323 ULONG Isoch:1;
4324 ULONG Rsvd2:6;
4325 ULONG RequestQueueDepthMaximum:8;
4326 } AGPStatus;
4327 struct _PCI_AGP_COMMAND {
4328 ULONG Rate:3;
4329 ULONG Rsvd1:1;
4330 ULONG FastWriteEnable:1;
4331 ULONG FourGBEnable:1;
4332 ULONG Rsvd2:1;
4333 ULONG Gart64:1;
4334 ULONG AGPEnable:1;
4335 ULONG SBAEnable:1;
4336 ULONG CalibrationCycle:3;
4337 ULONG AsyncReqSize:3;
4338 ULONG Rsvd3:8;
4339 ULONG RequestQueueDepth:8;
4340 } AGPCommand;
4341 } PCI_AGP_CAPABILITY, *PPCI_AGP_CAPABILITY;
4342
4343 typedef enum _EXTENDED_AGP_REGISTER {
4344 IsochStatus,
4345 AgpControl,
4346 ApertureSize,
4347 AperturePageSize,
4348 GartLow,
4349 GartHigh,
4350 IsochCommand
4351 } EXTENDED_AGP_REGISTER, *PEXTENDED_AGP_REGISTER;
4352
4353 typedef struct _PCI_AGP_ISOCH_STATUS {
4354 ULONG ErrorCode:2;
4355 ULONG Rsvd1:1;
4356 ULONG Isoch_L:3;
4357 ULONG Isoch_Y:2;
4358 ULONG Isoch_N:8;
4359 ULONG Rsvd2:16;
4360 } PCI_AGP_ISOCH_STATUS, *PPCI_AGP_ISOCH_STATUS;
4361
4362 typedef struct _PCI_AGP_CONTROL {
4363 ULONG Rsvd1:7;
4364 ULONG GTLB_Enable:1;
4365 ULONG AP_Enable:1;
4366 ULONG CAL_Disable:1;
4367 ULONG Rsvd2:22;
4368 } PCI_AGP_CONTROL, *PPCI_AGP_CONTROL;
4369
4370 typedef struct _PCI_AGP_APERTURE_PAGE_SIZE {
4371 USHORT PageSizeMask:11;
4372 USHORT Rsvd1:1;
4373 USHORT PageSizeSelect:4;
4374 } PCI_AGP_APERTURE_PAGE_SIZE, *PPCI_AGP_APERTURE_PAGE_SIZE;
4375
4376 typedef struct _PCI_AGP_ISOCH_COMMAND {
4377 USHORT Rsvd1:6;
4378 USHORT Isoch_Y:2;
4379 USHORT Isoch_N:8;
4380 } PCI_AGP_ISOCH_COMMAND, *PPCI_AGP_ISOCH_COMMAND;
4381
4382 typedef struct PCI_AGP_EXTENDED_CAPABILITY {
4383 PCI_AGP_ISOCH_STATUS IsochStatus;
4384 PCI_AGP_CONTROL AgpControl;
4385 USHORT ApertureSize;
4386 PCI_AGP_APERTURE_PAGE_SIZE AperturePageSize;
4387 ULONG GartLow;
4388 ULONG GartHigh;
4389 PCI_AGP_ISOCH_COMMAND IsochCommand;
4390 } PCI_AGP_EXTENDED_CAPABILITY, *PPCI_AGP_EXTENDED_CAPABILITY;
4391
4392 #define PCI_AGP_RATE_1X 0x1
4393 #define PCI_AGP_RATE_2X 0x2
4394 #define PCI_AGP_RATE_4X 0x4
4395
4396 #define PCIX_MODE_CONVENTIONAL_PCI 0x0
4397 #define PCIX_MODE1_66MHZ 0x1
4398 #define PCIX_MODE1_100MHZ 0x2
4399 #define PCIX_MODE1_133MHZ 0x3
4400 #define PCIX_MODE2_266_66MHZ 0x9
4401 #define PCIX_MODE2_266_100MHZ 0xA
4402 #define PCIX_MODE2_266_133MHZ 0xB
4403 #define PCIX_MODE2_533_66MHZ 0xD
4404 #define PCIX_MODE2_533_100MHZ 0xE
4405 #define PCIX_MODE2_533_133MHZ 0xF
4406
4407 #define PCIX_VERSION_MODE1_ONLY 0x0
4408 #define PCIX_VERSION_MODE2_ECC 0x1
4409 #define PCIX_VERSION_DUAL_MODE_ECC 0x2
4410
4411 typedef struct _PCIX_BRIDGE_CAPABILITY {
4412 PCI_CAPABILITIES_HEADER Header;
4413 union {
4414 _ANONYMOUS_STRUCT struct {
4415 USHORT Bus64Bit:1;
4416 USHORT Bus133MHzCapable:1;
4417 USHORT SplitCompletionDiscarded:1;
4418 USHORT UnexpectedSplitCompletion:1;
4419 USHORT SplitCompletionOverrun:1;
4420 USHORT SplitRequestDelayed:1;
4421 USHORT BusModeFrequency:4;
4422 USHORT Rsvd:2;
4423 USHORT Version:2;
4424 USHORT Bus266MHzCapable:1;
4425 USHORT Bus533MHzCapable:1;
4426 } DUMMYSTRUCTNAME;
4427 USHORT AsUSHORT;
4428 } SecondaryStatus;
4429 union {
4430 _ANONYMOUS_STRUCT struct {
4431 ULONG FunctionNumber:3;
4432 ULONG DeviceNumber:5;
4433 ULONG BusNumber:8;
4434 ULONG Device64Bit:1;
4435 ULONG Device133MHzCapable:1;
4436 ULONG SplitCompletionDiscarded:1;
4437 ULONG UnexpectedSplitCompletion:1;
4438 ULONG SplitCompletionOverrun:1;
4439 ULONG SplitRequestDelayed:1;
4440 ULONG Rsvd:7;
4441 ULONG DIMCapable:1;
4442 ULONG Device266MHzCapable:1;
4443 ULONG Device533MHzCapable:1;
4444 } DUMMYSTRUCTNAME;
4445 ULONG AsULONG;
4446 } BridgeStatus;
4447 USHORT UpstreamSplitTransactionCapacity;
4448 USHORT UpstreamSplitTransactionLimit;
4449 USHORT DownstreamSplitTransactionCapacity;
4450 USHORT DownstreamSplitTransactionLimit;
4451 union {
4452 _ANONYMOUS_STRUCT struct {
4453 ULONG SelectSecondaryRegisters:1;
4454 ULONG ErrorPresentInOtherBank:1;
4455 ULONG AdditionalCorrectableError:1;
4456 ULONG AdditionalUncorrectableError:1;
4457 ULONG ErrorPhase:3;
4458 ULONG ErrorCorrected:1;
4459 ULONG Syndrome:8;
4460 ULONG ErrorFirstCommand:4;
4461 ULONG ErrorSecondCommand:4;
4462 ULONG ErrorUpperAttributes:4;
4463 ULONG ControlUpdateEnable:1;
4464 ULONG Rsvd:1;
4465 ULONG DisableSingleBitCorrection:1;
4466 ULONG EccMode:1;
4467 } DUMMYSTRUCTNAME;
4468 ULONG AsULONG;
4469 } EccControlStatus;
4470 ULONG EccFirstAddress;
4471 ULONG EccSecondAddress;
4472 ULONG EccAttribute;
4473 } PCIX_BRIDGE_CAPABILITY, *PPCIX_BRIDGE_CAPABILITY;
4474
4475 typedef struct _PCI_SUBSYSTEM_IDS_CAPABILITY {
4476 PCI_CAPABILITIES_HEADER Header;
4477 USHORT Reserved;
4478 USHORT SubVendorID;
4479 USHORT SubSystemID;
4480 } PCI_SUBSYSTEM_IDS_CAPABILITY, *PPCI_SUBSYSTEM_IDS_CAPABILITY;
4481
4482 #define OSC_FIRMWARE_FAILURE 0x02
4483 #define OSC_UNRECOGNIZED_UUID 0x04
4484 #define OSC_UNRECOGNIZED_REVISION 0x08
4485 #define OSC_CAPABILITIES_MASKED 0x10
4486
4487 #define PCI_ROOT_BUS_OSC_METHOD_CAPABILITY_REVISION 0x01
4488
4489 typedef struct _PCI_ROOT_BUS_OSC_SUPPORT_FIELD {
4490 union {
4491 _ANONYMOUS_STRUCT struct {
4492 ULONG ExtendedConfigOpRegions:1;
4493 ULONG ActiveStatePowerManagement:1;
4494 ULONG ClockPowerManagement:1;
4495 ULONG SegmentGroups:1;
4496 ULONG MessageSignaledInterrupts:1;
4497 ULONG WindowsHardwareErrorArchitecture:1;
4498 ULONG Reserved:26;
4499 } DUMMYSTRUCTNAME;
4500 ULONG AsULONG;
4501 } u;
4502 } PCI_ROOT_BUS_OSC_SUPPORT_FIELD, *PPCI_ROOT_BUS_OSC_SUPPORT_FIELD;
4503
4504 typedef struct _PCI_ROOT_BUS_OSC_CONTROL_FIELD {
4505 union {
4506 _ANONYMOUS_STRUCT struct {
4507 ULONG ExpressNativeHotPlug:1;
4508 ULONG ShpcNativeHotPlug:1;
4509 ULONG ExpressNativePME:1;
4510 ULONG ExpressAdvancedErrorReporting:1;
4511 ULONG ExpressCapabilityStructure:1;
4512 ULONG Reserved:27;
4513 } DUMMYSTRUCTNAME;
4514 ULONG AsULONG;
4515 } u;
4516 } PCI_ROOT_BUS_OSC_CONTROL_FIELD, *PPCI_ROOT_BUS_OSC_CONTROL_FIELD;
4517
4518 typedef enum _PCI_HARDWARE_INTERFACE {
4519 PciConventional,
4520 PciXMode1,
4521 PciXMode2,
4522 PciExpress
4523 } PCI_HARDWARE_INTERFACE, *PPCI_HARDWARE_INTERFACE;
4524
4525 typedef enum {
4526 BusWidth32Bits,
4527 BusWidth64Bits
4528 } PCI_BUS_WIDTH;
4529
4530 typedef struct _PCI_ROOT_BUS_HARDWARE_CAPABILITY {
4531 PCI_HARDWARE_INTERFACE SecondaryInterface;
4532 _ANONYMOUS_STRUCT struct {
4533 BOOLEAN BusCapabilitiesFound;
4534 ULONG CurrentSpeedAndMode;
4535 ULONG SupportedSpeedsAndModes;
4536 BOOLEAN DeviceIDMessagingCapable;
4537 PCI_BUS_WIDTH SecondaryBusWidth;
4538 } DUMMYSTRUCTNAME;
4539 PCI_ROOT_BUS_OSC_SUPPORT_FIELD OscFeatureSupport;
4540 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlRequest;
4541 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlGranted;
4542 } PCI_ROOT_BUS_HARDWARE_CAPABILITY, *PPCI_ROOT_BUS_HARDWARE_CAPABILITY;
4543
4544 typedef union _PCI_EXPRESS_CAPABILITIES_REGISTER {
4545 _ANONYMOUS_STRUCT struct {
4546 USHORT CapabilityVersion:4;
4547 USHORT DeviceType:4;
4548 USHORT SlotImplemented:1;
4549 USHORT InterruptMessageNumber:5;
4550 USHORT Rsvd:2;
4551 } DUMMYSTRUCTNAME;
4552 USHORT AsUSHORT;
4553 } PCI_EXPRESS_CAPABILITIES_REGISTER, *PPCI_EXPRESS_CAPABILITIES_REGISTER;
4554
4555 typedef union _PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER {
4556 _ANONYMOUS_STRUCT struct {
4557 ULONG MaxPayloadSizeSupported:3;
4558 ULONG PhantomFunctionsSupported:2;
4559 ULONG ExtendedTagSupported:1;
4560 ULONG L0sAcceptableLatency:3;
4561 ULONG L1AcceptableLatency:3;
4562 ULONG Undefined:3;
4563 ULONG RoleBasedErrorReporting:1;
4564 ULONG Rsvd1:2;
4565 ULONG CapturedSlotPowerLimit:8;
4566 ULONG CapturedSlotPowerLimitScale:2;
4567 ULONG Rsvd2:4;
4568 } DUMMYSTRUCTNAME;
4569 ULONG AsULONG;
4570 } PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER, *PPCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER;
4571
4572 #define PCI_EXPRESS_AER_DEVICE_CONTROL_MASK 0x07;
4573
4574 typedef union _PCI_EXPRESS_DEVICE_CONTROL_REGISTER {
4575 _ANONYMOUS_STRUCT struct {
4576 USHORT CorrectableErrorEnable:1;
4577 USHORT NonFatalErrorEnable:1;
4578 USHORT FatalErrorEnable:1;
4579 USHORT UnsupportedRequestErrorEnable:1;
4580 USHORT EnableRelaxedOrder:1;
4581 USHORT MaxPayloadSize:3;
4582 USHORT ExtendedTagEnable:1;
4583 USHORT PhantomFunctionsEnable:1;
4584 USHORT AuxPowerEnable:1;
4585 USHORT NoSnoopEnable:1;
4586 USHORT MaxReadRequestSize:3;
4587 USHORT BridgeConfigRetryEnable:1;
4588 } DUMMYSTRUCTNAME;
4589 USHORT AsUSHORT;
4590 } PCI_EXPRESS_DEVICE_CONTROL_REGISTER, *PPCI_EXPRESS_DEVICE_CONTROL_REGISTER;
4591
4592 #define PCI_EXPRESS_AER_DEVICE_STATUS_MASK 0x0F;
4593
4594 typedef union _PCI_EXPRESS_DEVICE_STATUS_REGISTER {
4595 _ANONYMOUS_STRUCT struct {
4596 USHORT CorrectableErrorDetected:1;
4597 USHORT NonFatalErrorDetected:1;
4598 USHORT FatalErrorDetected:1;
4599 USHORT UnsupportedRequestDetected:1;
4600 USHORT AuxPowerDetected:1;
4601 USHORT TransactionsPending:1;
4602 USHORT Rsvd:10;
4603 } DUMMYSTRUCTNAME;
4604 USHORT AsUSHORT;
4605 } PCI_EXPRESS_DEVICE_STATUS_REGISTER, *PPCI_EXPRESS_DEVICE_STATUS_REGISTER;
4606
4607 typedef union _PCI_EXPRESS_LINK_CAPABILITIES_REGISTER {
4608 _ANONYMOUS_STRUCT struct {
4609 ULONG MaximumLinkSpeed:4;
4610 ULONG MaximumLinkWidth:6;
4611 ULONG ActiveStatePMSupport:2;
4612 ULONG L0sExitLatency:3;
4613 ULONG L1ExitLatency:3;
4614 ULONG ClockPowerManagement:1;
4615 ULONG SurpriseDownErrorReportingCapable:1;
4616 ULONG DataLinkLayerActiveReportingCapable:1;
4617 ULONG Rsvd:3;
4618 ULONG PortNumber:8;
4619 } DUMMYSTRUCTNAME;
4620 ULONG AsULONG;
4621 } PCI_EXPRESS_LINK_CAPABILITIES_REGISTER, *PPCI_EXPRESS_LINK_CAPABILITIES_REGISTER;
4622
4623 typedef union _PCI_EXPRESS_LINK_CONTROL_REGISTER {
4624 _ANONYMOUS_STRUCT struct {
4625 USHORT ActiveStatePMControl:2;
4626 USHORT Rsvd1:1;
4627 USHORT ReadCompletionBoundary:1;
4628 USHORT LinkDisable:1;
4629 USHORT RetrainLink:1;
4630 USHORT CommonClockConfig:1;
4631 USHORT ExtendedSynch:1;
4632 USHORT EnableClockPowerManagement:1;
4633 USHORT Rsvd2:7;
4634 } DUMMYSTRUCTNAME;
4635 USHORT AsUSHORT;
4636 } PCI_EXPRESS_LINK_CONTROL_REGISTER, *PPCI_EXPRESS_LINK_CONTROL_REGISTER;
4637
4638 typedef union _PCI_EXPRESS_LINK_STATUS_REGISTER {
4639 _ANONYMOUS_STRUCT struct {
4640 USHORT LinkSpeed:4;
4641 USHORT LinkWidth:6;
4642 USHORT Undefined:1;
4643 USHORT LinkTraining:1;
4644 USHORT SlotClockConfig:1;
4645 USHORT DataLinkLayerActive:1;
4646 USHORT Rsvd:2;
4647 } DUMMYSTRUCTNAME;
4648 USHORT AsUSHORT;
4649 } PCI_EXPRESS_LINK_STATUS_REGISTER, *PPCI_EXPRESS_LINK_STATUS_REGISTER;
4650
4651 typedef union _PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER {
4652 _ANONYMOUS_STRUCT struct {
4653 ULONG AttentionButtonPresent:1;
4654 ULONG PowerControllerPresent:1;
4655 ULONG MRLSensorPresent:1;
4656 ULONG AttentionIndicatorPresent:1;
4657 ULONG PowerIndicatorPresent:1;
4658 ULONG HotPlugSurprise:1;
4659 ULONG HotPlugCapable:1;
4660 ULONG SlotPowerLimit:8;
4661 ULONG SlotPowerLimitScale:2;
4662 ULONG ElectromechanicalLockPresent:1;
4663 ULONG NoCommandCompletedSupport:1;
4664 ULONG PhysicalSlotNumber:13;
4665 } DUMMYSTRUCTNAME;
4666 ULONG AsULONG;
4667 } PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER, *PPCI_EXPRESS_SLOT_CAPABILITIES_REGISTER;
4668
4669 typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER {
4670 _ANONYMOUS_STRUCT struct {
4671 USHORT AttentionButtonEnable:1;
4672 USHORT PowerFaultDetectEnable:1;
4673 USHORT MRLSensorEnable:1;
4674 USHORT PresenceDetectEnable:1;
4675 USHORT CommandCompletedEnable:1;
4676 USHORT HotPlugInterruptEnable:1;
4677 USHORT AttentionIndicatorControl:2;
4678 USHORT PowerIndicatorControl:2;
4679 USHORT PowerControllerControl:1;
4680 USHORT ElectromechanicalLockControl:1;
4681 USHORT DataLinkStateChangeEnable:1;
4682 USHORT Rsvd:3;
4683 } DUMMYSTRUCTNAME;
4684 USHORT AsUSHORT;
4685 } PCI_EXPRESS_SLOT_CONTROL_REGISTER, *PPCI_EXPRESS_SLOT_CONTROL_REGISTER;
4686
4687 typedef union _PCI_EXPRESS_SLOT_STATUS_REGISTER {
4688 _ANONYMOUS_STRUCT struct {
4689 USHORT AttentionButtonPressed:1;
4690 USHORT PowerFaultDetected:1;
4691 USHORT MRLSensorChanged:1;
4692 USHORT PresenceDetectChanged:1;
4693 USHORT CommandCompleted:1;
4694 USHORT MRLSensorState:1;
4695 USHORT PresenceDetectState:1;
4696 USHORT ElectromechanicalLockEngaged:1;
4697 USHORT DataLinkStateChanged:1;
4698 USHORT Rsvd:7;
4699 } DUMMYSTRUCTNAME;
4700 USHORT AsUSHORT;
4701 } PCI_EXPRESS_SLOT_STATUS_REGISTER, *PPCI_EXPRESS_SLOT_STATUS_REGISTER;
4702
4703 typedef union _PCI_EXPRESS_ROOT_CONTROL_REGISTER {
4704 _ANONYMOUS_STRUCT struct {
4705 USHORT CorrectableSerrEnable:1;
4706 USHORT NonFatalSerrEnable:1;
4707 USHORT FatalSerrEnable:1;
4708 USHORT PMEInterruptEnable:1;
4709 USHORT CRSSoftwareVisibilityEnable:1;
4710 USHORT Rsvd:11;
4711 } DUMMYSTRUCTNAME;
4712 USHORT AsUSHORT;
4713 } PCI_EXPRESS_ROOT_CONTROL_REGISTER, *PPCI_EXPRESS_ROOT_CONTROL_REGISTER;
4714
4715 typedef union _PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER {
4716 _ANONYMOUS_STRUCT struct {
4717 USHORT CRSSoftwareVisibility:1;
4718 USHORT Rsvd:15;
4719 } DUMMYSTRUCTNAME;
4720 USHORT AsUSHORT;
4721 } PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER, *PPCI_EXPRESS_ROOT_CAPABILITIES_REGISTER;
4722
4723 typedef union _PCI_EXPRESS_ROOT_STATUS_REGISTER {
4724 _ANONYMOUS_STRUCT struct {
4725 ULONG PMERequestorId:16;
4726 ULONG PMEStatus:1;
4727 ULONG PMEPending:1;
4728 ULONG Rsvd:14;
4729 } DUMMYSTRUCTNAME;
4730 ULONG AsULONG;
4731 } PCI_EXPRESS_ROOT_STATUS_REGISTER, *PPCI_EXPRESS_ROOT_STATUS_REGISTER;
4732
4733 typedef struct _PCI_EXPRESS_CAPABILITY {
4734 PCI_CAPABILITIES_HEADER Header;
4735 PCI_EXPRESS_CAPABILITIES_REGISTER ExpressCapabilities;
4736 PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER DeviceCapabilities;
4737 PCI_EXPRESS_DEVICE_CONTROL_REGISTER DeviceControl;
4738 PCI_EXPRESS_DEVICE_STATUS_REGISTER DeviceStatus;
4739 PCI_EXPRESS_LINK_CAPABILITIES_REGISTER LinkCapabilities;
4740 PCI_EXPRESS_LINK_CONTROL_REGISTER LinkControl;
4741 PCI_EXPRESS_LINK_STATUS_REGISTER LinkStatus;
4742 PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER SlotCapabilities;
4743 PCI_EXPRESS_SLOT_CONTROL_REGISTER SlotControl;
4744 PCI_EXPRESS_SLOT_STATUS_REGISTER SlotStatus;
4745 PCI_EXPRESS_ROOT_CONTROL_REGISTER RootControl;
4746 PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER RootCapabilities;
4747 PCI_EXPRESS_ROOT_STATUS_REGISTER RootStatus;
4748 } PCI_EXPRESS_CAPABILITY, *PPCI_EXPRESS_CAPABILITY;
4749
4750 typedef enum {
4751 MRLClosed = 0,
4752 MRLOpen
4753 } PCI_EXPRESS_MRL_STATE;
4754
4755 typedef enum {
4756 SlotEmpty = 0,
4757 CardPresent
4758 } PCI_EXPRESS_CARD_PRESENCE;
4759
4760 typedef enum {
4761 IndicatorOn = 1,
4762 IndicatorBlink,
4763 IndicatorOff
4764 } PCI_EXPRESS_INDICATOR_STATE;
4765
4766 typedef enum {
4767 PowerOn = 0,
4768 PowerOff
4769 } PCI_EXPRESS_POWER_STATE;
4770
4771 typedef enum {
4772 L0sEntrySupport = 1,
4773 L0sAndL1EntrySupport = 3
4774 } PCI_EXPRESS_ASPM_SUPPORT;
4775
4776 typedef enum {
4777 L0sAndL1EntryDisabled,
4778 L0sEntryEnabled,
4779 L1EntryEnabled,
4780 L0sAndL1EntryEnabled
4781 } PCI_EXPRESS_ASPM_CONTROL;
4782
4783 typedef enum {
4784 L0s_Below64ns = 0,
4785 L0s_64ns_128ns,
4786 L0s_128ns_256ns,
4787 L0s_256ns_512ns,
4788 L0s_512ns_1us,
4789 L0s_1us_2us,
4790 L0s_2us_4us,
4791 L0s_Above4us
4792 } PCI_EXPRESS_L0s_EXIT_LATENCY;
4793
4794 typedef enum {
4795 L1_Below1us = 0,
4796 L1_1us_2us,
4797 L1_2us_4us,
4798 L1_4us_8us,
4799 L1_8us_16us,
4800 L1_16us_32us,
4801 L1_32us_64us,
4802 L1_Above64us
4803 } PCI_EXPRESS_L1_EXIT_LATENCY;
4804
4805 typedef enum {
4806 PciExpressEndpoint = 0,
4807 PciExpressLegacyEndpoint,
4808 PciExpressRootPort = 4,
4809 PciExpressUpstreamSwitchPort,
4810 PciExpressDownstreamSwitchPort,
4811 PciExpressToPciXBridge,
4812 PciXToExpressBridge,
4813 PciExpressRootComplexIntegratedEndpoint,
4814 PciExpressRootComplexEventCollector
4815 } PCI_EXPRESS_DEVICE_TYPE;
4816
4817 typedef enum {
4818 MaxPayload128Bytes = 0,
4819 MaxPayload256Bytes,
4820 MaxPayload512Bytes,
4821 MaxPayload1024Bytes,
4822 MaxPayload2048Bytes,
4823 MaxPayload4096Bytes
4824 } PCI_EXPRESS_MAX_PAYLOAD_SIZE;
4825
4826 typedef union _PCI_EXPRESS_PME_REQUESTOR_ID {
4827 _ANONYMOUS_STRUCT struct {
4828 USHORT FunctionNumber:3;
4829 USHORT DeviceNumber:5;
4830 USHORT BusNumber:8;
4831 } DUMMYSTRUCTNAME;
4832 USHORT AsUSHORT;
4833 } PCI_EXPRESS_PME_REQUESTOR_ID, *PPCI_EXPRESS_PME_REQUESTOR_ID;
4834
4835 typedef enum _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE {
4836 ResourceTypeSingle = 0,
4837 ResourceTypeRange,
4838 ResourceTypeExtendedCounterConfiguration,
4839 ResourceTypeOverflow,
4840 ResourceTypeMax
4841 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE;
4842
4843 typedef struct _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR {
4844 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE Type;
4845 ULONG Flags;
4846 union {
4847 ULONG CounterIndex;
4848 ULONG ExtendedRegisterAddress;
4849 struct {
4850 ULONG Begin;
4851 ULONG End;
4852 } Range;
4853 } u;
4854 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR, *PPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR;
4855
4856 typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST {
4857 ULONG Count;
4858 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors[ANYSIZE_ARRAY];
4859 } PHYSICAL_COUNTER_RESOURCE_LIST, *PPHYSICAL_COUNTER_RESOURCE_LIST;
4860
4861 typedef VOID
4862 (NTAPI *PciPin2Line)(
4863 _In_ struct _BUS_HANDLER *BusHandler,
4864 _In_ struct _BUS_HANDLER *RootHandler,
4865 _In_ PCI_SLOT_NUMBER SlotNumber,
4866 _In_ PPCI_COMMON_CONFIG PciData);
4867
4868 typedef VOID
4869 (NTAPI *PciLine2Pin)(
4870 _In_ struct _BUS_HANDLER *BusHandler,
4871 _In_ struct _BUS_HANDLER *RootHandler,
4872 _In_ PCI_SLOT_NUMBER SlotNumber,
4873 _In_ PPCI_COMMON_CONFIG PciNewData,
4874 _In_ PPCI_COMMON_CONFIG PciOldData);
4875
4876 typedef VOID
4877 (NTAPI *PciReadWriteConfig)(
4878 _In_ struct _BUS_HANDLER *BusHandler,
4879 _In_ PCI_SLOT_NUMBER Slot,
4880 _In_reads_bytes_(Length) PVOID Buffer,
4881 _In_ ULONG Offset,
4882 _In_ ULONG Length);
4883
4884 #define PCI_DATA_TAG ' ICP'
4885 #define PCI_DATA_VERSION 1
4886
4887 typedef struct _PCIBUSDATA {
4888 ULONG Tag;
4889 ULONG Version;
4890 PciReadWriteConfig ReadConfig;
4891 PciReadWriteConfig WriteConfig;
4892 PciPin2Line Pin2Line;
4893 PciLine2Pin Line2Pin;
4894 PCI_SLOT_NUMBER ParentSlot;
4895 PVOID Reserved[4];
4896 } PCIBUSDATA, *PPCIBUSDATA;
4897
4898 #ifndef _PCIINTRF_X_
4899 #define _PCIINTRF_X_
4900
4901 typedef ULONG
4902 (NTAPI *PCI_READ_WRITE_CONFIG)(
4903 _In_ PVOID Context,
4904 _In_ ULONG BusOffset,
4905 _In_ ULONG Slot,
4906 _In_reads_bytes_(Length) PVOID Buffer,
4907 _In_ ULONG Offset,
4908 _In_ ULONG Length);
4909
4910 typedef VOID
4911 (NTAPI *PCI_PIN_TO_LINE)(
4912 _In_ PVOID Context,
4913 _In_ PPCI_COMMON_CONFIG PciData);
4914
4915 typedef VOID
4916 (NTAPI *PCI_LINE_TO_PIN)(
4917 _In_ PVOID Context,
4918 _In_ PPCI_COMMON_CONFIG PciNewData,
4919 _In_ PPCI_COMMON_CONFIG PciOldData);
4920
4921 typedef VOID
4922 (NTAPI *PCI_ROOT_BUS_CAPABILITY)(
4923 _In_ PVOID Context,
4924 _Out_ PPCI_ROOT_BUS_HARDWARE_CAPABILITY HardwareCapability);
4925
4926 typedef VOID
4927 (NTAPI *PCI_EXPRESS_WAKE_CONTROL)(
4928 _In_ PVOID Context,
4929 _In_ BOOLEAN EnableWake);
4930
4931 typedef struct _PCI_BUS_INTERFACE_STANDARD {
4932 USHORT Size;
4933 USHORT Version;
4934 PVOID Context;
4935 PINTERFACE_REFERENCE InterfaceReference;
4936 PINTERFACE_DEREFERENCE InterfaceDereference;
4937 PCI_READ_WRITE_CONFIG ReadConfig;
4938 PCI_READ_WRITE_CONFIG WriteConfig;
4939 PCI_PIN_TO_LINE PinToLine;
4940 PCI_LINE_TO_PIN LineToPin;
4941 PCI_ROOT_BUS_CAPABILITY RootBusCapability;
4942 PCI_EXPRESS_WAKE_CONTROL ExpressWakeControl;
4943 } PCI_BUS_INTERFACE_STANDARD, *PPCI_BUS_INTERFACE_STANDARD;
4944
4945 #define PCI_BUS_INTERFACE_STANDARD_VERSION 1
4946
4947 #endif /* _PCIINTRF_X_ */
4948
4949 #if (NTDDI_VERSION >= NTDDI_WIN7)
4950
4951 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX 0x00004000
4952 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX 0x00008000
4953 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \
4954 (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \
4955 FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX)
4956
4957 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200
4958 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300
4959 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300
4960
4961 #else
4962
4963 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 0x00000200
4964 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 0x00000300
4965 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 0x00000300
4966
4967 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL
4968 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL
4969 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK
4970
4971 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4972
4973 #define FILE_CHARACTERISTICS_PROPAGATED (FILE_REMOVABLE_MEDIA | \
4974 FILE_READ_ONLY_DEVICE | \
4975 FILE_FLOPPY_DISKETTE | \
4976 FILE_WRITE_ONCE_MEDIA | \
4977 FILE_DEVICE_SECURE_OPEN)
4978
4979 typedef struct _FILE_ALIGNMENT_INFORMATION {
4980 ULONG AlignmentRequirement;
4981 } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
4982
4983 typedef struct _FILE_NAME_INFORMATION {
4984 ULONG FileNameLength;
4985 WCHAR FileName[1];
4986 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
4987
4988
4989 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION {
4990 ULONG FileAttributes;
4991 ULONG ReparseTag;
4992 } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
4993
4994 typedef struct _FILE_DISPOSITION_INFORMATION {
4995 BOOLEAN DeleteFile;
4996 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
4997
4998 typedef struct _FILE_END_OF_FILE_INFORMATION {
4999 LARGE_INTEGER EndOfFile;
5000 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
5001
5002 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION {
5003 LARGE_INTEGER ValidDataLength;
5004 } FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
5005
5006 typedef struct _FILE_FS_LABEL_INFORMATION {
5007 ULONG VolumeLabelLength;
5008 WCHAR VolumeLabel[1];
5009 } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
5010
5011 typedef struct _FILE_FS_VOLUME_INFORMATION {
5012 LARGE_INTEGER VolumeCreationTime;
5013 ULONG VolumeSerialNumber;
5014 ULONG VolumeLabelLength;
5015 BOOLEAN SupportsObjects;
5016 WCHAR VolumeLabel[1];
5017 } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
5018
5019 typedef struct _FILE_FS_SIZE_INFORMATION {
5020 LARGE_INTEGER TotalAllocationUnits;
5021 LARGE_INTEGER AvailableAllocationUnits;
5022 ULONG SectorsPerAllocationUnit;
5023 ULONG BytesPerSector;
5024 } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
5025
5026 typedef struct _FILE_FS_FULL_SIZE_INFORMATION {
5027 LARGE_INTEGER TotalAllocationUnits;
5028 LARGE_INTEGER CallerAvailableAllocationUnits;
5029 LARGE_INTEGER ActualAvailableAllocationUnits;
5030 ULONG SectorsPerAllocationUnit;
5031 ULONG BytesPerSector;
5032 } FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
5033
5034 typedef struct _FILE_FS_OBJECTID_INFORMATION {
5035 UCHAR ObjectId[16];
5036 UCHAR ExtendedInfo[48];
5037 } FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION;
5038
5039 typedef union _FILE_SEGMENT_ELEMENT {
5040 PVOID64 Buffer;
5041 ULONGLONG Alignment;
5042 }FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
5043
5044 #define IOCTL_AVIO_ALLOCATE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5045 #define IOCTL_AVIO_FREE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5046 #define IOCTL_AVIO_MODIFY_STREAM CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5047
5048 typedef enum _BUS_DATA_TYPE {
5049 ConfigurationSpaceUndefined = -1,
5050 Cmos,
5051 EisaConfiguration,
5052 Pos,
5053 CbusConfiguration,
5054 PCIConfiguration,
5055 VMEConfiguration,
5056 NuBusConfiguration,
5057 PCMCIAConfiguration,
5058 MPIConfiguration,
5059 MPSAConfiguration,
5060 PNPISAConfiguration,
5061 SgiInternalConfiguration,
5062 MaximumBusDataType
5063 } BUS_DATA_TYPE, *PBUS_DATA_TYPE;
5064
5065 /* Some Server 2003 DDK definitions */
5066 #define PCI_INT_ROUTE_INTRF_STANDARD_VER 1
5067
5068 typedef NTSTATUS
5069 (NTAPI *PLEGACY_DEVICE_DETECTION_HANDLER)(
5070 IN PVOID Context,
5071 IN INTERFACE_TYPE LegacyBusType,
5072 IN ULONG BusNumber,
5073 IN ULONG SlotNumber,
5074 OUT PDEVICE_OBJECT *PhysicalDeviceObject);
5075
5076 typedef struct _ROUTING_TOKEN {
5077 PVOID LinkNode;
5078 ULONG StaticVector;
5079 UCHAR Flags;
5080 } ROUTING_TOKEN, *PROUTING_TOKEN;
5081
5082 typedef NTSTATUS
5083 (NTAPI *PGET_INTERRUPT_ROUTING)(
5084 IN PDEVICE_OBJECT Pdo,
5085 OUT ULONG *Bus,
5086 OUT ULONG *PciSlot,
5087 OUT UCHAR *InterruptLine,
5088 OUT UCHAR *InterruptPin,
5089 OUT UCHAR *ClassCode,
5090 OUT UCHAR *SubClassCode,
5091 OUT PDEVICE_OBJECT *ParentPdo,
5092 OUT ROUTING_TOKEN *RoutingToken,
5093 OUT UCHAR *Flags);
5094
5095 typedef NTSTATUS
5096 (NTAPI *PSET_INTERRUPT_ROUTING_TOKEN)(
5097 IN PDEVICE_OBJECT Pdo,
5098 IN PROUTING_TOKEN RoutingToken);
5099
5100 typedef VOID
5101 (NTAPI *PUPDATE_INTERRUPT_LINE)(
5102 IN PDEVICE_OBJECT Pdo,
5103 IN UCHAR LineRegister);
5104
5105 typedef struct _INT_ROUTE_INTERFACE_STANDARD {
5106 USHORT Size;
5107 USHORT Version;
5108 PVOID Context;
5109 PINTERFACE_REFERENCE InterfaceReference;
5110 PINTERFACE_DEREFERENCE InterfaceDereference;
5111 PGET_INTERRUPT_ROUTING GetInterruptRouting;
5112 PSET_INTERRUPT_ROUTING_TOKEN SetInterruptRoutingToken;
5113 PUPDATE_INTERRUPT_LINE UpdateInterruptLine;
5114 } INT_ROUTE_INTERFACE_STANDARD, *PINT_ROUTE_INTERFACE_STANDARD;
5115
5116 typedef struct _LEGACY_DEVICE_DETECTION_INTERFACE {
5117 USHORT Size;
5118 USHORT Version;
5119 PVOID Context;
5120 PINTERFACE_REFERENCE InterfaceReference;
5121 PINTERFACE_DEREFERENCE InterfaceDereference;
5122 PLEGACY_DEVICE_DETECTION_HANDLER LegacyDeviceDetection;
5123 } LEGACY_DEVICE_DETECTION_INTERFACE, *PLEGACY_DEVICE_DETECTION_INTERFACE;
5124
5125 /* FIXME : These definitions don't exist in public headers */
5126
5127 #define PCI_CB_INTRF_VERSION 1
5128 #define PCI_PME_INTRF_STANDARD_VER 1
5129 #define PNP_LOCATION_INTERFACE_VERSION 1
5130
5131 DEFINE_GUID(GUID_PCI_CARDBUS_INTERFACE_PRIVATE, 0xcca82f31, 0x54d6, 0x11d1, 0x82, 0x24, 0x00, 0xa0, 0xc9, 0x32, 0x43, 0x85);
5132 DEFINE_GUID(GUID_PCI_PME_INTERFACE, 0xaac7e6ac, 0xbb0b, 0x11d2, 0xb4, 0x84, 0x00, 0xc0, 0x4f, 0x72, 0xde, 0x8b);
5133
5134 typedef NTSTATUS
5135 (NTAPI *PCARDBUSADD)(
5136 IN PDEVICE_OBJECT DeviceObject,
5137 IN OUT PVOID *DeviceContext);
5138
5139 typedef NTSTATUS
5140 (NTAPI *PCARDBUSDELETE)(
5141 IN PVOID DeviceContext);
5142
5143 typedef NTSTATUS
5144 (NTAPI *PCARDBUSPCIDISPATCH)(
5145 IN PVOID DeviceContext,
5146 IN PIRP Irp);
5147
5148 typedef VOID
5149 (NTAPI *PPME_SET_PME_ENABLE)(
5150 IN PDEVICE_OBJECT Pdo,
5151 IN BOOLEAN PmeEnable);
5152
5153 typedef VOID
5154 (NTAPI *PPME_CLEAR_PME_STATUS)(
5155 IN PDEVICE_OBJECT Pdo);
5156
5157 typedef VOID
5158 (NTAPI *PPME_GET_INFORMATION)(
5159 IN PDEVICE_OBJECT Pdo,
5160 OUT PBOOLEAN PmeCapable,
5161 OUT PBOOLEAN PmeStatus,
5162 OUT PBOOLEAN PmeEnable);
5163
5164 typedef struct _PCI_CARDBUS_INTERFACE_PRIVATE {
5165 USHORT Size;
5166 USHORT Version;
5167 PVOID Context;
5168 PINTERFACE_REFERENCE InterfaceReference;
5169 PINTERFACE_DEREFERENCE InterfaceDereference;
5170 PDRIVER_OBJECT DriverObject;
5171 PCARDBUSADD AddCardBus;
5172 PCARDBUSDELETE DeleteCardBus;
5173 PCARDBUSPCIDISPATCH DispatchPnp;
5174 } PCI_CARDBUS_INTERFACE_PRIVATE, *PPCI_CARDBUS_INTERFACE_PRIVATE;
5175
5176 typedef struct _PCI_PME_INTERFACE {
5177 USHORT Size;
5178 USHORT Version;
5179 PVOID Context;
5180 PINTERFACE_REFERENCE InterfaceReference;
5181 PINTERFACE_DEREFERENCE InterfaceDereference;
5182 PPME_GET_INFORMATION GetPmeInformation;
5183 PPME_CLEAR_PME_STATUS ClearPmeStatus;
5184 PPME_SET_PME_ENABLE UpdateEnable;
5185 } PCI_PME_INTERFACE, *PPCI_PME_INTERFACE;
5186
5187 $endif (_NTDDK_)
5188 $if (_NTIFS_)
5189
5190 #define FILE_OPLOCK_BROKEN_TO_LEVEL_2 0x00000007
5191 #define FILE_OPLOCK_BROKEN_TO_NONE 0x00000008
5192 #define FILE_OPBATCH_BREAK_UNDERWAY 0x00000009
5193
5194 /* also in winnt.h */
5195 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
5196 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
5197 #define FILE_NOTIFY_CHANGE_NAME 0x00000003
5198 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
5199 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
5200 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
5201 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
5202 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
5203 #define FILE_NOTIFY_CHANGE_EA 0x00000080
5204 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
5205 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
5206 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
5207 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
5208 #define FILE_NOTIFY_VALID_MASK 0x00000fff
5209
5210 #define FILE_ACTION_ADDED 0x00000001
5211 #define FILE_ACTION_REMOVED 0x00000002
5212 #define FILE_ACTION_MODIFIED 0x00000003
5213 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
5214 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
5215 #define FILE_ACTION_ADDED_STREAM 0x00000006
5216 #define FILE_ACTION_REMOVED_STREAM 0x00000007
5217 #define FILE_ACTION_MODIFIED_STREAM 0x00000008
5218 #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
5219 #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A
5220 #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B
5221 /* end winnt.h */
5222
5223 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
5224 #define FILE_PIPE_MESSAGE_TYPE 0x00000001
5225
5226 #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS 0x00000000
5227 #define FILE_PIPE_REJECT_REMOTE_CLIENTS 0x00000002
5228
5229 #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS 0x00000000
5230 #define FILE_PIPE_REJECT_REMOTE_CLIENTS 0x00000002
5231 #define FILE_PIPE_TYPE_VALID_MASK 0x00000003
5232
5233 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
5234 #define FILE_PIPE_MESSAGE_MODE 0x00000001
5235
5236 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
5237 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
5238
5239 #define FILE_PIPE_INBOUND 0x00000000
5240 #define FILE_PIPE_OUTBOUND 0x00000001
5241 #define FILE_PIPE_FULL_DUPLEX 0x00000002
5242
5243 #define FILE_PIPE_DISCONNECTED_STATE 0x00000001
5244 #define FILE_PIPE_LISTENING_STATE 0x00000002
5245 #define FILE_PIPE_CONNECTED_STATE 0x00000003
5246 #define FILE_PIPE_CLOSING_STATE 0x00000004
5247
5248 #define FILE_PIPE_CLIENT_END 0x00000000
5249 #define FILE_PIPE_SERVER_END 0x00000001
5250
5251 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
5252 #define FILE_CASE_PRESERVED_NAMES 0x00000002
5253 #define FILE_UNICODE_ON_DISK 0x00000004
5254 #define FILE_PERSISTENT_ACLS 0x00000008
5255 #define FILE_FILE_COMPRESSION 0x00000010
5256 #define FILE_VOLUME_QUOTAS 0x00000020
5257 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
5258 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
5259 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
5260 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
5261 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
5262 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
5263 #define FILE_NAMED_STREAMS 0x00040000
5264 #define FILE_READ_ONLY_VOLUME 0x00080000
5265 #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
5266 #define FILE_SUPPORTS_TRANSACTIONS 0x00200000
5267 #define FILE_SUPPORTS_HARD_LINKS 0x00400000
5268 #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
5269 #define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
5270 #define FILE_SUPPORTS_USN_JOURNAL 0x02000000
5271
5272 #define FILE_NEED_EA 0x00000080
5273
5274 #define FILE_EA_TYPE_BINARY 0xfffe
5275 #define FILE_EA_TYPE_ASCII 0xfffd
5276 #define FILE_EA_TYPE_BITMAP 0xfffb
5277 #define FILE_EA_TYPE_METAFILE 0xfffa
5278 #define FILE_EA_TYPE_ICON 0xfff9
5279 #define FILE_EA_TYPE_EA 0xffee
5280 #define FILE_EA_TYPE_MVMT 0xffdf
5281 #define FILE_EA_TYPE_MVST 0xffde
5282 #define FILE_EA_TYPE_ASN1 0xffdd
5283 #define FILE_EA_TYPE_FAMILY_IDS 0xff01
5284
5285 typedef struct _FILE_NOTIFY_INFORMATION {
5286 ULONG NextEntryOffset;
5287 ULONG Action;
5288 ULONG FileNameLength;
5289 WCHAR FileName[1];
5290 } FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION;
5291
5292 typedef struct _FILE_DIRECTORY_INFORMATION {
5293 ULONG NextEntryOffset;
5294 ULONG FileIndex;
5295 LARGE_INTEGER CreationTime;
5296 LARGE_INTEGER LastAccessTime;
5297 LARGE_INTEGER LastWriteTime;
5298 LARGE_INTEGER ChangeTime;
5299 LARGE_INTEGER EndOfFile;
5300 LARGE_INTEGER AllocationSize;
5301 ULONG FileAttributes;
5302 ULONG FileNameLength;
5303 WCHAR FileName[1];
5304 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
5305
5306 typedef struct _FILE_FULL_DIR_INFORMATION {
5307 ULONG NextEntryOffset;
5308 ULONG FileIndex;
5309 LARGE_INTEGER CreationTime;
5310 LARGE_INTEGER LastAccessTime;
5311 LARGE_INTEGER LastWriteTime;
5312 LARGE_INTEGER ChangeTime;
5313 LARGE_INTEGER EndOfFile;
5314 LARGE_INTEGER AllocationSize;
5315 ULONG FileAttributes;
5316 ULONG FileNameLength;
5317 ULONG EaSize;
5318 WCHAR FileName[1];
5319 } FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
5320
5321 typedef struct _FILE_ID_FULL_DIR_INFORMATION {
5322 ULONG NextEntryOffset;
5323 ULONG FileIndex;
5324 LARGE_INTEGER CreationTime;
5325 LARGE_INTEGER LastAccessTime;
5326 LARGE_INTEGER LastWriteTime;
5327 LARGE_INTEGER ChangeTime;
5328 LARGE_INTEGER EndOfFile;
5329 LARGE_INTEGER AllocationSize;
5330 ULONG FileAttributes;
5331 ULONG FileNameLength;
5332 ULONG EaSize;
5333 LARGE_INTEGER FileId;
5334 WCHAR FileName[1];
5335 } FILE_ID_FULL_DIR_INFORMATION, *PFILE_ID_FULL_DIR_INFORMATION;
5336
5337 typedef struct _FILE_BOTH_DIR_INFORMATION {
5338 ULONG NextEntryOffset;
5339 ULONG FileIndex;
5340 LARGE_INTEGER CreationTime;
5341 LARGE_INTEGER LastAccessTime;
5342 LARGE_INTEGER LastWriteTime;
5343 LARGE_INTEGER ChangeTime;
5344 LARGE_INTEGER EndOfFile;
5345 LARGE_INTEGER AllocationSize;
5346 ULONG FileAttributes;
5347 ULONG FileNameLength;
5348 ULONG EaSize;
5349 CCHAR ShortNameLength;
5350 WCHAR ShortName[12];
5351 WCHAR FileName[1];
5352 } FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
5353
5354 typedef struct _FILE_ID_BOTH_DIR_INFORMATION {
5355 ULONG NextEntryOffset;
5356 ULONG FileIndex;
5357 LARGE_INTEGER CreationTime;
5358 LARGE_INTEGER LastAccessTime;
5359 LARGE_INTEGER LastWriteTime;
5360 LARGE_INTEGER ChangeTime;
5361 LARGE_INTEGER EndOfFile;
5362 LARGE_INTEGER AllocationSize;
5363 ULONG FileAttributes;
5364 ULONG FileNameLength;
5365 ULONG EaSize;
5366 CCHAR ShortNameLength;
5367 WCHAR ShortName[12];
5368 LARGE_INTEGER FileId;
5369 WCHAR FileName[1];
5370 } FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION;
5371
5372 typedef struct _FILE_NAMES_INFORMATION {
5373 ULONG NextEntryOffset;
5374 ULONG FileIndex;
5375 ULONG FileNameLength;
5376 WCHAR FileName[1];
5377 } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
5378
5379 typedef struct _FILE_ID_GLOBAL_TX_DIR_INFORMATION {
5380 ULONG NextEntryOffset;
5381 ULONG FileIndex;
5382 LARGE_INTEGER CreationTime;
5383 LARGE_INTEGER LastAccessTime;
5384 LARGE_INTEGER LastWriteTime;
5385 LARGE_INTEGER ChangeTime;
5386 LARGE_INTEGER EndOfFile;
5387 LARGE_INTEGER AllocationSize;
5388 ULONG FileAttributes;
5389 ULONG FileNameLength;
5390 LARGE_INTEGER FileId;
5391 GUID LockingTransactionId;
5392 ULONG TxInfoFlags;
5393 WCHAR FileName[1];
5394 } FILE_ID_GLOBAL_TX_DIR_INFORMATION, *PFILE_ID_GLOBAL_TX_DIR_INFORMATION;
5395
5396 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_WRITELOCKED 0x00000001
5397 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_TO_TX 0x00000002
5398 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_OUTSIDE_TX 0x00000004
5399
5400 typedef struct _FILE_OBJECTID_INFORMATION {
5401 LONGLONG FileReference;
5402 UCHAR ObjectId[16];
5403 _ANONYMOUS_UNION union {
5404 _ANONYMOUS_STRUCT struct {
5405 UCHAR BirthVolumeId[16];
5406 UCHAR BirthObjectId[16];
5407 UCHAR DomainId[16];
5408 } DUMMYSTRUCTNAME;
5409 UCHAR ExtendedInfo[48];
5410 } DUMMYUNIONNAME;
5411 } FILE_OBJECTID_INFORMATION, *PFILE_OBJECTID_INFORMATION;
5412
5413 #define ANSI_DOS_STAR ('<')
5414 #define ANSI_DOS_QM ('>')
5415 #define ANSI_DOS_DOT ('"')
5416
5417 #define DOS_STAR (L'<')
5418 #define DOS_QM (L'>')
5419 #define DOS_DOT (L'"')
5420
5421 typedef struct _FILE_INTERNAL_INFORMATION {
5422 LARGE_INTEGER IndexNumber;
5423 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
5424
5425 typedef struct _FILE_EA_INFORMATION {
5426 ULONG EaSize;
5427 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
5428
5429 typedef struct _FILE_ACCESS_INFORMATION {
5430 ACCESS_MASK AccessFlags;
5431 } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
5432
5433 typedef struct _FILE_MODE_INFORMATION {
5434 ULONG Mode;
5435 } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
5436
5437 typedef struct _FILE_ALL_INFORMATION {
5438 FILE_BASIC_INFORMATION BasicInformation;
5439 FILE_STANDARD_INFORMATION StandardInformation;
5440 FILE_INTERNAL_INFORMATION InternalInformation;
5441 FILE_EA_INFORMATION EaInformation;
5442 FILE_ACCESS_INFORMATION AccessInformation;
5443 FILE_POSITION_INFORMATION PositionInformation;
5444 FILE_MODE_INFORMATION ModeInformation;
5445 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
5446 FILE_NAME_INFORMATION NameInformation;
5447 } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
5448
5449 typedef struct _FILE_ALLOCATION_INFORMATION {
5450 LARGE_INTEGER AllocationSize;
5451 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
5452
5453 typedef struct _FILE_COMPRESSION_INFORMATION {
5454 LARGE_INTEGER CompressedFileSize;
5455 USHORT CompressionFormat;
5456 UCHAR CompressionUnitShift;
5457 UCHAR ChunkShift;
5458 UCHAR ClusterShift;
5459 UCHAR Reserved[3];
5460 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
5461
5462 typedef struct _FILE_LINK_INFORMATION {
5463 BOOLEAN ReplaceIfExists;
5464 HANDLE RootDirectory;
5465 ULONG FileNameLength;
5466 WCHAR FileName[1];
5467 } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
5468
5469 typedef struct _FILE_MOVE_CLUSTER_INFORMATION {
5470 ULONG ClusterCount;
5471 HANDLE RootDirectory;
5472 ULONG FileNameLength;
5473 WCHAR FileName[1];
5474 } FILE_MOVE_CLUSTER_INFORMATION, *PFILE_MOVE_CLUSTER_INFORMATION;
5475
5476 typedef struct _FILE_RENAME_INFORMATION {
5477 BOOLEAN ReplaceIfExists;
5478 HANDLE RootDirectory;
5479 ULONG FileNameLength;
5480 WCHAR FileName[1];
5481 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
5482
5483 typedef struct _FILE_STREAM_INFORMATION {
5484 ULONG NextEntryOffset;
5485 ULONG StreamNameLength;
5486 LARGE_INTEGER StreamSize;
5487 LARGE_INTEGER StreamAllocationSize;
5488 WCHAR StreamName[1];
5489 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
5490
5491 typedef struct _FILE_TRACKING_INFORMATION {
5492 HANDLE DestinationFile;
5493 ULONG ObjectInformationLength;
5494 CHAR ObjectInformation[1];
5495 } FILE_TRACKING_INFORMATION, *PFILE_TRACKING_INFORMATION;
5496
5497 typedef struct _FILE_COMPLETION_INFORMATION {
5498 HANDLE Port;
5499 PVOID Key;
5500 } FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
5501
5502 typedef struct _FILE_PIPE_INFORMATION {
5503 ULONG ReadMode;
5504 ULONG CompletionMode;
5505 } FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
5506
5507 typedef struct _FILE_PIPE_LOCAL_INFORMATION {
5508 ULONG NamedPipeType;
5509 ULONG NamedPipeConfiguration;
5510 ULONG MaximumInstances;
5511 ULONG CurrentInstances;
5512 ULONG InboundQuota;
5513 ULONG ReadDataAvailable;
5514 ULONG OutboundQuota;
5515 ULONG WriteQuotaAvailable;
5516 ULONG NamedPipeState;
5517 ULONG NamedPipeEnd;
5518 } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
5519
5520 typedef struct _FILE_PIPE_REMOTE_INFORMATION {
5521 LARGE_INTEGER CollectDataTime;
5522 ULONG MaximumCollectionCount;
5523 } FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
5524
5525 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
5526 ULONG MaximumMessageSize;
5527 ULONG MailslotQuota;
5528 ULONG NextMessageSize;
5529 ULONG MessagesAvailable;
5530 LARGE_INTEGER ReadTimeout;
5531 } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
5532
5533 typedef struct _FILE_MAILSLOT_SET_INFORMATION {
5534 PLARGE_INTEGER ReadTimeout;
5535 } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
5536
5537 typedef struct _FILE_REPARSE_POINT_INFORMATION {
5538 LONGLONG FileReference;
5539 ULONG Tag;
5540 } FILE_REPARSE_POINT_INFORMATION, *PFILE_REPARSE_POINT_INFORMATION;
5541
5542 typedef struct _FILE_LINK_ENTRY_INFORMATION {
5543 ULONG NextEntryOffset;
5544 LONGLONG ParentFileId;
5545 ULONG FileNameLength;
5546 WCHAR FileName[1];
5547 } FILE_LINK_ENTRY_INFORMATION, *PFILE_LINK_ENTRY_INFORMATION;
5548
5549 typedef struct _FILE_LINKS_INFORMATION {
5550 ULONG BytesNeeded;
5551 ULONG EntriesReturned;
5552 FILE_LINK_ENTRY_INFORMATION Entry;
5553 } FILE_LINKS_INFORMATION, *PFILE_LINKS_INFORMATION;
5554
5555 typedef struct _FILE_NETWORK_PHYSICAL_NAME_INFORMATION {
5556 ULONG FileNameLength;
5557 WCHAR FileName[1];
5558 } FILE_NETWORK_PHYSICAL_NAME_INFORMATION, *PFILE_NETWORK_PHYSICAL_NAME_INFORMATION;
5559
5560 typedef struct _FILE_STANDARD_LINK_INFORMATION {
5561 ULONG NumberOfAccessibleLinks;
5562 ULONG TotalNumberOfLinks;
5563 BOOLEAN DeletePending;
5564 BOOLEAN Directory;
5565 } FILE_STANDARD_LINK_INFORMATION, *PFILE_STANDARD_LINK_INFORMATION;
5566
5567 typedef struct _FILE_GET_EA_INFORMATION {
5568 ULONG NextEntryOffset;
5569 UCHAR EaNameLength;
5570 CHAR EaName[1];
5571 } FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
5572
5573 #define REMOTE_PROTOCOL_FLAG_LOOPBACK 0x00000001
5574 #define REMOTE_PROTOCOL_FLAG_OFFLINE 0x00000002
5575
5576 typedef struct _FILE_REMOTE_PROTOCOL_INFORMATION {
5577 USHORT StructureVersion;
5578 USHORT StructureSize;
5579 ULONG Protocol;
5580 USHORT ProtocolMajorVersion;
5581 USHORT ProtocolMinorVersion;
5582 USHORT ProtocolRevision;
5583 USHORT Reserved;
5584 ULONG Flags;
5585 struct {
5586 ULONG Reserved[8];
5587 } GenericReserved;
5588 struct {
5589 ULONG Reserved[16];
5590 } ProtocolSpecificReserved;
5591 } FILE_REMOTE_PROTOCOL_INFORMATION, *PFILE_REMOTE_PROTOCOL_INFORMATION;
5592
5593 typedef struct _FILE_GET_QUOTA_INFORMATION {
5594 ULONG NextEntryOffset;
5595 ULONG SidLength;
5596 SID Sid;
5597 } FILE_GET_QUOTA_INFORMATION, *PFILE_GET_QUOTA_INFORMATION;
5598
5599 typedef struct _FILE_QUOTA_INFORMATION {
5600 ULONG NextEntryOffset;
5601 ULONG SidLength;
5602 LARGE_INTEGER ChangeTime;
5603 LARGE_INTEGER QuotaUsed;
5604 LARGE_INTEGER QuotaThreshold;
5605 LARGE_INTEGER QuotaLimit;
5606 SID Sid;
5607 } FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
5608
5609 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
5610 ULONG FileSystemAttributes;
5611 ULONG MaximumComponentNameLength;
5612 ULONG FileSystemNameLength;
5613 WCHAR FileSystemName[1];
5614 } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
5615
5616 typedef struct _FILE_FS_DRIVER_PATH_INFORMATION {
5617 BOOLEAN DriverInPath;
5618 ULONG DriverNameLength;
5619 WCHAR DriverName[1];
5620 } FILE_FS_DRIVER_PATH_INFORMATION, *PFILE_FS_DRIVER_PATH_INFORMATION;
5621
5622 typedef struct _FILE_FS_VOLUME_FLAGS_INFORMATION {
5623 ULONG Flags;
5624 } FILE_FS_VOLUME_FLAGS_INFORMATION, *PFILE_FS_VOLUME_FLAGS_INFORMATION;
5625
5626 #define FILE_VC_QUOTA_NONE 0x00000000
5627 #define FILE_VC_QUOTA_TRACK 0x00000001
5628 #define FILE_VC_QUOTA_ENFORCE 0x00000002
5629 #define FILE_VC_QUOTA_MASK 0x00000003
5630 #define FILE_VC_CONTENT_INDEX_DISABLED 0x00000008
5631 #define FILE_VC_LOG_QUOTA_THRESHOLD 0x00000010
5632 #define FILE_VC_LOG_QUOTA_LIMIT 0x00000020
5633 #define FILE_VC_LOG_VOLUME_THRESHOLD 0x00000040
5634 #define FILE_VC_LOG_VOLUME_LIMIT 0x00000080
5635 #define FILE_VC_QUOTAS_INCOMPLETE 0x00000100
5636 #define FILE_VC_QUOTAS_REBUILDING 0x00000200
5637 #define FILE_VC_VALID_MASK 0x000003ff
5638
5639 typedef struct _FILE_FS_CONTROL_INFORMATION {
5640 LARGE_INTEGER FreeSpaceStartFiltering;
5641 LARGE_INTEGER FreeSpaceThreshold;
5642 LARGE_INTEGER FreeSpaceStopFiltering;
5643 LARGE_INTEGER DefaultQuotaThreshold;
5644 LARGE_INTEGER DefaultQuotaLimit;
5645 ULONG FileSystemControlFlags;
5646 } FILE_FS_CONTROL_INFORMATION, *PFILE_FS_CONTROL_INFORMATION;
5647
5648 #ifndef _FILESYSTEMFSCTL_
5649 #define _FILESYSTEMFSCTL_
5650
5651 #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
5652 #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
5653 #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
5654 #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
5655 #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
5656 #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
5657 #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
5658 #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
5659 #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
5660 #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
5661 #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
5662 #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
5663 #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS)
5664 #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
5665 #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
5666 #define FSCTL_SET_BOOTLOADER_ACCESSED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS)
5667
5668 #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
5669 #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
5670 #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
5671 #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
5672 #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
5673
5674 #if (_WIN32_WINNT >= 0x0400)
5675
5676 #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
5677 #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
5678 #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS)
5679 #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS)
5680 #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5681 #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
5682 #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS)
5683
5684 #endif
5685
5686 #if (_WIN32_WINNT >= 0x0500)
5687
5688 #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS)
5689 #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5690 #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
5691 #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5692 #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5693 #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
5694 #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5695 #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_ANY_ACCESS)
5696 #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA)
5697 #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_ANY_ACCESS)
5698 #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5699 #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
5700 #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5701 #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA)
5702 #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA)
5703 #define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA)
5704 #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_NEITHER, FILE_ANY_ACCESS)
5705 #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS)
5706 #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_SPECIAL_ACCESS)
5707 #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_SPECIAL_ACCESS)
5708 #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_ANY_ACCESS)
5709 #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_ANY_ACCESS)
5710 #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_ANY_ACCESS)
5711 #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
5712 #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
5713 #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
5714 #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS)
5715 #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
5716 #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
5717 #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
5718 #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA)
5719 #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5720
5721 #endif
5722
5723 #if (_WIN32_WINNT >= 0x0600)
5724
5725 #define FSCTL_MAKE_MEDIA_COMPATIBLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA)
5726 #define FSCTL_SET_DEFECT_MANAGEMENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA)
5727 #define FSCTL_QUERY_SPARING_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS)
5728 #define FSCTL_QUERY_ON_DISK_VOLUME_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS)
5729 #define FSCTL_SET_VOLUME_COMPRESSION_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5730 #define FSCTL_TXFS_MODIFY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 81, METHOD_BUFFERED, FILE_WRITE_DATA)
5731 #define FSCTL_TXFS_QUERY_RM_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 82, METHOD_BUFFERED, FILE_READ_DATA)
5732 #define FSCTL_TXFS_ROLLFORWARD_REDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 84, METHOD_BUFFERED, FILE_WRITE_DATA)
5733 #define FSCTL_TXFS_ROLLFORWARD_UNDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 85, METHOD_BUFFERED, FILE_WRITE_DATA)
5734 #define FSCTL_TXFS_START_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 86, METHOD_BUFFERED, FILE_WRITE_DATA)
5735 #define FSCTL_TXFS_SHUTDOWN_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA)
5736 #define FSCTL_TXFS_READ_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 88, METHOD_BUFFERED, FILE_READ_DATA)
5737 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 89, METHOD_BUFFERED, FILE_WRITE_DATA)
5738 #define FSCTL_TXFS_CREATE_SECONDARY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 90, METHOD_BUFFERED, FILE_WRITE_DATA)
5739 #define FSCTL_TXFS_GET_METADATA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 91, METHOD_BUFFERED, FILE_READ_DATA)
5740 #define FSCTL_TXFS_GET_TRANSACTED_VERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 92, METHOD_BUFFERED, FILE_READ_DATA)
5741 #define FSCTL_TXFS_SAVEPOINT_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 94, METHOD_BUFFERED, FILE_WRITE_DATA)
5742 #define FSCTL_TXFS_CREATE_MINIVERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA)
5743 #define FSCTL_TXFS_TRANSACTION_ACTIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 99, METHOD_BUFFERED, FILE_READ_DATA)
5744 #define FSCTL_SET_ZERO_ON_DEALLOCATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5745 #define FSCTL_SET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS)
5746 #define FSCTL_GET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS)
5747 #define FSCTL_WAIT_FOR_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS)
5748 #define FSCTL_INITIATE_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS)
5749 #define FSCTL_CSC_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER, FILE_ANY_ACCESS)
5750 #define FSCTL_SHRINK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
5751 #define FSCTL_SET_SHORT_NAME_BEHAVIOR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS)
5752 #define FSCTL_DFSR_SET_GHOST_HANDLE_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS)
5753 #define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES \
5754 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA)
5755 #define FSCTL_TXFS_LIST_TRANSACTIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA)
5756 #define FSCTL_QUERY_PAGEFILE_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS)
5757 #define FSCTL_RESET_VOLUME_ALLOCATION_HINTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 123, METHOD_BUFFERED, FILE_ANY_ACCESS)
5758 #define FSCTL_TXFS_READ_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 126, METHOD_BUFFERED, FILE_ANY_ACCESS)
5759
5760 #endif
5761
5762 #if (_WIN32_WINNT >= 0x0601)
5763
5764 #define FSCTL_QUERY_DEPENDENT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 124, METHOD_BUFFERED, FILE_ANY_ACCESS)
5765 #define FSCTL_SD_GLOBAL_CHANGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 125, METHOD_BUFFERED, FILE_ANY_ACCESS)
5766 #define FSCTL_LOOKUP_STREAM_FROM_CLUSTER CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 127, METHOD_BUFFERED, FILE_ANY_ACCESS)
5767 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 128, METHOD_BUFFERED, FILE_ANY_ACCESS)
5768 #define FSCTL_FILE_TYPE_NOTIFICATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 129, METHOD_BUFFERED, FILE_ANY_ACCESS)
5769 #define FSCTL_GET_BOOT_AREA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 140, METHOD_BUFFERED, FILE_ANY_ACCESS)
5770 #define FSCTL_GET_RETRIEVAL_POINTER_BASE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 141, METHOD_BUFFERED, FILE_ANY_ACCESS)
5771 #define FSCTL_SET_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS)
5772 #define FSCTL_QUERY_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 143, METHOD_BUFFERED, FILE_ANY_ACCESS)
5773 #define FSCTL_REQUEST_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 144, METHOD_BUFFERED, FILE_ANY_ACCESS)
5774 #define FSCTL_CSV_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 145, METHOD_BUFFERED, FILE_ANY_ACCESS)
5775 #define FSCTL_IS_CSV_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED, FILE_ANY_ACCESS)
5776 #define FSCTL_QUERY_FILE_SYSTEM_RECOGNITION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 147, METHOD_BUFFERED, FILE_ANY_ACCESS)
5777 #define FSCTL_CSV_GET_VOLUME_PATH_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 148, METHOD_BUFFERED, FILE_ANY_ACCESS)
5778 #define FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS)
5779 #define FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 150, METHOD_BUFFERED, FILE_ANY_ACCESS)
5780 #define FSCTL_IS_FILE_ON_CSV_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 151, METHOD_BUFFERED, FILE_ANY_ACCESS)
5781 #define FSCTL_CSV_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 155, METHOD_BUFFERED, FILE_ANY_ACCESS)
5782
5783 typedef struct _CSV_NAMESPACE_INFO {
5784 ULONG Version;
5785 ULONG DeviceNumber;
5786 LARGE_INTEGER StartingOffset;
5787 ULONG SectorSize;
5788 } CSV_NAMESPACE_INFO, *PCSV_NAMESPACE_INFO;
5789
5790 #define CSV_NAMESPACE_INFO_V1 (sizeof(CSV_NAMESPACE_INFO))
5791 #define CSV_INVALID_DEVICE_NUMBER 0xFFFFFFFF
5792
5793 #endif
5794
5795 #if (_WIN32_WINNT >= 0x0602)
5796
5797 #define FSCTL_FILE_LEVEL_TRIM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 130, METHOD_BUFFERED, FILE_WRITE_DATA)
5798 #define FSCTL_CORRUPTION_HANDLING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 152, METHOD_BUFFERED, FILE_ANY_ACCESS)
5799 #define FSCTL_OFFLOAD_READ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 153, METHOD_BUFFERED, FILE_READ_ACCESS)
5800 #define FSCTL_OFFLOAD_WRITE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 154, METHOD_BUFFERED, FILE_WRITE_ACCESS)
5801 #define FSCTL_SET_PURGE_FAILURE_MODE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 156, METHOD_BUFFERED, FILE_ANY_ACCESS)
5802 #define FSCTL_QUERY_FILE_LAYOUT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 157, METHOD_NEITHER, FILE_ANY_ACCESS)
5803 #define FSCTL_IS_VOLUME_OWNED_BYCSVFS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 158, METHOD_BUFFERED, FILE_ANY_ACCESS)
5804 #define FSCTL_GET_INTEGRITY_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 159, METHOD_BUFFERED, FILE_ANY_ACCESS)
5805 #define FSCTL_SET_INTEGRITY_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 160, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
5806 #define FSCTL_QUERY_FILE_REGIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 161, METHOD_BUFFERED, FILE_ANY_ACCESS)
5807 #define FSCTL_DEDUP_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 165, METHOD_BUFFERED, FILE_ANY_ACCESS)
5808 #define FSCTL_DEDUP_QUERY_FILE_HASHES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 166, METHOD_NEITHER, FILE_READ_DATA)
5809 #define FSCTL_RKF_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 171, METHOD_NEITHER, FILE_ANY_ACCESS)
5810 #define FSCTL_SCRUB_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 172, METHOD_BUFFERED, FILE_ANY_ACCESS)
5811 #define FSCTL_REPAIR_COPIES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 173, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
5812 #define FSCTL_DISABLE_LOCAL_BUFFERING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 174, METHOD_BUFFERED, FILE_ANY_ACCESS)
5813 #define FSCTL_CSV_MGMT_LOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 175, METHOD_BUFFERED, FILE_ANY_ACCESS)
5814 #define FSCTL_CSV_QUERY_DOWN_LEVEL_FILE_SYSTEM_CHARACTERISTICS \
5815 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 176, METHOD_BUFFERED, FILE_ANY_ACCESS)
5816 #define FSCTL_ADVANCE_FILE_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 177, METHOD_BUFFERED, FILE_ANY_ACCESS)
5817 #define FSCTL_CSV_SYNC_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 178, METHOD_BUFFERED, FILE_ANY_ACCESS)
5818 #define FSCTL_CSV_QUERY_VETO_FILE_DIRECT_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 179, METHOD_BUFFERED, FILE_ANY_ACCESS)
5819 #define FSCTL_WRITE_USN_REASON CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 180, METHOD_BUFFERED, FILE_ANY_ACCESS)
5820 #define FSCTL_CSV_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 181, METHOD_BUFFERED, FILE_ANY_ACCESS)
5821 #define FSCTL_GET_REFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 182, METHOD_BUFFERED, FILE_ANY_ACCESS)
5822
5823 #endif
5824
5825 #define FSCTL_MARK_AS_SYSTEM_HIVE FSCTL_SET_BOOTLOADER_ACCESSED
5826
5827 typedef struct _PATHNAME_BUFFER {
5828 ULONG PathNameLength;
5829 WCHAR Name[1];
5830 } PATHNAME_BUFFER, *PPATHNAME_BUFFER;
5831
5832 typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER {
5833 UCHAR First0x24BytesOfBootSector[0x24];
5834 } FSCTL_QUERY_FAT_BPB_BUFFER, *PFSCTL_QUERY_FAT_BPB_BUFFER;
5835
5836 #if (_WIN32_WINNT >= 0x0400)
5837
5838 typedef struct _NTFS_VOLUME_DATA_BUFFER {
5839 LARGE_INTEGER VolumeSerialNumber;
5840 LARGE_INTEGER NumberSectors;
5841 LARGE_INTEGER TotalClusters;
5842 LARGE_INTEGER FreeClusters;
5843 LARGE_INTEGER TotalReserved;
5844 ULONG BytesPerSector;
5845 ULONG BytesPerCluster;
5846 ULONG BytesPerFileRecordSegment;
5847 ULONG ClustersPerFileRecordSegment;
5848 LARGE_INTEGER MftValidDataLength;
5849 LARGE_INTEGER MftStartLcn;
5850 LARGE_INTEGER Mft2StartLcn;
5851 LARGE_INTEGER MftZoneStart;
5852 LARGE_INTEGER MftZoneEnd;
5853 } NTFS_VOLUME_DATA_BUFFER, *PNTFS_VOLUME_DATA_BUFFER;
5854
5855 typedef struct _NTFS_EXTENDED_VOLUME_DATA {
5856 ULONG ByteCount;
5857 USHORT MajorVersion;
5858 USHORT MinorVersion;
5859 } NTFS_EXTENDED_VOLUME_DATA, *PNTFS_EXTENDED_VOLUME_DATA;
5860
5861 typedef struct _STARTING_LCN_INPUT_BUFFER {
5862 LARGE_INTEGER StartingLcn;
5863 } STARTING_LCN_INPUT_BUFFER, *PSTARTING_LCN_INPUT_BUFFER;
5864
5865 typedef struct _VOLUME_BITMAP_BUFFER {
5866 LARGE_INTEGER StartingLcn;
5867 LARGE_INTEGER BitmapSize;
5868 UCHAR Buffer[1];
5869 } VOLUME_BITMAP_BUFFER, *PVOLUME_BITMAP_BUFFER;
5870
5871 typedef struct _STARTING_VCN_INPUT_BUFFER {
5872 LARGE_INTEGER StartingVcn;
5873 } STARTING_VCN_INPUT_BUFFER, *PSTARTING_VCN_INPUT_BUFFER;
5874
5875 typedef struct _RETRIEVAL_POINTERS_BUFFER {
5876 ULONG ExtentCount;
5877 LARGE_INTEGER StartingVcn;
5878 struct {
5879 LARGE_INTEGER NextVcn;
5880 LARGE_INTEGER Lcn;
5881 } Extents[1];
5882 } RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;
5883
5884 typedef struct _NTFS_FILE_RECORD_INPUT_BUFFER {
5885 LARGE_INTEGER FileReferenceNumber;
5886 } NTFS_FILE_RECORD_INPUT_BUFFER, *PNTFS_FILE_RECORD_INPUT_BUFFER;
5887
5888 typedef struct _NTFS_FILE_RECORD_OUTPUT_BUFFER {
5889 LARGE_INTEGER FileReferenceNumber;
5890 ULONG FileRecordLength;
5891 UCHAR FileRecordBuffer[1];
5892 } NTFS_FILE_RECORD_OUTPUT_BUFFER, *PNTFS_FILE_RECORD_OUTPUT_BUFFER;
5893
5894 typedef struct _MOVE_FILE_DATA {
5895 HANDLE FileHandle;
5896 LARGE_INTEGER StartingVcn;
5897 LARGE_INTEGER StartingLcn;
5898 ULONG ClusterCount;
5899 } MOVE_FILE_DATA, *PMOVE_FILE_DATA;
5900
5901 typedef struct _MOVE_FILE_RECORD_DATA {
5902 HANDLE FileHandle;
5903 LARGE_INTEGER SourceFileRecord;
5904 LARGE_INTEGER TargetFileRecord;
5905 } MOVE_FILE_RECORD_DATA, *PMOVE_FILE_RECORD_DATA;
5906
5907 #if defined(_WIN64)
5908 typedef struct _MOVE_FILE_DATA32 {
5909 UINT32 FileHandle;
5910 LARGE_INTEGER StartingVcn;
5911 LARGE_INTEGER StartingLcn;
5912 ULONG ClusterCount;
5913 } MOVE_FILE_DATA32, *PMOVE_FILE_DATA32;
5914 #endif
5915
5916 #endif /* (_WIN32_WINNT >= 0x0400) */
5917
5918 #if (_WIN32_WINNT >= 0x0500)
5919
5920 typedef struct _FIND_BY_SID_DATA {
5921 ULONG Restart;
5922 SID Sid;
5923 } FIND_BY_SID_DATA, *PFIND_BY_SID_DATA;
5924
5925 typedef struct _FIND_BY_SID_OUTPUT {
5926 ULONG NextEntryOffset;
5927 ULONG FileIndex;
5928 ULONG FileNameLength;
5929 WCHAR FileName[1];
5930 } FIND_BY_SID_OUTPUT, *PFIND_BY_SID_OUTPUT;
5931
5932 typedef struct _MFT_ENUM_DATA {
5933 ULONGLONG StartFileReferenceNumber;
5934 USN LowUsn;
5935 USN HighUsn;
5936 } MFT_ENUM_DATA, *PMFT_ENUM_DATA;
5937
5938 typedef struct _CREATE_USN_JOURNAL_DATA {
5939 ULONGLONG MaximumSize;
5940 ULONGLONG AllocationDelta;
5941 } CREATE_USN_JOURNAL_DATA, *PCREATE_USN_JOURNAL_DATA;
5942
5943 typedef struct _READ_USN_JOURNAL_DATA {
5944 USN StartUsn;
5945 ULONG ReasonMask;
5946 ULONG ReturnOnlyOnClose;
5947 ULONGLONG Timeout;
5948 ULONGLONG BytesToWaitFor;
5949 ULONGLONG UsnJournalID;
5950 } READ_USN_JOURNAL_DATA, *PREAD_USN_JOURNAL_DATA;
5951
5952 typedef struct _USN_RECORD {
5953 ULONG RecordLength;
5954 USHORT MajorVersion;
5955 USHORT MinorVersion;
5956 ULONGLONG FileReferenceNumber;
5957 ULONGLONG ParentFileReferenceNumber;
5958 USN Usn;
5959 LARGE_INTEGER TimeStamp;
5960 ULONG Reason;
5961 ULONG SourceInfo;
5962 ULONG SecurityId;
5963 ULONG FileAttributes;
5964 USHORT FileNameLength;
5965 USHORT FileNameOffset;
5966 WCHAR FileName[1];
5967 } USN_RECORD, *PUSN_RECORD;
5968
5969 #define USN_PAGE_SIZE (0x1000)
5970
5971 #define USN_REASON_DATA_OVERWRITE (0x00000001)
5972 #define USN_REASON_DATA_EXTEND (0x00000002)
5973 #define USN_REASON_DATA_TRUNCATION (0x00000004)
5974 #define USN_REASON_NAMED_DATA_OVERWRITE (0x00000010)
5975 #define USN_REASON_NAMED_DATA_EXTEND (0x00000020)
5976 #define USN_REASON_NAMED_DATA_TRUNCATION (0x00000040)
5977 #define USN_REASON_FILE_CREATE (0x00000100)
5978 #define USN_REASON_FILE_DELETE (0x00000200)
5979 #define USN_REASON_EA_CHANGE (0x00000400)
5980 #define USN_REASON_SECURITY_CHANGE (0x00000800)
5981 #define USN_REASON_RENAME_OLD_NAME (0x00001000)
5982 #define USN_REASON_RENAME_NEW_NAME (0x00002000)
5983 #define USN_REASON_INDEXABLE_CHANGE (0x00004000)
5984 #define USN_REASON_BASIC_INFO_CHANGE (0x00008000)
5985 #define USN_REASON_HARD_LINK_CHANGE (0x00010000)
5986 #define USN_REASON_COMPRESSION_CHANGE (0x00020000)
5987 #define USN_REASON_ENCRYPTION_CHANGE (0x00040000)
5988 #define USN_REASON_OBJECT_ID_CHANGE (0x00080000)
5989 #define USN_REASON_REPARSE_POINT_CHANGE (0x00100000)
5990 #define USN_REASON_STREAM_CHANGE (0x00200000)
5991 #define USN_REASON_TRANSACTED_CHANGE (0x00400000)
5992 #define USN_REASON_CLOSE (0x80000000)
5993
5994 typedef struct _USN_JOURNAL_DATA {
5995 ULONGLONG UsnJournalID;
5996 USN FirstUsn;
5997 USN NextUsn;
5998 USN LowestValidUsn;
5999 USN MaxUsn;
6000 ULONGLONG MaximumSize;
6001 ULONGLONG AllocationDelta;
6002 } USN_JOURNAL_DATA, *PUSN_JOURNAL_DATA;
6003
6004 typedef struct _DELETE_USN_JOURNAL_DATA {
6005 ULONGLONG UsnJournalID;
6006 ULONG DeleteFlags;
6007 } DELETE_USN_JOURNAL_DATA, *PDELETE_USN_JOURNAL_DATA;
6008
6009 #define USN_DELETE_FLAG_DELETE (0x00000001)
6010 #define USN_DELETE_FLAG_NOTIFY (0x00000002)
6011 #define USN_DELETE_VALID_FLAGS (0x00000003)
6012
6013 typedef struct _MARK_HANDLE_INFO {
6014 ULONG UsnSourceInfo;
6015 HANDLE VolumeHandle;
6016 ULONG HandleInfo;
6017 } MARK_HANDLE_INFO, *PMARK_HANDLE_INFO;
6018
6019 #if defined(_WIN64)
6020 typedef struct _MARK_HANDLE_INFO32 {
6021 ULONG UsnSourceInfo;
6022 UINT32 VolumeHandle;
6023 ULONG HandleInfo;
6024 } MARK_HANDLE_INFO32, *PMARK_HANDLE_INFO32;
6025 #endif
6026
6027 #define USN_SOURCE_DATA_MANAGEMENT (0x00000001)
6028 #define USN_SOURCE_AUXILIARY_DATA (0x00000002)
6029 #define USN_SOURCE_REPLICATION_MANAGEMENT (0x00000004)
6030
6031 #define MARK_HANDLE_PROTECT_CLUSTERS (0x00000001)
6032 #define MARK_HANDLE_TXF_SYSTEM_LOG (0x00000004)
6033 #define MARK_HANDLE_NOT_TXF_SYSTEM_LOG (0x00000008)
6034
6035 typedef struct _BULK_SECURITY_TEST_DATA {
6036 ACCESS_MASK DesiredAccess;
6037 ULONG SecurityIds[1];
6038 } BULK_SECURITY_TEST_DATA, *PBULK_SECURITY_TEST_DATA;
6039
6040 #define VOLUME_IS_DIRTY (0x00000001)
6041 #define VOLUME_UPGRADE_SCHEDULED (0x00000002)
6042 #define VOLUME_SESSION_OPEN (0x00000004)
6043
6044 typedef struct _FILE_PREFETCH {
6045 ULONG Type;
6046 ULONG Count;
6047 ULONGLONG Prefetch[1];
6048 } FILE_PREFETCH, *PFILE_PREFETCH;
6049
6050 typedef struct _FILE_PREFETCH_EX {
6051 ULONG Type;
6052 ULONG Count;
6053 PVOID Context;
6054 ULONGLONG Prefetch[1];
6055 } FILE_PREFETCH_EX, *PFILE_PREFETCH_EX;
6056
6057 #define FILE_PREFETCH_TYPE_FOR_CREATE 0x1
6058 #define FILE_PREFETCH_TYPE_FOR_DIRENUM 0x2
6059 #define FILE_PREFETCH_TYPE_FOR_CREATE_EX 0x3
6060 #define FILE_PREFETCH_TYPE_FOR_DIRENUM_EX 0x4
6061
6062 #define FILE_PREFETCH_TYPE_MAX 0x4
6063
6064 typedef struct _FILE_OBJECTID_BUFFER {
6065 UCHAR ObjectId[16];
6066 _ANONYMOUS_UNION union {
6067 _ANONYMOUS_STRUCT struct {
6068 UCHAR BirthVolumeId[16];
6069 UCHAR BirthObjectId[16];
6070 UCHAR DomainId[16];
6071 } DUMMYSTRUCTNAME;
6072 UCHAR ExtendedInfo[48];
6073 } DUMMYUNIONNAME;
6074 } FILE_OBJECTID_BUFFER, *PFILE_OBJECTID_BUFFER;
6075
6076 typedef struct _FILE_SET_SPARSE_BUFFER {
6077 BOOLEAN SetSparse;
6078 } FILE_SET_SPARSE_BUFFER, *PFILE_SET_SPARSE_BUFFER;
6079
6080 typedef struct _FILE_ZERO_DATA_INFORMATION {
6081 LARGE_INTEGER FileOffset;
6082 LARGE_INTEGER BeyondFinalZero;
6083 } FILE_ZERO_DATA_INFORMATION, *PFILE_ZERO_DATA_INFORMATION;
6084
6085 typedef struct _FILE_ALLOCATED_RANGE_BUFFER {
6086 LARGE_INTEGER FileOffset;
6087 LARGE_INTEGER Length;
6088 } FILE_ALLOCATED_RANGE_BUFFER, *PFILE_ALLOCATED_RANGE_BUFFER;
6089
6090 typedef struct _ENCRYPTION_BUFFER {
6091 ULONG EncryptionOperation;
6092 UCHAR Private[1];
6093 } ENCRYPTION_BUFFER, *PENCRYPTION_BUFFER;
6094
6095 #define FILE_SET_ENCRYPTION 0x00000001
6096 #define FILE_CLEAR_ENCRYPTION 0x00000002
6097 #define STREAM_SET_ENCRYPTION 0x00000003
6098 #define STREAM_CLEAR_ENCRYPTION 0x00000004
6099
6100 #define MAXIMUM_ENCRYPTION_VALUE 0x00000004
6101
6102 typedef struct _DECRYPTION_STATUS_BUFFER {
6103 BOOLEAN NoEncryptedStreams;
6104 } DECRYPTION_STATUS_BUFFER, *PDECRYPTION_STATUS_BUFFER;
6105
6106 #define ENCRYPTION_FORMAT_DEFAULT (0x01)
6107
6108 #define COMPRESSION_FORMAT_SPARSE (0x4000)
6109
6110 typedef struct _REQUEST_RAW_ENCRYPTED_DATA {
6111 LONGLONG FileOffset;
6112 ULONG Length;
6113 } REQUEST_RAW_ENCRYPTED_DATA, *PREQUEST_RAW_ENCRYPTED_DATA;
6114
6115 typedef struct _ENCRYPTED_DATA_INFO {
6116 ULONGLONG StartingFileOffset;
6117 ULONG OutputBufferOffset;
6118 ULONG BytesWithinFileSize;
6119 ULONG BytesWithinValidDataLength;
6120 USHORT CompressionFormat;
6121 UCHAR DataUnitShift;
6122 UCHAR ChunkShift;
6123 UCHAR ClusterShift;
6124 UCHAR EncryptionFormat;
6125 USHORT NumberOfDataBlocks;
6126 ULONG DataBlockSize[ANYSIZE_ARRAY];
6127 } ENCRYPTED_DATA_INFO, *PENCRYPTED_DATA_INFO;
6128
6129 typedef struct _PLEX_READ_DATA_REQUEST {
6130 LARGE_INTEGER ByteOffset;
6131 ULONG ByteLength;
6132 ULONG PlexNumber;
6133 } PLEX_READ_DATA_REQUEST, *PPLEX_READ_DATA_REQUEST;
6134
6135 typedef struct _SI_COPYFILE {
6136 ULONG SourceFileNameLength;
6137 ULONG DestinationFileNameLength;
6138 ULONG Flags;
6139 WCHAR FileNameBuffer[1];
6140 } SI_COPYFILE, *PSI_COPYFILE;
6141
6142 #define COPYFILE_SIS_LINK 0x0001
6143 #define COPYFILE_SIS_REPLACE 0x0002
6144 #define COPYFILE_SIS_FLAGS 0x0003
6145
6146 #endif /* (_WIN32_WINNT >= 0x0500) */
6147
6148 #if (_WIN32_WINNT >= 0x0600)
6149
6150 typedef struct _FILE_MAKE_COMPATIBLE_BUFFER {
6151 BOOLEAN CloseDisc;
6152 } FILE_MAKE_COMPATIBLE_BUFFER, *PFILE_MAKE_COMPATIBLE_BUFFER;
6153
6154 typedef struct _FILE_SET_DEFECT_MGMT_BUFFER {
6155 BOOLEAN Disable;
6156 } FILE_SET_DEFECT_MGMT_BUFFER, *PFILE_SET_DEFECT_MGMT_BUFFER;
6157
6158 typedef struct _FILE_QUERY_SPARING_BUFFER {
6159 ULONG SparingUnitBytes;
6160 BOOLEAN SoftwareSparing;
6161 ULONG TotalSpareBlocks;
6162 ULONG FreeSpareBlocks;
6163 } FILE_QUERY_SPARING_BUFFER, *PFILE_QUERY_SPARING_BUFFER;
6164
6165 typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER {
6166 LARGE_INTEGER DirectoryCount;
6167 LARGE_INTEGER FileCount;
6168 USHORT FsFormatMajVersion;
6169 USHORT FsFormatMinVersion;
6170 WCHAR FsFormatName[12];
6171 LARGE_INTEGER FormatTime;
6172 LARGE_INTEGER LastUpdateTime;
6173 WCHAR CopyrightInfo[34];
6174 WCHAR AbstractInfo[34];
6175 WCHAR FormattingImplementationInfo[34];
6176 WCHAR LastModifyingImplementationInfo[34];
6177 } FILE_QUERY_ON_DISK_VOL_INFO_BUFFER, *PFILE_QUERY_ON_DISK_VOL_INFO_BUFFER;
6178
6179 #define SET_REPAIR_ENABLED (0x00000001)
6180 #define SET_REPAIR_VOLUME_BITMAP_SCAN (0x00000002)
6181 #define SET_REPAIR_DELETE_CROSSLINK (0x00000004)
6182 #define SET_REPAIR_WARN_ABOUT_DATA_LOSS (0x00000008)
6183 #define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT (0x00000010)
6184 #define SET_REPAIR_VALID_MASK (0x0000001F)
6185
6186 typedef enum _SHRINK_VOLUME_REQUEST_TYPES {
6187 ShrinkPrepare = 1,
6188 ShrinkCommit,
6189 ShrinkAbort
6190 } SHRINK_VOLUME_REQUEST_TYPES, *PSHRINK_VOLUME_REQUEST_TYPES;
6191
6192 typedef struct _SHRINK_VOLUME_INFORMATION {
6193 SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType;
6194 ULONGLONG Flags;
6195 LONGLONG NewNumberOfSectors;
6196 } SHRINK_VOLUME_INFORMATION, *PSHRINK_VOLUME_INFORMATION;
6197
6198 #define TXFS_RM_FLAG_LOGGING_MODE 0x00000001
6199 #define TXFS_RM_FLAG_RENAME_RM 0x00000002
6200 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000004
6201 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000008
6202 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000010
6203 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000020
6204 #define TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000040
6205 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000080
6206 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000100
6207 #define TXFS_RM_FLAG_GROW_LOG 0x00000400
6208 #define TXFS_RM_FLAG_SHRINK_LOG 0x00000800
6209 #define TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE 0x00001000
6210 #define TXFS_RM_FLAG_PRESERVE_CHANGES 0x00002000
6211 #define TXFS_RM_FLAG_RESET_RM_AT_NEXT_START 0x00004000
6212 #define TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START 0x00008000
6213 #define TXFS_RM_FLAG_PREFER_CONSISTENCY 0x00010000
6214 #define TXFS_RM_FLAG_PREFER_AVAILABILITY 0x00020000
6215
6216 #define TXFS_LOGGING_MODE_SIMPLE (0x0001)
6217 #define TXFS_LOGGING_MODE_FULL (0x0002)
6218
6219 #define TXFS_TRANSACTION_STATE_NONE 0x00
6220 #define TXFS_TRANSACTION_STATE_ACTIVE 0x01
6221 #define TXFS_TRANSACTION_STATE_PREPARED 0x02
6222 #define TXFS_TRANSACTION_STATE_NOTACTIVE 0x03
6223
6224 #define TXFS_MODIFY_RM_VALID_FLAGS (TXFS_RM_FLAG_LOGGING_MODE | \
6225 TXFS_RM_FLAG_RENAME_RM | \
6226 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
6227 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
6228 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
6229 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
6230 TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
6231 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
6232 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
6233 TXFS_RM_FLAG_SHRINK_LOG | \
6234 TXFS_RM_FLAG_GROW_LOG | \
6235 TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE | \
6236 TXFS_RM_FLAG_PRESERVE_CHANGES | \
6237 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
6238 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
6239 TXFS_RM_FLAG_PREFER_CONSISTENCY | \
6240 TXFS_RM_FLAG_PREFER_AVAILABILITY)
6241
6242 typedef struct _TXFS_MODIFY_RM {
6243 ULONG Flags;
6244 ULONG LogContainerCountMax;
6245 ULONG LogContainerCountMin;
6246 ULONG LogContainerCount;
6247 ULONG LogGrowthIncrement;
6248 ULONG LogAutoShrinkPercentage;
6249 ULONGLONG Reserved;
6250 USHORT LoggingMode;
6251 } TXFS_MODIFY_RM, *PTXFS_MODIFY_RM;
6252
6253 #define TXFS_RM_STATE_NOT_STARTED 0
6254 #define TXFS_RM_STATE_STARTING 1
6255 #define TXFS_RM_STATE_ACTIVE 2
6256 #define TXFS_RM_STATE_SHUTTING_DOWN 3
6257
6258 #define TXFS_QUERY_RM_INFORMATION_VALID_FLAGS \
6259 (TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
6260 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
6261 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
6262 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
6263 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
6264 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
6265 TXFS_RM_FLAG_PREFER_CONSISTENCY | \
6266 TXFS_RM_FLAG_PREFER_AVAILABILITY)
6267
6268 typedef struct _TXFS_QUERY_RM_INFORMATION {
6269 ULONG BytesRequired;
6270 ULONGLONG TailLsn;
6271 ULONGLONG CurrentLsn;
6272 ULONGLONG ArchiveTailLsn;
6273 ULONGLONG LogContainerSize;
6274 LARGE_INTEGER HighestVirtualClock;
6275 ULONG LogContainerCount;
6276 ULONG LogContainerCountMax;
6277 ULONG LogContainerCountMin;
6278 ULONG LogGrowthIncrement;
6279 ULONG LogAutoShrinkPercentage;
6280 ULONG Flags;
6281 USHORT LoggingMode;
6282 USHORT Reserved;
6283 ULONG RmState;
6284 ULONGLONG LogCapacity;
6285 ULONGLONG LogFree;
6286 ULONGLONG TopsSize;
6287 ULONGLONG TopsUsed;
6288 ULONGLONG TransactionCount;
6289 ULONGLONG OnePCCount;
6290 ULONGLONG TwoPCCount;
6291 ULONGLONG NumberLogFileFull;
6292 ULONGLONG OldestTransactionAge;
6293 GUID RMName;
6294 ULONG TmLogPathOffset;
6295 } TXFS_QUERY_RM_INFORMATION, *PTXFS_QUERY_RM_INFORMATION;
6296
6297 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN 0x01
6298 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK 0x02
6299
6300 #define TXFS_ROLLFORWARD_REDO_VALID_FLAGS \
6301 (TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN | \
6302 TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK)
6303
6304 typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION {
6305 LARGE_INTEGER LastVirtualClock;
6306 ULONGLONG LastRedoLsn;
6307 ULONGLONG HighestRecoveryLsn;
6308 ULONG Flags;
6309 } TXFS_ROLLFORWARD_REDO_INFORMATION, *PTXFS_ROLLFORWARD_REDO_INFORMATION;
6310
6311 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000001
6312 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000002
6313 #define TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE 0x00000004
6314 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000008
6315 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000010
6316 #define TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000020
6317 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000040
6318 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000080
6319
6320 #define TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT 0x00000200
6321 #define TXFS_START_RM_FLAG_LOGGING_MODE 0x00000400
6322 #define TXFS_START_RM_FLAG_PRESERVE_CHANGES 0x00000800
6323
6324 #define TXFS_START_RM_FLAG_PREFER_CONSISTENCY 0x00001000
6325 #define TXFS_START_RM_FLAG_PREFER_AVAILABILITY 0x00002000
6326
6327 #define TXFS_START_RM_VALID_FLAGS \
6328 (TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
6329 TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
6330 TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE | \
6331 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
6332 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
6333 TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
6334 TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT | \
6335 TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
6336 TXFS_START_RM_FLAG_LOGGING_MODE | \
6337 TXFS_START_RM_FLAG_PRESERVE_CHANGES | \
6338 TXFS_START_RM_FLAG_PREFER_CONSISTENCY | \
6339 TXFS_START_RM_FLAG_PREFER_AVAILABILITY)
6340
6341 typedef struct _TXFS_START_RM_INFORMATION {
6342 ULONG Flags;
6343 ULONGLONG LogContainerSize;
6344 ULONG LogContainerCountMin;
6345 ULONG LogContainerCountMax;
6346 ULONG LogGrowthIncrement;
6347 ULONG LogAutoShrinkPercentage;
6348 ULONG TmLogPathOffset;
6349 USHORT TmLogPathLength;
6350 USHORT LoggingMode;
6351 USHORT LogPathLength;
6352 USHORT Reserved;
6353 WCHAR LogPath[1];
6354 } TXFS_START_RM_INFORMATION, *PTXFS_START_RM_INFORMATION;
6355
6356 typedef struct _TXFS_GET_METADATA_INFO_OUT {
6357 struct {
6358 LONGLONG LowPart;
6359 LONGLONG HighPart;
6360 } TxfFileId;
6361 GUID LockingTransaction;
6362 ULONGLONG LastLsn;
6363 ULONG TransactionState;
6364 } TXFS_GET_METADATA_INFO_OUT, *PTXFS_GET_METADATA_INFO_OUT;
6365
6366 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_CREATED 0x00000001
6367 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_DELETED 0x00000002
6368
6369 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY {
6370 ULONGLONG Offset;
6371 ULONG NameFlags;
6372 LONGLONG FileId;
6373 ULONG Reserved1;
6374 ULONG Reserved2;
6375 LONGLONG Reserved3;
6376 WCHAR FileName[1];
6377 } TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY, *PTXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY;
6378
6379 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES {
6380 GUID KtmTransaction;
6381 ULONGLONG NumberOfFiles;
6382 ULONGLONG BufferSizeRequired;
6383 ULONGLONG Offset;
6384 } TXFS_LIST_TRANSACTION_LOCKED_FILES, *PTXFS_LIST_TRANSACTION_LOCKED_FILES;
6385
6386 typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY {
6387 GUID TransactionId;
6388 ULONG TransactionState;
6389 ULONG Reserved1;
6390 ULONG Reserved2;
6391 LONGLONG Reserved3;
6392 } TXFS_LIST_TRANSACTIONS_ENTRY, *PTXFS_LIST_TRANSACTIONS_ENTRY;
6393
6394 typedef struct _TXFS_LIST_TRANSACTIONS {
6395 ULONGLONG NumberOfTransactions;
6396 ULONGLONG BufferSizeRequired;
6397 } TXFS_LIST_TRANSACTIONS, *PTXFS_LIST_TRANSACTIONS;
6398
6399 typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT {
6400 _ANONYMOUS_UNION union {
6401 ULONG BufferLength;
6402 UCHAR Buffer[1];
6403 } DUMMYUNIONNAME;
6404 } TXFS_READ_BACKUP_INFORMATION_OUT, *PTXFS_READ_BACKUP_INFORMATION_OUT;
6405
6406 typedef struct _TXFS_WRITE_BACKUP_INFORMATION {
6407 UCHAR Buffer[1];
6408 } TXFS_WRITE_BACKUP_INFORMATION, *PTXFS_WRITE_BACKUP_INFORMATION;
6409
6410 #define TXFS_TRANSACTED_VERSION_NONTRANSACTED 0xFFFFFFFE
6411 #define TXFS_TRANSACTED_VERSION_UNCOMMITTED 0xFFFFFFFF
6412
6413 typedef struct _TXFS_GET_TRANSACTED_VERSION {
6414 ULONG ThisBaseVersion;
6415 ULONG LatestVersion;
6416 USHORT ThisMiniVersion;
6417 USHORT FirstMiniVersion;
6418 USHORT LatestMiniVersion;
6419 } TXFS_GET_TRANSACTED_VERSION, *PTXFS_GET_TRANSACTED_VERSION;
6420
6421 #define TXFS_SAVEPOINT_SET 0x00000001
6422 #define TXFS_SAVEPOINT_ROLLBACK 0x00000002
6423 #define TXFS_SAVEPOINT_CLEAR 0x00000004
6424 #define TXFS_SAVEPOINT_CLEAR_ALL 0x00000010
6425
6426 typedef struct _TXFS_SAVEPOINT_INFORMATION {
6427 HANDLE KtmTransaction;
6428 ULONG ActionCode;
6429 ULONG SavepointId;
6430 } TXFS_SAVEPOINT_INFORMATION, *PTXFS_SAVEPOINT_INFORMATION;
6431
6432 typedef struct _TXFS_CREATE_MINIVERSION_INFO {
6433 USHORT StructureVersion;
6434 USHORT StructureLength;
6435 ULONG BaseVersion;
6436 USHORT MiniVersion;
6437 } TXFS_CREATE_MINIVERSION_INFO, *PTXFS_CREATE_MINIVERSION_INFO;
6438
6439 typedef struct _TXFS_TRANSACTION_ACTIVE_INFO {
6440 BOOLEAN TransactionsActiveAtSnapshot;
6441 } TXFS_TRANSACTION_ACTIVE_INFO, *PTXFS_TRANSACTION_ACTIVE_INFO;
6442
6443 #endif /* (_WIN32_WINNT >= 0x0600) */
6444
6445 #if (_WIN32_WINNT >= 0x0601)
6446
6447 #define MARK_HANDLE_REALTIME (0x00000020)
6448 #define MARK_HANDLE_NOT_REALTIME (0x00000040)
6449
6450 #define NO_8DOT3_NAME_PRESENT (0x00000001)
6451 #define REMOVED_8DOT3_NAME (0x00000002)
6452
6453 #define PERSISTENT_VOLUME_STATE_SHORT_NAME_CREATION_DISABLED (0x00000001)
6454
6455 typedef struct _BOOT_AREA_INFO {
6456 ULONG BootSectorCount;
6457 struct {
6458 LARGE_INTEGER Offset;
6459 } BootSectors[2];
6460 } BOOT_AREA_INFO, *PBOOT_AREA_INFO;
6461
6462 typedef struct _RETRIEVAL_POINTER_BASE {
6463 LARGE_INTEGER FileAreaOffset;
6464 } RETRIEVAL_POINTER_BASE, *PRETRIEVAL_POINTER_BASE;
6465
6466 typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION {
6467 ULONG VolumeFlags;
6468 ULONG FlagMask;
6469 ULONG Version;
6470 ULONG Reserved;
6471 } FILE_FS_PERSISTENT_VOLUME_INFORMATION, *PFILE_FS_PERSISTENT_VOLUME_INFORMATION;
6472
6473 typedef struct _FILE_SYSTEM_RECOGNITION_INFORMATION {
6474 CHAR FileSystem[9];
6475 } FILE_SYSTEM_RECOGNITION_INFORMATION, *PFILE_SYSTEM_RECOGNITION_INFORMATION;
6476
6477 #define OPLOCK_LEVEL_CACHE_READ (0x00000001)
6478 #define OPLOCK_LEVEL_CACHE_HANDLE (0x00000002)
6479 #define OPLOCK_LEVEL_CACHE_WRITE (0x00000004)
6480
6481 #define REQUEST_OPLOCK_INPUT_FLAG_REQUEST (0x00000001)
6482 #define REQUEST_OPLOCK_INPUT_FLAG_ACK (0x00000002)
6483 #define REQUEST_OPLOCK_INPUT_FLAG_COMPLETE_ACK_ON_CLOSE (0x00000004)
6484
6485 #define REQUEST_OPLOCK_CURRENT_VERSION 1
6486
6487 typedef struct _REQUEST_OPLOCK_INPUT_BUFFER {
6488 USHORT StructureVersion;
6489 USHORT StructureLength;
6490 ULONG RequestedOplockLevel;
6491 ULONG Flags;
6492 } REQUEST_OPLOCK_INPUT_BUFFER, *PREQUEST_OPLOCK_INPUT_BUFFER;
6493
6494 #define REQUEST_OPLOCK_OUTPUT_FLAG_ACK_REQUIRED (0x00000001)
6495 #define REQUEST_OPLOCK_OUTPUT_FLAG_MODES_PROVIDED (0x00000002)
6496
6497 typedef struct _REQUEST_OPLOCK_OUTPUT_BUFFER {
6498 USHORT StructureVersion;
6499 USHORT StructureLength;
6500 ULONG OriginalOplockLevel;
6501 ULONG NewOplockLevel;
6502 ULONG Flags;
6503 ACCESS_MASK AccessMode;
6504 USHORT ShareMode;
6505 } REQUEST_OPLOCK_OUTPUT_BUFFER, *PREQUEST_OPLOCK_OUTPUT_BUFFER;
6506
6507 #define SD_GLOBAL_CHANGE_TYPE_MACHINE_SID 1
6508
6509 typedef struct _SD_CHANGE_MACHINE_SID_INPUT {
6510 USHORT CurrentMachineSIDOffset;
6511 USHORT CurrentMachineSIDLength;
6512 USHORT NewMachineSIDOffset;
6513 USHORT NewMachineSIDLength;
6514 } SD_CHANGE_MACHINE_SID_INPUT, *PSD_CHANGE_MACHINE_SID_INPUT;
6515
6516 typedef struct _SD_CHANGE_MACHINE_SID_OUTPUT {
6517 ULONGLONG NumSDChangedSuccess;
6518 ULONGLONG NumSDChangedFail;
6519 ULONGLONG NumSDUnused;
6520 ULONGLONG NumSDTotal;
6521 ULONGLONG NumMftSDChangedSuccess;
6522 ULONGLONG NumMftSDChangedFail;
6523 ULONGLONG NumMftSDTotal;
6524 } SD_CHANGE_MACHINE_SID_OUTPUT, *PSD_CHANGE_MACHINE_SID_OUTPUT;
6525
6526 typedef struct _SD_GLOBAL_CHANGE_INPUT {
6527 ULONG Flags;
6528 ULONG ChangeType;
6529 _ANONYMOUS_UNION union {
6530 SD_CHANGE_MACHINE_SID_INPUT SdChange;
6531 } DUMMYUNIONNAME;
6532 } SD_GLOBAL_CHANGE_INPUT, *PSD_GLOBAL_CHANGE_INPUT;
6533
6534 typedef struct _SD_GLOBAL_CHANGE_OUTPUT {
6535 ULONG Flags;
6536 ULONG ChangeType;
6537 _ANONYMOUS_UNION union {
6538 SD_CHANGE_MACHINE_SID_OUTPUT SdChange;
6539 } DUMMYUNIONNAME;
6540 } SD_GLOBAL_CHANGE_OUTPUT, *PSD_GLOBAL_CHANGE_OUTPUT;
6541
6542 #define ENCRYPTED_DATA_INFO_SPARSE_FILE 1
6543
6544 typedef struct _EXTENDED_ENCRYPTED_DATA_INFO {
6545 ULONG ExtendedCode;
6546 ULONG Length;
6547 ULONG Flags;
6548 ULONG Reserved;
6549 } EXTENDED_ENCRYPTED_DATA_INFO, *PEXTENDED_ENCRYPTED_DATA_INFO;
6550
6551 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_INPUT {
6552 ULONG Flags;
6553 ULONG NumberOfClusters;
6554 LARGE_INTEGER Cluster[1];
6555 } LOOKUP_STREAM_FROM_CLUSTER_INPUT, *PLOOKUP_STREAM_FROM_CLUSTER_INPUT;
6556
6557 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_OUTPUT {
6558 ULONG Offset;
6559 ULONG NumberOfMatches;
6560 ULONG BufferSizeRequired;
6561 } LOOKUP_STREAM_FROM_CLUSTER_OUTPUT, *PLOOKUP_STREAM_FROM_CLUSTER_OUTPUT;
6562
6563 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_PAGE_FILE 0x00000001
6564 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_DENY_DEFRAG_SET 0x00000002
6565 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_FS_SYSTEM_FILE 0x00000004
6566 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_TXF_SYSTEM_FILE 0x00000008
6567
6568 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_MASK 0xff000000
6569 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_DATA 0x01000000
6570 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_INDEX 0x02000000
6571 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_SYSTEM 0x03000000
6572
6573 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_ENTRY {
6574 ULONG OffsetToNext;
6575 ULONG Flags;
6576 LARGE_INTEGER Reserved;
6577 LARGE_INTEGER Cluster;
6578 WCHAR FileName[1];
6579 } LOOKUP_STREAM_FROM_CLUSTER_ENTRY, *PLOOKUP_STREAM_FROM_CLUSTER_ENTRY;
6580
6581 typedef struct _FILE_TYPE_NOTIFICATION_INPUT {
6582 ULONG Flags;
6583 ULONG NumFileTypeIDs;
6584 GUID FileTypeID[1];
6585 } FILE_TYPE_NOTIFICATION_INPUT, *PFILE_TYPE_NOTIFICATION_INPUT;
6586
6587 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_BEGIN 0x00000001
6588 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_END 0x00000002
6589
6590 DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_PAGE_FILE, 0x0d0a64a1, 0x38fc, 0x4db8, 0x9f, 0xe7, 0x3f, 0x43, 0x52, 0xcd, 0x7c, 0x5c);
6591 DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_HIBERNATION_FILE, 0xb7624d64, 0xb9a3, 0x4cf8, 0x80, 0x11, 0x5b, 0x86, 0xc9, 0x40, 0xe7, 0xb7);
6592 DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_CRASHDUMP_FILE, 0x9d453eb7, 0xd2a6, 0x4dbd, 0xa2, 0xe3, 0xfb, 0xd0, 0xed, 0x91, 0x09, 0xa9);
6593
6594 #ifndef _VIRTUAL_STORAGE_TYPE_DEFINED
6595 #define _VIRTUAL_STORAGE_TYPE_DEFINED
6596 typedef struct _VIRTUAL_STORAGE_TYPE {
6597 ULONG DeviceId;
6598 GUID VendorId;
6599 } VIRTUAL_STORAGE_TYPE, *PVIRTUAL_STORAGE_TYPE;
6600 #endif
6601
6602 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST {
6603 ULONG RequestLevel;
6604 ULONG RequestFlags;
6605 } STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST, *PSTORAGE_QUERY_DEPENDENT_VOLUME_REQUEST;
6606
6607 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_HOST_VOLUMES 0x1
6608 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_GUEST_VOLUMES 0x2
6609
6610 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY {
6611 ULONG EntryLength;
6612 ULONG DependencyTypeFlags;
6613 ULONG ProviderSpecificFlags;
6614 VIRTUAL_STORAGE_TYPE VirtualStorageType;
6615 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY;
6616
6617 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY {
6618 ULONG EntryLength;
6619 ULONG DependencyTypeFlags;
6620 ULONG ProviderSpecificFlags;
6621 VIRTUAL_STORAGE_TYPE VirtualStorageType;
6622 ULONG AncestorLevel;
6623 ULONG HostVolumeNameOffset;
6624 ULONG HostVolumeNameSize;
6625 ULONG DependentVolumeNameOffset;
6626 ULONG DependentVolumeNameSize;
6627 ULONG RelativePathOffset;
6628 ULONG RelativePathSize;
6629 ULONG DependentDeviceNameOffset;
6630 ULONG DependentDeviceNameSize;
6631 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY;
6632
6633 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE {
6634 ULONG ResponseLevel;
6635 ULONG NumberEntries;
6636 _ANONYMOUS_UNION union {
6637 STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY Lev1Depends[0];
6638 STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY Lev2Depends[0];
6639 } DUMMYUNIONNAME;
6640 } STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE, *PSTORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE;
6641
6642 #endif /* (_WIN32_WINNT >= 0x0601) */
6643
6644 typedef struct _FILESYSTEM_STATISTICS {
6645 USHORT FileSystemType;
6646 USHORT Version;
6647 ULONG SizeOfCompleteStructure;
6648 ULONG UserFileReads;
6649 ULONG UserFileReadBytes;
6650 ULONG UserDiskReads;
6651 ULONG UserFileWrites;
6652 ULONG UserFileWriteBytes;
6653 ULONG UserDiskWrites;
6654 ULONG MetaDataReads;
6655 ULONG MetaDataReadBytes;
6656 ULONG MetaDataDiskReads;
6657 ULONG MetaDataWrites;
6658 ULONG MetaDataWriteBytes;
6659 ULONG MetaDataDiskWrites;
6660 } FILESYSTEM_STATISTICS, *PFILESYSTEM_STATISTICS;
6661
6662 #define FILESYSTEM_STATISTICS_TYPE_NTFS 1
6663 #define FILESYSTEM_STATISTICS_TYPE_FAT 2
6664 #define FILESYSTEM_STATISTICS_TYPE_EXFAT 3
6665
6666 typedef struct _FAT_STATISTICS {
6667 ULONG CreateHits;
6668 ULONG SuccessfulCreates;
6669 ULONG FailedCreates;
6670 ULONG NonCachedReads;
6671 ULONG NonCachedReadBytes;
6672 ULONG NonCachedWrites;
6673 ULONG NonCachedWriteBytes;
6674 ULONG NonCachedDiskReads;
6675 ULONG NonCachedDiskWrites;
6676 } FAT_STATISTICS, *PFAT_STATISTICS;
6677
6678 typedef struct _EXFAT_STATISTICS {
6679 ULONG CreateHits;
6680 ULONG SuccessfulCreates;
6681 ULONG FailedCreates;
6682 ULONG NonCachedReads;
6683 ULONG NonCachedReadBytes;
6684 ULONG NonCachedWrites;
6685 ULONG NonCachedWriteBytes;
6686 ULONG NonCachedDiskReads;
6687 ULONG NonCachedDiskWrites;
6688 } EXFAT_STATISTICS, *PEXFAT_STATISTICS;
6689
6690 typedef struct _NTFS_STATISTICS {
6691 ULONG LogFileFullExceptions;
6692 ULONG OtherExceptions;
6693 ULONG MftReads;
6694 ULONG MftReadBytes;
6695 ULONG MftWrites;
6696 ULONG MftWriteBytes;
6697 struct {
6698 USHORT Write;
6699 USHORT Create;
6700 USHORT SetInfo;
6701 USHORT Flush;
6702 } MftWritesUserLevel;
6703 USHORT MftWritesFlushForLogFileFull;
6704 USHORT MftWritesLazyWriter;
6705 USHORT MftWritesUserRequest;
6706 ULONG Mft2Writes;
6707 ULONG Mft2WriteBytes;
6708 struct {
6709 USHORT Write;
6710 USHORT Create;
6711 USHORT SetInfo;
6712 USHORT Flush;
6713 } Mft2WritesUserLevel;
6714 USHORT Mft2WritesFlushForLogFileFull;
6715 USHORT Mft2WritesLazyWriter;
6716 USHORT Mft2WritesUserRequest;
6717 ULONG RootIndexReads;
6718 ULONG RootIndexReadBytes;
6719 ULONG RootIndexWrites;
6720 ULONG RootIndexWriteBytes;
6721 ULONG BitmapReads;
6722 ULONG BitmapReadBytes;
6723 ULONG BitmapWrites;
6724 ULONG BitmapWriteBytes;
6725 USHORT BitmapWritesFlushForLogFileFull;
6726 USHORT BitmapWritesLazyWriter;
6727 USHORT BitmapWritesUserRequest;
6728 struct {
6729 USHORT Write;
6730 USHORT Create;
6731 USHORT SetInfo;
6732 } BitmapWritesUserLevel;
6733 ULONG MftBitmapReads;
6734 ULONG MftBitmapReadBytes;
6735 ULONG MftBitmapWrites;
6736 ULONG MftBitmapWriteBytes;
6737 USHORT MftBitmapWritesFlushForLogFileFull;
6738 USHORT MftBitmapWritesLazyWriter;
6739 USHORT MftBitmapWritesUserRequest;
6740 struct {
6741 USHORT Write;
6742 USHORT Create;
6743 USHORT SetInfo;
6744 USHORT Flush;
6745 } MftBitmapWritesUserLevel;
6746 ULONG UserIndexReads;
6747 ULONG UserIndexReadBytes;
6748 ULONG UserIndexWrites;
6749 ULONG UserIndexWriteBytes;
6750 ULONG LogFileReads;
6751 ULONG LogFileReadBytes;
6752 ULONG LogFileWrites;
6753 ULONG LogFileWriteBytes;
6754 struct {
6755 ULONG Calls;
6756 ULONG Clusters;
6757 ULONG Hints;
6758 ULONG RunsReturned;
6759 ULONG HintsHonored;
6760 ULONG HintsClusters;
6761 ULONG Cache;
6762 ULONG CacheClusters;
6763 ULONG CacheMiss;
6764 ULONG CacheMissClusters;
6765 } Allocate;
6766 } NTFS_STATISTICS, *PNTFS_STATISTICS;
6767
6768 #endif /* _FILESYSTEMFSCTL_ */
6769
6770 #define SYMLINK_FLAG_RELATIVE 1
6771
6772 typedef struct _REPARSE_DATA_BUFFER {
6773 ULONG ReparseTag;
6774 USHORT ReparseDataLength;
6775 USHORT Reserved;
6776 _ANONYMOUS_UNION union {
6777 struct {
6778 USHORT SubstituteNameOffset;
6779 USHORT SubstituteNameLength;
6780 USHORT PrintNameOffset;
6781 USHORT PrintNameLength;
6782 ULONG Flags;
6783 WCHAR PathBuffer[1];
6784 } SymbolicLinkReparseBuffer;
6785 struct {
6786 USHORT SubstituteNameOffset;
6787 USHORT SubstituteNameLength;
6788 USHORT PrintNameOffset;
6789 USHORT PrintNameLength;
6790 WCHAR PathBuffer[1];
6791 } MountPointReparseBuffer;
6792 struct {
6793 UCHAR DataBuffer[1];
6794 } GenericReparseBuffer;
6795 } DUMMYUNIONNAME;
6796 } REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
6797
6798 #define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
6799
6800 typedef struct _REPARSE_GUID_DATA_BUFFER {
6801 ULONG ReparseTag;
6802 USHORT ReparseDataLength;
6803 USHORT Reserved;
6804 GUID ReparseGuid;
6805 struct {
6806 UCHAR DataBuffer[1];
6807 } GenericReparseBuffer;
6808 } REPARSE_GUID_DATA_BUFFER, *PREPARSE_GUID_DATA_BUFFER;
6809
6810 #define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
6811
6812 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 )
6813
6814 /* Reserved reparse tags */
6815 #define IO_REPARSE_TAG_RESERVED_ZERO (0)
6816 #define IO_REPARSE_TAG_RESERVED_ONE (1)
6817 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE
6818
6819 #define IsReparseTagMicrosoft(_tag) (((_tag) & 0x80000000))
6820 #define IsReparseTagNameSurrogate(_tag) (((_tag) & 0x20000000))
6821
6822 #define IO_REPARSE_TAG_VALID_VALUES (0xF000FFFF)
6823
6824 #define IsReparseTagValid(tag) ( \
6825 !((tag) & ~IO_REPARSE_TAG_VALID_VALUES) && \
6826 ((tag) > IO_REPARSE_TAG_RESERVED_RANGE) \
6827 )
6828
6829 /* MicroSoft reparse point tags */
6830 #define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L)
6831 #define IO_REPARSE_TAG_HSM (0xC0000004L)
6832 #define IO_REPARSE_TAG_DRIVE_EXTENDER (0x80000005L)
6833 #define IO_REPARSE_TAG_HSM2 (0x80000006L)
6834 #define IO_REPARSE_TAG_SIS (0x80000007L)
6835 #define IO_REPARSE_TAG_WIM (0x80000008L)
6836 #define IO_REPARSE_TAG_CSV (0x80000009L)
6837 #define IO_REPARSE_TAG_DFS (0x8000000AL)
6838 #define IO_REPARSE_TAG_FILTER_MANAGER (0x8000000BL)
6839 #define IO_REPARSE_TAG_SYMLINK (0xA000000CL)
6840 #define IO_REPARSE_TAG_IIS_CACHE (0xA0000010L)
6841 #define IO_REPARSE_TAG_DFSR (0x80000012L)
6842
6843 #pragma pack(4)
6844 typedef struct _REPARSE_INDEX_KEY {
6845 ULONG FileReparseTag;
6846 LARGE_INTEGER FileId;
6847 } REPARSE_INDEX_KEY, *PREPARSE_INDEX_KEY;
6848 #pragma pack()
6849
6850 #define FSCTL_LMR_GET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,58,METHOD_BUFFERED,FILE_ANY_ACCESS)
6851 #define FSCTL_LMR_SET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,59,METHOD_BUFFERED,FILE_ANY_ACCESS)
6852 #define IOCTL_LMR_ARE_FILE_OBJECTS_ON_SAME_SERVER CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,60,METHOD_BUFFERED,FILE_ANY_ACCESS)
6853
6854 #define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
6855 #define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
6856 #define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
6857 #define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
6858 #define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
6859 #define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
6860 #define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
6861 #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
6862 #define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
6863 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
6864 #define FSCTL_PIPE_GET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
6865 #define FSCTL_PIPE_SET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
6866 #define FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
6867 #define FSCTL_PIPE_SET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
6868 #define FSCTL_PIPE_GET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
6869 #define FSCTL_PIPE_SET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
6870 #define FSCTL_PIPE_FLUSH CTL_CODE(FILE_DEVICE_NAMED_PIPE, 16, METHOD_BUFFERED, FILE_WRITE_DATA)
6871
6872 #define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
6873 #define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
6874 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
6875 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
6876
6877 #define FILE_PIPE_READ_DATA 0x00000000
6878 #define FILE_PIPE_WRITE_SPACE 0x00000001
6879
6880 typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER {
6881 HANDLE EventHandle;
6882 ULONG KeyValue;
6883 } FILE_PIPE_ASSIGN_EVENT_BUFFER, *PFILE_PIPE_ASSIGN_EVENT_BUFFER;
6884
6885 typedef struct _FILE_PIPE_EVENT_BUFFER {
6886 ULONG NamedPipeState;
6887 ULONG EntryType;
6888 ULONG ByteCount;
6889 ULONG KeyValue;
6890 ULONG NumberRequests;
6891 } FILE_PIPE_EVENT_BUFFER, *PFILE_PIPE_EVENT_BUFFER;
6892
6893 typedef struct _FILE_PIPE_PEEK_BUFFER {
6894 ULONG NamedPipeState;
6895 ULONG ReadDataAvailable;
6896 ULONG NumberOfMessages;
6897 ULONG MessageLength;
6898 CHAR Data[1];
6899 } FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
6900
6901 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER {
6902 LARGE_INTEGER Timeout;
6903 ULONG NameLength;
6904 BOOLEAN TimeoutSpecified;
6905 WCHAR Name[1];
6906 } FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
6907
6908 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER {
6909 #if !defined(BUILD_WOW6432)
6910 PVOID ClientSession;
6911 PVOID ClientProcess;
6912 #else
6913 ULONGLONG ClientSession;
6914 ULONGLONG ClientProcess;
6915 #endif
6916 } FILE_PIPE_CLIENT_PROCESS_BUFFER, *PFILE_PIPE_CLIENT_PROCESS_BUFFER;
6917
6918 #define FILE_PIPE_COMPUTER_NAME_LENGTH 15
6919
6920 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER_EX {
6921 #if !defined(BUILD_WOW6432)
6922 PVOID ClientSession;
6923 PVOID ClientProcess;
6924 #else
6925 ULONGLONG ClientSession;
6926 ULONGLONG ClientProcess;
6927 #endif
6928 USHORT ClientComputerNameLength;
6929 WCHAR ClientComputerBuffer[FILE_PIPE_COMPUTER_NAME_LENGTH+1];
6930 } FILE_PIPE_CLIENT_PROCESS_BUFFER_EX, *PFILE_PIPE_CLIENT_PROCESS_BUFFER_EX;
6931
6932 #define FSCTL_MAILSLOT_PEEK CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
6933
6934 typedef enum _LINK_TRACKING_INFORMATION_TYPE {
6935 NtfsLinkTrackingInformation,
6936 DfsLinkTrackingInformation
6937 } LINK_TRACKING_INFORMATION_TYPE, *PLINK_TRACKING_INFORMATION_TYPE;
6938
6939 typedef struct _LINK_TRACKING_INFORMATION {
6940 LINK_TRACKING_INFORMATION_TYPE Type;
6941 UCHAR VolumeId[16];
6942 } LINK_TRACKING_INFORMATION, *PLINK_TRACKING_INFORMATION;
6943
6944 typedef struct _REMOTE_LINK_TRACKING_INFORMATION {
6945 PVOID TargetFileObject;
6946 ULONG TargetLinkTrackingInformationLength;
6947 UCHAR TargetLinkTrackingInformationBuffer[1];
6948 } REMOTE_LINK_TRACKING_INFORMATION, *PREMOTE_LINK_TRACKING_INFORMATION;
6949
6950 #define IO_OPEN_PAGING_FILE 0x0002
6951 #define IO_OPEN_TARGET_DIRECTORY 0x0004
6952 #define IO_STOP_ON_SYMLINK 0x0008
6953 #define IO_MM_PAGING_FILE 0x0010
6954
6955 _Function_class_(DRIVER_FS_NOTIFICATION)
6956 typedef VOID
6957 (NTAPI DRIVER_FS_NOTIFICATION)(
6958 _In_ PDEVICE_OBJECT DeviceObject,
6959 _In_ BOOLEAN FsActive);
6960 typedef DRIVER_FS_NOTIFICATION *PDRIVER_FS_NOTIFICATION;
6961
6962 typedef enum _FS_FILTER_SECTION_SYNC_TYPE {
6963 SyncTypeOther = 0,
6964 SyncTypeCreateSection
6965 } FS_FILTER_SECTION_SYNC_TYPE, *PFS_FILTER_SECTION_SYNC_TYPE;
6966
6967 typedef enum _FS_FILTER_STREAM_FO_NOTIFICATION_TYPE {
6968 NotifyTypeCreate = 0,
6969 NotifyTypeRetired
6970 } FS_FILTER_STREAM_FO_NOTIFICATION_TYPE, *PFS_FILTER_STREAM_FO_NOTIFICATION_TYPE;
6971
6972 typedef union _FS_FILTER_PARAMETERS {
6973 struct {
6974 PLARGE_INTEGER EndingOffset;
6975 PERESOURCE *ResourceToRelease;
6976 } AcquireForModifiedPageWriter;
6977 struct {
6978 PERESOURCE ResourceToRelease;
6979 } ReleaseForModifiedPageWriter;
6980 struct {
6981 FS_FILTER_SECTION_SYNC_TYPE SyncType;
6982 ULONG PageProtection;
6983 } AcquireForSectionSynchronization;
6984 struct {
6985 FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType;
6986 BOOLEAN POINTER_ALIGNMENT SafeToRecurse;
6987 } NotifyStreamFileObject;
6988 struct {
6989 PVOID Argument1;
6990 PVOID Argument2;
6991 PVOID Argument3;
6992 PVOID Argument4;
6993 PVOID Argument5;
6994 } Others;
6995 } FS_FILTER_PARAMETERS, *PFS_FILTER_PARAMETERS;
6996
6997 #define FS_FILTER_ACQUIRE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-1
6998 #define FS_FILTER_RELEASE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-2
6999 #define FS_FILTER_ACQUIRE_FOR_MOD_WRITE (UCHAR)-3
7000 #define FS_FILTER_RELEASE_FOR_MOD_WRITE (UCHAR)-4
7001 #define FS_FILTER_ACQUIRE_FOR_CC_FLUSH (UCHAR)-5
7002 #define FS_FILTER_RELEASE_FOR_CC_FLUSH (UCHAR)-6
7003
7004 typedef struct _FS_FILTER_CALLBACK_DATA {
7005 ULONG SizeOfFsFilterCallbackData;
7006 UCHAR Operation;
7007 UCHAR Reserved;
7008 struct _DEVICE_OBJECT *DeviceObject;
7009 struct _FILE_OBJECT *FileObject;
7010 FS_FILTER_PARAMETERS Parameters;
7011 } FS_FILTER_CALLBACK_DATA, *PFS_FILTER_CALLBACK_DATA;
7012
7013 typedef NTSTATUS
7014 (NTAPI *PFS_FILTER_CALLBACK) (
7015 _In_ PFS_FILTER_CALLBACK_DATA Data,
7016 _Out_ PVOID *CompletionContext);
7017
7018 typedef VOID
7019 (NTAPI *PFS_FILTER_COMPLETION_CALLBACK) (
7020 _In_ PFS_FILTER_CALLBACK_DATA Data,
7021 _In_ NTSTATUS OperationStatus,
7022 _In_ PVOID CompletionContext);
7023
7024 typedef struct _FS_FILTER_CALLBACKS {
7025 ULONG SizeOfFsFilterCallbacks;
7026 ULONG Reserved;
7027 PFS_FILTER_CALLBACK PreAcquireForSectionSynchronization;
7028 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization;
7029 PFS_FILTER_CALLBACK PreReleaseForSectionSynchronization;
7030 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization;
7031 PFS_FILTER_CALLBACK PreAcquireForCcFlush;
7032 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush;
7033 PFS_FILTER_CALLBACK PreReleaseForCcFlush;
7034 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush;
7035 PFS_FILTER_CALLBACK PreAcquireForModifiedPageWriter;
7036 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter;
7037 PFS_FILTER_CALLBACK PreReleaseForModifiedPageWriter;
7038 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter;
7039 } FS_FILTER_CALLBACKS, *PFS_FILTER_CALLBACKS;
7040
7041 extern NTKERNELAPI KSPIN_LOCK IoStatisticsLock;
7042 extern NTKERNELAPI ULONG IoReadOperationCount;
7043 extern NTKERNELAPI ULONG IoWriteOperationCount;
7044 extern NTKERNELAPI ULONG IoOtherOperationCount;
7045 extern NTKERNELAPI LARGE_INTEGER IoReadTransferCount;
7046 extern NTKERNELAPI LARGE_INTEGER IoWriteTransferCount;
7047 extern NTKERNELAPI LARGE_INTEGER IoOtherTransferCount;
7048
7049 #define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE 64
7050 #define IO_FILE_OBJECT_PAGED_POOL_CHARGE 1024
7051
7052 #if (NTDDI_VERSION >= NTDDI_VISTA)
7053 typedef struct _IO_PRIORITY_INFO {
7054 ULONG Size;
7055 ULONG ThreadPriority;
7056 ULONG PagePriority;
7057 IO_PRIORITY_HINT IoPriority;
7058 } IO_PRIORITY_INFO, *PIO_PRIORITY_INFO;
7059 #endif
7060 $endif (_NTIFS_)