[HEADERS]
[reactos.git] / reactos / include / ndk / iotypes.h
index 79b6647..121ce2d 100644 (file)
-/*
- * PROJECT:         ReactOS Native Headers
- * FILE:            include/ndk/iotypes.h
- * PURPOSE:         Definitions for exported I/O Manager Types not defined in DDK/IFS
- * PROGRAMMER:      Alex Ionescu (alex@relsoft.net)
- * UPDATE HISTORY:
- *                  Created 06/10/04
- */
+/*++ NDK Version: 0098
 
+Copyright (c) Alex Ionescu.  All rights reserved.
+
+Header Name:
+
+    iotypes.h
+
+Abstract:
+
+    Type definitions for the I/O Manager.
+
+Author:
+
+    Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
+
+--*/
 #ifndef _IOTYPES_H
 #define _IOTYPES_H
 
-/* DEPENDENCIES **************************************************************/
-#include "potypes.h"
+//
+// Dependencies
+//
+#include <umtypes.h>
+#include <ifssupp.h>
+#include <potypes.h>
+
+//
+// I/O Completion Access Rights
+//
+#define IO_COMPLETION_QUERY_STATE               0x0001
+#ifndef NTOS_MODE_USER
+#define IO_COMPLETION_MODIFY_STATE              0x0002
+#define IO_COMPLETION_ALL_ACCESS                (STANDARD_RIGHTS_REQUIRED | \
+                                                 SYNCHRONIZE | \
+                                                 0x3)
 
-/* EXPORTED DATA *************************************************************/
-extern POBJECT_TYPE NTOSAPI IoAdapterObjectType;
-extern POBJECT_TYPE NTOSAPI IoDeviceHandlerObjectType;
-extern POBJECT_TYPE NTOSAPI IoDeviceObjectType;
-extern POBJECT_TYPE NTOSAPI IoDriverObjectType;
-extern POBJECT_TYPE NTOSAPI IoFileObjectType;
+//
+// Kernel Exported Object Types
+//
+extern POBJECT_TYPE NTSYSAPI IoAdapterObjectType;
+extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType;
+extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType;
+extern POBJECT_TYPE NTSYSAPI IoDriverObjectType;
 
-/* CONSTANTS *****************************************************************/
+#else
+
+//
+// Symbolic Link Access Rights
+//
+#define SYMBOLIC_LINK_QUERY                     0x0001
+#define SYMBOLIC_LINK_ALL_ACCESS                STANDARD_RIGHTS_REQUIRED | 0x0001
+#endif
 
-/* Device Object Extension Flags */
-#define DOE_UNLOAD_PENDING    0x1
-#define DOE_DELETE_PENDING    0x2
-#define DOE_REMOVE_PENDING    0x4
-#define DOE_REMOVE_PROCESSED  0x8
-#define DOE_START_PENDING     0x10
+//
+// NtCreateFile Result Flags
+//
+#define FILE_SUPERSEDED                         0x00000000
+#define FILE_OPENED                             0x00000001
+#define FILE_CREATED                            0x00000002
+#define FILE_OVERWRITTEN                        0x00000003
+#define FILE_EXISTS                             0x00000004
+#define FILE_DOES_NOT_EXIST                     0x00000005
 
-/* Device Node Flags */
+//
+// Pipe Flags
+//
+#define FILE_PIPE_BYTE_STREAM_TYPE              0x00000000
+#define FILE_PIPE_MESSAGE_TYPE                  0x00000001
+#define FILE_PIPE_BYTE_STREAM_MODE              0x00000000
+#define FILE_PIPE_MESSAGE_MODE                  0x00000001
+#define FILE_PIPE_QUEUE_OPERATION               0x00000000
+#define FILE_PIPE_COMPLETE_OPERATION            0x00000001
+#define FILE_PIPE_INBOUND                       0x00000000
+#define FILE_PIPE_OUTBOUND                      0x00000001
+#define FILE_PIPE_FULL_DUPLEX                   0x00000002
+#define FILE_PIPE_CLIENT_END                    0x00000000
+#define FILE_PIPE_SERVER_END                    0x00000001
+
+//
+// NtCreateFile Attributes
+//
+#define FILE_ATTRIBUTE_VALID_FLAGS              0x00007fb7
+#define FILE_ATTRIBUTE_VALID_SET_FLAGS          0x000031a7
+
+//
+// NtCreateFile OpenType Flags
+//
+#define FILE_SUPERSEDE                          0x00000000
+#define FILE_OPEN                               0x00000001
+#define FILE_CREATE                             0x00000002
+#define FILE_OPEN_IF                            0x00000003
+#define FILE_OVERWRITE                          0x00000004
+#define FILE_OVERWRITE_IF                       0x00000005
+#define FILE_MAXIMUM_DISPOSITION                0x00000005
+
+//
+// NtCreateFile Flags
+//
+#define FILE_DIRECTORY_FILE                     0x00000001
+#define FILE_WRITE_THROUGH                      0x00000002
+#define FILE_SEQUENTIAL_ONLY                    0x00000004
+#define FILE_NO_INTERMEDIATE_BUFFERING          0x00000008
+#define FILE_SYNCHRONOUS_IO_ALERT               0x00000010
+#define FILE_SYNCHRONOUS_IO_NONALERT            0x00000020
+#define FILE_NON_DIRECTORY_FILE                 0x00000040
+#define FILE_CREATE_TREE_CONNECTION             0x00000080
+#define FILE_COMPLETE_IF_OPLOCKED               0x00000100
+#define FILE_NO_EA_KNOWLEDGE                    0x00000200
+#define FILE_OPEN_REMOTE_INSTANCE               0x00000400
+#define FILE_RANDOM_ACCESS                      0x00000800
+#define FILE_DELETE_ON_CLOSE                    0x00001000
+#define FILE_OPEN_BY_FILE_ID                    0x00002000
+#define FILE_OPEN_FOR_BACKUP_INTENT             0x00004000
+#define FILE_NO_COMPRESSION                     0x00008000
+#define FILE_RESERVE_OPFILTER                   0x00100000
+#define FILE_OPEN_REPARSE_POINT                 0x00200000
+#define FILE_OPEN_NO_RECALL                     0x00400000
+#define FILE_OPEN_FOR_FREE_SPACE_QUERY          0x00800000
+
+//
+// Device Charactertics
+//
+#define FILE_REMOVABLE_MEDIA                    0x00000001
+#define FILE_REMOTE_DEVICE                      0x00000010
+
+//
+// File Object Flags
+//
+#define FO_FILE_OBJECT_HAS_EXTENSION            0x00800000
+
+//
+// Device Object Extension Flags
+//
+#define DOE_UNLOAD_PENDING                      0x1
+#define DOE_DELETE_PENDING                      0x2
+#define DOE_REMOVE_PENDING                      0x4
+#define DOE_REMOVE_PROCESSED                    0x8
+#define DOE_START_PENDING                       0x10
+
+//
+// Device Object StartIo Flags
+//
+#define DOE_SIO_NO_KEY                          0x20
+#define DOE_SIO_WITH_KEY                        0x40
+#define DOE_SIO_CANCELABLE                      0x80
+#define DOE_SIO_DEFERRED                        0x100
+#define DOE_SIO_NO_CANCEL                       0x200
+
+//
+// Device Node Flags
+//
 #define DNF_PROCESSED                           0x00000001
 #define DNF_STARTED                             0x00000002
 #define DNF_START_FAILED                        0x00000004
