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
57 /* File System Attributes Flags */
58 #define FILE_READ_ONLY_VOLUME 0x00080000
63 // NtCreateFile Result Flags
65 #define FILE_SUPERSEDED 0x00000000
66 #define FILE_OPENED 0x00000001
67 #define FILE_CREATED 0x00000002
68 #define FILE_OVERWRITTEN 0x00000003
69 #define FILE_EXISTS 0x00000004
70 #define FILE_DOES_NOT_EXIST 0x00000005
75 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
76 #define FILE_PIPE_MESSAGE_TYPE 0x00000001
77 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
78 #define FILE_PIPE_MESSAGE_MODE 0x00000001
79 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
80 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
81 #define FILE_PIPE_INBOUND 0x00000000
82 #define FILE_PIPE_OUTBOUND 0x00000001
83 #define FILE_PIPE_FULL_DUPLEX 0x00000002
84 #define FILE_PIPE_CLIENT_END 0x00000000
85 #define FILE_PIPE_SERVER_END 0x00000001
88 // NtCreateFile Attributes
90 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
91 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
94 // NtCreateFile OpenType Flags
96 #define FILE_SUPERSEDE 0x00000000
97 #define FILE_OPEN 0x00000001
98 #define FILE_CREATE 0x00000002
99 #define FILE_OPEN_IF 0x00000003
100 #define FILE_OVERWRITE 0x00000004
101 #define FILE_OVERWRITE_IF 0x00000005
102 #define FILE_MAXIMUM_DISPOSITION 0x00000005
105 // NtCreateFile Flags
107 #define FILE_DIRECTORY_FILE 0x00000001
108 #define FILE_WRITE_THROUGH 0x00000002
109 #define FILE_SEQUENTIAL_ONLY 0x00000004
110 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
111 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
112 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
113 #define FILE_NON_DIRECTORY_FILE 0x00000040
114 #define FILE_CREATE_TREE_CONNECTION 0x00000080
115 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
116 #define FILE_NO_EA_KNOWLEDGE 0x00000200
117 #define FILE_OPEN_REMOTE_INSTANCE 0x00000400
118 #define FILE_RANDOM_ACCESS 0x00000800
119 #define FILE_DELETE_ON_CLOSE 0x00001000
120 #define FILE_OPEN_BY_FILE_ID 0x00002000
121 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
122 #define FILE_NO_COMPRESSION 0x00008000
123 #define FILE_RESERVE_OPFILTER 0x00100000
124 #define FILE_OPEN_REPARSE_POINT 0x00200000
125 #define FILE_OPEN_NO_RECALL 0x00400000
126 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
129 // Device Charactertics
131 #define FILE_REMOVABLE_MEDIA 0x00000001
132 #define FILE_READ_ONLY_DEVICE 0x00000002
133 #define FILE_FLOPPY_DISKETTE 0x00000004
134 #define FILE_WRITE_ONCE_MEDIA 0x00000008
135 #define FILE_REMOTE_DEVICE 0x00000010
136 #define FILE_DEVICE_IS_MOUNTED 0x00000020
137 #define FILE_VIRTUAL_VOLUME 0x00000040
138 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
139 #define FILE_DEVICE_SECURE_OPEN 0x00000100
144 #define FO_FILE_OBJECT_HAS_EXTENSION 0x00800000
147 // Device Object Extension Flags
149 #define DOE_UNLOAD_PENDING 0x1
150 #define DOE_DELETE_PENDING 0x2
151 #define DOE_REMOVE_PENDING 0x4
152 #define DOE_REMOVE_PROCESSED 0x8
153 #define DOE_START_PENDING 0x10
156 // Device Object StartIo Flags
158 #define DOE_SIO_NO_KEY 0x20
159 #define DOE_SIO_WITH_KEY 0x40
160 #define DOE_SIO_CANCELABLE 0x80
161 #define DOE_SIO_DEFERRED 0x100
162 #define DOE_SIO_NO_CANCEL 0x200
167 #define DNF_PROCESSED 0x00000001
168 #define DNF_STARTED 0x00000002
169 #define DNF_START_FAILED 0x00000004
170 #define DNF_ENUMERATED 0x00000008
171 #define DNF_DELETED 0x00000010
172 #define DNF_MADEUP 0x00000020
173 #define DNF_START_REQUEST_PENDING 0x00000040
174 #define DNF_NO_RESOURCE_REQUIRED 0x00000080
175 #define DNF_INSUFFICIENT_RESOURCES 0x00000100
176 #define DNF_RESOURCE_ASSIGNED 0x00000200
177 #define DNF_RESOURCE_REPORTED 0x00000400
178 #define DNF_HAL_NODE 0x00000800 // ???
179 #define DNF_ADDED 0x00001000
180 #define DNF_ADD_FAILED 0x00002000
181 #define DNF_LEGACY_DRIVER 0x00004000
182 #define DNF_STOPPED 0x00008000
183 #define DNF_WILL_BE_REMOVED 0x00010000
184 #define DNF_LEGACY_RESOURCE_DEVICENODE 0x00020000
185 #define DNF_NOT_CONFIGURED 0x00040000
186 #define DNF_REINSTALL 0x00080000
187 #define DNF_RESOURCE_REQUIREMENTS_NEED_FILTERED 0x00100000 // ???
188 #define DNF_DISABLED 0x00200000
189 #define DNF_RESTART_OK 0x00400000
190 #define DNF_NEED_RESTART 0x00800000
191 #define DNF_VISITED 0x01000000
192 #define DNF_ASSIGNING_RESOURCES 0x02000000
193 #define DNF_BEEING_ENUMERATED 0x04000000
194 #define DNF_NEED_ENUMERATION_ONLY 0x08000000
195 #define DNF_LOCKED 0x10000000
196 #define DNF_HAS_BOOT_CONFIG 0x20000000
197 #define DNF_BOOT_CONFIG_RESERVED 0x40000000
198 #define DNF_HAS_PROBLEM 0x80000000 // ???
201 // Device Node User Flags
203 #define DNUF_DONT_SHOW_IN_UI 0x0002
204 #define DNUF_NOT_DISABLEABLE 0x0008
207 // Internal Option Flags
209 #define IO_ATTACH_DEVICE_API 0x80000000
212 // Undocumented WMI Registration Flags
214 #define WMIREG_FLAG_TRACE_PROVIDER 0x00010000
215 #define WMIREG_FLAG_TRACE_NOTIFY_MASK 0x00F00000
216 #define WMIREG_NOTIFY_DISK_IO 0x00100000
217 #define WMIREG_NOTIFY_TDI_IO 0x00200000
220 // I/O Completion Information Class for NtQueryIoCompletionInformation
222 typedef enum _IO_COMPLETION_INFORMATION_CLASS
224 IoCompletionBasicInformation
225 } IO_COMPLETION_INFORMATION_CLASS
;
227 #ifdef NTOS_MODE_USER
230 // Hardware Interface Type
232 typedef enum _INTERFACE_TYPE
234 InterfaceTypeUndefined
= -1,
252 }INTERFACE_TYPE
, *PINTERFACE_TYPE
;
254 typedef enum _BUS_DATA_TYPE
256 ConfigurationSpaceUndefined
= -1,
268 SgiInternalConfiguration
,
270 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
273 // File Information Classes for NtQueryInformationFile
275 typedef enum _FILE_INFORMATION_CLASS
277 FileDirectoryInformation
= 1,
278 FileFullDirectoryInformation
,
279 FileBothDirectoryInformation
,
280 FileBasicInformation
,
281 FileStandardInformation
,
282 FileInternalInformation
,
284 FileAccessInformation
,
286 FileRenameInformation
,
288 FileNamesInformation
,
289 FileDispositionInformation
,
290 FilePositionInformation
,
291 FileFullEaInformation
,
293 FileAlignmentInformation
,
295 FileAllocationInformation
,
296 FileEndOfFileInformation
,
297 FileAlternateNameInformation
,
298 FileStreamInformation
,
300 FilePipeLocalInformation
,
301 FilePipeRemoteInformation
,
302 FileMailslotQueryInformation
,
303 FileMailslotSetInformation
,
304 FileCompressionInformation
,
305 FileObjectIdInformation
,
306 FileCompletionInformation
,
307 FileMoveClusterInformation
,
308 FileQuotaInformation
,
309 FileReparsePointInformation
,
310 FileNetworkOpenInformation
,
311 FileAttributeTagInformation
,
312 FileTrackingInformation
,
313 FileIdBothDirectoryInformation
,
314 FileIdFullDirectoryInformation
,
315 FileValidDataLengthInformation
,
316 FileShortNameInformation
,
317 #if (NTDDI_VERSION >= NTDDI_VISTA)
318 FileIoCompletionNotificationInformation
,
319 FileIoStatusBlockRangeInformation
,
320 FileIoPriorityHintInformation
,
321 FileSfioReserveInformation
,
322 FileSfioVolumeInformation
,
323 FileHardLinkInformation
,
324 FileProcessIdsUsingFileInformation
,
325 FileNormalizedNameInformation
,
326 FileNetworkPhysicalNameInformation
,
328 #if (NTDDI_VERSION >= NTDDI_WIN7)
329 FileIdGlobalTxDirectoryInformation
,
330 FileIsRemoteDeviceInformation
,
331 FileUnusedInformation
,
332 FileNumaNodeInformation
,
333 FileStandardLinkInformation
,
334 FileRemoteProtocolInformation
,
336 FileMaximumInformation
337 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
340 // File Information Classes for NtQueryInformationFileSystem
342 typedef enum _FSINFOCLASS
344 FileFsVolumeInformation
= 1,
345 FileFsLabelInformation
,
346 FileFsSizeInformation
,
347 FileFsDeviceInformation
,
348 FileFsAttributeInformation
,
349 FileFsControlInformation
,
350 FileFsFullSizeInformation
,
351 FileFsObjectIdInformation
,
352 FileFsDriverPathInformation
,
353 FileFsMaximumInformation
354 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
359 // Dock Profile Status
361 typedef enum _PROFILE_STATUS
367 DOCK_EJECTIRP_COMPLETED
368 } PROFILE_STATUS
, *PPROFILE_STATUS
;
371 // Device Node States
373 typedef enum _PNP_DEVNODE_STATE
375 DeviceNodeUnspecified
= 0x300,
376 DeviceNodeUninitialized
= 0x301,
377 DeviceNodeInitialized
= 0x302,
378 DeviceNodeDriversAdded
= 0x303,
379 DeviceNodeResourcesAssigned
= 0x304,
380 DeviceNodeStartPending
= 0x305,
381 DeviceNodeStartCompletion
= 0x306,
382 DeviceNodeStartPostWork
= 0x307,
383 DeviceNodeStarted
= 0x308,
384 DeviceNodeQueryStopped
= 0x309,
385 DeviceNodeStopped
= 0x30a,
386 DeviceNodeRestartCompletion
= 0x30b,
387 DeviceNodeEnumeratePending
= 0x30c,
388 DeviceNodeEnumerateCompletion
= 0x30d,
389 DeviceNodeAwaitingQueuedDeletion
= 0x30e,
390 DeviceNodeAwaitingQueuedRemoval
= 0x30f,
391 DeviceNodeQueryRemoved
= 0x310,
392 DeviceNodeRemovePendingCloses
= 0x311,
393 DeviceNodeRemoved
= 0x312,
394 DeviceNodeDeletePendingCloses
= 0x313,
395 DeviceNodeDeleted
= 0x314,
396 MaxDeviceNodeState
= 0x315,
399 #ifdef NTOS_MODE_USER
404 typedef struct _IO_STATUS_BLOCK
411 ULONG_PTR Information
;
412 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
415 // File Information structures for NtQueryInformationFile
417 typedef struct _FILE_BASIC_INFORMATION
419 LARGE_INTEGER CreationTime
;
420 LARGE_INTEGER LastAccessTime
;
421 LARGE_INTEGER LastWriteTime
;
422 LARGE_INTEGER ChangeTime
;
423 ULONG FileAttributes
;
424 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
426 typedef struct _FILE_STANDARD_INFORMATION
428 LARGE_INTEGER AllocationSize
;
429 LARGE_INTEGER EndOfFile
;
431 BOOLEAN DeletePending
;
433 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
435 typedef struct _FILE_STREAM_INFORMATION
437 ULONG NextEntryOffset
;
438 ULONG StreamNameLength
;
439 LARGE_INTEGER StreamSize
;
440 LARGE_INTEGER StreamAllocationSize
;
442 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
444 typedef struct _FILE_NETWORK_OPEN_INFORMATION
446 LARGE_INTEGER CreationTime
;
447 LARGE_INTEGER LastAccessTime
;
448 LARGE_INTEGER LastWriteTime
;
449 LARGE_INTEGER ChangeTime
;
450 LARGE_INTEGER AllocationSize
;
451 LARGE_INTEGER EndOfFile
;
452 ULONG FileAttributes
;
453 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
455 typedef struct _FILE_EA_INFORMATION
458 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
460 typedef struct _FILE_ACCESS_INFORMATION
462 ACCESS_MASK AccessFlags
;
463 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
465 typedef struct _FILE_COMPRESSION_INFORMATION
467 LARGE_INTEGER CompressedFileSize
;
468 USHORT CompressionFormat
;
469 UCHAR CompressionUnitShift
;
473 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
475 typedef struct _FILE_POSITION_INFORMATION
477 LARGE_INTEGER CurrentByteOffset
;
478 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
480 typedef struct _FILE_DISPOSITION_INFORMATION
483 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
485 typedef struct _FILE_FULL_EA_INFORMATION
487 ULONG NextEntryOffset
;
490 USHORT EaValueLength
;
492 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
494 typedef struct _FILE_QUOTA_INFORMATION
496 ULONG NextEntryOffset
;
498 LARGE_INTEGER ChangeTime
;
499 LARGE_INTEGER QuotaUsed
;
500 LARGE_INTEGER QuotaThreshold
;
501 LARGE_INTEGER QuotaLimit
;
503 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
505 typedef struct _FILE_INTERNAL_INFORMATION
507 LARGE_INTEGER IndexNumber
;
508 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
510 typedef struct _FILE_RENAME_INFORMATION
512 BOOLEAN ReplaceIfExists
;
513 HANDLE RootDirectory
;
514 ULONG FileNameLength
;
516 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
518 typedef struct _FILE_PIPE_INFORMATION
521 ULONG CompletionMode
;
522 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
524 typedef struct _FILE_PIPE_LOCAL_INFORMATION
527 ULONG NamedPipeConfiguration
;
528 ULONG MaximumInstances
;
529 ULONG CurrentInstances
;
531 ULONG ReadDataAvailable
;
533 ULONG WriteQuotaAvailable
;
534 ULONG NamedPipeState
;
536 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
538 typedef struct _FILE_PIPE_REMOTE_INFORMATION
540 LARGE_INTEGER CollectDataTime
;
541 ULONG MaximumCollectionCount
;
542 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
544 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
546 ULONG MaximumMessageSize
;
548 ULONG NextMessageSize
;
549 ULONG MessagesAvailable
;
550 LARGE_INTEGER ReadTimeout
;
551 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
553 typedef struct _FILE_MAILSLOT_SET_INFORMATION
555 PLARGE_INTEGER ReadTimeout
;
556 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
558 typedef struct _FILE_FULL_DIR_INFORMATION
560 ULONG NextEntryOffset
;
562 LARGE_INTEGER CreationTime
;
563 LARGE_INTEGER LastAccessTime
;
564 LARGE_INTEGER LastWriteTime
;
565 LARGE_INTEGER ChangeTime
;
566 LARGE_INTEGER EndOfFile
;
567 LARGE_INTEGER AllocationSize
;
568 ULONG FileAttributes
;
569 ULONG FileNameLength
;
572 } FILE_FULL_DIR_INFORMATION
, *PFILE_FULL_DIR_INFORMATION
;
574 typedef struct _FILE_BOTH_DIR_INFORMATION
576 ULONG NextEntryOffset
;
578 LARGE_INTEGER CreationTime
;
579 LARGE_INTEGER LastAccessTime
;
580 LARGE_INTEGER LastWriteTime
;
581 LARGE_INTEGER ChangeTime
;
582 LARGE_INTEGER EndOfFile
;
583 LARGE_INTEGER AllocationSize
;
584 ULONG FileAttributes
;
585 ULONG FileNameLength
;
587 CCHAR ShortNameLength
;
590 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
592 typedef struct _FILE_COMPLETION_INFORMATION
596 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
598 typedef struct _FILE_LINK_INFORMATION
600 BOOLEAN ReplaceIfExists
;
601 HANDLE RootDirectory
;
602 ULONG FileNameLength
;
604 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
606 typedef struct _FILE_NAME_INFORMATION
608 ULONG FileNameLength
;
610 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
612 typedef struct _FILE_ALLOCATION_INFORMATION
614 LARGE_INTEGER AllocationSize
;
615 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
617 typedef struct _FILE_END_OF_FILE_INFORMATION
619 LARGE_INTEGER EndOfFile
;
620 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
622 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
624 LARGE_INTEGER ValidDataLength
;
625 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
627 typedef struct _FILE_DIRECTORY_INFORMATION
629 ULONG NextEntryOffset
;
631 LARGE_INTEGER CreationTime
;
632 LARGE_INTEGER LastAccessTime
;
633 LARGE_INTEGER LastWriteTime
;
634 LARGE_INTEGER ChangeTime
;
635 LARGE_INTEGER EndOfFile
;
636 LARGE_INTEGER AllocationSize
;
637 ULONG FileAttributes
;
638 ULONG FileNameLength
;
640 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
642 typedef struct _FILE_IO_COMPLETION_INFORMATION
646 IO_STATUS_BLOCK IoStatusBlock
;
647 } FILE_IO_COMPLETION_INFORMATION
, *PFILE_IO_COMPLETION_INFORMATION
;
649 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
651 ULONG FileAttributes
;
653 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
655 typedef struct _FILE_TRACKING_INFORMATION
657 HANDLE DestinationFile
;
658 ULONG ObjectInformationLength
;
659 CHAR ObjectInformation
[1];
660 } FILE_TRACKING_INFORMATION
, *PFILE_TRACKING_INFORMATION
;
663 // File System Information structures for NtQueryInformationFile
665 typedef struct _FILE_FS_DEVICE_INFORMATION
667 DEVICE_TYPE DeviceType
;
668 ULONG Characteristics
;
669 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
671 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
673 ULONG FileSystemAttributes
;
674 ULONG MaximumComponentNameLength
;
675 ULONG FileSystemNameLength
;
676 WCHAR FileSystemName
[1];
677 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
679 typedef struct _FILE_FS_SIZE_INFORMATION
681 LARGE_INTEGER TotalAllocationUnits
;
682 LARGE_INTEGER AvailableAllocationUnits
;
683 ULONG SectorsPerAllocationUnit
;
684 ULONG BytesPerSector
;
685 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
687 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
689 LARGE_INTEGER TotalAllocationUnits
;
690 LARGE_INTEGER CallerAvailableAllocationUnits
;
691 LARGE_INTEGER ActualAvailableAllocationUnits
;
692 ULONG SectorsPerAllocationUnit
;
693 ULONG BytesPerSector
;
694 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
696 typedef struct _FILE_FS_LABEL_INFORMATION
698 ULONG VolumeLabelLength
;
699 WCHAR VolumeLabel
[1];
700 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
702 typedef struct _FILE_FS_VOLUME_INFORMATION
704 LARGE_INTEGER VolumeCreationTime
;
705 ULONG VolumeSerialNumber
;
706 ULONG VolumeLabelLength
;
707 BOOLEAN SupportsObjects
;
708 WCHAR VolumeLabel
[1];
709 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
712 // Pipe Structures for IOCTL_PIPE_XXX
714 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
716 LARGE_INTEGER Timeout
;
718 BOOLEAN TimeoutSpecified
;
720 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
722 typedef struct _FILE_PIPE_PEEK_BUFFER
724 ULONG NamedPipeState
;
725 ULONG ReadDataAvailable
;
726 ULONG NumberOfMessages
;
729 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
732 // I/O Error Log Structures
734 typedef struct _IO_ERROR_LOG_PACKET
736 UCHAR MajorFunctionCode
;
739 USHORT NumberOfStrings
;
741 USHORT EventCategory
;
743 ULONG UniqueErrorValue
;
744 NTSTATUS FinalStatus
;
745 ULONG SequenceNumber
;
747 LARGE_INTEGER DeviceOffset
;
749 } IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
751 typedef struct _IO_ERROR_LOG_MESSAGE
755 USHORT DriverNameLength
;
756 LARGE_INTEGER TimeStamp
;
757 ULONG DriverNameOffset
;
758 IO_ERROR_LOG_PACKET EntryData
;
759 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
764 // I/O Completion Information structures
766 typedef struct _IO_COMPLETION_BASIC_INFORMATION
769 } IO_COMPLETION_BASIC_INFORMATION
, *PIO_COMPLETION_BASIC_INFORMATION
;
772 // Parameters for NtCreateMailslotFile/NtCreateNamedPipeFile
774 typedef struct _MAILSLOT_CREATE_PARAMETERS
777 ULONG MaximumMessageSize
;
778 LARGE_INTEGER ReadTimeout
;
779 BOOLEAN TimeoutSpecified
;
780 } MAILSLOT_CREATE_PARAMETERS
, *PMAILSLOT_CREATE_PARAMETERS
;
782 typedef struct _NAMED_PIPE_CREATE_PARAMETERS
786 ULONG CompletionMode
;
787 ULONG MaximumInstances
;
790 LARGE_INTEGER DefaultTimeout
;
791 BOOLEAN TimeoutSpecified
;
792 } NAMED_PIPE_CREATE_PARAMETERS
, *PNAMED_PIPE_CREATE_PARAMETERS
;
794 #ifndef NTOS_MODE_USER
799 typedef struct _IO_TIMER
803 LIST_ENTRY IoTimerList
;
804 PIO_TIMER_ROUTINE TimerRoutine
;
806 PDEVICE_OBJECT DeviceObject
;
812 typedef struct _IO_CLIENT_EXTENSION
814 struct _IO_CLIENT_EXTENSION
*NextExtension
;
815 PVOID ClientIdentificationAddress
;
816 } IO_CLIENT_EXTENSION
, *PIO_CLIENT_EXTENSION
;
821 typedef struct _DEVICE_NODE
823 struct _DEVICE_NODE
*Sibling
;
824 struct _DEVICE_NODE
*Child
;
825 struct _DEVICE_NODE
*Parent
;
826 struct _DEVICE_NODE
*LastChild
;
828 struct _PO_DEVICE_NOTIFY
*Notify
;
829 PO_IRP_MANAGER PoIrpManager
;
830 PNP_DEVNODE_STATE State
;
831 PNP_DEVNODE_STATE PreviousState
;
832 PNP_DEVNODE_STATE StateHistory
[20];
833 ULONG StateHistoryEntry
;
834 NTSTATUS CompletionStatus
;
839 PDEVICE_OBJECT PhysicalDeviceObject
;
840 PCM_RESOURCE_LIST ResourceList
;
841 PCM_RESOURCE_LIST ResourceListTranslated
;
842 UNICODE_STRING InstancePath
;
843 UNICODE_STRING ServiceName
;
844 PDEVICE_OBJECT DuplicatePDO
;
845 PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements
;
846 INTERFACE_TYPE InterfaceType
;
848 INTERFACE_TYPE ChildInterfaceType
;
849 ULONG ChildBusNumber
;
850 USHORT ChildBusTypeIndex
;
852 UCHAR HardwareRemovalPolicy
;
853 LIST_ENTRY TargetDeviceNotify
;
854 LIST_ENTRY DeviceArbiterList
;
855 LIST_ENTRY DeviceTranslatorList
;
856 USHORT NoTranslatorMask
;
857 USHORT QueryTranslatorMask
;
858 USHORT NoArbiterMask
;
859 USHORT QueryArbiterMask
;
862 struct _DEVICE_NODE
*LegacyDeviceNode
;
863 PDEVICE_RELATIONS PendingDeviceRelations
;
867 struct _DEVICE_NODE
*NextResourceDeviceNode
;
869 PCM_RESOURCE_LIST BootResources
;
870 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
871 PCM_RESOURCE_LIST BootResourcesTranslated
;
873 ULONG CapabilityFlags
;
876 PROFILE_STATUS DockStatus
;
877 LIST_ENTRY ListEntry
;
880 ULONG DisableableDepends
;
881 LIST_ENTRY PendedSetInterfaceState
;
882 LIST_ENTRY LegacyBusListEntry
;
883 ULONG DriverUnloadRetryCount
;
884 struct _DEVICE_NODE
*PreviousParent
;
885 ULONG DeletedChidren
;
886 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
889 } DEVICE_NODE
, *PDEVICE_NODE
;
892 // Resource Aribtrer Entry
894 typedef struct _PI_RESOURCE_ARBITER_ENTRY
896 LIST_ENTRY DeviceArbiterList
;
898 PARBITER_INTERFACE ArbiterInterface
;
900 LIST_ENTRY ResourceList
;
901 LIST_ENTRY BestResourceList
;
902 LIST_ENTRY BestConfig
;
903 LIST_ENTRY ActiveArbiterList
;
905 UCHAR ResourcesChanged
;
906 } PI_RESOURCE_ARBITER_ENTRY
, *PPI_RESOURCE_ARBITER_ENTRY
;
909 // Extended Device Object Extension Structure
911 typedef struct _EXTENDED_DEVOBJ_EXTENSION
915 PDEVICE_OBJECT DeviceObject
;
917 struct _DEVICE_OBJECT_POWER_EXTENSION
*Dope
;
918 ULONG ExtensionFlags
;
919 struct _DEVICE_NODE
*DeviceNode
;
920 PDEVICE_OBJECT AttachedTo
;
925 } EXTENDED_DEVOBJ_EXTENSION
, *PEXTENDED_DEVOBJ_EXTENSION
;
928 // Extended Driver Object Extension Structure
930 typedef struct _EXTENDED_DRIVER_EXTENSION
932 struct _DRIVER_OBJECT
*DriverObject
;
933 PDRIVER_ADD_DEVICE AddDevice
;
935 UNICODE_STRING ServiceKeyName
;
936 PIO_CLIENT_EXTENSION ClientDriverExtension
;
937 PFS_FILTER_CALLBACKS FsFilterCallbacks
;
938 } EXTENDED_DRIVER_EXTENSION
, *PEXTENDED_DRIVER_EXTENSION
;
941 // Extended I/O Stack Location Structure
943 #if !defined(_ALPHA_)
944 #include <pshpack4.h>
946 typedef struct _EXTENDED_IO_STACK_LOCATION
956 PIO_SECURITY_CONTEXT SecurityContext
;
958 USHORT FileAttributes
;
964 PIO_SECURITY_CONTEXT SecurityContext
;
968 struct _NAMED_PIPE_CREATE_PARAMETERS
*Parameters
;
972 PIO_SECURITY_CONTEXT SecurityContext
;
976 struct _MAILSLOT_CREATE_PARAMETERS
*Parameters
;
982 LARGE_INTEGER ByteOffset
;
988 LARGE_INTEGER ByteOffset
;
993 PUNICODE_STRING FileName
;
994 FILE_INFORMATION_CLASS FileInformationClass
;
1000 ULONG CompletionFilter
;
1005 FILE_INFORMATION_CLASS FileInformationClass
;
1010 FILE_INFORMATION_CLASS FileInformationClass
;
1011 PFILE_OBJECT FileObject
;
1016 BOOLEAN ReplaceIfExists
;
1017 BOOLEAN AdvanceOnly
;
1020 HANDLE DeleteHandle
;
1037 FS_INFORMATION_CLASS FsInformationClass
;
1042 FS_INFORMATION_CLASS FsInformationClass
;
1046 ULONG OutputBufferLength
;
1047 ULONG InputBufferLength
;
1048 ULONG FsControlCode
;
1049 PVOID Type3InputBuffer
;
1050 } FileSystemControl
;
1053 PLARGE_INTEGER Length
;
1055 LARGE_INTEGER ByteOffset
;
1059 ULONG OutputBufferLength
;
1060 ULONG InputBufferLength
;
1061 ULONG IoControlCode
;
1062 PVOID Type3InputBuffer
;
1066 SECURITY_INFORMATION SecurityInformation
;
1067 ULONG POINTER_ALIGNMENT Length
;
1071 SECURITY_INFORMATION SecurityInformation
;
1072 PSECURITY_DESCRIPTOR SecurityDescriptor
;
1077 PDEVICE_OBJECT DeviceObject
;
1082 PDEVICE_OBJECT DeviceObject
;
1086 struct _SCSI_REQUEST_BLOCK
*Srb
;
1092 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
1093 ULONG SidListLength
;
1101 DEVICE_RELATION_TYPE Type
;
1102 } QueryDeviceRelations
;
1105 CONST GUID
*InterfaceType
;
1108 PINTERFACE Interface
;
1109 PVOID InterfaceSpecificData
;
1113 PDEVICE_CAPABILITIES Capabilities
;
1114 } DeviceCapabilities
;
1117 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
1118 } FilterResourceRequirements
;
1132 BUS_QUERY_ID_TYPE IdType
;
1136 DEVICE_TEXT_TYPE DeviceTextType
;
1142 BOOLEAN Reserved
[3];
1143 DEVICE_USAGE_NOTIFICATION_TYPE Type
;
1144 } UsageNotification
;
1147 SYSTEM_POWER_STATE PowerState
;
1151 PPOWER_SEQUENCE PowerSequence
;
1155 ULONG SystemContext
;
1156 POWER_STATE_TYPE Type
;
1158 POWER_ACTION ShutdownType
;
1162 PCM_RESOURCE_LIST AllocatedResources
;
1163 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
1167 ULONG_PTR ProviderId
;
1180 PDEVICE_OBJECT DeviceObject
;
1181 PFILE_OBJECT FileObject
;
1182 PIO_COMPLETION_ROUTINE CompletionRoutine
;
1184 } EXTENDED_IO_STACK_LOCATION
, *PEXTENDED_IO_STACK_LOCATION
;
1185 #if !defined(_ALPHA_)
1186 #include <poppack.h>
1191 // Firmware Boot File Path
1193 typedef struct _FILE_PATH
1199 } FILE_PATH
, *PFILE_PATH
;
1202 // Firmware Boot Options
1204 typedef struct _BOOT_OPTIONS
1209 ULONG CurrentBootEntryId
;
1210 ULONG NextBootEntryId
;
1211 WCHAR HeadlessRedirection
[1];
1212 } BOOT_OPTIONS
, *PBOOT_OPTIONS
;
1215 // Firmware Boot Entry
1217 typedef struct _BOOT_ENTRY
1223 ULONG FriendlyNameOffset
;
1224 ULONG BootFilePathOffset
;
1225 ULONG OsOptionsLength
;
1227 } BOOT_ENTRY
, *PBOOT_ENTRY
;
1230 // Firmware Driver Entry
1232 typedef struct _EFI_DRIVER_ENTRY
1238 ULONG FriendlyNameOffset
;
1239 ULONG DriverFilePathOffset
;
1240 } EFI_DRIVER_ENTRY
, *PEFI_DRIVER_ENTRY
;
1242 #ifdef NTOS_MODE_USER
1245 // APC Callback for NtCreateFile
1248 (NTAPI
*PIO_APC_ROUTINE
)(
1249 _In_ PVOID ApcContext
,
1250 _In_ PIO_STATUS_BLOCK IoStatusBlock
,
1251 _In_ ULONG Reserved
);
1254 // Mailslot IOCTL Codes
1256 #define FSCTL_MAILSLOT_PEEK \
1257 CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
1262 #define FSCTL_PIPE_ASSIGN_EVENT \
1263 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
1264 #define FSCTL_PIPE_DISCONNECT \
1265 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
1266 #define FSCTL_PIPE_LISTEN \
1267 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
1268 #define FSCTL_PIPE_PEEK \
1269 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
1270 #define FSCTL_PIPE_QUERY_EVENT \
1271 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
1272 #define FSCTL_PIPE_TRANSCEIVE \
1273 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1274 #define FSCTL_PIPE_WAIT \
1275 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
1276 #define FSCTL_PIPE_IMPERSONATE \
1277 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
1278 #define FSCTL_PIPE_SET_CLIENT_PROCESS \
1279 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
1280 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS \
1281 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
1282 #define FSCTL_PIPE_INTERNAL_READ \
1283 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
1284 #define FSCTL_PIPE_INTERNAL_WRITE \
1285 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
1286 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE \
1287 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1288 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW \
1289 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
1294 #define IOCTL_TAPE_ERASE \
1295 CTL_CODE(FILE_DEVICE_TAPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1296 #define IOCTL_TAPE_PREPARE \
1297 CTL_CODE(FILE_DEVICE_TAPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS)
1298 #define IOCTL_TAPE_WRITE_MARKS \
1299 CTL_CODE(FILE_DEVICE_TAPE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1300 #define IOCTL_TAPE_GET_POSITION \
1301 CTL_CODE(FILE_DEVICE_TAPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS)
1302 #define IOCTL_TAPE_SET_POSITION \
1303 CTL_CODE(FILE_DEVICE_TAPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS)
1304 #define IOCTL_TAPE_GET_DRIVE_PARAMS \
1305 CTL_CODE(FILE_DEVICE_TAPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS)
1306 #define IOCTL_TAPE_SET_DRIVE_PARAMS \
1307 CTL_CODE(FILE_DEVICE_TAPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1308 #define IOCTL_TAPE_GET_MEDIA_PARAMS \
1309 CTL_CODE(FILE_DEVICE_TAPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS)
1310 #define IOCTL_TAPE_SET_MEDIA_PARAMS \
1311 CTL_CODE(FILE_DEVICE_TAPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
1312 #define IOCTL_TAPE_GET_STATUS \
1313 CTL_CODE(FILE_DEVICE_TAPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS)
1314 #define IOCTL_TAPE_CREATE_PARTITION \
1315 CTL_CODE(FILE_DEVICE_TAPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1317 #endif // NTOS_MODE_USER