3 Copyright (c) Alex Ionescu. All rights reserved.
11 Type definitions for the I/O Manager.
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
27 #ifndef NTOS_MODE_USER
30 // Kernel Exported Object Types
32 extern POBJECT_TYPE NTSYSAPI IoAdapterObjectType
;
33 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType
;
34 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType
;
35 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType
;
40 // Symbolic Link Access Rights
42 #define SYMBOLIC_LINK_QUERY 0x0001
43 #define SYMBOLIC_LINK_ALL_ACCESS STANDARD_RIGHTS_REQUIRED | 0x0001
47 // NtCreateFile Result Flags
49 #define FILE_SUPERSEDED 0x00000000
50 #define FILE_OPENED 0x00000001
51 #define FILE_CREATED 0x00000002
52 #define FILE_OVERWRITTEN 0x00000003
53 #define FILE_EXISTS 0x00000004
54 #define FILE_DOES_NOT_EXIST 0x00000005
59 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
60 #define FILE_PIPE_MESSAGE_TYPE 0x00000001
61 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
62 #define FILE_PIPE_MESSAGE_MODE 0x00000001
63 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
64 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
65 #define FILE_PIPE_INBOUND 0x00000000
66 #define FILE_PIPE_OUTBOUND 0x00000001
67 #define FILE_PIPE_FULL_DUPLEX 0x00000002
68 #define FILE_PIPE_CLIENT_END 0x00000000
69 #define FILE_PIPE_SERVER_END 0x00000001
72 // NtCreateFile Attributes
74 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
75 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
78 // NtCreateFile OpenType Flags
80 #define FILE_SUPERSEDE 0x00000000
81 #define FILE_OPEN 0x00000001
82 #define FILE_CREATE 0x00000002
83 #define FILE_OPEN_IF 0x00000003
84 #define FILE_OVERWRITE 0x00000004
85 #define FILE_OVERWRITE_IF 0x00000005
86 #define FILE_MAXIMUM_DISPOSITION 0x00000005
91 #define FILE_DIRECTORY_FILE 0x00000001
92 #define FILE_WRITE_THROUGH 0x00000002
93 #define FILE_SEQUENTIAL_ONLY 0x00000004
94 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
95 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
96 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
97 #define FILE_NON_DIRECTORY_FILE 0x00000040
98 #define FILE_CREATE_TREE_CONNECTION 0x00000080
99 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
100 #define FILE_NO_EA_KNOWLEDGE 0x00000200
101 #define FILE_OPEN_FOR_RECOVERY 0x00000400
102 #define FILE_RANDOM_ACCESS 0x00000800
103 #define FILE_DELETE_ON_CLOSE 0x00001000
104 #define FILE_OPEN_BY_FILE_ID 0x00002000
105 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
106 #define FILE_NO_COMPRESSION 0x00008000
107 #define FILE_RESERVE_OPFILTER 0x00100000
108 #define FILE_OPEN_REPARSE_POINT 0x00200000
109 #define FILE_OPEN_NO_RECALL 0x00400000
110 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
113 // Device Charactertics
115 #define FILE_REMOVABLE_MEDIA 0x00000001
116 #define FILE_REMOTE_DEVICE 0x00000010
119 // Device Object Extension Flags
121 #define DOE_UNLOAD_PENDING 0x1
122 #define DOE_DELETE_PENDING 0x2
123 #define DOE_REMOVE_PENDING 0x4
124 #define DOE_REMOVE_PROCESSED 0x8
125 #define DOE_START_PENDING 0x10
130 #define DNF_PROCESSED 0x00000001
131 #define DNF_STARTED 0x00000002
132 #define DNF_START_FAILED 0x00000004
133 #define DNF_ENUMERATED 0x00000008
134 #define DNF_DELETED 0x00000010
135 #define DNF_MADEUP 0x00000020
136 #define DNF_START_REQUEST_PENDING 0x00000040
137 #define DNF_NO_RESOURCE_REQUIRED 0x00000080
138 #define DNF_INSUFFICIENT_RESOURCES 0x00000100
139 #define DNF_RESOURCE_ASSIGNED 0x00000200
140 #define DNF_RESOURCE_REPORTED 0x00000400
141 #define DNF_HAL_NODE 0x00000800 // ???
142 #define DNF_ADDED 0x00001000
143 #define DNF_ADD_FAILED 0x00002000
144 #define DNF_LEGACY_DRIVER 0x00004000
145 #define DNF_STOPPED 0x00008000
146 #define DNF_WILL_BE_REMOVED 0x00010000
147 #define DNF_NEED_TO_ENUM 0x00020000
148 #define DNF_NOT_CONFIGURED 0x00040000
149 #define DNF_REINSTALL 0x00080000
150 #define DNF_RESOURCE_REQUIREMENTS_NEED_FILTERED 0x00100000 // ???
151 #define DNF_DISABLED 0x00200000
152 #define DNF_RESTART_OK 0x00400000
153 #define DNF_NEED_RESTART 0x00800000
154 #define DNF_VISITED 0x01000000
155 #define DNF_ASSIGNING_RESOURCES 0x02000000
156 #define DNF_BEEING_ENUMERATED 0x04000000
157 #define DNF_NEED_ENUMERATION_ONLY 0x08000000
158 #define DNF_LOCKED 0x10000000
159 #define DNF_HAS_BOOT_CONFIG 0x20000000
160 #define DNF_BOOT_CONFIG_RESERVED 0x40000000
161 #define DNF_HAS_PROBLEM 0x80000000 // ???
164 // Device Node User Flags
166 #define DNUF_DONT_SHOW_IN_UI 0x0002
167 #define DNUF_NOT_DISABLEABLE 0x0008
170 // Undocumented WMI Registration Flags
172 #define WMIREG_FLAG_TRACE_PROVIDER 0x00010000
173 #define WMIREG_FLAG_TRACE_NOTIFY_MASK 0x00F00000
174 #define WMIREG_NOTIFY_DISK_IO 0x00100000
175 #define WMIREG_NOTIFY_TDI_IO 0x00200000
178 // I/O Completion Information Class for NtQueryIoCompletionInformation
180 typedef enum _IO_COMPLETION_INFORMATION_CLASS
182 IoCompletionBasicInformation
183 } IO_COMPLETION_INFORMATION_CLASS
;
185 #ifdef NTOS_MODE_USER
188 // Hardware Interface Type
190 typedef enum _INTERFACE_TYPE
192 InterfaceTypeUndefined
= -1,
210 }INTERFACE_TYPE
, *PINTERFACE_TYPE
;
212 typedef enum _BUS_DATA_TYPE
214 ConfigurationSpaceUndefined
= -1,
226 SgiInternalConfiguration
,
228 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
231 // File Information Classes for NtQueryInformationFile
233 typedef enum _FILE_INFORMATION_CLASS
235 FileDirectoryInformation
= 1,
236 FileFullDirectoryInformation
,
237 FileBothDirectoryInformation
,
238 FileBasicInformation
,
239 FileStandardInformation
,
240 FileInternalInformation
,
242 FileAccessInformation
,
244 FileRenameInformation
,
246 FileNamesInformation
,
247 FileDispositionInformation
,
248 FilePositionInformation
,
249 FileFullEaInformation
,
251 FileAlignmentInformation
,
253 FileAllocationInformation
,
254 FileEndOfFileInformation
,
255 FileAlternateNameInformation
,
256 FileStreamInformation
,
258 FilePipeLocalInformation
,
259 FilePipeRemoteInformation
,
260 FileMailslotQueryInformation
,
261 FileMailslotSetInformation
,
262 FileCompressionInformation
,
263 FileObjectIdInformation
,
264 FileCompletionInformation
,
265 FileMoveClusterInformation
,
266 FileQuotaInformation
,
267 FileReparsePointInformation
,
268 FileNetworkOpenInformation
,
269 FileAttributeTagInformation
,
270 FileTrackingInformation
,
271 FileIdBothDirectoryInformation
,
272 FileIdFullDirectoryInformation
,
273 FileValidDataLengthInformation
,
274 FileShortNameInformation
,
275 FileMaximumInformation
276 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
279 // File Information Classes for NtQueryInformationFileSystem
281 typedef enum _FSINFOCLASS
283 FileFsVolumeInformation
= 1,
284 FileFsLabelInformation
,
285 FileFsSizeInformation
,
286 FileFsDeviceInformation
,
287 FileFsAttributeInformation
,
288 FileFsControlInformation
,
289 FileFsFullSizeInformation
,
290 FileFsObjectIdInformation
,
291 FileFsDriverPathInformation
,
292 FileFsMaximumInformation
293 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
298 // Device Node States
300 typedef enum _PNP_DEVNODE_STATE
302 DeviceNodeUnspecified
= 0x300,
303 DeviceNodeUninitialized
= 0x301,
304 DeviceNodeInitialized
= 0x302,
305 DeviceNodeDriversAdded
= 0x303,
306 DeviceNodeResourcesAssigned
= 0x304,
307 DeviceNodeStartPending
= 0x305,
308 DeviceNodeStartCompletion
= 0x306,
309 DeviceNodeStartPostWork
= 0x307,
310 DeviceNodeStarted
= 0x308,
311 DeviceNodeQueryStopped
= 0x309,
312 DeviceNodeStopped
= 0x30a,
313 DeviceNodeRestartCompletion
= 0x30b,
314 DeviceNodeEnumeratePending
= 0x30c,
315 DeviceNodeEnumerateCompletion
= 0x30d,
316 DeviceNodeAwaitingQueuedDeletion
= 0x30e,
317 DeviceNodeAwaitingQueuedRemoval
= 0x30f,
318 DeviceNodeQueryRemoved
= 0x310,
319 DeviceNodeRemovePendingCloses
= 0x311,
320 DeviceNodeRemoved
= 0x312,
321 DeviceNodeDeletePendingCloses
= 0x313,
322 DeviceNodeDeleted
= 0x314,
323 MaxDeviceNodeState
= 0x315,
326 #ifdef NTOS_MODE_USER
329 // File Information structures for NtQueryInformationFile
331 typedef struct _FILE_BASIC_INFORMATION
333 LARGE_INTEGER CreationTime
;
334 LARGE_INTEGER LastAccessTime
;
335 LARGE_INTEGER LastWriteTime
;
336 LARGE_INTEGER ChangeTime
;
337 ULONG FileAttributes
;
338 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
340 typedef struct _FILE_STANDARD_INFORMATION
342 LARGE_INTEGER AllocationSize
;
343 LARGE_INTEGER EndOfFile
;
345 BOOLEAN DeletePending
;
347 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
349 typedef struct _FILE_STREAM_INFORMATION
351 ULONG NextEntryOffset
;
352 ULONG StreamNameLength
;
353 LARGE_INTEGER StreamSize
;
354 LARGE_INTEGER StreamAllocationSize
;
356 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
358 typedef struct _FILE_NETWORK_OPEN_INFORMATION
360 LARGE_INTEGER CreationTime
;
361 LARGE_INTEGER LastAccessTime
;
362 LARGE_INTEGER LastWriteTime
;
363 LARGE_INTEGER ChangeTime
;
364 LARGE_INTEGER AllocationSize
;
365 LARGE_INTEGER EndOfFile
;
366 ULONG FileAttributes
;
367 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
369 typedef struct _FILE_EA_INFORMATION
372 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
374 typedef struct _FILE_COMPRESSION_INFORMATION
376 LARGE_INTEGER CompressedFileSize
;
377 USHORT CompressionFormat
;
378 UCHAR CompressionUnitShift
;
382 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
384 typedef struct _FILE_POSITION_INFORMATION
386 LARGE_INTEGER CurrentByteOffset
;
387 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
389 typedef struct _FILE_DISPOSITION_INFORMATION
392 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
394 typedef struct _FILE_FULL_EA_INFORMATION
396 ULONG NextEntryOffset
;
399 USHORT EaValueLength
;
401 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
403 typedef struct _FILE_QUOTA_INFORMATION
405 ULONG NextEntryOffset
;
407 LARGE_INTEGER ChangeTime
;
408 LARGE_INTEGER QuotaUsed
;
409 LARGE_INTEGER QuotaThreshold
;
410 LARGE_INTEGER QuotaLimit
;
412 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
414 typedef struct _FILE_INTERNAL_INFORMATION
416 LARGE_INTEGER IndexNumber
;
417 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
419 typedef struct _FILE_RENAME_INFORMATION
421 BOOLEAN ReplaceIfExists
;
422 HANDLE RootDirectory
;
423 ULONG FileNameLength
;
425 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
427 typedef struct _FILE_PIPE_INFORMATION
430 ULONG CompletionMode
;
431 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
433 typedef struct _FILE_PIPE_LOCAL_INFORMATION
436 ULONG NamedPipeConfiguration
;
437 ULONG MaximumInstances
;
438 ULONG CurrentInstances
;
440 ULONG ReadDataAvailable
;
442 ULONG WriteQuotaAvailable
;
443 ULONG NamedPipeState
;
445 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
447 typedef struct _FILE_PIPE_REMOTE_INFORMATION
449 LARGE_INTEGER CollectDataTime
;
450 ULONG MaximumCollectionCount
;
451 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
453 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
455 ULONG MaximumMessageSize
;
457 ULONG NextMessageSize
;
458 ULONG MessagesAvailable
;
459 LARGE_INTEGER ReadTimeout
;
460 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
462 typedef struct _FILE_MAILSLOT_SET_INFORMATION
464 PLARGE_INTEGER ReadTimeout
;
465 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
467 typedef struct _FILE_BOTH_DIR_INFORMATION
469 ULONG NextEntryOffset
;
471 LARGE_INTEGER CreationTime
;
472 LARGE_INTEGER LastAccessTime
;
473 LARGE_INTEGER LastWriteTime
;
474 LARGE_INTEGER ChangeTime
;
475 LARGE_INTEGER EndOfFile
;
476 LARGE_INTEGER AllocationSize
;
477 ULONG FileAttributes
;
478 ULONG FileNameLength
;
480 CCHAR ShortNameLength
;
483 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
485 typedef struct _FILE_COMPLETION_INFORMATION
489 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
491 typedef struct _FILE_LINK_INFORMATION
493 BOOLEAN ReplaceIfExists
;
494 HANDLE RootDirectory
;
495 ULONG FileNameLength
;
497 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
499 typedef struct _FILE_NAME_INFORMATION
501 ULONG FileNameLength
;
503 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
505 typedef struct _FILE_ALLOCATION_INFORMATION
507 LARGE_INTEGER AllocationSize
;
508 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
510 typedef struct _FILE_END_OF_FILE_INFORMATION
512 LARGE_INTEGER EndOfFile
;
513 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
515 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
517 LARGE_INTEGER ValidDataLength
;
518 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
520 typedef struct _FILE_DIRECTORY_INFORMATION
522 ULONG NextEntryOffset
;
524 LARGE_INTEGER CreationTime
;
525 LARGE_INTEGER LastAccessTime
;
526 LARGE_INTEGER LastWriteTime
;
527 LARGE_INTEGER ChangeTime
;
528 LARGE_INTEGER EndOfFile
;
529 LARGE_INTEGER AllocationSize
;
530 ULONG FileAttributes
;
531 ULONG FileNameLength
;
533 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
536 // File System Information structures for NtQueryInformationFile
538 typedef struct _FILE_FS_DEVICE_INFORMATION
540 DEVICE_TYPE DeviceType
;
541 ULONG Characteristics
;
542 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
544 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
546 ULONG FileSystemAttributes
;
547 ULONG MaximumComponentNameLength
;
548 ULONG FileSystemNameLength
;
549 WCHAR FileSystemName
[1];
550 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
552 typedef struct _FILE_FS_SIZE_INFORMATION
554 LARGE_INTEGER TotalAllocationUnits
;
555 LARGE_INTEGER AvailableAllocationUnits
;
556 ULONG SectorsPerAllocationUnit
;
557 ULONG BytesPerSector
;
558 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
560 typedef struct _FILE_FS_LABEL_INFORMATION
562 ULONG VolumeLabelLength
;
563 WCHAR VolumeLabel
[1];
564 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
566 typedef struct _FILE_FS_VOLUME_INFORMATION
568 LARGE_INTEGER VolumeCreationTime
;
569 ULONG VolumeSerialNumber
;
570 ULONG VolumeLabelLength
;
571 BOOLEAN SupportsObjects
;
572 WCHAR VolumeLabel
[1];
573 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
576 // Pipe Structures for IOCTL_PIPE_XXX
578 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
580 LARGE_INTEGER Timeout
;
582 BOOLEAN TimeoutSpecified
;
584 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
586 typedef struct _FILE_PIPE_PEEK_BUFFER
588 ULONG NamedPipeState
;
589 ULONG ReadDataAvailable
;
590 ULONG NumberOfMessages
;
593 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
598 typedef struct _IO_STATUS_BLOCK
605 ULONG_PTR Information
;
606 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
609 // I/O Error Log Structures
611 typedef struct _IO_ERROR_LOG_PACKET
613 UCHAR MajorFunctionCode
;
616 USHORT NumberOfStrings
;
618 USHORT EventCategory
;
620 ULONG UniqueErrorValue
;
621 NTSTATUS FinalStatus
;
622 ULONG SequenceNumber
;
624 LARGE_INTEGER DeviceOffset
;
626 }IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
628 typedef struct _IO_ERROR_LOG_MESSAGE
632 USHORT DriverNameLength
;
633 LARGE_INTEGER TimeStamp
;
634 ULONG DriverNameOffset
;
635 IO_ERROR_LOG_PACKET EntryData
;
636 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
641 // Parameters for NtCreateMailslotFile/NtCreateNamedPipeFile
643 typedef struct _MAILSLOT_CREATE_PARAMETERS
646 ULONG MaximumMessageSize
;
647 LARGE_INTEGER ReadTimeout
;
648 BOOLEAN TimeoutSpecified
;
649 } MAILSLOT_CREATE_PARAMETERS
, *PMAILSLOT_CREATE_PARAMETERS
;
651 typedef struct _NAMED_PIPE_CREATE_PARAMETERS
655 ULONG CompletionMode
;
656 ULONG MaximumInstances
;
659 LARGE_INTEGER DefaultTimeout
;
660 BOOLEAN TimeoutSpecified
;
661 } NAMED_PIPE_CREATE_PARAMETERS
, *PNAMED_PIPE_CREATE_PARAMETERS
;
663 #ifndef NTOS_MODE_USER
668 typedef struct _IO_TIMER
672 LIST_ENTRY IoTimerList
;
673 PIO_TIMER_ROUTINE TimerRoutine
;
675 PDEVICE_OBJECT DeviceObject
;
676 } IO_TIMER
, *PIO_TIMER
;
681 typedef struct _DEVICE_NODE
683 struct _DEVICE_NODE
*Parent
;
684 struct _DEVICE_NODE
*PrevSibling
;
685 struct _DEVICE_NODE
*NextSibling
;
686 struct _DEVICE_NODE
*Child
;
688 struct _PO_DEVICE_NOTIFY
*Notify
;
689 PNP_DEVNODE_STATE State
;
690 PNP_DEVNODE_STATE PreviousState
;
691 PNP_DEVNODE_STATE StateHistory
[20];
692 ULONG StateHistoryEntry
;
693 INT CompletionStatus
;
698 PDEVICE_OBJECT PhysicalDeviceObject
;
699 PCM_RESOURCE_LIST ResourceList
;
700 PCM_RESOURCE_LIST ResourceListTranslated
;
701 UNICODE_STRING InstancePath
;
702 UNICODE_STRING ServiceName
;
703 PDEVICE_OBJECT DuplicatePDO
;
704 PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements
;
705 INTERFACE_TYPE InterfaceType
;
707 INTERFACE_TYPE ChildInterfaceType
;
708 ULONG ChildBusNumber
;
709 USHORT ChildBusTypeIndex
;
711 UCHAR HardwareRemovalPolicy
;
712 LIST_ENTRY TargetDeviceNotify
;
713 LIST_ENTRY DeviceArbiterList
;
714 LIST_ENTRY DeviceTranslatorList
;
715 USHORT NoTranslatorMask
;
716 USHORT QueryTranslatorMask
;
717 USHORT NoArbiterMask
;
718 USHORT QueryArbiterMask
;
721 struct _DEVICE_NODE
*LegacyDeviceNode
;
722 PDEVICE_RELATIONS PendingDeviceRelations
;
726 struct _DEVICE_NODE
*NextResourceDeviceNode
;
728 PCM_RESOURCE_LIST BootResources
;
729 ULONG CapabilityFlags
;
733 LIST_ENTRY ListEntry
;
736 ULONG DisableableDepends
;
737 LIST_ENTRY PendedSetInterfaceState
;
738 LIST_ENTRY LegacyBusListEntry
;
739 ULONG DriverUnloadRetryCount
;
740 struct _DEVICE_NODE
*PreviousParent
;
741 ULONG DeletedChidren
;
742 } DEVICE_NODE
, *PDEVICE_NODE
;
745 // Resource Aribtrer Entry
747 typedef struct _PI_RESOURCE_ARBITER_ENTRY
749 LIST_ENTRY DeviceArbiterList
;
751 PARBITER_INTERFACE ArbiterInterface
;
753 LIST_ENTRY ResourceList
;
754 LIST_ENTRY BestResourceList
;
755 LIST_ENTRY BestConfig
;
756 LIST_ENTRY ActiveArbiterList
;
758 UCHAR ResourcesChanged
;
759 } PI_RESOURCE_ARBITER_ENTRY
, *PPI_RESOURCE_ARBITER_ENTRY
;
762 // Extended Device Object Extension Structure
764 typedef struct _EXTENDED_DEVOBJ_EXTENSION
768 PDEVICE_OBJECT DeviceObject
;
770 struct DEVICE_OBJECT_POWER_EXTENSION
*Dope
;
771 ULONG ExtensionFlags
;
772 struct _DEVICE_NODE
*DeviceNode
;
773 PDEVICE_OBJECT AttachedTo
;
778 } EXTENDED_DEVOBJ_EXTENSION
, *PEXTENDED_DEVOBJ_EXTENSION
;
781 // Private Driver Extension Descriptor
783 typedef struct _PRIVATE_DRIVER_EXTENSIONS
785 struct _PRIVATE_DRIVER_EXTENSIONS
*Link
;
786 PVOID ClientIdentificationAddress
;
788 } PRIVATE_DRIVER_EXTENSIONS
, *PPRIVATE_DRIVER_EXTENSIONS
;
791 // Extended I/O Stack Location Structure
793 #if !defined(_ALPHA_)
794 #include <pshpack4.h>
796 typedef struct _EXTENDED_IO_STACK_LOCATION
806 PIO_SECURITY_CONTEXT SecurityContext
;
808 USHORT FileAttributes
;
814 PIO_SECURITY_CONTEXT SecurityContext
;
818 struct _NAMED_PIPE_CREATE_PARAMETERS
*Parameters
;
822 PIO_SECURITY_CONTEXT SecurityContext
;
826 struct _MAILSLOT_CREATE_PARAMETERS
*Parameters
;
832 LARGE_INTEGER ByteOffset
;
838 LARGE_INTEGER ByteOffset
;
843 PUNICODE_STRING FileName
;
844 FILE_INFORMATION_CLASS FileInformationClass
;
850 ULONG CompletionFilter
;
855 FILE_INFORMATION_CLASS FileInformationClass
;
860 FILE_INFORMATION_CLASS FileInformationClass
;
861 PFILE_OBJECT FileObject
;
866 BOOLEAN ReplaceIfExists
;
887 FS_INFORMATION_CLASS FsInformationClass
;
892 FS_INFORMATION_CLASS FsInformationClass
;
896 ULONG OutputBufferLength
;
897 ULONG InputBufferLength
;
899 PVOID Type3InputBuffer
;
903 PLARGE_INTEGER Length
;
905 LARGE_INTEGER ByteOffset
;
909 ULONG OutputBufferLength
;
910 ULONG InputBufferLength
;
912 PVOID Type3InputBuffer
;
916 SECURITY_INFORMATION SecurityInformation
;
917 ULONG POINTER_ALIGNMENT Length
;
921 SECURITY_INFORMATION SecurityInformation
;
922 PSECURITY_DESCRIPTOR SecurityDescriptor
;
927 PDEVICE_OBJECT DeviceObject
;
932 PDEVICE_OBJECT DeviceObject
;
936 struct _SCSI_REQUEST_BLOCK
*Srb
;
942 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
951 DEVICE_RELATION_TYPE Type
;
952 } QueryDeviceRelations
;
955 CONST GUID
*InterfaceType
;
958 PINTERFACE Interface
;
959 PVOID InterfaceSpecificData
;
963 PDEVICE_CAPABILITIES Capabilities
;
964 } DeviceCapabilities
;
967 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
968 } FilterResourceRequirements
;
982 BUS_QUERY_ID_TYPE IdType
;
986 DEVICE_TEXT_TYPE DeviceTextType
;
993 DEVICE_USAGE_NOTIFICATION_TYPE Type
;
997 SYSTEM_POWER_STATE PowerState
;
1001 PPOWER_SEQUENCE PowerSequence
;
1005 ULONG SystemContext
;
1006 POWER_STATE_TYPE Type
;
1008 POWER_ACTION ShutdownType
;
1012 PCM_RESOURCE_LIST AllocatedResources
;
1013 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
1017 ULONG_PTR ProviderId
;
1030 PDEVICE_OBJECT DeviceObject
;
1031 PFILE_OBJECT FileObject
;
1032 PIO_COMPLETION_ROUTINE CompletionRoutine
;
1034 } EXTENDED_IO_STACK_LOCATION
, *PEXTENDED_IO_STACK_LOCATION
;
1035 #if !defined(_ALPHA_)
1036 #include <poppack.h>
1041 // Firmware Boot File Path
1043 typedef struct _FILE_PATH
1049 } FILE_PATH
, *PFILE_PATH
;
1052 // Firmware Boot Options
1054 typedef struct _BOOT_OPTIONS
1059 ULONG CurrentBootEntryId
;
1060 ULONG NextBootEntryId
;
1061 WCHAR HeadlessRedirection
[1];
1062 } BOOT_OPTIONS
, *PBOOT_OPTIONS
;
1065 // APC Callback for NtCreateFile
1068 (NTAPI
*PIO_APC_ROUTINE
)(
1069 IN PVOID ApcContext
,
1070 IN PIO_STATUS_BLOCK IoStatusBlock
,
1073 #ifdef NTOS_MODE_USER
1076 // Mailslot IOCTL Codes
1078 #define FSCTL_MAILSLOT_PEEK \
1079 CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
1084 #define FSCTL_PIPE_ASSIGN_EVENT \
1085 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
1086 #define FSCTL_PIPE_DISCONNECT \
1087 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
1088 #define FSCTL_PIPE_LISTEN \
1089 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
1090 #define FSCTL_PIPE_PEEK \
1091 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
1092 #define FSCTL_PIPE_QUERY_EVENT \
1093 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
1094 #define FSCTL_PIPE_TRANSCEIVE \
1095 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1096 #define FSCTL_PIPE_WAIT \
1097 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
1098 #define FSCTL_PIPE_IMPERSONATE \
1099 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
1100 #define FSCTL_PIPE_SET_CLIENT_PROCESS \
1101 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
1102 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS \
1103 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
1104 #define FSCTL_PIPE_INTERNAL_READ \
1105 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
1106 #define FSCTL_PIPE_INTERNAL_WRITE \
1107 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
1108 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE \
1109 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1110 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW \
1111 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
1116 #define IOCTL_TAPE_ERASE \
1117 CTL_CODE(FILE_DEVICE_TAPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1118 #define IOCTL_TAPE_PREPARE \
1119 CTL_CODE(FILE_DEVICE_TAPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS)
1120 #define IOCTL_TAPE_WRITE_MARKS \
1121 CTL_CODE(FILE_DEVICE_TAPE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1122 #define IOCTL_TAPE_GET_POSITION \
1123 CTL_CODE(FILE_DEVICE_TAPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS)
1124 #define IOCTL_TAPE_SET_POSITION \
1125 CTL_CODE(FILE_DEVICE_TAPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS)
1126 #define IOCTL_TAPE_GET_DRIVE_PARAMS \
1127 CTL_CODE(FILE_DEVICE_TAPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS)
1128 #define IOCTL_TAPE_SET_DRIVE_PARAMS \
1129 CTL_CODE(FILE_DEVICE_TAPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1130 #define IOCTL_TAPE_GET_MEDIA_PARAMS \
1131 CTL_CODE(FILE_DEVICE_TAPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS)
1132 #define IOCTL_TAPE_SET_MEDIA_PARAMS \
1133 CTL_CODE(FILE_DEVICE_TAPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
1134 #define IOCTL_TAPE_GET_STATUS \
1135 CTL_CODE(FILE_DEVICE_TAPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS)
1136 #define IOCTL_TAPE_CREATE_PARTITION \
1137 CTL_CODE(FILE_DEVICE_TAPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1139 #endif // NTOS_MODE_USER