@@ -62,11 +182,161 @@ extern POBJECT_TYPE NTOSAPI IoFileObjectType;
 #define DNF_HAS_BOOT_CONFIG                     0x20000000
 #define DNF_BOOT_CONFIG_RESERVED                0x40000000
 #define DNF_HAS_PROBLEM                         0x80000000 // ???
-/* For UserFlags field */
-#define DNUF_DONT_SHOW_IN_UI    0x0002
-#define DNUF_NOT_DISABLEABLE    0x0008
 
-/* ENUMERATIONS **************************************************************/
+//
+// Device Node User Flags
+//
+#define DNUF_DONT_SHOW_IN_UI                    0x0002
+#define DNUF_NOT_DISABLEABLE                    0x0008
+
+//
+// Internal Option Flags
+//
+#define IO_ATTACH_DEVICE_API                    0x80000000
+
+//
+// Undocumented WMI Registration Flags
+//
+#define WMIREG_FLAG_TRACE_PROVIDER              0x00010000
+#define WMIREG_FLAG_TRACE_NOTIFY_MASK           0x00F00000
+#define WMIREG_NOTIFY_DISK_IO                   0x00100000
+#define WMIREG_NOTIFY_TDI_IO                    0x00200000
+
+//
+// I/O Completion Information Class for NtQueryIoCompletionInformation
+//
+typedef enum _IO_COMPLETION_INFORMATION_CLASS
+{
+    IoCompletionBasicInformation
+} IO_COMPLETION_INFORMATION_CLASS;
+
+#ifdef NTOS_MODE_USER
+
+//
+// Hardware Interface Type
+//
+typedef enum _INTERFACE_TYPE
+{
+    InterfaceTypeUndefined = -1,
+    Internal,
+    Isa,
+    Eisa,
+    MicroChannel,
+    TurboChannel,
+    PCIBus,
+    VMEBus,
+    NuBus,
+    PCMCIABus,
+    CBus,
+    MPIBus,
+    MPSABus,
+    ProcessorInternal,
+    InternalPowerBus,
+    PNPISABus,
+    PNPBus,
+    MaximumInterfaceType
+}INTERFACE_TYPE, *PINTERFACE_TYPE;
+
+typedef enum _BUS_DATA_TYPE
+{
+    ConfigurationSpaceUndefined = -1,
+    Cmos,
+    EisaConfiguration,
+    Pos,
+    CbusConfiguration,
+    PCIConfiguration,
+    VMEConfiguration,
+    NuBusConfiguration,
+    PCMCIAConfiguration,
+    MPIConfiguration,
+    MPSAConfiguration,
+    PNPISAConfiguration,
+    SgiInternalConfiguration,
+    MaximumBusDataType
+} BUS_DATA_TYPE, *PBUS_DATA_TYPE;
+
+//
+// File Information Classes for NtQueryInformationFile
+//
+typedef enum _FILE_INFORMATION_CLASS
+{
+    FileDirectoryInformation = 1,
+    FileFullDirectoryInformation,
+    FileBothDirectoryInformation,
+    FileBasicInformation,
+    FileStandardInformation,
+    FileInternalInformation,
+    FileEaInformation,
+    FileAccessInformation,
+    FileNameInformation,
+    FileRenameInformation,
+    FileLinkInformation,
+    FileNamesInformation,
+    FileDispositionInformation,
+    FilePositionInformation,
+    FileFullEaInformation,
+    FileModeInformation,
+    FileAlignmentInformation,
+    FileAllInformation,
+    FileAllocationInformation,
+    FileEndOfFileInformation,
+    FileAlternateNameInformation,
+    FileStreamInformation,
+    FilePipeInformation,
+    FilePipeLocalInformation,
+    FilePipeRemoteInformation,
+    FileMailslotQueryInformation,
+    FileMailslotSetInformation,
+    FileCompressionInformation,
+    FileObjectIdInformation,
+    FileCompletionInformation,
+    FileMoveClusterInformation,
+    FileQuotaInformation,
+    FileReparsePointInformation,
+    FileNetworkOpenInformation,
+    FileAttributeTagInformation,
+    FileTrackingInformation,
+    FileIdBothDirectoryInformation,
+    FileIdFullDirectoryInformation,
+    FileValidDataLengthInformation,
+    FileShortNameInformation,
+    FileMaximumInformation
+} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
+
+//
+// File Information Classes for NtQueryInformationFileSystem
+//
+typedef enum _FSINFOCLASS
+{
+    FileFsVolumeInformation = 1,
+    FileFsLabelInformation,
+    FileFsSizeInformation,
+    FileFsDeviceInformation,
+    FileFsAttributeInformation,
+    FileFsControlInformation,
+    FileFsFullSizeInformation,
+    FileFsObjectIdInformation,
+    FileFsDriverPathInformation,
+    FileFsMaximumInformation
+} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
+
+#endif
+
+//
+// Dock Profile Status
+//
+typedef enum _PROFILE_STATUS
+{
+    DOCK_NOTDOCKDEVICE,
+    DOCK_QUIESCENT,
+    DOCK_ARRIVING,
+    DOCK_DEPARTING,
+    DOCK_EJECTIRP_COMPLETED
+} PROFILE_STATUS, *PPROFILE_STATUS;
+
+//
+// Device Node States
+//
 typedef enum _PNP_DEVNODE_STATE
 {
     DeviceNodeUnspecified = 0x300,
@@ -93,29 +363,373 @@ typedef enum _PNP_DEVNODE_STATE
     MaxDeviceNodeState = 0x315,
 } PNP_DEVNODE_STATE;
 
