1465 lines
51 KiB
Rust
1465 lines
51 KiB
Rust
use crate::string::UTF16Const;
|
|
use crate::winapi_local::um::winioctl::CTL_CODE;
|
|
use winapi::shared::basetsd::ULONG_PTR;
|
|
use winapi::shared::guiddef::GUID;
|
|
use winapi::shared::minwindef::DWORD;
|
|
use winapi::shared::ntdef::{
|
|
BOOLEAN, CCHAR, CHAR, HANDLE, LARGE_INTEGER, LONG, LONGLONG, NTSTATUS, PBOOLEAN, PHANDLE,
|
|
PLARGE_INTEGER, POBJECT_ATTRIBUTES, PUCHAR, PULONG, PUNICODE_STRING, PVOID, UCHAR, ULONG,
|
|
ULONGLONG, USHORT, WCHAR,
|
|
};
|
|
use winapi::um::winioctl::{
|
|
FILE_ANY_ACCESS, FILE_DEVICE_MAILSLOT, FILE_DEVICE_NAMED_PIPE, METHOD_BUFFERED, METHOD_NEITHER,
|
|
};
|
|
use winapi::um::winnt::{
|
|
ACCESS_MASK, FILE_ID_128, FILE_READ_DATA, FILE_WRITE_DATA, PFILE_SEGMENT_ELEMENT, PSID, SID,
|
|
};
|
|
pub const FILE_SUPERSEDE: ULONG = 0x00000000;
|
|
pub const FILE_OPEN: ULONG = 0x00000001;
|
|
pub const FILE_CREATE: ULONG = 0x00000002;
|
|
pub const FILE_OPEN_IF: ULONG = 0x00000003;
|
|
pub const FILE_OVERWRITE: ULONG = 0x00000004;
|
|
pub const FILE_OVERWRITE_IF: ULONG = 0x00000005;
|
|
pub const FILE_MAXIMUM_DISPOSITION: ULONG = 0x00000005;
|
|
pub const FILE_DIRECTORY_FILE: ULONG = 0x00000001;
|
|
pub const FILE_WRITE_THROUGH: ULONG = 0x00000002;
|
|
pub const FILE_SEQUENTIAL_ONLY: ULONG = 0x00000004;
|
|
pub const FILE_NO_INTERMEDIATE_BUFFERING: ULONG = 0x00000008;
|
|
pub const FILE_SYNCHRONOUS_IO_ALERT: ULONG = 0x00000010;
|
|
pub const FILE_SYNCHRONOUS_IO_NONALERT: ULONG = 0x00000020;
|
|
pub const FILE_NON_DIRECTORY_FILE: ULONG = 0x00000040;
|
|
pub const FILE_CREATE_TREE_CONNECTION: ULONG = 0x00000080;
|
|
pub const FILE_COMPLETE_IF_OPLOCKED: ULONG = 0x00000100;
|
|
pub const FILE_NO_EA_KNOWLEDGE: ULONG = 0x00000200;
|
|
pub const FILE_OPEN_FOR_RECOVERY: ULONG = 0x00000400;
|
|
pub const FILE_RANDOM_ACCESS: ULONG = 0x00000800;
|
|
pub const FILE_DELETE_ON_CLOSE: ULONG = 0x00001000;
|
|
pub const FILE_OPEN_BY_FILE_ID: ULONG = 0x00002000;
|
|
pub const FILE_OPEN_FOR_BACKUP_INTENT: ULONG = 0x00004000;
|
|
pub const FILE_NO_COMPRESSION: ULONG = 0x00008000;
|
|
pub const FILE_OPEN_REQUIRING_OPLOCK: ULONG = 0x00010000;
|
|
pub const FILE_DISALLOW_EXCLUSIVE: ULONG = 0x00020000;
|
|
pub const FILE_SESSION_AWARE: ULONG = 0x00040000;
|
|
pub const FILE_RESERVE_OPFILTER: ULONG = 0x00100000;
|
|
pub const FILE_OPEN_REPARSE_POINT: ULONG = 0x00200000;
|
|
pub const FILE_OPEN_NO_RECALL: ULONG = 0x00400000;
|
|
pub const FILE_OPEN_FOR_FREE_SPACE_QUERY: ULONG = 0x00800000;
|
|
pub const FILE_COPY_STRUCTURED_STORAGE: ULONG = 0x00000041;
|
|
pub const FILE_STRUCTURED_STORAGE: ULONG = 0x00000441;
|
|
pub const FILE_SUPERSEDED: ULONG = 0x00000000;
|
|
pub const FILE_OPENED: ULONG = 0x00000001;
|
|
pub const FILE_CREATED: ULONG = 0x00000002;
|
|
pub const FILE_OVERWRITTEN: ULONG = 0x00000003;
|
|
pub const FILE_EXISTS: ULONG = 0x00000004;
|
|
pub const FILE_DOES_NOT_EXIST: ULONG = 0x00000005;
|
|
pub const FILE_WRITE_TO_END_OF_FILE: ULONG = 0xffffffff;
|
|
pub const FILE_USE_FILE_POINTER_POSITION: ULONG = 0xfffffffe;
|
|
pub const FILE_BYTE_ALIGNMENT: ULONG = 0x00000000;
|
|
pub const FILE_WORD_ALIGNMENT: ULONG = 0x00000001;
|
|
pub const FILE_LONG_ALIGNMENT: ULONG = 0x00000003;
|
|
pub const FILE_QUAD_ALIGNMENT: ULONG = 0x00000007;
|
|
pub const FILE_OCTA_ALIGNMENT: ULONG = 0x0000000f;
|
|
pub const FILE_32_BYTE_ALIGNMENT: ULONG = 0x0000001f;
|
|
pub const FILE_64_BYTE_ALIGNMENT: ULONG = 0x0000003f;
|
|
pub const FILE_128_BYTE_ALIGNMENT: ULONG = 0x0000007f;
|
|
pub const FILE_256_BYTE_ALIGNMENT: ULONG = 0x000000ff;
|
|
pub const FILE_512_BYTE_ALIGNMENT: ULONG = 0x000001ff;
|
|
pub const MAXIMUM_FILENAME_LENGTH: u32 = 256;
|
|
pub const FILE_NEED_EA: ULONG = 0x00000080;
|
|
pub const FILE_EA_TYPE_BINARY: ULONG = 0xfffe;
|
|
pub const FILE_EA_TYPE_ASCII: ULONG = 0xfffd;
|
|
pub const FILE_EA_TYPE_BITMAP: ULONG = 0xfffb;
|
|
pub const FILE_EA_TYPE_METAFILE: ULONG = 0xfffa;
|
|
pub const FILE_EA_TYPE_ICON: ULONG = 0xfff9;
|
|
pub const FILE_EA_TYPE_EA: ULONG = 0xffee;
|
|
pub const FILE_EA_TYPE_MVMT: ULONG = 0xffdf;
|
|
pub const FILE_EA_TYPE_MVST: ULONG = 0xffde;
|
|
pub const FILE_EA_TYPE_ASN1: ULONG = 0xffdd;
|
|
pub const FILE_EA_TYPE_FAMILY_IDS: ULONG = 0xff01;
|
|
pub const FILE_REMOVABLE_MEDIA: ULONG = 0x00000001;
|
|
pub const FILE_READ_ONLY_DEVICE: ULONG = 0x00000002;
|
|
pub const FILE_FLOPPY_DISKETTE: ULONG = 0x00000004;
|
|
pub const FILE_WRITE_ONCE_MEDIA: ULONG = 0x00000008;
|
|
pub const FILE_REMOTE_DEVICE: ULONG = 0x00000010;
|
|
pub const FILE_DEVICE_IS_MOUNTED: ULONG = 0x00000020;
|
|
pub const FILE_VIRTUAL_VOLUME: ULONG = 0x00000040;
|
|
pub const FILE_AUTOGENERATED_DEVICE_NAME: ULONG = 0x00000080;
|
|
pub const FILE_DEVICE_SECURE_OPEN: ULONG = 0x00000100;
|
|
pub const FILE_CHARACTERISTIC_PNP_DEVICE: ULONG = 0x00000800;
|
|
pub const FILE_CHARACTERISTIC_TS_DEVICE: ULONG = 0x00001000;
|
|
pub const FILE_CHARACTERISTIC_WEBDAV_DEVICE: ULONG = 0x00002000;
|
|
pub const FILE_CHARACTERISTIC_CSV: ULONG = 0x00010000;
|
|
pub const FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL: ULONG = 0x00020000;
|
|
pub const FILE_PORTABLE_DEVICE: ULONG = 0x00040000;
|
|
pub const FILE_PIPE_BYTE_STREAM_TYPE: ULONG = 0x00000000;
|
|
pub const FILE_PIPE_MESSAGE_TYPE: ULONG = 0x00000001;
|
|
pub const FILE_PIPE_ACCEPT_REMOTE_CLIENTS: ULONG = 0x00000000;
|
|
pub const FILE_PIPE_REJECT_REMOTE_CLIENTS: ULONG = 0x00000002;
|
|
pub const FILE_PIPE_TYPE_VALID_MASK: ULONG = 0x00000003;
|
|
pub const FILE_PIPE_QUEUE_OPERATION: ULONG = 0x00000000;
|
|
pub const FILE_PIPE_COMPLETE_OPERATION: ULONG = 0x00000001;
|
|
pub const FILE_PIPE_BYTE_STREAM_MODE: ULONG = 0x00000000;
|
|
pub const FILE_PIPE_MESSAGE_MODE: ULONG = 0x00000001;
|
|
pub const FILE_PIPE_INBOUND: ULONG = 0x00000000;
|
|
pub const FILE_PIPE_OUTBOUND: ULONG = 0x00000001;
|
|
pub const FILE_PIPE_FULL_DUPLEX: ULONG = 0x00000002;
|
|
pub const FILE_PIPE_DISCONNECTED_STATE: ULONG = 0x00000001;
|
|
pub const FILE_PIPE_LISTENING_STATE: ULONG = 0x00000002;
|
|
pub const FILE_PIPE_CONNECTED_STATE: ULONG = 0x00000003;
|
|
pub const FILE_PIPE_CLOSING_STATE: ULONG = 0x00000004;
|
|
pub const FILE_PIPE_CLIENT_END: ULONG = 0x00000000;
|
|
pub const FILE_PIPE_SERVER_END: ULONG = 0x00000001;
|
|
pub const MAILSLOT_SIZE_AUTO: u32 = 0;
|
|
UNION!{union IO_STATUS_BLOCK_u {
|
|
Status: NTSTATUS,
|
|
Pointer: PVOID,
|
|
}}
|
|
STRUCT!{struct IO_STATUS_BLOCK {
|
|
u: IO_STATUS_BLOCK_u,
|
|
Information: ULONG_PTR,
|
|
}}
|
|
pub type PIO_STATUS_BLOCK = *mut IO_STATUS_BLOCK;
|
|
FN!{stdcall PIO_APC_ROUTINE(
|
|
ApcContext: PVOID,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
Reserved: ULONG,
|
|
) -> ()}
|
|
STRUCT!{struct FILE_IO_COMPLETION_INFORMATION {
|
|
KeyContext: PVOID,
|
|
ApcContext: PVOID,
|
|
IoStatusBlock: IO_STATUS_BLOCK,
|
|
}}
|
|
pub type PFILE_IO_COMPLETION_INFORMATION = *mut FILE_IO_COMPLETION_INFORMATION;
|
|
ENUM!{enum FILE_INFORMATION_CLASS {
|
|
FileDirectoryInformation = 1,
|
|
FileFullDirectoryInformation = 2,
|
|
FileBothDirectoryInformation = 3,
|
|
FileBasicInformation = 4,
|
|
FileStandardInformation = 5,
|
|
FileInternalInformation = 6,
|
|
FileEaInformation = 7,
|
|
FileAccessInformation = 8,
|
|
FileNameInformation = 9,
|
|
FileRenameInformation = 10,
|
|
FileLinkInformation = 11,
|
|
FileNamesInformation = 12,
|
|
FileDispositionInformation = 13,
|
|
FilePositionInformation = 14,
|
|
FileFullEaInformation = 15,
|
|
FileModeInformation = 16,
|
|
FileAlignmentInformation = 17,
|
|
FileAllInformation = 18,
|
|
FileAllocationInformation = 19,
|
|
FileEndOfFileInformation = 20,
|
|
FileAlternateNameInformation = 21,
|
|
FileStreamInformation = 22,
|
|
FilePipeInformation = 23,
|
|
FilePipeLocalInformation = 24,
|
|
FilePipeRemoteInformation = 25,
|
|
FileMailslotQueryInformation = 26,
|
|
FileMailslotSetInformation = 27,
|
|
FileCompressionInformation = 28,
|
|
FileObjectIdInformation = 29,
|
|
FileCompletionInformation = 30,
|
|
FileMoveClusterInformation = 31,
|
|
FileQuotaInformation = 32,
|
|
FileReparsePointInformation = 33,
|
|
FileNetworkOpenInformation = 34,
|
|
FileAttributeTagInformation = 35,
|
|
FileTrackingInformation = 36,
|
|
FileIdBothDirectoryInformation = 37,
|
|
FileIdFullDirectoryInformation = 38,
|
|
FileValidDataLengthInformation = 39,
|
|
FileShortNameInformation = 40,
|
|
FileIoCompletionNotificationInformation = 41,
|
|
FileIoStatusBlockRangeInformation = 42,
|
|
FileIoPriorityHintInformation = 43,
|
|
FileSfioReserveInformation = 44,
|
|
FileSfioVolumeInformation = 45,
|
|
FileHardLinkInformation = 46,
|
|
FileProcessIdsUsingFileInformation = 47,
|
|
FileNormalizedNameInformation = 48,
|
|
FileNetworkPhysicalNameInformation = 49,
|
|
FileIdGlobalTxDirectoryInformation = 50,
|
|
FileIsRemoteDeviceInformation = 51,
|
|
FileUnusedInformation = 52,
|
|
FileNumaNodeInformation = 53,
|
|
FileStandardLinkInformation = 54,
|
|
FileRemoteProtocolInformation = 55,
|
|
FileRenameInformationBypassAccessCheck = 56,
|
|
FileLinkInformationBypassAccessCheck = 57,
|
|
FileVolumeNameInformation = 58,
|
|
FileIdInformation = 59,
|
|
FileIdExtdDirectoryInformation = 60,
|
|
FileReplaceCompletionInformation = 61,
|
|
FileHardLinkFullIdInformation = 62,
|
|
FileIdExtdBothDirectoryInformation = 63,
|
|
FileDispositionInformationEx = 64,
|
|
FileRenameInformationEx = 65,
|
|
FileRenameInformationExBypassAccessCheck = 66,
|
|
FileDesiredStorageClassInformation = 67,
|
|
FileStatInformation = 68,
|
|
FileMemoryPartitionInformation = 69,
|
|
FileStatLxInformation = 70,
|
|
FileCaseSensitiveInformation = 71,
|
|
FileLinkInformationEx = 72,
|
|
FileLinkInformationExBypassAccessCheck = 73,
|
|
FileStorageReserveIdInformation = 74,
|
|
FileCaseSensitiveInformationForceAccessCheck = 75,
|
|
FileMaximumInformation = 76,
|
|
}}
|
|
pub type PFILE_INFORMATION_CLASS = *mut FILE_INFORMATION_CLASS;
|
|
STRUCT!{struct FILE_BASIC_INFORMATION {
|
|
CreationTime: LARGE_INTEGER,
|
|
LastAccessTime: LARGE_INTEGER,
|
|
LastWriteTime: LARGE_INTEGER,
|
|
ChangeTime: LARGE_INTEGER,
|
|
FileAttributes: ULONG,
|
|
}}
|
|
pub type PFILE_BASIC_INFORMATION = *mut FILE_BASIC_INFORMATION;
|
|
STRUCT!{struct FILE_STANDARD_INFORMATION {
|
|
AllocationSize: LARGE_INTEGER,
|
|
EndOfFile: LARGE_INTEGER,
|
|
NumberOfLinks: ULONG,
|
|
DeletePending: BOOLEAN,
|
|
Directory: BOOLEAN,
|
|
}}
|
|
pub type PFILE_STANDARD_INFORMATION = *mut FILE_STANDARD_INFORMATION;
|
|
STRUCT!{struct FILE_STANDARD_INFORMATION_EX {
|
|
AllocationSize: LARGE_INTEGER,
|
|
EndOfFile: LARGE_INTEGER,
|
|
NumberOfLinks: ULONG,
|
|
DeletePending: BOOLEAN,
|
|
Directory: BOOLEAN,
|
|
AlternateStream: BOOLEAN,
|
|
MetadataAttribute: BOOLEAN,
|
|
}}
|
|
pub type PFILE_STANDARD_INFORMATION_EX = *mut FILE_STANDARD_INFORMATION_EX;
|
|
STRUCT!{struct FILE_INTERNAL_INFORMATION {
|
|
IndexNumber: LARGE_INTEGER,
|
|
}}
|
|
pub type PFILE_INTERNAL_INFORMATION = *mut FILE_INTERNAL_INFORMATION;
|
|
STRUCT!{struct FILE_EA_INFORMATION {
|
|
EaSize: ULONG,
|
|
}}
|
|
pub type PFILE_EA_INFORMATION = *mut FILE_EA_INFORMATION;
|
|
STRUCT!{struct FILE_ACCESS_INFORMATION {
|
|
AccessFlags: ACCESS_MASK,
|
|
}}
|
|
pub type PFILE_ACCESS_INFORMATION = *mut FILE_ACCESS_INFORMATION;
|
|
STRUCT!{struct FILE_POSITION_INFORMATION {
|
|
CurrentByteOffset: LARGE_INTEGER,
|
|
}}
|
|
pub type PFILE_POSITION_INFORMATION = *mut FILE_POSITION_INFORMATION;
|
|
STRUCT!{struct FILE_MODE_INFORMATION {
|
|
Mode: ULONG,
|
|
}}
|
|
pub type PFILE_MODE_INFORMATION = *mut FILE_MODE_INFORMATION;
|
|
STRUCT!{struct FILE_ALIGNMENT_INFORMATION {
|
|
AlignmentRequirement: ULONG,
|
|
}}
|
|
pub type PFILE_ALIGNMENT_INFORMATION = *mut FILE_ALIGNMENT_INFORMATION;
|
|
STRUCT!{struct FILE_NAME_INFORMATION {
|
|
FileNameLength: ULONG,
|
|
FileName: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_NAME_INFORMATION = *mut FILE_NAME_INFORMATION;
|
|
STRUCT!{struct FILE_ALL_INFORMATION {
|
|
BasicInformation: FILE_BASIC_INFORMATION,
|
|
StandardInformation: FILE_STANDARD_INFORMATION,
|
|
InternalInformation: FILE_INTERNAL_INFORMATION,
|
|
EaInformation: FILE_EA_INFORMATION,
|
|
AccessInformation: FILE_ACCESS_INFORMATION,
|
|
PositionInformation: FILE_POSITION_INFORMATION,
|
|
ModeInformation: FILE_MODE_INFORMATION,
|
|
AlignmentInformation: FILE_ALIGNMENT_INFORMATION,
|
|
NameInformation: FILE_NAME_INFORMATION,
|
|
}}
|
|
pub type PFILE_ALL_INFORMATION = *mut FILE_ALL_INFORMATION;
|
|
STRUCT!{struct FILE_NETWORK_OPEN_INFORMATION {
|
|
CreationTime: LARGE_INTEGER,
|
|
LastAccessTime: LARGE_INTEGER,
|
|
LastWriteTime: LARGE_INTEGER,
|
|
ChangeTime: LARGE_INTEGER,
|
|
AllocationSize: LARGE_INTEGER,
|
|
EndOfFile: LARGE_INTEGER,
|
|
FileAttributes: ULONG,
|
|
}}
|
|
pub type PFILE_NETWORK_OPEN_INFORMATION = *mut FILE_NETWORK_OPEN_INFORMATION;
|
|
STRUCT!{struct FILE_ATTRIBUTE_TAG_INFORMATION {
|
|
FileAttributes: ULONG,
|
|
ReparseTag: ULONG,
|
|
}}
|
|
pub type PFILE_ATTRIBUTE_TAG_INFORMATION = *mut FILE_ATTRIBUTE_TAG_INFORMATION;
|
|
STRUCT!{struct FILE_ALLOCATION_INFORMATION {
|
|
AllocationSize: LARGE_INTEGER,
|
|
}}
|
|
pub type PFILE_ALLOCATION_INFORMATION = *mut FILE_ALLOCATION_INFORMATION;
|
|
STRUCT!{struct FILE_COMPRESSION_INFORMATION {
|
|
CompressedFileSize: LARGE_INTEGER,
|
|
CompressionFormat: USHORT,
|
|
CompressionUnitShift: UCHAR,
|
|
ChunkShift: UCHAR,
|
|
ClusterShift: UCHAR,
|
|
Reserved: [UCHAR; 3],
|
|
}}
|
|
pub type PFILE_COMPRESSION_INFORMATION = *mut FILE_COMPRESSION_INFORMATION;
|
|
STRUCT!{struct FILE_DISPOSITION_INFORMATION {
|
|
DeleteFileA: BOOLEAN,
|
|
}}
|
|
pub type PFILE_DISPOSITION_INFORMATION = *mut FILE_DISPOSITION_INFORMATION;
|
|
STRUCT!{struct FILE_END_OF_FILE_INFORMATION {
|
|
EndOfFile: LARGE_INTEGER,
|
|
}}
|
|
pub type PFILE_END_OF_FILE_INFORMATION = *mut FILE_END_OF_FILE_INFORMATION;
|
|
STRUCT!{struct FILE_VALID_DATA_LENGTH_INFORMATION {
|
|
ValidDataLength: LARGE_INTEGER,
|
|
}}
|
|
pub type PFILE_VALID_DATA_LENGTH_INFORMATION = *mut FILE_VALID_DATA_LENGTH_INFORMATION;
|
|
STRUCT!{struct FILE_LINK_INFORMATION {
|
|
ReplaceIfExists: BOOLEAN,
|
|
RootDirectory: HANDLE,
|
|
FileNameLength: ULONG,
|
|
FileName: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_LINK_INFORMATION = *mut FILE_LINK_INFORMATION;
|
|
STRUCT!{struct FILE_MOVE_CLUSTER_INFORMATION {
|
|
ClusterCount: ULONG,
|
|
RootDirectory: HANDLE,
|
|
FileNameLength: ULONG,
|
|
FileName: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_MOVE_CLUSTER_INFORMATION = *mut FILE_MOVE_CLUSTER_INFORMATION;
|
|
STRUCT!{struct FILE_RENAME_INFORMATION {
|
|
ReplaceIfExists: BOOLEAN,
|
|
RootDirectory: HANDLE,
|
|
FileNameLength: ULONG,
|
|
FileName: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_RENAME_INFORMATION = *mut FILE_RENAME_INFORMATION;
|
|
STRUCT!{struct FILE_STREAM_INFORMATION {
|
|
NextEntryOffset: ULONG,
|
|
StreamNameLength: ULONG,
|
|
StreamSize: LARGE_INTEGER,
|
|
StreamAllocationSize: LARGE_INTEGER,
|
|
StreamName: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_STREAM_INFORMATION = *mut FILE_STREAM_INFORMATION;
|
|
STRUCT!{struct FILE_TRACKING_INFORMATION {
|
|
DestinationFile: HANDLE,
|
|
ObjectInformationLength: ULONG,
|
|
ObjectInformation: [CHAR; 1],
|
|
}}
|
|
pub type PFILE_TRACKING_INFORMATION = *mut FILE_TRACKING_INFORMATION;
|
|
STRUCT!{struct FILE_COMPLETION_INFORMATION {
|
|
Port: HANDLE,
|
|
Key: PVOID,
|
|
}}
|
|
pub type PFILE_COMPLETION_INFORMATION = *mut FILE_COMPLETION_INFORMATION;
|
|
STRUCT!{struct FILE_PIPE_INFORMATION {
|
|
ReadMode: ULONG,
|
|
CompletionMode: ULONG,
|
|
}}
|
|
pub type PFILE_PIPE_INFORMATION = *mut FILE_PIPE_INFORMATION;
|
|
STRUCT!{struct FILE_PIPE_LOCAL_INFORMATION {
|
|
NamedPipeType: ULONG,
|
|
NamedPipeConfiguration: ULONG,
|
|
MaximumInstances: ULONG,
|
|
CurrentInstances: ULONG,
|
|
InboundQuota: ULONG,
|
|
ReadDataAvailable: ULONG,
|
|
OutboundQuota: ULONG,
|
|
WriteQuotaAvailable: ULONG,
|
|
NamedPipeState: ULONG,
|
|
NamedPipeEnd: ULONG,
|
|
}}
|
|
pub type PFILE_PIPE_LOCAL_INFORMATION = *mut FILE_PIPE_LOCAL_INFORMATION;
|
|
STRUCT!{struct FILE_PIPE_REMOTE_INFORMATION {
|
|
CollectDataTime: LARGE_INTEGER,
|
|
MaximumCollectionCount: ULONG,
|
|
}}
|
|
pub type PFILE_PIPE_REMOTE_INFORMATION = *mut FILE_PIPE_REMOTE_INFORMATION;
|
|
STRUCT!{struct FILE_MAILSLOT_QUERY_INFORMATION {
|
|
MaximumMessageSize: ULONG,
|
|
MailslotQuota: ULONG,
|
|
NextMessageSize: ULONG,
|
|
MessagesAvailable: ULONG,
|
|
ReadTimeout: LARGE_INTEGER,
|
|
}}
|
|
pub type PFILE_MAILSLOT_QUERY_INFORMATION = *mut FILE_MAILSLOT_QUERY_INFORMATION;
|
|
STRUCT!{struct FILE_MAILSLOT_SET_INFORMATION {
|
|
ReadTimeout: PLARGE_INTEGER,
|
|
}}
|
|
pub type PFILE_MAILSLOT_SET_INFORMATION = *mut FILE_MAILSLOT_SET_INFORMATION;
|
|
STRUCT!{struct FILE_REPARSE_POINT_INFORMATION {
|
|
FileReference: LONGLONG,
|
|
Tag: ULONG,
|
|
}}
|
|
pub type PFILE_REPARSE_POINT_INFORMATION = *mut FILE_REPARSE_POINT_INFORMATION;
|
|
STRUCT!{struct FILE_LINK_ENTRY_INFORMATION {
|
|
NextEntryOffset: ULONG,
|
|
ParentFileId: LONGLONG,
|
|
FileNameLength: ULONG,
|
|
FileName: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_LINK_ENTRY_INFORMATION = *mut FILE_LINK_ENTRY_INFORMATION;
|
|
STRUCT!{struct FILE_LINKS_INFORMATION {
|
|
BytesNeeded: ULONG,
|
|
EntriesReturned: ULONG,
|
|
Entry: FILE_LINK_ENTRY_INFORMATION,
|
|
}}
|
|
pub type PFILE_LINKS_INFORMATION = *mut FILE_LINKS_INFORMATION;
|
|
STRUCT!{struct FILE_NETWORK_PHYSICAL_NAME_INFORMATION {
|
|
FileNameLength: ULONG,
|
|
FileName: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_NETWORK_PHYSICAL_NAME_INFORMATION = *mut FILE_NETWORK_PHYSICAL_NAME_INFORMATION;
|
|
STRUCT!{struct FILE_STANDARD_LINK_INFORMATION {
|
|
NumberOfAccessibleLinks: ULONG,
|
|
TotalNumberOfLinks: ULONG,
|
|
DeletePending: BOOLEAN,
|
|
Directory: BOOLEAN,
|
|
}}
|
|
pub type PFILE_STANDARD_LINK_INFORMATION = *mut FILE_STANDARD_LINK_INFORMATION;
|
|
STRUCT!{struct FILE_SFIO_RESERVE_INFORMATION {
|
|
RequestsPerPeriod: ULONG,
|
|
Period: ULONG,
|
|
RetryFailures: BOOLEAN,
|
|
Discardable: BOOLEAN,
|
|
RequestSize: ULONG,
|
|
NumOutstandingRequests: ULONG,
|
|
}}
|
|
pub type PFILE_SFIO_RESERVE_INFORMATION = *mut FILE_SFIO_RESERVE_INFORMATION;
|
|
STRUCT!{struct FILE_SFIO_VOLUME_INFORMATION {
|
|
MaximumRequestsPerPeriod: ULONG,
|
|
MinimumPeriod: ULONG,
|
|
MinimumTransferSize: ULONG,
|
|
}}
|
|
pub type PFILE_SFIO_VOLUME_INFORMATION = *mut FILE_SFIO_VOLUME_INFORMATION;
|
|
ENUM!{enum IO_PRIORITY_HINT {
|
|
IoPriorityVeryLow = 0,
|
|
IoPriorityLow = 1,
|
|
IoPriorityNormal = 2,
|
|
IoPriorityHigh = 3,
|
|
IoPriorityCritical = 4,
|
|
MaxIoPriorityTypes = 5,
|
|
}}
|
|
STRUCT!{struct FILE_IO_PRIORITY_HINT_INFORMATION {
|
|
PriorityHint: IO_PRIORITY_HINT,
|
|
}}
|
|
pub type PFILE_IO_PRIORITY_HINT_INFORMATION = *mut FILE_IO_PRIORITY_HINT_INFORMATION;
|
|
STRUCT!{struct FILE_IO_PRIORITY_HINT_INFORMATION_EX {
|
|
PriorityHint: IO_PRIORITY_HINT,
|
|
BoostOutstanding: BOOLEAN,
|
|
}}
|
|
pub type PFILE_IO_PRIORITY_HINT_INFORMATION_EX = *mut FILE_IO_PRIORITY_HINT_INFORMATION_EX;
|
|
pub const FILE_SKIP_COMPLETION_PORT_ON_SUCCESS: u32 = 0x1;
|
|
pub const FILE_SKIP_SET_EVENT_ON_HANDLE: u32 = 0x2;
|
|
pub const FILE_SKIP_SET_USER_EVENT_ON_FAST_IO: u32 = 0x4;
|
|
STRUCT!{struct FILE_IO_COMPLETION_NOTIFICATION_INFORMATION {
|
|
Flags: ULONG,
|
|
}}
|
|
pub type PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION =
|
|
*mut FILE_IO_COMPLETION_NOTIFICATION_INFORMATION;
|
|
STRUCT!{struct FILE_PROCESS_IDS_USING_FILE_INFORMATION {
|
|
NumberOfProcessIdsInList: ULONG,
|
|
ProcessIdList: [ULONG_PTR; 1],
|
|
}}
|
|
pub type PFILE_PROCESS_IDS_USING_FILE_INFORMATION = *mut FILE_PROCESS_IDS_USING_FILE_INFORMATION;
|
|
STRUCT!{struct FILE_IS_REMOTE_DEVICE_INFORMATION {
|
|
IsRemote: BOOLEAN,
|
|
}}
|
|
pub type PFILE_IS_REMOTE_DEVICE_INFORMATION = *mut FILE_IS_REMOTE_DEVICE_INFORMATION;
|
|
STRUCT!{struct FILE_NUMA_NODE_INFORMATION {
|
|
NodeNumber: USHORT,
|
|
}}
|
|
pub type PFILE_NUMA_NODE_INFORMATION = *mut FILE_NUMA_NODE_INFORMATION;
|
|
STRUCT!{struct FILE_IOSTATUSBLOCK_RANGE_INFORMATION {
|
|
IoStatusBlockRange: PUCHAR,
|
|
Length: ULONG,
|
|
}}
|
|
pub type PFILE_IOSTATUSBLOCK_RANGE_INFORMATION = *mut FILE_IOSTATUSBLOCK_RANGE_INFORMATION;
|
|
STRUCT!{struct FILE_REMOTE_PROTOCOL_INFORMATION_GenericReserved {
|
|
Reserved: [ULONG; 8],
|
|
}}
|
|
STRUCT!{struct FILE_REMOTE_PROTOCOL_INFORMATION_ProtocolSpecific_Smb2_Server {
|
|
Capabilities: ULONG,
|
|
}}
|
|
STRUCT!{struct FILE_REMOTE_PROTOCOL_INFORMATION_ProtocolSpecific_Smb2_Share {
|
|
Capabilities: ULONG,
|
|
CachingFlags: ULONG,
|
|
}}
|
|
STRUCT!{struct FILE_REMOTE_PROTOCOL_INFORMATION_ProtocolSpecific_Smb2 {
|
|
Server: FILE_REMOTE_PROTOCOL_INFORMATION_ProtocolSpecific_Smb2_Server,
|
|
Share: FILE_REMOTE_PROTOCOL_INFORMATION_ProtocolSpecific_Smb2_Share,
|
|
}}
|
|
UNION!{union FILE_REMOTE_PROTOCOL_INFORMATION_ProtocolSpecific {
|
|
Smb2: FILE_REMOTE_PROTOCOL_INFORMATION_ProtocolSpecific_Smb2,
|
|
Reserved: [ULONG; 16],
|
|
}}
|
|
STRUCT!{struct FILE_REMOTE_PROTOCOL_INFORMATION {
|
|
StructureVersion: USHORT,
|
|
StructureSize: USHORT,
|
|
Protocol: ULONG,
|
|
ProtocolMajorVersion: USHORT,
|
|
ProtocolMinorVersion: USHORT,
|
|
ProtocolRevision: USHORT,
|
|
Reserved: USHORT,
|
|
Flags: ULONG,
|
|
GenericReserved: FILE_REMOTE_PROTOCOL_INFORMATION_GenericReserved,
|
|
ProtocolSpecific: FILE_REMOTE_PROTOCOL_INFORMATION_ProtocolSpecific,
|
|
}}
|
|
pub type PFILE_REMOTE_PROTOCOL_INFORMATION = *mut FILE_REMOTE_PROTOCOL_INFORMATION;
|
|
pub const CHECKSUM_ENFORCEMENT_OFF: u32 = 0x00000001;
|
|
STRUCT!{struct FILE_INTEGRITY_STREAM_INFORMATION {
|
|
ChecksumAlgorithm: USHORT,
|
|
ChecksumChunkShift: UCHAR,
|
|
ClusterShift: UCHAR,
|
|
Flags: ULONG,
|
|
}}
|
|
pub type PFILE_INTEGRITY_STREAM_INFORMATION = *mut FILE_INTEGRITY_STREAM_INFORMATION;
|
|
STRUCT!{struct FILE_VOLUME_NAME_INFORMATION {
|
|
DeviceNameLength: ULONG,
|
|
DeviceName: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_VOLUME_NAME_INFORMATION = *mut FILE_VOLUME_NAME_INFORMATION;
|
|
STRUCT!{struct FILE_ID_INFORMATION {
|
|
VolumeSerialNumber: ULONGLONG,
|
|
FileId: FILE_ID_128,
|
|
}}
|
|
pub type PFILE_ID_INFORMATION = *mut FILE_ID_INFORMATION;
|
|
STRUCT!{struct FILE_ID_EXTD_DIR_INFORMATION {
|
|
NextEntryOffset: ULONG,
|
|
FileIndex: ULONG,
|
|
CreationTime: LARGE_INTEGER,
|
|
LastAccessTime: LARGE_INTEGER,
|
|
LastWriteTime: LARGE_INTEGER,
|
|
ChangeTime: LARGE_INTEGER,
|
|
EndOfFile: LARGE_INTEGER,
|
|
AllocationSize: LARGE_INTEGER,
|
|
FileAttributes: ULONG,
|
|
FileNameLength: ULONG,
|
|
EaSize: ULONG,
|
|
ReparsePointTag: ULONG,
|
|
FileId: FILE_ID_128,
|
|
FileName: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_ID_EXTD_DIR_INFORMATION = *mut FILE_ID_EXTD_DIR_INFORMATION;
|
|
STRUCT!{struct FILE_LINK_ENTRY_FULL_ID_INFORMATION {
|
|
NextEntryOffset: ULONG,
|
|
ParentFileId: FILE_ID_128,
|
|
FileNameLength: ULONG,
|
|
FileName: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_LINK_ENTRY_FULL_ID_INFORMATION = *mut FILE_LINK_ENTRY_FULL_ID_INFORMATION;
|
|
STRUCT!{struct FILE_ID_EXTD_BOTH_DIR_INFORMATION {
|
|
NextEntryOffset: ULONG,
|
|
FileIndex: ULONG,
|
|
CreationTime: LARGE_INTEGER,
|
|
LastAccessTime: LARGE_INTEGER,
|
|
LastWriteTime: LARGE_INTEGER,
|
|
ChangeTime: LARGE_INTEGER,
|
|
EndOfFile: LARGE_INTEGER,
|
|
AllocationSize: LARGE_INTEGER,
|
|
FileAttributes: ULONG,
|
|
FileNameLength: ULONG,
|
|
EaSize: ULONG,
|
|
ReparsePointTag: ULONG,
|
|
FileId: FILE_ID_128,
|
|
ShortNameLength: CCHAR,
|
|
ShortName: [WCHAR; 12],
|
|
FileName: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_ID_EXTD_BOTH_DIR_INFORMATION = *mut FILE_ID_EXTD_BOTH_DIR_INFORMATION;
|
|
STRUCT!{struct FILE_STAT_INFORMATION {
|
|
FileId: LARGE_INTEGER,
|
|
CreationTime: LARGE_INTEGER,
|
|
LastAccessTime: LARGE_INTEGER,
|
|
LastWriteTime: LARGE_INTEGER,
|
|
ChangeTime: LARGE_INTEGER,
|
|
AllocationSize: LARGE_INTEGER,
|
|
EndOfFile: LARGE_INTEGER,
|
|
FileAttributes: ULONG,
|
|
ReparseTag: ULONG,
|
|
NumberOfLinks: ULONG,
|
|
EffectiveAccess: ULONG,
|
|
}}
|
|
pub type PFILE_STAT_INFORMATION = *mut FILE_STAT_INFORMATION;
|
|
STRUCT!{struct FILE_MEMORY_PARTITION_INFORMATION_Flags_s {
|
|
NoCrossPartitionAccess: UCHAR,
|
|
Spare: [UCHAR; 3],
|
|
}}
|
|
UNION!{union FILE_MEMORY_PARTITION_INFORMATION_Flags {
|
|
s: FILE_MEMORY_PARTITION_INFORMATION_Flags_s,
|
|
AllFlags: ULONG,
|
|
}}
|
|
STRUCT!{struct FILE_MEMORY_PARTITION_INFORMATION {
|
|
OwnerPartitionHandle: HANDLE,
|
|
Flags: FILE_MEMORY_PARTITION_INFORMATION_Flags,
|
|
}}
|
|
pub type PFILE_MEMORY_PARTITION_INFORMATION = *mut FILE_MEMORY_PARTITION_INFORMATION;
|
|
STRUCT!{struct FILE_STAT_LX_INFORMATION {
|
|
FileId: LARGE_INTEGER,
|
|
CreationTime: LARGE_INTEGER,
|
|
LastAccessTime: LARGE_INTEGER,
|
|
LastWriteTime: LARGE_INTEGER,
|
|
ChangeTime: LARGE_INTEGER,
|
|
AllocationSize: LARGE_INTEGER,
|
|
EndOfFile: LARGE_INTEGER,
|
|
FileAttributes: ULONG,
|
|
ReparseTag: ULONG,
|
|
NumberOfLinks: ULONG,
|
|
EffectiveAccess: ULONG,
|
|
LxFlags: ULONG,
|
|
LxUid: ULONG,
|
|
LxGid: ULONG,
|
|
LxMode: ULONG,
|
|
LxDeviceIdMajor: ULONG,
|
|
LxDeviceIdMinor: ULONG,
|
|
}}
|
|
pub type PFILE_STAT_LX_INFORMATION = *mut FILE_STAT_LX_INFORMATION;
|
|
STRUCT!{struct FILE_CASE_SENSITIVE_INFORMATION {
|
|
Flags: ULONG,
|
|
}}
|
|
pub type PFILE_CASE_SENSITIVE_INFORMATION = *mut FILE_CASE_SENSITIVE_INFORMATION;
|
|
STRUCT!{struct FILE_DIRECTORY_INFORMATION {
|
|
NextEntryOffset: ULONG,
|
|
FileIndex: ULONG,
|
|
CreationTime: LARGE_INTEGER,
|
|
LastAccessTime: LARGE_INTEGER,
|
|
LastWriteTime: LARGE_INTEGER,
|
|
ChangeTime: LARGE_INTEGER,
|
|
EndOfFile: LARGE_INTEGER,
|
|
AllocationSize: LARGE_INTEGER,
|
|
FileAttributes: ULONG,
|
|
FileNameLength: ULONG,
|
|
FileName: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_DIRECTORY_INFORMATION = *mut FILE_DIRECTORY_INFORMATION;
|
|
STRUCT!{struct FILE_FULL_DIR_INFORMATION {
|
|
NextEntryOffset: ULONG,
|
|
FileIndex: ULONG,
|
|
CreationTime: LARGE_INTEGER,
|
|
LastAccessTime: LARGE_INTEGER,
|
|
LastWriteTime: LARGE_INTEGER,
|
|
ChangeTime: LARGE_INTEGER,
|
|
EndOfFile: LARGE_INTEGER,
|
|
AllocationSize: LARGE_INTEGER,
|
|
FileAttributes: ULONG,
|
|
FileNameLength: ULONG,
|
|
EaSize: ULONG,
|
|
FileName: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_FULL_DIR_INFORMATION = *mut FILE_FULL_DIR_INFORMATION;
|
|
STRUCT!{struct FILE_ID_FULL_DIR_INFORMATION {
|
|
NextEntryOffset: ULONG,
|
|
FileIndex: ULONG,
|
|
CreationTime: LARGE_INTEGER,
|
|
LastAccessTime: LARGE_INTEGER,
|
|
LastWriteTime: LARGE_INTEGER,
|
|
ChangeTime: LARGE_INTEGER,
|
|
EndOfFile: LARGE_INTEGER,
|
|
AllocationSize: LARGE_INTEGER,
|
|
FileAttributes: ULONG,
|
|
FileNameLength: ULONG,
|
|
EaSize: ULONG,
|
|
FileId: LARGE_INTEGER,
|
|
FileName: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_ID_FULL_DIR_INFORMATION = *mut FILE_ID_FULL_DIR_INFORMATION;
|
|
STRUCT!{struct FILE_BOTH_DIR_INFORMATION {
|
|
NextEntryOffset: ULONG,
|
|
FileIndex: ULONG,
|
|
CreationTime: LARGE_INTEGER,
|
|
LastAccessTime: LARGE_INTEGER,
|
|
LastWriteTime: LARGE_INTEGER,
|
|
ChangeTime: LARGE_INTEGER,
|
|
EndOfFile: LARGE_INTEGER,
|
|
AllocationSize: LARGE_INTEGER,
|
|
FileAttributes: ULONG,
|
|
FileNameLength: ULONG,
|
|
EaSize: ULONG,
|
|
ShortNameLength: CCHAR,
|
|
ShortName: [WCHAR; 12],
|
|
FileName: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_BOTH_DIR_INFORMATION = *mut FILE_BOTH_DIR_INFORMATION;
|
|
STRUCT!{struct FILE_ID_BOTH_DIR_INFORMATION {
|
|
NextEntryOffset: ULONG,
|
|
FileIndex: ULONG,
|
|
CreationTime: LARGE_INTEGER,
|
|
LastAccessTime: LARGE_INTEGER,
|
|
LastWriteTime: LARGE_INTEGER,
|
|
ChangeTime: LARGE_INTEGER,
|
|
EndOfFile: LARGE_INTEGER,
|
|
AllocationSize: LARGE_INTEGER,
|
|
FileAttributes: ULONG,
|
|
FileNameLength: ULONG,
|
|
EaSize: ULONG,
|
|
ShortNameLength: CCHAR,
|
|
ShortName: [WCHAR; 12],
|
|
FileId: LARGE_INTEGER,
|
|
FileName: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_ID_BOTH_DIR_INFORMATION = *mut FILE_ID_BOTH_DIR_INFORMATION;
|
|
STRUCT!{struct FILE_NAMES_INFORMATION {
|
|
NextEntryOffset: ULONG,
|
|
FileIndex: ULONG,
|
|
FileNameLength: ULONG,
|
|
FileName: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_NAMES_INFORMATION = *mut FILE_NAMES_INFORMATION;
|
|
STRUCT!{struct FILE_ID_GLOBAL_TX_DIR_INFORMATION {
|
|
NextEntryOffset: ULONG,
|
|
FileIndex: ULONG,
|
|
CreationTime: LARGE_INTEGER,
|
|
LastAccessTime: LARGE_INTEGER,
|
|
LastWriteTime: LARGE_INTEGER,
|
|
ChangeTime: LARGE_INTEGER,
|
|
EndOfFile: LARGE_INTEGER,
|
|
AllocationSize: LARGE_INTEGER,
|
|
FileAttributes: ULONG,
|
|
FileNameLength: ULONG,
|
|
FileId: LARGE_INTEGER,
|
|
LockingTransactionId: GUID,
|
|
TxInfoFlags: ULONG,
|
|
FileName: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_ID_GLOBAL_TX_DIR_INFORMATION = *mut FILE_ID_GLOBAL_TX_DIR_INFORMATION;
|
|
pub const FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_WRITELOCKED: u32 = 0x00000001;
|
|
pub const FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_TO_TX: u32 = 0x00000002;
|
|
pub const FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_OUTSIDE_TX: u32 = 0x00000004;
|
|
STRUCT!{struct FILE_OBJECTID_INFORMATION_u_s {
|
|
BirthVolumeId: [UCHAR; 16],
|
|
BirthObjectId: [UCHAR; 16],
|
|
DomainId: [UCHAR; 16],
|
|
}}
|
|
UNION!{union FILE_OBJECTID_INFORMATION_u {
|
|
s: FILE_OBJECTID_INFORMATION_u_s,
|
|
ExtendedInfo: [UCHAR; 48],
|
|
}}
|
|
STRUCT!{struct FILE_OBJECTID_INFORMATION {
|
|
FileReference: LONGLONG,
|
|
ObjectId: [UCHAR; 16],
|
|
u: FILE_OBJECTID_INFORMATION_u,
|
|
}}
|
|
pub type PFILE_OBJECTID_INFORMATION = *mut FILE_OBJECTID_INFORMATION;
|
|
STRUCT!{struct FILE_FULL_EA_INFORMATION {
|
|
NextEntryOffset: ULONG,
|
|
Flags: UCHAR,
|
|
EaNameLength: UCHAR,
|
|
EaValueLength: USHORT,
|
|
EaName: [CHAR; 1],
|
|
}}
|
|
pub type PFILE_FULL_EA_INFORMATION = *mut FILE_FULL_EA_INFORMATION;
|
|
STRUCT!{struct FILE_GET_EA_INFORMATION {
|
|
NextEntryOffset: ULONG,
|
|
EaNameLength: UCHAR,
|
|
EaName: [CHAR; 1],
|
|
}}
|
|
pub type PFILE_GET_EA_INFORMATION = *mut FILE_GET_EA_INFORMATION;
|
|
STRUCT!{struct FILE_GET_QUOTA_INFORMATION {
|
|
NextEntryOffset: ULONG,
|
|
SidLength: ULONG,
|
|
Sid: SID,
|
|
}}
|
|
pub type PFILE_GET_QUOTA_INFORMATION = *mut FILE_GET_QUOTA_INFORMATION;
|
|
STRUCT!{struct FILE_QUOTA_INFORMATION {
|
|
NextEntryOffset: ULONG,
|
|
SidLength: ULONG,
|
|
ChangeTime: LARGE_INTEGER,
|
|
QuotaUsed: LARGE_INTEGER,
|
|
QuotaThreshold: LARGE_INTEGER,
|
|
QuotaLimit: LARGE_INTEGER,
|
|
Sid: SID,
|
|
}}
|
|
pub type PFILE_QUOTA_INFORMATION = *mut FILE_QUOTA_INFORMATION;
|
|
ENUM!{enum FS_INFORMATION_CLASS {
|
|
FileFsVolumeInformation = 1,
|
|
FileFsLabelInformation = 2,
|
|
FileFsSizeInformation = 3,
|
|
FileFsDeviceInformation = 4,
|
|
FileFsAttributeInformation = 5,
|
|
FileFsControlInformation = 6,
|
|
FileFsFullSizeInformation = 7,
|
|
FileFsObjectIdInformation = 8,
|
|
FileFsDriverPathInformation = 9,
|
|
FileFsVolumeFlagsInformation = 10,
|
|
FileFsSectorSizeInformation = 11,
|
|
FileFsDataCopyInformation = 12,
|
|
FileFsMetadataSizeInformation = 13,
|
|
FileFsFullSizeInformationEx = 14,
|
|
FileFsMaximumInformation = 15,
|
|
}}
|
|
pub type PFS_INFORMATION_CLASS = *mut FS_INFORMATION_CLASS;
|
|
STRUCT!{struct FILE_FS_LABEL_INFORMATION {
|
|
VolumeLabelLength: ULONG,
|
|
VolumeLabel: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_FS_LABEL_INFORMATION = *mut FILE_FS_LABEL_INFORMATION;
|
|
STRUCT!{struct FILE_FS_VOLUME_INFORMATION {
|
|
VolumeCreationTime: LARGE_INTEGER,
|
|
VolumeSerialNumber: ULONG,
|
|
VolumeLabelLength: ULONG,
|
|
SupportsObjects: BOOLEAN,
|
|
VolumeLabel: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_FS_VOLUME_INFORMATION = *mut FILE_FS_VOLUME_INFORMATION;
|
|
STRUCT!{struct FILE_FS_SIZE_INFORMATION {
|
|
TotalAllocationUnits: LARGE_INTEGER,
|
|
AvailableAllocationUnits: LARGE_INTEGER,
|
|
SectorsPerAllocationUnit: ULONG,
|
|
BytesPerSector: ULONG,
|
|
}}
|
|
pub type PFILE_FS_SIZE_INFORMATION = *mut FILE_FS_SIZE_INFORMATION;
|
|
STRUCT!{struct FILE_FS_CONTROL_INFORMATION {
|
|
FreeSpaceStartFiltering: LARGE_INTEGER,
|
|
FreeSpaceThreshold: LARGE_INTEGER,
|
|
FreeSpaceStopFiltering: LARGE_INTEGER,
|
|
DefaultQuotaThreshold: LARGE_INTEGER,
|
|
DefaultQuotaLimit: LARGE_INTEGER,
|
|
FileSystemControlFlags: ULONG,
|
|
}}
|
|
pub type PFILE_FS_CONTROL_INFORMATION = *mut FILE_FS_CONTROL_INFORMATION;
|
|
STRUCT!{struct FILE_FS_FULL_SIZE_INFORMATION {
|
|
TotalAllocationUnits: LARGE_INTEGER,
|
|
CallerAvailableAllocationUnits: LARGE_INTEGER,
|
|
ActualAvailableAllocationUnits: LARGE_INTEGER,
|
|
SectorsPerAllocationUnit: ULONG,
|
|
BytesPerSector: ULONG,
|
|
}}
|
|
pub type PFILE_FS_FULL_SIZE_INFORMATION = *mut FILE_FS_FULL_SIZE_INFORMATION;
|
|
STRUCT!{struct FILE_FS_OBJECTID_INFORMATION {
|
|
ObjectId: [UCHAR; 16],
|
|
ExtendedInfo: [UCHAR; 48],
|
|
}}
|
|
pub type PFILE_FS_OBJECTID_INFORMATION = *mut FILE_FS_OBJECTID_INFORMATION;
|
|
STRUCT!{struct FILE_FS_DEVICE_INFORMATION {
|
|
DeviceType: DWORD,
|
|
Characteristics: ULONG,
|
|
}}
|
|
pub type PFILE_FS_DEVICE_INFORMATION = *mut FILE_FS_DEVICE_INFORMATION;
|
|
STRUCT!{struct FILE_FS_ATTRIBUTE_INFORMATION {
|
|
FileSystemAttributes: ULONG,
|
|
MaximumComponentNameLength: LONG,
|
|
FileSystemNameLength: ULONG,
|
|
FileSystemName: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_FS_ATTRIBUTE_INFORMATION = *mut FILE_FS_ATTRIBUTE_INFORMATION;
|
|
STRUCT!{struct FILE_FS_DRIVER_PATH_INFORMATION {
|
|
DriverInPath: BOOLEAN,
|
|
DriverNameLength: ULONG,
|
|
DriverName: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_FS_DRIVER_PATH_INFORMATION = *mut FILE_FS_DRIVER_PATH_INFORMATION;
|
|
STRUCT!{struct FILE_FS_VOLUME_FLAGS_INFORMATION {
|
|
Flags: ULONG,
|
|
}}
|
|
pub type PFILE_FS_VOLUME_FLAGS_INFORMATION = *mut FILE_FS_VOLUME_FLAGS_INFORMATION;
|
|
pub const SSINFO_FLAGS_ALIGNED_DEVICE: u32 = 0x00000001;
|
|
pub const SSINFO_FLAGS_PARTITION_ALIGNED_ON_DEVICE: u32 = 0x00000002;
|
|
pub const SSINFO_OFFSET_UNKNOWN: u32 = 0xffffffff;
|
|
STRUCT!{struct FILE_FS_SECTOR_SIZE_INFORMATION {
|
|
LogicalBytesPerSector: ULONG,
|
|
PhysicalBytesPerSectorForAtomicity: ULONG,
|
|
PhysicalBytesPerSectorForPerformance: ULONG,
|
|
FileSystemEffectivePhysicalBytesPerSectorForAtomicity: ULONG,
|
|
Flags: ULONG,
|
|
ByteOffsetForSectorAlignment: ULONG,
|
|
ByteOffsetForPartitionAlignment: ULONG,
|
|
}}
|
|
pub type PFILE_FS_SECTOR_SIZE_INFORMATION = *mut FILE_FS_SECTOR_SIZE_INFORMATION;
|
|
STRUCT!{struct FILE_FS_DATA_COPY_INFORMATION {
|
|
NumberOfCopies: ULONG,
|
|
}}
|
|
pub type PFILE_FS_DATA_COPY_INFORMATION = *mut FILE_FS_DATA_COPY_INFORMATION;
|
|
STRUCT!{struct FILE_FS_METADATA_SIZE_INFORMATION {
|
|
TotalMetadataAllocationUnits: LARGE_INTEGER,
|
|
SectorsPerAllocationUnit: ULONG,
|
|
BytesPerSector: ULONG,
|
|
}}
|
|
pub type PFILE_FS_METADATA_SIZE_INFORMATION = *mut FILE_FS_METADATA_SIZE_INFORMATION;
|
|
STRUCT!{struct FILE_FS_FULL_SIZE_INFORMATION_EX {
|
|
ActualTotalAllocationUnits: ULONGLONG,
|
|
ActualAvailableAllocationUnits: ULONGLONG,
|
|
ActualPoolUnavailableAllocationUnits: ULONGLONG,
|
|
CallerTotalAllocationUnits: ULONGLONG,
|
|
CallerAvailableAllocationUnits: ULONGLONG,
|
|
CallerPoolUnavailableAllocationUnits: ULONGLONG,
|
|
UsedAllocationUnits: ULONGLONG,
|
|
TotalReservedAllocationUnits: ULONGLONG,
|
|
VolumeStorageReserveAllocationUnits: ULONGLONG,
|
|
AvailableCommittedAllocationUnits: ULONGLONG,
|
|
PoolAvailableAllocationUnits: ULONGLONG,
|
|
SectorsPerAllocationUnit: ULONG,
|
|
BytesPerSector: ULONG,
|
|
}}
|
|
pub type PFILE_FS_FULL_SIZE_INFORMATION_EX = *mut FILE_FS_FULL_SIZE_INFORMATION_EX;
|
|
EXTERN!{extern "system" {
|
|
fn NtCreateFile(
|
|
FileHandle: PHANDLE,
|
|
DesiredAccess: ACCESS_MASK,
|
|
ObjectAttributes: POBJECT_ATTRIBUTES,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
AllocationSize: PLARGE_INTEGER,
|
|
FileAttributes: ULONG,
|
|
ShareAccess: ULONG,
|
|
CreateDisposition: ULONG,
|
|
CreateOptions: ULONG,
|
|
EaBuffer: PVOID,
|
|
EaLength: ULONG,
|
|
) -> NTSTATUS;
|
|
fn NtCreateNamedPipeFile(
|
|
FileHandle: PHANDLE,
|
|
DesiredAccess: ULONG,
|
|
ObjectAttributes: POBJECT_ATTRIBUTES,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
ShareAccess: ULONG,
|
|
CreateDisposition: ULONG,
|
|
CreateOptions: ULONG,
|
|
NamedPipeType: ULONG,
|
|
ReadMode: ULONG,
|
|
CompletionMode: ULONG,
|
|
MaximumInstances: ULONG,
|
|
InboundQuota: ULONG,
|
|
OutboundQuota: ULONG,
|
|
DefaultTimeout: PLARGE_INTEGER,
|
|
) -> NTSTATUS;
|
|
fn NtCreateMailslotFile(
|
|
FileHandle: PHANDLE,
|
|
DesiredAccess: ULONG,
|
|
ObjectAttributes: POBJECT_ATTRIBUTES,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
CreateOptions: ULONG,
|
|
MailslotQuota: ULONG,
|
|
MaximumMessageSize: ULONG,
|
|
ReadTimeout: PLARGE_INTEGER,
|
|
) -> NTSTATUS;
|
|
fn NtOpenFile(
|
|
FileHandle: PHANDLE,
|
|
DesiredAccess: ACCESS_MASK,
|
|
ObjectAttributes: POBJECT_ATTRIBUTES,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
ShareAccess: ULONG,
|
|
OpenOptions: ULONG,
|
|
) -> NTSTATUS;
|
|
fn NtDeleteFile(
|
|
ObjectAttributes: POBJECT_ATTRIBUTES,
|
|
) -> NTSTATUS;
|
|
fn NtFlushBuffersFile(
|
|
FileHandle: HANDLE,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
) -> NTSTATUS;
|
|
fn NtFlushBuffersFileEx(
|
|
FileHandle: HANDLE,
|
|
Flags: ULONG,
|
|
Parameters: PVOID,
|
|
ParametersSize: ULONG,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
) -> NTSTATUS;
|
|
fn NtQueryInformationFile(
|
|
FileHandle: HANDLE,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
FileInformation: PVOID,
|
|
Length: ULONG,
|
|
FileInformationClass: FILE_INFORMATION_CLASS,
|
|
) -> NTSTATUS;
|
|
fn NtQueryInformationByName(
|
|
ObjectAttributes: POBJECT_ATTRIBUTES,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
FileInformation: PVOID,
|
|
Length: ULONG,
|
|
FileInformationClass: FILE_INFORMATION_CLASS,
|
|
) -> NTSTATUS;
|
|
fn NtSetInformationFile(
|
|
FileHandle: HANDLE,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
FileInformation: PVOID,
|
|
Length: ULONG,
|
|
FileInformationClass: FILE_INFORMATION_CLASS,
|
|
) -> NTSTATUS;
|
|
fn NtQueryDirectoryFile(
|
|
FileHandle: HANDLE,
|
|
Event: HANDLE,
|
|
ApcRoutine: PIO_APC_ROUTINE,
|
|
ApcContext: PVOID,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
FileInformation: PVOID,
|
|
Length: ULONG,
|
|
FileInformationClass: FILE_INFORMATION_CLASS,
|
|
ReturnSingleEntry: BOOLEAN,
|
|
FileName: PUNICODE_STRING,
|
|
RestartScan: BOOLEAN,
|
|
) -> NTSTATUS;
|
|
fn NtQueryEaFile(
|
|
FileHandle: HANDLE,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
Buffer: PVOID,
|
|
Length: ULONG,
|
|
ReturnSingleEntry: BOOLEAN,
|
|
EaList: PVOID,
|
|
EaListLength: ULONG,
|
|
EaIndex: PULONG,
|
|
RestartScan: BOOLEAN,
|
|
) -> NTSTATUS;
|
|
fn NtSetEaFile(
|
|
FileHandle: HANDLE,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
Buffer: PVOID,
|
|
Length: ULONG,
|
|
) -> NTSTATUS;
|
|
fn NtQueryQuotaInformationFile(
|
|
FileHandle: HANDLE,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
Buffer: PVOID,
|
|
Length: ULONG,
|
|
ReturnSingleEntry: BOOLEAN,
|
|
SidList: PVOID,
|
|
SidListLength: ULONG,
|
|
StartSid: PSID,
|
|
RestartScan: BOOLEAN,
|
|
) -> NTSTATUS;
|
|
fn NtSetQuotaInformationFile(
|
|
FileHandle: HANDLE,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
Buffer: PVOID,
|
|
Length: ULONG,
|
|
) -> NTSTATUS;
|
|
fn NtQueryVolumeInformationFile(
|
|
FileHandle: HANDLE,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
FsInformation: PVOID,
|
|
Length: ULONG,
|
|
FsInformationClass: FS_INFORMATION_CLASS,
|
|
) -> NTSTATUS;
|
|
fn NtSetVolumeInformationFile(
|
|
FileHandle: HANDLE,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
FsInformation: PVOID,
|
|
Length: ULONG,
|
|
FsInformationClass: FS_INFORMATION_CLASS,
|
|
) -> NTSTATUS;
|
|
fn NtCancelIoFile(
|
|
FileHandle: HANDLE,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
) -> NTSTATUS;
|
|
fn NtCancelIoFileEx(
|
|
FileHandle: HANDLE,
|
|
IoRequestToCancel: PIO_STATUS_BLOCK,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
) -> NTSTATUS;
|
|
fn NtCancelSynchronousIoFile(
|
|
ThreadHandle: HANDLE,
|
|
IoRequestToCancel: PIO_STATUS_BLOCK,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
) -> NTSTATUS;
|
|
fn NtDeviceIoControlFile(
|
|
FileHandle: HANDLE,
|
|
Event: HANDLE,
|
|
ApcRoutine: PIO_APC_ROUTINE,
|
|
ApcContext: PVOID,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
IoControlCode: ULONG,
|
|
InputBuffer: PVOID,
|
|
InputBufferLength: ULONG,
|
|
OutputBuffer: PVOID,
|
|
OutputBufferLength: ULONG,
|
|
) -> NTSTATUS;
|
|
fn NtFsControlFile(
|
|
FileHandle: HANDLE,
|
|
Event: HANDLE,
|
|
ApcRoutine: PIO_APC_ROUTINE,
|
|
ApcContext: PVOID,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
FsControlCode: ULONG,
|
|
InputBuffer: PVOID,
|
|
InputBufferLength: ULONG,
|
|
OutputBuffer: PVOID,
|
|
OutputBufferLength: ULONG,
|
|
) -> NTSTATUS;
|
|
fn NtReadFile(
|
|
FileHandle: HANDLE,
|
|
Event: HANDLE,
|
|
ApcRoutine: PIO_APC_ROUTINE,
|
|
ApcContext: PVOID,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
Buffer: PVOID,
|
|
Length: ULONG,
|
|
ByteOffset: PLARGE_INTEGER,
|
|
Key: PULONG,
|
|
) -> NTSTATUS;
|
|
fn NtWriteFile(
|
|
FileHandle: HANDLE,
|
|
Event: HANDLE,
|
|
ApcRoutine: PIO_APC_ROUTINE,
|
|
ApcContext: PVOID,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
Buffer: PVOID,
|
|
Length: ULONG,
|
|
ByteOffset: PLARGE_INTEGER,
|
|
Key: PULONG,
|
|
) -> NTSTATUS;
|
|
fn NtReadFileScatter(
|
|
FileHandle: HANDLE,
|
|
Event: HANDLE,
|
|
ApcRoutine: PIO_APC_ROUTINE,
|
|
ApcContext: PVOID,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
SegmentArray: PFILE_SEGMENT_ELEMENT,
|
|
Length: ULONG,
|
|
ByteOffset: PLARGE_INTEGER,
|
|
Key: PULONG,
|
|
) -> NTSTATUS;
|
|
fn NtWriteFileGather(
|
|
FileHandle: HANDLE,
|
|
Event: HANDLE,
|
|
ApcRoutine: PIO_APC_ROUTINE,
|
|
ApcContext: PVOID,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
SegmentArray: PFILE_SEGMENT_ELEMENT,
|
|
Length: ULONG,
|
|
ByteOffset: PLARGE_INTEGER,
|
|
Key: PULONG,
|
|
) -> NTSTATUS;
|
|
fn NtLockFile(
|
|
FileHandle: HANDLE,
|
|
Event: HANDLE,
|
|
ApcRoutine: PIO_APC_ROUTINE,
|
|
ApcContext: PVOID,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
ByteOffset: PLARGE_INTEGER,
|
|
Length: PLARGE_INTEGER,
|
|
Key: ULONG,
|
|
FailImmediately: BOOLEAN,
|
|
ExclusiveLock: BOOLEAN,
|
|
) -> NTSTATUS;
|
|
fn NtUnlockFile(
|
|
FileHandle: HANDLE,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
ByteOffset: PLARGE_INTEGER,
|
|
Length: PLARGE_INTEGER,
|
|
Key: ULONG,
|
|
) -> NTSTATUS;
|
|
fn NtQueryAttributesFile(
|
|
ObjectAttributes: POBJECT_ATTRIBUTES,
|
|
FileInformation: PFILE_BASIC_INFORMATION,
|
|
) -> NTSTATUS;
|
|
fn NtQueryFullAttributesFile(
|
|
ObjectAttributes: POBJECT_ATTRIBUTES,
|
|
FileInformation: PFILE_NETWORK_OPEN_INFORMATION,
|
|
) -> NTSTATUS;
|
|
fn NtNotifyChangeDirectoryFile(
|
|
FileHandle: HANDLE,
|
|
Event: HANDLE,
|
|
ApcRoutine: PIO_APC_ROUTINE,
|
|
ApcContext: PVOID,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
Buffer: PVOID,
|
|
Length: ULONG,
|
|
CompletionFilter: ULONG,
|
|
WatchTree: BOOLEAN,
|
|
) -> NTSTATUS;
|
|
fn NtLoadDriver(
|
|
DriverServiceName: PUNICODE_STRING,
|
|
) -> NTSTATUS;
|
|
fn NtUnloadDriver(
|
|
DriverServiceName: PUNICODE_STRING,
|
|
) -> NTSTATUS;
|
|
}}
|
|
pub const IO_COMPLETION_QUERY_STATE: u32 = 0x0001;
|
|
ENUM!{enum IO_COMPLETION_INFORMATION_CLASS {
|
|
IoCompletionBasicInformation = 0,
|
|
}}
|
|
STRUCT!{struct IO_COMPLETION_BASIC_INFORMATION {
|
|
Depth: LONG,
|
|
}}
|
|
pub type PIO_COMPLETION_BASIC_INFORMATION = *mut IO_COMPLETION_BASIC_INFORMATION;
|
|
EXTERN!{extern "system" {
|
|
fn NtCreateIoCompletion(
|
|
IoCompletionHandle: PHANDLE,
|
|
DesiredAccess: ACCESS_MASK,
|
|
ObjectAttributes: POBJECT_ATTRIBUTES,
|
|
Count: ULONG,
|
|
) -> NTSTATUS;
|
|
fn NtOpenIoCompletion(
|
|
IoCompletionHandle: PHANDLE,
|
|
DesiredAccess: ACCESS_MASK,
|
|
ObjectAttributes: POBJECT_ATTRIBUTES,
|
|
) -> NTSTATUS;
|
|
fn NtQueryIoCompletion(
|
|
IoCompletionHandle: HANDLE,
|
|
IoCompletionInformationClass: IO_COMPLETION_INFORMATION_CLASS,
|
|
IoCompletionInformation: PVOID,
|
|
IoCompletionInformationLength: ULONG,
|
|
ReturnLength: PULONG,
|
|
) -> NTSTATUS;
|
|
fn NtSetIoCompletion(
|
|
IoCompletionHandle: HANDLE,
|
|
KeyContext: PVOID,
|
|
ApcContext: PVOID,
|
|
IoStatus: NTSTATUS,
|
|
IoStatusInformation: ULONG_PTR,
|
|
) -> NTSTATUS;
|
|
fn NtSetIoCompletionEx(
|
|
IoCompletionHandle: HANDLE,
|
|
IoCompletionPacketHandle: HANDLE,
|
|
KeyContext: PVOID,
|
|
ApcContext: PVOID,
|
|
IoStatus: NTSTATUS,
|
|
IoStatusInformation: ULONG_PTR,
|
|
) -> NTSTATUS;
|
|
fn NtRemoveIoCompletion(
|
|
IoCompletionHandle: HANDLE,
|
|
KeyContext: *mut PVOID,
|
|
ApcContext: *mut PVOID,
|
|
IoStatusBlock: PIO_STATUS_BLOCK,
|
|
Timeout: PLARGE_INTEGER,
|
|
) -> NTSTATUS;
|
|
fn NtRemoveIoCompletionEx(
|
|
IoCompletionHandle: HANDLE,
|
|
IoCompletionInformation: PFILE_IO_COMPLETION_INFORMATION,
|
|
Count: ULONG,
|
|
NumEntriesRemoved: PULONG,
|
|
Timeout: PLARGE_INTEGER,
|
|
Alertable: BOOLEAN,
|
|
) -> NTSTATUS;
|
|
fn NtCreateWaitCompletionPacket(
|
|
WaitCompletionPacketHandle: PHANDLE,
|
|
DesiredAccess: ACCESS_MASK,
|
|
ObjectAttributes: POBJECT_ATTRIBUTES,
|
|
) -> NTSTATUS;
|
|
fn NtAssociateWaitCompletionPacket(
|
|
WaitCompletionPacketHandle: HANDLE,
|
|
IoCompletionHandle: HANDLE,
|
|
TargetObjectHandle: HANDLE,
|
|
KeyContext: PVOID,
|
|
ApcContext: PVOID,
|
|
IoStatus: NTSTATUS,
|
|
IoStatusInformation: ULONG_PTR,
|
|
AlreadySignaled: PBOOLEAN,
|
|
) -> NTSTATUS;
|
|
fn NtCancelWaitCompletionPacket(
|
|
WaitCompletionPacketHandle: HANDLE,
|
|
RemoveSignaledPacket: BOOLEAN,
|
|
) -> NTSTATUS;
|
|
}}
|
|
ENUM!{enum IO_SESSION_EVENT {
|
|
IoSessionEventIgnore = 0,
|
|
IoSessionEventCreated = 1,
|
|
IoSessionEventTerminated = 2,
|
|
IoSessionEventConnected = 3,
|
|
IoSessionEventDisconnected = 4,
|
|
IoSessionEventLogon = 5,
|
|
IoSessionEventLogoff = 6,
|
|
IoSessionEventMax = 7,
|
|
}}
|
|
ENUM!{enum IO_SESSION_STATE {
|
|
IoSessionStateCreated = 0,
|
|
IoSessionStateInitialized = 1,
|
|
IoSessionStateConnected = 2,
|
|
IoSessionStateDisconnected = 3,
|
|
IoSessionStateDisconnectedLoggedOn = 4,
|
|
IoSessionStateLoggedOn = 5,
|
|
IoSessionStateLoggedOff = 6,
|
|
IoSessionStateTerminated = 7,
|
|
IoSessionStateMax = 8,
|
|
}}
|
|
EXTERN!{extern "system" {
|
|
fn NtNotifyChangeSession(
|
|
SessionHandle: HANDLE,
|
|
ChangeSequenceNumber: ULONG,
|
|
ChangeTimeStamp: PLARGE_INTEGER,
|
|
Event: IO_SESSION_EVENT,
|
|
NewState: IO_SESSION_STATE,
|
|
PreviousState: IO_SESSION_STATE,
|
|
Payload: PVOID,
|
|
PayloadSize: ULONG,
|
|
) -> NTSTATUS;
|
|
}}
|
|
ENUM!{enum INTERFACE_TYPE {
|
|
InterfaceTypeUndefined = -1i32 as u32,
|
|
Internal = 0,
|
|
Isa = 1,
|
|
Eisa = 2,
|
|
MicroChannel = 3,
|
|
TurboChannel = 4,
|
|
PCIBus = 5,
|
|
VMEBus = 6,
|
|
NuBus = 7,
|
|
PCMCIABus = 8,
|
|
CBus = 9,
|
|
MPIBus = 10,
|
|
MPSABus = 11,
|
|
ProcessorInternal = 12,
|
|
InternalPowerBus = 13,
|
|
PNPISABus = 14,
|
|
PNPBus = 15,
|
|
Vmcs = 16,
|
|
MaximumInterfaceType = 17,
|
|
}}
|
|
pub type PINTERFACE_TYPE = *mut INTERFACE_TYPE;
|
|
ENUM!{enum DMA_WIDTH {
|
|
Width8Bits = 0,
|
|
Width16Bits = 1,
|
|
Width32Bits = 2,
|
|
MaximumDmaWidth = 3,
|
|
}}
|
|
pub type PDMA_WIDTH = *mut DMA_WIDTH;
|
|
ENUM!{enum DMA_SPEED {
|
|
Compatible = 0,
|
|
TypeA = 1,
|
|
TypeB = 2,
|
|
TypeC = 3,
|
|
TypeF = 4,
|
|
MaximumDmaSpeed = 5,
|
|
}}
|
|
pub type PDMA_SPEED = *mut DMA_SPEED;
|
|
ENUM!{enum BUS_DATA_TYPE {
|
|
ConfigurationSpaceUndefined = -1i32 as u32,
|
|
Cmos = 0,
|
|
EisaConfiguration = 1,
|
|
Pos = 2,
|
|
CbusConfiguration = 3,
|
|
PCIConfiguration = 4,
|
|
VMEConfiguration = 5,
|
|
NuBusConfiguration = 6,
|
|
PCMCIAConfiguration = 7,
|
|
MPIConfiguration = 8,
|
|
MPSAConfiguration = 9,
|
|
PNPISAConfiguration = 10,
|
|
SgiInternalConfiguration = 11,
|
|
MaximumBusDataType = 12,
|
|
}}
|
|
pub type PBUS_DATA_TYPE = *mut BUS_DATA_TYPE;
|
|
pub const SYMLINK_FLAG_RELATIVE: u32 = 1;
|
|
STRUCT!{struct REPARSE_DATA_BUFFER_u_SymbolicLinkReparseBuffer {
|
|
SubstituteNameOffset: USHORT,
|
|
SubstituteNameLength: USHORT,
|
|
PrintNameOffset: USHORT,
|
|
PrintNameLength: USHORT,
|
|
Flags: ULONG,
|
|
PathBuffer: [WCHAR; 1],
|
|
}}
|
|
STRUCT!{struct REPARSE_DATA_BUFFER_u_MountPointReparseBuffer {
|
|
SubstituteNameOffset: USHORT,
|
|
SubstituteNameLength: USHORT,
|
|
PrintNameOffset: USHORT,
|
|
PrintNameLength: USHORT,
|
|
PathBuffer: [WCHAR; 1],
|
|
}}
|
|
STRUCT!{struct REPARSE_DATA_BUFFER_u_GenericReparseBuffer {
|
|
DataBuffer: [UCHAR; 1],
|
|
}}
|
|
UNION!{union REPARSE_DATA_BUFFER_u {
|
|
SymbolicLinkReparseBuffer: REPARSE_DATA_BUFFER_u_SymbolicLinkReparseBuffer,
|
|
MountPointReparseBuffer: REPARSE_DATA_BUFFER_u_MountPointReparseBuffer,
|
|
GenericReparseBuffer: REPARSE_DATA_BUFFER_u_GenericReparseBuffer,
|
|
}}
|
|
STRUCT!{struct REPARSE_DATA_BUFFER {
|
|
ReparseTag: ULONG,
|
|
ReparseDataLength: USHORT,
|
|
Reserved: USHORT,
|
|
u: REPARSE_DATA_BUFFER_u,
|
|
}}
|
|
pub type PREPARSE_DATA_BUFFER = *mut REPARSE_DATA_BUFFER;
|
|
/// "\Device\NamedPipe\"
|
|
pub const DEVICE_NAMED_PIPE: UTF16Const = UTF16Const(&[
|
|
0x005C, 0x0044, 0x0065, 0x0076, 0x0069, 0x0063, 0x0065, 0x005C, 0x004E, 0x0061, 0x006D, 0x0065,
|
|
0x0064, 0x0050, 0x0069, 0x0070, 0x0065, 0x005C, 0u16,
|
|
]);
|
|
pub const FSCTL_PIPE_ASSIGN_EVENT: u32 =
|
|
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
pub const FSTL_PIPE_DISCONNECT: u32 =
|
|
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
pub const FSTL_PIPE_LISTEN: u32 =
|
|
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
pub const FSTL_PIPE_PEEK: u32 =
|
|
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA);
|
|
pub const FSTL_PIPE_QUERY_EVENT: u32 =
|
|
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
pub const FSTL_PIPE_TRANSCEIVE: u32 =
|
|
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA);
|
|
pub const FSTL_PIPE_WAIT: u32 =
|
|
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
pub const FSTL_PIPE_IMPERSONATE: u32 =
|
|
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
pub const FSTL_PIPE_SET_CLIENT_PROCESS: u32 =
|
|
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
pub const FSTL_PIPE_QUERY_CLIENT_PROCESS: u32 =
|
|
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
pub const FSTL_PIPE_GET_PIPE_ATTRIBUTE: u32 =
|
|
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
pub const FSTL_PIPE_SET_PIPE_ATTRIBUTE: u32 =
|
|
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 11, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
pub const FSTL_PIPE_GET_CONNECTION_ATTRIBUTE: u32 =
|
|
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
pub const FSTL_PIPE_SET_CONNECTION_ATTRIBUTE: u32 =
|
|
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
pub const FSTL_PIPE_GET_HANDLE_ATTRIBUTE: u32 =
|
|
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
pub const FSTL_PIPE_SET_HANDLE_ATTRIBUTE: u32 =
|
|
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
pub const FSTL_PIPE_FLUSH: u32 =
|
|
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 16, METHOD_BUFFERED, FILE_WRITE_DATA);
|
|
pub const FSTL_PIPE_INTERNAL_READ: u32 =
|
|
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA);
|
|
pub const FSTL_PIPE_INTERNAL_WRITE: u32 =
|
|
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA);
|
|
pub const FSTL_PIPE_INTERNAL_TRANSCEIVE: u32 =
|
|
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA);
|
|
pub const FSTL_PIPE_INTERNAL_READ_OVFLOW: u32 =
|
|
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA);
|
|
pub const FILE_PIPE_READ_DATA: u32 = 0x00000000;
|
|
pub const FILE_PIPE_WRITE_SPACE: u32 = 0x00000001;
|
|
STRUCT!{struct FILE_PIPE_ASSIGN_EVENT_BUFFER {
|
|
EventHandle: HANDLE,
|
|
KeyValue: ULONG,
|
|
}}
|
|
pub type PFILE_PIPE_ASSIGN_EVENT_BUFFER = *mut FILE_PIPE_ASSIGN_EVENT_BUFFER;
|
|
STRUCT!{struct FILE_PIPE_PEEK_BUFFER {
|
|
NamedPipeState: ULONG,
|
|
ReadDataAvailable: ULONG,
|
|
NumberOfMessages: ULONG,
|
|
MessageLength: ULONG,
|
|
Data: [CHAR; 1],
|
|
}}
|
|
pub type PFILE_PIPE_PEEK_BUFFER = *mut FILE_PIPE_PEEK_BUFFER;
|
|
STRUCT!{struct FILE_PIPE_EVENT_BUFFER {
|
|
NamedPipeState: ULONG,
|
|
EntryType: ULONG,
|
|
ByteCount: ULONG,
|
|
KeyValue: ULONG,
|
|
NumberRequests: ULONG,
|
|
}}
|
|
pub type PFILE_PIPE_EVENT_BUFFER = *mut FILE_PIPE_EVENT_BUFFER;
|
|
STRUCT!{struct FILE_PIPE_WAIT_FOR_BUFFER {
|
|
Timeout: LARGE_INTEGER,
|
|
NameLength: ULONG,
|
|
TimeoutSpecified: BOOLEAN,
|
|
Name: [WCHAR; 1],
|
|
}}
|
|
pub type PFILE_PIPE_WAIT_FOR_BUFFER = *mut FILE_PIPE_WAIT_FOR_BUFFER;
|
|
STRUCT!{struct FILE_PIPE_CLIENT_PROCESS_BUFFER {
|
|
ClientSession: PVOID,
|
|
ClientProcess: PVOID,
|
|
}}
|
|
pub type PFILE_PIPE_CLIENT_PROCESS_BUFFER = *mut FILE_PIPE_CLIENT_PROCESS_BUFFER;
|
|
pub const FILE_PIPE_COMPUTER_NAME_LENGTH: usize = 15;
|
|
STRUCT!{struct FILE_PIPE_CLIENT_PROCESS_BUFFER_EX {
|
|
ClientSession: PVOID,
|
|
ClientProcess: PVOID,
|
|
ClientComputerNameLength: USHORT,
|
|
ClientComputerBuffer: [WCHAR; FILE_PIPE_COMPUTER_NAME_LENGTH + 1],
|
|
}}
|
|
pub type PFILE_PIPE_CLIENT_PROCESS_BUFFER_EX = *mut FILE_PIPE_CLIENT_PROCESS_BUFFER_EX;
|
|
pub const MAILSLOT_CLASS_FIRSTCLASS: u32 = 1;
|
|
pub const MAILSLOT_CLASS_SECONDCLASS: u32 = 2;
|
|
pub const FSCTL_MAILSLOT_PEEK: u32 =
|
|
CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA);
|
|
STRUCT!{struct FILE_MAILSLOT_PEEK_BUFFER {
|
|
ReadDataAvailable: ULONG,
|
|
NumberOfMessages: ULONG,
|
|
MessageLength: ULONG,
|
|
}}
|
|
pub type PFILE_MAILSLOT_PEEK_BUFFER = *mut FILE_MAILSLOT_PEEK_BUFFER;
|