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
29 // I/O Completion Access Rights
31 #define IO_COMPLETION_QUERY_STATE 0x0001
32 #ifndef NTOS_MODE_USER
33 #define IO_COMPLETION_MODIFY_STATE 0x0002
34 #define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
39 // Kernel Exported Object Types
41 extern POBJECT_TYPE NTSYSAPI IoAdapterObjectType
;
42 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType
;
43 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType
;
44 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType
;
49 // Symbolic Link Access Rights
51 #define SYMBOLIC_LINK_QUERY 0x0001
52 #define SYMBOLIC_LINK_ALL_ACCESS STANDARD_RIGHTS_REQUIRED | 0x0001
56 // NtCreateFile Result Flags
58 #define FILE_SUPERSEDED 0x00000000
59 #define FILE_OPENED 0x00000001
60 #define FILE_CREATED 0x00000002
61 #define FILE_OVERWRITTEN 0x00000003
62 #define FILE_EXISTS 0x00000004
63 #define FILE_DOES_NOT_EXIST 0x00000005
68 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
69 #define FILE_PIPE_MESSAGE_TYPE 0x00000001
70 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
71 #define FILE_PIPE_MESSAGE_MODE 0x00000001
72 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
73 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
74 #define FILE_PIPE_INBOUND 0x00000000
75 #define FILE_PIPE_OUTBOUND 0x00000001
76 #define FILE_PIPE_FULL_DUPLEX 0x00000002
77 #define FILE_PIPE_CLIENT_END 0x00000000
78 #define FILE_PIPE_SERVER_END 0x00000001
81 // NtCreateFile Attributes
83 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
84 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
87 // NtCreateFile OpenType Flags
89 #define FILE_SUPERSEDE 0x00000000
90 #define FILE_OPEN 0x00000001
91 #define FILE_CREATE 0x00000002
92 #define FILE_OPEN_IF 0x00000003
93 #define FILE_OVERWRITE 0x00000004
94 #define FILE_OVERWRITE_IF 0x00000005
95 #define FILE_MAXIMUM_DISPOSITION 0x00000005
100 #define FILE_DIRECTORY_FILE 0x00000001
101 #define FILE_WRITE_THROUGH 0x00000002
102 #define FILE_SEQUENTIAL_ONLY 0x00000004
103 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
104 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
105 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
106 #define FILE_NON_DIRECTORY_FILE 0x00000040
107 #define FILE_CREATE_TREE_CONNECTION 0x00000080
108 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
109 #define FILE_NO_EA_KNOWLEDGE 0x00000200
110 #define FILE_OPEN_FOR_RECOVERY 0x00000400
111 #define FILE_RANDOM_ACCESS 0x00000800
112 #define FILE_DELETE_ON_CLOSE 0x00001000
113 #define FILE_OPEN_BY_FILE_ID 0x00002000
114 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
115 #define FILE_NO_COMPRESSION 0x00008000
116 #define FILE_RESERVE_OPFILTER 0x00100000
117 #define FILE_OPEN_REPARSE_POINT 0x00200000
118 #define FILE_OPEN_NO_RECALL 0x00400000
119 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
122 // Device Charactertics
124 #define FILE_REMOVABLE_MEDIA 0x00000001
125 #define FILE_REMOTE_DEVICE 0x00000010
130 #define FO_FILE_OBJECT_HAS_EXTENSION 0x00800000
133 // Device Object Extension Flags
135 #define DOE_UNLOAD_PENDING 0x1
136 #define DOE_DELETE_PENDING 0x2
137 #define DOE_REMOVE_PENDING 0x4
138 #define DOE_REMOVE_PROCESSED 0x8
139 #define DOE_START_PENDING 0x10
142 // Device Object StartIo Flags
144 #define DOE_SIO_NO_KEY 0x20
145 #define DOE_SIO_WITH_KEY 0x40
146 #define DOE_SIO_CANCELABLE 0x80
147 #define DOE_SIO_DEFERRED 0x100
148 #define DOE_SIO_NO_CANCEL 0x200
153 #define DNF_PROCESSED 0x00000001
154 #define DNF_STARTED 0x00000002
155 #define DNF_START_FAILED 0x00000004
156 #define DNF_ENUMERATED 0x00000008
157 #define DNF_DELETED 0x00000010
158 #define DNF_MADEUP 0x00000020
159 #define DNF_START_REQUEST_PENDING 0x00000040
160 #define DNF_NO_RESOURCE_REQUIRED 0x00000080
161 #define DNF_INSUFFICIENT_RESOURCES 0x00000100
162 #define DNF_RESOURCE_ASSIGNED 0x00000200
163 #define DNF_RESOURCE_REPORTED 0x00000400
164 #define DNF_HAL_NODE 0x00000800 // ???
165 #define DNF_ADDED 0x00001000
166 #define DNF_ADD_FAILED 0x00002000
167 #define DNF_LEGACY_DRIVER 0x00004000
168 #define DNF_STOPPED 0x00008000
169 #define DNF_WILL_BE_REMOVED 0x00010000
170 #define DNF_NEED_TO_ENUM 0x00020000
171 #define DNF_NOT_CONFIGURED 0x00040000
172 #define DNF_REINSTALL 0x00080000
173 #define DNF_RESOURCE_REQUIREMENTS_NEED_FILTERED 0x00100000 // ???
174 #define DNF_DISABLED 0x00200000
175 #define DNF_RESTART_OK 0x00400000
176 #define DNF_NEED_RESTART 0x00800000
177 #define DNF_VISITED 0x01000000
178 #define DNF_ASSIGNING_RESOURCES 0x02000000
179 #define DNF_BEEING_ENUMERATED 0x04000000
180 #define DNF_NEED_ENUMERATION_ONLY 0x08000000
181 #define DNF_LOCKED 0x10000000
182 #define DNF_HAS_BOOT_CONFIG 0x20000000
183 #define DNF_BOOT_CONFIG_RESERVED 0x40000000
184 #define DNF_HAS_PROBLEM 0x80000000 // ???
187 // Device Node User Flags
189 #define DNUF_DONT_SHOW_IN_UI 0x0002
190 #define DNUF_NOT_DISABLEABLE 0x0008
193 // Internal Option Flags
195 #define IO_ATTACH_DEVICE_API 0x80000000
198 // Undocumented WMI Registration Flags
200 #define WMIREG_FLAG_TRACE_PROVIDER 0x00010000
201 #define WMIREG_FLAG_TRACE_NOTIFY_MASK 0x00F00000
202 #define WMIREG_NOTIFY_DISK_IO 0x00100000
203 #define WMIREG_NOTIFY_TDI_IO 0x00200000
206 // I/O Completion Information Class for NtQueryIoCompletionInformation
208 typedef enum _IO_COMPLETION_INFORMATION_CLASS
210 IoCompletionBasicInformation
211 } IO_COMPLETION_INFORMATION_CLASS
;
213 #ifdef NTOS_MODE_USER
216 // Hardware Interface Type
218 typedef enum _INTERFACE_TYPE
220 InterfaceTypeUndefined
= -1,
238 }INTERFACE_TYPE
, *PINTERFACE_TYPE
;
240 typedef enum _BUS_DATA_TYPE
242 ConfigurationSpaceUndefined
= -1,
254 SgiInternalConfiguration
,
256 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
259 // File Information Classes for NtQueryInformationFile
261 typedef enum _FILE_INFORMATION_CLASS
263 FileDirectoryInformation
= 1,
264 FileFullDirectoryInformation
,
265 FileBothDirectoryInformation
,
266 FileBasicInformation
,
267 FileStandardInformation
,
268 FileInternalInformation
,
270 FileAccessInformation
,
272 FileRenameInformation
,
274 FileNamesInformation
,
275 FileDispositionInformation
,
276 FilePositionInformation
,
277 FileFullEaInformation
,
279 FileAlignmentInformation
,
281 FileAllocationInformation
,
282 FileEndOfFileInformation
,
283 FileAlternateNameInformation
,
284 FileStreamInformation
,
286 FilePipeLocalInformation
,
287 FilePipeRemoteInformation
,
288 FileMailslotQueryInformation
,
289 FileMailslotSetInformation
,
290 FileCompressionInformation
,
291 FileObjectIdInformation
,
292 FileCompletionInformation
,
293 FileMoveClusterInformation
,
294 FileQuotaInformation
,
295 FileReparsePointInformation
,
296 FileNetworkOpenInformation
,
297 FileAttributeTagInformation
,
298 FileTrackingInformation
,
299 FileIdBothDirectoryInformation
,
300 FileIdFullDirectoryInformation
,
301 FileValidDataLengthInformation
,
302 FileShortNameInformation
,
303 FileMaximumInformation
304 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
307 // File Information Classes for NtQueryInformationFileSystem
309 typedef enum _FSINFOCLASS
311 FileFsVolumeInformation
= 1,
312 FileFsLabelInformation
,
313 FileFsSizeInformation
,
314 FileFsDeviceInformation
,
315 FileFsAttributeInformation
,
316 FileFsControlInformation
,
317 FileFsFullSizeInformation
,
318 FileFsObjectIdInformation
,
319 FileFsDriverPathInformation
,
320 FileFsMaximumInformation
321 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
326 // Device Node States
328 typedef enum _PNP_DEVNODE_STATE
330 DeviceNodeUnspecified
= 0x300,
331 DeviceNodeUninitialized
= 0x301,
332 DeviceNodeInitialized
= 0x302,
333 DeviceNodeDriversAdded
= 0x303,
334 DeviceNodeResourcesAssigned
= 0x304,
335 DeviceNodeStartPending
= 0x305,
336 DeviceNodeStartCompletion
= 0x306,
337 DeviceNodeStartPostWork
= 0x307,
338 DeviceNodeStarted
= 0x308,
339 DeviceNodeQueryStopped
= 0x309,
340 DeviceNodeStopped
= 0x30a,
341 DeviceNodeRestartCompletion
= 0x30b,
342 DeviceNodeEnumeratePending
= 0x30c,
343 DeviceNodeEnumerateCompletion
= 0x30d,
344 DeviceNodeAwaitingQueuedDeletion
= 0x30e,
345 DeviceNodeAwaitingQueuedRemoval
= 0x30f,
346 DeviceNodeQueryRemoved
= 0x310,
347 DeviceNodeRemovePendingCloses
= 0x311,
348 DeviceNodeRemoved
= 0x312,
349 DeviceNodeDeletePendingCloses
= 0x313,
350 DeviceNodeDeleted
= 0x314,
351 MaxDeviceNodeState
= 0x315,
354 #ifdef NTOS_MODE_USER
357 // File Information structures for NtQueryInformationFile
359 typedef struct _FILE_BASIC_INFORMATION
361 LARGE_INTEGER CreationTime
;
362 LARGE_INTEGER LastAccessTime
;
363 LARGE_INTEGER LastWriteTime
;
364 LARGE_INTEGER ChangeTime
;
365 ULONG FileAttributes
;
366 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
368 typedef struct _FILE_STANDARD_INFORMATION
370 LARGE_INTEGER AllocationSize
;
371 LARGE_INTEGER EndOfFile
;
373 BOOLEAN DeletePending
;
375 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
377 typedef struct _FILE_STREAM_INFORMATION
379 ULONG NextEntryOffset
;
380 ULONG StreamNameLength
;
381 LARGE_INTEGER StreamSize
;
382 LARGE_INTEGER StreamAllocationSize
;
384 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
386 typedef struct _FILE_NETWORK_OPEN_INFORMATION
388 LARGE_INTEGER CreationTime
;
389 LARGE_INTEGER LastAccessTime
;
390 LARGE_INTEGER LastWriteTime
;
391 LARGE_INTEGER ChangeTime
;
392 LARGE_INTEGER AllocationSize
;
393 LARGE_INTEGER EndOfFile
;
394 ULONG FileAttributes
;
395 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
397 typedef struct _FILE_EA_INFORMATION
400 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
402 typedef struct _FILE_COMPRESSION_INFORMATION
404 LARGE_INTEGER CompressedFileSize
;
405 USHORT CompressionFormat
;
406 UCHAR CompressionUnitShift
;
410 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
412 typedef struct _FILE_POSITION_INFORMATION
414 LARGE_INTEGER CurrentByteOffset
;
415 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
417 typedef struct _FILE_DISPOSITION_INFORMATION
420 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
422 typedef struct _FILE_FULL_EA_INFORMATION
424 ULONG NextEntryOffset
;
427 USHORT EaValueLength
;
429 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
431 typedef struct _FILE_QUOTA_INFORMATION
433 ULONG NextEntryOffset
;
435 LARGE_INTEGER ChangeTime
;
436 LARGE_INTEGER QuotaUsed
;
437 LARGE_INTEGER QuotaThreshold
;
438 LARGE_INTEGER QuotaLimit
;
440 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
442 typedef struct _FILE_INTERNAL_INFORMATION
444 LARGE_INTEGER IndexNumber
;
445 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
447 typedef struct _FILE_RENAME_INFORMATION
449 BOOLEAN ReplaceIfExists
;
450 HANDLE RootDirectory
;
451 ULONG FileNameLength
;
453 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
455 typedef struct _FILE_PIPE_INFORMATION
458 ULONG CompletionMode
;
459 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
461 typedef struct _FILE_PIPE_LOCAL_INFORMATION
464 ULONG NamedPipeConfiguration
;
465 ULONG MaximumInstances
;
466 ULONG CurrentInstances
;
468 ULONG ReadDataAvailable
;
470 ULONG WriteQuotaAvailable
;
471 ULONG NamedPipeState
;
473 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
475 typedef struct _FILE_PIPE_REMOTE_INFORMATION
477 LARGE_INTEGER CollectDataTime
;
478 ULONG MaximumCollectionCount
;
479 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
481 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
483 ULONG MaximumMessageSize
;
485 ULONG NextMessageSize
;
486 ULONG MessagesAvailable
;
487 LARGE_INTEGER ReadTimeout
;
488 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
490 typedef struct _FILE_MAILSLOT_SET_INFORMATION
492 PLARGE_INTEGER ReadTimeout
;
493 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
495 typedef struct _FILE_BOTH_DIR_INFORMATION
497 ULONG NextEntryOffset
;
499 LARGE_INTEGER CreationTime
;
500 LARGE_INTEGER LastAccessTime
;
501 LARGE_INTEGER LastWriteTime
;
502 LARGE_INTEGER ChangeTime
;
503 LARGE_INTEGER EndOfFile
;
504 LARGE_INTEGER AllocationSize
;
505 ULONG FileAttributes
;
506 ULONG FileNameLength
;
508 CCHAR ShortNameLength
;
511 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
513 typedef struct _FILE_COMPLETION_INFORMATION
517 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
519 typedef struct _FILE_LINK_INFORMATION
521 BOOLEAN ReplaceIfExists
;
522 HANDLE RootDirectory
;
523 ULONG FileNameLength
;
525 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
527 typedef struct _FILE_NAME_INFORMATION
529 ULONG FileNameLength
;
531 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
533 typedef struct _FILE_ALLOCATION_INFORMATION
535 LARGE_INTEGER AllocationSize
;
536 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
538 typedef struct _FILE_END_OF_FILE_INFORMATION
540 LARGE_INTEGER EndOfFile
;
541 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
543 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
545 LARGE_INTEGER ValidDataLength
;
546 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
548 typedef struct _FILE_DIRECTORY_INFORMATION
550 ULONG NextEntryOffset
;
552 LARGE_INTEGER CreationTime
;
553 LARGE_INTEGER LastAccessTime
;
554 LARGE_INTEGER LastWriteTime
;
555 LARGE_INTEGER ChangeTime
;
556 LARGE_INTEGER EndOfFile
;
557 LARGE_INTEGER AllocationSize
;
558 ULONG FileAttributes
;
559 ULONG FileNameLength
;
561 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
564 // File System Information structures for NtQueryInformationFile
566 typedef struct _FILE_FS_DEVICE_INFORMATION
568 DEVICE_TYPE DeviceType
;
569 ULONG Characteristics
;
570 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
572 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
574 ULONG FileSystemAttributes
;
575 ULONG MaximumComponentNameLength
;
576 ULONG FileSystemNameLength
;
577 WCHAR FileSystemName
[1];
578 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
580 typedef struct _FILE_FS_SIZE_INFORMATION
582 LARGE_INTEGER TotalAllocationUnits
;
583 LARGE_INTEGER AvailableAllocationUnits
;
584 ULONG SectorsPerAllocationUnit
;
585 ULONG BytesPerSector
;
586 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
588 typedef struct _FILE_FS_LABEL_INFORMATION
590 ULONG VolumeLabelLength
;
591 WCHAR VolumeLabel
[1];
592 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
594 typedef struct _FILE_FS_VOLUME_INFORMATION
596 LARGE_INTEGER VolumeCreationTime
;
597 ULONG VolumeSerialNumber
;
598 ULONG VolumeLabelLength
;
599 BOOLEAN SupportsObjects
;
600 WCHAR VolumeLabel
[1];
601 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
604 // Pipe Structures for IOCTL_PIPE_XXX
606 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
608 LARGE_INTEGER Timeout
;
610 BOOLEAN TimeoutSpecified
;
612 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
614 typedef struct _FILE_PIPE_PEEK_BUFFER
616 ULONG NamedPipeState
;
617 ULONG ReadDataAvailable
;
618 ULONG NumberOfMessages
;
621 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
626 typedef struct _IO_STATUS_BLOCK
633 ULONG_PTR Information
;
634 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
637 // I/O Error Log Structures
639 typedef struct _IO_ERROR_LOG_PACKET
641 UCHAR MajorFunctionCode
;
644 USHORT NumberOfStrings
;
646 USHORT EventCategory
;
648 ULONG UniqueErrorValue
;
649 NTSTATUS FinalStatus
;
650 ULONG SequenceNumber
;
652 LARGE_INTEGER DeviceOffset
;
654 }IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
656 typedef struct _IO_ERROR_LOG_MESSAGE
660 USHORT DriverNameLength
;
661 LARGE_INTEGER TimeStamp
;
662 ULONG DriverNameOffset
;
663 IO_ERROR_LOG_PACKET EntryData
;
664 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
669 // I/O Completion Information structures
671 typedef struct _IO_COMPLETION_BASIC_INFORMATION
674 } IO_COMPLETION_BASIC_INFORMATION
, *PIO_COMPLETION_BASIC_INFORMATION
;
677 // Parameters for NtCreateMailslotFile/NtCreateNamedPipeFile
679 typedef struct _MAILSLOT_CREATE_PARAMETERS
682 ULONG MaximumMessageSize
;
683 LARGE_INTEGER ReadTimeout
;
684 BOOLEAN TimeoutSpecified
;
685 } MAILSLOT_CREATE_PARAMETERS
, *PMAILSLOT_CREATE_PARAMETERS
;
687 typedef struct _NAMED_PIPE_CREATE_PARAMETERS
691 ULONG CompletionMode
;
692 ULONG MaximumInstances
;
695 LARGE_INTEGER DefaultTimeout
;
696 BOOLEAN TimeoutSpecified
;
697 } NAMED_PIPE_CREATE_PARAMETERS
, *PNAMED_PIPE_CREATE_PARAMETERS
;
699 #ifndef NTOS_MODE_USER
704 typedef struct _IO_TIMER
708 LIST_ENTRY IoTimerList
;
709 PIO_TIMER_ROUTINE TimerRoutine
;
711 PDEVICE_OBJECT DeviceObject
;
712 } IO_TIMER
, *PIO_TIMER
;
717 typedef struct _IO_CLIENT_EXTENSION
719 struct _IO_CLIENT_EXTENSION
*NextExtension
;
720 PVOID ClientIdentificationAddress
;
721 } IO_CLIENT_EXTENSION
, *PIO_CLIENT_EXTENSION
;
726 typedef struct _DEVICE_NODE
728 struct _DEVICE_NODE
*Parent
;
729 struct _DEVICE_NODE
*PrevSibling
;
730 struct _DEVICE_NODE
*NextSibling
;
731 struct _DEVICE_NODE
*Child
;
733 struct _PO_DEVICE_NOTIFY
*Notify
;
734 PNP_DEVNODE_STATE State
;
735 PNP_DEVNODE_STATE PreviousState
;
736 PNP_DEVNODE_STATE StateHistory
[20];
737 ULONG StateHistoryEntry
;
738 INT CompletionStatus
;
743 PDEVICE_OBJECT PhysicalDeviceObject
;
744 PCM_RESOURCE_LIST ResourceList
;
745 PCM_RESOURCE_LIST ResourceListTranslated
;
746 UNICODE_STRING InstancePath
;
747 UNICODE_STRING ServiceName
;
748 PDEVICE_OBJECT DuplicatePDO
;
749 PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements
;
750 INTERFACE_TYPE InterfaceType
;
752 INTERFACE_TYPE ChildInterfaceType
;
753 ULONG ChildBusNumber
;
754 USHORT ChildBusTypeIndex
;
756 UCHAR HardwareRemovalPolicy
;
757 LIST_ENTRY TargetDeviceNotify
;
758 LIST_ENTRY DeviceArbiterList
;
759 LIST_ENTRY DeviceTranslatorList
;
760 USHORT NoTranslatorMask
;
761 USHORT QueryTranslatorMask
;
762 USHORT NoArbiterMask
;
763 USHORT QueryArbiterMask
;
766 struct _DEVICE_NODE
*LegacyDeviceNode
;
767 PDEVICE_RELATIONS PendingDeviceRelations
;
771 struct _DEVICE_NODE
*NextResourceDeviceNode
;
773 PCM_RESOURCE_LIST BootResources
;
774 ULONG CapabilityFlags
;
778 LIST_ENTRY ListEntry
;
781 ULONG DisableableDepends
;
782 LIST_ENTRY PendedSetInterfaceState
;
783 LIST_ENTRY LegacyBusListEntry
;
784 ULONG DriverUnloadRetryCount
;
785 struct _DEVICE_NODE
*PreviousParent
;
786 ULONG DeletedChidren
;
787 } DEVICE_NODE
, *PDEVICE_NODE
;
790 // Resource Aribtrer Entry
792 typedef struct _PI_RESOURCE_ARBITER_ENTRY
794 LIST_ENTRY DeviceArbiterList
;
796 PARBITER_INTERFACE ArbiterInterface
;
798 LIST_ENTRY ResourceList
;
799 LIST_ENTRY BestResourceList
;
800 LIST_ENTRY BestConfig
;
801 LIST_ENTRY ActiveArbiterList
;
803 UCHAR ResourcesChanged
;
804 } PI_RESOURCE_ARBITER_ENTRY
, *PPI_RESOURCE_ARBITER_ENTRY
;
807 // Extended Device Object Extension Structure
809 typedef struct _EXTENDED_DEVOBJ_EXTENSION
813 PDEVICE_OBJECT DeviceObject
;
815 struct DEVICE_OBJECT_POWER_EXTENSION
*Dope
;
816 ULONG ExtensionFlags
;
817 struct _DEVICE_NODE
*DeviceNode
;
818 PDEVICE_OBJECT AttachedTo
;
823 } EXTENDED_DEVOBJ_EXTENSION
, *PEXTENDED_DEVOBJ_EXTENSION
;
826 // Extended Driver Object Extension Structure
828 typedef struct _EXTENDED_DRIVER_EXTENSION
830 struct _DRIVER_OBJECT
*DriverObject
;
831 PDRIVER_ADD_DEVICE AddDevice
;
833 UNICODE_STRING ServiceKeyName
;
834 PIO_CLIENT_EXTENSION ClientDriverExtension
;
835 PFS_FILTER_CALLBACKS FsFilterCallbacks
;
836 } EXTENDED_DRIVER_EXTENSION
, *PEXTENDED_DRIVER_EXTENSION
;
839 // Extended I/O Stack Location Structure
841 #if !defined(_ALPHA_)
842 #include <pshpack4.h>
844 typedef struct _EXTENDED_IO_STACK_LOCATION
854 PIO_SECURITY_CONTEXT SecurityContext
;
856 USHORT FileAttributes
;
862 PIO_SECURITY_CONTEXT SecurityContext
;
866 struct _NAMED_PIPE_CREATE_PARAMETERS
*Parameters
;
870 PIO_SECURITY_CONTEXT SecurityContext
;
874 struct _MAILSLOT_CREATE_PARAMETERS
*Parameters
;
880 LARGE_INTEGER ByteOffset
;
886 LARGE_INTEGER ByteOffset
;
891 PUNICODE_STRING FileName
;
892 FILE_INFORMATION_CLASS FileInformationClass
;
898 ULONG CompletionFilter
;
903 FILE_INFORMATION_CLASS FileInformationClass
;
908 FILE_INFORMATION_CLASS FileInformationClass
;
909 PFILE_OBJECT FileObject
;
914 BOOLEAN ReplaceIfExists
;
935 FS_INFORMATION_CLASS FsInformationClass
;
940 FS_INFORMATION_CLASS FsInformationClass
;
944 ULONG OutputBufferLength
;
945 ULONG InputBufferLength
;
947 PVOID Type3InputBuffer
;
951 PLARGE_INTEGER Length
;
953 LARGE_INTEGER ByteOffset
;
957 ULONG OutputBufferLength
;
958 ULONG InputBufferLength
;
960 PVOID Type3InputBuffer
;
964 SECURITY_INFORMATION SecurityInformation
;
965 ULONG POINTER_ALIGNMENT Length
;
969 SECURITY_INFORMATION SecurityInformation
;
970 PSECURITY_DESCRIPTOR SecurityDescriptor
;
975 PDEVICE_OBJECT DeviceObject
;
980 PDEVICE_OBJECT DeviceObject
;
984 struct _SCSI_REQUEST_BLOCK
*Srb
;
990 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
999 DEVICE_RELATION_TYPE Type
;
1000 } QueryDeviceRelations
;
1003 CONST GUID
*InterfaceType
;
1006 PINTERFACE Interface
;
1007 PVOID InterfaceSpecificData
;
1011 PDEVICE_CAPABILITIES Capabilities
;
1012 } DeviceCapabilities
;
1015 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
1016 } FilterResourceRequirements
;
1030 BUS_QUERY_ID_TYPE IdType
;
1034 DEVICE_TEXT_TYPE DeviceTextType
;
1040 BOOLEAN Reserved
[3];
1041 DEVICE_USAGE_NOTIFICATION_TYPE Type
;
1042 } UsageNotification
;
1045 SYSTEM_POWER_STATE PowerState
;
1049 PPOWER_SEQUENCE PowerSequence
;
1053 ULONG SystemContext
;
1054 POWER_STATE_TYPE Type
;
1056 POWER_ACTION ShutdownType
;
1060 PCM_RESOURCE_LIST AllocatedResources
;
1061 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
1065 ULONG_PTR ProviderId
;
1078 PDEVICE_OBJECT DeviceObject
;
1079 PFILE_OBJECT FileObject
;
1080 PIO_COMPLETION_ROUTINE CompletionRoutine
;
1082 } EXTENDED_IO_STACK_LOCATION
, *PEXTENDED_IO_STACK_LOCATION
;
1083 #if !defined(_ALPHA_)
1084 #include <poppack.h>
1089 // Firmware Boot File Path
1091 typedef struct _FILE_PATH
1097 } FILE_PATH
, *PFILE_PATH
;
1100 // Firmware Boot Options
1102 typedef struct _BOOT_OPTIONS
1107 ULONG CurrentBootEntryId
;
1108 ULONG NextBootEntryId
;
1109 WCHAR HeadlessRedirection
[1];
1110 } BOOT_OPTIONS
, *PBOOT_OPTIONS
;
1113 // Firmware Boot Entry
1115 typedef struct _BOOT_ENTRY
1121 ULONG FriendlyNameOffset
;
1122 ULONG BootFilePathOffset
;
1123 ULONG OsOptionsLength
;
1125 } BOOT_ENTRY
, *PBOOT_ENTRY
;
1128 // Firmware Driver Entry
1130 typedef struct _EFI_DRIVER_ENTRY
1136 ULONG FriendlyNameOffset
;
1137 ULONG DriverFilePathOffset
;
1138 } EFI_DRIVER_ENTRY
, *PEFI_DRIVER_ENTRY
;
1141 // APC Callback for NtCreateFile
1144 (NTAPI
*PIO_APC_ROUTINE
)(
1145 IN PVOID ApcContext
,
1146 IN PIO_STATUS_BLOCK IoStatusBlock
,
1149 #ifdef NTOS_MODE_USER
1152 // Mailslot IOCTL Codes
1154 #define FSCTL_MAILSLOT_PEEK \
1155 CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
1160 #define FSCTL_PIPE_ASSIGN_EVENT \
1161 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
1162 #define FSCTL_PIPE_DISCONNECT \
1163 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
1164 #define FSCTL_PIPE_LISTEN \
1165 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
1166 #define FSCTL_PIPE_PEEK \
1167 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
1168 #define FSCTL_PIPE_QUERY_EVENT \
1169 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
1170 #define FSCTL_PIPE_TRANSCEIVE \
1171 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1172 #define FSCTL_PIPE_WAIT \
1173 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
1174 #define FSCTL_PIPE_IMPERSONATE \
1175 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
1176 #define FSCTL_PIPE_SET_CLIENT_PROCESS \
1177 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
1178 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS \
1179 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
1180 #define FSCTL_PIPE_INTERNAL_READ \
1181 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
1182 #define FSCTL_PIPE_INTERNAL_WRITE \
1183 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
1184 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE \
1185 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1186 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW \
1187 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
1192 #define IOCTL_TAPE_ERASE \
1193 CTL_CODE(FILE_DEVICE_TAPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1194 #define IOCTL_TAPE_PREPARE \
1195 CTL_CODE(FILE_DEVICE_TAPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS)
1196 #define IOCTL_TAPE_WRITE_MARKS \
1197 CTL_CODE(FILE_DEVICE_TAPE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1198 #define IOCTL_TAPE_GET_POSITION \
1199 CTL_CODE(FILE_DEVICE_TAPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS)
1200 #define IOCTL_TAPE_SET_POSITION \
1201 CTL_CODE(FILE_DEVICE_TAPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS)
1202 #define IOCTL_TAPE_GET_DRIVE_PARAMS \
1203 CTL_CODE(FILE_DEVICE_TAPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS)
1204 #define IOCTL_TAPE_SET_DRIVE_PARAMS \
1205 CTL_CODE(FILE_DEVICE_TAPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1206 #define IOCTL_TAPE_GET_MEDIA_PARAMS \
1207 CTL_CODE(FILE_DEVICE_TAPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS)
1208 #define IOCTL_TAPE_SET_MEDIA_PARAMS \
1209 CTL_CODE(FILE_DEVICE_TAPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
1210 #define IOCTL_TAPE_GET_STATUS \
1211 CTL_CODE(FILE_DEVICE_TAPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS)
1212 #define IOCTL_TAPE_CREATE_PARTITION \
1213 CTL_CODE(FILE_DEVICE_TAPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1215 #endif // NTOS_MODE_USER