-/* TYPES *********************************************************************/
+#ifdef NTOS_MODE_USER
+
+//
+// I/O Status Block
+//
+typedef struct _IO_STATUS_BLOCK
+{
+    union
+    {
+        NTSTATUS Status;
+        PVOID Pointer;
+    };
+    ULONG_PTR Information;
+} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
+
+//
+// File Information structures for NtQueryInformationFile
+//
+typedef struct _FILE_BASIC_INFORMATION
+{
+    LARGE_INTEGER CreationTime;
+    LARGE_INTEGER LastAccessTime;
+    LARGE_INTEGER LastWriteTime;
+    LARGE_INTEGER ChangeTime;
+    ULONG FileAttributes;
+} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
+
+typedef struct _FILE_STANDARD_INFORMATION
+{
+    LARGE_INTEGER AllocationSize;
+    LARGE_INTEGER EndOfFile;
+    ULONG NumberOfLinks;
+    BOOLEAN DeletePending;
+    BOOLEAN Directory;
+} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
+
+typedef struct _FILE_STREAM_INFORMATION
+{
+    ULONG NextEntryOffset;
+    ULONG StreamNameLength;
+    LARGE_INTEGER StreamSize;
+    LARGE_INTEGER StreamAllocationSize;
+    WCHAR StreamName[1];
+} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
+
+typedef struct _FILE_NETWORK_OPEN_INFORMATION
+{
+    LARGE_INTEGER CreationTime;
+    LARGE_INTEGER LastAccessTime;
+    LARGE_INTEGER LastWriteTime;
+    LARGE_INTEGER ChangeTime;
+    LARGE_INTEGER AllocationSize;
+    LARGE_INTEGER EndOfFile;
+    ULONG FileAttributes;
+} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
+
+typedef struct _FILE_EA_INFORMATION
+{
+    ULONG EaSize;
+} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
+
+typedef struct _FILE_COMPRESSION_INFORMATION
+{
+    LARGE_INTEGER CompressedFileSize;
+    USHORT CompressionFormat;
+    UCHAR CompressionUnitShift;
+    UCHAR ChunkShift;
+    UCHAR ClusterShift;
+    UCHAR Reserved[3];
+} FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
+
+typedef struct _FILE_POSITION_INFORMATION
+{
+  LARGE_INTEGER CurrentByteOffset;
+} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
+
+typedef struct _FILE_DISPOSITION_INFORMATION
+{
+    BOOLEAN DeleteFile;
+} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
+
+typedef struct _FILE_FULL_EA_INFORMATION
+{
+    ULONG NextEntryOffset;
+    UCHAR Flags;
+    UCHAR EaNameLength;
+    USHORT EaValueLength;
+    CHAR EaName[1];
+} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
+
+typedef struct _FILE_QUOTA_INFORMATION
+{
+    ULONG NextEntryOffset;
+    ULONG SidLength;
+    LARGE_INTEGER ChangeTime;
+    LARGE_INTEGER QuotaUsed;
+    LARGE_INTEGER QuotaThreshold;
+    LARGE_INTEGER QuotaLimit;
+    SID Sid;
+} FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
+
+typedef struct _FILE_INTERNAL_INFORMATION
+{
+    LARGE_INTEGER IndexNumber;
+} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
+
+typedef struct _FILE_RENAME_INFORMATION
+{
+    BOOLEAN ReplaceIfExists;
+    HANDLE  RootDirectory;
+    ULONG FileNameLength;
+    WCHAR FileName[1];
+} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
+
+typedef struct _FILE_PIPE_INFORMATION
+{
+    ULONG ReadMode;
+    ULONG CompletionMode;
+} FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
+
+typedef struct _FILE_PIPE_LOCAL_INFORMATION
+{
+    ULONG NamedPipeType;
+    ULONG NamedPipeConfiguration;
+    ULONG MaximumInstances;
+    ULONG CurrentInstances;
+    ULONG InboundQuota;
+    ULONG ReadDataAvailable;
+    ULONG OutboundQuota;
+    ULONG WriteQuotaAvailable;
+    ULONG NamedPipeState;
+    ULONG NamedPipeEnd;
+} FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
+
+typedef struct _FILE_PIPE_REMOTE_INFORMATION
+{
+    LARGE_INTEGER CollectDataTime;
+    ULONG MaximumCollectionCount;
+} FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
+
+typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
+{
+    ULONG MaximumMessageSize;
+    ULONG MailslotQuota;
+    ULONG NextMessageSize;
+    ULONG MessagesAvailable;
+    LARGE_INTEGER ReadTimeout;
+} FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
+
+typedef struct _FILE_MAILSLOT_SET_INFORMATION
+{
+    PLARGE_INTEGER ReadTimeout;
+} FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
+
+typedef struct _FILE_BOTH_DIR_INFORMATION
+{
+    ULONG NextEntryOffset;
+    ULONG FileIndex;
+    LARGE_INTEGER CreationTime;
+    LARGE_INTEGER LastAccessTime;
+    LARGE_INTEGER LastWriteTime;
+    LARGE_INTEGER ChangeTime;
+    LARGE_INTEGER EndOfFile;
+    LARGE_INTEGER AllocationSize;
+    ULONG FileAttributes;
+    ULONG FileNameLength;
+    ULONG EaSize;
+    CCHAR ShortNameLength;
+    WCHAR ShortName[12];
+    WCHAR FileName[1];
+} FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
+
+typedef struct _FILE_COMPLETION_INFORMATION
+{
+    HANDLE Port;
+    PVOID Key;
+} FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
+
+typedef struct _FILE_LINK_INFORMATION
+{
+    BOOLEAN ReplaceIfExists;
+    HANDLE RootDirectory;
+    ULONG FileNameLength;
+    WCHAR FileName[1];
+} FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
+
+typedef struct _FILE_NAME_INFORMATION
+{
+    ULONG FileNameLength;
+    WCHAR FileName[1];
+} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
+
+typedef struct _FILE_ALLOCATION_INFORMATION
+{
+    LARGE_INTEGER AllocationSize;
+} FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
+
+typedef struct _FILE_END_OF_FILE_INFORMATION
+{
+    LARGE_INTEGER EndOfFile;
+} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
+
+typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
+{
+    LARGE_INTEGER ValidDataLength;
+} FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
+
+typedef struct _FILE_DIRECTORY_INFORMATION
+{
+    ULONG NextEntryOffset;
+    ULONG FileIndex;
+    LARGE_INTEGER CreationTime;
+    LARGE_INTEGER LastAccessTime;
+    LARGE_INTEGER LastWriteTime;
+    LARGE_INTEGER ChangeTime;
+    LARGE_INTEGER EndOfFile;
+    LARGE_INTEGER AllocationSize;
+    ULONG FileAttributes;
+    ULONG FileNameLength;
+    WCHAR FileName[1];
+} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
+
+typedef struct _FILE_IO_COMPLETION_INFORMATION
+{
+    PVOID KeyContext;
+    PVOID ApcContext;
+    IO_STATUS_BLOCK IoStatusBlock;
+} FILE_IO_COMPLETION_INFORMATION, *PFILE_IO_COMPLETION_INFORMATION;
+
+//
+// File System Information structures for NtQueryInformationFile
+//
+typedef struct _FILE_FS_DEVICE_INFORMATION
+{
+    DEVICE_TYPE DeviceType;
+    ULONG Characteristics;
+} FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
+
+typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
+{
+    ULONG FileSystemAttributes;
+    ULONG MaximumComponentNameLength;
+    ULONG FileSystemNameLength;
+    WCHAR FileSystemName[1];
+} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
+
+typedef struct _FILE_FS_SIZE_INFORMATION
+{
+    LARGE_INTEGER TotalAllocationUnits;
+    LARGE_INTEGER AvailableAllocationUnits;
+    ULONG SectorsPerAllocationUnit;
+    ULONG BytesPerSector;
+} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
+
+typedef struct _FILE_FS_FULL_SIZE_INFORMATION
+{
+    LARGE_INTEGER   TotalAllocationUnits;
+    LARGE_INTEGER   CallerAvailableAllocationUnits;
+    LARGE_INTEGER   ActualAvailableAllocationUnits;
+    ULONG           SectorsPerAllocationUnit;
+    ULONG           BytesPerSector;
+} FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
+
+typedef struct _FILE_FS_LABEL_INFORMATION
+{
+    ULONG VolumeLabelLength;
+    WCHAR VolumeLabel[1];
+} FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
+
+typedef struct _FILE_FS_VOLUME_INFORMATION
+{
+    LARGE_INTEGER VolumeCreationTime;
+    ULONG VolumeSerialNumber;
+    ULONG VolumeLabelLength;
+    BOOLEAN SupportsObjects;
+    WCHAR VolumeLabel[1];
+} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
+
+//
+// Pipe Structures for IOCTL_PIPE_XXX
+//
+typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
+{
+    LARGE_INTEGER Timeout;
+    ULONG NameLength;
+    BOOLEAN TimeoutSpecified;
+    WCHAR Name[1];
+} FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
+
+typedef struct _FILE_PIPE_PEEK_BUFFER
+{
+    ULONG NamedPipeState;
+    ULONG ReadDataAvailable;
+    ULONG NumberOfMessages;
+    ULONG MessageLength;
+    CHAR Data[1];
+} FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
+
+//
+// I/O Error Log Structures
+//
+typedef struct _IO_ERROR_LOG_PACKET
+{
+    UCHAR MajorFunctionCode;
+    UCHAR RetryCount;
+    USHORT DumpDataSize;
+    USHORT NumberOfStrings;
+    USHORT StringOffset;
+    USHORT EventCategory;
+    NTSTATUS ErrorCode;
+    ULONG UniqueErrorValue;
+    NTSTATUS FinalStatus;
+    ULONG SequenceNumber;
+    ULONG IoControlCode;
+    LARGE_INTEGER DeviceOffset;
+    ULONG DumpData[1];
+}IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET;
+
+typedef struct _IO_ERROR_LOG_MESSAGE
+{
+    USHORT Type;
+    USHORT Size;
+    USHORT DriverNameLength;
+    LARGE_INTEGER TimeStamp;
+    ULONG DriverNameOffset;
+    IO_ERROR_LOG_PACKET EntryData;
+} IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE;
+
+#endif
 
