3 Copyright (c) Alex Ionescu. All rights reserved.
11 Type definitions for the I/O Manager.
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
27 #ifndef NTOS_MODE_USER
30 // Kernel Exported Object Types
32 extern POBJECT_TYPE NTSYSAPI IoAdapterObjectType
;
33 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType
;
34 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType
;
35 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType
;
40 // Symbolic Link Access Rights
42 #define SYMBOLIC_LINK_QUERY 0x0001
43 #define SYMBOLIC_LINK_ALL_ACCESS STANDARD_RIGHTS_REQUIRED | 0x0001
47 // NtCreateFile Result Flags
49 #define FILE_SUPERSEDED 0x00000000
50 #define FILE_OPENED 0x00000001
51 #define FILE_CREATED 0x00000002
52 #define FILE_OVERWRITTEN 0x00000003
53 #define FILE_EXISTS 0x00000004
54 #define FILE_DOES_NOT_EXIST 0x00000005
59 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
60 #define FILE_PIPE_MESSAGE_TYPE 0x00000001
61 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
62 #define FILE_PIPE_MESSAGE_MODE 0x00000001
63 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
64 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
65 #define FILE_PIPE_INBOUND 0x00000000
66 #define FILE_PIPE_OUTBOUND 0x00000001
67 #define FILE_PIPE_FULL_DUPLEX 0x00000002
68 #define FILE_PIPE_CLIENT_END 0x00000000
69 #define FILE_PIPE_SERVER_END 0x00000001
72 // NtCreateFile Attributes
74 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
75 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
78 // NtCreateFile OpenType Flags
80 #define FILE_SUPERSEDE 0x00000000
81 #define FILE_OPEN 0x00000001
82 #define FILE_CREATE 0x00000002
83 #define FILE_OPEN_IF 0x00000003
84 #define FILE_OVERWRITE 0x00000004
85 #define FILE_OVERWRITE_IF 0x00000005
86 #define FILE_MAXIMUM_DISPOSITION 0x00000005
91 #define FILE_DIRECTORY_FILE 0x00000001
92 #define FILE_WRITE_THROUGH 0x00000002
93 #define FILE_SEQUENTIAL_ONLY 0x00000004
94 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
95 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
96 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
97 #define FILE_NON_DIRECTORY_FILE 0x00000040
98 #define FILE_CREATE_TREE_CONNECTION 0x00000080
99 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
100 #define FILE_NO_EA_KNOWLEDGE 0x00000200
101 #define FILE_OPEN_FOR_RECOVERY 0x00000400
102 #define FILE_RANDOM_ACCESS 0x00000800
103 #define FILE_DELETE_ON_CLOSE 0x00001000
104 #define FILE_OPEN_BY_FILE_ID 0x00002000
105 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
106 #define FILE_NO_COMPRESSION 0x00008000
107 #define FILE_RESERVE_OPFILTER 0x00100000
108 #define FILE_OPEN_REPARSE_POINT 0x00200000
109 #define FILE_OPEN_NO_RECALL 0x00400000
110 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
113 // Device Charactertics
115 #define FILE_REMOVABLE_MEDIA 0x00000001
116 #define FILE_REMOTE_DEVICE 0x00000010
119 // Device Object Extension Flags
121 #define DOE_UNLOAD_PENDING 0x1
122 #define DOE_DELETE_PENDING 0x2
123 #define DOE_REMOVE_PENDING 0x4
124 #define DOE_REMOVE_PROCESSED 0x8
125 #define DOE_START_PENDING 0x10
128 // Device Object StartIo Flags
130 #define DOE_SIO_NO_KEY 0x20
131 #define DOE_SIO_WITH_KEY 0x40
132 #define DOE_SIO_CANCELABLE 0x80
133 #define DOE_SIO_DEFERRED 0x100
134 #define DOE_SIO_NO_CANCEL 0x200
139 #define DNF_PROCESSED 0x00000001
140 #define DNF_STARTED 0x00000002
141 #define DNF_START_FAILED 0x00000004
142 #define DNF_ENUMERATED 0x00000008
143 #define DNF_DELETED 0x00000010
144 #define DNF_MADEUP 0x00000020
145 #define DNF_START_REQUEST_PENDING 0x00000040
146 #define DNF_NO_RESOURCE_REQUIRED 0x00000080
147 #define DNF_INSUFFICIENT_RESOURCES 0x00000100
148 #define DNF_RESOURCE_ASSIGNED 0x00000200
149 #define DNF_RESOURCE_REPORTED 0x00000400
150 #define DNF_HAL_NODE 0x00000800 // ???
151 #define DNF_ADDED 0x00001000
152 #define DNF_ADD_FAILED 0x00002000
153 #define DNF_LEGACY_DRIVER 0x00004000
154 #define DNF_STOPPED 0x00008000
155 #define DNF_WILL_BE_REMOVED 0x00010000
156 #define DNF_NEED_TO_ENUM 0x00020000
157 #define DNF_NOT_CONFIGURED 0x00040000
158 #define DNF_REINSTALL 0x00080000
159 #define DNF_RESOURCE_REQUIREMENTS_NEED_FILTERED 0x00100000 // ???
160 #define DNF_DISABLED 0x00200000
161 #define DNF_RESTART_OK 0x00400000
162 #define DNF_NEED_RESTART 0x00800000
163 #define DNF_VISITED 0x01000000
164 #define DNF_ASSIGNING_RESOURCES 0x02000000
165 #define DNF_BEEING_ENUMERATED 0x04000000
166 #define DNF_NEED_ENUMERATION_ONLY 0x08000000
167 #define DNF_LOCKED 0x10000000
168 #define DNF_HAS_BOOT_CONFIG 0x20000000
169 #define DNF_BOOT_CONFIG_RESERVED 0x40000000
170 #define DNF_HAS_PROBLEM 0x80000000 // ???
173 // Device Node User Flags
175 #define DNUF_DONT_SHOW_IN_UI 0x0002
176 #define DNUF_NOT_DISABLEABLE 0x0008
179 // Undocumented WMI Registration Flags
181 #define WMIREG_FLAG_TRACE_PROVIDER 0x00010000
182 #define WMIREG_FLAG_TRACE_NOTIFY_MASK 0x00F00000
183 #define WMIREG_NOTIFY_DISK_IO 0x00100000
184 #define WMIREG_NOTIFY_TDI_IO 0x00200000
187 // I/O Completion Information Class for NtQueryIoCompletionInformation
189 typedef enum _IO_COMPLETION_INFORMATION_CLASS
191 IoCompletionBasicInformation
192 } IO_COMPLETION_INFORMATION_CLASS
;
194 #ifdef NTOS_MODE_USER
197 // Hardware Interface Type
199 typedef enum _INTERFACE_TYPE
201 InterfaceTypeUndefined
= -1,
219 }INTERFACE_TYPE
, *PINTERFACE_TYPE
;
221 typedef enum _BUS_DATA_TYPE
223 ConfigurationSpaceUndefined
= -1,
235 SgiInternalConfiguration
,
237 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
240 // File Information Classes for NtQueryInformationFile
242 typedef enum _FILE_INFORMATION_CLASS
244 FileDirectoryInformation
= 1,
245 FileFullDirectoryInformation
,
246 FileBothDirectoryInformation
,
247 FileBasicInformation
,
248 FileStandardInformation
,
249 FileInternalInformation
,
251 FileAccessInformation
,
253 FileRenameInformation
,
255 FileNamesInformation
,
256 FileDispositionInformation
,
257 FilePositionInformation
,
258 FileFullEaInformation
,
260 FileAlignmentInformation
,
262 FileAllocationInformation
,
263 FileEndOfFileInformation
,
264 FileAlternateNameInformation
,
265 FileStreamInformation
,
267 FilePipeLocalInformation
,
268 FilePipeRemoteInformation
,
269 FileMailslotQueryInformation
,
270 FileMailslotSetInformation
,
271 FileCompressionInformation
,
272 FileObjectIdInformation
,
273 FileCompletionInformation
,
274 FileMoveClusterInformation
,
275 FileQuotaInformation
,
276 FileReparsePointInformation
,
277 FileNetworkOpenInformation
,
278 FileAttributeTagInformation
,
279 FileTrackingInformation
,
280 FileIdBothDirectoryInformation
,
281 FileIdFullDirectoryInformation
,
282 FileValidDataLengthInformation
,
283 FileShortNameInformation
,
284 FileMaximumInformation
285 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
288 // File Information Classes for NtQueryInformationFileSystem
290 typedef enum _FSINFOCLASS
292 FileFsVolumeInformation
= 1,
293 FileFsLabelInformation
,
294 FileFsSizeInformation
,
295 FileFsDeviceInformation
,
296 FileFsAttributeInformation
,
297 FileFsControlInformation
,
298 FileFsFullSizeInformation
,
299 FileFsObjectIdInformation
,
300 FileFsDriverPathInformation
,
301 FileFsMaximumInformation
302 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
307 // Device Node States
309 typedef enum _PNP_DEVNODE_STATE
311 DeviceNodeUnspecified
= 0x300,
312 DeviceNodeUninitialized
= 0x301,
313 DeviceNodeInitialized
= 0x302,
314 DeviceNodeDriversAdded
= 0x303,
315 DeviceNodeResourcesAssigned
= 0x304,
316 DeviceNodeStartPending
= 0x305,
317 DeviceNodeStartCompletion
= 0x306,
318 DeviceNodeStartPostWork
= 0x307,
319 DeviceNodeStarted
= 0x308,
320 DeviceNodeQueryStopped
= 0x309,
321 DeviceNodeStopped
= 0x30a,
322 DeviceNodeRestartCompletion
= 0x30b,
323 DeviceNodeEnumeratePending
= 0x30c,
324 DeviceNodeEnumerateCompletion
= 0x30d,
325 DeviceNodeAwaitingQueuedDeletion
= 0x30e,
326 DeviceNodeAwaitingQueuedRemoval
= 0x30f,
327 DeviceNodeQueryRemoved
= 0x310,
328 DeviceNodeRemovePendingCloses
= 0x311,
329 DeviceNodeRemoved
= 0x312,
330 DeviceNodeDeletePendingCloses
= 0x313,
331 DeviceNodeDeleted
= 0x314,
332 MaxDeviceNodeState
= 0x315,
335 #ifdef NTOS_MODE_USER
338 // File Information structures for NtQueryInformationFile
340 typedef struct _FILE_BASIC_INFORMATION
342 LARGE_INTEGER CreationTime
;
343 LARGE_INTEGER LastAccessTime
;
344 LARGE_INTEGER LastWriteTime
;
345 LARGE_INTEGER ChangeTime
;
346 ULONG FileAttributes
;
347 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
349 typedef struct _FILE_STANDARD_INFORMATION
351 LARGE_INTEGER AllocationSize
;
352 LARGE_INTEGER EndOfFile
;
354 BOOLEAN DeletePending
;
356 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
358 typedef struct _FILE_STREAM_INFORMATION
360 ULONG NextEntryOffset
;
361 ULONG StreamNameLength
;
362 LARGE_INTEGER StreamSize
;
363 LARGE_INTEGER StreamAllocationSize
;
365 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
367 typedef struct _FILE_NETWORK_OPEN_INFORMATION
369 LARGE_INTEGER CreationTime
;
370 LARGE_INTEGER LastAccessTime
;
371 LARGE_INTEGER LastWriteTime
;
372 LARGE_INTEGER ChangeTime
;
373 LARGE_INTEGER AllocationSize
;
374 LARGE_INTEGER EndOfFile
;
375 ULONG FileAttributes
;
376 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
378 typedef struct _FILE_EA_INFORMATION
381 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
383 typedef struct _FILE_COMPRESSION_INFORMATION
385 LARGE_INTEGER CompressedFileSize
;
386 USHORT CompressionFormat
;
387 UCHAR CompressionUnitShift
;
391 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
393 typedef struct _FILE_POSITION_INFORMATION
395 LARGE_INTEGER CurrentByteOffset
;
396 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
398 typedef struct _FILE_DISPOSITION_INFORMATION
401 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
403 typedef struct _FILE_FULL_EA_INFORMATION
405 ULONG NextEntryOffset
;
408 USHORT EaValueLength
;
410 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
412 typedef struct _FILE_QUOTA_INFORMATION
414 ULONG NextEntryOffset
;
416 LARGE_INTEGER ChangeTime
;
417 LARGE_INTEGER QuotaUsed
;
418 LARGE_INTEGER QuotaThreshold
;
419 LARGE_INTEGER QuotaLimit
;
421 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
423 typedef struct _FILE_INTERNAL_INFORMATION
425 LARGE_INTEGER IndexNumber
;
426 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
428 typedef struct _FILE_RENAME_INFORMATION
430 BOOLEAN ReplaceIfExists
;
431 HANDLE RootDirectory
;
432 ULONG FileNameLength
;
434 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
436 typedef struct _FILE_PIPE_INFORMATION
439 ULONG CompletionMode
;
440 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
442 typedef struct _FILE_PIPE_LOCAL_INFORMATION
445 ULONG NamedPipeConfiguration
;
446 ULONG MaximumInstances
;
447 ULONG CurrentInstances
;
449 ULONG ReadDataAvailable
;
451 ULONG WriteQuotaAvailable
;
452 ULONG NamedPipeState
;
454 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
456 typedef struct _FILE_PIPE_REMOTE_INFORMATION
458 LARGE_INTEGER CollectDataTime
;
459 ULONG MaximumCollectionCount
;
460 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
462 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
464 ULONG MaximumMessageSize
;
466 ULONG NextMessageSize
;
467 ULONG MessagesAvailable
;
468 LARGE_INTEGER ReadTimeout
;
469 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
471 typedef struct _FILE_MAILSLOT_SET_INFORMATION
473 PLARGE_INTEGER ReadTimeout
;
474 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
476 typedef struct _FILE_BOTH_DIR_INFORMATION
478 ULONG NextEntryOffset
;
480 LARGE_INTEGER CreationTime
;
481 LARGE_INTEGER LastAccessTime
;
482 LARGE_INTEGER LastWriteTime
;
483 LARGE_INTEGER ChangeTime
;
484 LARGE_INTEGER EndOfFile
;
485 LARGE_INTEGER AllocationSize
;
486 ULONG FileAttributes
;
487 ULONG FileNameLength
;
489 CCHAR ShortNameLength
;
492 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
494 typedef struct _FILE_COMPLETION_INFORMATION
498 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
500 typedef struct _FILE_LINK_INFORMATION
502 BOOLEAN ReplaceIfExists
;
503 HANDLE RootDirectory
;
504 ULONG FileNameLength
;
506 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
508 typedef struct _FILE_NAME_INFORMATION
510 ULONG FileNameLength
;
512 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
514 typedef struct _FILE_ALLOCATION_INFORMATION
516 LARGE_INTEGER AllocationSize
;
517 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
519 typedef struct _FILE_END_OF_FILE_INFORMATION
521 LARGE_INTEGER EndOfFile
;
522 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
524 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
526 LARGE_INTEGER ValidDataLength
;
527 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
529 typedef struct _FILE_DIRECTORY_INFORMATION
531 ULONG NextEntryOffset
;
533 LARGE_INTEGER CreationTime
;
534 LARGE_INTEGER LastAccessTime
;
535 LARGE_INTEGER LastWriteTime
;
536 LARGE_INTEGER ChangeTime
;
537 LARGE_INTEGER EndOfFile
;
538 LARGE_INTEGER AllocationSize
;
539 ULONG FileAttributes
;
540 ULONG FileNameLength
;
542 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
545 // File System Information structures for NtQueryInformationFile
547 typedef struct _FILE_FS_DEVICE_INFORMATION
549 DEVICE_TYPE DeviceType
;
550 ULONG Characteristics
;
551 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
553 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
555 ULONG FileSystemAttributes
;
556 ULONG MaximumComponentNameLength
;
557 ULONG FileSystemNameLength
;
558 WCHAR FileSystemName
[1];
559 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
561 typedef struct _FILE_FS_SIZE_INFORMATION
563 LARGE_INTEGER TotalAllocationUnits
;
564 LARGE_INTEGER AvailableAllocationUnits
;
565 ULONG SectorsPerAllocationUnit
;
566 ULONG BytesPerSector
;
567 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
569 typedef struct _FILE_FS_LABEL_INFORMATION
571 ULONG VolumeLabelLength
;
572 WCHAR VolumeLabel
[1];
573 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
575 typedef struct _FILE_FS_VOLUME_INFORMATION
577 LARGE_INTEGER VolumeCreationTime
;
578 ULONG VolumeSerialNumber
;
579 ULONG VolumeLabelLength
;
580 BOOLEAN SupportsObjects
;
581 WCHAR VolumeLabel
[1];
582 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
585 // Pipe Structures for IOCTL_PIPE_XXX
587 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
589 LARGE_INTEGER Timeout
;
591 BOOLEAN TimeoutSpecified
;
593 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
595 typedef struct _FILE_PIPE_PEEK_BUFFER
597 ULONG NamedPipeState
;
598 ULONG ReadDataAvailable
;
599 ULONG NumberOfMessages
;
602 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
607 typedef struct _IO_STATUS_BLOCK
614 ULONG_PTR Information
;
615 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
618 // I/O Error Log Structures
620 typedef struct _IO_ERROR_LOG_PACKET
622 UCHAR MajorFunctionCode
;
625 USHORT NumberOfStrings
;
627 USHORT EventCategory
;
629 ULONG UniqueErrorValue
;
630 NTSTATUS FinalStatus
;
631 ULONG SequenceNumber
;
633 LARGE_INTEGER DeviceOffset
;
635 }IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
637 typedef struct _IO_ERROR_LOG_MESSAGE
641 USHORT DriverNameLength
;
642 LARGE_INTEGER TimeStamp
;
643 ULONG DriverNameOffset
;
644 IO_ERROR_LOG_PACKET EntryData
;
645 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
650 // Parameters for NtCreateMailslotFile/NtCreateNamedPipeFile
652 typedef struct _MAILSLOT_CREATE_PARAMETERS
655 ULONG MaximumMessageSize
;
656 LARGE_INTEGER ReadTimeout
;
657 BOOLEAN TimeoutSpecified
;
658 } MAILSLOT_CREATE_PARAMETERS
, *PMAILSLOT_CREATE_PARAMETERS
;
660 typedef struct _NAMED_PIPE_CREATE_PARAMETERS
664 ULONG CompletionMode
;
665 ULONG MaximumInstances
;
668 LARGE_INTEGER DefaultTimeout
;
669 BOOLEAN TimeoutSpecified
;
670 } NAMED_PIPE_CREATE_PARAMETERS
, *PNAMED_PIPE_CREATE_PARAMETERS
;
672 #ifndef NTOS_MODE_USER
677 typedef struct _IO_TIMER
681 LIST_ENTRY IoTimerList
;
682 PIO_TIMER_ROUTINE TimerRoutine
;
684 PDEVICE_OBJECT DeviceObject
;
685 } IO_TIMER
, *PIO_TIMER
;
690 typedef struct _IO_CLIENT_EXTENSION
692 struct _IO_CLIENT_EXTENSION
*NextExtension
;
693 PVOID ClientIdentificationAddress
;
694 } IO_CLIENT_EXTENSION
, *PIO_CLIENT_EXTENSION
;
699 typedef struct _DEVICE_NODE
701 struct _DEVICE_NODE
*Parent
;
702 struct _DEVICE_NODE
*PrevSibling
;
703 struct _DEVICE_NODE
*NextSibling
;
704 struct _DEVICE_NODE
*Child
;
706 struct _PO_DEVICE_NOTIFY
*Notify
;
707 PNP_DEVNODE_STATE State
;
708 PNP_DEVNODE_STATE PreviousState
;
709 PNP_DEVNODE_STATE StateHistory
[20];
710 ULONG StateHistoryEntry
;
711 INT CompletionStatus
;
716 PDEVICE_OBJECT PhysicalDeviceObject
;
717 PCM_RESOURCE_LIST ResourceList
;
718 PCM_RESOURCE_LIST ResourceListTranslated
;
719 UNICODE_STRING InstancePath
;
720 UNICODE_STRING ServiceName
;
721 PDEVICE_OBJECT DuplicatePDO
;
722 PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements
;
723 INTERFACE_TYPE InterfaceType
;
725 INTERFACE_TYPE ChildInterfaceType
;
726 ULONG ChildBusNumber
;
727 USHORT ChildBusTypeIndex
;
729 UCHAR HardwareRemovalPolicy
;
730 LIST_ENTRY TargetDeviceNotify
;
731 LIST_ENTRY DeviceArbiterList
;
732 LIST_ENTRY DeviceTranslatorList
;
733 USHORT NoTranslatorMask
;
734 USHORT QueryTranslatorMask
;
735 USHORT NoArbiterMask
;
736 USHORT QueryArbiterMask
;
739 struct _DEVICE_NODE
*LegacyDeviceNode
;
740 PDEVICE_RELATIONS PendingDeviceRelations
;
744 struct _DEVICE_NODE
*NextResourceDeviceNode
;
746 PCM_RESOURCE_LIST BootResources
;
747 ULONG CapabilityFlags
;
751 LIST_ENTRY ListEntry
;
754 ULONG DisableableDepends
;
755 LIST_ENTRY PendedSetInterfaceState
;
756 LIST_ENTRY LegacyBusListEntry
;
757 ULONG DriverUnloadRetryCount
;
758 struct _DEVICE_NODE
*PreviousParent
;
759 ULONG DeletedChidren
;
760 } DEVICE_NODE
, *PDEVICE_NODE
;
763 // Resource Aribtrer Entry
765 typedef struct _PI_RESOURCE_ARBITER_ENTRY
767 LIST_ENTRY DeviceArbiterList
;
769 PARBITER_INTERFACE ArbiterInterface
;
771 LIST_ENTRY ResourceList
;
772 LIST_ENTRY BestResourceList
;
773 LIST_ENTRY BestConfig
;
774 LIST_ENTRY ActiveArbiterList
;
776 UCHAR ResourcesChanged
;
777 } PI_RESOURCE_ARBITER_ENTRY
, *PPI_RESOURCE_ARBITER_ENTRY
;
780 // Extended Device Object Extension Structure
782 typedef struct _EXTENDED_DEVOBJ_EXTENSION
786 PDEVICE_OBJECT DeviceObject
;
788 struct DEVICE_OBJECT_POWER_EXTENSION
*Dope
;
789 ULONG ExtensionFlags
;
790 struct _DEVICE_NODE
*DeviceNode
;
791 PDEVICE_OBJECT AttachedTo
;
796 } EXTENDED_DEVOBJ_EXTENSION
, *PEXTENDED_DEVOBJ_EXTENSION
;
799 // Extended Driver Object Extension Structure
801 typedef struct _EXTENDED_DRIVER_EXTENSION
803 struct _DRIVER_OBJECT
*DriverObject
;
804 PDRIVER_ADD_DEVICE AddDevice
;
806 UNICODE_STRING ServiceKeyName
;
807 PIO_CLIENT_EXTENSION ClientDriverExtension
;
808 PFS_FILTER_CALLBACKS FsFilterCallbacks
;
809 } EXTENDED_DRIVER_EXTENSION
, *PEXTENDED_DRIVER_EXTENSION
;
812 // Extended I/O Stack Location Structure
814 #if !defined(_ALPHA_)
815 #include <pshpack4.h>
817 typedef struct _EXTENDED_IO_STACK_LOCATION
827 PIO_SECURITY_CONTEXT SecurityContext
;
829 USHORT FileAttributes
;
835 PIO_SECURITY_CONTEXT SecurityContext
;
839 struct _NAMED_PIPE_CREATE_PARAMETERS
*Parameters
;
843 PIO_SECURITY_CONTEXT SecurityContext
;
847 struct _MAILSLOT_CREATE_PARAMETERS
*Parameters
;
853 LARGE_INTEGER ByteOffset
;
859 LARGE_INTEGER ByteOffset
;
864 PUNICODE_STRING FileName
;
865 FILE_INFORMATION_CLASS FileInformationClass
;
871 ULONG CompletionFilter
;
876 FILE_INFORMATION_CLASS FileInformationClass
;
881 FILE_INFORMATION_CLASS FileInformationClass
;
882 PFILE_OBJECT FileObject
;
887 BOOLEAN ReplaceIfExists
;
908 FS_INFORMATION_CLASS FsInformationClass
;
913 FS_INFORMATION_CLASS FsInformationClass
;
917 ULONG OutputBufferLength
;
918 ULONG InputBufferLength
;
920 PVOID Type3InputBuffer
;
924 PLARGE_INTEGER Length
;
926 LARGE_INTEGER ByteOffset
;
930 ULONG OutputBufferLength
;
931 ULONG InputBufferLength
;
933 PVOID Type3InputBuffer
;
937 SECURITY_INFORMATION SecurityInformation
;
938 ULONG POINTER_ALIGNMENT Length
;
942 SECURITY_INFORMATION SecurityInformation
;
943 PSECURITY_DESCRIPTOR SecurityDescriptor
;
948 PDEVICE_OBJECT DeviceObject
;
953 PDEVICE_OBJECT DeviceObject
;
957 struct _SCSI_REQUEST_BLOCK
*Srb
;
963 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
972 DEVICE_RELATION_TYPE Type
;
973 } QueryDeviceRelations
;
976 CONST GUID
*InterfaceType
;
979 PINTERFACE Interface
;
980 PVOID InterfaceSpecificData
;
984 PDEVICE_CAPABILITIES Capabilities
;
985 } DeviceCapabilities
;
988 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
989 } FilterResourceRequirements
;
1003 BUS_QUERY_ID_TYPE IdType
;
1007 DEVICE_TEXT_TYPE DeviceTextType
;
1013 BOOLEAN Reserved
[3];
1014 DEVICE_USAGE_NOTIFICATION_TYPE Type
;
1015 } UsageNotification
;
1018 SYSTEM_POWER_STATE PowerState
;
1022 PPOWER_SEQUENCE PowerSequence
;
1026 ULONG SystemContext
;
1027 POWER_STATE_TYPE Type
;
1029 POWER_ACTION ShutdownType
;
1033 PCM_RESOURCE_LIST AllocatedResources
;
1034 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
1038 ULONG_PTR ProviderId
;
1051 PDEVICE_OBJECT DeviceObject
;
1052 PFILE_OBJECT FileObject
;
1053 PIO_COMPLETION_ROUTINE CompletionRoutine
;
1055 } EXTENDED_IO_STACK_LOCATION
, *PEXTENDED_IO_STACK_LOCATION
;
1056 #if !defined(_ALPHA_)
1057 #include <poppack.h>
1062 // Firmware Boot File Path
1064 typedef struct _FILE_PATH
1070 } FILE_PATH
, *PFILE_PATH
;
1073 // Firmware Boot Options
1075 typedef struct _BOOT_OPTIONS
1080 ULONG CurrentBootEntryId
;
1081 ULONG NextBootEntryId
;
1082 WCHAR HeadlessRedirection
[1];
1083 } BOOT_OPTIONS
, *PBOOT_OPTIONS
;
1086 // APC Callback for NtCreateFile
1089 (NTAPI
*PIO_APC_ROUTINE
)(
1090 IN PVOID ApcContext
,
1091 IN PIO_STATUS_BLOCK IoStatusBlock
,
1094 #ifdef NTOS_MODE_USER
1097 // Mailslot IOCTL Codes
1099 #define FSCTL_MAILSLOT_PEEK \
1100 CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
1105 #define FSCTL_PIPE_ASSIGN_EVENT \
1106 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
1107 #define FSCTL_PIPE_DISCONNECT \
1108 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
1109 #define FSCTL_PIPE_LISTEN \
1110 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
1111 #define FSCTL_PIPE_PEEK \
1112 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
1113 #define FSCTL_PIPE_QUERY_EVENT \
1114 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
1115 #define FSCTL_PIPE_TRANSCEIVE \
1116 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1117 #define FSCTL_PIPE_WAIT \
1118 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
1119 #define FSCTL_PIPE_IMPERSONATE \
1120 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
1121 #define FSCTL_PIPE_SET_CLIENT_PROCESS \
1122 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
1123 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS \
1124 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
1125 #define FSCTL_PIPE_INTERNAL_READ \
1126 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
1127 #define FSCTL_PIPE_INTERNAL_WRITE \
1128 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
1129 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE \
1130 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1131 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW \
1132 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
1137 #define IOCTL_TAPE_ERASE \
1138 CTL_CODE(FILE_DEVICE_TAPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1139 #define IOCTL_TAPE_PREPARE \
1140 CTL_CODE(FILE_DEVICE_TAPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS)
1141 #define IOCTL_TAPE_WRITE_MARKS \
1142 CTL_CODE(FILE_DEVICE_TAPE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1143 #define IOCTL_TAPE_GET_POSITION \
1144 CTL_CODE(FILE_DEVICE_TAPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS)
1145 #define IOCTL_TAPE_SET_POSITION \
1146 CTL_CODE(FILE_DEVICE_TAPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS)
1147 #define IOCTL_TAPE_GET_DRIVE_PARAMS \
1148 CTL_CODE(FILE_DEVICE_TAPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS)
1149 #define IOCTL_TAPE_SET_DRIVE_PARAMS \
1150 CTL_CODE(FILE_DEVICE_TAPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1151 #define IOCTL_TAPE_GET_MEDIA_PARAMS \
1152 CTL_CODE(FILE_DEVICE_TAPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS)
1153 #define IOCTL_TAPE_SET_MEDIA_PARAMS \
1154 CTL_CODE(FILE_DEVICE_TAPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
1155 #define IOCTL_TAPE_GET_STATUS \
1156 CTL_CODE(FILE_DEVICE_TAPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS)
1157 #define IOCTL_TAPE_CREATE_PARTITION \
1158 CTL_CODE(FILE_DEVICE_TAPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1160 #endif // NTOS_MODE_USER