2 * PROJECT: ReactOS Native Headers
3 * FILE: include/ndk/iotypes.h
4 * PURPOSE: Definitions for exported I/O Manager Types not defined in DDK/IFS
5 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
13 /* DEPENDENCIES **************************************************************/
15 /* EXPORTED DATA *************************************************************/
16 #ifndef NTOS_MODE_USER
17 extern POBJECT_TYPE NTOSAPI IoAdapterObjectType
;
18 extern POBJECT_TYPE NTOSAPI IoDeviceHandlerObjectType
;
19 extern POBJECT_TYPE NTOSAPI IoDeviceObjectType
;
20 extern POBJECT_TYPE NTOSAPI IoDriverObjectType
;
21 extern POBJECT_TYPE NTOSAPI IoFileObjectType
;
24 /* CONSTANTS *****************************************************************/
27 /* Object Access Rights */
28 #define SYMBOLIC_LINK_QUERY 0x0001
29 #define SYMBOLIC_LINK_ALL_ACCESS STANDARD_RIGHTS_REQUIRED | 0x0001
32 /* File Result Flags */
33 #define FILE_SUPERSEDED 0x00000000
34 #define FILE_OPENED 0x00000001
35 #define FILE_CREATED 0x00000002
36 #define FILE_OVERWRITTEN 0x00000003
37 #define FILE_EXISTS 0x00000004
38 #define FILE_DOES_NOT_EXIST 0x00000005
41 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
42 #define FILE_PIPE_MESSAGE_MODE 0x00000001
43 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
44 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
45 #define FILE_PIPE_INBOUND 0x00000000
46 #define FILE_PIPE_OUTBOUND 0x00000001
47 #define FILE_PIPE_FULL_DUPLEX 0x00000002
48 #define FILE_PIPE_CLIENT_END 0x00000000
49 #define FILE_PIPE_SERVER_END 0x00000001
52 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
53 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
56 #define FILE_SUPERSEDE 0x00000000
57 #define FILE_OPEN 0x00000001
58 #define FILE_CREATE 0x00000002
59 #define FILE_OPEN_IF 0x00000003
60 #define FILE_OVERWRITE 0x00000004
61 #define FILE_OVERWRITE_IF 0x00000005
62 #define FILE_MAXIMUM_DISPOSITION 0x00000005
65 #define FILE_DIRECTORY_FILE 0x00000001
66 #define FILE_WRITE_THROUGH 0x00000002
67 #define FILE_SEQUENTIAL_ONLY 0x00000004
68 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
69 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
70 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
71 #define FILE_NON_DIRECTORY_FILE 0x00000040
72 #define FILE_CREATE_TREE_CONNECTION 0x00000080
73 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
74 #define FILE_NO_EA_KNOWLEDGE 0x00000200
75 #define FILE_OPEN_FOR_RECOVERY 0x00000400
76 #define FILE_RANDOM_ACCESS 0x00000800
77 #define FILE_DELETE_ON_CLOSE 0x00001000
78 #define FILE_OPEN_BY_FILE_ID 0x00002000
79 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
80 #define FILE_NO_COMPRESSION 0x00008000
81 #define FILE_RESERVE_OPFILTER 0x00100000
82 #define FILE_OPEN_REPARSE_POINT 0x00200000
83 #define FILE_OPEN_NO_RECALL 0x00400000
84 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
86 /* Device Charactertics */
87 #define FILE_REMOVABLE_MEDIA 0x00000001
88 #define FILE_REMOTE_DEVICE 0x00000010
90 /* Device Object Extension Flags */
91 #define DOE_UNLOAD_PENDING 0x1
92 #define DOE_DELETE_PENDING 0x2
93 #define DOE_REMOVE_PENDING 0x4
94 #define DOE_REMOVE_PROCESSED 0x8
95 #define DOE_START_PENDING 0x10
97 /* Device Node Flags */
98 #define DNF_PROCESSED 0x00000001
99 #define DNF_STARTED 0x00000002
100 #define DNF_START_FAILED 0x00000004
101 #define DNF_ENUMERATED 0x00000008
102 #define DNF_DELETED 0x00000010
103 #define DNF_MADEUP 0x00000020
104 #define DNF_START_REQUEST_PENDING 0x00000040
105 #define DNF_NO_RESOURCE_REQUIRED 0x00000080
106 #define DNF_INSUFFICIENT_RESOURCES 0x00000100
107 #define DNF_RESOURCE_ASSIGNED 0x00000200
108 #define DNF_RESOURCE_REPORTED 0x00000400
109 #define DNF_HAL_NODE 0x00000800 // ???
110 #define DNF_ADDED 0x00001000
111 #define DNF_ADD_FAILED 0x00002000
112 #define DNF_LEGACY_DRIVER 0x00004000
113 #define DNF_STOPPED 0x00008000
114 #define DNF_WILL_BE_REMOVED 0x00010000
115 #define DNF_NEED_TO_ENUM 0x00020000
116 #define DNF_NOT_CONFIGURED 0x00040000
117 #define DNF_REINSTALL 0x00080000
118 #define DNF_RESOURCE_REQUIREMENTS_NEED_FILTERED 0x00100000 // ???
119 #define DNF_DISABLED 0x00200000
120 #define DNF_RESTART_OK 0x00400000
121 #define DNF_NEED_RESTART 0x00800000
122 #define DNF_VISITED 0x01000000
123 #define DNF_ASSIGNING_RESOURCES 0x02000000
124 #define DNF_BEEING_ENUMERATED 0x04000000
125 #define DNF_NEED_ENUMERATION_ONLY 0x08000000
126 #define DNF_LOCKED 0x10000000
127 #define DNF_HAS_BOOT_CONFIG 0x20000000
128 #define DNF_BOOT_CONFIG_RESERVED 0x40000000
129 #define DNF_HAS_PROBLEM 0x80000000 // ???
130 /* For UserFlags field */
131 #define DNUF_DONT_SHOW_IN_UI 0x0002
132 #define DNUF_NOT_DISABLEABLE 0x0008
134 /* ENUMERATIONS **************************************************************/
136 #ifdef NTOS_MODE_USER
137 typedef enum _INTERFACE_TYPE
139 InterfaceTypeUndefined
= -1,
157 }INTERFACE_TYPE
, *PINTERFACE_TYPE
;
159 typedef enum _FILE_INFORMATION_CLASS
161 FileDirectoryInformation
= 1,
162 FileFullDirectoryInformation
,
163 FileBothDirectoryInformation
,
164 FileBasicInformation
,
165 FileStandardInformation
,
166 FileInternalInformation
,
168 FileAccessInformation
,
170 FileRenameInformation
,
172 FileNamesInformation
,
173 FileDispositionInformation
,
174 FilePositionInformation
,
175 FileFullEaInformation
,
177 FileAlignmentInformation
,
179 FileAllocationInformation
,
180 FileEndOfFileInformation
,
181 FileAlternateNameInformation
,
182 FileStreamInformation
,
184 FilePipeLocalInformation
,
185 FilePipeRemoteInformation
,
186 FileMailslotQueryInformation
,
187 FileMailslotSetInformation
,
188 FileCompressionInformation
,
189 FileObjectIdInformation
,
190 FileCompletionInformation
,
191 FileMoveClusterInformation
,
192 FileQuotaInformation
,
193 FileReparsePointInformation
,
194 FileNetworkOpenInformation
,
195 FileAttributeTagInformation
,
196 FileTrackingInformation
,
197 FileIdBothDirectoryInformation
,
198 FileIdFullDirectoryInformation
,
199 FileValidDataLengthInformation
,
200 FileShortNameInformation
,
201 FileMaximumInformation
202 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
204 typedef enum _FSINFOCLASS
206 FileFsVolumeInformation
= 1,
207 FileFsLabelInformation
,
208 FileFsSizeInformation
,
209 FileFsDeviceInformation
,
210 FileFsAttributeInformation
,
211 FileFsControlInformation
,
212 FileFsFullSizeInformation
,
213 FileFsObjectIdInformation
,
214 FileFsDriverPathInformation
,
215 FileFsMaximumInformation
216 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
219 typedef enum _PNP_DEVNODE_STATE
221 DeviceNodeUnspecified
= 0x300,
222 DeviceNodeUninitialized
= 0x301,
223 DeviceNodeInitialized
= 0x302,
224 DeviceNodeDriversAdded
= 0x303,
225 DeviceNodeResourcesAssigned
= 0x304,
226 DeviceNodeStartPending
= 0x305,
227 DeviceNodeStartCompletion
= 0x306,
228 DeviceNodeStartPostWork
= 0x307,
229 DeviceNodeStarted
= 0x308,
230 DeviceNodeQueryStopped
= 0x309,
231 DeviceNodeStopped
= 0x30a,
232 DeviceNodeRestartCompletion
= 0x30b,
233 DeviceNodeEnumeratePending
= 0x30c,
234 DeviceNodeEnumerateCompletion
= 0x30d,
235 DeviceNodeAwaitingQueuedDeletion
= 0x30e,
236 DeviceNodeAwaitingQueuedRemoval
= 0x30f,
237 DeviceNodeQueryRemoved
= 0x310,
238 DeviceNodeRemovePendingCloses
= 0x311,
239 DeviceNodeRemoved
= 0x312,
240 DeviceNodeDeletePendingCloses
= 0x313,
241 DeviceNodeDeleted
= 0x314,
242 MaxDeviceNodeState
= 0x315,
245 /* TYPES *********************************************************************/
247 #ifdef NTOS_MODE_USER
248 typedef struct _FILE_BASIC_INFORMATION
250 LARGE_INTEGER CreationTime
;
251 LARGE_INTEGER LastAccessTime
;
252 LARGE_INTEGER LastWriteTime
;
253 LARGE_INTEGER ChangeTime
;
254 ULONG FileAttributes
;
255 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
257 typedef struct _FILE_STANDARD_INFORMATION
259 LARGE_INTEGER AllocationSize
;
260 LARGE_INTEGER EndOfFile
;
262 BOOLEAN DeletePending
;
264 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
266 typedef struct _FILE_NETWORK_OPEN_INFORMATION
268 LARGE_INTEGER CreationTime
;
269 LARGE_INTEGER LastAccessTime
;
270 LARGE_INTEGER LastWriteTime
;
271 LARGE_INTEGER ChangeTime
;
272 LARGE_INTEGER AllocationSize
;
273 LARGE_INTEGER EndOfFile
;
274 ULONG FileAttributes
;
275 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
277 typedef struct _FILE_EA_INFORMATION
280 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
282 typedef struct _FILE_COMPRESSION_INFORMATION
284 LARGE_INTEGER CompressedFileSize
;
285 USHORT CompressionFormat
;
286 UCHAR CompressionUnitShift
;
290 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
292 typedef struct _FILE_POSITION_INFORMATION
294 LARGE_INTEGER CurrentByteOffset
;
295 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
297 typedef struct _FILE_DISPOSITION_INFORMATION
300 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
302 typedef struct _FILE_FULL_EA_INFORMATION
304 ULONG NextEntryOffset
;
307 USHORT EaValueLength
;
309 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
311 typedef struct _FILE_QUOTA_INFORMATION
313 ULONG NextEntryOffset
;
315 LARGE_INTEGER ChangeTime
;
316 LARGE_INTEGER QuotaUsed
;
317 LARGE_INTEGER QuotaThreshold
;
318 LARGE_INTEGER QuotaLimit
;
320 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
322 typedef struct _FILE_INTERNAL_INFORMATION
324 LARGE_INTEGER IndexNumber
;
325 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
327 typedef struct _FILE_RENAME_INFORMATION
329 BOOLEAN ReplaceIfExists
;
330 HANDLE RootDirectory
;
331 ULONG FileNameLength
;
333 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
335 typedef struct _FILE_PIPE_INFORMATION
338 ULONG CompletionMode
;
339 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
341 typedef struct _FILE_PIPE_LOCAL_INFORMATION
344 ULONG NamedPipeConfiguration
;
345 ULONG MaximumInstances
;
346 ULONG CurrentInstances
;
348 ULONG ReadDataAvailable
;
350 ULONG WriteQuotaAvailable
;
351 ULONG NamedPipeState
;
353 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
355 typedef struct _FILE_PIPE_REMOTE_INFORMATION
357 LARGE_INTEGER CollectDataTime
;
358 ULONG MaximumCollectionCount
;
359 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
361 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
363 ULONG MaximumMessageSize
;
365 ULONG NextMessageSize
;
366 ULONG MessagesAvailable
;
367 LARGE_INTEGER ReadTimeout
;
368 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
370 typedef struct _FILE_MAILSLOT_SET_INFORMATION
372 LARGE_INTEGER ReadTimeout
;
373 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
375 typedef struct _FILE_BOTH_DIR_INFORMATION
377 ULONG NextEntryOffset
;
379 LARGE_INTEGER CreationTime
;
380 LARGE_INTEGER LastAccessTime
;
381 LARGE_INTEGER LastWriteTime
;
382 LARGE_INTEGER ChangeTime
;
383 LARGE_INTEGER EndOfFile
;
384 LARGE_INTEGER AllocationSize
;
385 ULONG FileAttributes
;
386 ULONG FileNameLength
;
388 CCHAR ShortNameLength
;
391 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
393 typedef struct _FILE_COMPLETION_INFORMATION
397 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
399 typedef struct _FILE_LINK_INFORMATION
401 BOOLEAN ReplaceIfExists
;
402 HANDLE RootDirectory
;
403 ULONG FileNameLength
;
405 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
407 typedef struct _FILE_NAME_INFORMATION
409 ULONG FileNameLength
;
411 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
413 typedef struct _FILE_ALLOCATION_INFORMATION
415 LARGE_INTEGER AllocationSize
;
416 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
418 typedef struct _FILE_END_OF_FILE_INFORMATION
420 LARGE_INTEGER EndOfFile
;
421 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
423 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
425 LARGE_INTEGER ValidDataLength
;
426 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
428 typedef struct _FILE_FS_DEVICE_INFORMATION
430 DEVICE_TYPE DeviceType
;
431 ULONG Characteristics
;
432 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
434 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
436 ULONG FileSystemAttributes
;
437 ULONG MaximumComponentNameLength
;
438 ULONG FileSystemNameLength
;
439 WCHAR FileSystemName
[1];
440 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
442 typedef struct _FILE_FS_SIZE_INFORMATION
444 LARGE_INTEGER TotalAllocationUnits
;
445 LARGE_INTEGER AvailableAllocationUnits
;
446 ULONG SectorsPerAllocationUnit
;
447 ULONG BytesPerSector
;
448 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
450 typedef struct _FILE_FS_LABEL_INFORMATION
452 ULONG VolumeLabelLength
;
453 WCHAR VolumeLabel
[1];
454 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
456 typedef struct _FILE_FS_VOLUME_INFORMATION
458 LARGE_INTEGER VolumeCreationTime
;
459 ULONG VolumeSerialNumber
;
460 ULONG VolumeLabelLength
;
461 BOOLEAN SupportsObjects
;
462 WCHAR VolumeLabel
[1];
463 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
465 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
467 LARGE_INTEGER Timeout
;
469 BOOLEAN TimeoutSpecified
;
471 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
473 typedef struct _FILE_PIPE_PEEK_BUFFER
475 ULONG NamedPipeState
;
476 ULONG ReadDataAvailable
;
477 ULONG NumberOfMessages
;
480 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
482 typedef struct _IO_STATUS_BLOCK
489 ULONG_PTR Information
;
490 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
492 typedef struct _IO_ERROR_LOG_PACKET
494 UCHAR MajorFunctionCode
;
497 USHORT NumberOfStrings
;
499 USHORT EventCategory
;
501 ULONG UniqueErrorValue
;
502 NTSTATUS FinalStatus
;
503 ULONG SequenceNumber
;
505 LARGE_INTEGER DeviceOffset
;
507 }IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
509 typedef struct _IO_ERROR_LOG_MESSAGE
513 USHORT DriverNameLength
;
514 LARGE_INTEGER TimeStamp
;
515 ULONG DriverNameOffset
;
516 IO_ERROR_LOG_PACKET EntryData
;
517 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
520 typedef struct _MAILSLOT_CREATE_PARAMETERS
523 ULONG MaximumMessageSize
;
524 LARGE_INTEGER ReadTimeout
;
525 BOOLEAN TimeoutSpecified
;
526 } MAILSLOT_CREATE_PARAMETERS
, *PMAILSLOT_CREATE_PARAMETERS
;
528 typedef struct _NAMED_PIPE_CREATE_PARAMETERS
532 ULONG CompletionMode
;
533 ULONG MaximumInstances
;
536 LARGE_INTEGER DefaultTimeout
;
537 BOOLEAN TimeoutSpecified
;
538 } NAMED_PIPE_CREATE_PARAMETERS
, *PNAMED_PIPE_CREATE_PARAMETERS
;
540 #ifndef NTOS_MODE_USER
541 typedef struct _IO_TIMER
545 LIST_ENTRY IoTimerList
;
546 PIO_TIMER_ROUTINE TimerRoutine
;
548 PDEVICE_OBJECT DeviceObject
;
549 } IO_TIMER
, *PIO_TIMER
;
551 typedef struct _DEVICE_NODE
553 struct _DEVICE_NODE
*Parent
;
554 struct _DEVICE_NODE
*PrevSibling
;
555 struct _DEVICE_NODE
*NextSibling
;
556 struct _DEVICE_NODE
*Child
;
558 struct _PO_DEVICE_NOTIFY
*Notify
;
559 PNP_DEVNODE_STATE State
;
560 PNP_DEVNODE_STATE PreviousState
;
561 PNP_DEVNODE_STATE StateHistory
[20];
562 UINT StateHistoryEntry
;
563 INT CompletionStatus
;
568 PDEVICE_OBJECT PhysicalDeviceObject
;
569 PCM_RESOURCE_LIST ResourceList
;
570 PCM_RESOURCE_LIST ResourceListTranslated
;
571 UNICODE_STRING InstancePath
;
572 UNICODE_STRING ServiceName
;
573 PDEVICE_OBJECT DuplicatePDO
;
574 PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements
;
575 INTERFACE_TYPE InterfaceType
;
577 INTERFACE_TYPE ChildInterfaceType
;
578 ULONG ChildBusNumber
;
579 USHORT ChildBusTypeIndex
;
581 UCHAR HardwareRemovalPolicy
;
582 LIST_ENTRY TargetDeviceNotify
;
583 LIST_ENTRY DeviceArbiterList
;
584 LIST_ENTRY DeviceTranslatorList
;
585 USHORT NoTranslatorMask
;
586 USHORT QueryTranslatorMask
;
587 USHORT NoArbiterMask
;
588 USHORT QueryArbiterMask
;
591 struct _DEVICE_NODE
*LegacyDeviceNode
;
592 PDEVICE_RELATIONS PendingDeviceRelations
;
596 struct _DEVICE_NODE
*NextResourceDeviceNode
;
598 PCM_RESOURCE_LIST BootResources
;
599 ULONG CapabilityFlags
;
603 LIST_ENTRY ListEntry
;
606 ULONG DisableableDepends
;
607 LIST_ENTRY PendedSetInterfaceState
;
608 LIST_ENTRY LegacyBusListEntry
;
609 ULONG DriverUnloadRetryCount
;
610 struct _DEVICE_NODE
*PreviousParent
;
611 ULONG DeletedChidren
;
612 } DEVICE_NODE
, *PDEVICE_NODE
;
614 typedef struct _PI_RESOURCE_ARBITER_ENTRY
616 LIST_ENTRY DeviceArbiterList
;
618 PARBITER_INTERFACE ArbiterInterface
;
620 LIST_ENTRY ResourceList
;
621 LIST_ENTRY BestResourceList
;
622 LIST_ENTRY BestConfig
;
623 LIST_ENTRY ActiveArbiterList
;
625 UCHAR ResourcesChanged
;
626 } PI_RESOURCE_ARBITER_ENTRY
, *PPI_RESOURCE_ARBITER_ENTRY
;
628 typedef struct _DEVOBJ_EXTENSION
632 PDEVICE_OBJECT DeviceObject
;
634 struct DEVICE_OBJECT_POWER_EXTENSION
*Dope
;
635 ULONG ExtensionFlags
;
636 struct _DEVICE_NODE
*DeviceNode
;
637 PDEVICE_OBJECT AttachedTo
;
642 } DEVOBJ_EXTENSION
, *PDEVOBJ_EXTENSION
;
644 typedef struct _PRIVATE_DRIVER_EXTENSIONS
646 struct _PRIVATE_DRIVER_EXTENSIONS
*Link
;
647 PVOID ClientIdentificationAddress
;
649 } PRIVATE_DRIVER_EXTENSIONS
, *PPRIVATE_DRIVER_EXTENSIONS
;
651 #if !defined(_ALPHA_)
652 #include <pshpack4.h>
654 typedef struct _EXTENDED_IO_STACK_LOCATION
664 PIO_SECURITY_CONTEXT SecurityContext
;
666 USHORT FileAttributes
;
672 PIO_SECURITY_CONTEXT SecurityContext
;
676 struct _NAMED_PIPE_CREATE_PARAMETERS
*Parameters
;
680 PIO_SECURITY_CONTEXT SecurityContext
;
684 struct _MAILSLOT_CREATE_PARAMETERS
*Parameters
;
690 LARGE_INTEGER ByteOffset
;
696 LARGE_INTEGER ByteOffset
;
701 PUNICODE_STRING FileName
;
702 FILE_INFORMATION_CLASS FileInformationClass
;
708 ULONG CompletionFilter
;
713 FILE_INFORMATION_CLASS FileInformationClass
;
718 FILE_INFORMATION_CLASS FileInformationClass
;
719 PFILE_OBJECT FileObject
;
724 BOOLEAN ReplaceIfExists
;
745 FS_INFORMATION_CLASS FsInformationClass
;
750 FS_INFORMATION_CLASS FsInformationClass
;
754 ULONG OutputBufferLength
;
755 ULONG InputBufferLength
;
757 PVOID Type3InputBuffer
;
761 PLARGE_INTEGER Length
;
763 LARGE_INTEGER ByteOffset
;
767 ULONG OutputBufferLength
;
768 ULONG InputBufferLength
;
770 PVOID Type3InputBuffer
;
774 SECURITY_INFORMATION SecurityInformation
;
775 ULONG POINTER_ALIGNMENT Length
;
779 SECURITY_INFORMATION SecurityInformation
;
780 PSECURITY_DESCRIPTOR SecurityDescriptor
;
785 PDEVICE_OBJECT DeviceObject
;
790 PDEVICE_OBJECT DeviceObject
;
794 struct _SCSI_REQUEST_BLOCK
*Srb
;
800 struct _FILE_GET_QUOTA_INFORMATION
*SidList
;
809 DEVICE_RELATION_TYPE Type
;
810 } QueryDeviceRelations
;
813 CONST GUID
*InterfaceType
;
816 PINTERFACE Interface
;
817 PVOID InterfaceSpecificData
;
821 PDEVICE_CAPABILITIES Capabilities
;
822 } DeviceCapabilities
;
825 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
826 } FilterResourceRequirements
;
840 BUS_QUERY_ID_TYPE IdType
;
844 DEVICE_TEXT_TYPE DeviceTextType
;
851 DEVICE_USAGE_NOTIFICATION_TYPE Type
;
855 SYSTEM_POWER_STATE PowerState
;
859 PPOWER_SEQUENCE PowerSequence
;
864 POWER_STATE_TYPE Type
;
866 POWER_ACTION ShutdownType
;
870 PCM_RESOURCE_LIST AllocatedResources
;
871 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
875 ULONG_PTR ProviderId
;
888 PDEVICE_OBJECT DeviceObject
;
889 PFILE_OBJECT FileObject
;
890 PIO_COMPLETION_ROUTINE CompletionRoutine
;
892 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
893 #if !defined(_ALPHA_)
898 /* FUNCTION TYPES ************************************************************/
901 (NTAPI
*PIO_APC_ROUTINE
)(
903 IN PIO_STATUS_BLOCK IoStatusBlock
,
906 /* I/O CONTROL CODES *********************************************************/
908 #ifdef NTOS_MODE_USER
910 #define FSCTL_MAILSLOT_PEEK \
911 CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
914 #define FSCTL_PIPE_ASSIGN_EVENT \
915 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
916 #define FSCTL_PIPE_DISCONNECT \
917 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
918 #define FSCTL_PIPE_LISTEN \
919 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
920 #define FSCTL_PIPE_PEEK \
921 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
922 #define FSCTL_PIPE_QUERY_EVENT \
923 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
924 #define FSCTL_PIPE_TRANSCEIVE \
925 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
926 #define FSCTL_PIPE_WAIT \
927 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
928 #define FSCTL_PIPE_IMPERSONATE \
929 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
930 #define FSCTL_PIPE_SET_CLIENT_PROCESS \
931 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
932 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS \
933 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
934 #define FSCTL_PIPE_INTERNAL_READ \
935 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
936 #define FSCTL_PIPE_INTERNAL_WRITE \
937 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
938 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE \
939 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
940 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW \
941 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
944 #define IOCTL_TAPE_ERASE \
945 CTL_CODE(FILE_DEVICE_TAPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
946 #define IOCTL_TAPE_PREPARE \
947 CTL_CODE(FILE_DEVICE_TAPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS)
948 #define IOCTL_TAPE_WRITE_MARKS \
949 CTL_CODE(FILE_DEVICE_TAPE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
950 #define IOCTL_TAPE_GET_POSITION \
951 CTL_CODE(FILE_DEVICE_TAPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS)
952 #define IOCTL_TAPE_SET_POSITION \
953 CTL_CODE(FILE_DEVICE_TAPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS)
954 #define IOCTL_TAPE_GET_DRIVE_PARAMS \
955 CTL_CODE(FILE_DEVICE_TAPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS)
956 #define IOCTL_TAPE_SET_DRIVE_PARAMS \
957 CTL_CODE(FILE_DEVICE_TAPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
958 #define IOCTL_TAPE_GET_MEDIA_PARAMS \
959 CTL_CODE(FILE_DEVICE_TAPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS)
960 #define IOCTL_TAPE_SET_MEDIA_PARAMS \
961 CTL_CODE(FILE_DEVICE_TAPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
962 #define IOCTL_TAPE_GET_STATUS \
963 CTL_CODE(FILE_DEVICE_TAPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS)
964 #define IOCTL_TAPE_CREATE_PARTITION \
965 CTL_CODE(FILE_DEVICE_TAPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)