-typedef struct _MAILSLOT_CREATE_PARAMETERS 
+//
+// I/O Completion Information structures
+//
+typedef struct _IO_COMPLETION_BASIC_INFORMATION
 {
-    ULONG           MailslotQuota;
-    ULONG           MaximumMessageSize;
-    LARGE_INTEGER   ReadTimeout;
-    BOOLEAN         TimeoutSpecified;
+    LONG Depth;
+} IO_COMPLETION_BASIC_INFORMATION, *PIO_COMPLETION_BASIC_INFORMATION;
+
+//
+// Parameters for NtCreateMailslotFile/NtCreateNamedPipeFile
+//
+typedef struct _MAILSLOT_CREATE_PARAMETERS
+{
+    ULONG MailslotQuota;
+    ULONG MaximumMessageSize;
+    LARGE_INTEGER ReadTimeout;
+    BOOLEAN TimeoutSpecified;
 } MAILSLOT_CREATE_PARAMETERS, *PMAILSLOT_CREATE_PARAMETERS;
 
-typedef struct _NAMED_PIPE_CREATE_PARAMETERS 
+typedef struct _NAMED_PIPE_CREATE_PARAMETERS
 {
-    ULONG           NamedPipeType;
-    ULONG           ReadMode;
-    ULONG           CompletionMode;
-    ULONG           MaximumInstances;
-    ULONG           InboundQuota;
-    ULONG           OutboundQuota;
-    LARGE_INTEGER   DefaultTimeout;
-    BOOLEAN         TimeoutSpecified;
+    ULONG NamedPipeType;
+    ULONG ReadMode;
+    ULONG CompletionMode;
+    ULONG MaximumInstances;
+    ULONG InboundQuota;
+    ULONG OutboundQuota;
+    LARGE_INTEGER DefaultTimeout;
+    BOOLEAN TimeoutSpecified;
 } NAMED_PIPE_CREATE_PARAMETERS, *PNAMED_PIPE_CREATE_PARAMETERS;
 
