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