1 $
if (_WDMDDK_
|| _NTDDK_
)
2 /******************************************************************************
4 ******************************************************************************/
8 #define WDM_MAJORVERSION 0x06
9 #define WDM_MINORVERSION 0x00
13 #ifndef USE_DMA_MACROS
14 #define USE_DMA_MACROS
17 #ifndef NO_LEGACY_DRIVERS
18 #define NO_LEGACY_DRIVERS
21 #endif /* defined(_WIN64) */
23 #define STATUS_CONTINUE_COMPLETION STATUS_SUCCESS
25 #define CONNECT_FULLY_SPECIFIED 0x1
26 #define CONNECT_LINE_BASED 0x2
27 #define CONNECT_MESSAGE_BASED 0x3
28 #define CONNECT_FULLY_SPECIFIED_GROUP 0x4
29 #define CONNECT_CURRENT_VERSION 0x4
31 #define POOL_COLD_ALLOCATION 256
32 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
33 #define POOL_RAISE_IF_ALLOCATION_FAILURE 16
35 #define IO_TYPE_ADAPTER 1
36 #define IO_TYPE_CONTROLLER 2
37 #define IO_TYPE_DEVICE 3
38 #define IO_TYPE_DRIVER 4
39 #define IO_TYPE_FILE 5
41 #define IO_TYPE_MASTER_ADAPTER 7
42 #define IO_TYPE_OPEN_PACKET 8
43 #define IO_TYPE_TIMER 9
44 #define IO_TYPE_VPB 10
45 #define IO_TYPE_ERROR_LOG 11
46 #define IO_TYPE_ERROR_MESSAGE 12
47 #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
49 #define IO_TYPE_CSQ_IRP_CONTEXT 1
51 #define IO_TYPE_CSQ_EX 3
53 /* IO_RESOURCE_DESCRIPTOR.Option */
54 #define IO_RESOURCE_PREFERRED 0x01
55 #define IO_RESOURCE_DEFAULT 0x02
56 #define IO_RESOURCE_ALTERNATIVE 0x08
59 $
if (_WDMDDK_
|| _DEVIOCTL_
)
60 #define FILE_DEVICE_BEEP 0x00000001
61 #define FILE_DEVICE_CD_ROM 0x00000002
62 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
63 #define FILE_DEVICE_CONTROLLER 0x00000004
64 #define FILE_DEVICE_DATALINK 0x00000005
65 #define FILE_DEVICE_DFS 0x00000006
66 #define FILE_DEVICE_DISK 0x00000007
67 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
68 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
69 #define FILE_DEVICE_INPORT_PORT 0x0000000a
70 #define FILE_DEVICE_KEYBOARD 0x0000000b
71 #define FILE_DEVICE_MAILSLOT 0x0000000c
72 #define FILE_DEVICE_MIDI_IN 0x0000000d
73 #define FILE_DEVICE_MIDI_OUT 0x0000000e
74 #define FILE_DEVICE_MOUSE 0x0000000f
75 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
76 #define FILE_DEVICE_NAMED_PIPE 0x00000011
77 #define FILE_DEVICE_NETWORK 0x00000012
78 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
79 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
80 #define FILE_DEVICE_NULL 0x00000015
81 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
82 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
83 #define FILE_DEVICE_PRINTER 0x00000018
84 #define FILE_DEVICE_SCANNER 0x00000019
85 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
86 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
87 #define FILE_DEVICE_SCREEN 0x0000001c
88 #define FILE_DEVICE_SOUND 0x0000001d
89 #define FILE_DEVICE_STREAMS 0x0000001e
90 #define FILE_DEVICE_TAPE 0x0000001f
91 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
92 #define FILE_DEVICE_TRANSPORT 0x00000021
93 #define FILE_DEVICE_UNKNOWN 0x00000022
94 #define FILE_DEVICE_VIDEO 0x00000023
95 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
96 #define FILE_DEVICE_WAVE_IN 0x00000025
97 #define FILE_DEVICE_WAVE_OUT 0x00000026
98 #define FILE_DEVICE_8042_PORT 0x00000027
99 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
100 #define FILE_DEVICE_BATTERY 0x00000029
101 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
102 #define FILE_DEVICE_MODEM 0x0000002b
103 #define FILE_DEVICE_VDM 0x0000002c
104 #define FILE_DEVICE_MASS_STORAGE 0x0000002d
105 #define FILE_DEVICE_SMB 0x0000002e
106 #define FILE_DEVICE_KS 0x0000002f
107 #define FILE_DEVICE_CHANGER 0x00000030
108 #define FILE_DEVICE_SMARTCARD 0x00000031
109 #define FILE_DEVICE_ACPI 0x00000032
110 #define FILE_DEVICE_DVD 0x00000033
111 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
112 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
113 #define FILE_DEVICE_DFS_VOLUME 0x00000036
114 #define FILE_DEVICE_SERENUM 0x00000037
115 #define FILE_DEVICE_TERMSRV 0x00000038
116 #define FILE_DEVICE_KSEC 0x00000039
117 #define FILE_DEVICE_FIPS 0x0000003A
118 #define FILE_DEVICE_INFINIBAND 0x0000003B
119 #define FILE_DEVICE_VMBUS 0x0000003E
120 #define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F
121 #define FILE_DEVICE_WPD 0x00000040
122 #define FILE_DEVICE_BLUETOOTH 0x00000041
123 #define FILE_DEVICE_MT_COMPOSITE 0x00000042
124 #define FILE_DEVICE_MT_TRANSPORT 0x00000043
125 #define FILE_DEVICE_BIOMETRIC 0x00000044
126 #define FILE_DEVICE_PMI 0x00000045
128 $
endif (_WDMDDK_
|| _DEVIOCTL_
)
130 #if defined(NT_PROCESSOR_GROUPS)
132 typedef USHORT IRQ_DEVICE_POLICY
, *PIRQ_DEVICE_POLICY
;
134 typedef enum _IRQ_DEVICE_POLICY_USHORT
{
135 IrqPolicyMachineDefault
= 0,
136 IrqPolicyAllCloseProcessors
= 1,
137 IrqPolicyOneCloseProcessor
= 2,
138 IrqPolicyAllProcessorsInMachine
= 3,
139 IrqPolicyAllProcessorsInGroup
= 3,
140 IrqPolicySpecifiedProcessors
= 4,
141 IrqPolicySpreadMessagesAcrossAllProcessors
= 5};
143 #else /* defined(NT_PROCESSOR_GROUPS) */
145 typedef enum _IRQ_DEVICE_POLICY
{
146 IrqPolicyMachineDefault
= 0,
147 IrqPolicyAllCloseProcessors
,
148 IrqPolicyOneCloseProcessor
,
149 IrqPolicyAllProcessorsInMachine
,
150 IrqPolicySpecifiedProcessors
,
151 IrqPolicySpreadMessagesAcrossAllProcessors
152 } IRQ_DEVICE_POLICY
, *PIRQ_DEVICE_POLICY
;
156 typedef enum _IRQ_PRIORITY
{
157 IrqPriorityUndefined
= 0,
161 } IRQ_PRIORITY
, *PIRQ_PRIORITY
;
163 typedef enum _IRQ_GROUP_POLICY
{
164 GroupAffinityAllGroupZero
= 0,
165 GroupAffinityDontCare
166 } IRQ_GROUP_POLICY
, *PIRQ_GROUP_POLICY
;
168 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
170 typedef struct _OBJECT_HANDLE_INFORMATION
{
171 ULONG HandleAttributes
;
172 ACCESS_MASK GrantedAccess
;
173 } OBJECT_HANDLE_INFORMATION
, *POBJECT_HANDLE_INFORMATION
;
175 typedef struct _CLIENT_ID
{
176 HANDLE UniqueProcess
;
178 } CLIENT_ID
, *PCLIENT_ID
;
180 typedef struct _VPB
{
184 USHORT VolumeLabelLength
;
185 struct _DEVICE_OBJECT
*DeviceObject
;
186 struct _DEVICE_OBJECT
*RealDevice
;
188 ULONG ReferenceCount
;
189 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
/ sizeof(WCHAR
)];
192 typedef enum _IO_ALLOCATION_ACTION
{
195 DeallocateObjectKeepRegisters
196 } IO_ALLOCATION_ACTION
, *PIO_ALLOCATION_ACTION
;
198 typedef IO_ALLOCATION_ACTION
199 (NTAPI DRIVER_CONTROL
)(
200 IN
struct _DEVICE_OBJECT
*DeviceObject
,
202 IN PVOID MapRegisterBase
,
204 typedef DRIVER_CONTROL
*PDRIVER_CONTROL
;
206 typedef struct _WAIT_CONTEXT_BLOCK
{
207 KDEVICE_QUEUE_ENTRY WaitQueueEntry
;
208 PDRIVER_CONTROL DeviceRoutine
;
210 ULONG NumberOfMapRegisters
;
213 PKDPC BufferChainingDpc
;
214 } WAIT_CONTEXT_BLOCK
, *PWAIT_CONTEXT_BLOCK
;
218 /* DEVICE_OBJECT.Flags */
219 #define DO_DEVICE_HAS_NAME 0x00000040
220 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
221 #define DO_LONG_TERM_REQUESTS 0x00000200
222 #define DO_NEVER_LAST_DEVICE 0x00000400
223 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
224 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
225 #define DO_FORCE_NEITHER_IO 0x00080000
226 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
227 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
228 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
229 #define DO_DISALLOW_EXECUTE 0x00800000
233 /* DEVICE_OBJECT.Flags */
234 #define DO_VERIFY_VOLUME 0x00000002
235 #define DO_BUFFERED_IO 0x00000004
236 #define DO_EXCLUSIVE 0x00000008
237 #define DO_DIRECT_IO 0x00000010
238 #define DO_MAP_IO_BUFFER 0x00000020
239 #define DO_DEVICE_INITIALIZING 0x00000080
240 #define DO_SHUTDOWN_REGISTERED 0x00000800
241 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
242 #define DO_POWER_PAGABLE 0x00002000
243 #define DO_POWER_INRUSH 0x00004000
245 /* DEVICE_OBJECT.Characteristics */
246 #define FILE_REMOVABLE_MEDIA 0x00000001
247 #define FILE_READ_ONLY_DEVICE 0x00000002
248 #define FILE_FLOPPY_DISKETTE 0x00000004
249 #define FILE_WRITE_ONCE_MEDIA 0x00000008
250 #define FILE_REMOTE_DEVICE 0x00000010
251 #define FILE_DEVICE_IS_MOUNTED 0x00000020
252 #define FILE_VIRTUAL_VOLUME 0x00000040
253 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
254 #define FILE_DEVICE_SECURE_OPEN 0x00000100
255 #define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800
256 #define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000
257 #define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000
259 /* DEVICE_OBJECT.AlignmentRequirement */
260 #define FILE_BYTE_ALIGNMENT 0x00000000
261 #define FILE_WORD_ALIGNMENT 0x00000001
262 #define FILE_LONG_ALIGNMENT 0x00000003
263 #define FILE_QUAD_ALIGNMENT 0x00000007
264 #define FILE_OCTA_ALIGNMENT 0x0000000f
265 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
266 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
267 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
268 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
269 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
272 $
if (_WDMDDK_
|| _DEVIOCTL_
)
273 /* DEVICE_OBJECT.DeviceType */
274 #define DEVICE_TYPE ULONG
278 typedef struct _DEVICE_OBJECT
{
282 struct _DRIVER_OBJECT
*DriverObject
;
283 struct _DEVICE_OBJECT
*NextDevice
;
284 struct _DEVICE_OBJECT
*AttachedDevice
;
285 struct _IRP
*CurrentIrp
;
288 ULONG Characteristics
;
290 PVOID DeviceExtension
;
291 DEVICE_TYPE DeviceType
;
294 LIST_ENTRY ListEntry
;
295 WAIT_CONTEXT_BLOCK Wcb
;
297 ULONG AlignmentRequirement
;
298 KDEVICE_QUEUE DeviceQueue
;
300 ULONG ActiveThreadCount
;
301 PSECURITY_DESCRIPTOR SecurityDescriptor
;
305 struct _DEVOBJ_EXTENSION
*DeviceObjectExtension
;
307 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
309 typedef enum _IO_SESSION_STATE
{
310 IoSessionStateCreated
= 1,
311 IoSessionStateInitialized
,
312 IoSessionStateConnected
,
313 IoSessionStateDisconnected
,
314 IoSessionStateDisconnectedLoggedOn
,
315 IoSessionStateLoggedOn
,
316 IoSessionStateLoggedOff
,
317 IoSessionStateTerminated
,
319 } IO_SESSION_STATE
, *PIO_SESSION_STATE
;
321 typedef enum _IO_COMPLETION_ROUTINE_RESULT
{
322 ContinueCompletion
= STATUS_CONTINUE_COMPLETION
,
323 StopCompletion
= STATUS_MORE_PROCESSING_REQUIRED
324 } IO_COMPLETION_ROUTINE_RESULT
, *PIO_COMPLETION_ROUTINE_RESULT
;
326 typedef struct _IO_INTERRUPT_MESSAGE_INFO_ENTRY
{
327 PHYSICAL_ADDRESS MessageAddress
;
328 KAFFINITY TargetProcessorSet
;
329 PKINTERRUPT InterruptObject
;
333 KINTERRUPT_MODE Mode
;
334 KINTERRUPT_POLARITY Polarity
;
335 } IO_INTERRUPT_MESSAGE_INFO_ENTRY
, *PIO_INTERRUPT_MESSAGE_INFO_ENTRY
;
337 typedef struct _IO_INTERRUPT_MESSAGE_INFO
{
340 IO_INTERRUPT_MESSAGE_INFO_ENTRY MessageInfo
[1];
341 } IO_INTERRUPT_MESSAGE_INFO
, *PIO_INTERRUPT_MESSAGE_INFO
;
343 typedef struct _IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
{
344 IN PDEVICE_OBJECT PhysicalDeviceObject
;
345 OUT PKINTERRUPT
*InterruptObject
;
346 IN PKSERVICE_ROUTINE ServiceRoutine
;
347 IN PVOID ServiceContext
;
348 IN PKSPIN_LOCK SpinLock OPTIONAL
;
349 IN KIRQL SynchronizeIrql
;
350 IN BOOLEAN FloatingSave
;
351 IN BOOLEAN ShareVector
;
354 IN KINTERRUPT_MODE InterruptMode
;
355 IN KAFFINITY ProcessorEnableMask
;
357 } IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS
;
359 typedef struct _IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
{
360 IN PDEVICE_OBJECT PhysicalDeviceObject
;
361 OUT PKINTERRUPT
*InterruptObject
;
362 IN PKSERVICE_ROUTINE ServiceRoutine
;
363 IN PVOID ServiceContext
;
364 IN PKSPIN_LOCK SpinLock OPTIONAL
;
365 IN KIRQL SynchronizeIrql OPTIONAL
;
366 IN BOOLEAN FloatingSave
;
367 } IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS
;
369 typedef struct _IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
{
370 IN PDEVICE_OBJECT PhysicalDeviceObject
;
373 OUT PIO_INTERRUPT_MESSAGE_INFO
*InterruptMessageTable
;
374 OUT PKINTERRUPT
*InterruptObject
;
376 IN PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine
;
377 IN PVOID ServiceContext
;
378 IN PKSPIN_LOCK SpinLock OPTIONAL
;
379 IN KIRQL SynchronizeIrql OPTIONAL
;
380 IN BOOLEAN FloatingSave
;
381 IN PKSERVICE_ROUTINE FallBackServiceRoutine OPTIONAL
;
382 } IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
, *PIO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS
;
384 typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS
{
385 IN OUT ULONG Version
;
387 IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified
;
388 IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased
;
389 IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased
;
391 } IO_CONNECT_INTERRUPT_PARAMETERS
, *PIO_CONNECT_INTERRUPT_PARAMETERS
;
393 typedef struct _IO_DISCONNECT_INTERRUPT_PARAMETERS
{
397 IN PKINTERRUPT InterruptObject
;
398 IN PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable
;
400 } IO_DISCONNECT_INTERRUPT_PARAMETERS
, *PIO_DISCONNECT_INTERRUPT_PARAMETERS
;
402 typedef enum _IO_ACCESS_TYPE
{
408 typedef enum _IO_ACCESS_MODE
{
413 typedef enum _IO_CONTAINER_NOTIFICATION_CLASS
{
414 IoSessionStateNotification
,
415 IoMaxContainerNotificationClass
416 } IO_CONTAINER_NOTIFICATION_CLASS
;
418 typedef struct _IO_SESSION_STATE_NOTIFICATION
{
424 } IO_SESSION_STATE_NOTIFICATION
, *PIO_SESSION_STATE_NOTIFICATION
;
426 typedef enum _IO_CONTAINER_INFORMATION_CLASS
{
427 IoSessionStateInformation
,
428 IoMaxContainerInformationClass
429 } IO_CONTAINER_INFORMATION_CLASS
;
431 typedef struct _IO_SESSION_STATE_INFORMATION
{
433 IO_SESSION_STATE SessionState
;
434 BOOLEAN LocalSession
;
435 } IO_SESSION_STATE_INFORMATION
, *PIO_SESSION_STATE_INFORMATION
;
437 #if (NTDDI_VERSION >= NTDDI_WIN7)
440 (NTAPI
*PIO_CONTAINER_NOTIFICATION_FUNCTION
)(
444 (NTAPI IO_SESSION_NOTIFICATION_FUNCTION
)(
445 IN PVOID SessionObject
,
449 IN PVOID NotificationPayload
,
450 IN ULONG PayloadLength
);
452 typedef IO_SESSION_NOTIFICATION_FUNCTION
*PIO_SESSION_NOTIFICATION_FUNCTION
;
456 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK
* PIO_REMOVE_LOCK_TRACKING_BLOCK
;
458 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK
{
461 volatile LONG IoCount
;
463 } IO_REMOVE_LOCK_COMMON_BLOCK
;
465 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK
{
468 LONGLONG MaxLockedTicks
;
472 volatile LONG LowMemoryCount
;
475 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks
;
476 } IO_REMOVE_LOCK_DBG_BLOCK
;
478 typedef struct _IO_REMOVE_LOCK
{
479 IO_REMOVE_LOCK_COMMON_BLOCK Common
;
481 IO_REMOVE_LOCK_DBG_BLOCK Dbg
;
483 } IO_REMOVE_LOCK
, *PIO_REMOVE_LOCK
;
485 typedef struct _IO_WORKITEM
*PIO_WORKITEM
;
488 (NTAPI IO_WORKITEM_ROUTINE
)(
489 IN PDEVICE_OBJECT DeviceObject
,
491 typedef IO_WORKITEM_ROUTINE
*PIO_WORKITEM_ROUTINE
;
494 (NTAPI IO_WORKITEM_ROUTINE_EX
)(
496 IN PVOID Context OPTIONAL
,
497 IN PIO_WORKITEM IoWorkItem
);
498 typedef IO_WORKITEM_ROUTINE_EX
*PIO_WORKITEM_ROUTINE_EX
;
500 typedef struct _SHARE_ACCESS
{
508 } SHARE_ACCESS
, *PSHARE_ACCESS
;
510 /* While MS WDK uses inheritance in C++, we cannot do this with gcc, as
511 inheritance, even from a struct renders the type non-POD. So we use
513 #define PCI_COMMON_HEADER_LAYOUT \
522 UCHAR CacheLineSize; \
523 UCHAR LatencyTimer; \
527 struct _PCI_HEADER_TYPE_0 { \
528 ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \
530 USHORT SubVendorID; \
531 USHORT SubSystemID; \
532 ULONG ROMBaseAddress; \
533 UCHAR CapabilitiesPtr; \
534 UCHAR Reserved1[3]; \
536 UCHAR InterruptLine; \
537 UCHAR InterruptPin; \
538 UCHAR MinimumGrant; \
539 UCHAR MaximumLatency; \
541 struct _PCI_HEADER_TYPE_1 { \
542 ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \
544 UCHAR SecondaryBus; \
545 UCHAR SubordinateBus; \
546 UCHAR SecondaryLatency; \
549 USHORT SecondaryStatus; \
551 USHORT MemoryLimit; \
552 USHORT PrefetchBase; \
553 USHORT PrefetchLimit; \
554 ULONG PrefetchBaseUpper32; \
555 ULONG PrefetchLimitUpper32; \
556 USHORT IOBaseUpper16; \
557 USHORT IOLimitUpper16; \
558 UCHAR CapabilitiesPtr; \
559 UCHAR Reserved1[3]; \
560 ULONG ROMBaseAddress; \
561 UCHAR InterruptLine; \
562 UCHAR InterruptPin; \
563 USHORT BridgeControl; \
565 struct _PCI_HEADER_TYPE_2 { \
566 ULONG SocketRegistersBaseAddress; \
567 UCHAR CapabilitiesPtr; \
569 USHORT SecondaryStatus; \
571 UCHAR SecondaryBus; \
572 UCHAR SubordinateBus; \
573 UCHAR SecondaryLatency; \
577 } Range[PCI_TYPE2_ADDRESSES-1]; \
578 UCHAR InterruptLine; \
579 UCHAR InterruptPin; \
580 USHORT BridgeControl; \
584 typedef enum _CREATE_FILE_TYPE
{
586 CreateFileTypeNamedPipe
,
587 CreateFileTypeMailslot
590 #define IO_FORCE_ACCESS_CHECK 0x001
591 #define IO_NO_PARAMETER_CHECKING 0x100
593 #define IO_REPARSE 0x0
594 #define IO_REMOUNT 0x1
596 typedef struct _IO_STATUS_BLOCK
{
597 _ANONYMOUS_UNION
union {
601 ULONG_PTR Information
;
602 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
605 typedef struct _IO_STATUS_BLOCK32
{
608 } IO_STATUS_BLOCK32
, *PIO_STATUS_BLOCK32
;
612 (NTAPI
*PIO_APC_ROUTINE
)(
614 IN PIO_STATUS_BLOCK IoStatusBlock
,
617 #define PIO_APC_ROUTINE_DEFINED
619 typedef enum _IO_SESSION_EVENT
{
620 IoSessionEventIgnore
= 0,
621 IoSessionEventCreated
,
622 IoSessionEventTerminated
,
623 IoSessionEventConnected
,
624 IoSessionEventDisconnected
,
626 IoSessionEventLogoff
,
628 } IO_SESSION_EVENT
, *PIO_SESSION_EVENT
;
630 #define IO_SESSION_STATE_ALL_EVENTS 0xffffffff
631 #define IO_SESSION_STATE_CREATION_EVENT 0x00000001
632 #define IO_SESSION_STATE_TERMINATION_EVENT 0x00000002
633 #define IO_SESSION_STATE_CONNECT_EVENT 0x00000004
634 #define IO_SESSION_STATE_DISCONNECT_EVENT 0x00000008
635 #define IO_SESSION_STATE_LOGON_EVENT 0x00000010
636 #define IO_SESSION_STATE_LOGOFF_EVENT 0x00000020
638 #define IO_SESSION_STATE_VALID_EVENT_MASK 0x0000003f
640 #define IO_SESSION_MAX_PAYLOAD_SIZE 256L
642 typedef struct _IO_SESSION_CONNECT_INFO
{
644 BOOLEAN LocalSession
;
645 } IO_SESSION_CONNECT_INFO
, *PIO_SESSION_CONNECT_INFO
;
647 #define EVENT_INCREMENT 1
648 #define IO_NO_INCREMENT 0
649 #define IO_CD_ROM_INCREMENT 1
650 #define IO_DISK_INCREMENT 1
651 #define IO_KEYBOARD_INCREMENT 6
652 #define IO_MAILSLOT_INCREMENT 2
653 #define IO_MOUSE_INCREMENT 6
654 #define IO_NAMED_PIPE_INCREMENT 2
655 #define IO_NETWORK_INCREMENT 2
656 #define IO_PARALLEL_INCREMENT 1
657 #define IO_SERIAL_INCREMENT 2
658 #define IO_SOUND_INCREMENT 8
659 #define IO_VIDEO_INCREMENT 1
660 #define SEMAPHORE_INCREMENT 1
662 #define MM_MAXIMUM_DISK_IO_SIZE (0x10000)
664 typedef struct _BOOTDISK_INFORMATION
{
665 LONGLONG BootPartitionOffset
;
666 LONGLONG SystemPartitionOffset
;
667 ULONG BootDeviceSignature
;
668 ULONG SystemDeviceSignature
;
669 } BOOTDISK_INFORMATION
, *PBOOTDISK_INFORMATION
;
671 typedef struct _BOOTDISK_INFORMATION_EX
{
672 LONGLONG BootPartitionOffset
;
673 LONGLONG SystemPartitionOffset
;
674 ULONG BootDeviceSignature
;
675 ULONG SystemDeviceSignature
;
677 GUID SystemDeviceGuid
;
678 BOOLEAN BootDeviceIsGpt
;
679 BOOLEAN SystemDeviceIsGpt
;
680 } BOOTDISK_INFORMATION_EX
, *PBOOTDISK_INFORMATION_EX
;
682 #if (NTDDI_VERSION >= NTDDI_WIN7)
684 typedef struct _LOADER_PARTITION_INFORMATION_EX
{
685 ULONG PartitionStyle
;
686 ULONG PartitionNumber
;
692 } LOADER_PARTITION_INFORMATION_EX
, *PLOADER_PARTITION_INFORMATION_EX
;
694 typedef struct _BOOTDISK_INFORMATION_LITE
{
696 LOADER_PARTITION_INFORMATION_EX Entries
[1];
697 } BOOTDISK_INFORMATION_LITE
, *PBOOTDISK_INFORMATION_LITE
;
701 #if (NTDDI_VERSION >= NTDDI_VISTA)
702 typedef struct _BOOTDISK_INFORMATION_LITE
{
703 ULONG BootDeviceSignature
;
704 ULONG SystemDeviceSignature
;
706 GUID SystemDeviceGuid
;
707 BOOLEAN BootDeviceIsGpt
;
708 BOOLEAN SystemDeviceIsGpt
;
709 } BOOTDISK_INFORMATION_LITE
, *PBOOTDISK_INFORMATION_LITE
;
710 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
712 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
714 #include <pshpack1.h>
716 typedef struct _EISA_MEMORY_TYPE
{
724 } EISA_MEMORY_TYPE
, *PEISA_MEMORY_TYPE
;
726 typedef struct _EISA_MEMORY_CONFIGURATION
{
727 EISA_MEMORY_TYPE ConfigurationByte
;
729 USHORT AddressLowWord
;
730 UCHAR AddressHighByte
;
732 } EISA_MEMORY_CONFIGURATION
, *PEISA_MEMORY_CONFIGURATION
;
734 typedef struct _EISA_IRQ_DESCRIPTOR
{
737 UCHAR LevelTriggered
:1;
740 } EISA_IRQ_DESCRIPTOR
, *PEISA_IRQ_DESCRIPTOR
;
742 typedef struct _EISA_IRQ_CONFIGURATION
{
743 EISA_IRQ_DESCRIPTOR ConfigurationByte
;
745 } EISA_IRQ_CONFIGURATION
, *PEISA_IRQ_CONFIGURATION
;
747 typedef struct _DMA_CONFIGURATION_BYTE0
{
752 } DMA_CONFIGURATION_BYTE0
;
754 typedef struct _DMA_CONFIGURATION_BYTE1
{
756 UCHAR TransferSize
:2;
759 } DMA_CONFIGURATION_BYTE1
;
761 typedef struct _EISA_DMA_CONFIGURATION
{
762 DMA_CONFIGURATION_BYTE0 ConfigurationByte0
;
763 DMA_CONFIGURATION_BYTE1 ConfigurationByte1
;
764 } EISA_DMA_CONFIGURATION
, *PEISA_DMA_CONFIGURATION
;
766 typedef struct _EISA_PORT_DESCRIPTOR
{
771 } EISA_PORT_DESCRIPTOR
, *PEISA_PORT_DESCRIPTOR
;
773 typedef struct _EISA_PORT_CONFIGURATION
{
774 EISA_PORT_DESCRIPTOR Configuration
;
776 } EISA_PORT_CONFIGURATION
, *PEISA_PORT_CONFIGURATION
;
778 typedef struct _CM_EISA_SLOT_INFORMATION
{
784 UCHAR NumberFunctions
;
785 UCHAR FunctionInformation
;
787 } CM_EISA_SLOT_INFORMATION
, *PCM_EISA_SLOT_INFORMATION
;
789 typedef struct _CM_EISA_FUNCTION_INFORMATION
{
795 UCHAR Selections
[26];
797 UCHAR TypeString
[80];
798 EISA_MEMORY_CONFIGURATION EisaMemory
[9];
799 EISA_IRQ_CONFIGURATION EisaIrq
[7];
800 EISA_DMA_CONFIGURATION EisaDma
[4];
801 EISA_PORT_CONFIGURATION EisaPort
[20];
802 UCHAR InitializationData
[60];
803 } CM_EISA_FUNCTION_INFORMATION
, *PCM_EISA_FUNCTION_INFORMATION
;
807 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
809 #define EISA_FUNCTION_ENABLED 0x80
810 #define EISA_FREE_FORM_DATA 0x40
811 #define EISA_HAS_PORT_INIT_ENTRY 0x20
812 #define EISA_HAS_PORT_RANGE 0x10
813 #define EISA_HAS_DMA_ENTRY 0x08
814 #define EISA_HAS_IRQ_ENTRY 0x04
815 #define EISA_HAS_MEMORY_ENTRY 0x02
816 #define EISA_HAS_TYPE_ENTRY 0x01
817 #define EISA_HAS_INFORMATION \
818 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
819 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
821 #define EISA_MORE_ENTRIES 0x80
822 #define EISA_SYSTEM_MEMORY 0x00
823 #define EISA_MEMORY_TYPE_RAM 0x01
825 /* CM_EISA_SLOT_INFORMATION.ReturnCode */
827 #define EISA_INVALID_SLOT 0x80
828 #define EISA_INVALID_FUNCTION 0x81
829 #define EISA_INVALID_CONFIGURATION 0x82
830 #define EISA_EMPTY_SLOT 0x83
831 #define EISA_INVALID_BIOS_CALL 0x86
834 ** Plug and Play structures
838 (NTAPI
*PINTERFACE_REFERENCE
)(
842 (NTAPI
*PINTERFACE_DEREFERENCE
)(
846 (NTAPI TRANSLATE_BUS_ADDRESS
)(
848 IN PHYSICAL_ADDRESS BusAddress
,
850 IN OUT PULONG AddressSpace
,
851 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
852 typedef TRANSLATE_BUS_ADDRESS
*PTRANSLATE_BUS_ADDRESS
;
854 typedef struct _DMA_ADAPTER
*
855 (NTAPI GET_DMA_ADAPTER
)(
857 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
858 OUT PULONG NumberOfMapRegisters
);
859 typedef GET_DMA_ADAPTER
*PGET_DMA_ADAPTER
;
862 (NTAPI GET_SET_DEVICE_DATA
)(
868 typedef GET_SET_DEVICE_DATA
*PGET_SET_DEVICE_DATA
;
870 typedef enum _DEVICE_INSTALL_STATE
{
871 InstallStateInstalled
,
872 InstallStateNeedsReinstall
,
873 InstallStateFailedInstall
,
874 InstallStateFinishInstall
875 } DEVICE_INSTALL_STATE
, *PDEVICE_INSTALL_STATE
;
877 typedef struct _LEGACY_BUS_INFORMATION
{
879 INTERFACE_TYPE LegacyBusType
;
881 } LEGACY_BUS_INFORMATION
, *PLEGACY_BUS_INFORMATION
;
883 typedef enum _DEVICE_REMOVAL_POLICY
{
884 RemovalPolicyExpectNoRemoval
= 1,
885 RemovalPolicyExpectOrderlyRemoval
= 2,
886 RemovalPolicyExpectSurpriseRemoval
= 3
887 } DEVICE_REMOVAL_POLICY
, *PDEVICE_REMOVAL_POLICY
;
890 (NTAPI
*PREENUMERATE_SELF
)(
893 typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD
{
897 PINTERFACE_REFERENCE InterfaceReference
;
898 PINTERFACE_DEREFERENCE InterfaceDereference
;
899 PREENUMERATE_SELF SurpriseRemoveAndReenumerateSelf
;
900 } REENUMERATE_SELF_INTERFACE_STANDARD
, *PREENUMERATE_SELF_INTERFACE_STANDARD
;
903 (NTAPI
*PIO_DEVICE_EJECT_CALLBACK
)(
905 IN OUT PVOID Context OPTIONAL
);
907 #define PCI_DEVICE_PRESENT_INTERFACE_VERSION 1
909 /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
910 #define PCI_USE_SUBSYSTEM_IDS 0x00000001
911 #define PCI_USE_REVISION 0x00000002
912 #define PCI_USE_VENDEV_IDS 0x00000004
913 #define PCI_USE_CLASS_SUBCLASS 0x00000008
914 #define PCI_USE_PROGIF 0x00000010
915 #define PCI_USE_LOCAL_BUS 0x00000020
916 #define PCI_USE_LOCAL_DEVICE 0x00000040
918 typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS
{
929 } PCI_DEVICE_PRESENCE_PARAMETERS
, *PPCI_DEVICE_PRESENCE_PARAMETERS
;
932 (NTAPI PCI_IS_DEVICE_PRESENT
)(
936 IN USHORT SubVendorID
,
937 IN USHORT SubSystemID
,
939 typedef PCI_IS_DEVICE_PRESENT
*PPCI_IS_DEVICE_PRESENT
;
942 (NTAPI PCI_IS_DEVICE_PRESENT_EX
)(
944 IN PPCI_DEVICE_PRESENCE_PARAMETERS Parameters
);
945 typedef PCI_IS_DEVICE_PRESENT_EX
*PPCI_IS_DEVICE_PRESENT_EX
;
947 typedef struct _BUS_INTERFACE_STANDARD
{
951 PINTERFACE_REFERENCE InterfaceReference
;
952 PINTERFACE_DEREFERENCE InterfaceDereference
;
953 PTRANSLATE_BUS_ADDRESS TranslateBusAddress
;
954 PGET_DMA_ADAPTER GetDmaAdapter
;
955 PGET_SET_DEVICE_DATA SetBusData
;
956 PGET_SET_DEVICE_DATA GetBusData
;
957 } BUS_INTERFACE_STANDARD
, *PBUS_INTERFACE_STANDARD
;
959 typedef struct _PCI_DEVICE_PRESENT_INTERFACE
{
963 PINTERFACE_REFERENCE InterfaceReference
;
964 PINTERFACE_DEREFERENCE InterfaceDereference
;
965 PPCI_IS_DEVICE_PRESENT IsDevicePresent
;
966 PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx
;
967 } PCI_DEVICE_PRESENT_INTERFACE
, *PPCI_DEVICE_PRESENT_INTERFACE
;
969 typedef struct _DEVICE_CAPABILITIES
{
974 ULONG LockSupported
:1;
975 ULONG EjectSupported
:1;
979 ULONG SilentInstall
:1;
981 ULONG SurpriseRemovalOK
:1;
986 ULONG HardwareDisabled
:1;
988 ULONG WarmEjectSupported
:1;
989 ULONG NoDisplayInUI
:1;
993 DEVICE_POWER_STATE DeviceState
[PowerSystemMaximum
];
994 SYSTEM_POWER_STATE SystemWake
;
995 DEVICE_POWER_STATE DeviceWake
;
999 } DEVICE_CAPABILITIES
, *PDEVICE_CAPABILITIES
;
1001 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION
{
1005 GUID InterfaceClassGuid
;
1006 PUNICODE_STRING SymbolicLinkName
;
1007 } DEVICE_INTERFACE_CHANGE_NOTIFICATION
, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION
;
1009 typedef struct _HWPROFILE_CHANGE_NOTIFICATION
{
1013 } HWPROFILE_CHANGE_NOTIFICATION
, *PHWPROFILE_CHANGE_NOTIFICATION
;
1017 typedef struct _INTERFACE
{
1021 PINTERFACE_REFERENCE InterfaceReference
;
1022 PINTERFACE_DEREFERENCE InterfaceDereference
;
1023 } INTERFACE
, *PINTERFACE
;
1025 typedef struct _PLUGPLAY_NOTIFICATION_HEADER
{
1029 } PLUGPLAY_NOTIFICATION_HEADER
, *PPLUGPLAY_NOTIFICATION_HEADER
;
1031 typedef ULONG PNP_DEVICE_STATE
, *PPNP_DEVICE_STATE
;
1033 /* PNP_DEVICE_STATE */
1035 #define PNP_DEVICE_DISABLED 0x00000001
1036 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
1037 #define PNP_DEVICE_FAILED 0x00000004
1038 #define PNP_DEVICE_REMOVED 0x00000008
1039 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
1040 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
1042 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION
{
1046 struct _FILE_OBJECT
*FileObject
;
1047 LONG NameBufferOffset
;
1048 UCHAR CustomDataBuffer
[1];
1049 } TARGET_DEVICE_CUSTOM_NOTIFICATION
, *PTARGET_DEVICE_CUSTOM_NOTIFICATION
;
1051 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION
{
1055 struct _FILE_OBJECT
*FileObject
;
1056 } TARGET_DEVICE_REMOVAL_NOTIFICATION
, *PTARGET_DEVICE_REMOVAL_NOTIFICATION
;
1058 #if (NTDDI_VERSION >= NTDDI_VISTA)
1059 #include <devpropdef.h>
1060 #define PLUGPLAY_PROPERTY_PERSISTENT 0x00000001
1063 #define PNP_REPLACE_NO_MAP MAXLONGLONG
1066 (NTAPI
*PREPLACE_MAP_MEMORY
)(
1067 IN PHYSICAL_ADDRESS TargetPhysicalAddress
,
1068 IN PHYSICAL_ADDRESS SparePhysicalAddress
,
1069 IN OUT PLARGE_INTEGER NumberOfBytes
,
1070 OUT PVOID
*TargetAddress
,
1071 OUT PVOID
*SpareAddress
);
1073 typedef struct _PNP_REPLACE_MEMORY_LIST
{
1074 ULONG AllocatedCount
;
1076 ULONGLONG TotalLength
;
1078 PHYSICAL_ADDRESS Address
;
1080 } Ranges
[ANYSIZE_ARRAY
];
1081 } PNP_REPLACE_MEMORY_LIST
, *PPNP_REPLACE_MEMORY_LIST
;
1083 typedef struct _PNP_REPLACE_PROCESSOR_LIST
{
1084 PKAFFINITY Affinity
;
1086 ULONG AllocatedCount
;
1088 ULONG ApicIds
[ANYSIZE_ARRAY
];
1089 } PNP_REPLACE_PROCESSOR_LIST
, *PPNP_REPLACE_PROCESSOR_LIST
;
1091 typedef struct _PNP_REPLACE_PROCESSOR_LIST_V1
{
1092 KAFFINITY AffinityMask
;
1093 ULONG AllocatedCount
;
1095 ULONG ApicIds
[ANYSIZE_ARRAY
];
1096 } PNP_REPLACE_PROCESSOR_LIST_V1
, *PPNP_REPLACE_PROCESSOR_LIST_V1
;
1098 #define PNP_REPLACE_PARAMETERS_VERSION 2
1100 typedef struct _PNP_REPLACE_PARAMETERS
{
1105 PPNP_REPLACE_PROCESSOR_LIST TargetProcessors
;
1106 PPNP_REPLACE_PROCESSOR_LIST SpareProcessors
;
1107 PPNP_REPLACE_MEMORY_LIST TargetMemory
;
1108 PPNP_REPLACE_MEMORY_LIST SpareMemory
;
1109 PREPLACE_MAP_MEMORY MapMemory
;
1110 } PNP_REPLACE_PARAMETERS
, *PPNP_REPLACE_PARAMETERS
;
1113 (NTAPI
*PREPLACE_UNLOAD
)(
1117 (NTAPI
*PREPLACE_BEGIN
)(
1118 IN PPNP_REPLACE_PARAMETERS Parameters
,
1119 OUT PVOID
*Context
);
1122 (NTAPI
*PREPLACE_END
)(
1126 (NTAPI
*PREPLACE_MIRROR_PHYSICAL_MEMORY
)(
1128 IN PHYSICAL_ADDRESS PhysicalAddress
,
1129 IN LARGE_INTEGER ByteCount
);
1132 (NTAPI
*PREPLACE_SET_PROCESSOR_ID
)(
1138 (NTAPI
*PREPLACE_SWAP
)(
1142 (NTAPI
*PREPLACE_INITIATE_HARDWARE_MIRROR
)(
1146 (NTAPI
*PREPLACE_MIRROR_PLATFORM_MEMORY
)(
1150 (NTAPI
*PREPLACE_GET_MEMORY_DESTINATION
)(
1152 IN PHYSICAL_ADDRESS SourceAddress
,
1153 OUT PPHYSICAL_ADDRESS DestinationAddress
);
1156 (NTAPI
*PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE
)(
1160 #define PNP_REPLACE_DRIVER_INTERFACE_VERSION 1
1161 #define PNP_REPLACE_DRIVER_INTERFACE_MINIMUM_SIZE \
1162 FIELD_OFFSET(PNP_REPLACE_DRIVER_INTERFACE, InitiateHardwareMirror)
1164 #define PNP_REPLACE_MEMORY_SUPPORTED 0x0001
1165 #define PNP_REPLACE_PROCESSOR_SUPPORTED 0x0002
1166 #define PNP_REPLACE_HARDWARE_MEMORY_MIRRORING 0x0004
1167 #define PNP_REPLACE_HARDWARE_PAGE_COPY 0x0008
1168 #define PNP_REPLACE_HARDWARE_QUIESCE 0x0010
1170 typedef struct _PNP_REPLACE_DRIVER_INTERFACE
{
1174 PREPLACE_UNLOAD Unload
;
1175 PREPLACE_BEGIN BeginReplace
;
1176 PREPLACE_END EndReplace
;
1177 PREPLACE_MIRROR_PHYSICAL_MEMORY MirrorPhysicalMemory
;
1178 PREPLACE_SET_PROCESSOR_ID SetProcessorId
;
1180 PREPLACE_INITIATE_HARDWARE_MIRROR InitiateHardwareMirror
;
1181 PREPLACE_MIRROR_PLATFORM_MEMORY MirrorPlatformMemory
;
1182 PREPLACE_GET_MEMORY_DESTINATION GetMemoryDestination
;
1183 PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE EnableDisableHardwareQuiesce
;
1184 } PNP_REPLACE_DRIVER_INTERFACE
, *PPNP_REPLACE_DRIVER_INTERFACE
;
1187 (NTAPI
*PREPLACE_DRIVER_INIT
)(
1188 IN OUT PPNP_REPLACE_DRIVER_INTERFACE Interface
,
1191 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE
{
1192 DeviceUsageTypeUndefined
,
1193 DeviceUsageTypePaging
,
1194 DeviceUsageTypeHibernation
,
1195 DeviceUsageTypeDumpFile
1196 } DEVICE_USAGE_NOTIFICATION_TYPE
;
1198 typedef struct _POWER_SEQUENCE
{
1202 } POWER_SEQUENCE
, *PPOWER_SEQUENCE
;
1205 DevicePropertyDeviceDescription
= 0x0,
1206 DevicePropertyHardwareID
= 0x1,
1207 DevicePropertyCompatibleIDs
= 0x2,
1208 DevicePropertyBootConfiguration
= 0x3,
1209 DevicePropertyBootConfigurationTranslated
= 0x4,
1210 DevicePropertyClassName
= 0x5,
1211 DevicePropertyClassGuid
= 0x6,
1212 DevicePropertyDriverKeyName
= 0x7,
1213 DevicePropertyManufacturer
= 0x8,
1214 DevicePropertyFriendlyName
= 0x9,
1215 DevicePropertyLocationInformation
= 0xa,
1216 DevicePropertyPhysicalDeviceObjectName
= 0xb,
1217 DevicePropertyBusTypeGuid
= 0xc,
1218 DevicePropertyLegacyBusType
= 0xd,
1219 DevicePropertyBusNumber
= 0xe,
1220 DevicePropertyEnumeratorName
= 0xf,
1221 DevicePropertyAddress
= 0x10,
1222 DevicePropertyUINumber
= 0x11,
1223 DevicePropertyInstallState
= 0x12,
1224 DevicePropertyRemovalPolicy
= 0x13,
1225 DevicePropertyResourceRequirements
= 0x14,
1226 DevicePropertyAllocatedResources
= 0x15,
1227 DevicePropertyContainerID
= 0x16
1228 } DEVICE_REGISTRY_PROPERTY
;
1230 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY
{
1231 EventCategoryReserved
,
1232 EventCategoryHardwareProfileChange
,
1233 EventCategoryDeviceInterfaceChange
,
1234 EventCategoryTargetDeviceChange
1235 } IO_NOTIFICATION_EVENT_CATEGORY
;
1237 typedef enum _IO_PRIORITY_HINT
{
1238 IoPriorityVeryLow
= 0,
1246 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
1249 (NTAPI DRIVER_NOTIFICATION_CALLBACK_ROUTINE
)(
1250 IN PVOID NotificationStructure
,
1252 typedef DRIVER_NOTIFICATION_CALLBACK_ROUTINE
*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE
;
1255 (NTAPI DEVICE_CHANGE_COMPLETE_CALLBACK
)(
1257 typedef DEVICE_CHANGE_COMPLETE_CALLBACK
*PDEVICE_CHANGE_COMPLETE_CALLBACK
;
1259 typedef enum _FILE_INFORMATION_CLASS
{
1260 FileDirectoryInformation
= 1,
1261 FileFullDirectoryInformation
,
1262 FileBothDirectoryInformation
,
1263 FileBasicInformation
,
1264 FileStandardInformation
,
1265 FileInternalInformation
,
1267 FileAccessInformation
,
1268 FileNameInformation
,
1269 FileRenameInformation
,
1270 FileLinkInformation
,
1271 FileNamesInformation
,
1272 FileDispositionInformation
,
1273 FilePositionInformation
,
1274 FileFullEaInformation
,
1275 FileModeInformation
,
1276 FileAlignmentInformation
,
1278 FileAllocationInformation
,
1279 FileEndOfFileInformation
,
1280 FileAlternateNameInformation
,
1281 FileStreamInformation
,
1282 FilePipeInformation
,
1283 FilePipeLocalInformation
,
1284 FilePipeRemoteInformation
,
1285 FileMailslotQueryInformation
,
1286 FileMailslotSetInformation
,
1287 FileCompressionInformation
,
1288 FileObjectIdInformation
,
1289 FileCompletionInformation
,
1290 FileMoveClusterInformation
,
1291 FileQuotaInformation
,
1292 FileReparsePointInformation
,
1293 FileNetworkOpenInformation
,
1294 FileAttributeTagInformation
,
1295 FileTrackingInformation
,
1296 FileIdBothDirectoryInformation
,
1297 FileIdFullDirectoryInformation
,
1298 FileValidDataLengthInformation
,
1299 FileShortNameInformation
,
1300 FileIoCompletionNotificationInformation
,
1301 FileIoStatusBlockRangeInformation
,
1302 FileIoPriorityHintInformation
,
1303 FileSfioReserveInformation
,
1304 FileSfioVolumeInformation
,
1305 FileHardLinkInformation
,
1306 FileProcessIdsUsingFileInformation
,
1307 FileNormalizedNameInformation
,
1308 FileNetworkPhysicalNameInformation
,
1309 FileIdGlobalTxDirectoryInformation
,
1310 FileIsRemoteDeviceInformation
,
1311 FileAttributeCacheInformation
,
1312 FileNumaNodeInformation
,
1313 FileStandardLinkInformation
,
1314 FileRemoteProtocolInformation
,
1315 FileMaximumInformation
1316 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
1318 typedef struct _FILE_POSITION_INFORMATION
{
1319 LARGE_INTEGER CurrentByteOffset
;
1320 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
1322 typedef struct _FILE_BASIC_INFORMATION
{
1323 LARGE_INTEGER CreationTime
;
1324 LARGE_INTEGER LastAccessTime
;
1325 LARGE_INTEGER LastWriteTime
;
1326 LARGE_INTEGER ChangeTime
;
1327 ULONG FileAttributes
;
1328 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
1330 typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION
{
1331 IO_PRIORITY_HINT PriorityHint
;
1332 } FILE_IO_PRIORITY_HINT_INFORMATION
, *PFILE_IO_PRIORITY_HINT_INFORMATION
;
1334 typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
{
1336 } FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION
;
1338 typedef struct _FILE_IOSTATUSBLOCK_RANGE_INFORMATION
{
1339 PUCHAR IoStatusBlockRange
;
1341 } FILE_IOSTATUSBLOCK_RANGE_INFORMATION
, *PFILE_IOSTATUSBLOCK_RANGE_INFORMATION
;
1343 typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION
{
1345 } FILE_IS_REMOTE_DEVICE_INFORMATION
, *PFILE_IS_REMOTE_DEVICE_INFORMATION
;
1347 typedef struct _FILE_NUMA_NODE_INFORMATION
{
1349 } FILE_NUMA_NODE_INFORMATION
, *PFILE_NUMA_NODE_INFORMATION
;
1351 typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION
{
1352 ULONG NumberOfProcessIdsInList
;
1353 ULONG_PTR ProcessIdList
[1];
1354 } FILE_PROCESS_IDS_USING_FILE_INFORMATION
, *PFILE_PROCESS_IDS_USING_FILE_INFORMATION
;
1356 typedef struct _FILE_STANDARD_INFORMATION
{
1357 LARGE_INTEGER AllocationSize
;
1358 LARGE_INTEGER EndOfFile
;
1359 ULONG NumberOfLinks
;
1360 BOOLEAN DeletePending
;
1362 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
1364 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
1365 LARGE_INTEGER CreationTime
;
1366 LARGE_INTEGER LastAccessTime
;
1367 LARGE_INTEGER LastWriteTime
;
1368 LARGE_INTEGER ChangeTime
;
1369 LARGE_INTEGER AllocationSize
;
1370 LARGE_INTEGER EndOfFile
;
1371 ULONG FileAttributes
;
1372 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
1374 typedef enum _FSINFOCLASS
{
1375 FileFsVolumeInformation
= 1,
1376 FileFsLabelInformation
,
1377 FileFsSizeInformation
,
1378 FileFsDeviceInformation
,
1379 FileFsAttributeInformation
,
1380 FileFsControlInformation
,
1381 FileFsFullSizeInformation
,
1382 FileFsObjectIdInformation
,
1383 FileFsDriverPathInformation
,
1384 FileFsVolumeFlagsInformation
,
1385 FileFsMaximumInformation
1386 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
1388 typedef struct _FILE_FS_DEVICE_INFORMATION
{
1389 DEVICE_TYPE DeviceType
;
1390 ULONG Characteristics
;
1391 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
1393 typedef struct _FILE_FULL_EA_INFORMATION
{
1394 ULONG NextEntryOffset
;
1397 USHORT EaValueLength
;
1399 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
1401 typedef struct _FILE_SFIO_RESERVE_INFORMATION
{
1402 ULONG RequestsPerPeriod
;
1404 BOOLEAN RetryFailures
;
1405 BOOLEAN Discardable
;
1407 ULONG NumOutstandingRequests
;
1408 } FILE_SFIO_RESERVE_INFORMATION
, *PFILE_SFIO_RESERVE_INFORMATION
;
1410 typedef struct _FILE_SFIO_VOLUME_INFORMATION
{
1411 ULONG MaximumRequestsPerPeriod
;
1412 ULONG MinimumPeriod
;
1413 ULONG MinimumTransferSize
;
1414 } FILE_SFIO_VOLUME_INFORMATION
, *PFILE_SFIO_VOLUME_INFORMATION
;
1416 #define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1
1417 #define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2
1418 #define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4
1420 #define FM_LOCK_BIT (0x1)
1421 #define FM_LOCK_BIT_V (0x0)
1422 #define FM_LOCK_WAITER_WOKEN (0x2)
1423 #define FM_LOCK_WAITER_INC (0x4)
1426 (NTAPI FAST_IO_CHECK_IF_POSSIBLE
)(
1427 IN
struct _FILE_OBJECT
*FileObject
,
1428 IN PLARGE_INTEGER FileOffset
,
1432 IN BOOLEAN CheckForReadOperation
,
1433 OUT PIO_STATUS_BLOCK IoStatus
,
1434 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1435 typedef FAST_IO_CHECK_IF_POSSIBLE
*PFAST_IO_CHECK_IF_POSSIBLE
;
1438 (NTAPI FAST_IO_READ
)(
1439 IN
struct _FILE_OBJECT
*FileObject
,
1440 IN PLARGE_INTEGER FileOffset
,
1445 OUT PIO_STATUS_BLOCK IoStatus
,
1446 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1447 typedef FAST_IO_READ
*PFAST_IO_READ
;
1450 (NTAPI FAST_IO_WRITE
)(
1451 IN
struct _FILE_OBJECT
*FileObject
,
1452 IN PLARGE_INTEGER FileOffset
,
1457 OUT PIO_STATUS_BLOCK IoStatus
,
1458 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1459 typedef FAST_IO_WRITE
*PFAST_IO_WRITE
;
1462 (NTAPI FAST_IO_QUERY_BASIC_INFO
)(
1463 IN
struct _FILE_OBJECT
*FileObject
,
1465 OUT PFILE_BASIC_INFORMATION Buffer
,
1466 OUT PIO_STATUS_BLOCK IoStatus
,
1467 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1468 typedef FAST_IO_QUERY_BASIC_INFO
*PFAST_IO_QUERY_BASIC_INFO
;
1471 (NTAPI FAST_IO_QUERY_STANDARD_INFO
)(
1472 IN
struct _FILE_OBJECT
*FileObject
,
1474 OUT PFILE_STANDARD_INFORMATION Buffer
,
1475 OUT PIO_STATUS_BLOCK IoStatus
,
1476 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1477 typedef FAST_IO_QUERY_STANDARD_INFO
*PFAST_IO_QUERY_STANDARD_INFO
;
1480 (NTAPI FAST_IO_LOCK
)(
1481 IN
struct _FILE_OBJECT
*FileObject
,
1482 IN PLARGE_INTEGER FileOffset
,
1483 IN PLARGE_INTEGER Length
,
1484 PEPROCESS ProcessId
,
1486 BOOLEAN FailImmediately
,
1487 BOOLEAN ExclusiveLock
,
1488 OUT PIO_STATUS_BLOCK IoStatus
,
1489 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1490 typedef FAST_IO_LOCK
*PFAST_IO_LOCK
;
1493 (NTAPI FAST_IO_UNLOCK_SINGLE
)(
1494 IN
struct _FILE_OBJECT
*FileObject
,
1495 IN PLARGE_INTEGER FileOffset
,
1496 IN PLARGE_INTEGER Length
,
1497 PEPROCESS ProcessId
,
1499 OUT PIO_STATUS_BLOCK IoStatus
,
1500 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1501 typedef FAST_IO_UNLOCK_SINGLE
*PFAST_IO_UNLOCK_SINGLE
;
1504 (NTAPI FAST_IO_UNLOCK_ALL
)(
1505 IN
struct _FILE_OBJECT
*FileObject
,
1506 PEPROCESS ProcessId
,
1507 OUT PIO_STATUS_BLOCK IoStatus
,
1508 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1509 typedef FAST_IO_UNLOCK_ALL
*PFAST_IO_UNLOCK_ALL
;
1512 (NTAPI FAST_IO_UNLOCK_ALL_BY_KEY
)(
1513 IN
struct _FILE_OBJECT
*FileObject
,
1516 OUT PIO_STATUS_BLOCK IoStatus
,
1517 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1518 typedef FAST_IO_UNLOCK_ALL_BY_KEY
*PFAST_IO_UNLOCK_ALL_BY_KEY
;
1521 (NTAPI FAST_IO_DEVICE_CONTROL
)(
1522 IN
struct _FILE_OBJECT
*FileObject
,
1524 IN PVOID InputBuffer OPTIONAL
,
1525 IN ULONG InputBufferLength
,
1526 OUT PVOID OutputBuffer OPTIONAL
,
1527 IN ULONG OutputBufferLength
,
1528 IN ULONG IoControlCode
,
1529 OUT PIO_STATUS_BLOCK IoStatus
,
1530 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1531 typedef FAST_IO_DEVICE_CONTROL
*PFAST_IO_DEVICE_CONTROL
;
1534 (NTAPI FAST_IO_ACQUIRE_FILE
)(
1535 IN
struct _FILE_OBJECT
*FileObject
);
1536 typedef FAST_IO_ACQUIRE_FILE
*PFAST_IO_ACQUIRE_FILE
;
1539 (NTAPI FAST_IO_RELEASE_FILE
)(
1540 IN
struct _FILE_OBJECT
*FileObject
);
1541 typedef FAST_IO_RELEASE_FILE
*PFAST_IO_RELEASE_FILE
;
1544 (NTAPI FAST_IO_DETACH_DEVICE
)(
1545 IN
struct _DEVICE_OBJECT
*SourceDevice
,
1546 IN
struct _DEVICE_OBJECT
*TargetDevice
);
1547 typedef FAST_IO_DETACH_DEVICE
*PFAST_IO_DETACH_DEVICE
;
1550 (NTAPI FAST_IO_QUERY_NETWORK_OPEN_INFO
)(
1551 IN
struct _FILE_OBJECT
*FileObject
,
1553 OUT
struct _FILE_NETWORK_OPEN_INFORMATION
*Buffer
,
1554 OUT
struct _IO_STATUS_BLOCK
*IoStatus
,
1555 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1556 typedef FAST_IO_QUERY_NETWORK_OPEN_INFO
*PFAST_IO_QUERY_NETWORK_OPEN_INFO
;
1559 (NTAPI FAST_IO_ACQUIRE_FOR_MOD_WRITE
)(
1560 IN
struct _FILE_OBJECT
*FileObject
,
1561 IN PLARGE_INTEGER EndingOffset
,
1562 OUT
struct _ERESOURCE
**ResourceToRelease
,
1563 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1564 typedef FAST_IO_ACQUIRE_FOR_MOD_WRITE
*PFAST_IO_ACQUIRE_FOR_MOD_WRITE
;
1567 (NTAPI FAST_IO_MDL_READ
)(
1568 IN
struct _FILE_OBJECT
*FileObject
,
1569 IN PLARGE_INTEGER FileOffset
,
1573 OUT PIO_STATUS_BLOCK IoStatus
,
1574 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1575 typedef FAST_IO_MDL_READ
*PFAST_IO_MDL_READ
;
1578 (NTAPI FAST_IO_MDL_READ_COMPLETE
)(
1579 IN
struct _FILE_OBJECT
*FileObject
,
1581 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1582 typedef FAST_IO_MDL_READ_COMPLETE
*PFAST_IO_MDL_READ_COMPLETE
;
1585 (NTAPI FAST_IO_PREPARE_MDL_WRITE
)(
1586 IN
struct _FILE_OBJECT
*FileObject
,
1587 IN PLARGE_INTEGER FileOffset
,
1591 OUT PIO_STATUS_BLOCK IoStatus
,
1592 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1593 typedef FAST_IO_PREPARE_MDL_WRITE
*PFAST_IO_PREPARE_MDL_WRITE
;
1596 (NTAPI FAST_IO_MDL_WRITE_COMPLETE
)(
1597 IN
struct _FILE_OBJECT
*FileObject
,
1598 IN PLARGE_INTEGER FileOffset
,
1600 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1601 typedef FAST_IO_MDL_WRITE_COMPLETE
*PFAST_IO_MDL_WRITE_COMPLETE
;
1604 (NTAPI FAST_IO_READ_COMPRESSED
)(
1605 IN
struct _FILE_OBJECT
*FileObject
,
1606 IN PLARGE_INTEGER FileOffset
,
1611 OUT PIO_STATUS_BLOCK IoStatus
,
1612 OUT
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
1613 IN ULONG CompressedDataInfoLength
,
1614 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1615 typedef FAST_IO_READ_COMPRESSED
*PFAST_IO_READ_COMPRESSED
;
1618 (NTAPI FAST_IO_WRITE_COMPRESSED
)(
1619 IN
struct _FILE_OBJECT
*FileObject
,
1620 IN PLARGE_INTEGER FileOffset
,
1625 OUT PIO_STATUS_BLOCK IoStatus
,
1626 IN
struct _COMPRESSED_DATA_INFO
*CompressedDataInfo
,
1627 IN ULONG CompressedDataInfoLength
,
1628 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1629 typedef FAST_IO_WRITE_COMPRESSED
*PFAST_IO_WRITE_COMPRESSED
;
1632 (NTAPI FAST_IO_MDL_READ_COMPLETE_COMPRESSED
)(
1633 IN
struct _FILE_OBJECT
*FileObject
,
1635 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1636 typedef FAST_IO_MDL_READ_COMPLETE_COMPRESSED
*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED
;
1639 (NTAPI FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
)(
1640 IN
struct _FILE_OBJECT
*FileObject
,
1641 IN PLARGE_INTEGER FileOffset
,
1643 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1644 typedef FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED
;
1647 (NTAPI FAST_IO_QUERY_OPEN
)(
1648 IN
struct _IRP
*Irp
,
1649 OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
,
1650 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1651 typedef FAST_IO_QUERY_OPEN
*PFAST_IO_QUERY_OPEN
;
1654 (NTAPI FAST_IO_RELEASE_FOR_MOD_WRITE
)(
1655 IN
struct _FILE_OBJECT
*FileObject
,
1656 IN
struct _ERESOURCE
*ResourceToRelease
,
1657 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1658 typedef FAST_IO_RELEASE_FOR_MOD_WRITE
*PFAST_IO_RELEASE_FOR_MOD_WRITE
;
1661 (NTAPI FAST_IO_ACQUIRE_FOR_CCFLUSH
)(
1662 IN
struct _FILE_OBJECT
*FileObject
,
1663 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1664 typedef FAST_IO_ACQUIRE_FOR_CCFLUSH
*PFAST_IO_ACQUIRE_FOR_CCFLUSH
;
1667 (NTAPI FAST_IO_RELEASE_FOR_CCFLUSH
)(
1668 IN
struct _FILE_OBJECT
*FileObject
,
1669 IN
struct _DEVICE_OBJECT
*DeviceObject
);
1670 typedef FAST_IO_RELEASE_FOR_CCFLUSH
*PFAST_IO_RELEASE_FOR_CCFLUSH
;
1672 typedef struct _FAST_IO_DISPATCH
{
1673 ULONG SizeOfFastIoDispatch
;
1674 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible
;
1675 PFAST_IO_READ FastIoRead
;
1676 PFAST_IO_WRITE FastIoWrite
;
1677 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo
;
1678 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo
;
1679 PFAST_IO_LOCK FastIoLock
;
1680 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle
;
1681 PFAST_IO_UNLOCK_ALL FastIoUnlockAll
;
1682 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey
;
1683 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl
;
1684 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection
;
1685 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection
;
1686 PFAST_IO_DETACH_DEVICE FastIoDetachDevice
;
1687 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo
;
1688 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite
;
1689 PFAST_IO_MDL_READ MdlRead
;
1690 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete
;
1691 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite
;
1692 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete
;
1693 PFAST_IO_READ_COMPRESSED FastIoReadCompressed
;
1694 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed
;
1695 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed
;
1696 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed
;
1697 PFAST_IO_QUERY_OPEN FastIoQueryOpen
;
1698 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite
;
1699 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush
;
1700 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush
;
1701 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
1703 typedef struct _SECTION_OBJECT_POINTERS
{
1704 PVOID DataSectionObject
;
1705 PVOID SharedCacheMap
;
1706 PVOID ImageSectionObject
;
1707 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
1709 typedef struct _IO_COMPLETION_CONTEXT
{
1712 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
1714 /* FILE_OBJECT.Flags */
1715 #define FO_FILE_OPEN 0x00000001
1716 #define FO_SYNCHRONOUS_IO 0x00000002
1717 #define FO_ALERTABLE_IO 0x00000004
1718 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
1719 #define FO_WRITE_THROUGH 0x00000010
1720 #define FO_SEQUENTIAL_ONLY 0x00000020
1721 #define FO_CACHE_SUPPORTED 0x00000040
1722 #define FO_NAMED_PIPE 0x00000080
1723 #define FO_STREAM_FILE 0x00000100
1724 #define FO_MAILSLOT 0x00000200
1725 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
1726 #define FO_QUEUE_IRP_TO_THREAD 0x00000400
1727 #define FO_DIRECT_DEVICE_OPEN 0x00000800
1728 #define FO_FILE_MODIFIED 0x00001000
1729 #define FO_FILE_SIZE_CHANGED 0x00002000
1730 #define FO_CLEANUP_COMPLETE 0x00004000
1731 #define FO_TEMPORARY_FILE 0x00008000
1732 #define FO_DELETE_ON_CLOSE 0x00010000
1733 #define FO_OPENED_CASE_SENSITIVE 0x00020000
1734 #define FO_HANDLE_CREATED 0x00040000
1735 #define FO_FILE_FAST_IO_READ 0x00080000
1736 #define FO_RANDOM_ACCESS 0x00100000
1737 #define FO_FILE_OPEN_CANCELLED 0x00200000
1738 #define FO_VOLUME_OPEN 0x00400000
1739 #define FO_REMOTE_ORIGIN 0x01000000
1740 #define FO_DISALLOW_EXCLUSIVE 0x02000000
1741 #define FO_SKIP_COMPLETION_PORT 0x02000000
1742 #define FO_SKIP_SET_EVENT 0x04000000
1743 #define FO_SKIP_SET_FAST_IO 0x08000000
1744 #define FO_FLAGS_VALID_ONLY_DURING_CREATE FO_DISALLOW_EXCLUSIVE
1747 #define VPB_MOUNTED 0x0001
1748 #define VPB_LOCKED 0x0002
1749 #define VPB_PERSISTENT 0x0004
1750 #define VPB_REMOVE_PENDING 0x0008
1751 #define VPB_RAW_MOUNT 0x0010
1752 #define VPB_DIRECT_WRITES_ALLOWED 0x0020
1756 #define SL_FORCE_ACCESS_CHECK 0x01
1757 #define SL_OPEN_PAGING_FILE 0x02
1758 #define SL_OPEN_TARGET_DIRECTORY 0x04
1759 #define SL_STOP_ON_SYMLINK 0x08
1760 #define SL_CASE_SENSITIVE 0x80
1762 #define SL_KEY_SPECIFIED 0x01
1763 #define SL_OVERRIDE_VERIFY_VOLUME 0x02
1764 #define SL_WRITE_THROUGH 0x04
1765 #define SL_FT_SEQUENTIAL_WRITE 0x08
1766 #define SL_FORCE_DIRECT_WRITE 0x10
1767 #define SL_REALTIME_STREAM 0x20
1769 #define SL_READ_ACCESS_GRANTED 0x01
1770 #define SL_WRITE_ACCESS_GRANTED 0x04
1772 #define SL_FAIL_IMMEDIATELY 0x01
1773 #define SL_EXCLUSIVE_LOCK 0x02
1775 #define SL_RESTART_SCAN 0x01
1776 #define SL_RETURN_SINGLE_ENTRY 0x02
1777 #define SL_INDEX_SPECIFIED 0x04
1779 #define SL_WATCH_TREE 0x01
1781 #define SL_ALLOW_RAW_MOUNT 0x01
1784 $
if (_WDMDDK_
|| _DEVIOCTL_
)
1785 #define CTL_CODE(DeviceType, Function, Method, Access) \
1786 (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
1788 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
1790 #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
1792 $
endif (_WDMDDK_
|| _DEVIOCTL_
)
1794 #define IRP_NOCACHE 0x00000001
1795 #define IRP_PAGING_IO 0x00000002
1796 #define IRP_MOUNT_COMPLETION 0x00000002
1797 #define IRP_SYNCHRONOUS_API 0x00000004
1798 #define IRP_ASSOCIATED_IRP 0x00000008
1799 #define IRP_BUFFERED_IO 0x00000010
1800 #define IRP_DEALLOCATE_BUFFER 0x00000020
1801 #define IRP_INPUT_OPERATION 0x00000040
1802 #define IRP_SYNCHRONOUS_PAGING_IO 0x00000040
1803 #define IRP_CREATE_OPERATION 0x00000080
1804 #define IRP_READ_OPERATION 0x00000100
1805 #define IRP_WRITE_OPERATION 0x00000200
1806 #define IRP_CLOSE_OPERATION 0x00000400
1807 #define IRP_DEFER_IO_COMPLETION 0x00000800
1808 #define IRP_OB_QUERY_NAME 0x00001000
1809 #define IRP_HOLD_DEVICE_QUEUE 0x00002000
1811 #define IRP_QUOTA_CHARGED 0x01
1812 #define IRP_ALLOCATED_MUST_SUCCEED 0x02
1813 #define IRP_ALLOCATED_FIXED_SIZE 0x04
1814 #define IRP_LOOKASIDE_ALLOCATION 0x08
1817 ** IRP function codes
1820 #define IRP_MJ_CREATE 0x00
1821 #define IRP_MJ_CREATE_NAMED_PIPE 0x01
1822 #define IRP_MJ_CLOSE 0x02
1823 #define IRP_MJ_READ 0x03
1824 #define IRP_MJ_WRITE 0x04
1825 #define IRP_MJ_QUERY_INFORMATION 0x05
1826 #define IRP_MJ_SET_INFORMATION 0x06
1827 #define IRP_MJ_QUERY_EA 0x07
1828 #define IRP_MJ_SET_EA 0x08
1829 #define IRP_MJ_FLUSH_BUFFERS 0x09
1830 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
1831 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
1832 #define IRP_MJ_DIRECTORY_CONTROL 0x0c
1833 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
1834 #define IRP_MJ_DEVICE_CONTROL 0x0e
1835 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
1836 #define IRP_MJ_SCSI 0x0f
1837 #define IRP_MJ_SHUTDOWN 0x10
1838 #define IRP_MJ_LOCK_CONTROL 0x11
1839 #define IRP_MJ_CLEANUP 0x12
1840 #define IRP_MJ_CREATE_MAILSLOT 0x13
1841 #define IRP_MJ_QUERY_SECURITY 0x14
1842 #define IRP_MJ_SET_SECURITY 0x15
1843 #define IRP_MJ_POWER 0x16
1844 #define IRP_MJ_SYSTEM_CONTROL 0x17
1845 #define IRP_MJ_DEVICE_CHANGE 0x18
1846 #define IRP_MJ_QUERY_QUOTA 0x19
1847 #define IRP_MJ_SET_QUOTA 0x1a
1848 #define IRP_MJ_PNP 0x1b
1849 #define IRP_MJ_PNP_POWER 0x1b
1850 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
1852 #define IRP_MN_SCSI_CLASS 0x01
1854 #define IRP_MN_START_DEVICE 0x00
1855 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
1856 #define IRP_MN_REMOVE_DEVICE 0x02
1857 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
1858 #define IRP_MN_STOP_DEVICE 0x04
1859 #define IRP_MN_QUERY_STOP_DEVICE 0x05
1860 #define IRP_MN_CANCEL_STOP_DEVICE 0x06
1862 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
1863 #define IRP_MN_QUERY_INTERFACE 0x08
1864 #define IRP_MN_QUERY_CAPABILITIES 0x09
1865 #define IRP_MN_QUERY_RESOURCES 0x0A
1866 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
1867 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
1868 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
1870 #define IRP_MN_READ_CONFIG 0x0F
1871 #define IRP_MN_WRITE_CONFIG 0x10
1872 #define IRP_MN_EJECT 0x11
1873 #define IRP_MN_SET_LOCK 0x12
1874 #define IRP_MN_QUERY_ID 0x13
1875 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
1876 #define IRP_MN_QUERY_BUS_INFORMATION 0x15
1877 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
1878 #define IRP_MN_SURPRISE_REMOVAL 0x17
1879 #if (NTDDI_VERSION >= NTDDI_WIN7)
1880 #define IRP_MN_DEVICE_ENUMERATED 0x19
1883 #define IRP_MN_WAIT_WAKE 0x00
1884 #define IRP_MN_POWER_SEQUENCE 0x01
1885 #define IRP_MN_SET_POWER 0x02
1886 #define IRP_MN_QUERY_POWER 0x03
1888 #define IRP_MN_QUERY_ALL_DATA 0x00
1889 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
1890 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
1891 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
1892 #define IRP_MN_ENABLE_EVENTS 0x04
1893 #define IRP_MN_DISABLE_EVENTS 0x05
1894 #define IRP_MN_ENABLE_COLLECTION 0x06
1895 #define IRP_MN_DISABLE_COLLECTION 0x07
1896 #define IRP_MN_REGINFO 0x08
1897 #define IRP_MN_EXECUTE_METHOD 0x09
1899 #define IRP_MN_REGINFO_EX 0x0b
1901 typedef struct _FILE_OBJECT
{
1904 PDEVICE_OBJECT DeviceObject
;
1908 PSECTION_OBJECT_POINTERS SectionObjectPointer
;
1909 PVOID PrivateCacheMap
;
1910 NTSTATUS FinalStatus
;
1911 struct _FILE_OBJECT
*RelatedFileObject
;
1912 BOOLEAN LockOperation
;
1913 BOOLEAN DeletePending
;
1915 BOOLEAN WriteAccess
;
1916 BOOLEAN DeleteAccess
;
1918 BOOLEAN SharedWrite
;
1919 BOOLEAN SharedDelete
;
1921 UNICODE_STRING FileName
;
1922 LARGE_INTEGER CurrentByteOffset
;
1923 volatile ULONG Waiters
;
1924 volatile ULONG Busy
;
1928 volatile PIO_COMPLETION_CONTEXT CompletionContext
;
1929 KSPIN_LOCK IrpListLock
;
1931 volatile PVOID FileObjectExtension
;
1932 } FILE_OBJECT
, *PFILE_OBJECT
;
1934 typedef struct _IO_ERROR_LOG_PACKET
{
1935 UCHAR MajorFunctionCode
;
1937 USHORT DumpDataSize
;
1938 USHORT NumberOfStrings
;
1939 USHORT StringOffset
;
1940 USHORT EventCategory
;
1942 ULONG UniqueErrorValue
;
1943 NTSTATUS FinalStatus
;
1944 ULONG SequenceNumber
;
1945 ULONG IoControlCode
;
1946 LARGE_INTEGER DeviceOffset
;
1948 } IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
1950 typedef struct _IO_ERROR_LOG_MESSAGE
{
1953 USHORT DriverNameLength
;
1954 LARGE_INTEGER TimeStamp
;
1955 ULONG DriverNameOffset
;
1956 IO_ERROR_LOG_PACKET EntryData
;
1957 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
1959 #define ERROR_LOG_LIMIT_SIZE 240
1960 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
1961 sizeof(IO_ERROR_LOG_PACKET) + \
1962 (sizeof(WCHAR) * 40))
1963 #define ERROR_LOG_MESSAGE_LIMIT_SIZE \
1964 (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1965 #define IO_ERROR_LOG_MESSAGE_LENGTH \
1966 ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
1967 ERROR_LOG_MESSAGE_LIMIT_SIZE : \
1968 PORT_MAXIMUM_MESSAGE_LENGTH)
1969 #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
1970 IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
1973 #define PORT_MAXIMUM_MESSAGE_LENGTH 512
1975 #define PORT_MAXIMUM_MESSAGE_LENGTH 256
1978 typedef enum _DMA_WIDTH
{
1983 } DMA_WIDTH
, *PDMA_WIDTH
;
1985 typedef enum _DMA_SPEED
{
1992 } DMA_SPEED
, *PDMA_SPEED
;
1994 /* DEVICE_DESCRIPTION.Version */
1996 #define DEVICE_DESCRIPTION_VERSION 0x0000
1997 #define DEVICE_DESCRIPTION_VERSION1 0x0001
1998 #define DEVICE_DESCRIPTION_VERSION2 0x0002
2000 typedef struct _DEVICE_DESCRIPTION
{
2003 BOOLEAN ScatterGather
;
2005 BOOLEAN AutoInitialize
;
2006 BOOLEAN Dma32BitAddresses
;
2007 BOOLEAN IgnoreCount
;
2009 BOOLEAN Dma64BitAddresses
;
2012 INTERFACE_TYPE InterfaceType
;
2015 ULONG MaximumLength
;
2017 } DEVICE_DESCRIPTION
, *PDEVICE_DESCRIPTION
;
2019 typedef enum _DEVICE_RELATION_TYPE
{
2024 TargetDeviceRelation
,
2027 } DEVICE_RELATION_TYPE
, *PDEVICE_RELATION_TYPE
;
2029 typedef struct _DEVICE_RELATIONS
{
2031 PDEVICE_OBJECT Objects
[1];
2032 } DEVICE_RELATIONS
, *PDEVICE_RELATIONS
;
2034 typedef struct _DEVOBJ_EXTENSION
{
2037 PDEVICE_OBJECT DeviceObject
;
2038 } DEVOBJ_EXTENSION
, *PDEVOBJ_EXTENSION
;
2040 typedef struct _SCATTER_GATHER_ELEMENT
{
2041 PHYSICAL_ADDRESS Address
;
2044 } SCATTER_GATHER_ELEMENT
, *PSCATTER_GATHER_ELEMENT
;
2046 #if defined(_MSC_EXTENSIONS)
2048 #if _MSC_VER >= 1200
2049 #pragma warning(push)
2051 #pragma warning(disable:4200)
2052 typedef struct _SCATTER_GATHER_LIST
{
2053 ULONG NumberOfElements
;
2055 SCATTER_GATHER_ELEMENT Elements
[1];
2056 } SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
2058 #if _MSC_VER >= 1200
2059 #pragma warning(pop)
2061 #pragma warning(default:4200)
2066 struct _SCATTER_GATHER_LIST
;
2067 typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST
, *PSCATTER_GATHER_LIST
;
2072 (NTAPI DRIVER_ADD_DEVICE
)(
2073 IN
struct _DRIVER_OBJECT
*DriverObject
,
2074 IN
struct _DEVICE_OBJECT
*PhysicalDeviceObject
);
2075 typedef DRIVER_ADD_DEVICE
*PDRIVER_ADD_DEVICE
;
2077 typedef struct _DRIVER_EXTENSION
{
2078 struct _DRIVER_OBJECT
*DriverObject
;
2079 PDRIVER_ADD_DEVICE AddDevice
;
2081 UNICODE_STRING ServiceKeyName
;
2082 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
2084 #define DRVO_UNLOAD_INVOKED 0x00000001
2085 #define DRVO_LEGACY_DRIVER 0x00000002
2086 #define DRVO_BUILTIN_DRIVER 0x00000004
2089 (NTAPI DRIVER_INITIALIZE
)(
2090 IN
struct _DRIVER_OBJECT
*DriverObject
,
2091 IN PUNICODE_STRING RegistryPath
);
2092 typedef DRIVER_INITIALIZE
*PDRIVER_INITIALIZE
;
2095 (NTAPI DRIVER_STARTIO
)(
2096 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2097 IN
struct _IRP
*Irp
);
2098 typedef DRIVER_STARTIO
*PDRIVER_STARTIO
;
2101 (NTAPI DRIVER_UNLOAD
)(
2102 IN
struct _DRIVER_OBJECT
*DriverObject
);
2103 typedef DRIVER_UNLOAD
*PDRIVER_UNLOAD
;
2106 (NTAPI DRIVER_DISPATCH
)(
2107 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2108 IN
struct _IRP
*Irp
);
2109 typedef DRIVER_DISPATCH
*PDRIVER_DISPATCH
;
2111 typedef struct _DRIVER_OBJECT
{
2114 PDEVICE_OBJECT DeviceObject
;
2118 PVOID DriverSection
;
2119 PDRIVER_EXTENSION DriverExtension
;
2120 UNICODE_STRING DriverName
;
2121 PUNICODE_STRING HardwareDatabase
;
2122 struct _FAST_IO_DISPATCH
*FastIoDispatch
;
2123 PDRIVER_INITIALIZE DriverInit
;
2124 PDRIVER_STARTIO DriverStartIo
;
2125 PDRIVER_UNLOAD DriverUnload
;
2126 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
2127 } DRIVER_OBJECT
, *PDRIVER_OBJECT
;
2129 typedef struct _DMA_ADAPTER
{
2132 struct _DMA_OPERATIONS
* DmaOperations
;
2133 } DMA_ADAPTER
, *PDMA_ADAPTER
;
2136 (NTAPI
*PPUT_DMA_ADAPTER
)(
2137 IN PDMA_ADAPTER DmaAdapter
);
2140 (NTAPI
*PALLOCATE_COMMON_BUFFER
)(
2141 IN PDMA_ADAPTER DmaAdapter
,
2143 OUT PPHYSICAL_ADDRESS LogicalAddress
,
2144 IN BOOLEAN CacheEnabled
);
2147 (NTAPI
*PFREE_COMMON_BUFFER
)(
2148 IN PDMA_ADAPTER DmaAdapter
,
2150 IN PHYSICAL_ADDRESS LogicalAddress
,
2151 IN PVOID VirtualAddress
,
2152 IN BOOLEAN CacheEnabled
);
2155 (NTAPI
*PALLOCATE_ADAPTER_CHANNEL
)(
2156 IN PDMA_ADAPTER DmaAdapter
,
2157 IN PDEVICE_OBJECT DeviceObject
,
2158 IN ULONG NumberOfMapRegisters
,
2159 IN PDRIVER_CONTROL ExecutionRoutine
,
2163 (NTAPI
*PFLUSH_ADAPTER_BUFFERS
)(
2164 IN PDMA_ADAPTER DmaAdapter
,
2166 IN PVOID MapRegisterBase
,
2169 IN BOOLEAN WriteToDevice
);
2172 (NTAPI
*PFREE_ADAPTER_CHANNEL
)(
2173 IN PDMA_ADAPTER DmaAdapter
);
2176 (NTAPI
*PFREE_MAP_REGISTERS
)(
2177 IN PDMA_ADAPTER DmaAdapter
,
2178 PVOID MapRegisterBase
,
2179 ULONG NumberOfMapRegisters
);
2181 typedef PHYSICAL_ADDRESS
2182 (NTAPI
*PMAP_TRANSFER
)(
2183 IN PDMA_ADAPTER DmaAdapter
,
2185 IN PVOID MapRegisterBase
,
2187 IN OUT PULONG Length
,
2188 IN BOOLEAN WriteToDevice
);
2191 (NTAPI
*PGET_DMA_ALIGNMENT
)(
2192 IN PDMA_ADAPTER DmaAdapter
);
2195 (NTAPI
*PREAD_DMA_COUNTER
)(
2196 IN PDMA_ADAPTER DmaAdapter
);
2199 (NTAPI DRIVER_LIST_CONTROL
)(
2200 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2201 IN
struct _IRP
*Irp
,
2202 IN
struct _SCATTER_GATHER_LIST
*ScatterGather
,
2204 typedef DRIVER_LIST_CONTROL
*PDRIVER_LIST_CONTROL
;
2207 (NTAPI
*PGET_SCATTER_GATHER_LIST
)(
2208 IN PDMA_ADAPTER DmaAdapter
,
2209 IN PDEVICE_OBJECT DeviceObject
,
2213 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
2215 IN BOOLEAN WriteToDevice
);
2218 (NTAPI
*PPUT_SCATTER_GATHER_LIST
)(
2219 IN PDMA_ADAPTER DmaAdapter
,
2220 IN PSCATTER_GATHER_LIST ScatterGather
,
2221 IN BOOLEAN WriteToDevice
);
2224 (NTAPI
*PCALCULATE_SCATTER_GATHER_LIST_SIZE
)(
2225 IN PDMA_ADAPTER DmaAdapter
,
2226 IN PMDL Mdl OPTIONAL
,
2229 OUT PULONG ScatterGatherListSize
,
2230 OUT PULONG pNumberOfMapRegisters OPTIONAL
);
2233 (NTAPI
*PBUILD_SCATTER_GATHER_LIST
)(
2234 IN PDMA_ADAPTER DmaAdapter
,
2235 IN PDEVICE_OBJECT DeviceObject
,
2239 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
2241 IN BOOLEAN WriteToDevice
,
2242 IN PVOID ScatterGatherBuffer
,
2243 IN ULONG ScatterGatherLength
);
2246 (NTAPI
*PBUILD_MDL_FROM_SCATTER_GATHER_LIST
)(
2247 IN PDMA_ADAPTER DmaAdapter
,
2248 IN PSCATTER_GATHER_LIST ScatterGather
,
2249 IN PMDL OriginalMdl
,
2250 OUT PMDL
*TargetMdl
);
2252 typedef struct _DMA_OPERATIONS
{
2254 PPUT_DMA_ADAPTER PutDmaAdapter
;
2255 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer
;
2256 PFREE_COMMON_BUFFER FreeCommonBuffer
;
2257 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel
;
2258 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers
;
2259 PFREE_ADAPTER_CHANNEL FreeAdapterChannel
;
2260 PFREE_MAP_REGISTERS FreeMapRegisters
;
2261 PMAP_TRANSFER MapTransfer
;
2262 PGET_DMA_ALIGNMENT GetDmaAlignment
;
2263 PREAD_DMA_COUNTER ReadDmaCounter
;
2264 PGET_SCATTER_GATHER_LIST GetScatterGatherList
;
2265 PPUT_SCATTER_GATHER_LIST PutScatterGatherList
;
2266 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList
;
2267 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList
;
2268 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList
;
2269 } DMA_OPERATIONS
, *PDMA_OPERATIONS
;
2271 typedef struct _IO_RESOURCE_DESCRIPTOR
{
2274 UCHAR ShareDisposition
;
2282 PHYSICAL_ADDRESS MinimumAddress
;
2283 PHYSICAL_ADDRESS MaximumAddress
;
2288 PHYSICAL_ADDRESS MinimumAddress
;
2289 PHYSICAL_ADDRESS MaximumAddress
;
2292 ULONG MinimumVector
;
2293 ULONG MaximumVector
;
2296 ULONG MinimumChannel
;
2297 ULONG MaximumChannel
;
2302 PHYSICAL_ADDRESS MinimumAddress
;
2303 PHYSICAL_ADDRESS MaximumAddress
;
2320 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
2322 typedef struct _IO_RESOURCE_LIST
{
2326 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
2327 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
2329 typedef struct _IO_RESOURCE_REQUIREMENTS_LIST
{
2331 INTERFACE_TYPE InterfaceType
;
2335 ULONG AlternativeLists
;
2336 IO_RESOURCE_LIST List
[1];
2337 } IO_RESOURCE_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
2340 (NTAPI DRIVER_CANCEL
)(
2341 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2342 IN
struct _IRP
*Irp
);
2343 typedef DRIVER_CANCEL
*PDRIVER_CANCEL
;
2345 typedef struct _IRP
{
2348 struct _MDL
*MdlAddress
;
2351 struct _IRP
*MasterIrp
;
2352 volatile LONG IrpCount
;
2355 LIST_ENTRY ThreadListEntry
;
2356 IO_STATUS_BLOCK IoStatus
;
2357 KPROCESSOR_MODE RequestorMode
;
2358 BOOLEAN PendingReturned
;
2360 CHAR CurrentLocation
;
2363 CCHAR ApcEnvironment
;
2364 UCHAR AllocationFlags
;
2365 PIO_STATUS_BLOCK UserIosb
;
2369 _ANONYMOUS_UNION
union {
2370 PIO_APC_ROUTINE UserApcRoutine
;
2371 PVOID IssuingProcess
;
2373 PVOID UserApcContext
;
2374 } AsynchronousParameters
;
2375 LARGE_INTEGER AllocationSize
;
2377 volatile PDRIVER_CANCEL CancelRoutine
;
2381 _ANONYMOUS_UNION
union {
2382 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
2383 _ANONYMOUS_STRUCT
struct {
2384 PVOID DriverContext
[4];
2388 PCHAR AuxiliaryBuffer
;
2389 _ANONYMOUS_STRUCT
struct {
2390 LIST_ENTRY ListEntry
;
2391 _ANONYMOUS_UNION
union {
2392 struct _IO_STACK_LOCATION
*CurrentStackLocation
;
2396 struct _FILE_OBJECT
*OriginalFileObject
;
2399 PVOID CompletionKey
;
2403 typedef enum _IO_PAGING_PRIORITY
{
2404 IoPagingPriorityInvalid
,
2405 IoPagingPriorityNormal
,
2406 IoPagingPriorityHigh
,
2407 IoPagingPriorityReserved1
,
2408 IoPagingPriorityReserved2
2409 } IO_PAGING_PRIORITY
;
2412 (NTAPI IO_COMPLETION_ROUTINE
)(
2413 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2414 IN
struct _IRP
*Irp
,
2416 typedef IO_COMPLETION_ROUTINE
*PIO_COMPLETION_ROUTINE
;
2419 (NTAPI IO_DPC_ROUTINE
)(
2420 IN
struct _KDPC
*Dpc
,
2421 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2422 IN
struct _IRP
*Irp
,
2424 typedef IO_DPC_ROUTINE
*PIO_DPC_ROUTINE
;
2427 (NTAPI
*PMM_DLL_INITIALIZE
)(
2428 IN PUNICODE_STRING RegistryPath
);
2431 (NTAPI
*PMM_DLL_UNLOAD
)(
2435 (NTAPI IO_TIMER_ROUTINE
)(
2436 IN
struct _DEVICE_OBJECT
*DeviceObject
,
2438 typedef IO_TIMER_ROUTINE
*PIO_TIMER_ROUTINE
;
2440 typedef struct _IO_SECURITY_CONTEXT
{
2441 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
2442 PACCESS_STATE AccessState
;
2443 ACCESS_MASK DesiredAccess
;
2444 ULONG FullCreateOptions
;
2445 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
2449 typedef struct _IO_CSQ_IRP_CONTEXT
{
2452 struct _IO_CSQ
*Csq
;
2453 } IO_CSQ_IRP_CONTEXT
, *PIO_CSQ_IRP_CONTEXT
;
2456 (NTAPI
*PIO_CSQ_INSERT_IRP
)(
2457 IN
struct _IO_CSQ
*Csq
,
2461 (NTAPI IO_CSQ_INSERT_IRP_EX
)(
2462 IN
struct _IO_CSQ
*Csq
,
2464 IN PVOID InsertContext
);
2465 typedef IO_CSQ_INSERT_IRP_EX
*PIO_CSQ_INSERT_IRP_EX
;
2468 (NTAPI
*PIO_CSQ_REMOVE_IRP
)(
2469 IN
struct _IO_CSQ
*Csq
,
2473 (NTAPI
*PIO_CSQ_PEEK_NEXT_IRP
)(
2474 IN
struct _IO_CSQ
*Csq
,
2476 IN PVOID PeekContext
);
2479 (NTAPI
*PIO_CSQ_ACQUIRE_LOCK
)(
2480 IN
struct _IO_CSQ
*Csq
,
2484 (NTAPI
*PIO_CSQ_RELEASE_LOCK
)(
2485 IN
struct _IO_CSQ
*Csq
,
2489 (NTAPI
*PIO_CSQ_COMPLETE_CANCELED_IRP
)(
2490 IN
struct _IO_CSQ
*Csq
,
2493 typedef struct _IO_CSQ
{
2495 PIO_CSQ_INSERT_IRP CsqInsertIrp
;
2496 PIO_CSQ_REMOVE_IRP CsqRemoveIrp
;
2497 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp
;
2498 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock
;
2499 PIO_CSQ_RELEASE_LOCK CsqReleaseLock
;
2500 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
;
2501 PVOID ReservePointer
;
2504 typedef enum _BUS_QUERY_ID_TYPE
{
2506 BusQueryHardwareIDs
,
2507 BusQueryCompatibleIDs
,
2509 BusQueryDeviceSerialNumber
2510 } BUS_QUERY_ID_TYPE
, *PBUS_QUERY_ID_TYPE
;
2512 typedef enum _DEVICE_TEXT_TYPE
{
2513 DeviceTextDescription
,
2514 DeviceTextLocationInformation
2515 } DEVICE_TEXT_TYPE
, *PDEVICE_TEXT_TYPE
;
2518 (NTAPI
*PGPE_SERVICE_ROUTINE
)(
2523 (NTAPI
*PGPE_CONNECT_VECTOR
)(
2528 PGPE_SERVICE_ROUTINE
,
2533 (NTAPI
*PGPE_DISCONNECT_VECTOR
)(
2537 (NTAPI
*PGPE_ENABLE_EVENT
)(
2542 (NTAPI
*PGPE_DISABLE_EVENT
)(
2547 (NTAPI
*PGPE_CLEAR_STATUS
)(
2552 (NTAPI
*PDEVICE_NOTIFY_CALLBACK
)(
2557 (NTAPI
*PREGISTER_FOR_DEVICE_NOTIFICATIONS
)(
2559 PDEVICE_NOTIFY_CALLBACK
,
2563 (NTAPI
*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS
)(
2565 PDEVICE_NOTIFY_CALLBACK
);
2567 typedef struct _ACPI_INTERFACE_STANDARD
{
2571 PINTERFACE_REFERENCE InterfaceReference
;
2572 PINTERFACE_DEREFERENCE InterfaceDereference
;
2573 PGPE_CONNECT_VECTOR GpeConnectVector
;
2574 PGPE_DISCONNECT_VECTOR GpeDisconnectVector
;
2575 PGPE_ENABLE_EVENT GpeEnableEvent
;
2576 PGPE_DISABLE_EVENT GpeDisableEvent
;
2577 PGPE_CLEAR_STATUS GpeClearStatus
;
2578 PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications
;
2579 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications
;
2580 } ACPI_INTERFACE_STANDARD
, *PACPI_INTERFACE_STANDARD
;
2583 (NTAPI
*PGPE_SERVICE_ROUTINE2
)(
2584 PVOID ObjectContext
,
2585 PVOID ServiceContext
);
2588 (NTAPI
*PGPE_CONNECT_VECTOR2
)(
2591 KINTERRUPT_MODE Mode
,
2593 PGPE_SERVICE_ROUTINE ServiceRoutine
,
2594 PVOID ServiceContext
,
2595 PVOID
*ObjectContext
);
2598 (NTAPI
*PGPE_DISCONNECT_VECTOR2
)(
2600 PVOID ObjectContext
);
2603 (NTAPI
*PGPE_ENABLE_EVENT2
)(
2605 PVOID ObjectContext
);
2608 (NTAPI
*PGPE_DISABLE_EVENT2
)(
2610 PVOID ObjectContext
);
2613 (NTAPI
*PGPE_CLEAR_STATUS2
)(
2615 PVOID ObjectContext
);
2618 (NTAPI
*PDEVICE_NOTIFY_CALLBACK2
)(
2619 PVOID NotificationContext
,
2623 (NTAPI
*PREGISTER_FOR_DEVICE_NOTIFICATIONS2
)(
2625 PDEVICE_NOTIFY_CALLBACK2 NotificationHandler
,
2626 PVOID NotificationContext
);
2629 (NTAPI
*PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2
)(
2632 typedef struct _ACPI_INTERFACE_STANDARD2
{
2636 PINTERFACE_REFERENCE InterfaceReference
;
2637 PINTERFACE_DEREFERENCE InterfaceDereference
;
2638 PGPE_CONNECT_VECTOR2 GpeConnectVector
;
2639 PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector
;
2640 PGPE_ENABLE_EVENT2 GpeEnableEvent
;
2641 PGPE_DISABLE_EVENT2 GpeDisableEvent
;
2642 PGPE_CLEAR_STATUS2 GpeClearStatus
;
2643 PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications
;
2644 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications
;
2645 } ACPI_INTERFACE_STANDARD2
, *PACPI_INTERFACE_STANDARD2
;
2647 #if !defined(_AMD64_) && !defined(_IA64_)
2648 #include <pshpack4.h>
2650 typedef struct _IO_STACK_LOCATION
{
2651 UCHAR MajorFunction
;
2652 UCHAR MinorFunction
;
2657 PIO_SECURITY_CONTEXT SecurityContext
;
2659 USHORT POINTER_ALIGNMENT FileAttributes
;
2661 ULONG POINTER_ALIGNMENT EaLength
;
2665 ULONG POINTER_ALIGNMENT Key
;
2666 LARGE_INTEGER ByteOffset
;
2670 ULONG POINTER_ALIGNMENT Key
;
2671 LARGE_INTEGER ByteOffset
;
2675 PUNICODE_STRING FileName
;
2676 FILE_INFORMATION_CLASS FileInformationClass
;
2681 ULONG CompletionFilter
;
2685 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
2689 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass
;
2690 PFILE_OBJECT FileObject
;
2691 _ANONYMOUS_UNION
union {
2692 _ANONYMOUS_STRUCT
struct {
2693 BOOLEAN ReplaceIfExists
;
2694 BOOLEAN AdvanceOnly
;
2697 HANDLE DeleteHandle
;
2711 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass
;
2715 FS_INFORMATION_CLASS FsInformationClass
;
2718 ULONG OutputBufferLength
;
2719 ULONG InputBufferLength
;
2720 ULONG FsControlCode
;
2721 PVOID Type3InputBuffer
;
2722 } FileSystemControl
;
2724 PLARGE_INTEGER Length
;
2726 LARGE_INTEGER ByteOffset
;
2729 ULONG OutputBufferLength
;
2730 ULONG POINTER_ALIGNMENT InputBufferLength
;
2731 ULONG POINTER_ALIGNMENT IoControlCode
;
2732 PVOID Type3InputBuffer
;
2735 SECURITY_INFORMATION SecurityInformation
;
2736 ULONG POINTER_ALIGNMENT Length
;
2739 SECURITY_INFORMATION SecurityInformation
;
2740 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2744 PDEVICE_OBJECT DeviceObject
;
2748 PDEVICE_OBJECT DeviceObject
;
2751 struct _SCSI_REQUEST_BLOCK
*Srb
;
2756 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
2757 ULONG SidListLength
;
2763 DEVICE_RELATION_TYPE Type
;
2764 } QueryDeviceRelations
;
2766 CONST GUID
*InterfaceType
;
2769 PINTERFACE Interface
;
2770 PVOID InterfaceSpecificData
;
2773 PDEVICE_CAPABILITIES Capabilities
;
2774 } DeviceCapabilities
;
2776 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
2777 } FilterResourceRequirements
;
2782 ULONG POINTER_ALIGNMENT Length
;
2788 BUS_QUERY_ID_TYPE IdType
;
2791 DEVICE_TEXT_TYPE DeviceTextType
;
2792 LCID POINTER_ALIGNMENT LocaleId
;
2796 BOOLEAN Reserved
[3];
2797 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type
;
2798 } UsageNotification
;
2800 SYSTEM_POWER_STATE PowerState
;
2803 PPOWER_SEQUENCE PowerSequence
;
2806 ULONG SystemContext
;
2807 POWER_STATE_TYPE POINTER_ALIGNMENT Type
;
2808 POWER_STATE POINTER_ALIGNMENT State
;
2809 POWER_ACTION POINTER_ALIGNMENT ShutdownType
;
2812 PCM_RESOURCE_LIST AllocatedResources
;
2813 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
2816 ULONG_PTR ProviderId
;
2828 PDEVICE_OBJECT DeviceObject
;
2829 PFILE_OBJECT FileObject
;
2830 PIO_COMPLETION_ROUTINE CompletionRoutine
;
2832 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
2833 #if !defined(_AMD64_) && !defined(_IA64_)
2834 #include <poppack.h>
2837 /* IO_STACK_LOCATION.Control */
2839 #define SL_PENDING_RETURNED 0x01
2840 #define SL_ERROR_RETURNED 0x02
2841 #define SL_INVOKE_ON_CANCEL 0x20
2842 #define SL_INVOKE_ON_SUCCESS 0x40
2843 #define SL_INVOKE_ON_ERROR 0x80
2846 $
if (_WDMDDK_
|| _DEVIOCTL_
)
2847 #define METHOD_BUFFERED 0
2848 #define METHOD_IN_DIRECT 1
2849 #define METHOD_OUT_DIRECT 2
2850 #define METHOD_NEITHER 3
2852 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
2853 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
2855 $
endif (_WDMDDK_
|| _DEVIOCTL_
)
2857 #define FILE_SUPERSEDED 0x00000000
2858 #define FILE_OPENED 0x00000001
2859 #define FILE_CREATED 0x00000002
2860 #define FILE_OVERWRITTEN 0x00000003
2861 #define FILE_EXISTS 0x00000004
2862 #define FILE_DOES_NOT_EXIST 0x00000005
2864 #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
2865 #define FILE_WRITE_TO_END_OF_FILE 0xffffffff
2867 /* also in winnt.h */
2868 #define FILE_LIST_DIRECTORY 0x00000001
2869 #define FILE_READ_DATA 0x00000001
2870 #define FILE_ADD_FILE 0x00000002
2871 #define FILE_WRITE_DATA 0x00000002
2872 #define FILE_ADD_SUBDIRECTORY 0x00000004
2873 #define FILE_APPEND_DATA 0x00000004
2874 #define FILE_CREATE_PIPE_INSTANCE 0x00000004
2875 #define FILE_READ_EA 0x00000008
2876 #define FILE_WRITE_EA 0x00000010
2877 #define FILE_EXECUTE 0x00000020
2878 #define FILE_TRAVERSE 0x00000020
2879 #define FILE_DELETE_CHILD 0x00000040
2880 #define FILE_READ_ATTRIBUTES 0x00000080
2881 #define FILE_WRITE_ATTRIBUTES 0x00000100
2883 #define FILE_SHARE_READ 0x00000001
2884 #define FILE_SHARE_WRITE 0x00000002
2885 #define FILE_SHARE_DELETE 0x00000004
2886 #define FILE_SHARE_VALID_FLAGS 0x00000007
2888 #define FILE_ATTRIBUTE_READONLY 0x00000001
2889 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
2890 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
2891 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
2892 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
2893 #define FILE_ATTRIBUTE_DEVICE 0x00000040
2894 #define FILE_ATTRIBUTE_NORMAL 0x00000080
2895 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
2896 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
2897 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
2898 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
2899 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
2900 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
2901 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
2902 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000
2904 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
2905 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
2907 #define FILE_VALID_OPTION_FLAGS 0x00ffffff
2908 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
2909 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
2910 #define FILE_VALID_SET_FLAGS 0x00000036
2912 #define FILE_SUPERSEDE 0x00000000
2913 #define FILE_OPEN 0x00000001
2914 #define FILE_CREATE 0x00000002
2915 #define FILE_OPEN_IF 0x00000003
2916 #define FILE_OVERWRITE 0x00000004
2917 #define FILE_OVERWRITE_IF 0x00000005
2918 #define FILE_MAXIMUM_DISPOSITION 0x00000005
2920 #define FILE_DIRECTORY_FILE 0x00000001
2921 #define FILE_WRITE_THROUGH 0x00000002
2922 #define FILE_SEQUENTIAL_ONLY 0x00000004
2923 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
2924 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
2925 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
2926 #define FILE_NON_DIRECTORY_FILE 0x00000040
2927 #define FILE_CREATE_TREE_CONNECTION 0x00000080
2928 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
2929 #define FILE_NO_EA_KNOWLEDGE 0x00000200
2930 #define FILE_OPEN_REMOTE_INSTANCE 0x00000400
2931 #define FILE_RANDOM_ACCESS 0x00000800
2932 #define FILE_DELETE_ON_CLOSE 0x00001000
2933 #define FILE_OPEN_BY_FILE_ID 0x00002000
2934 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
2935 #define FILE_NO_COMPRESSION 0x00008000
2936 #if (NTDDI_VERSION >= NTDDI_WIN7)
2937 #define FILE_OPEN_REQUIRING_OPLOCK 0x00010000
2938 #define FILE_DISALLOW_EXCLUSIVE 0x00020000
2939 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
2940 #define FILE_RESERVE_OPFILTER 0x00100000
2941 #define FILE_OPEN_REPARSE_POINT 0x00200000
2942 #define FILE_OPEN_NO_RECALL 0x00400000
2943 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
2946 $
if (_WDMDDK_
|| _DEVIOCTL_
)
2947 #define FILE_ANY_ACCESS 0x00000000
2948 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
2949 #define FILE_READ_ACCESS 0x00000001
2950 #define FILE_WRITE_ACCESS 0x00000002
2952 $
endif (_WDMDDK_
|| _DEVIOCTL_
)
2954 #define FILE_ALL_ACCESS \
2955 (STANDARD_RIGHTS_REQUIRED | \
2959 #define FILE_GENERIC_EXECUTE \
2960 (STANDARD_RIGHTS_EXECUTE | \
2961 FILE_READ_ATTRIBUTES | \
2965 #define FILE_GENERIC_READ \
2966 (STANDARD_RIGHTS_READ | \
2968 FILE_READ_ATTRIBUTES | \
2972 #define FILE_GENERIC_WRITE \
2973 (STANDARD_RIGHTS_WRITE | \
2975 FILE_WRITE_ATTRIBUTES | \
2977 FILE_APPEND_DATA | \
2982 #define WMIREG_ACTION_REGISTER 1
2983 #define WMIREG_ACTION_DEREGISTER 2
2984 #define WMIREG_ACTION_REREGISTER 3
2985 #define WMIREG_ACTION_UPDATE_GUIDS 4
2986 #define WMIREG_ACTION_BLOCK_IRPS 5
2988 #define WMIREGISTER 0
2992 (NTAPI FWMI_NOTIFICATION_CALLBACK
)(
2995 typedef FWMI_NOTIFICATION_CALLBACK
*WMI_NOTIFICATION_CALLBACK
;
3000 typedef struct _PCI_SLOT_NUMBER
{
3003 ULONG DeviceNumber
:5;
3004 ULONG FunctionNumber
:3;
3009 } PCI_SLOT_NUMBER
, *PPCI_SLOT_NUMBER
;
3011 #define PCI_TYPE0_ADDRESSES 6
3012 #define PCI_TYPE1_ADDRESSES 2
3013 #define PCI_TYPE2_ADDRESSES 5
3015 typedef struct _PCI_COMMON_HEADER
{
3016 PCI_COMMON_HEADER_LAYOUT
3017 } PCI_COMMON_HEADER
, *PPCI_COMMON_HEADER
;
3020 typedef struct _PCI_COMMON_CONFIG
{
3021 PCI_COMMON_HEADER_LAYOUT
3022 UCHAR DeviceSpecific
[192];
3023 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
3025 typedef struct _PCI_COMMON_CONFIG
{
3026 PCI_COMMON_HEADER DUMMYSTRUCTNAME
;
3027 UCHAR DeviceSpecific
[192];
3028 } PCI_COMMON_CONFIG
, *PPCI_COMMON_CONFIG
;
3031 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
3033 #define PCI_EXTENDED_CONFIG_LENGTH 0x1000
3035 #define PCI_MAX_DEVICES 32
3036 #define PCI_MAX_FUNCTION 8
3037 #define PCI_MAX_BRIDGE_NUMBER 0xFF
3038 #define PCI_INVALID_VENDORID 0xFFFF
3040 /* PCI_COMMON_CONFIG.HeaderType */
3041 #define PCI_MULTIFUNCTION 0x80
3042 #define PCI_DEVICE_TYPE 0x00
3043 #define PCI_BRIDGE_TYPE 0x01
3044 #define PCI_CARDBUS_BRIDGE_TYPE 0x02
3046 #define PCI_CONFIGURATION_TYPE(PciData) \
3047 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
3049 #define PCI_MULTIFUNCTION_DEVICE(PciData) \
3050 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
3052 /* PCI_COMMON_CONFIG.Command */
3053 #define PCI_ENABLE_IO_SPACE 0x0001
3054 #define PCI_ENABLE_MEMORY_SPACE 0x0002
3055 #define PCI_ENABLE_BUS_MASTER 0x0004
3056 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
3057 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
3058 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
3059 #define PCI_ENABLE_PARITY 0x0040
3060 #define PCI_ENABLE_WAIT_CYCLE 0x0080
3061 #define PCI_ENABLE_SERR 0x0100
3062 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
3063 #define PCI_DISABLE_LEVEL_INTERRUPT 0x0400
3065 /* PCI_COMMON_CONFIG.Status */
3066 #define PCI_STATUS_INTERRUPT_PENDING 0x0008
3067 #define PCI_STATUS_CAPABILITIES_LIST 0x0010
3068 #define PCI_STATUS_66MHZ_CAPABLE 0x0020
3069 #define PCI_STATUS_UDF_SUPPORTED 0x0040
3070 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
3071 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
3072 #define PCI_STATUS_DEVSEL 0x0600
3073 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
3074 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
3075 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
3076 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
3077 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
3079 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
3081 #define PCI_WHICHSPACE_CONFIG 0x0
3082 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
3084 #define PCI_CAPABILITY_ID_POWER_MANAGEMENT 0x01
3085 #define PCI_CAPABILITY_ID_AGP 0x02
3086 #define PCI_CAPABILITY_ID_VPD 0x03
3087 #define PCI_CAPABILITY_ID_SLOT_ID 0x04
3088 #define PCI_CAPABILITY_ID_MSI 0x05
3089 #define PCI_CAPABILITY_ID_CPCI_HOTSWAP 0x06
3090 #define PCI_CAPABILITY_ID_PCIX 0x07
3091 #define PCI_CAPABILITY_ID_HYPERTRANSPORT 0x08
3092 #define PCI_CAPABILITY_ID_VENDOR_SPECIFIC 0x09
3093 #define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A
3094 #define PCI_CAPABILITY_ID_CPCI_RES_CTRL 0x0B
3095 #define PCI_CAPABILITY_ID_SHPC 0x0C
3096 #define PCI_CAPABILITY_ID_P2P_SSID 0x0D
3097 #define PCI_CAPABILITY_ID_AGP_TARGET 0x0E
3098 #define PCI_CAPABILITY_ID_SECURE 0x0F
3099 #define PCI_CAPABILITY_ID_PCI_EXPRESS 0x10
3100 #define PCI_CAPABILITY_ID_MSIX 0x11
3102 typedef struct _PCI_CAPABILITIES_HEADER
{
3105 } PCI_CAPABILITIES_HEADER
, *PPCI_CAPABILITIES_HEADER
;
3107 typedef struct _PCI_PMC
{
3111 UCHAR DeviceSpecificInitialization
:1;
3113 struct _PM_SUPPORT
{
3123 } PCI_PMC
, *PPCI_PMC
;
3125 typedef struct _PCI_PMCSR
{
3126 USHORT PowerState
:2;
3129 USHORT DataSelect
:4;
3132 } PCI_PMCSR
, *PPCI_PMCSR
;
3134 typedef struct _PCI_PMCSR_BSE
{
3136 UCHAR D3HotSupportsStopClock
:1;
3137 UCHAR BusPowerClockControlEnabled
:1;
3138 } PCI_PMCSR_BSE
, *PPCI_PMCSR_BSE
;
3140 typedef struct _PCI_PM_CAPABILITY
{
3141 PCI_CAPABILITIES_HEADER Header
;
3143 PCI_PMC Capabilities
;
3147 PCI_PMCSR ControlStatus
;
3151 PCI_PMCSR_BSE BridgeSupport
;
3155 } PCI_PM_CAPABILITY
, *PPCI_PM_CAPABILITY
;
3158 PCI_CAPABILITIES_HEADER Header
;
3161 USHORT DataParityErrorRecoveryEnable
:1;
3162 USHORT EnableRelaxedOrdering
:1;
3163 USHORT MaxMemoryReadByteCount
:2;
3164 USHORT MaxOutstandingSplitTransactions
:3;
3171 ULONG FunctionNumber
:3;
3172 ULONG DeviceNumber
:5;
3174 ULONG Device64Bit
:1;
3175 ULONG Capable133MHz
:1;
3176 ULONG SplitCompletionDiscarded
:1;
3177 ULONG UnexpectedSplitCompletion
:1;
3178 ULONG DeviceComplexity
:1;
3179 ULONG DesignedMaxMemoryReadByteCount
:2;
3180 ULONG DesignedMaxOutstandingSplitTransactions
:3;
3181 ULONG DesignedMaxCumulativeReadSize
:3;
3182 ULONG ReceivedSplitCompletionErrorMessage
:1;
3183 ULONG CapablePCIX266
:1;
3184 ULONG CapablePCIX533
:1;
3188 } PCI_X_CAPABILITY
, *PPCI_X_CAPABILITY
;
3190 #define PCI_EXPRESS_ADVANCED_ERROR_REPORTING_CAP_ID 0x0001
3191 #define PCI_EXPRESS_VIRTUAL_CHANNEL_CAP_ID 0x0002
3192 #define PCI_EXPRESS_DEVICE_SERIAL_NUMBER_CAP_ID 0x0003
3193 #define PCI_EXPRESS_POWER_BUDGETING_CAP_ID 0x0004
3194 #define PCI_EXPRESS_RC_LINK_DECLARATION_CAP_ID 0x0005
3195 #define PCI_EXPRESS_RC_INTERNAL_LINK_CONTROL_CAP_ID 0x0006
3196 #define PCI_EXPRESS_RC_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION_CAP_ID 0x0007
3197 #define PCI_EXPRESS_MFVC_CAP_ID 0x0008
3198 #define PCI_EXPRESS_VC_AND_MFVC_CAP_ID 0x0009
3199 #define PCI_EXPRESS_RCRB_HEADER_CAP_ID 0x000A
3200 #define PCI_EXPRESS_SINGLE_ROOT_IO_VIRTUALIZATION_CAP_ID 0x0010
3202 typedef struct _PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
{
3203 USHORT CapabilityID
;
3206 } PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
, *PPCI_EXPRESS_ENHANCED_CAPABILITY_HEADER
;
3208 typedef struct _PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
{
3209 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
3210 ULONG LowSerialNumber
;
3211 ULONG HighSerialNumber
;
3212 } PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
, *PPCI_EXPRESS_SERIAL_NUMBER_CAPABILITY
;
3214 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
{
3218 ULONG DataLinkProtocolError
:1;
3219 ULONG SurpriseDownError
:1;
3221 ULONG PoisonedTLP
:1;
3222 ULONG FlowControlProtocolError
:1;
3223 ULONG CompletionTimeout
:1;
3224 ULONG CompleterAbort
:1;
3225 ULONG UnexpectedCompletion
:1;
3226 ULONG ReceiverOverflow
:1;
3227 ULONG MalformedTLP
:1;
3229 ULONG UnsupportedRequestError
:1;
3233 } PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS
;
3235 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
{
3239 ULONG DataLinkProtocolError
:1;
3240 ULONG SurpriseDownError
:1;
3242 ULONG PoisonedTLP
:1;
3243 ULONG FlowControlProtocolError
:1;
3244 ULONG CompletionTimeout
:1;
3245 ULONG CompleterAbort
:1;
3246 ULONG UnexpectedCompletion
:1;
3247 ULONG ReceiverOverflow
:1;
3248 ULONG MalformedTLP
:1;
3250 ULONG UnsupportedRequestError
:1;
3254 } PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_MASK
;
3256 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
{
3260 ULONG DataLinkProtocolError
:1;
3261 ULONG SurpriseDownError
:1;
3263 ULONG PoisonedTLP
:1;
3264 ULONG FlowControlProtocolError
:1;
3265 ULONG CompletionTimeout
:1;
3266 ULONG CompleterAbort
:1;
3267 ULONG UnexpectedCompletion
:1;
3268 ULONG ReceiverOverflow
:1;
3269 ULONG MalformedTLP
:1;
3271 ULONG UnsupportedRequestError
:1;
3275 } PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY
;
3277 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_STATUS
{
3279 ULONG ReceiverError
:1;
3283 ULONG ReplayNumRollover
:1;
3285 ULONG ReplayTimerTimeout
:1;
3286 ULONG AdvisoryNonFatalError
:1;
3290 } PCI_EXPRESS_CORRECTABLE_ERROR_STATUS
, *PPCI_CORRECTABLE_ERROR_STATUS
;
3292 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_MASK
{
3294 ULONG ReceiverError
:1;
3298 ULONG ReplayNumRollover
:1;
3300 ULONG ReplayTimerTimeout
:1;
3301 ULONG AdvisoryNonFatalError
:1;
3305 } PCI_EXPRESS_CORRECTABLE_ERROR_MASK
, *PPCI_CORRECTABLE_ERROR_MASK
;
3307 typedef union _PCI_EXPRESS_AER_CAPABILITIES
{
3309 ULONG FirstErrorPointer
:5;
3310 ULONG ECRCGenerationCapable
:1;
3311 ULONG ECRCGenerationEnable
:1;
3312 ULONG ECRCCheckCapable
:1;
3313 ULONG ECRCCheckEnable
:1;
3317 } PCI_EXPRESS_AER_CAPABILITIES
, *PPCI_EXPRESS_AER_CAPABILITIES
;
3319 typedef union _PCI_EXPRESS_ROOT_ERROR_COMMAND
{
3321 ULONG CorrectableErrorReportingEnable
:1;
3322 ULONG NonFatalErrorReportingEnable
:1;
3323 ULONG FatalErrorReportingEnable
:1;
3327 } PCI_EXPRESS_ROOT_ERROR_COMMAND
, *PPCI_EXPRESS_ROOT_ERROR_COMMAND
;
3329 typedef union _PCI_EXPRESS_ROOT_ERROR_STATUS
{
3331 ULONG CorrectableErrorReceived
:1;
3332 ULONG MultipleCorrectableErrorsReceived
:1;
3333 ULONG UncorrectableErrorReceived
:1;
3334 ULONG MultipleUncorrectableErrorsReceived
:1;
3335 ULONG FirstUncorrectableFatal
:1;
3336 ULONG NonFatalErrorMessagesReceived
:1;
3337 ULONG FatalErrorMessagesReceived
:1;
3339 ULONG AdvancedErrorInterruptMessageNumber
:5;
3342 } PCI_EXPRESS_ROOT_ERROR_STATUS
, *PPCI_EXPRESS_ROOT_ERROR_STATUS
;
3344 typedef union _PCI_EXPRESS_ERROR_SOURCE_ID
{
3346 USHORT CorrectableSourceIdFun
:3;
3347 USHORT CorrectableSourceIdDev
:5;
3348 USHORT CorrectableSourceIdBus
:8;
3349 USHORT UncorrectableSourceIdFun
:3;
3350 USHORT UncorrectableSourceIdDev
:5;
3351 USHORT UncorrectableSourceIdBus
:8;
3354 } PCI_EXPRESS_ERROR_SOURCE_ID
, *PPCI_EXPRESS_ERROR_SOURCE_ID
;
3356 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
{
3358 ULONG TargetAbortOnSplitCompletion
:1;
3359 ULONG MasterAbortOnSplitCompletion
:1;
3360 ULONG ReceivedTargetAbort
:1;
3361 ULONG ReceivedMasterAbort
:1;
3363 ULONG UnexpectedSplitCompletionError
:1;
3364 ULONG UncorrectableSplitCompletion
:1;
3365 ULONG UncorrectableDataError
:1;
3366 ULONG UncorrectableAttributeError
:1;
3367 ULONG UncorrectableAddressError
:1;
3368 ULONG DelayedTransactionDiscardTimerExpired
:1;
3369 ULONG PERRAsserted
:1;
3370 ULONG SERRAsserted
:1;
3371 ULONG InternalBridgeError
:1;
3375 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS
;
3377 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
{
3379 ULONG TargetAbortOnSplitCompletion
:1;
3380 ULONG MasterAbortOnSplitCompletion
:1;
3381 ULONG ReceivedTargetAbort
:1;
3382 ULONG ReceivedMasterAbort
:1;
3384 ULONG UnexpectedSplitCompletionError
:1;
3385 ULONG UncorrectableSplitCompletion
:1;
3386 ULONG UncorrectableDataError
:1;
3387 ULONG UncorrectableAttributeError
:1;
3388 ULONG UncorrectableAddressError
:1;
3389 ULONG DelayedTransactionDiscardTimerExpired
:1;
3390 ULONG PERRAsserted
:1;
3391 ULONG SERRAsserted
:1;
3392 ULONG InternalBridgeError
:1;
3396 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK
;
3398 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
{
3400 ULONG TargetAbortOnSplitCompletion
:1;
3401 ULONG MasterAbortOnSplitCompletion
:1;
3402 ULONG ReceivedTargetAbort
:1;
3403 ULONG ReceivedMasterAbort
:1;
3405 ULONG UnexpectedSplitCompletionError
:1;
3406 ULONG UncorrectableSplitCompletion
:1;
3407 ULONG UncorrectableDataError
:1;
3408 ULONG UncorrectableAttributeError
:1;
3409 ULONG UncorrectableAddressError
:1;
3410 ULONG DelayedTransactionDiscardTimerExpired
:1;
3411 ULONG PERRAsserted
:1;
3412 ULONG SERRAsserted
:1;
3413 ULONG InternalBridgeError
:1;
3417 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY
;
3419 typedef union _PCI_EXPRESS_SEC_AER_CAPABILITIES
{
3421 ULONG SecondaryUncorrectableFirstErrorPtr
:5;
3425 } PCI_EXPRESS_SEC_AER_CAPABILITIES
, *PPCI_EXPRESS_SEC_AER_CAPABILITIES
;
3427 #define ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING 0x00000001
3428 #define ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING 0x00000002
3429 #define ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING 0x00000004
3431 #define ROOT_CMD_ERROR_REPORTING_ENABLE_MASK \
3432 (ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING | \
3433 ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING | \
3434 ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING)
3436 typedef struct _PCI_EXPRESS_AER_CAPABILITY
{
3437 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
3438 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
3439 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
3440 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
3441 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
3442 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
3443 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
3445 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus
;
3446 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask
;
3447 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity
;
3448 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl
;
3449 ULONG SecHeaderLog
[4];
3450 } PCI_EXPRESS_AER_CAPABILITY
, *PPCI_EXPRESS_AER_CAPABILITY
;
3452 typedef struct _PCI_EXPRESS_ROOTPORT_AER_CAPABILITY
{
3453 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
3454 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
3455 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
3456 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
3457 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
3458 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
3459 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
3461 PCI_EXPRESS_ROOT_ERROR_COMMAND RootErrorCommand
;
3462 PCI_EXPRESS_ROOT_ERROR_STATUS RootErrorStatus
;
3463 PCI_EXPRESS_ERROR_SOURCE_ID ErrorSourceId
;
3464 } PCI_EXPRESS_ROOTPORT_AER_CAPABILITY
, *PPCI_EXPRESS_ROOTPORT_AER_CAPABILITY
;
3466 typedef struct _PCI_EXPRESS_BRIDGE_AER_CAPABILITY
{
3467 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
3468 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus
;
3469 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask
;
3470 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity
;
3471 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus
;
3472 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask
;
3473 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl
;
3475 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus
;
3476 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask
;
3477 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity
;
3478 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl
;
3479 ULONG SecHeaderLog
[4];
3480 } PCI_EXPRESS_BRIDGE_AER_CAPABILITY
, *PPCI_EXPRESS_BRIDGE_AER_CAPABILITY
;
3482 typedef union _PCI_EXPRESS_SRIOV_CAPS
{
3484 ULONG VFMigrationCapable
:1;
3486 ULONG VFMigrationInterruptNumber
:11;
3489 } PCI_EXPRESS_SRIOV_CAPS
, *PPCI_EXPRESS_SRIOV_CAPS
;
3491 typedef union _PCI_EXPRESS_SRIOV_CONTROL
{
3494 USHORT VFMigrationEnable
:1;
3495 USHORT VFMigrationInterruptEnable
:1;
3496 USHORT VFMemorySpaceEnable
:1;
3497 USHORT ARICapableHierarchy
:1;
3498 USHORT Reserved1
:11;
3501 } PCI_EXPRESS_SRIOV_CONTROL
, *PPCI_EXPRESS_SRIOV_CONTROL
;
3503 typedef union _PCI_EXPRESS_SRIOV_STATUS
{
3505 USHORT VFMigrationStatus
:1;
3506 USHORT Reserved1
:15;
3509 } PCI_EXPRESS_SRIOV_STATUS
, *PPCI_EXPRESS_SRIOV_STATUS
;
3511 typedef union _PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
{
3513 ULONG VFMigrationStateBIR
:3;
3514 ULONG VFMigrationStateOffset
:29;
3517 } PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
, *PPCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY
;
3519 typedef struct _PCI_EXPRESS_SRIOV_CAPABILITY
{
3520 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header
;
3521 PCI_EXPRESS_SRIOV_CAPS SRIOVCapabilities
;
3522 PCI_EXPRESS_SRIOV_CONTROL SRIOVControl
;
3523 PCI_EXPRESS_SRIOV_STATUS SRIOVStatus
;
3527 UCHAR FunctionDependencyLink
;
3529 USHORT FirstVFOffset
;
3533 ULONG SupportedPageSizes
;
3534 ULONG SystemPageSize
;
3535 ULONG BaseAddresses
[PCI_TYPE0_ADDRESSES
];
3536 PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY VFMigrationStateArrayOffset
;
3537 } PCI_EXPRESS_SRIOV_CAPABILITY
, *PPCI_EXPRESS_SRIOV_CAPABILITY
;
3539 /* PCI device classes */
3540 #define PCI_CLASS_PRE_20 0x00
3541 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
3542 #define PCI_CLASS_NETWORK_CTLR 0x02
3543 #define PCI_CLASS_DISPLAY_CTLR 0x03
3544 #define PCI_CLASS_MULTIMEDIA_DEV 0x04
3545 #define PCI_CLASS_MEMORY_CTLR 0x05
3546 #define PCI_CLASS_BRIDGE_DEV 0x06
3547 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
3548 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
3549 #define PCI_CLASS_INPUT_DEV 0x09
3550 #define PCI_CLASS_DOCKING_STATION 0x0a
3551 #define PCI_CLASS_PROCESSOR 0x0b
3552 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
3553 #define PCI_CLASS_WIRELESS_CTLR 0x0d
3554 #define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0e
3555 #define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0f
3556 #define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10
3557 #define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11
3558 #define PCI_CLASS_NOT_DEFINED 0xff
3560 /* PCI device subclasses for class 0 */
3561 #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
3562 #define PCI_SUBCLASS_PRE_20_VGA 0x01
3564 /* PCI device subclasses for class 1 (mass storage controllers)*/
3565 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
3566 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
3567 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
3568 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
3569 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
3570 #define PCI_SUBCLASS_MSC_OTHER 0x80
3572 /* PCI device subclasses for class 2 (network controllers)*/
3573 #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
3574 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
3575 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
3576 #define PCI_SUBCLASS_NET_ATM_CTLR 0x03
3577 #define PCI_SUBCLASS_NET_ISDN_CTLR 0x04
3578 #define PCI_SUBCLASS_NET_OTHER 0x80
3580 /* PCI device subclasses for class 3 (display controllers)*/
3581 #define PCI_SUBCLASS_VID_VGA_CTLR 0x00
3582 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01
3583 #define PCI_SUBCLASS_VID_3D_CTLR 0x02
3584 #define PCI_SUBCLASS_VID_OTHER 0x80
3586 /* PCI device subclasses for class 4 (multimedia device)*/
3587 #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
3588 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
3589 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
3590 #define PCI_SUBCLASS_MM_OTHER 0x80
3592 /* PCI device subclasses for class 5 (memory controller)*/
3593 #define PCI_SUBCLASS_MEM_RAM 0x00
3594 #define PCI_SUBCLASS_MEM_FLASH 0x01
3595 #define PCI_SUBCLASS_MEM_OTHER 0x80
3597 /* PCI device subclasses for class 6 (bridge device)*/
3598 #define PCI_SUBCLASS_BR_HOST 0x00
3599 #define PCI_SUBCLASS_BR_ISA 0x01
3600 #define PCI_SUBCLASS_BR_EISA 0x02
3601 #define PCI_SUBCLASS_BR_MCA 0x03
3602 #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
3603 #define PCI_SUBCLASS_BR_PCMCIA 0x05
3604 #define PCI_SUBCLASS_BR_NUBUS 0x06
3605 #define PCI_SUBCLASS_BR_CARDBUS 0x07
3606 #define PCI_SUBCLASS_BR_RACEWAY 0x08
3607 #define PCI_SUBCLASS_BR_OTHER 0x80
3609 #define PCI_SUBCLASS_COM_SERIAL 0x00
3610 #define PCI_SUBCLASS_COM_PARALLEL 0x01
3611 #define PCI_SUBCLASS_COM_MULTIPORT 0x02
3612 #define PCI_SUBCLASS_COM_MODEM 0x03
3613 #define PCI_SUBCLASS_COM_OTHER 0x80
3615 #define PCI_SUBCLASS_SYS_INTERRUPT_CTLR 0x00
3616 #define PCI_SUBCLASS_SYS_DMA_CTLR 0x01
3617 #define PCI_SUBCLASS_SYS_SYSTEM_TIMER 0x02
3618 #define PCI_SUBCLASS_SYS_REAL_TIME_CLOCK 0x03
3619 #define PCI_SUBCLASS_SYS_GEN_HOTPLUG_CTLR 0x04
3620 #define PCI_SUBCLASS_SYS_SDIO_CTRL 0x05
3621 #define PCI_SUBCLASS_SYS_OTHER 0x80
3623 #define PCI_SUBCLASS_INP_KEYBOARD 0x00
3624 #define PCI_SUBCLASS_INP_DIGITIZER 0x01
3625 #define PCI_SUBCLASS_INP_MOUSE 0x02
3626 #define PCI_SUBCLASS_INP_SCANNER 0x03
3627 #define PCI_SUBCLASS_INP_GAMEPORT 0x04
3628 #define PCI_SUBCLASS_INP_OTHER 0x80
3630 #define PCI_SUBCLASS_DOC_GENERIC 0x00
3631 #define PCI_SUBCLASS_DOC_OTHER 0x80
3633 #define PCI_SUBCLASS_PROC_386 0x00
3634 #define PCI_SUBCLASS_PROC_486 0x01
3635 #define PCI_SUBCLASS_PROC_PENTIUM 0x02
3636 #define PCI_SUBCLASS_PROC_ALPHA 0x10
3637 #define PCI_SUBCLASS_PROC_POWERPC 0x20
3638 #define PCI_SUBCLASS_PROC_COPROCESSOR 0x40
3640 /* PCI device subclasses for class C (serial bus controller)*/
3641 #define PCI_SUBCLASS_SB_IEEE1394 0x00
3642 #define PCI_SUBCLASS_SB_ACCESS 0x01
3643 #define PCI_SUBCLASS_SB_SSA 0x02
3644 #define PCI_SUBCLASS_SB_USB 0x03
3645 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
3646 #define PCI_SUBCLASS_SB_SMBUS 0x05
3648 #define PCI_SUBCLASS_WIRELESS_IRDA 0x00
3649 #define PCI_SUBCLASS_WIRELESS_CON_IR 0x01
3650 #define PCI_SUBCLASS_WIRELESS_RF 0x10
3651 #define PCI_SUBCLASS_WIRELESS_OTHER 0x80
3653 #define PCI_SUBCLASS_INTIO_I2O 0x00
3655 #define PCI_SUBCLASS_SAT_TV 0x01
3656 #define PCI_SUBCLASS_SAT_AUDIO 0x02
3657 #define PCI_SUBCLASS_SAT_VOICE 0x03
3658 #define PCI_SUBCLASS_SAT_DATA 0x04
3660 #define PCI_SUBCLASS_CRYPTO_NET_COMP 0x00
3661 #define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT 0x10
3662 #define PCI_SUBCLASS_CRYPTO_OTHER 0x80
3664 #define PCI_SUBCLASS_DASP_DPIO 0x00
3665 #define PCI_SUBCLASS_DASP_OTHER 0x80
3667 #define PCI_ADDRESS_IO_SPACE 0x00000001
3668 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
3669 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
3670 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
3671 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
3672 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
3674 #define PCI_TYPE_32BIT 0
3675 #define PCI_TYPE_20BIT 2
3676 #define PCI_TYPE_64BIT 4
3678 #define PCI_ROMADDRESS_ENABLED 0x00000001
3680 #endif /* _PCI_X_ */
3682 #define PCI_EXPRESS_LINK_QUIESCENT_INTERFACE_VERSION 1
3685 (NTAPI PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
)(
3686 IN OUT PVOID Context
);
3687 typedef PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
*PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE
;
3690 (NTAPI PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
)(
3691 IN OUT PVOID Context
);
3692 typedef PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
*PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE
;
3694 typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE
{
3698 PINTERFACE_REFERENCE InterfaceReference
;
3699 PINTERFACE_DEREFERENCE InterfaceDereference
;
3700 PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE PciExpressEnterLinkQuiescentMode
;
3701 PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE PciExpressExitLinkQuiescentMode
;
3702 } PCI_EXPRESS_LINK_QUIESCENT_INTERFACE
, *PPCI_EXPRESS_LINK_QUIESCENT_INTERFACE
;
3704 #define PCI_EXPRESS_ROOT_PORT_INTERFACE_VERSION 1
3707 (NTAPI
*PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE
)(
3714 (NTAPI
*PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE
)(
3720 typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE
{
3724 PINTERFACE_REFERENCE InterfaceReference
;
3725 PINTERFACE_DEREFERENCE InterfaceDereference
;
3726 PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE ReadConfigSpace
;
3727 PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE WriteConfigSpace
;
3728 } PCI_EXPRESS_ROOT_PORT_INTERFACE
, *PPCI_EXPRESS_ROOT_PORT_INTERFACE
;
3730 #define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION 1
3733 (NTAPI PCI_MSIX_SET_ENTRY
)(
3735 IN ULONG TableEntry
,
3736 IN ULONG MessageNumber
);
3737 typedef PCI_MSIX_SET_ENTRY
*PPCI_MSIX_SET_ENTRY
;
3740 (NTAPI PCI_MSIX_MASKUNMASK_ENTRY
)(
3742 IN ULONG TableEntry
);
3743 typedef PCI_MSIX_MASKUNMASK_ENTRY
*PPCI_MSIX_MASKUNMASK_ENTRY
;
3746 (NTAPI PCI_MSIX_GET_ENTRY
)(
3748 IN ULONG TableEntry
,
3749 OUT PULONG MessageNumber
,
3750 OUT PBOOLEAN Masked
);
3751 typedef PCI_MSIX_GET_ENTRY
*PPCI_MSIX_GET_ENTRY
;
3754 (NTAPI PCI_MSIX_GET_TABLE_SIZE
)(
3756 OUT PULONG TableSize
);
3757 typedef PCI_MSIX_GET_TABLE_SIZE
*PPCI_MSIX_GET_TABLE_SIZE
;
3759 typedef struct _PCI_MSIX_TABLE_CONFIG_INTERFACE
{
3763 PINTERFACE_REFERENCE InterfaceReference
;
3764 PINTERFACE_DEREFERENCE InterfaceDereference
;
3765 PPCI_MSIX_SET_ENTRY SetTableEntry
;
3766 PPCI_MSIX_MASKUNMASK_ENTRY MaskTableEntry
;
3767 PPCI_MSIX_MASKUNMASK_ENTRY UnmaskTableEntry
;
3768 PPCI_MSIX_GET_ENTRY GetTableEntry
;
3769 PPCI_MSIX_GET_TABLE_SIZE GetTableSize
;
3770 } PCI_MSIX_TABLE_CONFIG_INTERFACE
, *PPCI_MSIX_TABLE_CONFIG_INTERFACE
;
3772 #define PCI_MSIX_TABLE_CONFIG_MINIMUM_SIZE \
3773 RTL_SIZEOF_THROUGH_FIELD(PCI_MSIX_TABLE_CONFIG_INTERFACE, UnmaskTableEntry)
3779 typedef enum _CONFIGURATION_TYPE
{
3782 FloatingPointProcessor
,
3792 MultiFunctionAdapter
,
3806 FloppyDiskPeripheral
,
3819 RealModeIrqRoutingTable
,
3820 RealModePCIEnumeration
,
3822 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
3823 #endif /* !_ARC_DDK_ */
3826 ** IRP function codes
3829 #define IRP_MN_QUERY_DIRECTORY 0x01
3830 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
3832 #define IRP_MN_USER_FS_REQUEST 0x00
3833 #define IRP_MN_MOUNT_VOLUME 0x01
3834 #define IRP_MN_VERIFY_VOLUME 0x02
3835 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
3836 #define IRP_MN_TRACK_LINK 0x04
3837 #define IRP_MN_KERNEL_CALL 0x04
3839 #define IRP_MN_LOCK 0x01
3840 #define IRP_MN_UNLOCK_SINGLE 0x02
3841 #define IRP_MN_UNLOCK_ALL 0x03
3842 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
3844 #define IRP_MN_FLUSH_AND_PURGE 0x01
3846 #define IRP_MN_NORMAL 0x00
3847 #define IRP_MN_DPC 0x01
3848 #define IRP_MN_MDL 0x02
3849 #define IRP_MN_COMPLETE 0x04
3850 #define IRP_MN_COMPRESSED 0x08
3852 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
3853 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
3854 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
3856 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
3858 #define IO_CHECK_CREATE_PARAMETERS 0x0200
3859 #define IO_ATTACH_DEVICE 0x0400
3860 #define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800
3864 (NTAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
3866 IN PUNICODE_STRING PathName
,
3867 IN INTERFACE_TYPE BusType
,
3869 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
3870 IN CONFIGURATION_TYPE ControllerType
,
3871 IN ULONG ControllerNumber
,
3872 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
3873 IN CONFIGURATION_TYPE PeripheralType
,
3874 IN ULONG PeripheralNumber
,
3875 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
3877 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
3878 IoQueryDeviceIdentifier
= 0,
3879 IoQueryDeviceConfigurationData
,
3880 IoQueryDeviceComponentInformation
,
3881 IoQueryDeviceMaxData
3882 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
3885 (NTAPI
*PDRIVER_REINITIALIZE
)(
3886 IN
struct _DRIVER_OBJECT
*DriverObject
,
3887 IN PVOID Context OPTIONAL
,
3890 typedef struct _CONTROLLER_OBJECT
{
3893 PVOID ControllerExtension
;
3894 KDEVICE_QUEUE DeviceWaitQueue
;
3896 LARGE_INTEGER Spare2
;
3897 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
3899 #define DRVO_REINIT_REGISTERED 0x00000008
3900 #define DRVO_INITIALIZED 0x00000010
3901 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
3902 #define DRVO_LEGACY_RESOURCES 0x00000040
3904 typedef struct _CONFIGURATION_INFORMATION
{
3909 ULONG ScsiPortCount
;
3911 ULONG ParallelCount
;
3912 BOOLEAN AtDiskPrimaryAddressClaimed
;
3913 BOOLEAN AtDiskSecondaryAddressClaimed
;
3915 ULONG MediumChangerCount
;
3916 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
3918 typedef struct _DISK_SIGNATURE
{
3919 ULONG PartitionStyle
;
3920 _ANONYMOUS_UNION
union {
3929 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
3931 typedef struct _TXN_PARAMETER_BLOCK
{
3934 PVOID TransactionObject
;
3935 } TXN_PARAMETER_BLOCK
, *PTXN_PARAMETER_BLOCK
;
3937 #define TXF_MINIVERSION_DEFAULT_VIEW (0xFFFE)
3939 typedef struct _IO_DRIVER_CREATE_CONTEXT
{
3941 struct _ECP_LIST
*ExtraCreateParameter
;
3942 PVOID DeviceObjectHint
;
3943 PTXN_PARAMETER_BLOCK TxnParameters
;
3944 } IO_DRIVER_CREATE_CONTEXT
, *PIO_DRIVER_CREATE_CONTEXT
;
3946 typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD
{
3950 PINTERFACE_REFERENCE InterfaceReference
;
3951 PINTERFACE_DEREFERENCE InterfaceDereference
;
3952 PGET_SET_DEVICE_DATA SetBusData
;
3953 PGET_SET_DEVICE_DATA GetBusData
;
3955 } AGP_TARGET_BUS_INTERFACE_STANDARD
, *PAGP_TARGET_BUS_INTERFACE_STANDARD
;
3958 (NTAPI
*PGET_LOCATION_STRING
)(
3959 IN OUT PVOID Context OPTIONAL
,
3960 OUT PWCHAR
*LocationStrings
);
3962 typedef struct _PNP_LOCATION_INTERFACE
{
3966 PINTERFACE_REFERENCE InterfaceReference
;
3967 PINTERFACE_DEREFERENCE InterfaceDereference
;
3968 PGET_LOCATION_STRING GetLocationString
;
3969 } PNP_LOCATION_INTERFACE
, *PPNP_LOCATION_INTERFACE
;
3971 typedef enum _ARBITER_ACTION
{
3972 ArbiterActionTestAllocation
,
3973 ArbiterActionRetestAllocation
,
3974 ArbiterActionCommitAllocation
,
3975 ArbiterActionRollbackAllocation
,
3976 ArbiterActionQueryAllocatedResources
,
3977 ArbiterActionWriteReservedResources
,
3978 ArbiterActionQueryConflict
,
3979 ArbiterActionQueryArbitrate
,
3980 ArbiterActionAddReserved
,
3981 ArbiterActionBootAllocation
3982 } ARBITER_ACTION
, *PARBITER_ACTION
;
3984 typedef struct _ARBITER_CONFLICT_INFO
{
3985 PDEVICE_OBJECT OwningObject
;
3988 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
3990 typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS
{
3991 IN OUT PLIST_ENTRY ArbitrationList
;
3992 IN ULONG AllocateFromCount
;
3993 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
3994 } ARBITER_TEST_ALLOCATION_PARAMETERS
, *PARBITER_TEST_ALLOCATION_PARAMETERS
;
3996 typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS
{
3997 IN OUT PLIST_ENTRY ArbitrationList
;
3998 IN ULONG AllocateFromCount
;
3999 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
4000 } ARBITER_RETEST_ALLOCATION_PARAMETERS
, *PARBITER_RETEST_ALLOCATION_PARAMETERS
;
4002 typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS
{
4003 IN OUT PLIST_ENTRY ArbitrationList
;
4004 } ARBITER_BOOT_ALLOCATION_PARAMETERS
, *PARBITER_BOOT_ALLOCATION_PARAMETERS
;
4006 typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
{
4007 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
4008 } ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
;
4010 typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS
{
4011 IN PDEVICE_OBJECT PhysicalDeviceObject
;
4012 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
4013 OUT PULONG ConflictCount
;
4014 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
4015 } ARBITER_QUERY_CONFLICT_PARAMETERS
, *PARBITER_QUERY_CONFLICT_PARAMETERS
;
4017 typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS
{
4018 IN PLIST_ENTRY ArbitrationList
;
4019 } ARBITER_QUERY_ARBITRATE_PARAMETERS
, *PARBITER_QUERY_ARBITRATE_PARAMETERS
;
4021 typedef struct _ARBITER_ADD_RESERVED_PARAMETERS
{
4022 IN PDEVICE_OBJECT ReserveDevice
;
4023 } ARBITER_ADD_RESERVED_PARAMETERS
, *PARBITER_ADD_RESERVED_PARAMETERS
;
4025 typedef struct _ARBITER_PARAMETERS
{
4027 ARBITER_TEST_ALLOCATION_PARAMETERS TestAllocation
;
4028 ARBITER_RETEST_ALLOCATION_PARAMETERS RetestAllocation
;
4029 ARBITER_BOOT_ALLOCATION_PARAMETERS BootAllocation
;
4030 ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS QueryAllocatedResources
;
4031 ARBITER_QUERY_CONFLICT_PARAMETERS QueryConflict
;
4032 ARBITER_QUERY_ARBITRATE_PARAMETERS QueryArbitrate
;
4033 ARBITER_ADD_RESERVED_PARAMETERS AddReserved
;
4035 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
4037 typedef enum _ARBITER_REQUEST_SOURCE
{
4038 ArbiterRequestUndefined
= -1,
4039 ArbiterRequestLegacyReported
,
4040 ArbiterRequestHalReported
,
4041 ArbiterRequestLegacyAssigned
,
4042 ArbiterRequestPnpDetected
,
4043 ArbiterRequestPnpEnumerated
4044 } ARBITER_REQUEST_SOURCE
;
4046 typedef enum _ARBITER_RESULT
{
4047 ArbiterResultUndefined
= -1,
4048 ArbiterResultSuccess
,
4049 ArbiterResultExternalConflict
,
4050 ArbiterResultNullRequest
4053 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
4055 typedef struct _ARBITER_LIST_ENTRY
{
4056 LIST_ENTRY ListEntry
;
4057 ULONG AlternativeCount
;
4058 PIO_RESOURCE_DESCRIPTOR Alternatives
;
4059 PDEVICE_OBJECT PhysicalDeviceObject
;
4060 ARBITER_REQUEST_SOURCE RequestSource
;
4063 INTERFACE_TYPE InterfaceType
;
4066 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
4067 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
4068 ARBITER_RESULT Result
;
4069 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
4072 (NTAPI
*PARBITER_HANDLER
)(
4073 IN OUT PVOID Context
,
4074 IN ARBITER_ACTION Action
,
4075 IN OUT PARBITER_PARAMETERS Parameters
);
4077 #define ARBITER_PARTIAL 0x00000001
4079 typedef struct _ARBITER_INTERFACE
{
4083 PINTERFACE_REFERENCE InterfaceReference
;
4084 PINTERFACE_DEREFERENCE InterfaceDereference
;
4085 PARBITER_HANDLER ArbiterHandler
;
4087 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
4089 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
4090 TranslateChildToParent
,
4091 TranslateParentToChild
4092 } RESOURCE_TRANSLATION_DIRECTION
;
4095 (NTAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
4096 IN OUT PVOID Context OPTIONAL
,
4097 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
4098 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
4099 IN ULONG AlternativesCount OPTIONAL
,
4100 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
4101 IN PDEVICE_OBJECT PhysicalDeviceObject
,
4102 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
4105 (NTAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
4106 IN OUT PVOID Context OPTIONAL
,
4107 IN PIO_RESOURCE_DESCRIPTOR Source
,
4108 IN PDEVICE_OBJECT PhysicalDeviceObject
,
4109 OUT PULONG TargetCount
,
4110 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
4112 typedef struct _TRANSLATOR_INTERFACE
{
4116 PINTERFACE_REFERENCE InterfaceReference
;
4117 PINTERFACE_DEREFERENCE InterfaceDereference
;
4118 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
4119 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
4120 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
4122 typedef struct _PCI_AGP_CAPABILITY
{
4123 PCI_CAPABILITIES_HEADER Header
;
4127 struct _PCI_AGP_STATUS
{
4132 ULONG HostTransDisable
:1;
4134 ULONG ITA_Coherent
:1;
4135 ULONG SideBandAddressing
:1;
4136 ULONG CalibrationCycle
:3;
4137 ULONG AsyncRequestSize
:3;
4141 ULONG RequestQueueDepthMaximum
:8;
4143 struct _PCI_AGP_COMMAND
{
4146 ULONG FastWriteEnable
:1;
4147 ULONG FourGBEnable
:1;
4152 ULONG CalibrationCycle
:3;
4153 ULONG AsyncReqSize
:3;
4155 ULONG RequestQueueDepth
:8;
4157 } PCI_AGP_CAPABILITY
, *PPCI_AGP_CAPABILITY
;
4159 typedef enum _EXTENDED_AGP_REGISTER
{
4167 } EXTENDED_AGP_REGISTER
, *PEXTENDED_AGP_REGISTER
;
4169 typedef struct _PCI_AGP_ISOCH_STATUS
{
4176 } PCI_AGP_ISOCH_STATUS
, *PPCI_AGP_ISOCH_STATUS
;
4178 typedef struct _PCI_AGP_CONTROL
{
4180 ULONG GTLB_Enable
:1;
4182 ULONG CAL_Disable
:1;
4184 } PCI_AGP_CONTROL
, *PPCI_AGP_CONTROL
;
4186 typedef struct _PCI_AGP_APERTURE_PAGE_SIZE
{
4187 USHORT PageSizeMask
:11;
4189 USHORT PageSizeSelect
:4;
4190 } PCI_AGP_APERTURE_PAGE_SIZE
, *PPCI_AGP_APERTURE_PAGE_SIZE
;
4192 typedef struct _PCI_AGP_ISOCH_COMMAND
{
4196 } PCI_AGP_ISOCH_COMMAND
, *PPCI_AGP_ISOCH_COMMAND
;
4198 typedef struct PCI_AGP_EXTENDED_CAPABILITY
{
4199 PCI_AGP_ISOCH_STATUS IsochStatus
;
4200 PCI_AGP_CONTROL AgpControl
;
4201 USHORT ApertureSize
;
4202 PCI_AGP_APERTURE_PAGE_SIZE AperturePageSize
;
4205 PCI_AGP_ISOCH_COMMAND IsochCommand
;
4206 } PCI_AGP_EXTENDED_CAPABILITY
, *PPCI_AGP_EXTENDED_CAPABILITY
;
4208 #define PCI_AGP_RATE_1X 0x1
4209 #define PCI_AGP_RATE_2X 0x2
4210 #define PCI_AGP_RATE_4X 0x4
4212 #define PCIX_MODE_CONVENTIONAL_PCI 0x0
4213 #define PCIX_MODE1_66MHZ 0x1
4214 #define PCIX_MODE1_100MHZ 0x2
4215 #define PCIX_MODE1_133MHZ 0x3
4216 #define PCIX_MODE2_266_66MHZ 0x9
4217 #define PCIX_MODE2_266_100MHZ 0xA
4218 #define PCIX_MODE2_266_133MHZ 0xB
4219 #define PCIX_MODE2_533_66MHZ 0xD
4220 #define PCIX_MODE2_533_100MHZ 0xE
4221 #define PCIX_MODE2_533_133MHZ 0xF
4223 #define PCIX_VERSION_MODE1_ONLY 0x0
4224 #define PCIX_VERSION_MODE2_ECC 0x1
4225 #define PCIX_VERSION_DUAL_MODE_ECC 0x2
4227 typedef struct _PCIX_BRIDGE_CAPABILITY
{
4228 PCI_CAPABILITIES_HEADER Header
;
4232 USHORT Bus133MHzCapable
:1;
4233 USHORT SplitCompletionDiscarded
:1;
4234 USHORT UnexpectedSplitCompletion
:1;
4235 USHORT SplitCompletionOverrun
:1;
4236 USHORT SplitRequestDelayed
:1;
4237 USHORT BusModeFrequency
:4;
4240 USHORT Bus266MHzCapable
:1;
4241 USHORT Bus533MHzCapable
:1;
4247 ULONG FunctionNumber
:3;
4248 ULONG DeviceNumber
:5;
4250 ULONG Device64Bit
:1;
4251 ULONG Device133MHzCapable
:1;
4252 ULONG SplitCompletionDiscarded
:1;
4253 ULONG UnexpectedSplitCompletion
:1;
4254 ULONG SplitCompletionOverrun
:1;
4255 ULONG SplitRequestDelayed
:1;
4258 ULONG Device266MHzCapable
:1;
4259 ULONG Device533MHzCapable
:1;
4263 USHORT UpstreamSplitTransactionCapacity
;
4264 USHORT UpstreamSplitTransactionLimit
;
4265 USHORT DownstreamSplitTransactionCapacity
;
4266 USHORT DownstreamSplitTransactionLimit
;
4269 ULONG SelectSecondaryRegisters
:1;
4270 ULONG ErrorPresentInOtherBank
:1;
4271 ULONG AdditionalCorrectableError
:1;
4272 ULONG AdditionalUncorrectableError
:1;
4274 ULONG ErrorCorrected
:1;
4276 ULONG ErrorFirstCommand
:4;
4277 ULONG ErrorSecondCommand
:4;
4278 ULONG ErrorUpperAttributes
:4;
4279 ULONG ControlUpdateEnable
:1;
4281 ULONG DisableSingleBitCorrection
:1;
4286 ULONG EccFirstAddress
;
4287 ULONG EccSecondAddress
;
4289 } PCIX_BRIDGE_CAPABILITY
, *PPCIX_BRIDGE_CAPABILITY
;
4291 typedef struct _PCI_SUBSYSTEM_IDS_CAPABILITY
{
4292 PCI_CAPABILITIES_HEADER Header
;
4296 } PCI_SUBSYSTEM_IDS_CAPABILITY
, *PPCI_SUBSYSTEM_IDS_CAPABILITY
;
4298 #define OSC_FIRMWARE_FAILURE 0x02
4299 #define OSC_UNRECOGNIZED_UUID 0x04
4300 #define OSC_UNRECOGNIZED_REVISION 0x08
4301 #define OSC_CAPABILITIES_MASKED 0x10
4303 #define PCI_ROOT_BUS_OSC_METHOD_CAPABILITY_REVISION 0x01
4305 typedef struct _PCI_ROOT_BUS_OSC_SUPPORT_FIELD
{
4308 ULONG ExtendedConfigOpRegions
:1;
4309 ULONG ActiveStatePowerManagement
:1;
4310 ULONG ClockPowerManagement
:1;
4311 ULONG SegmentGroups
:1;
4312 ULONG MessageSignaledInterrupts
:1;
4313 ULONG WindowsHardwareErrorArchitecture
:1;
4318 } PCI_ROOT_BUS_OSC_SUPPORT_FIELD
, *PPCI_ROOT_BUS_OSC_SUPPORT_FIELD
;
4320 typedef struct _PCI_ROOT_BUS_OSC_CONTROL_FIELD
{
4323 ULONG ExpressNativeHotPlug
:1;
4324 ULONG ShpcNativeHotPlug
:1;
4325 ULONG ExpressNativePME
:1;
4326 ULONG ExpressAdvancedErrorReporting
:1;
4327 ULONG ExpressCapabilityStructure
:1;
4332 } PCI_ROOT_BUS_OSC_CONTROL_FIELD
, *PPCI_ROOT_BUS_OSC_CONTROL_FIELD
;
4334 typedef enum _PCI_HARDWARE_INTERFACE
{
4339 } PCI_HARDWARE_INTERFACE
, *PPCI_HARDWARE_INTERFACE
;
4346 typedef struct _PCI_ROOT_BUS_HARDWARE_CAPABILITY
{
4347 PCI_HARDWARE_INTERFACE SecondaryInterface
;
4349 BOOLEAN BusCapabilitiesFound
;
4350 ULONG CurrentSpeedAndMode
;
4351 ULONG SupportedSpeedsAndModes
;
4352 BOOLEAN DeviceIDMessagingCapable
;
4353 PCI_BUS_WIDTH SecondaryBusWidth
;
4355 PCI_ROOT_BUS_OSC_SUPPORT_FIELD OscFeatureSupport
;
4356 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlRequest
;
4357 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlGranted
;
4358 } PCI_ROOT_BUS_HARDWARE_CAPABILITY
, *PPCI_ROOT_BUS_HARDWARE_CAPABILITY
;
4360 typedef union _PCI_EXPRESS_CAPABILITIES_REGISTER
{
4362 USHORT CapabilityVersion
:4;
4363 USHORT DeviceType
:4;
4364 USHORT SlotImplemented
:1;
4365 USHORT InterruptMessageNumber
:5;
4369 } PCI_EXPRESS_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_CAPABILITIES_REGISTER
;
4371 typedef union _PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
{
4373 ULONG MaxPayloadSizeSupported
:3;
4374 ULONG PhantomFunctionsSupported
:2;
4375 ULONG ExtendedTagSupported
:1;
4376 ULONG L0sAcceptableLatency
:3;
4377 ULONG L1AcceptableLatency
:3;
4379 ULONG RoleBasedErrorReporting
:1;
4381 ULONG CapturedSlotPowerLimit
:8;
4382 ULONG CapturedSlotPowerLimitScale
:2;
4386 } PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
;
4388 #define PCI_EXPRESS_AER_DEVICE_CONTROL_MASK 0x07;
4390 typedef union _PCI_EXPRESS_DEVICE_CONTROL_REGISTER
{
4392 USHORT CorrectableErrorEnable
:1;
4393 USHORT NonFatalErrorEnable
:1;
4394 USHORT FatalErrorEnable
:1;
4395 USHORT UnsupportedRequestErrorEnable
:1;
4396 USHORT EnableRelaxedOrder
:1;
4397 USHORT MaxPayloadSize
:3;
4398 USHORT ExtendedTagEnable
:1;
4399 USHORT PhantomFunctionsEnable
:1;
4400 USHORT AuxPowerEnable
:1;
4401 USHORT NoSnoopEnable
:1;
4402 USHORT MaxReadRequestSize
:3;
4403 USHORT BridgeConfigRetryEnable
:1;
4406 } PCI_EXPRESS_DEVICE_CONTROL_REGISTER
, *PPCI_EXPRESS_DEVICE_CONTROL_REGISTER
;
4408 #define PCI_EXPRESS_AER_DEVICE_STATUS_MASK 0x0F;
4410 typedef union _PCI_EXPRESS_DEVICE_STATUS_REGISTER
{
4412 USHORT CorrectableErrorDetected
:1;
4413 USHORT NonFatalErrorDetected
:1;
4414 USHORT FatalErrorDetected
:1;
4415 USHORT UnsupportedRequestDetected
:1;
4416 USHORT AuxPowerDetected
:1;
4417 USHORT TransactionsPending
:1;
4421 } PCI_EXPRESS_DEVICE_STATUS_REGISTER
, *PPCI_EXPRESS_DEVICE_STATUS_REGISTER
;
4423 typedef union _PCI_EXPRESS_LINK_CAPABILITIES_REGISTER
{
4425 ULONG MaximumLinkSpeed
:4;
4426 ULONG MaximumLinkWidth
:6;
4427 ULONG ActiveStatePMSupport
:2;
4428 ULONG L0sExitLatency
:3;
4429 ULONG L1ExitLatency
:3;
4430 ULONG ClockPowerManagement
:1;
4431 ULONG SurpriseDownErrorReportingCapable
:1;
4432 ULONG DataLinkLayerActiveReportingCapable
:1;
4437 } PCI_EXPRESS_LINK_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_LINK_CAPABILITIES_REGISTER
;
4439 typedef union _PCI_EXPRESS_LINK_CONTROL_REGISTER
{
4441 USHORT ActiveStatePMControl
:2;
4443 USHORT ReadCompletionBoundary
:1;
4444 USHORT LinkDisable
:1;
4445 USHORT RetrainLink
:1;
4446 USHORT CommonClockConfig
:1;
4447 USHORT ExtendedSynch
:1;
4448 USHORT EnableClockPowerManagement
:1;
4452 } PCI_EXPRESS_LINK_CONTROL_REGISTER
, *PPCI_EXPRESS_LINK_CONTROL_REGISTER
;
4454 typedef union _PCI_EXPRESS_LINK_STATUS_REGISTER
{
4459 USHORT LinkTraining
:1;
4460 USHORT SlotClockConfig
:1;
4461 USHORT DataLinkLayerActive
:1;
4465 } PCI_EXPRESS_LINK_STATUS_REGISTER
, *PPCI_EXPRESS_LINK_STATUS_REGISTER
;
4467 typedef union _PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
{
4469 ULONG AttentionButtonPresent
:1;
4470 ULONG PowerControllerPresent
:1;
4471 ULONG MRLSensorPresent
:1;
4472 ULONG AttentionIndicatorPresent
:1;
4473 ULONG PowerIndicatorPresent
:1;
4474 ULONG HotPlugSurprise
:1;
4475 ULONG HotPlugCapable
:1;
4476 ULONG SlotPowerLimit
:8;
4477 ULONG SlotPowerLimitScale
:2;
4478 ULONG ElectromechanicalLockPresent
:1;
4479 ULONG NoCommandCompletedSupport
:1;
4480 ULONG PhysicalSlotNumber
:13;
4483 } PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
;
4485 typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER
{
4487 USHORT AttentionButtonEnable
:1;
4488 USHORT PowerFaultDetectEnable
:1;
4489 USHORT MRLSensorEnable
:1;
4490 USHORT PresenceDetectEnable
:1;
4491 USHORT CommandCompletedEnable
:1;
4492 USHORT HotPlugInterruptEnable
:1;
4493 USHORT AttentionIndicatorControl
:2;
4494 USHORT PowerIndicatorControl
:2;
4495 USHORT PowerControllerControl
:1;
4496 USHORT ElectromechanicalLockControl
:1;
4497 USHORT DataLinkStateChangeEnable
:1;
4501 } PCI_EXPRESS_SLOT_CONTROL_REGISTER
, *PPCI_EXPRESS_SLOT_CONTROL_REGISTER
;
4503 typedef union _PCI_EXPRESS_SLOT_STATUS_REGISTER
{
4505 USHORT AttentionButtonPressed
:1;
4506 USHORT PowerFaultDetected
:1;
4507 USHORT MRLSensorChanged
:1;
4508 USHORT PresenceDetectChanged
:1;
4509 USHORT CommandCompleted
:1;
4510 USHORT MRLSensorState
:1;
4511 USHORT PresenceDetectState
:1;
4512 USHORT ElectromechanicalLockEngaged
:1;
4513 USHORT DataLinkStateChanged
:1;
4517 } PCI_EXPRESS_SLOT_STATUS_REGISTER
, *PPCI_EXPRESS_SLOT_STATUS_REGISTER
;
4519 typedef union _PCI_EXPRESS_ROOT_CONTROL_REGISTER
{
4521 USHORT CorrectableSerrEnable
:1;
4522 USHORT NonFatalSerrEnable
:1;
4523 USHORT FatalSerrEnable
:1;
4524 USHORT PMEInterruptEnable
:1;
4525 USHORT CRSSoftwareVisibilityEnable
:1;
4529 } PCI_EXPRESS_ROOT_CONTROL_REGISTER
, *PPCI_EXPRESS_ROOT_CONTROL_REGISTER
;
4531 typedef union _PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
{
4533 USHORT CRSSoftwareVisibility
:1;
4537 } PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
;
4539 typedef union _PCI_EXPRESS_ROOT_STATUS_REGISTER
{
4541 ULONG PMERequestorId
:16;
4547 } PCI_EXPRESS_ROOT_STATUS_REGISTER
, *PPCI_EXPRESS_ROOT_STATUS_REGISTER
;
4549 typedef struct _PCI_EXPRESS_CAPABILITY
{
4550 PCI_CAPABILITIES_HEADER Header
;
4551 PCI_EXPRESS_CAPABILITIES_REGISTER ExpressCapabilities
;
4552 PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER DeviceCapabilities
;
4553 PCI_EXPRESS_DEVICE_CONTROL_REGISTER DeviceControl
;
4554 PCI_EXPRESS_DEVICE_STATUS_REGISTER DeviceStatus
;
4555 PCI_EXPRESS_LINK_CAPABILITIES_REGISTER LinkCapabilities
;
4556 PCI_EXPRESS_LINK_CONTROL_REGISTER LinkControl
;
4557 PCI_EXPRESS_LINK_STATUS_REGISTER LinkStatus
;
4558 PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER SlotCapabilities
;
4559 PCI_EXPRESS_SLOT_CONTROL_REGISTER SlotControl
;
4560 PCI_EXPRESS_SLOT_STATUS_REGISTER SlotStatus
;
4561 PCI_EXPRESS_ROOT_CONTROL_REGISTER RootControl
;
4562 PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER RootCapabilities
;
4563 PCI_EXPRESS_ROOT_STATUS_REGISTER RootStatus
;
4564 } PCI_EXPRESS_CAPABILITY
, *PPCI_EXPRESS_CAPABILITY
;
4569 } PCI_EXPRESS_MRL_STATE
;
4574 } PCI_EXPRESS_CARD_PRESENCE
;
4580 } PCI_EXPRESS_INDICATOR_STATE
;
4585 } PCI_EXPRESS_POWER_STATE
;
4588 L0sEntrySupport
= 1,
4589 L0sAndL1EntrySupport
= 3
4590 } PCI_EXPRESS_ASPM_SUPPORT
;
4593 L0sAndL1EntryDisabled
,
4596 L0sAndL1EntryEnabled
4597 } PCI_EXPRESS_ASPM_CONTROL
;
4608 } PCI_EXPRESS_L0s_EXIT_LATENCY
;
4619 } PCI_EXPRESS_L1_EXIT_LATENCY
;
4622 PciExpressEndpoint
= 0,
4623 PciExpressLegacyEndpoint
,
4624 PciExpressRootPort
= 4,
4625 PciExpressUpstreamSwitchPort
,
4626 PciExpressDownstreamSwitchPort
,
4627 PciExpressToPciXBridge
,
4628 PciXToExpressBridge
,
4629 PciExpressRootComplexIntegratedEndpoint
,
4630 PciExpressRootComplexEventCollector
4631 } PCI_EXPRESS_DEVICE_TYPE
;
4634 MaxPayload128Bytes
= 0,
4637 MaxPayload1024Bytes
,
4638 MaxPayload2048Bytes
,
4640 } PCI_EXPRESS_MAX_PAYLOAD_SIZE
;
4642 typedef union _PCI_EXPRESS_PME_REQUESTOR_ID
{
4644 USHORT FunctionNumber
:3;
4645 USHORT DeviceNumber
:5;
4649 } PCI_EXPRESS_PME_REQUESTOR_ID
, *PPCI_EXPRESS_PME_REQUESTOR_ID
;
4653 #ifndef USE_DMA_MACROS
4654 #define USE_DMA_MACROS
4657 #ifndef NO_LEGACY_DRIVERS
4658 #define NO_LEGACY_DRIVERS
4661 #endif /* defined(_WIN64) */
4663 typedef enum _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE
{
4664 ResourceTypeSingle
= 0,
4666 ResourceTypeExtendedCounterConfiguration
,
4667 ResourceTypeOverflow
,
4669 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE
;
4671 typedef struct _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
{
4672 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE Type
;
4676 ULONG ExtendedRegisterAddress
;
4682 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
, *PPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
;
4684 typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST
{
4686 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors
[ANYSIZE_ARRAY
];
4687 } PHYSICAL_COUNTER_RESOURCE_LIST
, *PPHYSICAL_COUNTER_RESOURCE_LIST
;
4690 (NTAPI
*PciPin2Line
)(
4691 IN
struct _BUS_HANDLER
*BusHandler
,
4692 IN
struct _BUS_HANDLER
*RootHandler
,
4693 IN PCI_SLOT_NUMBER SlotNumber
,
4694 IN PPCI_COMMON_CONFIG PciData
);
4697 (NTAPI
*PciLine2Pin
)(
4698 IN
struct _BUS_HANDLER
*BusHandler
,
4699 IN
struct _BUS_HANDLER
*RootHandler
,
4700 IN PCI_SLOT_NUMBER SlotNumber
,
4701 IN PPCI_COMMON_CONFIG PciNewData
,
4702 IN PPCI_COMMON_CONFIG PciOldData
);
4705 (NTAPI
*PciReadWriteConfig
)(
4706 IN
struct _BUS_HANDLER
*BusHandler
,
4707 IN PCI_SLOT_NUMBER Slot
,
4712 #define PCI_DATA_TAG ' ICP'
4713 #define PCI_DATA_VERSION 1
4715 typedef struct _PCIBUSDATA
{
4718 PciReadWriteConfig ReadConfig
;
4719 PciReadWriteConfig WriteConfig
;
4720 PciPin2Line Pin2Line
;
4721 PciLine2Pin Line2Pin
;
4722 PCI_SLOT_NUMBER ParentSlot
;
4724 } PCIBUSDATA
, *PPCIBUSDATA
;
4726 #ifndef _PCIINTRF_X_
4727 #define _PCIINTRF_X_
4730 (NTAPI
*PCI_READ_WRITE_CONFIG
)(
4739 (NTAPI
*PCI_PIN_TO_LINE
)(
4741 IN PPCI_COMMON_CONFIG PciData
);
4744 (NTAPI
*PCI_LINE_TO_PIN
)(
4746 IN PPCI_COMMON_CONFIG PciNewData
,
4747 IN PPCI_COMMON_CONFIG PciOldData
);
4750 (NTAPI
*PCI_ROOT_BUS_CAPABILITY
)(
4752 OUT PPCI_ROOT_BUS_HARDWARE_CAPABILITY HardwareCapability
);
4755 (NTAPI
*PCI_EXPRESS_WAKE_CONTROL
)(
4757 IN BOOLEAN EnableWake
);
4759 typedef struct _PCI_BUS_INTERFACE_STANDARD
{
4763 PINTERFACE_REFERENCE InterfaceReference
;
4764 PINTERFACE_DEREFERENCE InterfaceDereference
;
4765 PCI_READ_WRITE_CONFIG ReadConfig
;
4766 PCI_READ_WRITE_CONFIG WriteConfig
;
4767 PCI_PIN_TO_LINE PinToLine
;
4768 PCI_LINE_TO_PIN LineToPin
;
4769 PCI_ROOT_BUS_CAPABILITY RootBusCapability
;
4770 PCI_EXPRESS_WAKE_CONTROL ExpressWakeControl
;
4771 } PCI_BUS_INTERFACE_STANDARD
, *PPCI_BUS_INTERFACE_STANDARD
;
4773 #define PCI_BUS_INTERFACE_STANDARD_VERSION 1
4775 #endif /* _PCIINTRF_X_ */
4777 #if (NTDDI_VERSION >= NTDDI_WIN7)
4779 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX 0x00004000
4780 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX 0x00008000
4781 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \
4782 (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \
4783 FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX)
4785 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200
4786 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300
4787 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300
4791 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 0x00000200
4792 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 0x00000300
4793 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 0x00000300
4795 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL
4796 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL
4797 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK
4799 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4801 #define FILE_CHARACTERISTICS_PROPAGATED ( FILE_REMOVABLE_MEDIA | \
4802 FILE_READ_ONLY_DEVICE | \
4803 FILE_FLOPPY_DISKETTE | \
4804 FILE_WRITE_ONCE_MEDIA | \
4805 FILE_DEVICE_SECURE_OPEN )
4807 typedef struct _FILE_ALIGNMENT_INFORMATION
{
4808 ULONG AlignmentRequirement
;
4809 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
4811 typedef struct _FILE_NAME_INFORMATION
{
4812 ULONG FileNameLength
;
4814 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
4817 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
4818 ULONG FileAttributes
;
4820 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
4822 typedef struct _FILE_DISPOSITION_INFORMATION
{
4824 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
4826 typedef struct _FILE_END_OF_FILE_INFORMATION
{
4827 LARGE_INTEGER EndOfFile
;
4828 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
4830 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
4831 LARGE_INTEGER ValidDataLength
;
4832 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
4834 typedef struct _FILE_FS_LABEL_INFORMATION
{
4835 ULONG VolumeLabelLength
;
4836 WCHAR VolumeLabel
[1];
4837 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
4839 typedef struct _FILE_FS_VOLUME_INFORMATION
{
4840 LARGE_INTEGER VolumeCreationTime
;
4841 ULONG VolumeSerialNumber
;
4842 ULONG VolumeLabelLength
;
4843 BOOLEAN SupportsObjects
;
4844 WCHAR VolumeLabel
[1];
4845 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
4847 typedef struct _FILE_FS_SIZE_INFORMATION
{
4848 LARGE_INTEGER TotalAllocationUnits
;
4849 LARGE_INTEGER AvailableAllocationUnits
;
4850 ULONG SectorsPerAllocationUnit
;
4851 ULONG BytesPerSector
;
4852 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
4854 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
{
4855 LARGE_INTEGER TotalAllocationUnits
;
4856 LARGE_INTEGER CallerAvailableAllocationUnits
;
4857 LARGE_INTEGER ActualAvailableAllocationUnits
;
4858 ULONG SectorsPerAllocationUnit
;
4859 ULONG BytesPerSector
;
4860 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
4862 typedef struct _FILE_FS_OBJECTID_INFORMATION
{
4864 UCHAR ExtendedInfo
[48];
4865 } FILE_FS_OBJECTID_INFORMATION
, *PFILE_FS_OBJECTID_INFORMATION
;
4867 typedef union _FILE_SEGMENT_ELEMENT
{
4869 ULONGLONG Alignment
;
4870 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
4872 #define IOCTL_AVIO_ALLOCATE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
4873 #define IOCTL_AVIO_FREE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
4874 #define IOCTL_AVIO_MODIFY_STREAM CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
4876 typedef enum _BUS_DATA_TYPE
{
4877 ConfigurationSpaceUndefined
= -1,
4885 PCMCIAConfiguration
,
4888 PNPISAConfiguration
,
4889 SgiInternalConfiguration
,
4891 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;