-typedef struct _IO_TIMER 
+#ifndef NTOS_MODE_USER
+
+//
+// I/O Timer Object
+//
+typedef struct _IO_TIMER
 {
     USHORT Type;
     USHORT TimerEnabled;
@@ -123,56 +737,50 @@ typedef struct _IO_TIMER
     PIO_TIMER_ROUTINE TimerRoutine;
     PVOID Context;
     PDEVICE_OBJECT DeviceObject;
-} IO_TIMER, *PIO_TIMER;
+} IO_TIMER;
 
+//
+// Driver Extension
+//
+typedef struct _IO_CLIENT_EXTENSION
+{
+    struct _IO_CLIENT_EXTENSION *NextExtension;
+    PVOID ClientIdentificationAddress;
+} IO_CLIENT_EXTENSION, *PIO_CLIENT_EXTENSION;
+
+//
+// Device Node
+//
 typedef struct _DEVICE_NODE
 {
-    /* A tree structure. */
-    struct _DEVICE_NODE *Parent;
-    struct _DEVICE_NODE *PrevSibling;
-    struct _DEVICE_NODE *NextSibling;
+    struct _DEVICE_NODE *Sibling;
     struct _DEVICE_NODE *Child;
-    /* The level of deepness in the tree. */
-    UINT Level;
-    PPO_DEVICE_NOTIFY Notify;
-    /* State machine. */
+    struct _DEVICE_NODE *Parent;
+    struct _DEVICE_NODE *LastChild;
+    ULONG Level;
+    struct _PO_DEVICE_NOTIFY *Notify;
+    PO_IRP_MANAGER PoIrpManager;
     PNP_DEVNODE_STATE State;
     PNP_DEVNODE_STATE PreviousState;
     PNP_DEVNODE_STATE StateHistory[20];
-    UINT StateHistoryEntry;
-    /* ? */
-    INT CompletionStatus;
-    /* ? */
+    ULONG StateHistoryEntry;
+    NTSTATUS CompletionStatus;
     PIRP PendingIrp;
-    /* See DNF_* flags below (WinDBG documentation has WRONG values) */
     ULONG Flags;
-    /* See DNUF_* flags below (and IRP_MN_QUERY_PNP_DEVICE_STATE) */
     ULONG UserFlags;
-    /* See CM_PROB_* values are defined in cfg.h */
     ULONG Problem;
-    /* Pointer to the PDO corresponding to the device node. */
     PDEVICE_OBJECT PhysicalDeviceObject;
-    /* Resource list as assigned by the PnP arbiter. See IRP_MN_START_DEVICE
-       and ARBITER_INTERFACE (not documented in DDK, but present in headers). */
     PCM_RESOURCE_LIST ResourceList;
-    /* Resource list as assigned by the PnP arbiter (translated version). */
     PCM_RESOURCE_LIST ResourceListTranslated;
-    /* Instance path relative to the Enum key in registry. */
     UNICODE_STRING InstancePath;
-    /* Name of the driver service. */
     UNICODE_STRING ServiceName;
-    /* ? */
     PDEVICE_OBJECT DuplicatePDO;
-    /* See IRP_MN_QUERY_RESOURCE_REQUIREMENTS. */
     PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements;
-    /* Information about bus for bus drivers. */
     INTERFACE_TYPE InterfaceType;
     ULONG BusNumber;
-    /* Information about underlying bus for child devices. */
     INTERFACE_TYPE ChildInterfaceType;
     ULONG ChildBusNumber;
     USHORT ChildBusTypeIndex;
-    /* ? */
     UCHAR RemovalPolicy;
     UCHAR HardwareRemovalPolicy;
     LIST_ENTRY TargetDeviceNotify;
@@ -191,13 +799,14 @@ typedef struct _DEVICE_NODE
     {
         struct _DEVICE_NODE *NextResourceDeviceNode;
     } OverUsed2;
-    /* See IRP_MN_QUERY_RESOURCES/IRP_MN_FILTER_RESOURCES. */
     PCM_RESOURCE_LIST BootResources;
-    /* See the bitfields in DEVICE_CAPABILITIES structure. */
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+    PCM_RESOURCE_LIST BootResourcesTranslated;
+#endif
     ULONG CapabilityFlags;
     struct
     {
-        ULONG DockStatus;
+        PROFILE_STATUS DockStatus;
         LIST_ENTRY ListEntry;
         WCHAR *SerialNumber;
     } DockInfo;
@@ -207,12 +816,14 @@ typedef struct _DEVICE_NODE
     ULONG DriverUnloadRetryCount;
     struct _DEVICE_NODE *PreviousParent;
     ULONG DeletedChidren;
-
-    /* FIXME: Not NT's */
-    GUID BusTypeGuid;
-    ULONG Address;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+    ULONG NumaNodeIndex;
+#endif
 } DEVICE_NODE, *PDEVICE_NODE;
 
