aboutsummaryrefslogtreecommitdiff
path: root/vendor/winapi/src/um/fileapi.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/winapi/src/um/fileapi.rs')
-rw-r--r--vendor/winapi/src/um/fileapi.rs639
1 files changed, 639 insertions, 0 deletions
diff --git a/vendor/winapi/src/um/fileapi.rs b/vendor/winapi/src/um/fileapi.rs
new file mode 100644
index 0000000..ed183a5
--- /dev/null
+++ b/vendor/winapi/src/um/fileapi.rs
@@ -0,0 +1,639 @@
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// All files in the project carrying such notice may not be copied, modified, or distributed
+// except according to those terms.
+//! ApiSet Contract for api-ms-win-core-file-l1
+use shared::minwindef::{
+ BOOL, DWORD, FILETIME, LPCVOID, LPDWORD, LPFILETIME, LPVOID, PDWORD, PUCHAR, UCHAR, UINT,
+ ULONG, WORD,
+};
+use um::minwinbase::{
+ FILE_INFO_BY_HANDLE_CLASS, FINDEX_INFO_LEVELS, FINDEX_SEARCH_OPS, GET_FILEEX_INFO_LEVELS,
+ LPOVERLAPPED, LPOVERLAPPED_COMPLETION_ROUTINE, LPSECURITY_ATTRIBUTES, LPWIN32_FIND_DATAA,
+ LPWIN32_FIND_DATAW
+};
+use um::winnt::{
+ BOOLEAN, CCHAR, FILE_ID_128, FILE_SEGMENT_ELEMENT, HANDLE, LARGE_INTEGER, LONG, LONGLONG,
+ LPCSTR, LPCWSTR, LPSTR, LPWCH, LPWSTR, PLARGE_INTEGER, PLONG, PULARGE_INTEGER, PWSTR,
+ ULONGLONG, WCHAR,
+};
+pub const CREATE_NEW: DWORD = 1;
+pub const CREATE_ALWAYS: DWORD = 2;
+pub const OPEN_EXISTING: DWORD = 3;
+pub const OPEN_ALWAYS: DWORD = 4;
+pub const TRUNCATE_EXISTING: DWORD = 5;
+pub const INVALID_FILE_SIZE: DWORD = 0xFFFFFFFF;
+pub const INVALID_SET_FILE_POINTER: DWORD = 0xFFFFFFFF;
+pub const INVALID_FILE_ATTRIBUTES: DWORD = 0xFFFFFFFF;
+STRUCT!{struct WIN32_FILE_ATTRIBUTE_DATA {
+ dwFileAttributes: DWORD,
+ ftCreationTime: FILETIME,
+ ftLastAccessTime: FILETIME,
+ ftLastWriteTime: FILETIME,
+ nFileSizeHigh: DWORD,
+ nFileSizeLow: DWORD,
+}}
+pub type LPWIN32_FILE_ATTRIBUTE_DATA = *mut WIN32_FILE_ATTRIBUTE_DATA;
+STRUCT!{struct BY_HANDLE_FILE_INFORMATION {
+ dwFileAttributes: DWORD,
+ ftCreationTime: FILETIME,
+ ftLastAccessTime: FILETIME,
+ ftLastWriteTime: FILETIME,
+ dwVolumeSerialNumber: DWORD,
+ nFileSizeHigh: DWORD,
+ nFileSizeLow: DWORD,
+ nNumberOfLinks: DWORD,
+ nFileIndexHigh: DWORD,
+ nFileIndexLow: DWORD,
+}}
+pub type PBY_HANDLE_FILE_INFORMATION = *mut BY_HANDLE_FILE_INFORMATION;
+pub type LPBY_HANDLE_FILE_INFORMATION = *mut BY_HANDLE_FILE_INFORMATION;
+STRUCT!{struct CREATEFILE2_EXTENDED_PARAMETERS {
+ dwSize: DWORD,
+ dwFileAttributes: DWORD,
+ dwFileFlags: DWORD,
+ dwSecurityQosFlags: DWORD,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ hTemplateFile: HANDLE,
+}}
+pub type PCREATEFILE2_EXTENDED_PARAMETERS = *mut CREATEFILE2_EXTENDED_PARAMETERS;
+pub type LPCREATEFILE2_EXTENDED_PARAMETERS = *mut CREATEFILE2_EXTENDED_PARAMETERS;
+ENUM!{enum PRIORITY_HINT {
+ IoPriorityHintVeryLow = 0,
+ IoPriorityHintLow = 1,
+ IoPriorityHintNormal = 2,
+ MaximumIoPriorityHintType = 3,
+}}
+STRUCT!{struct FILE_BASIC_INFO {
+ CreationTime: LARGE_INTEGER,
+ LastAccessTime: LARGE_INTEGER,
+ LastWriteTime: LARGE_INTEGER,
+ ChangeTime: LARGE_INTEGER,
+ FileAttributes: DWORD,
+}}
+STRUCT!{struct FILE_STANDARD_INFO {
+ AllocationSize: LARGE_INTEGER,
+ EndOfFile: LARGE_INTEGER,
+ NumberOfLinks: DWORD,
+ DeletePending: BOOLEAN,
+ Directory: BOOLEAN,
+}}
+STRUCT!{struct FILE_NAME_INFO {
+ FileNameLength: DWORD,
+ FileName: [WCHAR; 1],
+}}
+STRUCT!{struct FILE_RENAME_INFO {
+ ReplaceIfExists: BOOL,
+ RootDirectory: HANDLE,
+ FileNameLength: DWORD,
+ FileName: [WCHAR; 1],
+}}
+STRUCT!{struct FILE_DISPOSITION_INFO {
+ DeleteFile: BOOLEAN,
+}}
+STRUCT!{struct FILE_ALLOCATION_INFO {
+ AllocationSize: LARGE_INTEGER,
+}}
+STRUCT!{struct FILE_END_OF_FILE_INFO {
+ EndOfFile: LARGE_INTEGER,
+}}
+STRUCT!{struct FILE_STREAM_INFO {
+ NextEntryOffset: DWORD,
+ StreamNameLength: DWORD,
+ StreamSize: LARGE_INTEGER,
+ StreamAllocationSize: LARGE_INTEGER,
+ StreamName: [WCHAR; 1],
+}}
+STRUCT!{struct FILE_COMPRESSION_INFO {
+ CompressedFileSize: LARGE_INTEGER,
+ CompressionFormat: WORD,
+ CompressionUnitShift: UCHAR,
+ ChunkShift: UCHAR,
+ ClusterShift: UCHAR,
+ Reserved: [UCHAR; 3],
+}}
+STRUCT!{struct FILE_ATTRIBUTE_TAG_INFO {
+ NextEntryOffset: DWORD,
+ ReparseTag: DWORD,
+}}
+STRUCT!{struct FILE_ID_BOTH_DIR_INFO {
+ NextEntryOffset: DWORD,
+ FileIndex: DWORD,
+ CreationTime: LARGE_INTEGER,
+ LastAccessTime: LARGE_INTEGER,
+ LastWriteTime: LARGE_INTEGER,
+ ChangeTime: LARGE_INTEGER,
+ EndOfFile: LARGE_INTEGER,
+ AllocationSize: LARGE_INTEGER,
+ FileAttributes: DWORD,
+ FileNameLength: DWORD,
+ EaSize: DWORD,
+ ShortNameLength: CCHAR,
+ ShortName: [WCHAR; 12],
+ FileId: LARGE_INTEGER,
+ FileName: [WCHAR; 1],
+}}
+STRUCT!{struct FILE_IO_PRIORITY_HINT_INFO {
+ PriorityHint: PRIORITY_HINT,
+}}
+STRUCT!{struct FILE_FULL_DIR_INFO {
+ 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],
+}}
+STRUCT!{struct FILE_STORAGE_INFO {
+ LogicalBytesPerSector: ULONG,
+ PhysicalBytesPerSectorForAtomicity: ULONG,
+ PhysicalBytesPerSectorForPerformance: ULONG,
+ FileSystemEffectivePhysicalBytesPerSectorForAtomicity: ULONG,
+ Flags: ULONG,
+ ByteOffsetForSectorAlignment: ULONG,
+ ByteOffsetForPartitionAlignment: ULONG,
+}}
+STRUCT!{struct FILE_ALIGNMENT_INFO {
+ AlignmentRequirement: ULONG,
+}}
+STRUCT!{struct FILE_ID_INFO {
+ VolumeSerialNumber: ULONGLONG,
+ FileId: FILE_ID_128,
+}}
+extern "system" {
+ pub fn CompareFileTime(
+ lpFileTime1: *const FILETIME,
+ lpFileTime2: *const FILETIME,
+ ) -> LONG;
+ pub fn CreateDirectoryA(
+ lpPathName: LPCSTR,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ ) -> BOOL;
+ pub fn CreateDirectoryW(
+ lpPathName: LPCWSTR,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ ) -> BOOL;
+ pub fn CreateFileA(
+ lpFileName: LPCSTR,
+ dwDesiredAccess: DWORD,
+ dwShareMode: DWORD,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ dwCreationDisposition: DWORD,
+ dwFlagsAndAttributes: DWORD,
+ hTemplateFile: HANDLE,
+ ) -> HANDLE;
+ pub fn CreateFileW(
+ lpFileName: LPCWSTR,
+ dwDesiredAccess: DWORD,
+ dwShareMode: DWORD,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ dwCreationDisposition: DWORD,
+ dwFlagsAndAttributes: DWORD,
+ hTemplateFile: HANDLE,
+ ) -> HANDLE;
+ pub fn DefineDosDeviceW(
+ dwFlags: DWORD,
+ lpDeviceName: LPCWSTR,
+ lpTargetPath: LPCWSTR,
+ ) -> BOOL;
+ pub fn DeleteFileA(
+ lpFileName: LPCSTR,
+ ) -> BOOL;
+ pub fn DeleteFileW(
+ lpFileName: LPCWSTR,
+ ) -> BOOL;
+ pub fn DeleteVolumeMountPointW(
+ lpszVolumeMountPoint: LPCWSTR,
+ ) -> BOOL;
+ pub fn FileTimeToLocalFileTime(
+ lpFileTime: *const FILETIME,
+ lpLocalFileTime: LPFILETIME,
+ ) -> BOOL;
+ pub fn FindClose(
+ hFindFile: HANDLE,
+ ) -> BOOL;
+ pub fn FindCloseChangeNotification(
+ hChangeHandle: HANDLE,
+ ) -> BOOL;
+ pub fn FindFirstChangeNotificationA(
+ lpPathName: LPCSTR,
+ bWatchSubtree: BOOL,
+ dwNotifyFilter: DWORD,
+ ) -> HANDLE;
+ pub fn FindFirstChangeNotificationW(
+ lpPathName: LPCWSTR,
+ bWatchSubtree: BOOL,
+ dwNotifyFilter: DWORD,
+ ) -> HANDLE;
+ pub fn FindFirstFileA(
+ lpFileName: LPCSTR,
+ lpFindFileData: LPWIN32_FIND_DATAA,
+ ) -> HANDLE;
+ pub fn FindFirstFileW(
+ lpFileName: LPCWSTR,
+ lpFindFileData: LPWIN32_FIND_DATAW,
+ ) -> HANDLE;
+ pub fn FindFirstFileExA(
+ lpFileName: LPCSTR,
+ fInfoLevelId: FINDEX_INFO_LEVELS,
+ lpFindFileData: LPVOID,
+ fSearchOp: FINDEX_SEARCH_OPS,
+ lpSearchFilter: LPVOID,
+ dwAdditionalFlags: DWORD,
+ ) -> HANDLE;
+ pub fn FindFirstFileExW(
+ lpFileName: LPCWSTR,
+ fInfoLevelId: FINDEX_INFO_LEVELS,
+ lpFindFileData: LPVOID,
+ fSearchOp: FINDEX_SEARCH_OPS,
+ lpSearchFilter: LPVOID,
+ dwAdditionalFlags: DWORD,
+ ) -> HANDLE;
+ pub fn FindFirstVolumeW(
+ lpszVolumeName: LPWSTR,
+ cchBufferLength: DWORD,
+ ) -> HANDLE;
+ pub fn FindNextChangeNotification(
+ hChangeHandle: HANDLE,
+ ) -> BOOL;
+ pub fn FindNextFileA(
+ hFindFile: HANDLE,
+ lpFindFileData: LPWIN32_FIND_DATAA,
+ ) -> BOOL;
+ pub fn FindNextFileW(
+ hFindFile: HANDLE,
+ lpFindFileData: LPWIN32_FIND_DATAW,
+ ) -> BOOL;
+ pub fn FindNextVolumeW(
+ hFindVolume: HANDLE,
+ lpszVolumeName: LPWSTR,
+ cchBufferLength: DWORD,
+ ) -> BOOL;
+ pub fn FindVolumeClose(
+ hFindVolume: HANDLE,
+ ) -> BOOL;
+ pub fn FlushFileBuffers(
+ hFile: HANDLE,
+ ) -> BOOL;
+ pub fn GetDiskFreeSpaceA(
+ lpRootPathName: LPCSTR,
+ lpSectorsPerCluster: LPDWORD,
+ lpBytesPerSector: LPDWORD,
+ lpNumberOfFreeClusters: LPDWORD,
+ lpTotalNumberOfClusters: LPDWORD,
+ ) -> BOOL;
+ pub fn GetDiskFreeSpaceW(
+ lpRootPathName: LPCWSTR,
+ lpSectorsPerCluster: LPDWORD,
+ lpBytesPerSector: LPDWORD,
+ lpNumberOfFreeClusters: LPDWORD,
+ lpTotalNumberOfClusters: LPDWORD,
+ ) -> BOOL;
+ pub fn GetDiskFreeSpaceExA(
+ lpDirectoryName: LPCSTR,
+ lpFreeBytesAvailableToCaller: PULARGE_INTEGER,
+ lpTotalNumberOfBytes: PULARGE_INTEGER,
+ lpTotalNumberOfFreeBytes: PULARGE_INTEGER,
+ ) -> BOOL;
+ pub fn GetDiskFreeSpaceExW(
+ lpDirectoryName: LPCWSTR,
+ lpFreeBytesAvailableToCaller: PULARGE_INTEGER,
+ lpTotalNumberOfBytes: PULARGE_INTEGER,
+ lpTotalNumberOfFreeBytes: PULARGE_INTEGER,
+ ) -> BOOL;
+ pub fn GetDriveTypeA(
+ lpRootPathName: LPCSTR,
+ ) -> UINT;
+ pub fn GetDriveTypeW(
+ lpRootPathName: LPCWSTR,
+ ) -> UINT;
+ pub fn GetFileAttributesA(
+ lpFileName: LPCSTR,
+ ) -> DWORD;
+ pub fn GetFileAttributesW(
+ lpFileName: LPCWSTR,
+ ) -> DWORD;
+ pub fn GetFileAttributesExA(
+ lpFileName: LPCSTR,
+ fInfoLevelId: GET_FILEEX_INFO_LEVELS,
+ lpFileInformation: LPVOID,
+ ) -> BOOL;
+ pub fn GetFileAttributesExW(
+ lpFileName: LPCWSTR,
+ fInfoLevelId: GET_FILEEX_INFO_LEVELS,
+ lpFileInformation: LPVOID,
+ ) -> BOOL;
+ pub fn GetFileInformationByHandle(
+ hFile: HANDLE,
+ lpFileInformation: LPBY_HANDLE_FILE_INFORMATION,
+ ) -> BOOL;
+ pub fn GetFileSize(
+ hFile: HANDLE,
+ lpFileSizeHigh: LPDWORD,
+ ) -> DWORD;
+ pub fn GetFileSizeEx(
+ hFile: HANDLE,
+ lpFileSize: PLARGE_INTEGER,
+ ) -> BOOL;
+ pub fn GetFileType(
+ hFile: HANDLE,
+ ) -> DWORD;
+ pub fn GetFinalPathNameByHandleA(
+ hFile: HANDLE,
+ lpszFilePath: LPSTR,
+ cchFilePath: DWORD,
+ dwFlags: DWORD,
+ ) -> DWORD;
+ pub fn GetFinalPathNameByHandleW(
+ hFile: HANDLE,
+ lpszFilePath: LPWSTR,
+ cchFilePath: DWORD,
+ dwFlags: DWORD,
+ ) -> DWORD;
+ pub fn GetFileTime(
+ hFile: HANDLE,
+ lpCreationTime: LPFILETIME,
+ lpLastAccessTime: LPFILETIME,
+ lpLastWriteTime: LPFILETIME,
+ ) -> BOOL;
+ pub fn GetFullPathNameW(
+ lpFileName: LPCWSTR,
+ nBufferLength: DWORD,
+ lpBuffer: LPWSTR,
+ lpFilePart: *mut LPWSTR,
+ ) -> DWORD;
+ pub fn GetFullPathNameA(
+ lpFileName: LPCSTR,
+ nBufferLength: DWORD,
+ lpBuffer: LPSTR,
+ lpFilePart: *mut LPSTR,
+ ) -> DWORD;
+ pub fn GetLogicalDrives() -> DWORD;
+ pub fn GetLogicalDriveStringsW(
+ nBufferLength: DWORD,
+ lpBuffer: LPWSTR,
+ ) -> DWORD;
+ pub fn GetLongPathNameA(
+ lpszShortPath: LPCSTR,
+ lpszLongPath: LPSTR,
+ cchBuffer: DWORD,
+ ) -> DWORD;
+ pub fn GetLongPathNameW(
+ lpszShortPath: LPCWSTR,
+ lpszLongPath: LPWSTR,
+ cchBuffer: DWORD,
+ ) -> DWORD;
+ pub fn GetShortPathNameW(
+ lpszLongPath: LPCWSTR,
+ lpszShortPath: LPWSTR,
+ cchBuffer: DWORD,
+ ) -> DWORD;
+ pub fn GetTempFileNameW(
+ lpPathName: LPCWSTR,
+ lpPrefixString: LPCWSTR,
+ uUnique: UINT,
+ lpTempFileName: LPWSTR,
+ ) -> UINT;
+ pub fn GetVolumeInformationByHandleW(
+ hFile: HANDLE,
+ lpVolumeNameBuffer: LPWSTR,
+ nVolumeNameSize: DWORD,
+ lpVolumeSerialNumber: LPDWORD,
+ lpMaximumComponentLength: LPDWORD,
+ lpFileSystemFlags: LPDWORD,
+ lpFileSystemNameBuffer: LPWSTR,
+ nFileSystemNameSize: DWORD,
+ ) -> BOOL;
+ pub fn GetVolumeInformationW(
+ lpRootPathName: LPCWSTR,
+ lpVolumeNameBuffer: LPWSTR,
+ nVolumeNameSize: DWORD,
+ lpVolumeSerialNumber: LPDWORD,
+ lpMaximumComponentLength: LPDWORD,
+ lpFileSystemFlags: LPDWORD,
+ lpFileSystemNameBuffer: LPWSTR,
+ nFileSystemNameSize: DWORD,
+ ) -> BOOL;
+ pub fn GetVolumePathNameW(
+ lpszFileName: LPCWSTR,
+ lpszVolumePathName: LPWSTR,
+ cchBufferLength: DWORD,
+ ) -> BOOL;
+ pub fn LocalFileTimeToFileTime(
+ lpLocalFileTime: *const FILETIME,
+ lpFileTime: LPFILETIME,
+ ) -> BOOL;
+ pub fn LockFile(
+ hFile: HANDLE,
+ dwFileOffsetLow: DWORD,
+ dwFileOffsetHigh: DWORD,
+ nNumberOfBytesToLockLow: DWORD,
+ nNumberOfBytesToLockHigh: DWORD,
+ ) -> BOOL;
+ pub fn LockFileEx(
+ hFile: HANDLE,
+ dwFlags: DWORD,
+ dwReserved: DWORD,
+ nNumberOfBytesToLockLow: DWORD,
+ nNumberOfBytesToLockHigh: DWORD,
+ lpOverlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn QueryDosDeviceW(
+ lpDeviceName: LPCWSTR,
+ lpTargetPath: LPWSTR,
+ ucchMax: DWORD,
+ ) -> DWORD;
+ pub fn ReadFile(
+ hFile: HANDLE,
+ lpBuffer: LPVOID,
+ nNumberOfBytesToRead: DWORD,
+ lpNumberOfBytesRead: LPDWORD,
+ lpOverlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn ReadFileEx(
+ hFile: HANDLE,
+ lpBuffer: LPVOID,
+ nNumberOfBytesToRead: DWORD,
+ lpOverlapped: LPOVERLAPPED,
+ lpCompletionRoutine: LPOVERLAPPED_COMPLETION_ROUTINE,
+ ) -> BOOL;
+ pub fn ReadFileScatter(
+ hFile: HANDLE,
+ aSegmentArray: *mut FILE_SEGMENT_ELEMENT,
+ nNumberOfBytesToRead: DWORD,
+ lpReserved: LPDWORD,
+ lpOverlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn RemoveDirectoryA(
+ lpPathName: LPCSTR,
+ ) -> BOOL;
+ pub fn RemoveDirectoryW(
+ lpPathName: LPCWSTR,
+ ) -> BOOL;
+ pub fn SetEndOfFile(
+ hFile: HANDLE,
+ ) -> BOOL;
+ pub fn SetFileAttributesA(
+ lpFileName: LPCSTR,
+ dwFileAttributes: DWORD,
+ ) -> BOOL;
+ pub fn SetFileAttributesW(
+ lpFileName: LPCWSTR,
+ dwFileAttributes: DWORD,
+ ) -> BOOL;
+ pub fn SetFileInformationByHandle(
+ hFile: HANDLE,
+ FileInformationClass: FILE_INFO_BY_HANDLE_CLASS,
+ lpFileInformation: LPVOID,
+ dwBufferSize: DWORD,
+ ) -> BOOL;
+ pub fn SetFilePointer(
+ hFile: HANDLE,
+ lDistanceToMove: LONG,
+ lpDistanceToMoveHigh: PLONG,
+ dwMoveMethod: DWORD,
+ ) -> DWORD;
+ pub fn SetFilePointerEx(
+ hFile: HANDLE,
+ liDistanceToMove: LARGE_INTEGER,
+ lpNewFilePointer: PLARGE_INTEGER,
+ dwMoveMethod: DWORD,
+ ) -> BOOL;
+ pub fn SetFileTime(
+ hFile: HANDLE,
+ lpCreationTime: *const FILETIME,
+ lpLastAccessTime: *const FILETIME,
+ lpLastWriteTime: *const FILETIME,
+ ) -> BOOL;
+ pub fn SetFileValidData(
+ hFile: HANDLE,
+ ValidDataLength: LONGLONG,
+ ) -> BOOL;
+ pub fn UnlockFile(
+ hFile: HANDLE,
+ dwFileOffsetLow: DWORD,
+ dwFileOffsetHigh: DWORD,
+ nNumberOfBytesToUnlockLow: DWORD,
+ nNumberOfBytesToUnlockHigh: DWORD,
+ ) -> BOOL;
+ pub fn UnlockFileEx(
+ hFile: HANDLE,
+ dwReserved: DWORD,
+ nNumberOfBytesToUnlockLow: DWORD,
+ nNumberOfBytesToUnlockHigh: DWORD,
+ lpOverlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn WriteFile(
+ hFile: HANDLE,
+ lpBuffer: LPCVOID,
+ nNumberOfBytesToWrite: DWORD,
+ lpNumberOfBytesWritten: LPDWORD,
+ lpOverlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn WriteFileEx(
+ hFile: HANDLE,
+ lpBuffer: LPCVOID,
+ nNumberOfBytesToWrite: DWORD,
+ lpOverlapped: LPOVERLAPPED,
+ lpCompletionRoutine: LPOVERLAPPED_COMPLETION_ROUTINE,
+ ) -> BOOL;
+ pub fn WriteFileGather(
+ hFile: HANDLE,
+ aSegmentArray: *mut FILE_SEGMENT_ELEMENT,
+ nNumberOfBytesToWrite: DWORD,
+ lpReserved: LPDWORD,
+ lpOverlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn GetTempPathW(
+ nBufferLength: DWORD,
+ lpBuffer: LPWSTR,
+ ) -> DWORD;
+ pub fn GetVolumeNameForVolumeMountPointW(
+ lpszVolumeMountPoint: LPCWSTR,
+ lpszVolumeName: LPWSTR,
+ cchBufferLength: DWORD,
+ ) -> BOOL;
+ pub fn GetVolumePathNamesForVolumeNameW(
+ lpszVolumeName: LPCWSTR,
+ lpszVolumePathNames: LPWCH,
+ cchBufferLength: DWORD,
+ lpcchReturnLength: PDWORD,
+ ) -> BOOL;
+ pub fn CreateFile2(
+ lpFileName: LPCWSTR,
+ dwDesiredAccess: DWORD,
+ dwShareMode: DWORD,
+ dwCreationDisposition: DWORD,
+ pCreateExParams: LPCREATEFILE2_EXTENDED_PARAMETERS,
+ ) -> HANDLE;
+ pub fn SetFileIoOverlappedRange(
+ FileHandle: HANDLE,
+ OverlappedRangeStart: PUCHAR,
+ Length: ULONG,
+ ) -> BOOL;
+ pub fn GetCompressedFileSizeA(
+ lpFileName: LPCSTR,
+ lpFileSizeHigh: LPDWORD,
+ ) -> DWORD;
+ pub fn GetCompressedFileSizeW(
+ lpFileName: LPCWSTR,
+ lpFileSizeHigh: LPDWORD,
+ ) -> DWORD;
+}
+ENUM!{enum STREAM_INFO_LEVELS {
+ FindStreamInfoStandard,
+ FindStreamInfoMaxInfoLevel,
+}}
+extern "system" {
+ pub fn FindFirstStreamW(
+ lpFileName: LPCWSTR,
+ InfoLevel: STREAM_INFO_LEVELS,
+ lpFindStreamData: LPVOID,
+ dwFlags: DWORD,
+ ) -> HANDLE;
+ pub fn FindNextStreamW(
+ hFindStream: HANDLE,
+ lpFindStreamData: LPVOID,
+ ) -> BOOL;
+ pub fn AreFileApisANSI() -> BOOL;
+ pub fn GetTempPathA(
+ nBufferLength: DWORD,
+ lpBuffer: LPSTR,
+ ) -> DWORD;
+ pub fn FindFirstFileNameW(
+ lpFileName: LPCWSTR,
+ dwFlags: DWORD,
+ StringLength: LPDWORD,
+ LinkName: PWSTR,
+ ) -> HANDLE;
+ pub fn FindNextFileNameW(
+ hFindStream: HANDLE,
+ StringLength: LPDWORD,
+ LinkName: PWSTR,
+ ) -> BOOL;
+ pub fn GetVolumeInformationA(
+ lpRootPathName: LPCSTR,
+ lpVolumeNameBuffer: LPSTR,
+ nVolumeNameSize: DWORD,
+ lpVolumeSerialNumber: LPDWORD,
+ lpMaximumComponentLength: LPDWORD,
+ lpFileSystemFlags: LPDWORD,
+ lpFileSystemNameBuffer: LPSTR,
+ nFileSystemNameSize: DWORD,
+ ) -> BOOL;
+ pub fn GetTempFileNameA(
+ lpPathName: LPCSTR,
+ lpPrefixString: LPCSTR,
+ uUnique: UINT,
+ lpTempFileName: LPSTR,
+ ) -> UINT;
+ pub fn SetFileApisToOEM();
+ pub fn SetFileApisToANSI();
+}