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 typedef PVOID PFS_FILTER_CALLBACKS
;
31 // I/O Completion Access Rights
33 #define IO_COMPLETION_QUERY_STATE 0x0001
34 #ifndef NTOS_MODE_USER
35 #define IO_COMPLETION_MODIFY_STATE 0x0002
36 #define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
41 // Kernel Exported Object Types
43 extern POBJECT_TYPE NTSYSAPI IoAdapterObjectType
;
44 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType
;
45 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType
;
46 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType
;
51 // Symbolic Link Access Rights
53 #define SYMBOLIC_LINK_QUERY 0x0001
54 #define SYMBOLIC_LINK_ALL_ACCESS STANDARD_RIGHTS_REQUIRED | 0x0001
58 // NtCreateFile Result Flags
60 #define FILE_SUPERSEDED 0x00000000
61 #define FILE_OPENED 0x00000001
62 #define FILE_CREATED 0x00000002
63 #define FILE_OVERWRITTEN 0x00000003
64 #define FILE_EXISTS 0x00000004
65 #define FILE_DOES_NOT_EXIST 0x00000005
70 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
71 #define FILE_PIPE_MESSAGE_TYPE 0x00000001
72 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
73 #define FILE_PIPE_MESSAGE_MODE 0x00000001
74 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
75 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
76 #define FILE_PIPE_INBOUND 0x00000000
77 #define FILE_PIPE_OUTBOUND 0x00000001
78 #define FILE_PIPE_FULL_DUPLEX 0x00000002
79 #define FILE_PIPE_CLIENT_END 0x00000000
80 #define FILE_PIPE_SERVER_END 0x00000001
83 // NtCreateFile Attributes
85 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
86 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
89 // NtCreateFile OpenType Flags
91 #define FILE_SUPERSEDE 0x00000000
92 #define FILE_OPEN 0x00000001
93 #define FILE_CREATE 0x00000002
94 #define FILE_OPEN_IF 0x00000003
95 #define FILE_OVERWRITE 0x00000004
96 #define FILE_OVERWRITE_IF 0x00000005
97 #define FILE_MAXIMUM_DISPOSITION 0x00000005
100 // NtCreateFile Flags
102 #define FILE_DIRECTORY_FILE 0x00000001
103 #define FILE_WRITE_THROUGH 0x00000002
104 #define FILE_SEQUENTIAL_ONLY 0x00000004
105 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
106 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
107 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
108 #define FILE_NON_DIRECTORY_FILE 0x00000040
109 #define FILE_CREATE_TREE_CONNECTION 0x00000080
110 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
111 #define FILE_NO_EA_KNOWLEDGE 0x00000200
112 #define FILE_OPEN_FOR_RECOVERY 0x00000400
113 #define FILE_RANDOM_ACCESS 0x00000800
114 #define FILE_DELETE_ON_CLOSE 0x00001000
115 #define FILE_OPEN_BY_FILE_ID 0x00002000
116 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
117 #define FILE_NO_COMPRESSION 0x00008000
118 #define FILE_RESERVE_OPFILTER 0x00100000
119 #define FILE_OPEN_REPARSE_POINT 0x00200000
120 #define FILE_OPEN_NO_RECALL 0x00400000
121 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
124 // Device Charactertics
126 #define FILE_REMOVABLE_MEDIA 0x00000001
127 #define FILE_REMOTE_DEVICE 0x00000010
130 // Device Object Extension Flags
132 #define DOE_UNLOAD_PENDING 0x1
133 #define DOE_DELETE_PENDING 0x2
134 #define DOE_REMOVE_PENDING 0x4
135 #define DOE_REMOVE_PROCESSED 0x8
136 #define DOE_START_PENDING 0x10
139 // Device Object StartIo Flags
141 #define DOE_SIO_NO_KEY 0x20
142 #define DOE_SIO_WITH_KEY 0x40
143 #define DOE_SIO_CANCELABLE 0x80
144 #define DOE_SIO_DEFERRED 0x100
145 #define DOE_SIO_NO_CANCEL 0x200
150 #define DNF_PROCESSED 0x00000001
151 #define DNF_STARTED 0x00000002
152 #define DNF_START_FAILED 0x00000004
153 #define DNF_ENUMERATED 0x00000008
154 #define DNF_DELETED 0x00000010
155 #define DNF_MADEUP 0x00000020
156 #define DNF_START_REQUEST_PENDING 0x00000040
157 #define DNF_NO_RESOURCE_REQUIRED 0x00000080
158 #define DNF_INSUFFICIENT_RESOURCES 0x00000100
159 #define DNF_RESOURCE_ASSIGNED 0x00000200
160 #define DNF_RESOURCE_REPORTED 0x00000400
161 #define DNF_HAL_NODE 0x00000800 // ???
162 #define DNF_ADDED 0x00001000
163 #define DNF_ADD_FAILED 0x00002000
164 #define DNF_LEGACY_DRIVER 0x00004000
165 #define DNF_STOPPED 0x00008000
166 #define DNF_WILL_BE_REMOVED 0x00010000
167 #define DNF_NEED_TO_ENUM 0x00020000
168 #define DNF_NOT_CONFIGURED 0x00040000
169 #define DNF_REINSTALL 0x00080000
170 #define DNF_RESOURCE_REQUIREMENTS_NEED_FILTERED 0x00100000 // ???
171 #define DNF_DISABLED 0x00200000
172 #define DNF_RESTART_OK 0x00400000
173 #define DNF_NEED_RESTART 0x00800000
174 #define DNF_VISITED 0x01000000
175 #define DNF_ASSIGNING_RESOURCES 0x02000000
176 #define DNF_BEEING_ENUMERATED 0x04000000
177 #define DNF_NEED_ENUMERATION_ONLY 0x08000000
178 #define DNF_LOCKED 0x10000000
179 #define DNF_HAS_BOOT_CONFIG 0x20000000
180 #define DNF_BOOT_CONFIG_RESERVED 0x40000000
181 #define DNF_HAS_PROBLEM 0x80000000 // ???
184 // Device Node User Flags
186 #define DNUF_DONT_SHOW_IN_UI 0x0002
187 #define DNUF_NOT_DISABLEABLE 0x0008
190 // Internal Option Flags
192 #define IO_ATTACH_DEVICE_API 0x80000000
195 // Undocumented WMI Registration Flags
197 #define WMIREG_FLAG_TRACE_PROVIDER 0x00010000
198 #define WMIREG_FLAG_TRACE_NOTIFY_MASK 0x00F00000
199 #define WMIREG_NOTIFY_DISK_IO 0x00100000
200 #define WMIREG_NOTIFY_TDI_IO 0x00200000
203 // I/O Completion Information Class for NtQueryIoCompletionInformation
205 typedef enum _IO_COMPLETION_INFORMATION_CLASS
207 IoCompletionBasicInformation
208 } IO_COMPLETION_INFORMATION_CLASS
;
210 #ifdef NTOS_MODE_USER
213 // Hardware Interface Type
215 typedef enum _INTERFACE_TYPE
217 InterfaceTypeUndefined
= -1,
235 }INTERFACE_TYPE
, *PINTERFACE_TYPE
;
237 typedef enum _BUS_DATA_TYPE
239 ConfigurationSpaceUndefined
= -1,
251 SgiInternalConfiguration
,
253 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
256 // File Information Classes for NtQueryInformationFile
258 typedef enum _FILE_INFORMATION_CLASS
260 FileDirectoryInformation
= 1,
261 FileFullDirectoryInformation
,
262 FileBothDirectoryInformation
,
263 FileBasicInformation
,
264 FileStandardInformation
,
265 FileInternalInformation
,
267 FileAccessInformation
,
269 FileRenameInformation
,
271 FileNamesInformation
,
272 FileDispositionInformation
,
273 FilePositionInformation
,
274 FileFullEaInformation
,
276 FileAlignmentInformation
,
278 FileAllocationInformation
,
279 FileEndOfFileInformation
,
280 FileAlternateNameInformation
,
281 FileStreamInformation
,
283 FilePipeLocalInformation
,
284 FilePipeRemoteInformation
,
285 FileMailslotQueryInformation
,
286 FileMailslotSetInformation
,
287 FileCompressionInformation
,
288 FileObjectIdInformation
,
289 FileCompletionInformation
,
290 FileMoveClusterInformation
,
291 FileQuotaInformation
,
292 FileReparsePointInformation
,
293 FileNetworkOpenInformation
,
294 FileAttributeTagInformation
,
295 FileTrackingInformation
,
296 FileIdBothDirectoryInformation
,
297 FileIdFullDirectoryInformation
,
298 FileValidDataLengthInformation
,
299 FileShortNameInformation
,
300 FileMaximumInformation
301 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
304 // File Information Classes for NtQueryInformationFileSystem
306 typedef enum _FSINFOCLASS
308 FileFsVolumeInformation
= 1,
309 FileFsLabelInformation
,
310 FileFsSizeInformation
,
311 FileFsDeviceInformation
,
312 FileFsAttributeInformation
,
313 FileFsControlInformation
,
314 FileFsFullSizeInformation
,
315 FileFsObjectIdInformation
,
316 FileFsDriverPathInformation
,
317 FileFsMaximumInformation
318 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
323 // Device Node States
325 typedef enum _PNP_DEVNODE_STATE
327 DeviceNodeUnspecified
= 0x300,
328 DeviceNodeUninitialized
= 0x301,
329 DeviceNodeInitialized
= 0x302,
330 DeviceNodeDriversAdded
= 0x303,
331 DeviceNodeResourcesAssigned
= 0x304,
332 DeviceNodeStartPending
= 0x305,
333 DeviceNodeStartCompletion
= 0x306,
334 DeviceNodeStartPostWork
= 0x307,
335 DeviceNodeStarted
= 0x308,
336 DeviceNodeQueryStopped
= 0x309,
337 DeviceNodeStopped
= 0x30a,
338 DeviceNodeRestartCompletion
= 0x30b,
339 DeviceNodeEnumeratePending
= 0x30c,
340 DeviceNodeEnumerateCompletion
= 0x30d,
341 DeviceNodeAwaitingQueuedDeletion
= 0x30e,
342 DeviceNodeAwaitingQueuedRemoval
= 0x30f,
343 DeviceNodeQueryRemoved
= 0x310,
344 DeviceNodeRemovePendingCloses
= 0x311,
345 DeviceNodeRemoved
= 0x312,
346 DeviceNodeDeletePendingCloses
= 0x313,
347 DeviceNodeDeleted
= 0x314,
348 MaxDeviceNodeState
= 0x315,
351 #ifdef NTOS_MODE_USER
354 // File Information structures for NtQueryInformationFile
356 typedef struct _FILE_BASIC_INFORMATION
358 LARGE_INTEGER CreationTime
;
359 LARGE_INTEGER LastAccessTime
;
360 LARGE_INTEGER LastWriteTime
;
361 LARGE_INTEGER ChangeTime
;
362 ULONG FileAttributes
;
363 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
365 typedef struct _FILE_STANDARD_INFORMATION
367 LARGE_INTEGER AllocationSize
;
368 LARGE_INTEGER EndOfFile
;
370 BOOLEAN DeletePending
;
372 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
374 typedef struct _FILE_STREAM_INFORMATION
376 ULONG NextEntryOffset
;
377 ULONG StreamNameLength
;
378 LARGE_INTEGER StreamSize
;
379 LARGE_INTEGER StreamAllocationSize
;
381 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
383 typedef struct _FILE_NETWORK_OPEN_INFORMATION
385 LARGE_INTEGER CreationTime
;
386 LARGE_INTEGER LastAccessTime
;
387 LARGE_INTEGER LastWriteTime
;
388 LARGE_INTEGER ChangeTime
;
389 LARGE_INTEGER AllocationSize
;
390 LARGE_INTEGER EndOfFile
;
391 ULONG FileAttributes
;
392 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
394 typedef struct _FILE_EA_INFORMATION
397 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
399 typedef struct _FILE_COMPRESSION_INFORMATION
401 LARGE_INTEGER CompressedFileSize
;
402 USHORT CompressionFormat
;
403 UCHAR CompressionUnitShift
;
407 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
409 typedef struct _FILE_POSITION_INFORMATION
411 LARGE_INTEGER CurrentByteOffset
;
412 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
414 typedef struct _FILE_DISPOSITION_INFORMATION
417 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
419 typedef struct _FILE_FULL_EA_INFORMATION
421 ULONG NextEntryOffset
;
424 USHORT EaValueLength
;
426 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
428 typedef struct _FILE_QUOTA_INFORMATION
430 ULONG NextEntryOffset
;
432 LARGE_INTEGER ChangeTime
;
433 LARGE_INTEGER QuotaUsed
;
434 LARGE_INTEGER QuotaThreshold
;
435 LARGE_INTEGER QuotaLimit
;
437 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
439 typedef struct _FILE_INTERNAL_INFORMATION
441 LARGE_INTEGER IndexNumber
;
442 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
444 typedef struct _FILE_RENAME_INFORMATION
446 BOOLEAN ReplaceIfExists
;
447 HANDLE RootDirectory
;
448 ULONG FileNameLength
;
450 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
452 typedef struct _FILE_PIPE_INFORMATION
455 ULONG CompletionMode
;
456 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
458 typedef struct _FILE_PIPE_LOCAL_INFORMATION
461 ULONG NamedPipeConfiguration
;
462 ULONG MaximumInstances
;
463 ULONG CurrentInstances
;
465 ULONG ReadDataAvailable
;
467 ULONG WriteQuotaAvailable
;
468 ULONG NamedPipeState
;
470 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
472 typedef struct _FILE_PIPE_REMOTE_INFORMATION
474 LARGE_INTEGER CollectDataTime
;
475 ULONG MaximumCollectionCount
;
476 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
478 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
480 ULONG MaximumMessageSize
;
482 ULONG NextMessageSize
;
483 ULONG MessagesAvailable
;
484 LARGE_INTEGER ReadTimeout
;
485 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
487 typedef struct _FILE_MAILSLOT_SET_INFORMATION
489 PLARGE_INTEGER ReadTimeout
;
490 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
492 typedef struct _FILE_BOTH_DIR_INFORMATION
494 ULONG NextEntryOffset
;
496 LARGE_INTEGER CreationTime
;
497 LARGE_INTEGER LastAccessTime
;
498 LARGE_INTEGER LastWriteTime
;
499 LARGE_INTEGER ChangeTime
;
500 LARGE_INTEGER EndOfFile
;
501 LARGE_INTEGER AllocationSize
;
502 ULONG FileAttributes
;
503 ULONG FileNameLength
;
505 CCHAR ShortNameLength
;
508 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
510 typedef struct _FILE_COMPLETION_INFORMATION
514 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
516 typedef struct _FILE_LINK_INFORMATION
518 BOOLEAN ReplaceIfExists
;
519 HANDLE RootDirectory
;
520 ULONG FileNameLength
;
522 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
524 typedef struct _FILE_NAME_INFORMATION
526 ULONG FileNameLength
;
528 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
530 typedef struct _FILE_ALLOCATION_INFORMATION
532 LARGE_INTEGER AllocationSize
;
533 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
535 typedef struct _FILE_END_OF_FILE_INFORMATION
537 LARGE_INTEGER EndOfFile
;
538 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
540 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
542 LARGE_INTEGER ValidDataLength
;
543 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
545 typedef struct _FILE_DIRECTORY_INFORMATION
547 ULONG NextEntryOffset
;
549 LARGE_INTEGER CreationTime
;
550 LARGE_INTEGER LastAccessTime
;
551 LARGE_INTEGER LastWriteTime
;
552 LARGE_INTEGER ChangeTime
;
553 LARGE_INTEGER EndOfFile
;
554 LARGE_INTEGER AllocationSize
;
555 ULONG FileAttributes
;
556 ULONG FileNameLength
;
558 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
561 // File System Information structures for NtQueryInformationFile
563 typedef struct _FILE_FS_DEVICE_INFORMATION
565 DEVICE_TYPE DeviceType
;
566 ULONG Characteristics
;
567 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
569 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
571 ULONG FileSystemAttributes
;
572 ULONG MaximumComponentNameLength
;
573 ULONG FileSystemNameLength
;
574 WCHAR FileSystemName
[1];
575 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
577 typedef struct _FILE_FS_SIZE_INFORMATION
579 LARGE_INTEGER TotalAllocationUnits
;
580 LARGE_INTEGER AvailableAllocationUnits
;
581 ULONG SectorsPerAllocationUnit
;
582 ULONG BytesPerSector
;
583 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
585 typedef struct _FILE_FS_LABEL_INFORMATION
587 ULONG VolumeLabelLength
;
588 WCHAR VolumeLabel
[1];
589 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
591 typedef struct _FILE_FS_VOLUME_INFORMATION
593 LARGE_INTEGER VolumeCreationTime
;
594 ULONG VolumeSerialNumber
;
595 ULONG VolumeLabelLength
;
596 BOOLEAN SupportsObjects
;
597 WCHAR VolumeLabel
[1];
598 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
601 // Pipe Structures for IOCTL_PIPE_XXX
603 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
605 LARGE_INTEGER Timeout
;
607 BOOLEAN TimeoutSpecified
;
609 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
611 typedef struct _FILE_PIPE_PEEK_BUFFER
613 ULONG NamedPipeState
;
614 ULONG ReadDataAvailable
;
615 ULONG NumberOfMessages
;
618 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
623 typedef struct _IO_STATUS_BLOCK
630 ULONG_PTR Information
;
631 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
634 // I/O Error Log Structures
636 typedef struct _IO_ERROR_LOG_PACKET
638 UCHAR MajorFunctionCode
;
641 USHORT NumberOfStrings
;
643 USHORT EventCategory
;
645 ULONG UniqueErrorValue
;
646 NTSTATUS FinalStatus
;
647 ULONG SequenceNumber
;
649 LARGE_INTEGER DeviceOffset
;
651 }IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
653 typedef struct _IO_ERROR_LOG_MESSAGE
657 USHORT DriverNameLength
;
658 LARGE_INTEGER TimeStamp
;
659 ULONG DriverNameOffset
;
660 IO_ERROR_LOG_PACKET EntryData
;
661 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
666 // I/O Completion Information structures
668 typedef struct _IO_COMPLETION_BASIC_INFORMATION
671 } IO_COMPLETION_BASIC_INFORMATION
, *PIO_COMPLETION_BASIC_INFORMATION
;
674 // Parameters for NtCreateMailslotFile/NtCreateNamedPipeFile
676 typedef struct _MAILSLOT_CREATE_PARAMETERS
679 ULONG MaximumMessageSize
;
680 LARGE_INTEGER ReadTimeout
;
681 BOOLEAN TimeoutSpecified
;
682 } MAILSLOT_CREATE_PARAMETERS
, *PMAILSLOT_CREATE_PARAMETERS
;
684 typedef struct _NAMED_PIPE_CREATE_PARAMETERS
688 ULONG CompletionMode
;
689 ULONG MaximumInstances
;
692 LARGE_INTEGER DefaultTimeout
;
693 BOOLEAN TimeoutSpecified
;
694 } NAMED_PIPE_CREATE_PARAMETERS
, *PNAMED_PIPE_CREATE_PARAMETERS
;
696 #ifndef NTOS_MODE_USER
701 typedef struct _IO_TIMER
705 LIST_ENTRY IoTimerList
;
706 PIO_TIMER_ROUTINE TimerRoutine
;
708 PDEVICE_OBJECT DeviceObject
;
709 } IO_TIMER
, *PIO_TIMER
;
714 typedef struct _IO_CLIENT_EXTENSION
716 struct _IO_CLIENT_EXTENSION
*NextExtension
;
717 PVOID ClientIdentificationAddress
;
718 } IO_CLIENT_EXTENSION
, *PIO_CLIENT_EXTENSION
;
723 typedef struct _DEVICE_NODE
725 struct _DEVICE_NODE
*Parent
;
726 struct _DEVICE_NODE
*PrevSibling
;
727 struct _DEVICE_NODE
*NextSibling
;
728 struct _DEVICE_NODE
*Child
;
730 struct _PO_DEVICE_NOTIFY
*Notify
;
731 PNP_DEVNODE_STATE State
;
732 PNP_DEVNODE_STATE PreviousState
;
733 PNP_DEVNODE_STATE StateHistory
[20];
734 ULONG StateHistoryEntry
;
735 INT CompletionStatus
;
740 PDEVICE_OBJECT PhysicalDeviceObject
;
741 PCM_RESOURCE_LIST ResourceList
;
742 PCM_RESOURCE_LIST ResourceListTranslated
;
743 UNICODE_STRING InstancePath
;
744 UNICODE_STRING ServiceName
;
745 PDEVICE_OBJECT DuplicatePDO
;
746 PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements
;
747 INTERFACE_TYPE InterfaceType
;
749 INTERFACE_TYPE ChildInterfaceType
;
750 ULONG ChildBusNumber
;
751 USHORT ChildBusTypeIndex
;
753 UCHAR HardwareRemovalPolicy
;
754 LIST_ENTRY TargetDeviceNotify
;
755 LIST_ENTRY DeviceArbiterList
;
756 LIST_ENTRY DeviceTranslatorList
;
757 USHORT NoTranslatorMask
;
758 USHORT QueryTranslatorMask
;
759 USHORT NoArbiterMask
;
760 USHORT QueryArbiterMask
;
763 struct _DEVICE_NODE
*LegacyDeviceNode
;
764 PDEVICE_RELATIONS PendingDeviceRelations
;
768 struct _DEVICE_NODE
*NextResourceDeviceNode
;
770 PCM_RESOURCE_LIST BootResources
;
771 ULONG CapabilityFlags
;
775 LIST_ENTRY ListEntry
;
778 ULONG DisableableDepends
;
779 LIST_ENTRY PendedSetInterfaceState
;
780 LIST_ENTRY LegacyBusListEntry
;
781 ULONG DriverUnloadRetryCount
;
782 struct _DEVICE_NODE
*PreviousParent
;
783 ULONG DeletedChidren
;
784 } DEVICE_NODE
, *PDEVICE_NODE
;
787 // Resource Aribtrer Entry
789 typedef struct _PI_RESOURCE_ARBITER_ENTRY
791 LIST_ENTRY DeviceArbiterList
;
793 PARBITER_INTERFACE ArbiterInterface
;
795 LIST_ENTRY ResourceList
;
796 LIST_ENTRY BestResourceList
;
797 LIST_ENTRY BestConfig
;
798 LIST_ENTRY ActiveArbiterList
;
800 UCHAR ResourcesChanged
;
801 } PI_RESOURCE_ARBITER_ENTRY
, *PPI_RESOURCE_ARBITER_ENTRY
;
804 // Extended Device Object Extension Structure
806 typedef struct _EXTENDED_DEVOBJ_EXTENSION
810 PDEVICE_OBJECT DeviceObject
;
812 struct DEVICE_OBJECT_POWER_EXTENSION
*Dope
;
813 ULONG ExtensionFlags
;
814 struct _DEVICE_NODE
*DeviceNode
;
815 PDEVICE_OBJECT AttachedTo
;
820 } EXTENDED_DEVOBJ_EXTENSION
, *PEXTENDED_DEVOBJ_EXTENSION
;
823 // Extended Driver Object Extension Structure
825 typedef struct _EXTENDED_DRIVER_EXTENSION
827 struct _DRIVER_OBJECT
*DriverObject
;
828 PDRIVER_ADD_DEVICE AddDevice
;
830 UNICODE_STRING ServiceKeyName
;
831 PIO_CLIENT_EXTENSION ClientDriverExtension
;
832 PFS_FILTER_CALLBACKS FsFilterCallbacks
;
833 } EXTENDED_DRIVER_EXTENSION
, *PEXTENDED_DRIVER_EXTENSION
;
836 // Extended I/O Stack Location Structure
838 #if !defined(_ALPHA_)
839 #include <pshpack4.h>
841 typedef struct _EXTENDED_IO_STACK_LOCATION
851 PIO_SECURITY_CONTEXT SecurityContext
;
853 USHORT FileAttributes
;
859 PIO_SECURITY_CONTEXT SecurityContext
;
863 struct _NAMED_PIPE_CREATE_PARAMETERS
*Parameters
;
867 PIO_SECURITY_CONTEXT SecurityContext
;
871 struct _MAILSLOT_CREATE_PARAMETERS
*Parameters
;
877 LARGE_INTEGER ByteOffset
;
883 LARGE_INTEGER ByteOffset
;
888 PUNICODE_STRING FileName
;
889 FILE_INFORMATION_CLASS FileInformationClass
;
895 ULONG CompletionFilter
;
900 FILE_INFORMATION_CLASS FileInformationClass
;
905 FILE_INFORMATION_CLASS FileInformationClass
;
906 PFILE_OBJECT FileObject
;
911 BOOLEAN ReplaceIfExists
;
932 FS_INFORMATION_CLASS FsInformationClass
;
937 FS_INFORMATION_CLASS FsInformationClass
;
941 ULONG OutputBufferLength
;
942 ULONG InputBufferLength
;
944 PVOID Type3InputBuffer
;
948 PLARGE_INTEGER Length
;
950 LARGE_INTEGER ByteOffset
;
954 ULONG OutputBufferLength
;
955 ULONG InputBufferLength
;
957 PVOID Type3InputBuffer
;
961 SECURITY_INFORMATION SecurityInformation
;
962 ULONG POINTER_ALIGNMENT Length
;
966 SECURITY_INFORMATION SecurityInformation
;
967 PSECURITY_DESCRIPTOR SecurityDescriptor
;
972 PDEVICE_OBJECT DeviceObject
;
977 PDEVICE_OBJECT DeviceObject
;
981 struct _SCSI_REQUEST_BLOCK
*Srb
;
987 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
996 DEVICE_RELATION_TYPE Type
;
997 } QueryDeviceRelations
;
1000 CONST GUID
*InterfaceType
;
1003 PINTERFACE Interface
;
1004 PVOID InterfaceSpecificData
;
1008 PDEVICE_CAPABILITIES Capabilities
;
1009 } DeviceCapabilities
;
1012 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
1013 } FilterResourceRequirements
;
1027 BUS_QUERY_ID_TYPE IdType
;
1031 DEVICE_TEXT_TYPE DeviceTextType
;
1037 BOOLEAN Reserved
[3];
1038 DEVICE_USAGE_NOTIFICATION_TYPE Type
;
1039 } UsageNotification
;
1042 SYSTEM_POWER_STATE PowerState
;
1046 PPOWER_SEQUENCE PowerSequence
;
1050 ULONG SystemContext
;
1051 POWER_STATE_TYPE Type
;
1053 POWER_ACTION ShutdownType
;
1057 PCM_RESOURCE_LIST AllocatedResources
;
1058 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
1062 ULONG_PTR ProviderId
;
1075 PDEVICE_OBJECT DeviceObject
;
1076 PFILE_OBJECT FileObject
;
1077 PIO_COMPLETION_ROUTINE CompletionRoutine
;
1079 } EXTENDED_IO_STACK_LOCATION
, *PEXTENDED_IO_STACK_LOCATION
;
1080 #if !defined(_ALPHA_)
1081 #include <poppack.h>
1086 // Firmware Boot File Path
1088 typedef struct _FILE_PATH
1094 } FILE_PATH
, *PFILE_PATH
;
1097 // Firmware Boot Options
1099 typedef struct _BOOT_OPTIONS
1104 ULONG CurrentBootEntryId
;
1105 ULONG NextBootEntryId
;
1106 WCHAR HeadlessRedirection
[1];
1107 } BOOT_OPTIONS
, *PBOOT_OPTIONS
;
1110 // Firmware Boot Entry
1112 typedef struct _BOOT_ENTRY
1118 ULONG FriendlyNameOffset
;
1119 ULONG BootFilePathOffset
;
1120 ULONG OsOptionsLength
;
1122 } BOOT_ENTRY
, *PBOOT_ENTRY
;
1125 // Firmware Driver Entry
1127 typedef struct _EFI_DRIVER_ENTRY
1133 ULONG FriendlyNameOffset
;
1134 ULONG DriverFilePathOffset
;
1135 } EFI_DRIVER_ENTRY
, *PEFI_DRIVER_ENTRY
;
1138 // APC Callback for NtCreateFile
1141 (NTAPI
*PIO_APC_ROUTINE
)(
1142 IN PVOID ApcContext
,
1143 IN PIO_STATUS_BLOCK IoStatusBlock
,
1146 #ifdef NTOS_MODE_USER
1149 // Mailslot IOCTL Codes
1151 #define FSCTL_MAILSLOT_PEEK \
1152 CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
1157 #define FSCTL_PIPE_ASSIGN_EVENT \
1158 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
1159 #define FSCTL_PIPE_DISCONNECT \
1160 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
1161 #define FSCTL_PIPE_LISTEN \
1162 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
1163 #define FSCTL_PIPE_PEEK \
1164 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
1165 #define FSCTL_PIPE_QUERY_EVENT \
1166 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
1167 #define FSCTL_PIPE_TRANSCEIVE \
1168 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1169 #define FSCTL_PIPE_WAIT \
1170 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
1171 #define FSCTL_PIPE_IMPERSONATE \
1172 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
1173 #define FSCTL_PIPE_SET_CLIENT_PROCESS \
1174 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
1175 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS \
1176 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
1177 #define FSCTL_PIPE_INTERNAL_READ \
1178 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
1179 #define FSCTL_PIPE_INTERNAL_WRITE \
1180 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
1181 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE \
1182 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1183 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW \
1184 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
1189 #define IOCTL_TAPE_ERASE \
1190 CTL_CODE(FILE_DEVICE_TAPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1191 #define IOCTL_TAPE_PREPARE \
1192 CTL_CODE(FILE_DEVICE_TAPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS)
1193 #define IOCTL_TAPE_WRITE_MARKS \
1194 CTL_CODE(FILE_DEVICE_TAPE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1195 #define IOCTL_TAPE_GET_POSITION \
1196 CTL_CODE(FILE_DEVICE_TAPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS)
1197 #define IOCTL_TAPE_SET_POSITION \
1198 CTL_CODE(FILE_DEVICE_TAPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS)
1199 #define IOCTL_TAPE_GET_DRIVE_PARAMS \
1200 CTL_CODE(FILE_DEVICE_TAPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS)
1201 #define IOCTL_TAPE_SET_DRIVE_PARAMS \
1202 CTL_CODE(FILE_DEVICE_TAPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1203 #define IOCTL_TAPE_GET_MEDIA_PARAMS \
1204 CTL_CODE(FILE_DEVICE_TAPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS)
1205 #define IOCTL_TAPE_SET_MEDIA_PARAMS \
1206 CTL_CODE(FILE_DEVICE_TAPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
1207 #define IOCTL_TAPE_GET_STATUS \
1208 CTL_CODE(FILE_DEVICE_TAPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS)
1209 #define IOCTL_TAPE_CREATE_PARTITION \
1210 CTL_CODE(FILE_DEVICE_TAPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1212 #endif // NTOS_MODE_USER