+//
+// Resource Aribtrer Entry
+//
 typedef struct _PI_RESOURCE_ARBITER_ENTRY
 {
     LIST_ENTRY DeviceArbiterList;
@@ -226,8 +837,11 @@ typedef struct _PI_RESOURCE_ARBITER_ENTRY
     UCHAR State;
     UCHAR ResourcesChanged;
 } PI_RESOURCE_ARBITER_ENTRY, *PPI_RESOURCE_ARBITER_ENTRY;
-  
-typedef struct _DEVOBJ_EXTENSION
+
+//
+// Extended Device Object Extension Structure
+//
+typedef struct _EXTENDED_DEVOBJ_EXTENSION
 {
     CSHORT Type;
     USHORT Size;
@@ -241,14 +855,398 @@ typedef struct _DEVOBJ_EXTENSION
     LONG StartIoKey;
     ULONG StartIoFlags;
     struct _VPB *Vpb;
-} DEVOBJ_EXTENSION, *PDEVOBJ_EXTENSION;
+} EXTENDED_DEVOBJ_EXTENSION, *PEXTENDED_DEVOBJ_EXTENSION;
 
-typedef struct _PRIVATE_DRIVER_EXTENSIONS
+//
+// Extended Driver Object Extension Structure
+//
+typedef struct _EXTENDED_DRIVER_EXTENSION
 {
-    struct _PRIVATE_DRIVER_EXTENSIONS *Link;
-    PVOID ClientIdentificationAddress;
-    CHAR Extension[1];
-} PRIVATE_DRIVER_EXTENSIONS, *PPRIVATE_DRIVER_EXTENSIONS;
+    struct _DRIVER_OBJECT *DriverObject;
+    PDRIVER_ADD_DEVICE AddDevice;
+    ULONG Count;
+    UNICODE_STRING ServiceKeyName;
+    PIO_CLIENT_EXTENSION ClientDriverExtension;
+    PFS_FILTER_CALLBACKS FsFilterCallbacks;
+} EXTENDED_DRIVER_EXTENSION, *PEXTENDED_DRIVER_EXTENSION;
 
