3 Copyright (c) Alex Ionescu. All rights reserved.
11 Type definitions for the I/O Manager.
15 Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
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
130 #define DNF_PROCESSED 0x00000001
131 #define DNF_STARTED 0x00000002
132 #define DNF_START_FAILED 0x00000004
133 #define DNF_ENUMERATED 0x00000008
134 #define DNF_DELETED 0x00000010
135 #define DNF_MADEUP 0x00000020
136 #define DNF_START_REQUEST_PENDING 0x00000040
137 #define DNF_NO_RESOURCE_REQUIRED 0x00000080
138 #define DNF_INSUFFICIENT_RESOURCES 0x00000100
139 #define DNF_RESOURCE_ASSIGNED 0x00000200
140 #define DNF_RESOURCE_REPORTED 0x00000400
141 #define DNF_HAL_NODE 0x00000800 // ???
142 #define DNF_ADDED 0x00001000
143 #define DNF_ADD_FAILED 0x00002000
144 #define DNF_LEGACY_DRIVER 0x00004000
145 #define DNF_STOPPED 0x00008000
146 #define DNF_WILL_BE_REMOVED 0x00010000
147 #define DNF_NEED_TO_ENUM 0x00020000
148 #define DNF_NOT_CONFIGURED 0x00040000
149 #define DNF_REINSTALL 0x00080000
150 #define DNF_RESOURCE_REQUIREMENTS_NEED_FILTERED 0x00100000 // ???
151 #define DNF_DISABLED 0x00200000
152 #define DNF_RESTART_OK 0x00400000
153 #define DNF_NEED_RESTART 0x00800000
154 #define DNF_VISITED 0x01000000
155 #define DNF_ASSIGNING_RESOURCES 0x02000000
156 #define DNF_BEEING_ENUMERATED 0x04000000
157 #define DNF_NEED_ENUMERATION_ONLY 0x08000000
158 #define DNF_LOCKED 0x10000000
159 #define DNF_HAS_BOOT_CONFIG 0x20000000
160 #define DNF_BOOT_CONFIG_RESERVED 0x40000000
161 #define DNF_HAS_PROBLEM 0x80000000 // ???
164 // Device Node User Flags
166 #define DNUF_DONT_SHOW_IN_UI 0x0002
167 #define DNUF_NOT_DISABLEABLE 0x0008
170 // I/O Completion Information Class for NtQueryIoCompletionInformation
172 typedef enum _IO_COMPLETION_INFORMATION_CLASS
174 IoCompletionBasicInformation
175 } IO_COMPLETION_INFORMATION_CLASS
;
177 #ifdef NTOS_MODE_USER
180 // Hardware Interface Type
182 typedef enum _INTERFACE_TYPE
184 InterfaceTypeUndefined
= -1,
202 }INTERFACE_TYPE
, *PINTERFACE_TYPE
;
205 // File Information Classes for NtQueryInformationFile
207 typedef enum _FILE_INFORMATION_CLASS
209 FileDirectoryInformation
= 1,
210 FileFullDirectoryInformation
,
211 FileBothDirectoryInformation
,
212 FileBasicInformation
,
213 FileStandardInformation
,
214 FileInternalInformation
,
216 FileAccessInformation
,
218 FileRenameInformation
,
220 FileNamesInformation
,
221 FileDispositionInformation
,
222 FilePositionInformation
,
223 FileFullEaInformation
,
225 FileAlignmentInformation
,
227 FileAllocationInformation
,
228 FileEndOfFileInformation
,
229 FileAlternateNameInformation
,
230 FileStreamInformation
,
232 FilePipeLocalInformation
,
233 FilePipeRemoteInformation
,
234 FileMailslotQueryInformation
,
235 FileMailslotSetInformation
,
236 FileCompressionInformation
,
237 FileObjectIdInformation
,
238 FileCompletionInformation
,
239 FileMoveClusterInformation
,
240 FileQuotaInformation
,
241 FileReparsePointInformation
,
242 FileNetworkOpenInformation
,
243 FileAttributeTagInformation
,
244 FileTrackingInformation
,
245 FileIdBothDirectoryInformation
,
246 FileIdFullDirectoryInformation
,
247 FileValidDataLengthInformation
,
248 FileShortNameInformation
,
249 FileMaximumInformation
250 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
253 // File Information Classes for NtQueryInformationFileSystem
255 typedef enum _FSINFOCLASS
257 FileFsVolumeInformation
= 1,
258 FileFsLabelInformation
,
259 FileFsSizeInformation
,
260 FileFsDeviceInformation
,
261 FileFsAttributeInformation
,
262 FileFsControlInformation
,
263 FileFsFullSizeInformation
,
264 FileFsObjectIdInformation
,
265 FileFsDriverPathInformation
,
266 FileFsMaximumInformation
267 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
272 // Device Node States
274 typedef enum _PNP_DEVNODE_STATE
276 DeviceNodeUnspecified
= 0x300,
277 DeviceNodeUninitialized
= 0x301,
278 DeviceNodeInitialized
= 0x302,
279 DeviceNodeDriversAdded
= 0x303,
280 DeviceNodeResourcesAssigned
= 0x304,
281 DeviceNodeStartPending
= 0x305,
282 DeviceNodeStartCompletion
= 0x306,
283 DeviceNodeStartPostWork
= 0x307,
284 DeviceNodeStarted
= 0x308,
285 DeviceNodeQueryStopped
= 0x309,
286 DeviceNodeStopped
= 0x30a,
287 DeviceNodeRestartCompletion
= 0x30b,
288 DeviceNodeEnumeratePending
= 0x30c,
289 DeviceNodeEnumerateCompletion
= 0x30d,
290 DeviceNodeAwaitingQueuedDeletion
= 0x30e,
291 DeviceNodeAwaitingQueuedRemoval
= 0x30f,
292 DeviceNodeQueryRemoved
= 0x310,
293 DeviceNodeRemovePendingCloses
= 0x311,
294 DeviceNodeRemoved
= 0x312,
295 DeviceNodeDeletePendingCloses
= 0x313,
296 DeviceNodeDeleted
= 0x314,
297 MaxDeviceNodeState
= 0x315,
300 #ifdef NTOS_MODE_USER
303 // File Information structures for NtQueryInformationFile
305 typedef struct _FILE_BASIC_INFORMATION
307 LARGE_INTEGER CreationTime
;
308 LARGE_INTEGER LastAccessTime
;
309 LARGE_INTEGER LastWriteTime
;
310 LARGE_INTEGER ChangeTime
;
311 ULONG FileAttributes
;
312 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
314 typedef struct _FILE_STANDARD_INFORMATION
316 LARGE_INTEGER AllocationSize
;
317 LARGE_INTEGER EndOfFile
;
319 BOOLEAN DeletePending
;
321 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
323 typedef struct _FILE_NETWORK_OPEN_INFORMATION
325 LARGE_INTEGER CreationTime
;
326 LARGE_INTEGER LastAccessTime
;
327 LARGE_INTEGER LastWriteTime
;
328 LARGE_INTEGER ChangeTime
;
329 LARGE_INTEGER AllocationSize
;
330 LARGE_INTEGER EndOfFile
;
331 ULONG FileAttributes
;
332 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
334 typedef struct _FILE_EA_INFORMATION
337 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
339 typedef struct _FILE_COMPRESSION_INFORMATION
341 LARGE_INTEGER CompressedFileSize
;
342 USHORT CompressionFormat
;
343 UCHAR CompressionUnitShift
;
347 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
349 typedef struct _FILE_POSITION_INFORMATION
351 LARGE_INTEGER CurrentByteOffset
;
352 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
354 typedef struct _FILE_DISPOSITION_INFORMATION
357 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
359 typedef struct _FILE_FULL_EA_INFORMATION
361 ULONG NextEntryOffset
;
364 USHORT EaValueLength
;
366 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
368 typedef struct _FILE_QUOTA_INFORMATION
370 ULONG NextEntryOffset
;
372 LARGE_INTEGER ChangeTime
;
373 LARGE_INTEGER QuotaUsed
;
374 LARGE_INTEGER QuotaThreshold
;
375 LARGE_INTEGER QuotaLimit
;
377 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
379 typedef struct _FILE_INTERNAL_INFORMATION
381 LARGE_INTEGER IndexNumber
;
382 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
384 typedef struct _FILE_RENAME_INFORMATION
386 BOOLEAN ReplaceIfExists
;
387 HANDLE RootDirectory
;
388 ULONG FileNameLength
;
390 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
392 typedef struct _FILE_PIPE_INFORMATION
395 ULONG CompletionMode
;
396 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
398 typedef struct _FILE_PIPE_LOCAL_INFORMATION
401 ULONG NamedPipeConfiguration
;
402 ULONG MaximumInstances
;
403 ULONG CurrentInstances
;
405 ULONG ReadDataAvailable
;
407 ULONG WriteQuotaAvailable
;
408 ULONG NamedPipeState
;
410 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
412 typedef struct _FILE_PIPE_REMOTE_INFORMATION
414 LARGE_INTEGER CollectDataTime
;
415 ULONG MaximumCollectionCount
;
416 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
418 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
420 ULONG MaximumMessageSize
;
422 ULONG NextMessageSize
;
423 ULONG MessagesAvailable
;
424 LARGE_INTEGER ReadTimeout
;
425 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
427 typedef struct _FILE_MAILSLOT_SET_INFORMATION
429 PLARGE_INTEGER ReadTimeout
;
430 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
432 typedef struct _FILE_BOTH_DIR_INFORMATION
434 ULONG NextEntryOffset
;
436 LARGE_INTEGER CreationTime
;
437 LARGE_INTEGER LastAccessTime
;
438 LARGE_INTEGER LastWriteTime
;
439 LARGE_INTEGER ChangeTime
;
440 LARGE_INTEGER EndOfFile
;
441 LARGE_INTEGER AllocationSize
;
442 ULONG FileAttributes
;
443 ULONG FileNameLength
;
445 CCHAR ShortNameLength
;
448 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
450 typedef struct _FILE_COMPLETION_INFORMATION
454 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
456 typedef struct _FILE_LINK_INFORMATION
458 BOOLEAN ReplaceIfExists
;
459 HANDLE RootDirectory
;
460 ULONG FileNameLength
;
462 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
464 typedef struct _FILE_NAME_INFORMATION
466 ULONG FileNameLength
;
468 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
470 typedef struct _FILE_ALLOCATION_INFORMATION
472 LARGE_INTEGER AllocationSize
;
473 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
475 typedef struct _FILE_END_OF_FILE_INFORMATION
477 LARGE_INTEGER EndOfFile
;
478 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
480 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
482 LARGE_INTEGER ValidDataLength
;
483 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
486 // File System Information structures for NtQueryInformationFile
488 typedef struct _FILE_FS_DEVICE_INFORMATION
490 DEVICE_TYPE DeviceType
;
491 ULONG Characteristics
;
492 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
494 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
496 ULONG FileSystemAttributes
;
497 ULONG MaximumComponentNameLength
;
498 ULONG FileSystemNameLength
;
499 WCHAR FileSystemName
[1];
500 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
502 typedef struct _FILE_FS_SIZE_INFORMATION
504 LARGE_INTEGER TotalAllocationUnits
;
505 LARGE_INTEGER AvailableAllocationUnits
;
506 ULONG SectorsPerAllocationUnit
;
507 ULONG BytesPerSector
;
508 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
510 typedef struct _FILE_FS_LABEL_INFORMATION
512 ULONG VolumeLabelLength
;
513 WCHAR VolumeLabel
[1];
514 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
516 typedef struct _FILE_FS_VOLUME_INFORMATION
518 LARGE_INTEGER VolumeCreationTime
;
519 ULONG VolumeSerialNumber
;
520 ULONG VolumeLabelLength
;
521 BOOLEAN SupportsObjects
;
522 WCHAR VolumeLabel
[1];
523 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
526 // Pipe Structures for IOCTL_PIPE_XXX
528 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
530 LARGE_INTEGER Timeout
;
532 BOOLEAN TimeoutSpecified
;
534 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
536 typedef struct _FILE_PIPE_PEEK_BUFFER
538 ULONG NamedPipeState
;
539 ULONG ReadDataAvailable
;
540 ULONG NumberOfMessages
;
543 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
548 typedef struct _IO_STATUS_BLOCK
555 ULONG_PTR Information
;
556 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
559 // I/O Error Log Structures
561 typedef struct _IO_ERROR_LOG_PACKET
563 UCHAR MajorFunctionCode
;
566 USHORT NumberOfStrings
;
568 USHORT EventCategory
;
570 ULONG UniqueErrorValue
;
571 NTSTATUS FinalStatus
;
572 ULONG SequenceNumber
;
574 LARGE_INTEGER DeviceOffset
;
576 }IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
578 typedef struct _IO_ERROR_LOG_MESSAGE
582 USHORT DriverNameLength
;
583 LARGE_INTEGER TimeStamp
;
584 ULONG DriverNameOffset
;
585 IO_ERROR_LOG_PACKET EntryData
;
586 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
591 // Parameters for NtCreateMailslotFile/NtCreateNamedPipeFile
593 typedef struct _MAILSLOT_CREATE_PARAMETERS
596 ULONG MaximumMessageSize
;
597 LARGE_INTEGER ReadTimeout
;
598 BOOLEAN TimeoutSpecified
;
599 } MAILSLOT_CREATE_PARAMETERS
, *PMAILSLOT_CREATE_PARAMETERS
;
601 typedef struct _NAMED_PIPE_CREATE_PARAMETERS
605 ULONG CompletionMode
;
606 ULONG MaximumInstances
;
609 LARGE_INTEGER DefaultTimeout
;
610 BOOLEAN TimeoutSpecified
;
611 } NAMED_PIPE_CREATE_PARAMETERS
, *PNAMED_PIPE_CREATE_PARAMETERS
;
613 #ifndef NTOS_MODE_USER
618 typedef struct _IO_TIMER
622 LIST_ENTRY IoTimerList
;
623 PIO_TIMER_ROUTINE TimerRoutine
;
625 PDEVICE_OBJECT DeviceObject
;
626 } IO_TIMER
, *PIO_TIMER
;
631 typedef struct _DEVICE_NODE
633 struct _DEVICE_NODE
*Parent
;
634 struct _DEVICE_NODE
*PrevSibling
;
635 struct _DEVICE_NODE
*NextSibling
;
636 struct _DEVICE_NODE
*Child
;
638 struct _PO_DEVICE_NOTIFY
*Notify
;
639 PNP_DEVNODE_STATE State
;
640 PNP_DEVNODE_STATE PreviousState
;
641 PNP_DEVNODE_STATE StateHistory
[20];
642 ULONG StateHistoryEntry
;
643 INT CompletionStatus
;
648 PDEVICE_OBJECT PhysicalDeviceObject
;
649 PCM_RESOURCE_LIST ResourceList
;
650 PCM_RESOURCE_LIST ResourceListTranslated
;
651 UNICODE_STRING InstancePath
;
652 UNICODE_STRING ServiceName
;
653 PDEVICE_OBJECT DuplicatePDO
;
654 PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements
;
655 INTERFACE_TYPE InterfaceType
;
657 INTERFACE_TYPE ChildInterfaceType
;
658 ULONG ChildBusNumber
;
659 USHORT ChildBusTypeIndex
;
661 UCHAR HardwareRemovalPolicy
;
662 LIST_ENTRY TargetDeviceNotify
;
663 LIST_ENTRY DeviceArbiterList
;
664 LIST_ENTRY DeviceTranslatorList
;
665 USHORT NoTranslatorMask
;
666 USHORT QueryTranslatorMask
;
667 USHORT NoArbiterMask
;
668 USHORT QueryArbiterMask
;
671 struct _DEVICE_NODE
*LegacyDeviceNode
;
672 PDEVICE_RELATIONS PendingDeviceRelations
;
676 struct _DEVICE_NODE
*NextResourceDeviceNode
;
678 PCM_RESOURCE_LIST BootResources
;
679 ULONG CapabilityFlags
;
683 LIST_ENTRY ListEntry
;
686 ULONG DisableableDepends
;
687 LIST_ENTRY PendedSetInterfaceState
;
688 LIST_ENTRY LegacyBusListEntry
;
689 ULONG DriverUnloadRetryCount
;
690 struct _DEVICE_NODE
*PreviousParent
;
691 ULONG DeletedChidren
;
692 } DEVICE_NODE
, *PDEVICE_NODE
;
695 // Resource Aribtrer Entry
697 typedef struct _PI_RESOURCE_ARBITER_ENTRY
699 LIST_ENTRY DeviceArbiterList
;
701 PARBITER_INTERFACE ArbiterInterface
;
703 LIST_ENTRY ResourceList
;
704 LIST_ENTRY BestResourceList
;
705 LIST_ENTRY BestConfig
;
706 LIST_ENTRY ActiveArbiterList
;
708 UCHAR ResourcesChanged
;
709 } PI_RESOURCE_ARBITER_ENTRY
, *PPI_RESOURCE_ARBITER_ENTRY
;
712 // Extended Device Object Extension Structure
714 typedef struct _EXTENDED_DEVOBJ_EXTENSION
718 PDEVICE_OBJECT DeviceObject
;
720 struct DEVICE_OBJECT_POWER_EXTENSION
*Dope
;
721 ULONG ExtensionFlags
;
722 struct _DEVICE_NODE
*DeviceNode
;
723 PDEVICE_OBJECT AttachedTo
;
728 } EXTENDED_DEVOBJ_EXTENSION
, *PEXTENDED_DEVOBJ_EXTENSION
;
731 // Private Driver Extension Descriptor
733 typedef struct _PRIVATE_DRIVER_EXTENSIONS
735 struct _PRIVATE_DRIVER_EXTENSIONS
*Link
;
736 PVOID ClientIdentificationAddress
;
738 } PRIVATE_DRIVER_EXTENSIONS
, *PPRIVATE_DRIVER_EXTENSIONS
;
741 // Extended I/O Stack Location Structure
743 #if !defined(_ALPHA_)
744 #include <pshpack4.h>
746 typedef struct _EXTENDED_IO_STACK_LOCATION
756 PIO_SECURITY_CONTEXT SecurityContext
;
758 USHORT FileAttributes
;
764 PIO_SECURITY_CONTEXT SecurityContext
;
768 struct _NAMED_PIPE_CREATE_PARAMETERS
*Parameters
;
772 PIO_SECURITY_CONTEXT SecurityContext
;
776 struct _MAILSLOT_CREATE_PARAMETERS
*Parameters
;
782 LARGE_INTEGER ByteOffset
;
788 LARGE_INTEGER ByteOffset
;
793 PUNICODE_STRING FileName
;
794 FILE_INFORMATION_CLASS FileInformationClass
;
800 ULONG CompletionFilter
;
805 FILE_INFORMATION_CLASS FileInformationClass
;
810 FILE_INFORMATION_CLASS FileInformationClass
;
811 PFILE_OBJECT FileObject
;
816 BOOLEAN ReplaceIfExists
;
837 FS_INFORMATION_CLASS FsInformationClass
;
842 FS_INFORMATION_CLASS FsInformationClass
;
846 ULONG OutputBufferLength
;
847 ULONG InputBufferLength
;
849 PVOID Type3InputBuffer
;
853 PLARGE_INTEGER Length
;
855 LARGE_INTEGER ByteOffset
;
859 ULONG OutputBufferLength
;
860 ULONG InputBufferLength
;
862 PVOID Type3InputBuffer
;
866 SECURITY_INFORMATION SecurityInformation
;
867 ULONG POINTER_ALIGNMENT Length
;
871 SECURITY_INFORMATION SecurityInformation
;
872 PSECURITY_DESCRIPTOR SecurityDescriptor
;
877 PDEVICE_OBJECT DeviceObject
;
882 PDEVICE_OBJECT DeviceObject
;
886 struct _SCSI_REQUEST_BLOCK
*Srb
;
892 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
901 DEVICE_RELATION_TYPE Type
;
902 } QueryDeviceRelations
;
905 CONST GUID
*InterfaceType
;
908 PINTERFACE Interface
;
909 PVOID InterfaceSpecificData
;
913 PDEVICE_CAPABILITIES Capabilities
;
914 } DeviceCapabilities
;
917 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
918 } FilterResourceRequirements
;
932 BUS_QUERY_ID_TYPE IdType
;
936 DEVICE_TEXT_TYPE DeviceTextType
;
943 DEVICE_USAGE_NOTIFICATION_TYPE Type
;
947 SYSTEM_POWER_STATE PowerState
;
951 PPOWER_SEQUENCE PowerSequence
;
956 POWER_STATE_TYPE Type
;
958 POWER_ACTION ShutdownType
;
962 PCM_RESOURCE_LIST AllocatedResources
;
963 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
967 ULONG_PTR ProviderId
;
980 PDEVICE_OBJECT DeviceObject
;
981 PFILE_OBJECT FileObject
;
982 PIO_COMPLETION_ROUTINE CompletionRoutine
;
984 } EXTENDED_IO_STACK_LOCATION
, *PEXTENDED_IO_STACK_LOCATION
;
985 #if !defined(_ALPHA_)
991 // APC Callback for NtCreateFile
994 (NTAPI
*PIO_APC_ROUTINE
)(
996 IN PIO_STATUS_BLOCK IoStatusBlock
,
999 #ifdef NTOS_MODE_USER
1002 // Mailslot IOCTL Codes
1004 #define FSCTL_MAILSLOT_PEEK \
1005 CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
1010 #define FSCTL_PIPE_ASSIGN_EVENT \
1011 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
1012 #define FSCTL_PIPE_DISCONNECT \
1013 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
1014 #define FSCTL_PIPE_LISTEN \
1015 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
1016 #define FSCTL_PIPE_PEEK \
1017 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
1018 #define FSCTL_PIPE_QUERY_EVENT \
1019 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
1020 #define FSCTL_PIPE_TRANSCEIVE \
1021 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1022 #define FSCTL_PIPE_WAIT \
1023 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
1024 #define FSCTL_PIPE_IMPERSONATE \
1025 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
1026 #define FSCTL_PIPE_SET_CLIENT_PROCESS \
1027 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
1028 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS \
1029 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
1030 #define FSCTL_PIPE_INTERNAL_READ \
1031 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
1032 #define FSCTL_PIPE_INTERNAL_WRITE \
1033 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
1034 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE \
1035 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1036 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW \
1037 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
1042 #define IOCTL_TAPE_ERASE \
1043 CTL_CODE(FILE_DEVICE_TAPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1044 #define IOCTL_TAPE_PREPARE \
1045 CTL_CODE(FILE_DEVICE_TAPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS)
1046 #define IOCTL_TAPE_WRITE_MARKS \
1047 CTL_CODE(FILE_DEVICE_TAPE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1048 #define IOCTL_TAPE_GET_POSITION \
1049 CTL_CODE(FILE_DEVICE_TAPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS)
1050 #define IOCTL_TAPE_SET_POSITION \
1051 CTL_CODE(FILE_DEVICE_TAPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS)
1052 #define IOCTL_TAPE_GET_DRIVE_PARAMS \
1053 CTL_CODE(FILE_DEVICE_TAPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS)
1054 #define IOCTL_TAPE_SET_DRIVE_PARAMS \
1055 CTL_CODE(FILE_DEVICE_TAPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1056 #define IOCTL_TAPE_GET_MEDIA_PARAMS \
1057 CTL_CODE(FILE_DEVICE_TAPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS)
1058 #define IOCTL_TAPE_SET_MEDIA_PARAMS \
1059 CTL_CODE(FILE_DEVICE_TAPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
1060 #define IOCTL_TAPE_GET_STATUS \
1061 CTL_CODE(FILE_DEVICE_TAPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS)
1062 #define IOCTL_TAPE_CREATE_PARTITION \
1063 CTL_CODE(FILE_DEVICE_TAPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1065 #endif // NTOS_MODE_USER