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