Reactos
1/*++ NDK Version: 0098
2
3Copyright (c) Alex Ionescu. All rights reserved.
4
5Header Name:
6
7 iotypes.h
8
9Abstract:
10
11 Type definitions for the I/O Manager.
12
13Author:
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//
41extern POBJECT_TYPE NTSYSAPI IoAdapterObjectType;
42extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType;
43extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType;
44extern 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#define DOE_DEFAULT_SD_PRESENT 0x800
155
156//
157// Device Object StartIo Flags
158//
159#define DOE_SIO_NO_KEY 0x20
160#define DOE_SIO_WITH_KEY 0x40
161#define DOE_SIO_CANCELABLE 0x80
162#define DOE_SIO_DEFERRED 0x100
163#define DOE_SIO_NO_CANCEL 0x200
164
165//
166// Device Node Flags
167//
168
169// this set of flags is relevant for w2k3 and newer
170// w2k has a completely different set of flags
171#define DNF_MADEUP 0x00000001
172#define DNF_DUPLICATE 0x00000002
173#define DNF_HAL_NODE 0x00000004
174#define DNF_REENUMERATE 0x00000008
175#define DNF_ENUMERATED 0x00000010
176#define DNF_IDS_QUERIED 0x00000020
177#define DNF_HAS_BOOT_CONFIG 0x00000040
178#define DNF_BOOT_CONFIG_RESERVED 0x00000080
179#define DNF_NO_RESOURCE_REQUIRED 0x00000100
180#define DNF_RESOURCE_REQUIREMENTS_NEED_FILTERED 0x00000200
181#define DNF_RESOURCE_REQUIREMENTS_CHANGED 0x00000400
182#define DNF_NON_STOPPED_REBALANCE 0x00000800
183#define DNF_LEGACY_DRIVER 0x00001000
184#define DNF_HAS_PROBLEM 0x00002000
185#define DNF_HAS_PRIVATE_PROBLEM 0x00004000
186#define DNF_HARDWARE_VERIFICATION 0x00008000
187#define DNF_DEVICE_GONE 0x00010000
188#define DNF_LEGACY_RESOURCE_DEVICENODE 0x00020000
189#define DNF_NEEDS_REBALANCE 0x00040000
190#define DNF_LOCKED_FOR_EJECT 0x00080000
191#define DNF_DRIVER_BLOCKED 0x00100000
192#define DNF_CHILD_WITH_INVALID_ID 0x00200000
193
194// these flags were added in Vista or later
195#define DNF_ASYNC_START_NOT_SUPPORTED 0x00400000
196#define DNF_ASYNC_ENUMERATION_NOT_SUPPORTED 0x00800000
197#define DNF_LOCKED_FOR_REBALANCE 0x01000000
198#define DNF_UNINSTALLED 0x02000000
199#define DNF_NO_LOWER_DEVICE_FILTERS 0x04000000
200#define DNF_NO_LOWER_CLASS_FILTERS 0x08000000
201#define DNF_NO_SERVICE 0x10000000
202#define DNF_NO_UPPER_DEVICE_FILTERS 0x20000000
203#define DNF_NO_UPPER_CLASS_FILTERS 0x40000000
204#define DNF_WAITING_FOR_FDO 0x80000000
205
206//
207// Device Node User Flags
208//
209#define DNUF_WILL_BE_REMOVED 0x0001
210#define DNUF_DONT_SHOW_IN_UI 0x0002
211#define DNUF_NEED_RESTART 0x0004
212#define DNUF_NOT_DISABLEABLE 0x0008
213#define DNUF_SHUTDOWN_QUERIED 0x0010
214#define DNUF_SHUTDOWN_SUBTREE_DONE 0x0020
215
216//
217// Internal Option Flags
218//
219#define IO_ATTACH_DEVICE_API 0x80000000
220
221//
222// Undocumented WMI Registration Flags
223//
224#define WMIREG_FLAG_TRACE_PROVIDER 0x00010000
225#define WMIREG_FLAG_TRACE_NOTIFY_MASK 0x00F00000
226#define WMIREG_NOTIFY_DISK_IO 0x00100000
227#define WMIREG_NOTIFY_TDI_IO 0x00200000
228
229//
230// I/O Completion Information Class for NtQueryIoCompletionInformation
231//
232typedef enum _IO_COMPLETION_INFORMATION_CLASS
233{
234 IoCompletionBasicInformation
235} IO_COMPLETION_INFORMATION_CLASS;
236
237#ifdef NTOS_MODE_USER
238
239//
240// Hardware Interface Type
241//
242typedef enum _INTERFACE_TYPE
243{
244 InterfaceTypeUndefined = -1,
245 Internal,
246 Isa,
247 Eisa,
248 MicroChannel,
249 TurboChannel,
250 PCIBus,
251 VMEBus,
252 NuBus,
253 PCMCIABus,
254 CBus,
255 MPIBus,
256 MPSABus,
257 ProcessorInternal,
258 InternalPowerBus,
259 PNPISABus,
260 PNPBus,
261 MaximumInterfaceType
262}INTERFACE_TYPE, *PINTERFACE_TYPE;
263
264typedef enum _BUS_DATA_TYPE
265{
266 ConfigurationSpaceUndefined = -1,
267 Cmos,
268 EisaConfiguration,
269 Pos,
270 CbusConfiguration,
271 PCIConfiguration,
272 VMEConfiguration,
273 NuBusConfiguration,
274 PCMCIAConfiguration,
275 MPIConfiguration,
276 MPSAConfiguration,
277 PNPISAConfiguration,
278 SgiInternalConfiguration,
279 MaximumBusDataType
280} BUS_DATA_TYPE, *PBUS_DATA_TYPE;
281
282#if defined(NT_PROCESSOR_GROUPS)
283
284typedef USHORT IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY;
285
286enum _IRQ_DEVICE_POLICY_USHORT {
287 IrqPolicyMachineDefault = 0,
288 IrqPolicyAllCloseProcessors = 1,
289 IrqPolicyOneCloseProcessor = 2,
290 IrqPolicyAllProcessorsInMachine = 3,
291 IrqPolicyAllProcessorsInGroup = 3,
292 IrqPolicySpecifiedProcessors = 4,
293 IrqPolicySpreadMessagesAcrossAllProcessors = 5};
294
295#else /* defined(NT_PROCESSOR_GROUPS) */
296
297typedef enum _IRQ_DEVICE_POLICY {
298 IrqPolicyMachineDefault = 0,
299 IrqPolicyAllCloseProcessors,
300 IrqPolicyOneCloseProcessor,
301 IrqPolicyAllProcessorsInMachine,
302 IrqPolicySpecifiedProcessors,
303 IrqPolicySpreadMessagesAcrossAllProcessors
304} IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY;
305
306#endif
307
308typedef enum _IRQ_PRIORITY {
309 IrqPriorityUndefined = 0,
310 IrqPriorityLow,
311 IrqPriorityNormal,
312 IrqPriorityHigh
313} IRQ_PRIORITY, *PIRQ_PRIORITY;
314
315#define IO_RESOURCE_PREFERRED 0x01
316#define IO_RESOURCE_DEFAULT 0x02
317#define IO_RESOURCE_ALTERNATIVE 0x08
318
319typedef struct _IO_RESOURCE_DESCRIPTOR {
320 UCHAR Option;
321 UCHAR Type;
322 UCHAR ShareDisposition;
323 UCHAR Spare1;
324 USHORT Flags;
325 USHORT Spare2;
326 union {
327 struct {
328 ULONG Length;
329 ULONG Alignment;
330 PHYSICAL_ADDRESS MinimumAddress;
331 PHYSICAL_ADDRESS MaximumAddress;
332 } Port;
333 struct {
334 ULONG Length;
335 ULONG Alignment;
336 PHYSICAL_ADDRESS MinimumAddress;
337 PHYSICAL_ADDRESS MaximumAddress;
338 } Memory;
339 struct {
340 ULONG MinimumVector;
341 ULONG MaximumVector;
342#if defined(NT_PROCESSOR_GROUPS)
343 IRQ_DEVICE_POLICY AffinityPolicy;
344 USHORT Group;
345#else
346 IRQ_DEVICE_POLICY AffinityPolicy;
347#endif
348 IRQ_PRIORITY PriorityPolicy;
349 KAFFINITY TargetedProcessors;
350 } Interrupt;
351 struct {
352 ULONG MinimumChannel;
353 ULONG MaximumChannel;
354 } Dma;
355 struct {
356 ULONG Length;
357 ULONG Alignment;
358 PHYSICAL_ADDRESS MinimumAddress;
359 PHYSICAL_ADDRESS MaximumAddress;
360 } Generic;
361 struct {
362 ULONG Data[3];
363 } DevicePrivate;
364 struct {
365 ULONG Length;
366 ULONG MinBusNumber;
367 ULONG MaxBusNumber;
368 ULONG Reserved;
369 } BusNumber;
370 struct {
371 ULONG Priority;
372 ULONG Reserved1;
373 ULONG Reserved2;
374 } ConfigData;
375 } u;
376} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
377
378typedef struct _IO_RESOURCE_LIST {
379 USHORT Version;
380 USHORT Revision;
381 ULONG Count;
382 IO_RESOURCE_DESCRIPTOR Descriptors[1];
383} IO_RESOURCE_LIST, *PIO_RESOURCE_LIST;
384
385typedef struct _IO_RESOURCE_REQUIREMENTS_LIST {
386 ULONG ListSize;
387 INTERFACE_TYPE InterfaceType;
388 ULONG BusNumber;
389 ULONG SlotNumber;
390 ULONG Reserved[3];
391 ULONG AlternativeLists;
392 IO_RESOURCE_LIST List[1];
393} IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;
394
395//
396// File Information Classes for NtQueryInformationFile
397//
398typedef enum _FILE_INFORMATION_CLASS
399{
400 FileDirectoryInformation = 1,
401 FileFullDirectoryInformation = 2,
402 FileBothDirectoryInformation = 3,
403 FileBasicInformation = 4,
404 FileStandardInformation = 5,
405 FileInternalInformation = 6,
406 FileEaInformation = 7,
407 FileAccessInformation = 8,
408 FileNameInformation = 9,
409 FileRenameInformation = 10,
410 FileLinkInformation = 11,
411 FileNamesInformation = 12,
412 FileDispositionInformation = 13,
413 FilePositionInformation = 14,
414 FileFullEaInformation = 15,
415 FileModeInformation = 16,
416 FileAlignmentInformation = 17,
417 FileAllInformation = 18,
418 FileAllocationInformation = 19,
419 FileEndOfFileInformation = 20,
420 FileAlternateNameInformation = 21,
421 FileStreamInformation = 22,
422 FilePipeInformation = 23,
423 FilePipeLocalInformation = 24,
424 FilePipeRemoteInformation = 25,
425 FileMailslotQueryInformation = 26,
426 FileMailslotSetInformation = 27,
427 FileCompressionInformation = 28,
428 FileObjectIdInformation = 29,
429 FileCompletionInformation = 30,
430 FileMoveClusterInformation = 31,
431 FileQuotaInformation = 32,
432 FileReparsePointInformation = 33,
433 FileNetworkOpenInformation = 34,
434 FileAttributeTagInformation = 35,
435 FileTrackingInformation = 36,
436 FileIdBothDirectoryInformation = 37,
437 FileIdFullDirectoryInformation = 38,
438 FileValidDataLengthInformation = 39,
439 FileShortNameInformation = 40,
440 FileIoCompletionNotificationInformation = 41,
441#if (NTDDI_VERSION >= NTDDI_VISTA) || defined(__REACTOS__)
442 FileIoStatusBlockRangeInformation = 42,
443 FileIoPriorityHintInformation = 43,
444 FileSfioReserveInformation = 44,
445 FileSfioVolumeInformation = 45,
446 FileHardLinkInformation = 46,
447 FileProcessIdsUsingFileInformation = 47,
448 FileNormalizedNameInformation = 48,
449 FileNetworkPhysicalNameInformation = 49,
450#endif
451#if (NTDDI_VERSION >= NTDDI_WIN7) || defined(__REACTOS__)
452 FileIdGlobalTxDirectoryInformation = 50,
453 FileIsRemoteDeviceInformation = 51,
454 FileAttributeCacheInformation = 52, // FileUnusedInformation since Windows 8.1
455 FileNumaNodeInformation = 53,
456 FileStandardLinkInformation = 54,
457 FileRemoteProtocolInformation = 55,
458#endif
459#if (NTDDI_VERSION >= NTDDI_WIN8) || defined(__REACTOS__)
460 FileRenameInformationBypassAccessCheck = 56,
461 FileLinkInformationBypassAccessCheck = 57,
462 FileVolumeNameInformation = 58,
463 FileIdInformation = 59,
464 FileIdExtdDirectoryInformation = 60,
465#endif
466#if (NTDDI_VERSION >= NTDDI_WINBLUE) || defined(__REACTOS__)
467 FileReplaceCompletionInformation = 61,
468 FileHardLinkFullIdInformation = 62,
469 FileIdExtdBothDirectoryInformation = 63, // Update 1
470#endif
471#if (NTDDI_VERSION >= NTDDI_WIN10_RS1) || defined(__REACTOS__)
472 FileDispositionInformationEx = 64,
473 FileRenameInformationEx = 65,
474 FileRenameInformationExBypassAccessCheck = 66,
475#endif
476#if (NTDDI_VERSION >= NTDDI_WIN10_RS2) || defined(__REACTOS__)
477 FileDesiredStorageClassInformation = 67,
478 FileStatInformation = 68,
479#endif
480#if (NTDDI_VERSION >= NTDDI_WIN10_RS3) || defined(__REACTOS__)
481 FileMemoryPartitionInformation = 69,
482#endif
483#if (NTDDI_VERSION >= NTDDI_WIN10_RS4) || defined(__REACTOS__)
484 FileStatLxInformation = 70,
485 FileCaseSensitiveInformation = 71,
486#endif
487#if (NTDDI_VERSION >= NTDDI_WIN10_RS5) || defined(__REACTOS__)
488 FileLinkInformationEx = 72,
489 FileLinkInformationExBypassAccessCheck = 73,
490 FileStorageReserveIdInformation = 74,
491 FileCaseSensitiveInformationForceAccessCheck = 75,
492#endif
493#if (NTDDI_VERSION >= NTDDI_WIN11) || defined(__REACTOS__) // 10.0.20150.1000
494 FileKnownFolderInformation = 76,
495#endif
496 FileMaximumInformation
497} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
498
499//
500// File Information Classes for NtQueryInformationFileSystem
501//
502typedef enum _FSINFOCLASS
503{
504 FileFsVolumeInformation = 1,
505 FileFsLabelInformation,
506 FileFsSizeInformation,
507 FileFsDeviceInformation,
508 FileFsAttributeInformation,
509 FileFsControlInformation,
510 FileFsFullSizeInformation,
511 FileFsObjectIdInformation,
512 FileFsDriverPathInformation,
513 FileFsMaximumInformation
514} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
515
516#endif
517
518//
519// Dock Profile Status
520//
521typedef enum _PROFILE_STATUS
522{
523 DOCK_NOTDOCKDEVICE,
524 DOCK_QUIESCENT,
525 DOCK_ARRIVING,
526 DOCK_DEPARTING,
527 DOCK_EJECTIRP_COMPLETED
528} PROFILE_STATUS, *PPROFILE_STATUS;
529
530//
531// Device Node States
532//
533typedef enum _PNP_DEVNODE_STATE
534{
535 DeviceNodeUnspecified = 0x300,
536 DeviceNodeUninitialized = 0x301,
537 DeviceNodeInitialized = 0x302,
538 DeviceNodeDriversAdded = 0x303,
539 DeviceNodeResourcesAssigned = 0x304,
540 DeviceNodeStartPending = 0x305,
541 DeviceNodeStartCompletion = 0x306,
542 DeviceNodeStartPostWork = 0x307,
543 DeviceNodeStarted = 0x308,
544 DeviceNodeQueryStopped = 0x309,
545 DeviceNodeStopped = 0x30a,
546 DeviceNodeRestartCompletion = 0x30b,
547 DeviceNodeEnumeratePending = 0x30c,
548 DeviceNodeEnumerateCompletion = 0x30d,
549 DeviceNodeAwaitingQueuedDeletion = 0x30e,
550 DeviceNodeAwaitingQueuedRemoval = 0x30f,
551 DeviceNodeQueryRemoved = 0x310,
552 DeviceNodeRemovePendingCloses = 0x311,
553 DeviceNodeRemoved = 0x312,
554 DeviceNodeDeletePendingCloses = 0x313,
555 DeviceNodeDeleted = 0x314,
556 MaxDeviceNodeState = 0x315,
557} PNP_DEVNODE_STATE;
558
559#ifdef NTOS_MODE_USER
560
561//
562// I/O Status Block
563//
564typedef struct _IO_STATUS_BLOCK
565{
566 union
567 {
568 NTSTATUS Status;
569 PVOID Pointer;
570 };
571 ULONG_PTR Information;
572} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
573
574//
575// File Information structures for NtQueryInformationFile
576//
577typedef struct _FILE_BASIC_INFORMATION
578{
579 LARGE_INTEGER CreationTime;
580 LARGE_INTEGER LastAccessTime;
581 LARGE_INTEGER LastWriteTime;
582 LARGE_INTEGER ChangeTime;
583 ULONG FileAttributes;
584} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
585
586typedef struct _FILE_STANDARD_INFORMATION
587{
588 LARGE_INTEGER AllocationSize;
589 LARGE_INTEGER EndOfFile;
590 ULONG NumberOfLinks;
591 BOOLEAN DeletePending;
592 BOOLEAN Directory;
593} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
594
595typedef struct _FILE_STREAM_INFORMATION
596{
597 ULONG NextEntryOffset;
598 ULONG StreamNameLength;
599 LARGE_INTEGER StreamSize;
600 LARGE_INTEGER StreamAllocationSize;
601 WCHAR StreamName[1];
602} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
603
604typedef struct _FILE_NETWORK_OPEN_INFORMATION
605{
606 LARGE_INTEGER CreationTime;
607 LARGE_INTEGER LastAccessTime;
608 LARGE_INTEGER LastWriteTime;
609 LARGE_INTEGER ChangeTime;
610 LARGE_INTEGER AllocationSize;
611 LARGE_INTEGER EndOfFile;
612 ULONG FileAttributes;
613} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
614
615typedef struct _FILE_EA_INFORMATION
616{
617 ULONG EaSize;
618} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
619
620typedef struct _FILE_ACCESS_INFORMATION
621{
622 ACCESS_MASK AccessFlags;
623} FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
624
625typedef struct _FILE_COMPRESSION_INFORMATION
626{
627 LARGE_INTEGER CompressedFileSize;
628 USHORT CompressionFormat;
629 UCHAR CompressionUnitShift;
630 UCHAR ChunkShift;
631 UCHAR ClusterShift;
632 UCHAR Reserved[3];
633} FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
634
635typedef struct _FILE_POSITION_INFORMATION
636{
637 LARGE_INTEGER CurrentByteOffset;
638} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
639
640typedef struct _FILE_DISPOSITION_INFORMATION
641{
642 BOOLEAN DeleteFile;
643} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
644
645typedef struct _FILE_FULL_EA_INFORMATION
646{
647 ULONG NextEntryOffset;
648 UCHAR Flags;
649 UCHAR EaNameLength;
650 USHORT EaValueLength;
651 CHAR EaName[1];
652} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
653
654typedef struct _FILE_QUOTA_INFORMATION
655{
656 ULONG NextEntryOffset;
657 ULONG SidLength;
658 LARGE_INTEGER ChangeTime;
659 LARGE_INTEGER QuotaUsed;
660 LARGE_INTEGER QuotaThreshold;
661 LARGE_INTEGER QuotaLimit;
662 SID Sid;
663} FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
664
665typedef struct _FILE_INTERNAL_INFORMATION
666{
667 LARGE_INTEGER IndexNumber;
668} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
669
670typedef struct _FILE_RENAME_INFORMATION
671{
672 BOOLEAN ReplaceIfExists;
673 HANDLE RootDirectory;
674 ULONG FileNameLength;
675 WCHAR FileName[1];
676} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
677
678typedef struct _FILE_PIPE_INFORMATION
679{
680 ULONG ReadMode;
681 ULONG CompletionMode;
682} FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
683
684typedef struct _FILE_PIPE_LOCAL_INFORMATION
685{
686 ULONG NamedPipeType;
687 ULONG NamedPipeConfiguration;
688 ULONG MaximumInstances;
689 ULONG CurrentInstances;
690 ULONG InboundQuota;
691 ULONG ReadDataAvailable;
692 ULONG OutboundQuota;
693 ULONG WriteQuotaAvailable;
694 ULONG NamedPipeState;
695 ULONG NamedPipeEnd;
696} FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
697
698typedef struct _FILE_PIPE_REMOTE_INFORMATION
699{
700 LARGE_INTEGER CollectDataTime;
701 ULONG MaximumCollectionCount;
702} FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
703
704typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
705{
706 ULONG MaximumMessageSize;
707 ULONG MailslotQuota;
708 ULONG NextMessageSize;
709 ULONG MessagesAvailable;
710 LARGE_INTEGER ReadTimeout;
711} FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
712
713typedef struct _FILE_MAILSLOT_SET_INFORMATION
714{
715 PLARGE_INTEGER ReadTimeout;
716} FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
717
718typedef struct _FILE_FULL_DIR_INFORMATION
719{
720 ULONG NextEntryOffset;
721 ULONG FileIndex;
722 LARGE_INTEGER CreationTime;
723 LARGE_INTEGER LastAccessTime;
724 LARGE_INTEGER LastWriteTime;
725 LARGE_INTEGER ChangeTime;
726 LARGE_INTEGER EndOfFile;
727 LARGE_INTEGER AllocationSize;
728 ULONG FileAttributes;
729 ULONG FileNameLength;
730 ULONG EaSize;
731 WCHAR FileName[1];
732} FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
733
734typedef struct _FILE_BOTH_DIR_INFORMATION
735{
736 ULONG NextEntryOffset;
737 ULONG FileIndex;
738 LARGE_INTEGER CreationTime;
739 LARGE_INTEGER LastAccessTime;
740 LARGE_INTEGER LastWriteTime;
741 LARGE_INTEGER ChangeTime;
742 LARGE_INTEGER EndOfFile;
743 LARGE_INTEGER AllocationSize;
744 ULONG FileAttributes;
745 ULONG FileNameLength;
746 ULONG EaSize;
747 CCHAR ShortNameLength;
748 WCHAR ShortName[12];
749 WCHAR FileName[1];
750} FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
751
752typedef struct _FILE_COMPLETION_INFORMATION
753{
754 HANDLE Port;
755 PVOID Key;
756} FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
757
758typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
759{
760 ULONG Flags;
761} FILE_IO_COMPLETION_NOTIFICATION_INFORMATION, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION;
762
763typedef struct _FILE_LINK_INFORMATION
764{
765 BOOLEAN ReplaceIfExists;
766 HANDLE RootDirectory;
767 ULONG FileNameLength;
768 WCHAR FileName[1];
769} FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
770
771typedef struct _FILE_NAME_INFORMATION
772{
773 ULONG FileNameLength;
774 WCHAR FileName[1];
775} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
776
777typedef struct _FILE_ALLOCATION_INFORMATION
778{
779 LARGE_INTEGER AllocationSize;
780} FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
781
782typedef struct _FILE_END_OF_FILE_INFORMATION
783{
784 LARGE_INTEGER EndOfFile;
785} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
786
787typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
788{
789 LARGE_INTEGER ValidDataLength;
790} FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
791
792typedef struct _FILE_DIRECTORY_INFORMATION
793{
794 ULONG NextEntryOffset;
795 ULONG FileIndex;
796 LARGE_INTEGER CreationTime;
797 LARGE_INTEGER LastAccessTime;
798 LARGE_INTEGER LastWriteTime;
799 LARGE_INTEGER ChangeTime;
800 LARGE_INTEGER EndOfFile;
801 LARGE_INTEGER AllocationSize;
802 ULONG FileAttributes;
803 ULONG FileNameLength;
804 WCHAR FileName[1];
805} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
806
807typedef struct _FILE_IO_COMPLETION_INFORMATION
808{
809 PVOID KeyContext;
810 PVOID ApcContext;
811 IO_STATUS_BLOCK IoStatusBlock;
812} FILE_IO_COMPLETION_INFORMATION, *PFILE_IO_COMPLETION_INFORMATION;
813
814typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
815{
816 ULONG FileAttributes;
817 ULONG ReparseTag;
818} FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
819
820typedef struct _FILE_TRACKING_INFORMATION
821{
822 HANDLE DestinationFile;
823 ULONG ObjectInformationLength;
824 CHAR ObjectInformation[1];
825} FILE_TRACKING_INFORMATION, *PFILE_TRACKING_INFORMATION;
826
827//
828// File System Information structures for NtQueryInformationFile
829//
830typedef struct _FILE_FS_DEVICE_INFORMATION
831{
832 DEVICE_TYPE DeviceType;
833 ULONG Characteristics;
834} FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
835
836typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
837{
838 ULONG FileSystemAttributes;
839 ULONG MaximumComponentNameLength;
840 ULONG FileSystemNameLength;
841 WCHAR FileSystemName[1];
842} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
843
844typedef struct _FILE_FS_SIZE_INFORMATION
845{
846 LARGE_INTEGER TotalAllocationUnits;
847 LARGE_INTEGER AvailableAllocationUnits;
848 ULONG SectorsPerAllocationUnit;
849 ULONG BytesPerSector;
850} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
851
852typedef struct _FILE_FS_FULL_SIZE_INFORMATION
853{
854 LARGE_INTEGER TotalAllocationUnits;
855 LARGE_INTEGER CallerAvailableAllocationUnits;
856 LARGE_INTEGER ActualAvailableAllocationUnits;
857 ULONG SectorsPerAllocationUnit;
858 ULONG BytesPerSector;
859} FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
860
861typedef struct _FILE_FS_LABEL_INFORMATION
862{
863 ULONG VolumeLabelLength;
864 WCHAR VolumeLabel[1];
865} FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
866
867typedef struct _FILE_FS_VOLUME_INFORMATION
868{
869 LARGE_INTEGER VolumeCreationTime;
870 ULONG VolumeSerialNumber;
871 ULONG VolumeLabelLength;
872 BOOLEAN SupportsObjects;
873 WCHAR VolumeLabel[1];
874} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
875
876//
877// Pipe Structures for IOCTL_PIPE_XXX
878//
879typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
880{
881 LARGE_INTEGER Timeout;
882 ULONG NameLength;
883 BOOLEAN TimeoutSpecified;
884 WCHAR Name[1];
885} FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
886
887typedef struct _FILE_PIPE_PEEK_BUFFER
888{
889 ULONG NamedPipeState;
890 ULONG ReadDataAvailable;
891 ULONG NumberOfMessages;
892 ULONG MessageLength;
893 CHAR Data[1];
894} FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
895
896typedef struct _FILE_MODE_INFORMATION
897{
898 ULONG Mode;
899} FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
900
901//
902// I/O Error Log Structures
903//
904typedef struct _IO_ERROR_LOG_PACKET
905{
906 UCHAR MajorFunctionCode;
907 UCHAR RetryCount;
908 USHORT DumpDataSize;
909 USHORT NumberOfStrings;
910 USHORT StringOffset;
911 USHORT EventCategory;
912 NTSTATUS ErrorCode;
913 ULONG UniqueErrorValue;
914 NTSTATUS FinalStatus;
915 ULONG SequenceNumber;
916 ULONG IoControlCode;
917 LARGE_INTEGER DeviceOffset;
918 ULONG DumpData[1];
919} IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET;
920
921typedef struct _IO_ERROR_LOG_MESSAGE
922{
923 USHORT Type;
924 USHORT Size;
925 USHORT DriverNameLength;
926 LARGE_INTEGER TimeStamp;
927 ULONG DriverNameOffset;
928 IO_ERROR_LOG_PACKET EntryData;
929} IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE;
930
931#endif
932
933//
934// I/O Completion Information structures
935//
936typedef struct _IO_COMPLETION_BASIC_INFORMATION
937{
938 LONG Depth;
939} IO_COMPLETION_BASIC_INFORMATION, *PIO_COMPLETION_BASIC_INFORMATION;
940
941//
942// Parameters for NtCreateMailslotFile/NtCreateNamedPipeFile
943//
944typedef struct _MAILSLOT_CREATE_PARAMETERS
945{
946 ULONG MailslotQuota;
947 ULONG MaximumMessageSize;
948 LARGE_INTEGER ReadTimeout;
949 BOOLEAN TimeoutSpecified;
950} MAILSLOT_CREATE_PARAMETERS, *PMAILSLOT_CREATE_PARAMETERS;
951
952typedef struct _NAMED_PIPE_CREATE_PARAMETERS
953{
954 ULONG NamedPipeType;
955 ULONG ReadMode;
956 ULONG CompletionMode;
957 ULONG MaximumInstances;
958 ULONG InboundQuota;
959 ULONG OutboundQuota;
960 LARGE_INTEGER DefaultTimeout;
961 BOOLEAN TimeoutSpecified;
962} NAMED_PIPE_CREATE_PARAMETERS, *PNAMED_PIPE_CREATE_PARAMETERS;
963
964#ifndef NTOS_MODE_USER
965
966//
967// I/O Timer Object
968//
969typedef struct _IO_TIMER
970{
971 USHORT Type;
972 USHORT TimerEnabled;
973 LIST_ENTRY IoTimerList;
974 PIO_TIMER_ROUTINE TimerRoutine;
975 PVOID Context;
976 PDEVICE_OBJECT DeviceObject;
977} IO_TIMER;
978
979//
980// Driver Extension
981//
982typedef struct _IO_CLIENT_EXTENSION
983{
984 struct _IO_CLIENT_EXTENSION *NextExtension;
985 PVOID ClientIdentificationAddress;
986} IO_CLIENT_EXTENSION, *PIO_CLIENT_EXTENSION;
987
988#define DEVNODE_HISTORY_SIZE 20
989
990//
991// Device Node
992//
993typedef struct _DEVICE_NODE
994{
995 struct _DEVICE_NODE *Sibling;
996 struct _DEVICE_NODE *Child;
997 struct _DEVICE_NODE *Parent;
998 struct _DEVICE_NODE *LastChild;
999 ULONG Level;
1000 struct _PO_DEVICE_NOTIFY *Notify;
1001 PO_IRP_MANAGER PoIrpManager;
1002 PNP_DEVNODE_STATE State;
1003 PNP_DEVNODE_STATE PreviousState;
1004 PNP_DEVNODE_STATE StateHistory[DEVNODE_HISTORY_SIZE];
1005 ULONG StateHistoryEntry;
1006 NTSTATUS CompletionStatus;
1007 PIRP PendingIrp;
1008 ULONG Flags;
1009 ULONG UserFlags;
1010 ULONG Problem;
1011 PDEVICE_OBJECT PhysicalDeviceObject;
1012 PCM_RESOURCE_LIST ResourceList;
1013 PCM_RESOURCE_LIST ResourceListTranslated;
1014 UNICODE_STRING InstancePath;
1015 UNICODE_STRING ServiceName;
1016 PDEVICE_OBJECT DuplicatePDO;
1017 PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements;
1018 INTERFACE_TYPE InterfaceType;
1019 ULONG BusNumber;
1020 INTERFACE_TYPE ChildInterfaceType;
1021 ULONG ChildBusNumber;
1022 USHORT ChildBusTypeIndex;
1023 UCHAR RemovalPolicy;
1024 UCHAR HardwareRemovalPolicy;
1025 LIST_ENTRY TargetDeviceNotify;
1026 LIST_ENTRY DeviceArbiterList;
1027 LIST_ENTRY DeviceTranslatorList;
1028 USHORT NoTranslatorMask;
1029 USHORT QueryTranslatorMask;
1030 USHORT NoArbiterMask;
1031 USHORT QueryArbiterMask;
1032 union
1033 {
1034 struct _DEVICE_NODE *LegacyDeviceNode;
1035 PDEVICE_RELATIONS PendingDeviceRelations;
1036 } OverUsed1;
1037 union
1038 {
1039 struct _DEVICE_NODE *NextResourceDeviceNode;
1040 } OverUsed2;
1041 PCM_RESOURCE_LIST BootResources;
1042#if (NTDDI_VERSION >= NTDDI_LONGHORN)
1043 PCM_RESOURCE_LIST BootResourcesTranslated;
1044#endif
1045 ULONG CapabilityFlags;
1046 struct
1047 {
1048 PROFILE_STATUS DockStatus;
1049 LIST_ENTRY ListEntry;
1050 WCHAR *SerialNumber;
1051 } DockInfo;
1052 ULONG DisableableDepends;
1053 LIST_ENTRY PendedSetInterfaceState;
1054 LIST_ENTRY LegacyBusListEntry;
1055 ULONG DriverUnloadRetryCount;
1056 struct _DEVICE_NODE *PreviousParent;
1057 ULONG DeletedChildren;
1058#if (NTDDI_VERSION >= NTDDI_LONGHORN)
1059 ULONG NumaNodeIndex;
1060#endif
1061} DEVICE_NODE, *PDEVICE_NODE;
1062
1063//
1064// Resource Aribtrer Entry
1065//
1066typedef struct _PI_RESOURCE_ARBITER_ENTRY
1067{
1068 LIST_ENTRY DeviceArbiterList;
1069 UCHAR ResourceType;
1070 PARBITER_INTERFACE ArbiterInterface;
1071 ULONG Level;
1072 LIST_ENTRY ResourceList;
1073 LIST_ENTRY BestResourceList;
1074 LIST_ENTRY BestConfig;
1075 LIST_ENTRY ActiveArbiterList;
1076 UCHAR State;
1077 UCHAR ResourcesChanged;
1078} PI_RESOURCE_ARBITER_ENTRY, *PPI_RESOURCE_ARBITER_ENTRY;
1079
1080//
1081// Extended Device Object Extension Structure
1082//
1083typedef struct _EXTENDED_DEVOBJ_EXTENSION
1084{
1085 CSHORT Type;
1086 USHORT Size;
1087 PDEVICE_OBJECT DeviceObject;
1088 ULONG PowerFlags;
1089 struct _DEVICE_OBJECT_POWER_EXTENSION *Dope;
1090 ULONG ExtensionFlags;
1091 struct _DEVICE_NODE *DeviceNode;
1092 PDEVICE_OBJECT AttachedTo;
1093 LONG StartIoCount;
1094 LONG StartIoKey;
1095 ULONG StartIoFlags;
1096 struct _VPB *Vpb;
1097} EXTENDED_DEVOBJ_EXTENSION, *PEXTENDED_DEVOBJ_EXTENSION;
1098
1099//
1100// Extended Driver Object Extension Structure
1101//
1102typedef struct _EXTENDED_DRIVER_EXTENSION
1103{
1104 struct _DRIVER_OBJECT *DriverObject;
1105 PDRIVER_ADD_DEVICE AddDevice;
1106 ULONG Count;
1107 UNICODE_STRING ServiceKeyName;
1108 PIO_CLIENT_EXTENSION ClientDriverExtension;
1109 PFS_FILTER_CALLBACKS FsFilterCallbacks;
1110} EXTENDED_DRIVER_EXTENSION, *PEXTENDED_DRIVER_EXTENSION;
1111
1112#endif // !NTOS_MODE_USER
1113
1114//
1115// Firmware Boot File Path
1116//
1117typedef struct _FILE_PATH
1118{
1119 ULONG Version;
1120 ULONG Length;
1121 ULONG Type;
1122 CHAR FilePath[1];
1123} FILE_PATH, *PFILE_PATH;
1124
1125//
1126// Firmware Boot Options
1127//
1128typedef struct _BOOT_OPTIONS
1129{
1130 ULONG Version;
1131 ULONG Length;
1132 ULONG Timeout;
1133 ULONG CurrentBootEntryId;
1134 ULONG NextBootEntryId;
1135 WCHAR HeadlessRedirection[1];
1136} BOOT_OPTIONS, *PBOOT_OPTIONS;
1137
1138//
1139// Firmware Boot Entry
1140//
1141typedef struct _BOOT_ENTRY
1142{
1143 ULONG Version;
1144 ULONG Length;
1145 ULONG Id;
1146 ULONG Attributes;
1147 ULONG FriendlyNameOffset;
1148 ULONG BootFilePathOffset;
1149 ULONG OsOptionsLength;
1150 CHAR OsOptions[1];
1151} BOOT_ENTRY, *PBOOT_ENTRY;
1152
1153//
1154// Firmware Driver Entry
1155//
1156typedef struct _EFI_DRIVER_ENTRY
1157{
1158 ULONG Version;
1159 ULONG Length;
1160 ULONG Id;
1161 ULONG Attributes;
1162 ULONG FriendlyNameOffset;
1163 ULONG DriverFilePathOffset;
1164} EFI_DRIVER_ENTRY, *PEFI_DRIVER_ENTRY;
1165
1166#ifdef NTOS_MODE_USER
1167
1168//
1169// APC Callback for NtReadFile, NtWriteFile
1170//
1171typedef VOID
1172(NTAPI *PIO_APC_ROUTINE)(
1173 _In_ PVOID ApcContext,
1174 _In_ PIO_STATUS_BLOCK IoStatusBlock,
1175 _In_ ULONG Reserved);
1176
1177#define PIO_APC_ROUTINE_DEFINED
1178
1179//
1180// Mailslot IOCTL Codes
1181//
1182#define FSCTL_MAILSLOT_PEEK \
1183 CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
1184
1185//
1186// Pipe IOCTL Codes
1187//
1188#define FSCTL_PIPE_ASSIGN_EVENT \
1189 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
1190#define FSCTL_PIPE_DISCONNECT \
1191 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
1192#define FSCTL_PIPE_LISTEN \
1193 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
1194#define FSCTL_PIPE_PEEK \
1195 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
1196#define FSCTL_PIPE_QUERY_EVENT \
1197 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
1198#define FSCTL_PIPE_TRANSCEIVE \
1199 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1200#define FSCTL_PIPE_WAIT \
1201 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
1202#define FSCTL_PIPE_IMPERSONATE \
1203 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
1204#define FSCTL_PIPE_SET_CLIENT_PROCESS \
1205 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
1206#define FSCTL_PIPE_QUERY_CLIENT_PROCESS \
1207 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
1208#define FSCTL_PIPE_INTERNAL_READ \
1209 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
1210#define FSCTL_PIPE_INTERNAL_WRITE \
1211 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
1212#define FSCTL_PIPE_INTERNAL_TRANSCEIVE \
1213 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1214#define FSCTL_PIPE_INTERNAL_READ_OVFLOW \
1215 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
1216
1217//
1218// Tape IOCTL Codes
1219//
1220#define IOCTL_TAPE_ERASE \
1221 CTL_CODE(FILE_DEVICE_TAPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1222#define IOCTL_TAPE_PREPARE \
1223 CTL_CODE(FILE_DEVICE_TAPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS)
1224#define IOCTL_TAPE_WRITE_MARKS \
1225 CTL_CODE(FILE_DEVICE_TAPE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1226#define IOCTL_TAPE_GET_POSITION \
1227 CTL_CODE(FILE_DEVICE_TAPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS)
1228#define IOCTL_TAPE_SET_POSITION \
1229 CTL_CODE(FILE_DEVICE_TAPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS)
1230#define IOCTL_TAPE_GET_DRIVE_PARAMS \
1231 CTL_CODE(FILE_DEVICE_TAPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS)
1232#define IOCTL_TAPE_SET_DRIVE_PARAMS \
1233 CTL_CODE(FILE_DEVICE_TAPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1234#define IOCTL_TAPE_GET_MEDIA_PARAMS \
1235 CTL_CODE(FILE_DEVICE_TAPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS)
1236#define IOCTL_TAPE_SET_MEDIA_PARAMS \
1237 CTL_CODE(FILE_DEVICE_TAPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
1238#define IOCTL_TAPE_GET_STATUS \
1239 CTL_CODE(FILE_DEVICE_TAPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS)
1240#define IOCTL_TAPE_CREATE_PARTITION \
1241 CTL_CODE(FILE_DEVICE_TAPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1242
1243//
1244// Reparse points
1245//
1246
1247#define SYMLINK_FLAG_RELATIVE 1
1248
1249typedef struct _REPARSE_DATA_BUFFER {
1250 ULONG ReparseTag;
1251 USHORT ReparseDataLength;
1252 USHORT Reserved;
1253 _ANONYMOUS_UNION union {
1254 struct {
1255 USHORT SubstituteNameOffset;
1256 USHORT SubstituteNameLength;
1257 USHORT PrintNameOffset;
1258 USHORT PrintNameLength;
1259 ULONG Flags;
1260 WCHAR PathBuffer[1];
1261 } SymbolicLinkReparseBuffer;
1262 struct {
1263 USHORT SubstituteNameOffset;
1264 USHORT SubstituteNameLength;
1265 USHORT PrintNameOffset;
1266 USHORT PrintNameLength;
1267 WCHAR PathBuffer[1];
1268 } MountPointReparseBuffer;
1269 struct {
1270 UCHAR DataBuffer[1];
1271 } GenericReparseBuffer;
1272 } DUMMYUNIONNAME;
1273} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
1274
1275#endif // NTOS_MODE_USER
1276
1277#endif