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
26 #ifndef NTOS_MODE_USER
29 // Kernel Exported Object Types
31 extern POBJECT_TYPE NTSYSAPI IoAdapterObjectType
;
32 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType
;
33 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType
;
34 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType
;
39 // Symbolic Link Access Rights
41 #define SYMBOLIC_LINK_QUERY 0x0001
42 #define SYMBOLIC_LINK_ALL_ACCESS STANDARD_RIGHTS_REQUIRED | 0x0001
46 // NtCreateFile Result Flags
48 #define FILE_SUPERSEDED 0x00000000
49 #define FILE_OPENED 0x00000001
50 #define FILE_CREATED 0x00000002
51 #define FILE_OVERWRITTEN 0x00000003
52 #define FILE_EXISTS 0x00000004
53 #define FILE_DOES_NOT_EXIST 0x00000005
58 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
59 #define FILE_PIPE_MESSAGE_TYPE 0x00000001
60 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
61 #define FILE_PIPE_MESSAGE_MODE 0x00000001
62 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
63 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
64 #define FILE_PIPE_INBOUND 0x00000000
65 #define FILE_PIPE_OUTBOUND 0x00000001
66 #define FILE_PIPE_FULL_DUPLEX 0x00000002
67 #define FILE_PIPE_CLIENT_END 0x00000000
68 #define FILE_PIPE_SERVER_END 0x00000001
71 // NtCreateFile Attributes
73 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
74 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
77 // NtCreateFile OpenType Flags
79 #define FILE_SUPERSEDE 0x00000000
80 #define FILE_OPEN 0x00000001
81 #define FILE_CREATE 0x00000002
82 #define FILE_OPEN_IF 0x00000003
83 #define FILE_OVERWRITE 0x00000004
84 #define FILE_OVERWRITE_IF 0x00000005
85 #define FILE_MAXIMUM_DISPOSITION 0x00000005
90 #define FILE_DIRECTORY_FILE 0x00000001
91 #define FILE_WRITE_THROUGH 0x00000002
92 #define FILE_SEQUENTIAL_ONLY 0x00000004
93 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
94 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
95 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
96 #define FILE_NON_DIRECTORY_FILE 0x00000040
97 #define FILE_CREATE_TREE_CONNECTION 0x00000080
98 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
99 #define FILE_NO_EA_KNOWLEDGE 0x00000200
100 #define FILE_OPEN_FOR_RECOVERY 0x00000400
101 #define FILE_RANDOM_ACCESS 0x00000800
102 #define FILE_DELETE_ON_CLOSE 0x00001000
103 #define FILE_OPEN_BY_FILE_ID 0x00002000
104 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
105 #define FILE_NO_COMPRESSION 0x00008000
106 #define FILE_RESERVE_OPFILTER 0x00100000
107 #define FILE_OPEN_REPARSE_POINT 0x00200000
108 #define FILE_OPEN_NO_RECALL 0x00400000
109 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
112 // Device Charactertics
114 #define FILE_REMOVABLE_MEDIA 0x00000001
115 #define FILE_REMOTE_DEVICE 0x00000010
118 // Device Object Extension Flags
120 #define DOE_UNLOAD_PENDING 0x1
121 #define DOE_DELETE_PENDING 0x2
122 #define DOE_REMOVE_PENDING 0x4
123 #define DOE_REMOVE_PROCESSED 0x8
124 #define DOE_START_PENDING 0x10
129 #define DNF_PROCESSED 0x00000001
130 #define DNF_STARTED 0x00000002
131 #define DNF_START_FAILED 0x00000004
132 #define DNF_ENUMERATED 0x00000008
133 #define DNF_DELETED 0x00000010
134 #define DNF_MADEUP 0x00000020
135 #define DNF_START_REQUEST_PENDING 0x00000040
136 #define DNF_NO_RESOURCE_REQUIRED 0x00000080
137 #define DNF_INSUFFICIENT_RESOURCES 0x00000100
138 #define DNF_RESOURCE_ASSIGNED 0x00000200
139 #define DNF_RESOURCE_REPORTED 0x00000400
140 #define DNF_HAL_NODE 0x00000800 // ???
141 #define DNF_ADDED 0x00001000
142 #define DNF_ADD_FAILED 0x00002000
143 #define DNF_LEGACY_DRIVER 0x00004000
144 #define DNF_STOPPED 0x00008000
145 #define DNF_WILL_BE_REMOVED 0x00010000
146 #define DNF_NEED_TO_ENUM 0x00020000
147 #define DNF_NOT_CONFIGURED 0x00040000
148 #define DNF_REINSTALL 0x00080000
149 #define DNF_RESOURCE_REQUIREMENTS_NEED_FILTERED 0x00100000 // ???
150 #define DNF_DISABLED 0x00200000
151 #define DNF_RESTART_OK 0x00400000
152 #define DNF_NEED_RESTART 0x00800000
153 #define DNF_VISITED 0x01000000
154 #define DNF_ASSIGNING_RESOURCES 0x02000000
155 #define DNF_BEEING_ENUMERATED 0x04000000
156 #define DNF_NEED_ENUMERATION_ONLY 0x08000000
157 #define DNF_LOCKED 0x10000000
158 #define DNF_HAS_BOOT_CONFIG 0x20000000
159 #define DNF_BOOT_CONFIG_RESERVED 0x40000000
160 #define DNF_HAS_PROBLEM 0x80000000 // ???
163 // Device Node User Flags
165 #define DNUF_DONT_SHOW_IN_UI 0x0002
166 #define DNUF_NOT_DISABLEABLE 0x0008
169 // I/O Completion Information Class for NtQueryIoCompletionInformation
171 typedef enum _IO_COMPLETION_INFORMATION_CLASS
173 IoCompletionBasicInformation
174 } IO_COMPLETION_INFORMATION_CLASS
;
176 #ifdef NTOS_MODE_USER
179 // Hardware Interface Type
181 typedef enum _INTERFACE_TYPE
183 InterfaceTypeUndefined
= -1,
201 }INTERFACE_TYPE
, *PINTERFACE_TYPE
;
204 // File Information Classes for NtQueryInformationFile
206 typedef enum _FILE_INFORMATION_CLASS
208 FileDirectoryInformation
= 1,
209 FileFullDirectoryInformation
,
210 FileBothDirectoryInformation
,
211 FileBasicInformation
,
212 FileStandardInformation
,
213 FileInternalInformation
,
215 FileAccessInformation
,
217 FileRenameInformation
,
219 FileNamesInformation
,
220 FileDispositionInformation
,
221 FilePositionInformation
,
222 FileFullEaInformation
,
224 FileAlignmentInformation
,
226 FileAllocationInformation
,
227 FileEndOfFileInformation
,
228 FileAlternateNameInformation
,
229 FileStreamInformation
,
231 FilePipeLocalInformation
,
232 FilePipeRemoteInformation
,
233 FileMailslotQueryInformation
,
234 FileMailslotSetInformation
,
235 FileCompressionInformation
,
236 FileObjectIdInformation
,
237 FileCompletionInformation
,
238 FileMoveClusterInformation
,
239 FileQuotaInformation
,
240 FileReparsePointInformation
,
241 FileNetworkOpenInformation
,
242 FileAttributeTagInformation
,
243 FileTrackingInformation
,
244 FileIdBothDirectoryInformation
,
245 FileIdFullDirectoryInformation
,
246 FileValidDataLengthInformation
,
247 FileShortNameInformation
,
248 FileMaximumInformation
249 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
252 // File Information Classes for NtQueryInformationFileSystem
254 typedef enum _FSINFOCLASS
256 FileFsVolumeInformation
= 1,
257 FileFsLabelInformation
,
258 FileFsSizeInformation
,
259 FileFsDeviceInformation
,
260 FileFsAttributeInformation
,
261 FileFsControlInformation
,
262 FileFsFullSizeInformation
,
263 FileFsObjectIdInformation
,
264 FileFsDriverPathInformation
,
265 FileFsMaximumInformation
266 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
271 // Device Node States
273 typedef enum _PNP_DEVNODE_STATE
275 DeviceNodeUnspecified
= 0x300,
276 DeviceNodeUninitialized
= 0x301,
277 DeviceNodeInitialized
= 0x302,
278 DeviceNodeDriversAdded
= 0x303,
279 DeviceNodeResourcesAssigned
= 0x304,
280 DeviceNodeStartPending
= 0x305,
281 DeviceNodeStartCompletion
= 0x306,
282 DeviceNodeStartPostWork
= 0x307,
283 DeviceNodeStarted
= 0x308,
284 DeviceNodeQueryStopped
= 0x309,
285 DeviceNodeStopped
= 0x30a,
286 DeviceNodeRestartCompletion
= 0x30b,
287 DeviceNodeEnumeratePending
= 0x30c,
288 DeviceNodeEnumerateCompletion
= 0x30d,
289 DeviceNodeAwaitingQueuedDeletion
= 0x30e,
290 DeviceNodeAwaitingQueuedRemoval
= 0x30f,
291 DeviceNodeQueryRemoved
= 0x310,
292 DeviceNodeRemovePendingCloses
= 0x311,
293 DeviceNodeRemoved
= 0x312,
294 DeviceNodeDeletePendingCloses
= 0x313,
295 DeviceNodeDeleted
= 0x314,
296 MaxDeviceNodeState
= 0x315,
299 #ifdef NTOS_MODE_USER
302 // File Information structures for NtQueryInformationFile
304 typedef struct _FILE_BASIC_INFORMATION
306 LARGE_INTEGER CreationTime
;
307 LARGE_INTEGER LastAccessTime
;
308 LARGE_INTEGER LastWriteTime
;
309 LARGE_INTEGER ChangeTime
;
310 ULONG FileAttributes
;
311 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
313 typedef struct _FILE_STANDARD_INFORMATION
315 LARGE_INTEGER AllocationSize
;
316 LARGE_INTEGER EndOfFile
;
318 BOOLEAN DeletePending
;
320 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
322 typedef struct _FILE_NETWORK_OPEN_INFORMATION
324 LARGE_INTEGER CreationTime
;
325 LARGE_INTEGER LastAccessTime
;
326 LARGE_INTEGER LastWriteTime
;
327 LARGE_INTEGER ChangeTime
;
328 LARGE_INTEGER AllocationSize
;
329 LARGE_INTEGER EndOfFile
;
330 ULONG FileAttributes
;
331 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
333 typedef struct _FILE_EA_INFORMATION
336 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
338 typedef struct _FILE_COMPRESSION_INFORMATION
340 LARGE_INTEGER CompressedFileSize
;
341 USHORT CompressionFormat
;
342 UCHAR CompressionUnitShift
;
346 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
348 typedef struct _FILE_POSITION_INFORMATION
350 LARGE_INTEGER CurrentByteOffset
;
351 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
353 typedef struct _FILE_DISPOSITION_INFORMATION
356 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
358 typedef struct _FILE_FULL_EA_INFORMATION
360 ULONG NextEntryOffset
;
363 USHORT EaValueLength
;
365 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
367 typedef struct _FILE_QUOTA_INFORMATION
369 ULONG NextEntryOffset
;
371 LARGE_INTEGER ChangeTime
;
372 LARGE_INTEGER QuotaUsed
;
373 LARGE_INTEGER QuotaThreshold
;
374 LARGE_INTEGER QuotaLimit
;
376 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
378 typedef struct _FILE_INTERNAL_INFORMATION
380 LARGE_INTEGER IndexNumber
;
381 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
383 typedef struct _FILE_RENAME_INFORMATION
385 BOOLEAN ReplaceIfExists
;
386 HANDLE RootDirectory
;
387 ULONG FileNameLength
;
389 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
391 typedef struct _FILE_PIPE_INFORMATION
394 ULONG CompletionMode
;
395 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
397 typedef struct _FILE_PIPE_LOCAL_INFORMATION
400 ULONG NamedPipeConfiguration
;
401 ULONG MaximumInstances
;
402 ULONG CurrentInstances
;
404 ULONG ReadDataAvailable
;
406 ULONG WriteQuotaAvailable
;
407 ULONG NamedPipeState
;
409 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
411 typedef struct _FILE_PIPE_REMOTE_INFORMATION
413 LARGE_INTEGER CollectDataTime
;
414 ULONG MaximumCollectionCount
;
415 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
417 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
419 ULONG MaximumMessageSize
;
421 ULONG NextMessageSize
;
422 ULONG MessagesAvailable
;
423 LARGE_INTEGER ReadTimeout
;
424 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
426 typedef struct _FILE_MAILSLOT_SET_INFORMATION
428 PLARGE_INTEGER ReadTimeout
;
429 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
431 typedef struct _FILE_BOTH_DIR_INFORMATION
433 ULONG NextEntryOffset
;
435 LARGE_INTEGER CreationTime
;
436 LARGE_INTEGER LastAccessTime
;
437 LARGE_INTEGER LastWriteTime
;
438 LARGE_INTEGER ChangeTime
;
439 LARGE_INTEGER EndOfFile
;
440 LARGE_INTEGER AllocationSize
;
441 ULONG FileAttributes
;
442 ULONG FileNameLength
;
444 CCHAR ShortNameLength
;
447 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
449 typedef struct _FILE_COMPLETION_INFORMATION
453 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
455 typedef struct _FILE_LINK_INFORMATION
457 BOOLEAN ReplaceIfExists
;
458 HANDLE RootDirectory
;
459 ULONG FileNameLength
;
461 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
463 typedef struct _FILE_NAME_INFORMATION
465 ULONG FileNameLength
;
467 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
469 typedef struct _FILE_ALLOCATION_INFORMATION
471 LARGE_INTEGER AllocationSize
;
472 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
474 typedef struct _FILE_END_OF_FILE_INFORMATION
476 LARGE_INTEGER EndOfFile
;
477 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
479 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
481 LARGE_INTEGER ValidDataLength
;
482 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
485 // File System Information structures for NtQueryInformationFile
487 typedef struct _FILE_FS_DEVICE_INFORMATION
489 DEVICE_TYPE DeviceType
;
490 ULONG Characteristics
;
491 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
493 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
495 ULONG FileSystemAttributes
;
496 ULONG MaximumComponentNameLength
;
497 ULONG FileSystemNameLength
;
498 WCHAR FileSystemName
[1];
499 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
501 typedef struct _FILE_FS_SIZE_INFORMATION
503 LARGE_INTEGER TotalAllocationUnits
;
504 LARGE_INTEGER AvailableAllocationUnits
;
505 ULONG SectorsPerAllocationUnit
;
506 ULONG BytesPerSector
;
507 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
509 typedef struct _FILE_FS_LABEL_INFORMATION
511 ULONG VolumeLabelLength
;
512 WCHAR VolumeLabel
[1];
513 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
515 typedef struct _FILE_FS_VOLUME_INFORMATION
517 LARGE_INTEGER VolumeCreationTime
;
518 ULONG VolumeSerialNumber
;
519 ULONG VolumeLabelLength
;
520 BOOLEAN SupportsObjects
;
521 WCHAR VolumeLabel
[1];
522 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
525 // Pipe Structures for IOCTL_PIPE_XXX
527 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
529 LARGE_INTEGER Timeout
;
531 BOOLEAN TimeoutSpecified
;
533 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
535 typedef struct _FILE_PIPE_PEEK_BUFFER
537 ULONG NamedPipeState
;
538 ULONG ReadDataAvailable
;
539 ULONG NumberOfMessages
;
542 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
547 typedef struct _IO_STATUS_BLOCK
554 ULONG_PTR Information
;
555 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
558 // I/O Error Log Structures
560 typedef struct _IO_ERROR_LOG_PACKET
562 UCHAR MajorFunctionCode
;
565 USHORT NumberOfStrings
;
567 USHORT EventCategory
;
569 ULONG UniqueErrorValue
;
570 NTSTATUS FinalStatus
;
571 ULONG SequenceNumber
;
573 LARGE_INTEGER DeviceOffset
;
575 }IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
577 typedef struct _IO_ERROR_LOG_MESSAGE
581 USHORT DriverNameLength
;
582 LARGE_INTEGER TimeStamp
;
583 ULONG DriverNameOffset
;
584 IO_ERROR_LOG_PACKET EntryData
;
585 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
590 // Parameters for NtCreateMailslotFile/NtCreateNamedPipeFile
592 typedef struct _MAILSLOT_CREATE_PARAMETERS
595 ULONG MaximumMessageSize
;
596 LARGE_INTEGER ReadTimeout
;
597 BOOLEAN TimeoutSpecified
;
598 } MAILSLOT_CREATE_PARAMETERS
, *PMAILSLOT_CREATE_PARAMETERS
;
600 typedef struct _NAMED_PIPE_CREATE_PARAMETERS
604 ULONG CompletionMode
;
605 ULONG MaximumInstances
;
608 LARGE_INTEGER DefaultTimeout
;
609 BOOLEAN TimeoutSpecified
;
610 } NAMED_PIPE_CREATE_PARAMETERS
, *PNAMED_PIPE_CREATE_PARAMETERS
;
612 #ifndef NTOS_MODE_USER
617 typedef struct _IO_TIMER
621 LIST_ENTRY IoTimerList
;
622 PIO_TIMER_ROUTINE TimerRoutine
;
624 PDEVICE_OBJECT DeviceObject
;
625 } IO_TIMER
, *PIO_TIMER
;
630 typedef struct _DEVICE_NODE
632 struct _DEVICE_NODE
*Parent
;
633 struct _DEVICE_NODE
*PrevSibling
;
634 struct _DEVICE_NODE
*NextSibling
;
635 struct _DEVICE_NODE
*Child
;
637 struct _PO_DEVICE_NOTIFY
*Notify
;
638 PNP_DEVNODE_STATE State
;
639 PNP_DEVNODE_STATE PreviousState
;
640 PNP_DEVNODE_STATE StateHistory
[20];
641 ULONG StateHistoryEntry
;
642 INT CompletionStatus
;
647 PDEVICE_OBJECT PhysicalDeviceObject
;
648 PCM_RESOURCE_LIST ResourceList
;
649 PCM_RESOURCE_LIST ResourceListTranslated
;
650 UNICODE_STRING InstancePath
;
651 UNICODE_STRING ServiceName
;
652 PDEVICE_OBJECT DuplicatePDO
;
653 PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements
;
654 INTERFACE_TYPE InterfaceType
;
656 INTERFACE_TYPE ChildInterfaceType
;
657 ULONG ChildBusNumber
;
658 USHORT ChildBusTypeIndex
;
660 UCHAR HardwareRemovalPolicy
;
661 LIST_ENTRY TargetDeviceNotify
;
662 LIST_ENTRY DeviceArbiterList
;
663 LIST_ENTRY DeviceTranslatorList
;
664 USHORT NoTranslatorMask
;
665 USHORT QueryTranslatorMask
;
666 USHORT NoArbiterMask
;
667 USHORT QueryArbiterMask
;
670 struct _DEVICE_NODE
*LegacyDeviceNode
;
671 PDEVICE_RELATIONS PendingDeviceRelations
;
675 struct _DEVICE_NODE
*NextResourceDeviceNode
;
677 PCM_RESOURCE_LIST BootResources
;
678 ULONG CapabilityFlags
;
682 LIST_ENTRY ListEntry
;
685 ULONG DisableableDepends
;
686 LIST_ENTRY PendedSetInterfaceState
;
687 LIST_ENTRY LegacyBusListEntry
;
688 ULONG DriverUnloadRetryCount
;
689 struct _DEVICE_NODE
*PreviousParent
;
690 ULONG DeletedChidren
;
691 } DEVICE_NODE
, *PDEVICE_NODE
;
694 // Resource Aribtrer Entry
696 typedef struct _PI_RESOURCE_ARBITER_ENTRY
698 LIST_ENTRY DeviceArbiterList
;
700 PARBITER_INTERFACE ArbiterInterface
;
702 LIST_ENTRY ResourceList
;
703 LIST_ENTRY BestResourceList
;
704 LIST_ENTRY BestConfig
;
705 LIST_ENTRY ActiveArbiterList
;
707 UCHAR ResourcesChanged
;
708 } PI_RESOURCE_ARBITER_ENTRY
, *PPI_RESOURCE_ARBITER_ENTRY
;
711 // Extended Device Object Extension Structure
713 typedef struct _EXTENDED_DEVOBJ_EXTENSION
717 PDEVICE_OBJECT DeviceObject
;
719 struct DEVICE_OBJECT_POWER_EXTENSION
*Dope
;
720 ULONG ExtensionFlags
;
721 struct _DEVICE_NODE
*DeviceNode
;
722 PDEVICE_OBJECT AttachedTo
;
727 } EXTENDED_DEVOBJ_EXTENSION
, *PEXTENDED_DEVOBJ_EXTENSION
;
730 // Private Driver Extension Descriptor
732 typedef struct _PRIVATE_DRIVER_EXTENSIONS
734 struct _PRIVATE_DRIVER_EXTENSIONS
*Link
;
735 PVOID ClientIdentificationAddress
;
737 } PRIVATE_DRIVER_EXTENSIONS
, *PPRIVATE_DRIVER_EXTENSIONS
;
740 // Extended I/O Stack Location Structure
742 #if !defined(_ALPHA_)
743 #include <pshpack4.h>
745 typedef struct _EXTENDED_IO_STACK_LOCATION
755 PIO_SECURITY_CONTEXT SecurityContext
;
757 USHORT FileAttributes
;
763 PIO_SECURITY_CONTEXT SecurityContext
;
767 struct _NAMED_PIPE_CREATE_PARAMETERS
*Parameters
;
771 PIO_SECURITY_CONTEXT SecurityContext
;
775 struct _MAILSLOT_CREATE_PARAMETERS
*Parameters
;
781 LARGE_INTEGER ByteOffset
;
787 LARGE_INTEGER ByteOffset
;
792 PUNICODE_STRING FileName
;
793 FILE_INFORMATION_CLASS FileInformationClass
;
799 ULONG CompletionFilter
;
804 FILE_INFORMATION_CLASS FileInformationClass
;
809 FILE_INFORMATION_CLASS FileInformationClass
;
810 PFILE_OBJECT FileObject
;
815 BOOLEAN ReplaceIfExists
;
836 FS_INFORMATION_CLASS FsInformationClass
;
841 FS_INFORMATION_CLASS FsInformationClass
;
845 ULONG OutputBufferLength
;
846 ULONG InputBufferLength
;
848 PVOID Type3InputBuffer
;
852 PLARGE_INTEGER Length
;
854 LARGE_INTEGER ByteOffset
;
858 ULONG OutputBufferLength
;
859 ULONG InputBufferLength
;
861 PVOID Type3InputBuffer
;
865 SECURITY_INFORMATION SecurityInformation
;
866 ULONG POINTER_ALIGNMENT Length
;
870 SECURITY_INFORMATION SecurityInformation
;
871 PSECURITY_DESCRIPTOR SecurityDescriptor
;
876 PDEVICE_OBJECT DeviceObject
;
881 PDEVICE_OBJECT DeviceObject
;
885 struct _SCSI_REQUEST_BLOCK
*Srb
;
891 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
900 DEVICE_RELATION_TYPE Type
;
901 } QueryDeviceRelations
;
904 CONST GUID
*InterfaceType
;
907 PINTERFACE Interface
;
908 PVOID InterfaceSpecificData
;
912 PDEVICE_CAPABILITIES Capabilities
;
913 } DeviceCapabilities
;
916 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
917 } FilterResourceRequirements
;
931 BUS_QUERY_ID_TYPE IdType
;
935 DEVICE_TEXT_TYPE DeviceTextType
;
942 DEVICE_USAGE_NOTIFICATION_TYPE Type
;
946 SYSTEM_POWER_STATE PowerState
;
950 PPOWER_SEQUENCE PowerSequence
;
955 POWER_STATE_TYPE Type
;
957 POWER_ACTION ShutdownType
;
961 PCM_RESOURCE_LIST AllocatedResources
;
962 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
966 ULONG_PTR ProviderId
;
979 PDEVICE_OBJECT DeviceObject
;
980 PFILE_OBJECT FileObject
;
981 PIO_COMPLETION_ROUTINE CompletionRoutine
;
983 } EXTENDED_IO_STACK_LOCATION
, *PEXTENDED_IO_STACK_LOCATION
;
984 #if !defined(_ALPHA_)
990 // APC Callback for NtCreateFile
993 (NTAPI
*PIO_APC_ROUTINE
)(
995 IN PIO_STATUS_BLOCK IoStatusBlock
,
998 #ifdef NTOS_MODE_USER
1001 // Mailslot IOCTL Codes
1003 #define FSCTL_MAILSLOT_PEEK \
1004 CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
1009 #define FSCTL_PIPE_ASSIGN_EVENT \
1010 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
1011 #define FSCTL_PIPE_DISCONNECT \
1012 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
1013 #define FSCTL_PIPE_LISTEN \
1014 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
1015 #define FSCTL_PIPE_PEEK \
1016 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
1017 #define FSCTL_PIPE_QUERY_EVENT \
1018 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
1019 #define FSCTL_PIPE_TRANSCEIVE \
1020 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1021 #define FSCTL_PIPE_WAIT \
1022 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
1023 #define FSCTL_PIPE_IMPERSONATE \
1024 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
1025 #define FSCTL_PIPE_SET_CLIENT_PROCESS \
1026 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
1027 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS \
1028 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
1029 #define FSCTL_PIPE_INTERNAL_READ \
1030 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
1031 #define FSCTL_PIPE_INTERNAL_WRITE \
1032 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
1033 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE \
1034 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1035 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW \
1036 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
1041 #define IOCTL_TAPE_ERASE \
1042 CTL_CODE(FILE_DEVICE_TAPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1043 #define IOCTL_TAPE_PREPARE \
1044 CTL_CODE(FILE_DEVICE_TAPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS)
1045 #define IOCTL_TAPE_WRITE_MARKS \
1046 CTL_CODE(FILE_DEVICE_TAPE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1047 #define IOCTL_TAPE_GET_POSITION \
1048 CTL_CODE(FILE_DEVICE_TAPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS)
1049 #define IOCTL_TAPE_SET_POSITION \
1050 CTL_CODE(FILE_DEVICE_TAPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS)
1051 #define IOCTL_TAPE_GET_DRIVE_PARAMS \
1052 CTL_CODE(FILE_DEVICE_TAPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS)
1053 #define IOCTL_TAPE_SET_DRIVE_PARAMS \
1054 CTL_CODE(FILE_DEVICE_TAPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1055 #define IOCTL_TAPE_GET_MEDIA_PARAMS \
1056 CTL_CODE(FILE_DEVICE_TAPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS)
1057 #define IOCTL_TAPE_SET_MEDIA_PARAMS \
1058 CTL_CODE(FILE_DEVICE_TAPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
1059 #define IOCTL_TAPE_GET_STATUS \
1060 CTL_CODE(FILE_DEVICE_TAPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS)
1061 #define IOCTL_TAPE_CREATE_PARTITION \
1062 CTL_CODE(FILE_DEVICE_TAPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1064 #endif // NTOS_MODE_USER