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_REMOTE_INSTANCE 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_READ_ONLY_DEVICE 0x00000002
126 #define FILE_FLOPPY_DISKETTE 0x00000004
127 #define FILE_WRITE_ONCE_MEDIA 0x00000008
128 #define FILE_REMOTE_DEVICE 0x00000010
129 #define FILE_DEVICE_IS_MOUNTED 0x00000020
130 #define FILE_VIRTUAL_VOLUME 0x00000040
131 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
132 #define FILE_DEVICE_SECURE_OPEN 0x00000100
137 #define FO_FILE_OBJECT_HAS_EXTENSION 0x00800000
140 // Device Object Extension Flags
142 #define DOE_UNLOAD_PENDING 0x1
143 #define DOE_DELETE_PENDING 0x2
144 #define DOE_REMOVE_PENDING 0x4
145 #define DOE_REMOVE_PROCESSED 0x8
146 #define DOE_START_PENDING 0x10
149 // Device Object StartIo Flags
151 #define DOE_SIO_NO_KEY 0x20
152 #define DOE_SIO_WITH_KEY 0x40
153 #define DOE_SIO_CANCELABLE 0x80
154 #define DOE_SIO_DEFERRED 0x100
155 #define DOE_SIO_NO_CANCEL 0x200
160 #define DNF_PROCESSED 0x00000001
161 #define DNF_STARTED 0x00000002
162 #define DNF_START_FAILED 0x00000004
163 #define DNF_ENUMERATED 0x00000008
164 #define DNF_DELETED 0x00000010
165 #define DNF_MADEUP 0x00000020
166 #define DNF_START_REQUEST_PENDING 0x00000040
167 #define DNF_NO_RESOURCE_REQUIRED 0x00000080
168 #define DNF_INSUFFICIENT_RESOURCES 0x00000100
169 #define DNF_RESOURCE_ASSIGNED 0x00000200
170 #define DNF_RESOURCE_REPORTED 0x00000400
171 #define DNF_HAL_NODE 0x00000800 // ???
172 #define DNF_ADDED 0x00001000
173 #define DNF_ADD_FAILED 0x00002000
174 #define DNF_LEGACY_DRIVER 0x00004000
175 #define DNF_STOPPED 0x00008000
176 #define DNF_WILL_BE_REMOVED 0x00010000
177 #define DNF_LEGACY_RESOURCE_DEVICENODE 0x00020000
178 #define DNF_NOT_CONFIGURED 0x00040000
179 #define DNF_REINSTALL 0x00080000
180 #define DNF_RESOURCE_REQUIREMENTS_NEED_FILTERED 0x00100000 // ???
181 #define DNF_DISABLED 0x00200000
182 #define DNF_RESTART_OK 0x00400000
183 #define DNF_NEED_RESTART 0x00800000
184 #define DNF_VISITED 0x01000000
185 #define DNF_ASSIGNING_RESOURCES 0x02000000
186 #define DNF_BEEING_ENUMERATED 0x04000000
187 #define DNF_NEED_ENUMERATION_ONLY 0x08000000
188 #define DNF_LOCKED 0x10000000
189 #define DNF_HAS_BOOT_CONFIG 0x20000000
190 #define DNF_BOOT_CONFIG_RESERVED 0x40000000
191 #define DNF_HAS_PROBLEM 0x80000000 // ???
194 // Device Node User Flags
196 #define DNUF_DONT_SHOW_IN_UI 0x0002
197 #define DNUF_NOT_DISABLEABLE 0x0008
200 // Internal Option Flags
202 #define IO_ATTACH_DEVICE_API 0x80000000
205 // Undocumented WMI Registration Flags
207 #define WMIREG_FLAG_TRACE_PROVIDER 0x00010000
208 #define WMIREG_FLAG_TRACE_NOTIFY_MASK 0x00F00000
209 #define WMIREG_NOTIFY_DISK_IO 0x00100000
210 #define WMIREG_NOTIFY_TDI_IO 0x00200000
213 // I/O Completion Information Class for NtQueryIoCompletionInformation
215 typedef enum _IO_COMPLETION_INFORMATION_CLASS
217 IoCompletionBasicInformation
218 } IO_COMPLETION_INFORMATION_CLASS
;
220 #ifdef NTOS_MODE_USER
223 // Hardware Interface Type
225 typedef enum _INTERFACE_TYPE
227 InterfaceTypeUndefined
= -1,
245 }INTERFACE_TYPE
, *PINTERFACE_TYPE
;
247 typedef enum _BUS_DATA_TYPE
249 ConfigurationSpaceUndefined
= -1,
261 SgiInternalConfiguration
,
263 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
266 // File Information Classes for NtQueryInformationFile
268 typedef enum _FILE_INFORMATION_CLASS
270 FileDirectoryInformation
= 1,
271 FileFullDirectoryInformation
,
272 FileBothDirectoryInformation
,
273 FileBasicInformation
,
274 FileStandardInformation
,
275 FileInternalInformation
,
277 FileAccessInformation
,
279 FileRenameInformation
,
281 FileNamesInformation
,
282 FileDispositionInformation
,
283 FilePositionInformation
,
284 FileFullEaInformation
,
286 FileAlignmentInformation
,
288 FileAllocationInformation
,
289 FileEndOfFileInformation
,
290 FileAlternateNameInformation
,
291 FileStreamInformation
,
293 FilePipeLocalInformation
,
294 FilePipeRemoteInformation
,
295 FileMailslotQueryInformation
,
296 FileMailslotSetInformation
,
297 FileCompressionInformation
,
298 FileObjectIdInformation
,
299 FileCompletionInformation
,
300 FileMoveClusterInformation
,
301 FileQuotaInformation
,
302 FileReparsePointInformation
,
303 FileNetworkOpenInformation
,
304 FileAttributeTagInformation
,
305 FileTrackingInformation
,
306 FileIdBothDirectoryInformation
,
307 FileIdFullDirectoryInformation
,
308 FileValidDataLengthInformation
,
309 FileShortNameInformation
,
310 FileMaximumInformation
311 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
314 // File Information Classes for NtQueryInformationFileSystem
316 typedef enum _FSINFOCLASS
318 FileFsVolumeInformation
= 1,
319 FileFsLabelInformation
,
320 FileFsSizeInformation
,
321 FileFsDeviceInformation
,
322 FileFsAttributeInformation
,
323 FileFsControlInformation
,
324 FileFsFullSizeInformation
,
325 FileFsObjectIdInformation
,
326 FileFsDriverPathInformation
,
327 FileFsMaximumInformation
328 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
333 // Dock Profile Status
335 typedef enum _PROFILE_STATUS
341 DOCK_EJECTIRP_COMPLETED
342 } PROFILE_STATUS
, *PPROFILE_STATUS
;
345 // Device Node States
347 typedef enum _PNP_DEVNODE_STATE
349 DeviceNodeUnspecified
= 0x300,
350 DeviceNodeUninitialized
= 0x301,
351 DeviceNodeInitialized
= 0x302,
352 DeviceNodeDriversAdded
= 0x303,
353 DeviceNodeResourcesAssigned
= 0x304,
354 DeviceNodeStartPending
= 0x305,
355 DeviceNodeStartCompletion
= 0x306,
356 DeviceNodeStartPostWork
= 0x307,
357 DeviceNodeStarted
= 0x308,
358 DeviceNodeQueryStopped
= 0x309,
359 DeviceNodeStopped
= 0x30a,
360 DeviceNodeRestartCompletion
= 0x30b,
361 DeviceNodeEnumeratePending
= 0x30c,
362 DeviceNodeEnumerateCompletion
= 0x30d,
363 DeviceNodeAwaitingQueuedDeletion
= 0x30e,
364 DeviceNodeAwaitingQueuedRemoval
= 0x30f,
365 DeviceNodeQueryRemoved
= 0x310,
366 DeviceNodeRemovePendingCloses
= 0x311,
367 DeviceNodeRemoved
= 0x312,
368 DeviceNodeDeletePendingCloses
= 0x313,
369 DeviceNodeDeleted
= 0x314,
370 MaxDeviceNodeState
= 0x315,
373 #ifdef NTOS_MODE_USER
378 typedef struct _IO_STATUS_BLOCK
385 ULONG_PTR Information
;
386 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
389 // File Information structures for NtQueryInformationFile
391 typedef struct _FILE_BASIC_INFORMATION
393 LARGE_INTEGER CreationTime
;
394 LARGE_INTEGER LastAccessTime
;
395 LARGE_INTEGER LastWriteTime
;
396 LARGE_INTEGER ChangeTime
;
397 ULONG FileAttributes
;
398 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
400 typedef struct _FILE_STANDARD_INFORMATION
402 LARGE_INTEGER AllocationSize
;
403 LARGE_INTEGER EndOfFile
;
405 BOOLEAN DeletePending
;
407 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
409 typedef struct _FILE_STREAM_INFORMATION
411 ULONG NextEntryOffset
;
412 ULONG StreamNameLength
;
413 LARGE_INTEGER StreamSize
;
414 LARGE_INTEGER StreamAllocationSize
;
416 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
418 typedef struct _FILE_NETWORK_OPEN_INFORMATION
420 LARGE_INTEGER CreationTime
;
421 LARGE_INTEGER LastAccessTime
;
422 LARGE_INTEGER LastWriteTime
;
423 LARGE_INTEGER ChangeTime
;
424 LARGE_INTEGER AllocationSize
;
425 LARGE_INTEGER EndOfFile
;
426 ULONG FileAttributes
;
427 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
429 typedef struct _FILE_EA_INFORMATION
432 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
434 typedef struct _FILE_COMPRESSION_INFORMATION
436 LARGE_INTEGER CompressedFileSize
;
437 USHORT CompressionFormat
;
438 UCHAR CompressionUnitShift
;
442 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
444 typedef struct _FILE_POSITION_INFORMATION
446 LARGE_INTEGER CurrentByteOffset
;
447 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
449 typedef struct _FILE_DISPOSITION_INFORMATION
452 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
454 typedef struct _FILE_FULL_EA_INFORMATION
456 ULONG NextEntryOffset
;
459 USHORT EaValueLength
;
461 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
463 typedef struct _FILE_QUOTA_INFORMATION
465 ULONG NextEntryOffset
;
467 LARGE_INTEGER ChangeTime
;
468 LARGE_INTEGER QuotaUsed
;
469 LARGE_INTEGER QuotaThreshold
;
470 LARGE_INTEGER QuotaLimit
;
472 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
474 typedef struct _FILE_INTERNAL_INFORMATION
476 LARGE_INTEGER IndexNumber
;
477 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
479 typedef struct _FILE_RENAME_INFORMATION
481 BOOLEAN ReplaceIfExists
;
482 HANDLE RootDirectory
;
483 ULONG FileNameLength
;
485 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
487 typedef struct _FILE_PIPE_INFORMATION
490 ULONG CompletionMode
;
491 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
493 typedef struct _FILE_PIPE_LOCAL_INFORMATION
496 ULONG NamedPipeConfiguration
;
497 ULONG MaximumInstances
;
498 ULONG CurrentInstances
;
500 ULONG ReadDataAvailable
;
502 ULONG WriteQuotaAvailable
;
503 ULONG NamedPipeState
;
505 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
507 typedef struct _FILE_PIPE_REMOTE_INFORMATION
509 LARGE_INTEGER CollectDataTime
;
510 ULONG MaximumCollectionCount
;
511 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
513 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
515 ULONG MaximumMessageSize
;
517 ULONG NextMessageSize
;
518 ULONG MessagesAvailable
;
519 LARGE_INTEGER ReadTimeout
;
520 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
522 typedef struct _FILE_MAILSLOT_SET_INFORMATION
524 PLARGE_INTEGER ReadTimeout
;
525 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
527 typedef struct _FILE_FULL_DIR_INFORMATION
529 ULONG NextEntryOffset
;
531 LARGE_INTEGER CreationTime
;
532 LARGE_INTEGER LastAccessTime
;
533 LARGE_INTEGER LastWriteTime
;
534 LARGE_INTEGER ChangeTime
;
535 LARGE_INTEGER EndOfFile
;
536 LARGE_INTEGER AllocationSize
;
537 ULONG FileAttributes
;
538 ULONG FileNameLength
;
541 } FILE_FULL_DIR_INFORMATION
, *PFILE_FULL_DIR_INFORMATION
;
543 typedef struct _FILE_BOTH_DIR_INFORMATION
545 ULONG NextEntryOffset
;
547 LARGE_INTEGER CreationTime
;
548 LARGE_INTEGER LastAccessTime
;
549 LARGE_INTEGER LastWriteTime
;
550 LARGE_INTEGER ChangeTime
;
551 LARGE_INTEGER EndOfFile
;
552 LARGE_INTEGER AllocationSize
;
553 ULONG FileAttributes
;
554 ULONG FileNameLength
;
556 CCHAR ShortNameLength
;
559 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
561 typedef struct _FILE_COMPLETION_INFORMATION
565 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
567 typedef struct _FILE_LINK_INFORMATION
569 BOOLEAN ReplaceIfExists
;
570 HANDLE RootDirectory
;
571 ULONG FileNameLength
;
573 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
575 typedef struct _FILE_NAME_INFORMATION
577 ULONG FileNameLength
;
579 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
581 typedef struct _FILE_ALLOCATION_INFORMATION
583 LARGE_INTEGER AllocationSize
;
584 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
586 typedef struct _FILE_END_OF_FILE_INFORMATION
588 LARGE_INTEGER EndOfFile
;
589 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
591 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
593 LARGE_INTEGER ValidDataLength
;
594 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
596 typedef struct _FILE_DIRECTORY_INFORMATION
598 ULONG NextEntryOffset
;
600 LARGE_INTEGER CreationTime
;
601 LARGE_INTEGER LastAccessTime
;
602 LARGE_INTEGER LastWriteTime
;
603 LARGE_INTEGER ChangeTime
;
604 LARGE_INTEGER EndOfFile
;
605 LARGE_INTEGER AllocationSize
;
606 ULONG FileAttributes
;
607 ULONG FileNameLength
;
609 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
611 typedef struct _FILE_IO_COMPLETION_INFORMATION
615 IO_STATUS_BLOCK IoStatusBlock
;
616 } FILE_IO_COMPLETION_INFORMATION
, *PFILE_IO_COMPLETION_INFORMATION
;
618 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
620 ULONG FileAttributes
;
622 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
624 typedef struct _FILE_TRACKING_INFORMATION
626 HANDLE DestinationFile
;
627 ULONG ObjectInformationLength
;
628 CHAR ObjectInformation
[1];
629 } FILE_TRACKING_INFORMATION
, *PFILE_TRACKING_INFORMATION
;
632 // File System Information structures for NtQueryInformationFile
634 typedef struct _FILE_FS_DEVICE_INFORMATION
636 DEVICE_TYPE DeviceType
;
637 ULONG Characteristics
;
638 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
640 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
642 ULONG FileSystemAttributes
;
643 ULONG MaximumComponentNameLength
;
644 ULONG FileSystemNameLength
;
645 WCHAR FileSystemName
[1];
646 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
648 typedef struct _FILE_FS_SIZE_INFORMATION
650 LARGE_INTEGER TotalAllocationUnits
;
651 LARGE_INTEGER AvailableAllocationUnits
;
652 ULONG SectorsPerAllocationUnit
;
653 ULONG BytesPerSector
;
654 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
656 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
658 LARGE_INTEGER TotalAllocationUnits
;
659 LARGE_INTEGER CallerAvailableAllocationUnits
;
660 LARGE_INTEGER ActualAvailableAllocationUnits
;
661 ULONG SectorsPerAllocationUnit
;
662 ULONG BytesPerSector
;
663 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
665 typedef struct _FILE_FS_LABEL_INFORMATION
667 ULONG VolumeLabelLength
;
668 WCHAR VolumeLabel
[1];
669 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
671 typedef struct _FILE_FS_VOLUME_INFORMATION
673 LARGE_INTEGER VolumeCreationTime
;
674 ULONG VolumeSerialNumber
;
675 ULONG VolumeLabelLength
;
676 BOOLEAN SupportsObjects
;
677 WCHAR VolumeLabel
[1];
678 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
681 // Pipe Structures for IOCTL_PIPE_XXX
683 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
685 LARGE_INTEGER Timeout
;
687 BOOLEAN TimeoutSpecified
;
689 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
691 typedef struct _FILE_PIPE_PEEK_BUFFER
693 ULONG NamedPipeState
;
694 ULONG ReadDataAvailable
;
695 ULONG NumberOfMessages
;
698 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
701 // I/O Error Log Structures
703 typedef struct _IO_ERROR_LOG_PACKET
705 UCHAR MajorFunctionCode
;
708 USHORT NumberOfStrings
;
710 USHORT EventCategory
;
712 ULONG UniqueErrorValue
;
713 NTSTATUS FinalStatus
;
714 ULONG SequenceNumber
;
716 LARGE_INTEGER DeviceOffset
;
718 }IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
720 typedef struct _IO_ERROR_LOG_MESSAGE
724 USHORT DriverNameLength
;
725 LARGE_INTEGER TimeStamp
;
726 ULONG DriverNameOffset
;
727 IO_ERROR_LOG_PACKET EntryData
;
728 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
733 // I/O Completion Information structures
735 typedef struct _IO_COMPLETION_BASIC_INFORMATION
738 } IO_COMPLETION_BASIC_INFORMATION
, *PIO_COMPLETION_BASIC_INFORMATION
;
741 // Parameters for NtCreateMailslotFile/NtCreateNamedPipeFile
743 typedef struct _MAILSLOT_CREATE_PARAMETERS
746 ULONG MaximumMessageSize
;
747 LARGE_INTEGER ReadTimeout
;
748 BOOLEAN TimeoutSpecified
;
749 } MAILSLOT_CREATE_PARAMETERS
, *PMAILSLOT_CREATE_PARAMETERS
;
751 typedef struct _NAMED_PIPE_CREATE_PARAMETERS
755 ULONG CompletionMode
;
756 ULONG MaximumInstances
;
759 LARGE_INTEGER DefaultTimeout
;
760 BOOLEAN TimeoutSpecified
;
761 } NAMED_PIPE_CREATE_PARAMETERS
, *PNAMED_PIPE_CREATE_PARAMETERS
;
763 #ifndef NTOS_MODE_USER
768 typedef struct _IO_TIMER
772 LIST_ENTRY IoTimerList
;
773 PIO_TIMER_ROUTINE TimerRoutine
;
775 PDEVICE_OBJECT DeviceObject
;
781 typedef struct _IO_CLIENT_EXTENSION
783 struct _IO_CLIENT_EXTENSION
*NextExtension
;
784 PVOID ClientIdentificationAddress
;
785 } IO_CLIENT_EXTENSION
, *PIO_CLIENT_EXTENSION
;
790 typedef struct _DEVICE_NODE
792 struct _DEVICE_NODE
*Sibling
;
793 struct _DEVICE_NODE
*Child
;
794 struct _DEVICE_NODE
*Parent
;
795 struct _DEVICE_NODE
*LastChild
;
797 struct _PO_DEVICE_NOTIFY
*Notify
;
798 PO_IRP_MANAGER PoIrpManager
;
799 PNP_DEVNODE_STATE State
;
800 PNP_DEVNODE_STATE PreviousState
;
801 PNP_DEVNODE_STATE StateHistory
[20];
802 ULONG StateHistoryEntry
;
803 NTSTATUS CompletionStatus
;
808 PDEVICE_OBJECT PhysicalDeviceObject
;
809 PCM_RESOURCE_LIST ResourceList
;
810 PCM_RESOURCE_LIST ResourceListTranslated
;
811 UNICODE_STRING InstancePath
;
812 UNICODE_STRING ServiceName
;
813 PDEVICE_OBJECT DuplicatePDO
;
814 PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements
;
815 INTERFACE_TYPE InterfaceType
;
817 INTERFACE_TYPE ChildInterfaceType
;
818 ULONG ChildBusNumber
;
819 USHORT ChildBusTypeIndex
;
821 UCHAR HardwareRemovalPolicy
;
822 LIST_ENTRY TargetDeviceNotify
;
823 LIST_ENTRY DeviceArbiterList
;
824 LIST_ENTRY DeviceTranslatorList
;
825 USHORT NoTranslatorMask
;
826 USHORT QueryTranslatorMask
;
827 USHORT NoArbiterMask
;
828 USHORT QueryArbiterMask
;
831 struct _DEVICE_NODE
*LegacyDeviceNode
;
832 PDEVICE_RELATIONS PendingDeviceRelations
;
836 struct _DEVICE_NODE
*NextResourceDeviceNode
;
838 PCM_RESOURCE_LIST BootResources
;
839 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
840 PCM_RESOURCE_LIST BootResourcesTranslated
;
842 ULONG CapabilityFlags
;
845 PROFILE_STATUS DockStatus
;
846 LIST_ENTRY ListEntry
;
849 ULONG DisableableDepends
;
850 LIST_ENTRY PendedSetInterfaceState
;
851 LIST_ENTRY LegacyBusListEntry
;
852 ULONG DriverUnloadRetryCount
;
853 struct _DEVICE_NODE
*PreviousParent
;
854 ULONG DeletedChidren
;
855 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
858 } DEVICE_NODE
, *PDEVICE_NODE
;
861 // Resource Aribtrer Entry
863 typedef struct _PI_RESOURCE_ARBITER_ENTRY
865 LIST_ENTRY DeviceArbiterList
;
867 PARBITER_INTERFACE ArbiterInterface
;
869 LIST_ENTRY ResourceList
;
870 LIST_ENTRY BestResourceList
;
871 LIST_ENTRY BestConfig
;
872 LIST_ENTRY ActiveArbiterList
;
874 UCHAR ResourcesChanged
;
875 } PI_RESOURCE_ARBITER_ENTRY
, *PPI_RESOURCE_ARBITER_ENTRY
;
878 // Extended Device Object Extension Structure
880 typedef struct _EXTENDED_DEVOBJ_EXTENSION
884 PDEVICE_OBJECT DeviceObject
;
886 struct _DEVICE_OBJECT_POWER_EXTENSION
*Dope
;
887 ULONG ExtensionFlags
;
888 struct _DEVICE_NODE
*DeviceNode
;
889 PDEVICE_OBJECT AttachedTo
;
894 } EXTENDED_DEVOBJ_EXTENSION
, *PEXTENDED_DEVOBJ_EXTENSION
;
897 // Extended Driver Object Extension Structure
899 typedef struct _EXTENDED_DRIVER_EXTENSION
901 struct _DRIVER_OBJECT
*DriverObject
;
902 PDRIVER_ADD_DEVICE AddDevice
;
904 UNICODE_STRING ServiceKeyName
;
905 PIO_CLIENT_EXTENSION ClientDriverExtension
;
906 PFS_FILTER_CALLBACKS FsFilterCallbacks
;
907 } EXTENDED_DRIVER_EXTENSION
, *PEXTENDED_DRIVER_EXTENSION
;
910 // Extended I/O Stack Location Structure
912 #if !defined(_ALPHA_)
913 #include <pshpack4.h>
915 typedef struct _EXTENDED_IO_STACK_LOCATION
925 PIO_SECURITY_CONTEXT SecurityContext
;
927 USHORT FileAttributes
;
933 PIO_SECURITY_CONTEXT SecurityContext
;
937 struct _NAMED_PIPE_CREATE_PARAMETERS
*Parameters
;
941 PIO_SECURITY_CONTEXT SecurityContext
;
945 struct _MAILSLOT_CREATE_PARAMETERS
*Parameters
;
951 LARGE_INTEGER ByteOffset
;
957 LARGE_INTEGER ByteOffset
;
962 PUNICODE_STRING FileName
;
963 FILE_INFORMATION_CLASS FileInformationClass
;
969 ULONG CompletionFilter
;
974 FILE_INFORMATION_CLASS FileInformationClass
;
979 FILE_INFORMATION_CLASS FileInformationClass
;
980 PFILE_OBJECT FileObject
;
985 BOOLEAN ReplaceIfExists
;
1006 FS_INFORMATION_CLASS FsInformationClass
;
1011 FS_INFORMATION_CLASS FsInformationClass
;
1015 ULONG OutputBufferLength
;
1016 ULONG InputBufferLength
;
1017 ULONG FsControlCode
;
1018 PVOID Type3InputBuffer
;
1019 } FileSystemControl
;
1022 PLARGE_INTEGER Length
;
1024 LARGE_INTEGER ByteOffset
;
1028 ULONG OutputBufferLength
;
1029 ULONG InputBufferLength
;
1030 ULONG IoControlCode
;
1031 PVOID Type3InputBuffer
;
1035 SECURITY_INFORMATION SecurityInformation
;
1036 ULONG POINTER_ALIGNMENT Length
;
1040 SECURITY_INFORMATION SecurityInformation
;
1041 PSECURITY_DESCRIPTOR SecurityDescriptor
;
1046 PDEVICE_OBJECT DeviceObject
;
1051 PDEVICE_OBJECT DeviceObject
;
1055 struct _SCSI_REQUEST_BLOCK
*Srb
;
1061 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
1062 ULONG SidListLength
;
1070 DEVICE_RELATION_TYPE Type
;
1071 } QueryDeviceRelations
;
1074 CONST GUID
*InterfaceType
;
1077 PINTERFACE Interface
;
1078 PVOID InterfaceSpecificData
;
1082 PDEVICE_CAPABILITIES Capabilities
;
1083 } DeviceCapabilities
;
1086 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
1087 } FilterResourceRequirements
;
1101 BUS_QUERY_ID_TYPE IdType
;
1105 DEVICE_TEXT_TYPE DeviceTextType
;
1111 BOOLEAN Reserved
[3];
1112 DEVICE_USAGE_NOTIFICATION_TYPE Type
;
1113 } UsageNotification
;
1116 SYSTEM_POWER_STATE PowerState
;
1120 PPOWER_SEQUENCE PowerSequence
;
1124 ULONG SystemContext
;
1125 POWER_STATE_TYPE Type
;
1127 POWER_ACTION ShutdownType
;
1131 PCM_RESOURCE_LIST AllocatedResources
;
1132 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
1136 ULONG_PTR ProviderId
;
1149 PDEVICE_OBJECT DeviceObject
;
1150 PFILE_OBJECT FileObject
;
1151 PIO_COMPLETION_ROUTINE CompletionRoutine
;
1153 } EXTENDED_IO_STACK_LOCATION
, *PEXTENDED_IO_STACK_LOCATION
;
1154 #if !defined(_ALPHA_)
1155 #include <poppack.h>
1160 // Firmware Boot File Path
1162 typedef struct _FILE_PATH
1168 } FILE_PATH
, *PFILE_PATH
;
1171 // Firmware Boot Options
1173 typedef struct _BOOT_OPTIONS
1178 ULONG CurrentBootEntryId
;
1179 ULONG NextBootEntryId
;
1180 WCHAR HeadlessRedirection
[1];
1181 } BOOT_OPTIONS
, *PBOOT_OPTIONS
;
1184 // Firmware Boot Entry
1186 typedef struct _BOOT_ENTRY
1192 ULONG FriendlyNameOffset
;
1193 ULONG BootFilePathOffset
;
1194 ULONG OsOptionsLength
;
1196 } BOOT_ENTRY
, *PBOOT_ENTRY
;
1199 // Firmware Driver Entry
1201 typedef struct _EFI_DRIVER_ENTRY
1207 ULONG FriendlyNameOffset
;
1208 ULONG DriverFilePathOffset
;
1209 } EFI_DRIVER_ENTRY
, *PEFI_DRIVER_ENTRY
;
1211 #ifdef NTOS_MODE_USER
1214 // APC Callback for NtCreateFile
1217 (NTAPI
*PIO_APC_ROUTINE
)(
1218 _In_ PVOID ApcContext
,
1219 _In_ PIO_STATUS_BLOCK IoStatusBlock
,
1220 _In_ ULONG Reserved
);
1223 // Mailslot IOCTL Codes
1225 #define FSCTL_MAILSLOT_PEEK \
1226 CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
1231 #define FSCTL_PIPE_ASSIGN_EVENT \
1232 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
1233 #define FSCTL_PIPE_DISCONNECT \
1234 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
1235 #define FSCTL_PIPE_LISTEN \
1236 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
1237 #define FSCTL_PIPE_PEEK \
1238 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
1239 #define FSCTL_PIPE_QUERY_EVENT \
1240 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
1241 #define FSCTL_PIPE_TRANSCEIVE \
1242 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1243 #define FSCTL_PIPE_WAIT \
1244 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
1245 #define FSCTL_PIPE_IMPERSONATE \
1246 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
1247 #define FSCTL_PIPE_SET_CLIENT_PROCESS \
1248 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
1249 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS \
1250 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
1251 #define FSCTL_PIPE_INTERNAL_READ \
1252 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
1253 #define FSCTL_PIPE_INTERNAL_WRITE \
1254 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
1255 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE \
1256 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1257 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW \
1258 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
1263 #define IOCTL_TAPE_ERASE \
1264 CTL_CODE(FILE_DEVICE_TAPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1265 #define IOCTL_TAPE_PREPARE \
1266 CTL_CODE(FILE_DEVICE_TAPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS)
1267 #define IOCTL_TAPE_WRITE_MARKS \
1268 CTL_CODE(FILE_DEVICE_TAPE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1269 #define IOCTL_TAPE_GET_POSITION \
1270 CTL_CODE(FILE_DEVICE_TAPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS)
1271 #define IOCTL_TAPE_SET_POSITION \
1272 CTL_CODE(FILE_DEVICE_TAPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS)
1273 #define IOCTL_TAPE_GET_DRIVE_PARAMS \
1274 CTL_CODE(FILE_DEVICE_TAPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS)
1275 #define IOCTL_TAPE_SET_DRIVE_PARAMS \
1276 CTL_CODE(FILE_DEVICE_TAPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1277 #define IOCTL_TAPE_GET_MEDIA_PARAMS \
1278 CTL_CODE(FILE_DEVICE_TAPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS)
1279 #define IOCTL_TAPE_SET_MEDIA_PARAMS \
1280 CTL_CODE(FILE_DEVICE_TAPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
1281 #define IOCTL_TAPE_GET_STATUS \
1282 CTL_CODE(FILE_DEVICE_TAPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS)
1283 #define IOCTL_TAPE_CREATE_PARTITION \
1284 CTL_CODE(FILE_DEVICE_TAPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1286 #endif // NTOS_MODE_USER