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