- Allocate Re-Init entries with a tag
[reactos.git] / reactos / include / ndk / iotypes.h
1 /*++ NDK Version: 0098
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4
5 Header Name:
6
7 iotypes.h
8
9 Abstract:
10
11 Type definitions for the I/O Manager.
12
13 Author:
14
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
16
17 --*/
18
19 #ifndef _IOTYPES_H
20 #define _IOTYPES_H
21
22 //
23 // Dependencies
24 //
25 #include <umtypes.h>
26
27 #ifndef NTOS_MODE_USER
28
29 //
30 // Kernel Exported Object Types
31 //
32 extern POBJECT_TYPE NTSYSAPI IoAdapterObjectType;
33 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType;
34 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType;
35 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType;
36
37 #else
38
39 //
40 // Symbolic Link Access Rights
41 //
42 #define SYMBOLIC_LINK_QUERY 0x0001
43 #define SYMBOLIC_LINK_ALL_ACCESS STANDARD_RIGHTS_REQUIRED | 0x0001
44 #endif
45
46 //
47 // NtCreateFile Result Flags
48 //
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
55
56 //
57 // Pipe Flags
58 //
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
70
71 //
72 // NtCreateFile Attributes
73 //
74 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
75 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
76
77 //
78 // NtCreateFile OpenType Flags
79 //
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
87
88 //
89 // NtCreateFile Flags
90 //
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
111
112 //
113 // Device Charactertics
114 //
115 #define FILE_REMOVABLE_MEDIA 0x00000001
116 #define FILE_REMOTE_DEVICE 0x00000010
117
118 //
119 // Device Object Extension Flags
120 //
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
126
127 //
128 // Device Object StartIo Flags
129 //
130 #define DOE_SIO_NO_KEY 0x20
131 #define DOE_SIO_WITH_KEY 0x40
132 #define DOE_SIO_CANCELABLE 0x80
133 #define DOE_SIO_DEFERRED 0x100
134 #define DOE_SIO_NO_CANCEL 0x200
135
136 //
137 // Device Node Flags
138 //
139 #define DNF_PROCESSED 0x00000001
140 #define DNF_STARTED 0x00000002
141 #define DNF_START_FAILED 0x00000004
142 #define DNF_ENUMERATED 0x00000008
143 #define DNF_DELETED 0x00000010
144 #define DNF_MADEUP 0x00000020
145 #define DNF_START_REQUEST_PENDING 0x00000040
146 #define DNF_NO_RESOURCE_REQUIRED 0x00000080
147 #define DNF_INSUFFICIENT_RESOURCES 0x00000100
148 #define DNF_RESOURCE_ASSIGNED 0x00000200
149 #define DNF_RESOURCE_REPORTED 0x00000400
150 #define DNF_HAL_NODE 0x00000800 // ???
151 #define DNF_ADDED 0x00001000
152 #define DNF_ADD_FAILED 0x00002000
153 #define DNF_LEGACY_DRIVER 0x00004000
154 #define DNF_STOPPED 0x00008000
155 #define DNF_WILL_BE_REMOVED 0x00010000
156 #define DNF_NEED_TO_ENUM 0x00020000
157 #define DNF_NOT_CONFIGURED 0x00040000
158 #define DNF_REINSTALL 0x00080000
159 #define DNF_RESOURCE_REQUIREMENTS_NEED_FILTERED 0x00100000 // ???
160 #define DNF_DISABLED 0x00200000
161 #define DNF_RESTART_OK 0x00400000
162 #define DNF_NEED_RESTART 0x00800000
163 #define DNF_VISITED 0x01000000
164 #define DNF_ASSIGNING_RESOURCES 0x02000000
165 #define DNF_BEEING_ENUMERATED 0x04000000
166 #define DNF_NEED_ENUMERATION_ONLY 0x08000000
167 #define DNF_LOCKED 0x10000000
168 #define DNF_HAS_BOOT_CONFIG 0x20000000
169 #define DNF_BOOT_CONFIG_RESERVED 0x40000000
170 #define DNF_HAS_PROBLEM 0x80000000 // ???
171
172 //
173 // Device Node User Flags
174 //
175 #define DNUF_DONT_SHOW_IN_UI 0x0002
176 #define DNUF_NOT_DISABLEABLE 0x0008
177
178 //
179 // Undocumented WMI Registration Flags
180 //
181 #define WMIREG_FLAG_TRACE_PROVIDER 0x00010000
182 #define WMIREG_FLAG_TRACE_NOTIFY_MASK 0x00F00000
183 #define WMIREG_NOTIFY_DISK_IO 0x00100000
184 #define WMIREG_NOTIFY_TDI_IO 0x00200000
185
186 //
187 // I/O Completion Information Class for NtQueryIoCompletionInformation
188 //
189 typedef enum _IO_COMPLETION_INFORMATION_CLASS
190 {
191 IoCompletionBasicInformation
192 } IO_COMPLETION_INFORMATION_CLASS;
193
194 #ifdef NTOS_MODE_USER
195
196 //
197 // Hardware Interface Type
198 //
199 typedef enum _INTERFACE_TYPE
200 {
201 InterfaceTypeUndefined = -1,
202 Internal,
203 Isa,
204 Eisa,
205 MicroChannel,
206 TurboChannel,
207 PCIBus,
208 VMEBus,
209 NuBus,
210 PCMCIABus,
211 CBus,
212 MPIBus,
213 MPSABus,
214 ProcessorInternal,
215 InternalPowerBus,
216 PNPISABus,
217 PNPBus,
218 MaximumInterfaceType
219 }INTERFACE_TYPE, *PINTERFACE_TYPE;
220
221 typedef enum _BUS_DATA_TYPE
222 {
223 ConfigurationSpaceUndefined = -1,
224 Cmos,
225 EisaConfiguration,
226 Pos,
227 CbusConfiguration,
228 PCIConfiguration,
229 VMEConfiguration,
230 NuBusConfiguration,
231 PCMCIAConfiguration,
232 MPIConfiguration,
233 MPSAConfiguration,
234 PNPISAConfiguration,
235 SgiInternalConfiguration,
236 MaximumBusDataType
237 } BUS_DATA_TYPE, *PBUS_DATA_TYPE;
238
239 //
240 // File Information Classes for NtQueryInformationFile
241 //
242 typedef enum _FILE_INFORMATION_CLASS
243 {
244 FileDirectoryInformation = 1,
245 FileFullDirectoryInformation,
246 FileBothDirectoryInformation,
247 FileBasicInformation,
248 FileStandardInformation,
249 FileInternalInformation,
250 FileEaInformation,
251 FileAccessInformation,
252 FileNameInformation,
253 FileRenameInformation,
254 FileLinkInformation,
255 FileNamesInformation,
256 FileDispositionInformation,
257 FilePositionInformation,
258 FileFullEaInformation,
259 FileModeInformation,
260 FileAlignmentInformation,
261 FileAllInformation,
262 FileAllocationInformation,
263 FileEndOfFileInformation,
264 FileAlternateNameInformation,
265 FileStreamInformation,
266 FilePipeInformation,
267 FilePipeLocalInformation,
268 FilePipeRemoteInformation,
269 FileMailslotQueryInformation,
270 FileMailslotSetInformation,
271 FileCompressionInformation,
272 FileObjectIdInformation,
273 FileCompletionInformation,
274 FileMoveClusterInformation,
275 FileQuotaInformation,
276 FileReparsePointInformation,
277 FileNetworkOpenInformation,
278 FileAttributeTagInformation,
279 FileTrackingInformation,
280 FileIdBothDirectoryInformation,
281 FileIdFullDirectoryInformation,
282 FileValidDataLengthInformation,
283 FileShortNameInformation,
284 FileMaximumInformation
285 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
286
287 //
288 // File Information Classes for NtQueryInformationFileSystem
289 //
290 typedef enum _FSINFOCLASS
291 {
292 FileFsVolumeInformation = 1,
293 FileFsLabelInformation,
294 FileFsSizeInformation,
295 FileFsDeviceInformation,
296 FileFsAttributeInformation,
297 FileFsControlInformation,
298 FileFsFullSizeInformation,
299 FileFsObjectIdInformation,
300 FileFsDriverPathInformation,
301 FileFsMaximumInformation
302 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
303
304 #endif
305
306 //
307 // Device Node States
308 //
309 typedef enum _PNP_DEVNODE_STATE
310 {
311 DeviceNodeUnspecified = 0x300,
312 DeviceNodeUninitialized = 0x301,
313 DeviceNodeInitialized = 0x302,
314 DeviceNodeDriversAdded = 0x303,
315 DeviceNodeResourcesAssigned = 0x304,
316 DeviceNodeStartPending = 0x305,
317 DeviceNodeStartCompletion = 0x306,
318 DeviceNodeStartPostWork = 0x307,
319 DeviceNodeStarted = 0x308,
320 DeviceNodeQueryStopped = 0x309,
321 DeviceNodeStopped = 0x30a,
322 DeviceNodeRestartCompletion = 0x30b,
323 DeviceNodeEnumeratePending = 0x30c,
324 DeviceNodeEnumerateCompletion = 0x30d,
325 DeviceNodeAwaitingQueuedDeletion = 0x30e,
326 DeviceNodeAwaitingQueuedRemoval = 0x30f,
327 DeviceNodeQueryRemoved = 0x310,
328 DeviceNodeRemovePendingCloses = 0x311,
329 DeviceNodeRemoved = 0x312,
330 DeviceNodeDeletePendingCloses = 0x313,
331 DeviceNodeDeleted = 0x314,
332 MaxDeviceNodeState = 0x315,
333 } PNP_DEVNODE_STATE;
334
335 #ifdef NTOS_MODE_USER
336
337 //
338 // File Information structures for NtQueryInformationFile
339 //
340 typedef struct _FILE_BASIC_INFORMATION
341 {
342 LARGE_INTEGER CreationTime;
343 LARGE_INTEGER LastAccessTime;
344 LARGE_INTEGER LastWriteTime;
345 LARGE_INTEGER ChangeTime;
346 ULONG FileAttributes;
347 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
348
349 typedef struct _FILE_STANDARD_INFORMATION
350 {
351 LARGE_INTEGER AllocationSize;
352 LARGE_INTEGER EndOfFile;
353 ULONG NumberOfLinks;
354 BOOLEAN DeletePending;
355 BOOLEAN Directory;
356 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
357
358 typedef struct _FILE_STREAM_INFORMATION
359 {
360 ULONG NextEntryOffset;
361 ULONG StreamNameLength;
362 LARGE_INTEGER StreamSize;
363 LARGE_INTEGER StreamAllocationSize;
364 WCHAR StreamName[1];
365 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
366
367 typedef struct _FILE_NETWORK_OPEN_INFORMATION
368 {
369 LARGE_INTEGER CreationTime;
370 LARGE_INTEGER LastAccessTime;
371 LARGE_INTEGER LastWriteTime;
372 LARGE_INTEGER ChangeTime;
373 LARGE_INTEGER AllocationSize;
374 LARGE_INTEGER EndOfFile;
375 ULONG FileAttributes;
376 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
377
378 typedef struct _FILE_EA_INFORMATION
379 {
380 ULONG EaSize;
381 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
382
383 typedef struct _FILE_COMPRESSION_INFORMATION
384 {
385 LARGE_INTEGER CompressedFileSize;
386 USHORT CompressionFormat;
387 UCHAR CompressionUnitShift;
388 UCHAR ChunkShift;
389 UCHAR ClusterShift;
390 UCHAR Reserved[3];
391 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
392
393 typedef struct _FILE_POSITION_INFORMATION
394 {
395 LARGE_INTEGER CurrentByteOffset;
396 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
397
398 typedef struct _FILE_DISPOSITION_INFORMATION
399 {
400 BOOLEAN DeleteFile;
401 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
402
403 typedef struct _FILE_FULL_EA_INFORMATION
404 {
405 ULONG NextEntryOffset;
406 UCHAR Flags;
407 UCHAR EaNameLength;
408 USHORT EaValueLength;
409 CHAR EaName[1];
410 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
411
412 typedef struct _FILE_QUOTA_INFORMATION
413 {
414 ULONG NextEntryOffset;
415 ULONG SidLength;
416 LARGE_INTEGER ChangeTime;
417 LARGE_INTEGER QuotaUsed;
418 LARGE_INTEGER QuotaThreshold;
419 LARGE_INTEGER QuotaLimit;
420 SID Sid;
421 } FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
422
423 typedef struct _FILE_INTERNAL_INFORMATION
424 {
425 LARGE_INTEGER IndexNumber;
426 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
427
428 typedef struct _FILE_RENAME_INFORMATION
429 {
430 BOOLEAN ReplaceIfExists;
431 HANDLE RootDirectory;
432 ULONG FileNameLength;
433 WCHAR FileName[1];
434 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
435
436 typedef struct _FILE_PIPE_INFORMATION
437 {
438 ULONG ReadMode;
439 ULONG CompletionMode;
440 } FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
441
442 typedef struct _FILE_PIPE_LOCAL_INFORMATION
443 {
444 ULONG NamedPipeType;
445 ULONG NamedPipeConfiguration;
446 ULONG MaximumInstances;
447 ULONG CurrentInstances;
448 ULONG InboundQuota;
449 ULONG ReadDataAvailable;
450 ULONG OutboundQuota;
451 ULONG WriteQuotaAvailable;
452 ULONG NamedPipeState;
453 ULONG NamedPipeEnd;
454 } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
455
456 typedef struct _FILE_PIPE_REMOTE_INFORMATION
457 {
458 LARGE_INTEGER CollectDataTime;
459 ULONG MaximumCollectionCount;
460 } FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
461
462 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
463 {
464 ULONG MaximumMessageSize;
465 ULONG MailslotQuota;
466 ULONG NextMessageSize;
467 ULONG MessagesAvailable;
468 LARGE_INTEGER ReadTimeout;
469 } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
470
471 typedef struct _FILE_MAILSLOT_SET_INFORMATION
472 {
473 PLARGE_INTEGER ReadTimeout;
474 } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
475
476 typedef struct _FILE_BOTH_DIR_INFORMATION
477 {
478 ULONG NextEntryOffset;
479 ULONG FileIndex;
480 LARGE_INTEGER CreationTime;
481 LARGE_INTEGER LastAccessTime;
482 LARGE_INTEGER LastWriteTime;
483 LARGE_INTEGER ChangeTime;
484 LARGE_INTEGER EndOfFile;
485 LARGE_INTEGER AllocationSize;
486 ULONG FileAttributes;
487 ULONG FileNameLength;
488 ULONG EaSize;
489 CCHAR ShortNameLength;
490 WCHAR ShortName[12];
491 WCHAR FileName[1];
492 } FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
493
494 typedef struct _FILE_COMPLETION_INFORMATION
495 {
496 HANDLE Port;
497 PVOID Key;
498 } FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
499
500 typedef struct _FILE_LINK_INFORMATION
501 {
502 BOOLEAN ReplaceIfExists;
503 HANDLE RootDirectory;
504 ULONG FileNameLength;
505 WCHAR FileName[1];
506 } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
507
508 typedef struct _FILE_NAME_INFORMATION
509 {
510 ULONG FileNameLength;
511 WCHAR FileName[1];
512 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
513
514 typedef struct _FILE_ALLOCATION_INFORMATION
515 {
516 LARGE_INTEGER AllocationSize;
517 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
518
519 typedef struct _FILE_END_OF_FILE_INFORMATION
520 {
521 LARGE_INTEGER EndOfFile;
522 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
523
524 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
525 {
526 LARGE_INTEGER ValidDataLength;
527 } FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
528
529 typedef struct _FILE_DIRECTORY_INFORMATION
530 {
531 ULONG NextEntryOffset;
532 ULONG FileIndex;
533 LARGE_INTEGER CreationTime;
534 LARGE_INTEGER LastAccessTime;
535 LARGE_INTEGER LastWriteTime;
536 LARGE_INTEGER ChangeTime;
537 LARGE_INTEGER EndOfFile;
538 LARGE_INTEGER AllocationSize;
539 ULONG FileAttributes;
540 ULONG FileNameLength;
541 WCHAR FileName[1];
542 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
543
544 //
545 // File System Information structures for NtQueryInformationFile
546 //
547 typedef struct _FILE_FS_DEVICE_INFORMATION
548 {
549 DEVICE_TYPE DeviceType;
550 ULONG Characteristics;
551 } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
552
553 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
554 {
555 ULONG FileSystemAttributes;
556 ULONG MaximumComponentNameLength;
557 ULONG FileSystemNameLength;
558 WCHAR FileSystemName[1];
559 } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
560
561 typedef struct _FILE_FS_SIZE_INFORMATION
562 {
563 LARGE_INTEGER TotalAllocationUnits;
564 LARGE_INTEGER AvailableAllocationUnits;
565 ULONG SectorsPerAllocationUnit;
566 ULONG BytesPerSector;
567 } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
568
569 typedef struct _FILE_FS_LABEL_INFORMATION
570 {
571 ULONG VolumeLabelLength;
572 WCHAR VolumeLabel[1];
573 } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
574
575 typedef struct _FILE_FS_VOLUME_INFORMATION
576 {
577 LARGE_INTEGER VolumeCreationTime;
578 ULONG VolumeSerialNumber;
579 ULONG VolumeLabelLength;
580 BOOLEAN SupportsObjects;
581 WCHAR VolumeLabel[1];
582 } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
583
584 //
585 // Pipe Structures for IOCTL_PIPE_XXX
586 //
587 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
588 {
589 LARGE_INTEGER Timeout;
590 ULONG NameLength;
591 BOOLEAN TimeoutSpecified;
592 WCHAR Name[1];
593 } FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
594
595 typedef struct _FILE_PIPE_PEEK_BUFFER
596 {
597 ULONG NamedPipeState;
598 ULONG ReadDataAvailable;
599 ULONG NumberOfMessages;
600 ULONG MessageLength;
601 CHAR Data[1];
602 } FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
603
604 //
605 // I/O Status Block
606 //
607 typedef struct _IO_STATUS_BLOCK
608 {
609 union
610 {
611 NTSTATUS Status;
612 PVOID Pointer;
613 };
614 ULONG_PTR Information;
615 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
616
617 //
618 // I/O Error Log Structures
619 //
620 typedef struct _IO_ERROR_LOG_PACKET
621 {
622 UCHAR MajorFunctionCode;
623 UCHAR RetryCount;
624 USHORT DumpDataSize;
625 USHORT NumberOfStrings;
626 USHORT StringOffset;
627 USHORT EventCategory;
628 NTSTATUS ErrorCode;
629 ULONG UniqueErrorValue;
630 NTSTATUS FinalStatus;
631 ULONG SequenceNumber;
632 ULONG IoControlCode;
633 LARGE_INTEGER DeviceOffset;
634 ULONG DumpData[1];
635 }IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET;
636
637 typedef struct _IO_ERROR_LOG_MESSAGE
638 {
639 USHORT Type;
640 USHORT Size;
641 USHORT DriverNameLength;
642 LARGE_INTEGER TimeStamp;
643 ULONG DriverNameOffset;
644 IO_ERROR_LOG_PACKET EntryData;
645 } IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE;
646
647 #endif
648
649 //
650 // Parameters for NtCreateMailslotFile/NtCreateNamedPipeFile
651 //
652 typedef struct _MAILSLOT_CREATE_PARAMETERS
653 {
654 ULONG MailslotQuota;
655 ULONG MaximumMessageSize;
656 LARGE_INTEGER ReadTimeout;
657 BOOLEAN TimeoutSpecified;
658 } MAILSLOT_CREATE_PARAMETERS, *PMAILSLOT_CREATE_PARAMETERS;
659
660 typedef struct _NAMED_PIPE_CREATE_PARAMETERS
661 {
662 ULONG NamedPipeType;
663 ULONG ReadMode;
664 ULONG CompletionMode;
665 ULONG MaximumInstances;
666 ULONG InboundQuota;
667 ULONG OutboundQuota;
668 LARGE_INTEGER DefaultTimeout;
669 BOOLEAN TimeoutSpecified;
670 } NAMED_PIPE_CREATE_PARAMETERS, *PNAMED_PIPE_CREATE_PARAMETERS;
671
672 #ifndef NTOS_MODE_USER
673
674 //
675 // I/O Timer Object
676 //
677 typedef struct _IO_TIMER
678 {
679 USHORT Type;
680 USHORT TimerEnabled;
681 LIST_ENTRY IoTimerList;
682 PIO_TIMER_ROUTINE TimerRoutine;
683 PVOID Context;
684 PDEVICE_OBJECT DeviceObject;
685 } IO_TIMER, *PIO_TIMER;
686
687 //
688 // Driver Extension
689 //
690 typedef struct _IO_CLIENT_EXTENSION
691 {
692 struct _IO_CLIENT_EXTENSION *NextExtension;
693 PVOID ClientIdentificationAddress;
694 } IO_CLIENT_EXTENSION, *PIO_CLIENT_EXTENSION;
695
696 //
697 // Device Node
698 //
699 typedef struct _DEVICE_NODE
700 {
701 struct _DEVICE_NODE *Parent;
702 struct _DEVICE_NODE *PrevSibling;
703 struct _DEVICE_NODE *NextSibling;
704 struct _DEVICE_NODE *Child;
705 ULONG Level;
706 struct _PO_DEVICE_NOTIFY *Notify;
707 PNP_DEVNODE_STATE State;
708 PNP_DEVNODE_STATE PreviousState;
709 PNP_DEVNODE_STATE StateHistory[20];
710 ULONG StateHistoryEntry;
711 INT CompletionStatus;
712 PIRP PendingIrp;
713 ULONG Flags;
714 ULONG UserFlags;
715 ULONG Problem;
716 PDEVICE_OBJECT PhysicalDeviceObject;
717 PCM_RESOURCE_LIST ResourceList;
718 PCM_RESOURCE_LIST ResourceListTranslated;
719 UNICODE_STRING InstancePath;
720 UNICODE_STRING ServiceName;
721 PDEVICE_OBJECT DuplicatePDO;
722 PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements;
723 INTERFACE_TYPE InterfaceType;
724 ULONG BusNumber;
725 INTERFACE_TYPE ChildInterfaceType;
726 ULONG ChildBusNumber;
727 USHORT ChildBusTypeIndex;
728 UCHAR RemovalPolicy;
729 UCHAR HardwareRemovalPolicy;
730 LIST_ENTRY TargetDeviceNotify;
731 LIST_ENTRY DeviceArbiterList;
732 LIST_ENTRY DeviceTranslatorList;
733 USHORT NoTranslatorMask;
734 USHORT QueryTranslatorMask;
735 USHORT NoArbiterMask;
736 USHORT QueryArbiterMask;
737 union
738 {
739 struct _DEVICE_NODE *LegacyDeviceNode;
740 PDEVICE_RELATIONS PendingDeviceRelations;
741 } OverUsed1;
742 union
743 {
744 struct _DEVICE_NODE *NextResourceDeviceNode;
745 } OverUsed2;
746 PCM_RESOURCE_LIST BootResources;
747 ULONG CapabilityFlags;
748 struct
749 {
750 ULONG DockStatus;
751 LIST_ENTRY ListEntry;
752 WCHAR *SerialNumber;
753 } DockInfo;
754 ULONG DisableableDepends;
755 LIST_ENTRY PendedSetInterfaceState;
756 LIST_ENTRY LegacyBusListEntry;
757 ULONG DriverUnloadRetryCount;
758 struct _DEVICE_NODE *PreviousParent;
759 ULONG DeletedChidren;
760 } DEVICE_NODE, *PDEVICE_NODE;
761
762 //
763 // Resource Aribtrer Entry
764 //
765 typedef struct _PI_RESOURCE_ARBITER_ENTRY
766 {
767 LIST_ENTRY DeviceArbiterList;
768 UCHAR ResourceType;
769 PARBITER_INTERFACE ArbiterInterface;
770 ULONG Level;
771 LIST_ENTRY ResourceList;
772 LIST_ENTRY BestResourceList;
773 LIST_ENTRY BestConfig;
774 LIST_ENTRY ActiveArbiterList;
775 UCHAR State;
776 UCHAR ResourcesChanged;
777 } PI_RESOURCE_ARBITER_ENTRY, *PPI_RESOURCE_ARBITER_ENTRY;
778
779 //
780 // Extended Device Object Extension Structure
781 //
782 typedef struct _EXTENDED_DEVOBJ_EXTENSION
783 {
784 CSHORT Type;
785 USHORT Size;
786 PDEVICE_OBJECT DeviceObject;
787 ULONG PowerFlags;
788 struct DEVICE_OBJECT_POWER_EXTENSION *Dope;
789 ULONG ExtensionFlags;
790 struct _DEVICE_NODE *DeviceNode;
791 PDEVICE_OBJECT AttachedTo;
792 LONG StartIoCount;
793 LONG StartIoKey;
794 ULONG StartIoFlags;
795 struct _VPB *Vpb;
796 } EXTENDED_DEVOBJ_EXTENSION, *PEXTENDED_DEVOBJ_EXTENSION;
797
798 //
799 // Extended Driver Object Extension Structure
800 //
801 typedef struct _EXTENDED_DRIVER_EXTENSION
802 {
803 struct _DRIVER_OBJECT *DriverObject;
804 PDRIVER_ADD_DEVICE AddDevice;
805 ULONG Count;
806 UNICODE_STRING ServiceKeyName;
807 PIO_CLIENT_EXTENSION ClientDriverExtension;
808 PFS_FILTER_CALLBACKS FsFilterCallbacks;
809 } EXTENDED_DRIVER_EXTENSION, *PEXTENDED_DRIVER_EXTENSION;
810
811 //
812 // Extended I/O Stack Location Structure
813 //
814 #if !defined(_ALPHA_)
815 #include <pshpack4.h>
816 #endif
817 typedef struct _EXTENDED_IO_STACK_LOCATION
818 {
819 UCHAR MajorFunction;
820 UCHAR MinorFunction;
821 UCHAR Flags;
822 UCHAR Control;
823 union
824 {
825 struct
826 {
827 PIO_SECURITY_CONTEXT SecurityContext;
828 ULONG Options;
829 USHORT FileAttributes;
830 USHORT ShareAccess;
831 ULONG EaLength;
832 } Create;
833 struct
834 {
835 PIO_SECURITY_CONTEXT SecurityContext;
836 ULONG Options;
837 USHORT Reserved;
838 USHORT ShareAccess;
839 struct _NAMED_PIPE_CREATE_PARAMETERS *Parameters;
840 } CreatePipe;
841 struct
842 {
843 PIO_SECURITY_CONTEXT SecurityContext;
844 ULONG Options;
845 USHORT Reserved;
846 USHORT ShareAccess;
847 struct _MAILSLOT_CREATE_PARAMETERS *Parameters;
848 } CreateMailslot;
849 struct
850 {
851 ULONG Length;
852 ULONG Key;
853 LARGE_INTEGER ByteOffset;
854 } Read;
855 struct
856 {
857 ULONG Length;
858 ULONG Key;
859 LARGE_INTEGER ByteOffset;
860 } Write;
861 struct
862 {
863 ULONG Length;
864 PUNICODE_STRING FileName;
865 FILE_INFORMATION_CLASS FileInformationClass;
866 ULONG FileIndex;
867 } QueryDirectory;
868 struct
869 {
870 ULONG Length;
871 ULONG CompletionFilter;
872 } NotifyDirectory;
873 struct
874 {
875 ULONG Length;
876 FILE_INFORMATION_CLASS FileInformationClass;
877 } QueryFile;
878 struct
879 {
880 ULONG Length;
881 FILE_INFORMATION_CLASS FileInformationClass;
882 PFILE_OBJECT FileObject;
883 union
884 {
885 struct
886 {
887 BOOLEAN ReplaceIfExists;
888 BOOLEAN AdvanceOnly;
889 };
890 ULONG ClusterCount;
891 HANDLE DeleteHandle;
892 };
893 } SetFile;
894 struct
895 {
896 ULONG Length;
897 PVOID EaList;
898 ULONG EaListLength;
899 ULONG EaIndex;
900 } QueryEa;
901 struct
902 {
903 ULONG Length;
904 } SetEa;
905 struct
906 {
907 ULONG Length;
908 FS_INFORMATION_CLASS FsInformationClass;
909 } QueryVolume;
910 struct
911 {
912 ULONG Length;
913 FS_INFORMATION_CLASS FsInformationClass;
914 } SetVolume;
915 struct
916 {
917 ULONG OutputBufferLength;
918 ULONG InputBufferLength;
919 ULONG FsControlCode;
920 PVOID Type3InputBuffer;
921 } FileSystemControl;
922 struct
923 {
924 PLARGE_INTEGER Length;
925 ULONG Key;
926 LARGE_INTEGER ByteOffset;
927 } LockControl;
928 struct
929 {
930 ULONG OutputBufferLength;
931 ULONG InputBufferLength;
932 ULONG IoControlCode;
933 PVOID Type3InputBuffer;
934 } DeviceIoControl;
935 struct
936 {
937 SECURITY_INFORMATION SecurityInformation;
938 ULONG POINTER_ALIGNMENT Length;
939 } QuerySecurity;
940 struct
941 {
942 SECURITY_INFORMATION SecurityInformation;
943 PSECURITY_DESCRIPTOR SecurityDescriptor;
944 } SetSecurity;
945 struct
946 {
947 PVPB Vpb;
948 PDEVICE_OBJECT DeviceObject;
949 } MountVolume;
950 struct
951 {
952 PVPB Vpb;
953 PDEVICE_OBJECT DeviceObject;
954 } VerifyVolume;
955 struct
956 {
957 struct _SCSI_REQUEST_BLOCK *Srb;
958 } Scsi;
959 struct
960 {
961 ULONG Length;
962 PSID StartSid;
963 struct _FILE_GET_QUOTA_INFORMATION *SidList;
964 ULONG SidListLength;
965 } QueryQuota;
966 struct
967 {
968 ULONG Length;
969 } SetQuota;
970 struct
971 {
972 DEVICE_RELATION_TYPE Type;
973 } QueryDeviceRelations;
974 struct
975 {
976 CONST GUID *InterfaceType;
977 USHORT Size;
978 USHORT Version;
979 PINTERFACE Interface;
980 PVOID InterfaceSpecificData;
981 } QueryInterface;
982 struct
983 {
984 PDEVICE_CAPABILITIES Capabilities;
985 } DeviceCapabilities;
986 struct
987 {
988 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
989 } FilterResourceRequirements;
990 struct
991 {
992 ULONG WhichSpace;
993 PVOID Buffer;
994 ULONG Offset;
995 ULONG Length;
996 } ReadWriteConfig;
997 struct
998 {
999 BOOLEAN Lock;
1000 } SetLock;
1001 struct
1002 {
1003 BUS_QUERY_ID_TYPE IdType;
1004 } QueryId;
1005 struct
1006 {
1007 DEVICE_TEXT_TYPE DeviceTextType;
1008 LCID LocaleId;
1009 } QueryDeviceText;
1010 struct
1011 {
1012 BOOLEAN InPath;
1013 BOOLEAN Reserved[3];
1014 DEVICE_USAGE_NOTIFICATION_TYPE Type;
1015 } UsageNotification;
1016 struct
1017 {
1018 SYSTEM_POWER_STATE PowerState;
1019 } WaitWake;
1020 struct
1021 {
1022 PPOWER_SEQUENCE PowerSequence;
1023 } PowerSequence;
1024 struct
1025 {
1026 ULONG SystemContext;
1027 POWER_STATE_TYPE Type;
1028 POWER_STATE State;
1029 POWER_ACTION ShutdownType;
1030 } Power;
1031 struct
1032 {
1033 PCM_RESOURCE_LIST AllocatedResources;
1034 PCM_RESOURCE_LIST AllocatedResourcesTranslated;
1035 } StartDevice;
1036 struct
1037 {
1038 ULONG_PTR ProviderId;
1039 PVOID DataPath;
1040 ULONG BufferSize;
1041 PVOID Buffer;
1042 } WMI;
1043 struct
1044 {
1045 PVOID Argument1;
1046 PVOID Argument2;
1047 PVOID Argument3;
1048 PVOID Argument4;
1049 } Others;
1050 } Parameters;
1051 PDEVICE_OBJECT DeviceObject;
1052 PFILE_OBJECT FileObject;
1053 PIO_COMPLETION_ROUTINE CompletionRoutine;
1054 PVOID Context;
1055 } EXTENDED_IO_STACK_LOCATION, *PEXTENDED_IO_STACK_LOCATION;
1056 #if !defined(_ALPHA_)
1057 #include <poppack.h>
1058 #endif
1059 #endif
1060
1061 //
1062 // Firmware Boot File Path
1063 //
1064 typedef struct _FILE_PATH
1065 {
1066 ULONG Version;
1067 ULONG Length;
1068 ULONG Type;
1069 CHAR FilePath[1];
1070 } FILE_PATH, *PFILE_PATH;
1071
1072 //
1073 // Firmware Boot Options
1074 //
1075 typedef struct _BOOT_OPTIONS
1076 {
1077 ULONG Version;
1078 ULONG Length;
1079 ULONG Timeout;
1080 ULONG CurrentBootEntryId;
1081 ULONG NextBootEntryId;
1082 WCHAR HeadlessRedirection[1];
1083 } BOOT_OPTIONS, *PBOOT_OPTIONS;
1084
1085 //
1086 // APC Callback for NtCreateFile
1087 //
1088 typedef VOID
1089 (NTAPI *PIO_APC_ROUTINE)(
1090 IN PVOID ApcContext,
1091 IN PIO_STATUS_BLOCK IoStatusBlock,
1092 IN ULONG Reserved);
1093
1094 #ifdef NTOS_MODE_USER
1095
1096 //
1097 // Mailslot IOCTL Codes
1098 //
1099 #define FSCTL_MAILSLOT_PEEK \
1100 CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
1101
1102 //
1103 // Pipe IOCTL Codes
1104 //
1105 #define FSCTL_PIPE_ASSIGN_EVENT \
1106 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
1107 #define FSCTL_PIPE_DISCONNECT \
1108 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
1109 #define FSCTL_PIPE_LISTEN \
1110 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
1111 #define FSCTL_PIPE_PEEK \
1112 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
1113 #define FSCTL_PIPE_QUERY_EVENT \
1114 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
1115 #define FSCTL_PIPE_TRANSCEIVE \
1116 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1117 #define FSCTL_PIPE_WAIT \
1118 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
1119 #define FSCTL_PIPE_IMPERSONATE \
1120 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
1121 #define FSCTL_PIPE_SET_CLIENT_PROCESS \
1122 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
1123 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS \
1124 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
1125 #define FSCTL_PIPE_INTERNAL_READ \
1126 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
1127 #define FSCTL_PIPE_INTERNAL_WRITE \
1128 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
1129 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE \
1130 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1131 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW \
1132 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
1133
1134 //
1135 // Tape IOCTL Codes
1136 //
1137 #define IOCTL_TAPE_ERASE \
1138 CTL_CODE(FILE_DEVICE_TAPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1139 #define IOCTL_TAPE_PREPARE \
1140 CTL_CODE(FILE_DEVICE_TAPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS)
1141 #define IOCTL_TAPE_WRITE_MARKS \
1142 CTL_CODE(FILE_DEVICE_TAPE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1143 #define IOCTL_TAPE_GET_POSITION \
1144 CTL_CODE(FILE_DEVICE_TAPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS)
1145 #define IOCTL_TAPE_SET_POSITION \
1146 CTL_CODE(FILE_DEVICE_TAPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS)
1147 #define IOCTL_TAPE_GET_DRIVE_PARAMS \
1148 CTL_CODE(FILE_DEVICE_TAPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS)
1149 #define IOCTL_TAPE_SET_DRIVE_PARAMS \
1150 CTL_CODE(FILE_DEVICE_TAPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1151 #define IOCTL_TAPE_GET_MEDIA_PARAMS \
1152 CTL_CODE(FILE_DEVICE_TAPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS)
1153 #define IOCTL_TAPE_SET_MEDIA_PARAMS \
1154 CTL_CODE(FILE_DEVICE_TAPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
1155 #define IOCTL_TAPE_GET_STATUS \
1156 CTL_CODE(FILE_DEVICE_TAPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS)
1157 #define IOCTL_TAPE_CREATE_PARTITION \
1158 CTL_CODE(FILE_DEVICE_TAPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1159
1160 #endif // NTOS_MODE_USER
1161
1162 #endif