+//
+// Extended I/O Stack Location Structure
+//
+#if !defined(_ALPHA_)
+#include <pshpack4.h>
+#endif
+typedef struct _EXTENDED_IO_STACK_LOCATION
+{
+    UCHAR MajorFunction;
+    UCHAR MinorFunction;
+    UCHAR Flags;
+    UCHAR Control;
+    union
+    {
+        struct
+        {
+            PIO_SECURITY_CONTEXT SecurityContext;
+            ULONG Options;
+            USHORT FileAttributes;
+            USHORT ShareAccess;
+            ULONG EaLength;
+        } Create;
+        struct
+        {
+            PIO_SECURITY_CONTEXT SecurityContext;
+            ULONG Options;
+            USHORT Reserved;
+            USHORT ShareAccess;
+            struct _NAMED_PIPE_CREATE_PARAMETERS *Parameters;
+        } CreatePipe;
+        struct
+        {
+            PIO_SECURITY_CONTEXT SecurityContext;
+            ULONG Options;
+            USHORT Reserved;
+            USHORT ShareAccess;
+            struct _MAILSLOT_CREATE_PARAMETERS *Parameters;
+        } CreateMailslot;
+        struct
+        {
+            ULONG Length;
+            ULONG Key;
+            LARGE_INTEGER ByteOffset;
+        } Read;
+        struct
+        {
+            ULONG Length;
+            ULONG Key;
+            LARGE_INTEGER ByteOffset;
+        } Write;
+        struct
+        {
+            ULONG Length;
+            PUNICODE_STRING FileName;
+            FILE_INFORMATION_CLASS FileInformationClass;
+            ULONG FileIndex;
+        } QueryDirectory;
+        struct
+        {
+            ULONG Length;
+            ULONG CompletionFilter;
+        } NotifyDirectory;
+        struct
+        {
+            ULONG Length;
+            FILE_INFORMATION_CLASS FileInformationClass;
+        } QueryFile;
+        struct
+        {
+            ULONG Length;
+            FILE_INFORMATION_CLASS FileInformationClass;
+            PFILE_OBJECT  FileObject;
+            union
+            {
+                struct
+                {
+                    BOOLEAN ReplaceIfExists;
+                    BOOLEAN AdvanceOnly;
+                };
+                ULONG ClusterCount;
+                HANDLE DeleteHandle;
+            };
+        } SetFile;
+        struct
+        {
+            ULONG Length;
+            PVOID EaList;
+            ULONG EaListLength;
+            ULONG EaIndex;
+        } QueryEa;
+        struct
+        {
+            ULONG Length;
+        } SetEa;
+        struct
+        {
+            ULONG Length;
+            FS_INFORMATION_CLASS FsInformationClass;
+        } QueryVolume;
+        struct
+        {
+            ULONG Length;
+            FS_INFORMATION_CLASS FsInformationClass;
+        } SetVolume;
+        struct
+        {
+            ULONG OutputBufferLength;
+            ULONG InputBufferLength;
+            ULONG FsControlCode;
+            PVOID Type3InputBuffer;
+        } FileSystemControl;
+        struct
+        {
+            PLARGE_INTEGER Length;
+            ULONG Key;
+            LARGE_INTEGER ByteOffset;
+        } LockControl;
+        struct
+        {
+            ULONG OutputBufferLength;
+            ULONG InputBufferLength;
+            ULONG IoControlCode;
+            PVOID Type3InputBuffer;
+        } DeviceIoControl;
+        struct
+        {
+            SECURITY_INFORMATION SecurityInformation;
+            ULONG POINTER_ALIGNMENT Length;
+        } QuerySecurity;
+        struct
+        {
+            SECURITY_INFORMATION SecurityInformation;
+            PSECURITY_DESCRIPTOR SecurityDescriptor;
+        } SetSecurity;
+        struct
+        {
+            PVPB Vpb;
+            PDEVICE_OBJECT DeviceObject;
+        } MountVolume;
+        struct
+        {
+            PVPB Vpb;
+            PDEVICE_OBJECT DeviceObject;
+        } VerifyVolume;
+        struct
+        {
+            struct _SCSI_REQUEST_BLOCK *Srb;
+        } Scsi;
+        struct
+        {
+            ULONG Length;
+            PSID StartSid;
+            struct _FILE_GET_QUOTA_INFORMATION *SidList;
+            ULONG SidListLength;
+        } QueryQuota;
+        struct
+        {
+            ULONG Length;
+        } SetQuota;
+        struct
+        {
+            DEVICE_RELATION_TYPE Type;
+        } QueryDeviceRelations;
+        struct
+        {
+            CONST GUID *InterfaceType;
+            USHORT Size;
+            USHORT Version;
+            PINTERFACE Interface;
+            PVOID InterfaceSpecificData;
+        } QueryInterface;
+        struct
+        {
+            PDEVICE_CAPABILITIES Capabilities;
+        } DeviceCapabilities;
+        struct
+        {
+            PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
+        } FilterResourceRequirements;
+        struct
+        {
+            ULONG WhichSpace;
+            PVOID Buffer;
+            ULONG Offset;
+            ULONG Length;
+        } ReadWriteConfig;
+        struct
+        {
+            BOOLEAN Lock;
+        } SetLock;
+        struct
+        {
+            BUS_QUERY_ID_TYPE IdType;
+        } QueryId;
+        struct
+        {
+            DEVICE_TEXT_TYPE DeviceTextType;
+            LCID LocaleId;
+        } QueryDeviceText;
+        struct
+        {
+            BOOLEAN InPath;
+            BOOLEAN Reserved[3];
+            DEVICE_USAGE_NOTIFICATION_TYPE Type;
+        } UsageNotification;
+        struct
+        {
+            SYSTEM_POWER_STATE  PowerState;
+        } WaitWake;
+        struct
+        {
+            PPOWER_SEQUENCE  PowerSequence;
+        } PowerSequence;
+        struct
+        {
+            ULONG SystemContext;
+            POWER_STATE_TYPE Type;
+            POWER_STATE State;
+            POWER_ACTION ShutdownType;
+        } Power;
+        struct
+        {
+            PCM_RESOURCE_LIST AllocatedResources;
+            PCM_RESOURCE_LIST AllocatedResourcesTranslated;
+        } StartDevice;
+        struct
+        {
+            ULONG_PTR ProviderId;
+            PVOID DataPath;
+            ULONG BufferSize;
+            PVOID Buffer;
+        } WMI;
+        struct
+        {
+            PVOID Argument1;
+            PVOID Argument2;
+            PVOID Argument3;
+            PVOID Argument4;
+        } Others;
+    } Parameters;
+    PDEVICE_OBJECT DeviceObject;
+    PFILE_OBJECT FileObject;
+    PIO_COMPLETION_ROUTINE CompletionRoutine;
+    PVOID Context;
+} EXTENDED_IO_STACK_LOCATION, *PEXTENDED_IO_STACK_LOCATION;
+#if !defined(_ALPHA_)
+#include <poppack.h>
 #endif
