mirror of
https://github.com/reactos/reactos.git
synced 2024-11-09 08:08:38 +00:00
527f2f9057
* Create a branch for some evul shell experiments. svn path=/branches/shell-experiments/; revision=61927
1281 lines
35 KiB
C
1281 lines
35 KiB
C
/*++ 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 <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)
|
|
|
|
//
|
|
// Kernel Exported Object Types
|
|
//
|
|
extern POBJECT_TYPE NTSYSAPI IoAdapterObjectType;
|
|
extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType;
|
|
extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType;
|
|
extern POBJECT_TYPE NTSYSAPI IoDriverObjectType;
|
|
|
|
#else
|
|
|
|
//
|
|
// Symbolic Link Access Rights
|
|
//
|
|
#define SYMBOLIC_LINK_QUERY 0x0001
|
|
#define SYMBOLIC_LINK_ALL_ACCESS STANDARD_RIGHTS_REQUIRED | 0x0001
|
|
#endif
|
|
|
|
//
|
|
// 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
|
|
|
|
//
|
|
// 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_READ_ONLY_DEVICE 0x00000002
|
|
#define FILE_FLOPPY_DISKETTE 0x00000004
|
|
#define FILE_WRITE_ONCE_MEDIA 0x00000008
|
|
#define FILE_REMOTE_DEVICE 0x00000010
|
|
#define FILE_DEVICE_IS_MOUNTED 0x00000020
|
|
#define FILE_VIRTUAL_VOLUME 0x00000040
|
|
#define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
|
|
#define FILE_DEVICE_SECURE_OPEN 0x00000100
|
|
|
|
//
|
|
// 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
|
|
#define DNF_ENUMERATED 0x00000008
|
|
#define DNF_DELETED 0x00000010
|
|
#define DNF_MADEUP 0x00000020
|
|
#define DNF_START_REQUEST_PENDING 0x00000040
|
|
#define DNF_NO_RESOURCE_REQUIRED 0x00000080
|
|
#define DNF_INSUFFICIENT_RESOURCES 0x00000100
|
|
#define DNF_RESOURCE_ASSIGNED 0x00000200
|
|
#define DNF_RESOURCE_REPORTED 0x00000400
|
|
#define DNF_HAL_NODE 0x00000800 // ???
|
|
#define DNF_ADDED 0x00001000
|
|
#define DNF_ADD_FAILED 0x00002000
|
|
#define DNF_LEGACY_DRIVER 0x00004000
|
|
#define DNF_STOPPED 0x00008000
|
|
#define DNF_WILL_BE_REMOVED 0x00010000
|
|
#define DNF_LEGACY_RESOURCE_DEVICENODE 0x00020000
|
|
#define DNF_NOT_CONFIGURED 0x00040000
|
|
#define DNF_REINSTALL 0x00080000
|
|
#define DNF_RESOURCE_REQUIREMENTS_NEED_FILTERED 0x00100000 // ???
|
|
#define DNF_DISABLED 0x00200000
|
|
#define DNF_RESTART_OK 0x00400000
|
|
#define DNF_NEED_RESTART 0x00800000
|
|
#define DNF_VISITED 0x01000000
|
|
#define DNF_ASSIGNING_RESOURCES 0x02000000
|
|
#define DNF_BEEING_ENUMERATED 0x04000000
|
|
#define DNF_NEED_ENUMERATION_ONLY 0x08000000
|
|
#define DNF_LOCKED 0x10000000
|
|
#define DNF_HAS_BOOT_CONFIG 0x20000000
|
|
#define DNF_BOOT_CONFIG_RESERVED 0x40000000
|
|
#define DNF_HAS_PROBLEM 0x80000000 // ???
|
|
|
|
//
|
|
// 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,
|
|
DeviceNodeUninitialized = 0x301,
|
|
DeviceNodeInitialized = 0x302,
|
|
DeviceNodeDriversAdded = 0x303,
|
|
DeviceNodeResourcesAssigned = 0x304,
|
|
DeviceNodeStartPending = 0x305,
|
|
DeviceNodeStartCompletion = 0x306,
|
|
DeviceNodeStartPostWork = 0x307,
|
|
DeviceNodeStarted = 0x308,
|
|
DeviceNodeQueryStopped = 0x309,
|
|
DeviceNodeStopped = 0x30a,
|
|
DeviceNodeRestartCompletion = 0x30b,
|
|
DeviceNodeEnumeratePending = 0x30c,
|
|
DeviceNodeEnumerateCompletion = 0x30d,
|
|
DeviceNodeAwaitingQueuedDeletion = 0x30e,
|
|
DeviceNodeAwaitingQueuedRemoval = 0x30f,
|
|
DeviceNodeQueryRemoved = 0x310,
|
|
DeviceNodeRemovePendingCloses = 0x311,
|
|
DeviceNodeRemoved = 0x312,
|
|
DeviceNodeDeletePendingCloses = 0x313,
|
|
DeviceNodeDeleted = 0x314,
|
|
MaxDeviceNodeState = 0x315,
|
|
} PNP_DEVNODE_STATE;
|
|
|
|
#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_FULL_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;
|
|
WCHAR FileName[1];
|
|
} FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_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;
|
|
|
|
typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
|
|
{
|
|
ULONG FileAttributes;
|
|
ULONG ReparseTag;
|
|
} FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_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
|
|
|
|
//
|
|
// I/O Completion Information structures
|
|
//
|
|
typedef struct _IO_COMPLETION_BASIC_INFORMATION
|
|
{
|
|
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
|
|
{
|
|
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;
|
|
|
|
#ifndef NTOS_MODE_USER
|
|
|
|
//
|
|
// I/O Timer Object
|
|
//
|
|
typedef struct _IO_TIMER
|
|
{
|
|
USHORT Type;
|
|
USHORT TimerEnabled;
|
|
LIST_ENTRY IoTimerList;
|
|
PIO_TIMER_ROUTINE TimerRoutine;
|
|
PVOID Context;
|
|
PDEVICE_OBJECT DeviceObject;
|
|
} 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
|
|
{
|
|
struct _DEVICE_NODE *Sibling;
|
|
struct _DEVICE_NODE *Child;
|
|
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];
|
|
ULONG StateHistoryEntry;
|
|
NTSTATUS CompletionStatus;
|
|
PIRP PendingIrp;
|
|
ULONG Flags;
|
|
ULONG UserFlags;
|
|
ULONG Problem;
|
|
PDEVICE_OBJECT PhysicalDeviceObject;
|
|
PCM_RESOURCE_LIST ResourceList;
|
|
PCM_RESOURCE_LIST ResourceListTranslated;
|
|
UNICODE_STRING InstancePath;
|
|
UNICODE_STRING ServiceName;
|
|
PDEVICE_OBJECT DuplicatePDO;
|
|
PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements;
|
|
INTERFACE_TYPE InterfaceType;
|
|
ULONG BusNumber;
|
|
INTERFACE_TYPE ChildInterfaceType;
|
|
ULONG ChildBusNumber;
|
|
USHORT ChildBusTypeIndex;
|
|
UCHAR RemovalPolicy;
|
|
UCHAR HardwareRemovalPolicy;
|
|
LIST_ENTRY TargetDeviceNotify;
|
|
LIST_ENTRY DeviceArbiterList;
|
|
LIST_ENTRY DeviceTranslatorList;
|
|
USHORT NoTranslatorMask;
|
|
USHORT QueryTranslatorMask;
|
|
USHORT NoArbiterMask;
|
|
USHORT QueryArbiterMask;
|
|
union
|
|
{
|
|
struct _DEVICE_NODE *LegacyDeviceNode;
|
|
PDEVICE_RELATIONS PendingDeviceRelations;
|
|
} OverUsed1;
|
|
union
|
|
{
|
|
struct _DEVICE_NODE *NextResourceDeviceNode;
|
|
} OverUsed2;
|
|
PCM_RESOURCE_LIST BootResources;
|
|
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
|
|
PCM_RESOURCE_LIST BootResourcesTranslated;
|
|
#endif
|
|
ULONG CapabilityFlags;
|
|
struct
|
|
{
|
|
PROFILE_STATUS DockStatus;
|
|
LIST_ENTRY ListEntry;
|
|
WCHAR *SerialNumber;
|
|
} DockInfo;
|
|
ULONG DisableableDepends;
|
|
LIST_ENTRY PendedSetInterfaceState;
|
|
LIST_ENTRY LegacyBusListEntry;
|
|
ULONG DriverUnloadRetryCount;
|
|
struct _DEVICE_NODE *PreviousParent;
|
|
ULONG DeletedChidren;
|
|
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
|
|
ULONG NumaNodeIndex;
|
|
#endif
|
|
} DEVICE_NODE, *PDEVICE_NODE;
|
|
|
|
//
|
|
// Resource Aribtrer Entry
|
|
//
|
|
typedef struct _PI_RESOURCE_ARBITER_ENTRY
|
|
{
|
|
LIST_ENTRY DeviceArbiterList;
|
|
UCHAR ResourceType;
|
|
PARBITER_INTERFACE ArbiterInterface;
|
|
ULONG Level;
|
|
LIST_ENTRY ResourceList;
|
|
LIST_ENTRY BestResourceList;
|
|
LIST_ENTRY BestConfig;
|
|
LIST_ENTRY ActiveArbiterList;
|
|
UCHAR State;
|
|
UCHAR ResourcesChanged;
|
|
} PI_RESOURCE_ARBITER_ENTRY, *PPI_RESOURCE_ARBITER_ENTRY;
|
|
|
|
//
|
|
// Extended Device Object Extension Structure
|
|
//
|
|
typedef struct _EXTENDED_DEVOBJ_EXTENSION
|
|
{
|
|
CSHORT Type;
|
|
USHORT Size;
|
|
PDEVICE_OBJECT DeviceObject;
|
|
ULONG PowerFlags;
|
|
struct _DEVICE_OBJECT_POWER_EXTENSION *Dope;
|
|
ULONG ExtensionFlags;
|
|
struct _DEVICE_NODE *DeviceNode;
|
|
PDEVICE_OBJECT AttachedTo;
|
|
LONG StartIoCount;
|
|
LONG StartIoKey;
|
|
ULONG StartIoFlags;
|
|
struct _VPB *Vpb;
|
|
} EXTENDED_DEVOBJ_EXTENSION, *PEXTENDED_DEVOBJ_EXTENSION;
|
|
|
|
//
|
|
// Extended Driver Object Extension Structure
|
|
//
|
|
typedef struct _EXTENDED_DRIVER_EXTENSION
|
|
{
|
|
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
|