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_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 // Dock Profile Status
328 typedef enum _PROFILE_STATUS
334 DOCK_EJECTIRP_COMPLETED
335 } PROFILE_STATUS
, *PPROFILE_STATUS
;
338 // Device Node States
340 typedef enum _PNP_DEVNODE_STATE
342 DeviceNodeUnspecified
= 0x300,
343 DeviceNodeUninitialized
= 0x301,
344 DeviceNodeInitialized
= 0x302,
345 DeviceNodeDriversAdded
= 0x303,
346 DeviceNodeResourcesAssigned
= 0x304,
347 DeviceNodeStartPending
= 0x305,
348 DeviceNodeStartCompletion
= 0x306,
349 DeviceNodeStartPostWork
= 0x307,
350 DeviceNodeStarted
= 0x308,
351 DeviceNodeQueryStopped
= 0x309,
352 DeviceNodeStopped
= 0x30a,
353 DeviceNodeRestartCompletion
= 0x30b,
354 DeviceNodeEnumeratePending
= 0x30c,
355 DeviceNodeEnumerateCompletion
= 0x30d,
356 DeviceNodeAwaitingQueuedDeletion
= 0x30e,
357 DeviceNodeAwaitingQueuedRemoval
= 0x30f,
358 DeviceNodeQueryRemoved
= 0x310,
359 DeviceNodeRemovePendingCloses
= 0x311,
360 DeviceNodeRemoved
= 0x312,
361 DeviceNodeDeletePendingCloses
= 0x313,
362 DeviceNodeDeleted
= 0x314,
363 MaxDeviceNodeState
= 0x315,
366 #ifdef NTOS_MODE_USER
371 typedef struct _IO_STATUS_BLOCK
378 ULONG_PTR Information
;
379 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
382 // File Information structures for NtQueryInformationFile
384 typedef struct _FILE_BASIC_INFORMATION
386 LARGE_INTEGER CreationTime
;
387 LARGE_INTEGER LastAccessTime
;
388 LARGE_INTEGER LastWriteTime
;
389 LARGE_INTEGER ChangeTime
;
390 ULONG FileAttributes
;
391 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
393 typedef struct _FILE_STANDARD_INFORMATION
395 LARGE_INTEGER AllocationSize
;
396 LARGE_INTEGER EndOfFile
;
398 BOOLEAN DeletePending
;
400 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
402 typedef struct _FILE_STREAM_INFORMATION
404 ULONG NextEntryOffset
;
405 ULONG StreamNameLength
;
406 LARGE_INTEGER StreamSize
;
407 LARGE_INTEGER StreamAllocationSize
;
409 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
411 typedef struct _FILE_NETWORK_OPEN_INFORMATION
413 LARGE_INTEGER CreationTime
;
414 LARGE_INTEGER LastAccessTime
;
415 LARGE_INTEGER LastWriteTime
;
416 LARGE_INTEGER ChangeTime
;
417 LARGE_INTEGER AllocationSize
;
418 LARGE_INTEGER EndOfFile
;
419 ULONG FileAttributes
;
420 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
422 typedef struct _FILE_EA_INFORMATION
425 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
427 typedef struct _FILE_COMPRESSION_INFORMATION
429 LARGE_INTEGER CompressedFileSize
;
430 USHORT CompressionFormat
;
431 UCHAR CompressionUnitShift
;
435 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
437 typedef struct _FILE_POSITION_INFORMATION
439 LARGE_INTEGER CurrentByteOffset
;
440 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
442 typedef struct _FILE_DISPOSITION_INFORMATION
445 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
447 typedef struct _FILE_FULL_EA_INFORMATION
449 ULONG NextEntryOffset
;
452 USHORT EaValueLength
;
454 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
456 typedef struct _FILE_QUOTA_INFORMATION
458 ULONG NextEntryOffset
;
460 LARGE_INTEGER ChangeTime
;
461 LARGE_INTEGER QuotaUsed
;
462 LARGE_INTEGER QuotaThreshold
;
463 LARGE_INTEGER QuotaLimit
;
465 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
467 typedef struct _FILE_INTERNAL_INFORMATION
469 LARGE_INTEGER IndexNumber
;
470 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
472 typedef struct _FILE_RENAME_INFORMATION
474 BOOLEAN ReplaceIfExists
;
475 HANDLE RootDirectory
;
476 ULONG FileNameLength
;
478 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
480 typedef struct _FILE_PIPE_INFORMATION
483 ULONG CompletionMode
;
484 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
486 typedef struct _FILE_PIPE_LOCAL_INFORMATION
489 ULONG NamedPipeConfiguration
;
490 ULONG MaximumInstances
;
491 ULONG CurrentInstances
;
493 ULONG ReadDataAvailable
;
495 ULONG WriteQuotaAvailable
;
496 ULONG NamedPipeState
;
498 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
500 typedef struct _FILE_PIPE_REMOTE_INFORMATION
502 LARGE_INTEGER CollectDataTime
;
503 ULONG MaximumCollectionCount
;
504 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
506 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
508 ULONG MaximumMessageSize
;
510 ULONG NextMessageSize
;
511 ULONG MessagesAvailable
;
512 LARGE_INTEGER ReadTimeout
;
513 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
515 typedef struct _FILE_MAILSLOT_SET_INFORMATION
517 PLARGE_INTEGER ReadTimeout
;
518 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
520 typedef struct _FILE_BOTH_DIR_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 CCHAR ShortNameLength
;
536 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
538 typedef struct _FILE_COMPLETION_INFORMATION
542 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
544 typedef struct _FILE_LINK_INFORMATION
546 BOOLEAN ReplaceIfExists
;
547 HANDLE RootDirectory
;
548 ULONG FileNameLength
;
550 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
552 typedef struct _FILE_NAME_INFORMATION
554 ULONG FileNameLength
;
556 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
558 typedef struct _FILE_ALLOCATION_INFORMATION
560 LARGE_INTEGER AllocationSize
;
561 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
563 typedef struct _FILE_END_OF_FILE_INFORMATION
565 LARGE_INTEGER EndOfFile
;
566 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
568 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
570 LARGE_INTEGER ValidDataLength
;
571 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
573 typedef struct _FILE_DIRECTORY_INFORMATION
575 ULONG NextEntryOffset
;
577 LARGE_INTEGER CreationTime
;
578 LARGE_INTEGER LastAccessTime
;
579 LARGE_INTEGER LastWriteTime
;
580 LARGE_INTEGER ChangeTime
;
581 LARGE_INTEGER EndOfFile
;
582 LARGE_INTEGER AllocationSize
;
583 ULONG FileAttributes
;
584 ULONG FileNameLength
;
586 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
588 typedef struct _FILE_IO_COMPLETION_INFORMATION
592 IO_STATUS_BLOCK IoStatusBlock
;
593 } FILE_IO_COMPLETION_INFORMATION
, *PFILE_IO_COMPLETION_INFORMATION
;
596 // File System Information structures for NtQueryInformationFile
598 typedef struct _FILE_FS_DEVICE_INFORMATION
600 DEVICE_TYPE DeviceType
;
601 ULONG Characteristics
;
602 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
604 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
606 ULONG FileSystemAttributes
;
607 ULONG MaximumComponentNameLength
;
608 ULONG FileSystemNameLength
;
609 WCHAR FileSystemName
[1];
610 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
612 typedef struct _FILE_FS_SIZE_INFORMATION
614 LARGE_INTEGER TotalAllocationUnits
;
615 LARGE_INTEGER AvailableAllocationUnits
;
616 ULONG SectorsPerAllocationUnit
;
617 ULONG BytesPerSector
;
618 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
620 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
622 LARGE_INTEGER TotalAllocationUnits
;
623 LARGE_INTEGER CallerAvailableAllocationUnits
;
624 LARGE_INTEGER ActualAvailableAllocationUnits
;
625 ULONG SectorsPerAllocationUnit
;
626 ULONG BytesPerSector
;
627 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
629 typedef struct _FILE_FS_LABEL_INFORMATION
631 ULONG VolumeLabelLength
;
632 WCHAR VolumeLabel
[1];
633 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
635 typedef struct _FILE_FS_VOLUME_INFORMATION
637 LARGE_INTEGER VolumeCreationTime
;
638 ULONG VolumeSerialNumber
;
639 ULONG VolumeLabelLength
;
640 BOOLEAN SupportsObjects
;
641 WCHAR VolumeLabel
[1];
642 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
645 // Pipe Structures for IOCTL_PIPE_XXX
647 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
649 LARGE_INTEGER Timeout
;
651 BOOLEAN TimeoutSpecified
;
653 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
655 typedef struct _FILE_PIPE_PEEK_BUFFER
657 ULONG NamedPipeState
;
658 ULONG ReadDataAvailable
;
659 ULONG NumberOfMessages
;
662 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
665 // I/O Error Log Structures
667 typedef struct _IO_ERROR_LOG_PACKET
669 UCHAR MajorFunctionCode
;
672 USHORT NumberOfStrings
;
674 USHORT EventCategory
;
676 ULONG UniqueErrorValue
;
677 NTSTATUS FinalStatus
;
678 ULONG SequenceNumber
;
680 LARGE_INTEGER DeviceOffset
;
682 }IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
684 typedef struct _IO_ERROR_LOG_MESSAGE
688 USHORT DriverNameLength
;
689 LARGE_INTEGER TimeStamp
;
690 ULONG DriverNameOffset
;
691 IO_ERROR_LOG_PACKET EntryData
;
692 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
697 // I/O Completion Information structures
699 typedef struct _IO_COMPLETION_BASIC_INFORMATION
702 } IO_COMPLETION_BASIC_INFORMATION
, *PIO_COMPLETION_BASIC_INFORMATION
;
705 // Parameters for NtCreateMailslotFile/NtCreateNamedPipeFile
707 typedef struct _MAILSLOT_CREATE_PARAMETERS
710 ULONG MaximumMessageSize
;
711 LARGE_INTEGER ReadTimeout
;
712 BOOLEAN TimeoutSpecified
;
713 } MAILSLOT_CREATE_PARAMETERS
, *PMAILSLOT_CREATE_PARAMETERS
;
715 typedef struct _NAMED_PIPE_CREATE_PARAMETERS
719 ULONG CompletionMode
;
720 ULONG MaximumInstances
;
723 LARGE_INTEGER DefaultTimeout
;
724 BOOLEAN TimeoutSpecified
;
725 } NAMED_PIPE_CREATE_PARAMETERS
, *PNAMED_PIPE_CREATE_PARAMETERS
;
727 #ifndef NTOS_MODE_USER
732 typedef struct _IO_TIMER
736 LIST_ENTRY IoTimerList
;
737 PIO_TIMER_ROUTINE TimerRoutine
;
739 PDEVICE_OBJECT DeviceObject
;
745 typedef struct _IO_CLIENT_EXTENSION
747 struct _IO_CLIENT_EXTENSION
*NextExtension
;
748 PVOID ClientIdentificationAddress
;
749 } IO_CLIENT_EXTENSION
, *PIO_CLIENT_EXTENSION
;
754 typedef struct _DEVICE_NODE
756 struct _DEVICE_NODE
*Sibling
;
757 struct _DEVICE_NODE
*Child
;
758 struct _DEVICE_NODE
*Parent
;
759 struct _DEVICE_NODE
*LastChild
;
761 struct _PO_DEVICE_NOTIFY
*Notify
;
762 PO_IRP_MANAGER PoIrpManager
;
763 PNP_DEVNODE_STATE State
;
764 PNP_DEVNODE_STATE PreviousState
;
765 PNP_DEVNODE_STATE StateHistory
[20];
766 ULONG StateHistoryEntry
;
767 NTSTATUS CompletionStatus
;
772 PDEVICE_OBJECT PhysicalDeviceObject
;
773 PCM_RESOURCE_LIST ResourceList
;
774 PCM_RESOURCE_LIST ResourceListTranslated
;
775 UNICODE_STRING InstancePath
;
776 UNICODE_STRING ServiceName
;
777 PDEVICE_OBJECT DuplicatePDO
;
778 PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements
;
779 INTERFACE_TYPE InterfaceType
;
781 INTERFACE_TYPE ChildInterfaceType
;
782 ULONG ChildBusNumber
;
783 USHORT ChildBusTypeIndex
;
785 UCHAR HardwareRemovalPolicy
;
786 LIST_ENTRY TargetDeviceNotify
;
787 LIST_ENTRY DeviceArbiterList
;
788 LIST_ENTRY DeviceTranslatorList
;
789 USHORT NoTranslatorMask
;
790 USHORT QueryTranslatorMask
;
791 USHORT NoArbiterMask
;
792 USHORT QueryArbiterMask
;
795 struct _DEVICE_NODE
*LegacyDeviceNode
;
796 PDEVICE_RELATIONS PendingDeviceRelations
;
800 struct _DEVICE_NODE
*NextResourceDeviceNode
;
802 PCM_RESOURCE_LIST BootResources
;
803 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
804 PCM_RESOURCE_LIST BootResourcesTranslated
;
806 ULONG CapabilityFlags
;
809 PROFILE_STATUS DockStatus
;
810 LIST_ENTRY ListEntry
;
813 ULONG DisableableDepends
;
814 LIST_ENTRY PendedSetInterfaceState
;
815 LIST_ENTRY LegacyBusListEntry
;
816 ULONG DriverUnloadRetryCount
;
817 struct _DEVICE_NODE
*PreviousParent
;
818 ULONG DeletedChidren
;
819 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
822 } DEVICE_NODE
, *PDEVICE_NODE
;
825 // Resource Aribtrer Entry
827 typedef struct _PI_RESOURCE_ARBITER_ENTRY
829 LIST_ENTRY DeviceArbiterList
;
831 PARBITER_INTERFACE ArbiterInterface
;
833 LIST_ENTRY ResourceList
;
834 LIST_ENTRY BestResourceList
;
835 LIST_ENTRY BestConfig
;
836 LIST_ENTRY ActiveArbiterList
;
838 UCHAR ResourcesChanged
;
839 } PI_RESOURCE_ARBITER_ENTRY
, *PPI_RESOURCE_ARBITER_ENTRY
;
842 // Extended Device Object Extension Structure
844 typedef struct _EXTENDED_DEVOBJ_EXTENSION
848 PDEVICE_OBJECT DeviceObject
;
850 struct DEVICE_OBJECT_POWER_EXTENSION
*Dope
;
851 ULONG ExtensionFlags
;
852 struct _DEVICE_NODE
*DeviceNode
;
853 PDEVICE_OBJECT AttachedTo
;
858 } EXTENDED_DEVOBJ_EXTENSION
, *PEXTENDED_DEVOBJ_EXTENSION
;
861 // Extended Driver Object Extension Structure
863 typedef struct _EXTENDED_DRIVER_EXTENSION
865 struct _DRIVER_OBJECT
*DriverObject
;
866 PDRIVER_ADD_DEVICE AddDevice
;
868 UNICODE_STRING ServiceKeyName
;
869 PIO_CLIENT_EXTENSION ClientDriverExtension
;
870 PFS_FILTER_CALLBACKS FsFilterCallbacks
;
871 } EXTENDED_DRIVER_EXTENSION
, *PEXTENDED_DRIVER_EXTENSION
;
874 // Extended I/O Stack Location Structure
876 #if !defined(_ALPHA_)
877 #include <pshpack4.h>
879 typedef struct _EXTENDED_IO_STACK_LOCATION
889 PIO_SECURITY_CONTEXT SecurityContext
;
891 USHORT FileAttributes
;
897 PIO_SECURITY_CONTEXT SecurityContext
;
901 struct _NAMED_PIPE_CREATE_PARAMETERS
*Parameters
;
905 PIO_SECURITY_CONTEXT SecurityContext
;
909 struct _MAILSLOT_CREATE_PARAMETERS
*Parameters
;
915 LARGE_INTEGER ByteOffset
;
921 LARGE_INTEGER ByteOffset
;
926 PUNICODE_STRING FileName
;
927 FILE_INFORMATION_CLASS FileInformationClass
;
933 ULONG CompletionFilter
;
938 FILE_INFORMATION_CLASS FileInformationClass
;
943 FILE_INFORMATION_CLASS FileInformationClass
;
944 PFILE_OBJECT FileObject
;
949 BOOLEAN ReplaceIfExists
;
970 FS_INFORMATION_CLASS FsInformationClass
;
975 FS_INFORMATION_CLASS FsInformationClass
;
979 ULONG OutputBufferLength
;
980 ULONG InputBufferLength
;
982 PVOID Type3InputBuffer
;
986 PLARGE_INTEGER Length
;
988 LARGE_INTEGER ByteOffset
;
992 ULONG OutputBufferLength
;
993 ULONG InputBufferLength
;
995 PVOID Type3InputBuffer
;
999 SECURITY_INFORMATION SecurityInformation
;
1000 ULONG POINTER_ALIGNMENT Length
;
1004 SECURITY_INFORMATION SecurityInformation
;
1005 PSECURITY_DESCRIPTOR SecurityDescriptor
;
1010 PDEVICE_OBJECT DeviceObject
;
1015 PDEVICE_OBJECT DeviceObject
;
1019 struct _SCSI_REQUEST_BLOCK
*Srb
;
1025 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
1026 ULONG SidListLength
;
1034 DEVICE_RELATION_TYPE Type
;
1035 } QueryDeviceRelations
;
1038 CONST GUID
*InterfaceType
;
1041 PINTERFACE Interface
;
1042 PVOID InterfaceSpecificData
;
1046 PDEVICE_CAPABILITIES Capabilities
;
1047 } DeviceCapabilities
;
1050 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
1051 } FilterResourceRequirements
;
1065 BUS_QUERY_ID_TYPE IdType
;
1069 DEVICE_TEXT_TYPE DeviceTextType
;
1075 BOOLEAN Reserved
[3];
1076 DEVICE_USAGE_NOTIFICATION_TYPE Type
;
1077 } UsageNotification
;
1080 SYSTEM_POWER_STATE PowerState
;
1084 PPOWER_SEQUENCE PowerSequence
;
1088 ULONG SystemContext
;
1089 POWER_STATE_TYPE Type
;
1091 POWER_ACTION ShutdownType
;
1095 PCM_RESOURCE_LIST AllocatedResources
;
1096 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
1100 ULONG_PTR ProviderId
;
1113 PDEVICE_OBJECT DeviceObject
;
1114 PFILE_OBJECT FileObject
;
1115 PIO_COMPLETION_ROUTINE CompletionRoutine
;
1117 } EXTENDED_IO_STACK_LOCATION
, *PEXTENDED_IO_STACK_LOCATION
;
1118 #if !defined(_ALPHA_)
1119 #include <poppack.h>
1124 // Firmware Boot File Path
1126 typedef struct _FILE_PATH
1132 } FILE_PATH
, *PFILE_PATH
;
1135 // Firmware Boot Options
1137 typedef struct _BOOT_OPTIONS
1142 ULONG CurrentBootEntryId
;
1143 ULONG NextBootEntryId
;
1144 WCHAR HeadlessRedirection
[1];
1145 } BOOT_OPTIONS
, *PBOOT_OPTIONS
;
1148 // Firmware Boot Entry
1150 typedef struct _BOOT_ENTRY
1156 ULONG FriendlyNameOffset
;
1157 ULONG BootFilePathOffset
;
1158 ULONG OsOptionsLength
;
1160 } BOOT_ENTRY
, *PBOOT_ENTRY
;
1163 // Firmware Driver Entry
1165 typedef struct _EFI_DRIVER_ENTRY
1171 ULONG FriendlyNameOffset
;
1172 ULONG DriverFilePathOffset
;
1173 } EFI_DRIVER_ENTRY
, *PEFI_DRIVER_ENTRY
;
1175 #ifdef NTOS_MODE_USER
1178 // APC Callback for NtCreateFile
1181 (NTAPI
*PIO_APC_ROUTINE
)(
1182 IN PVOID ApcContext
,
1183 IN PIO_STATUS_BLOCK IoStatusBlock
,
1187 // Mailslot IOCTL Codes
1189 #define FSCTL_MAILSLOT_PEEK \
1190 CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
1195 #define FSCTL_PIPE_ASSIGN_EVENT \
1196 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
1197 #define FSCTL_PIPE_DISCONNECT \
1198 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
1199 #define FSCTL_PIPE_LISTEN \
1200 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
1201 #define FSCTL_PIPE_PEEK \
1202 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
1203 #define FSCTL_PIPE_QUERY_EVENT \
1204 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
1205 #define FSCTL_PIPE_TRANSCEIVE \
1206 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1207 #define FSCTL_PIPE_WAIT \
1208 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
1209 #define FSCTL_PIPE_IMPERSONATE \
1210 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
1211 #define FSCTL_PIPE_SET_CLIENT_PROCESS \
1212 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
1213 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS \
1214 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
1215 #define FSCTL_PIPE_INTERNAL_READ \
1216 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
1217 #define FSCTL_PIPE_INTERNAL_WRITE \
1218 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
1219 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE \
1220 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1221 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW \
1222 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
1227 #define IOCTL_TAPE_ERASE \
1228 CTL_CODE(FILE_DEVICE_TAPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1229 #define IOCTL_TAPE_PREPARE \
1230 CTL_CODE(FILE_DEVICE_TAPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS)
1231 #define IOCTL_TAPE_WRITE_MARKS \
1232 CTL_CODE(FILE_DEVICE_TAPE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1233 #define IOCTL_TAPE_GET_POSITION \
1234 CTL_CODE(FILE_DEVICE_TAPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS)
1235 #define IOCTL_TAPE_SET_POSITION \
1236 CTL_CODE(FILE_DEVICE_TAPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS)
1237 #define IOCTL_TAPE_GET_DRIVE_PARAMS \
1238 CTL_CODE(FILE_DEVICE_TAPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS)
1239 #define IOCTL_TAPE_SET_DRIVE_PARAMS \
1240 CTL_CODE(FILE_DEVICE_TAPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1241 #define IOCTL_TAPE_GET_MEDIA_PARAMS \
1242 CTL_CODE(FILE_DEVICE_TAPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS)
1243 #define IOCTL_TAPE_SET_MEDIA_PARAMS \
1244 CTL_CODE(FILE_DEVICE_TAPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
1245 #define IOCTL_TAPE_GET_STATUS \
1246 CTL_CODE(FILE_DEVICE_TAPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS)
1247 #define IOCTL_TAPE_CREATE_PARTITION \
1248 CTL_CODE(FILE_DEVICE_TAPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1250 #endif // NTOS_MODE_USER