+#endif
+
+//
+// Firmware Boot File Path
+//
+typedef struct _FILE_PATH
+{
+    ULONG Version;
+    ULONG Length;
+    ULONG Type;
+    CHAR FilePath[1];
+} FILE_PATH, *PFILE_PATH;
+
+//
+// Firmware Boot Options
+//
+typedef struct _BOOT_OPTIONS
+{
+    ULONG Version;
+    ULONG Length;
+    ULONG Timeout;
+    ULONG CurrentBootEntryId;
+    ULONG NextBootEntryId;
+    WCHAR HeadlessRedirection[1];
+} BOOT_OPTIONS, *PBOOT_OPTIONS;
+
+//
+// Firmware Boot Entry
+//
+typedef struct _BOOT_ENTRY
+{
+    ULONG Version;
+    ULONG Length;
+    ULONG Id;
+    ULONG Attributes;
+    ULONG FriendlyNameOffset;
+    ULONG BootFilePathOffset;
+    ULONG OsOptionsLength;
+    CHAR OsOptions[1];
+} BOOT_ENTRY, *PBOOT_ENTRY;
 
+//
+// Firmware Driver Entry
+//
+typedef struct _EFI_DRIVER_ENTRY
+{
+    ULONG Version;
+    ULONG Length;
+    ULONG Id;
+    ULONG Attributes;
+    ULONG FriendlyNameOffset;
+    ULONG DriverFilePathOffset;
+} EFI_DRIVER_ENTRY, *PEFI_DRIVER_ENTRY;
+
+#ifdef NTOS_MODE_USER
+
+//
+// APC Callback for NtCreateFile
+//
+typedef VOID
+(NTAPI *PIO_APC_ROUTINE)(
+    IN PVOID ApcContext,
+    IN PIO_STATUS_BLOCK IoStatusBlock,
+    IN ULONG Reserved);
+
+//
+// Mailslot IOCTL Codes
+//
+#define FSCTL_MAILSLOT_PEEK             \
+    CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
+
+//
+// Pipe IOCTL Codes
+//
+#define FSCTL_PIPE_ASSIGN_EVENT         \
+    CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_DISCONNECT           \
+    CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_LISTEN               \
+    CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_PEEK                 \
+    CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_PIPE_QUERY_EVENT          \
+    CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_TRANSCEIVE           \
+    CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER,  FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_PIPE_WAIT                 \
+    CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_IMPERSONATE          \
+    CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_SET_CLIENT_PROCESS   \
+    CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_QUERY_CLIENT_PROCESS \
+    CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_INTERNAL_READ        \
+    CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_PIPE_INTERNAL_WRITE       \
+    CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_PIPE_INTERNAL_TRANSCEIVE  \
+    CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_PIPE_INTERNAL_READ_OVFLOW \
+    CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
+
+//
+// Tape IOCTL Codes
+//
+#define IOCTL_TAPE_ERASE                \
+    CTL_CODE(FILE_DEVICE_TAPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_TAPE_PREPARE              \
+    CTL_CODE(FILE_DEVICE_TAPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_WRITE_MARKS          \
+    CTL_CODE(FILE_DEVICE_TAPE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_TAPE_GET_POSITION         \
+    CTL_CODE(FILE_DEVICE_TAPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_SET_POSITION         \
+    CTL_CODE(FILE_DEVICE_TAPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_GET_DRIVE_PARAMS     \
+    CTL_CODE(FILE_DEVICE_TAPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_SET_DRIVE_PARAMS     \
+    CTL_CODE(FILE_DEVICE_TAPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_TAPE_GET_MEDIA_PARAMS     \
+    CTL_CODE(FILE_DEVICE_TAPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_SET_MEDIA_PARAMS     \
+    CTL_CODE(FILE_DEVICE_TAPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_GET_STATUS           \
+    CTL_CODE(FILE_DEVICE_TAPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_CREATE_PARTITION     \
+    CTL_CODE(FILE_DEVICE_TAPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#endif // NTOS_MODE_USER
+
+#endif