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