// Licensed under the Apache License, Version 2.0 // or the MIT license // , 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(); }