fileapi.h (15759B) - Raw
1 /** 2 * This file is part of the mingw-w64 runtime package. 3 * No warranty is given; refer to the file DISCLAIMER within this package. 4 */ 5 #ifndef _APISETFILE_ 6 #define _APISETFILE_ 7 8 #include <apiset.h> 9 #include <apisetcconv.h> 10 #include <minwindef.h> 11 #include <minwinbase.h> 12 13 #ifdef __cplusplus 14 extern "C" { 15 #endif 16 17 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP) 18 #define CREATE_NEW 1 19 #define CREATE_ALWAYS 2 20 #define OPEN_EXISTING 3 21 #define OPEN_ALWAYS 4 22 #define TRUNCATE_EXISTING 5 23 24 #define INVALID_FILE_SIZE ((DWORD)0xffffffff) 25 #define INVALID_SET_FILE_POINTER ((DWORD)-1) 26 #define INVALID_FILE_ATTRIBUTES ((DWORD)-1) 27 #endif 28 29 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || _WIN32_WINNT >= _WIN32_WINNT_WIN10 30 #define CreateFile __MINGW_NAME_AW(CreateFile) 31 WINBASEAPI DWORD WINAPI GetFileAttributesW (LPCWSTR lpFileName); 32 #define GetFileAttributes __MINGW_NAME_AW(GetFileAttributes) 33 WINBASEAPI DWORD WINAPI SetFilePointer (HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod); 34 #endif 35 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || NTDDI_VERSION >= NTDDI_WIN10_19H1 || defined(WINSTORECOMPAT) 36 typedef struct _BY_HANDLE_FILE_INFORMATION { 37 DWORD dwFileAttributes; 38 FILETIME ftCreationTime; 39 FILETIME ftLastAccessTime; 40 FILETIME ftLastWriteTime; 41 DWORD dwVolumeSerialNumber; 42 DWORD nFileSizeHigh; 43 DWORD nFileSizeLow; 44 DWORD nNumberOfLinks; 45 DWORD nFileIndexHigh; 46 DWORD nFileIndexLow; 47 } BY_HANDLE_FILE_INFORMATION, *PBY_HANDLE_FILE_INFORMATION, 48 *LPBY_HANDLE_FILE_INFORMATION; 49 WINBASEAPI WINBOOL WINAPI GetFileInformationByHandle (HANDLE hFile, LPBY_HANDLE_FILE_INFORMATION lpFileInformation); 50 #endif 51 52 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) 53 WINBASEAPI HANDLE WINAPI CreateFileA (LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); 54 WINBASEAPI WINBOOL WINAPI DefineDosDeviceW (DWORD dwFlags, LPCWSTR lpDeviceName, LPCWSTR lpTargetPath); 55 WINBASEAPI WINBOOL WINAPI FindCloseChangeNotification (HANDLE hChangeHandle); 56 WINBASEAPI HANDLE WINAPI FindFirstChangeNotificationA (LPCSTR lpPathName, WINBOOL bWatchSubtree, DWORD dwNotifyFilter); 57 WINBASEAPI HANDLE WINAPI FindFirstChangeNotificationW (LPCWSTR lpPathName, WINBOOL bWatchSubtree, DWORD dwNotifyFilter); 58 WINBASEAPI HANDLE WINAPI FindFirstVolumeW (LPWSTR lpszVolumeName, DWORD cchBufferLength); 59 WINBASEAPI WINBOOL WINAPI FindNextChangeNotification (HANDLE hChangeHandle); 60 WINBASEAPI WINBOOL WINAPI FindNextVolumeW (HANDLE hFindVolume, LPWSTR lpszVolumeName, DWORD cchBufferLength); 61 WINBASEAPI WINBOOL WINAPI FindVolumeClose (HANDLE hFindVolume); 62 #endif 63 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || defined(WINSTORECOMPAT) 64 WINBASEAPI HANDLE WINAPI CreateFileW (LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); 65 WINBASEAPI DWORD WINAPI GetFileSize (HANDLE hFile, LPDWORD lpFileSizeHigh); 66 #endif 67 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || _WIN32_WINNT >= _WIN32_WINNT_WIN10 68 WINBASEAPI LONG WINAPI CompareFileTime (CONST FILETIME *lpFileTime1, CONST FILETIME *lpFileTime2); 69 WINBASEAPI WINBOOL WINAPI DeleteVolumeMountPointW (LPCWSTR lpszVolumeMountPoint); 70 WINBASEAPI WINBOOL WINAPI FileTimeToLocalFileTime (CONST FILETIME *lpFileTime, LPFILETIME lpLocalFileTime); 71 WINBASEAPI HANDLE WINAPI FindFirstFileA (LPCSTR lpFileName, LPWIN32_FIND_DATAA lpFindFileData); 72 WINBASEAPI HANDLE WINAPI FindFirstFileW (LPCWSTR lpFileName, LPWIN32_FIND_DATAW lpFindFileData); 73 WINBASEAPI WINBOOL WINAPI GetDiskFreeSpaceA (LPCSTR lpRootPathName, LPDWORD lpSectorsPerCluster, LPDWORD lpBytesPerSector, LPDWORD lpNumberOfFreeClusters, LPDWORD lpTotalNumberOfClusters); 74 WINBASEAPI WINBOOL WINAPI GetDiskFreeSpaceW (LPCWSTR lpRootPathName, LPDWORD lpSectorsPerCluster, LPDWORD lpBytesPerSector, LPDWORD lpNumberOfFreeClusters, LPDWORD lpTotalNumberOfClusters); 75 WINBASEAPI UINT WINAPI GetDriveTypeA (LPCSTR lpRootPathName); 76 WINBASEAPI UINT WINAPI GetDriveTypeW (LPCWSTR lpRootPathName); 77 WINBASEAPI DWORD WINAPI GetFileAttributesA (LPCSTR lpFileName); 78 WINBASEAPI WINBOOL WINAPI GetFileSizeEx (HANDLE hFile, PLARGE_INTEGER lpFileSize); 79 WINBASEAPI WINBOOL WINAPI GetFileTime (HANDLE hFile, LPFILETIME lpCreationTime, LPFILETIME lpLastAccessTime, LPFILETIME lpLastWriteTime); 80 WINBASEAPI DWORD WINAPI GetFileType (HANDLE hFile); 81 WINBASEAPI DWORD WINAPI GetFullPathNameA (LPCSTR lpFileName, DWORD nBufferLength, LPSTR lpBuffer, LPSTR *lpFilePart); 82 WINBASEAPI DWORD WINAPI GetFullPathNameW (LPCWSTR lpFileName, DWORD nBufferLength, LPWSTR lpBuffer, LPWSTR *lpFilePart); 83 WINBASEAPI DWORD WINAPI GetLogicalDrives (VOID); 84 #define FindFirstFile __MINGW_NAME_AW(FindFirstFile) 85 #define GetDiskFreeSpace __MINGW_NAME_AW(GetDiskFreeSpace) 86 #define GetDriveType __MINGW_NAME_AW(GetDriveType) 87 #define GetFullPathName __MINGW_NAME_AW(GetFullPathName) 88 #endif 89 90 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || (NTDDI_VERSION >= NTDDI_WIN10_VB) 91 WINBASEAPI WINBOOL WINAPI GetVolumeNameForVolumeMountPointW (LPCWSTR lpszVolumeMountPoint, LPWSTR lpszVolumeName, DWORD cchBufferLength); 92 WINBASEAPI WINBOOL WINAPI GetVolumePathNameW (LPCWSTR lpszFileName, LPWSTR lpszVolumePathName, DWORD cchBufferLength); 93 WINBASEAPI WINBOOL WINAPI ReadFileScatter (HANDLE hFile, FILE_SEGMENT_ELEMENT aSegmentArray[], DWORD nNumberOfBytesToRead, LPDWORD lpReserved, LPOVERLAPPED lpOverlapped); 94 WINBASEAPI WINBOOL WINAPI SetFileValidData (HANDLE hFile, LONGLONG ValidDataLength); 95 WINBASEAPI WINBOOL WINAPI WriteFileGather (HANDLE hFile, FILE_SEGMENT_ELEMENT aSegmentArray[], DWORD nNumberOfBytesToWrite, LPDWORD lpReserved, LPOVERLAPPED lpOverlapped); 96 #ifdef UNICODE 97 #define GetVolumePathName GetVolumePathNameW 98 #define GetVolumeNameForVolumeMountPoint GetVolumeNameForVolumeMountPointW 99 #endif 100 #endif 101 102 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) 103 WINBASEAPI DWORD WINAPI GetLogicalDriveStringsW (DWORD nBufferLength, LPWSTR lpBuffer); 104 WINBASEAPI DWORD WINAPI GetShortPathNameW (LPCWSTR lpszLongPath, LPWSTR lpszShortPath, DWORD cchBuffer); 105 WINBASEAPI DWORD WINAPI QueryDosDeviceW (LPCWSTR lpDeviceName, LPWSTR lpTargetPath, DWORD ucchMax); 106 WINBASEAPI WINBOOL WINAPI GetVolumePathNamesForVolumeNameW (LPCWSTR lpszVolumeName, LPWCH lpszVolumePathNames, DWORD cchBufferLength, PDWORD lpcchReturnLength); 107 108 #ifdef UNICODE 109 #define DefineDosDevice DefineDosDeviceW 110 #define DeleteVolumeMountPoint DeleteVolumeMountPointW 111 #define FindFirstVolume FindFirstVolumeW 112 #define FindNextVolume FindNextVolumeW 113 #define GetLogicalDriveStrings GetLogicalDriveStringsW 114 #define GetShortPathName GetShortPathNameW 115 #define GetVolumeInformation GetVolumeInformationW 116 #define QueryDosDevice QueryDosDeviceW 117 #define GetVolumeNameForVolumeMountPoint GetVolumeNameForVolumeMountPointW 118 #define GetVolumePathNamesForVolumeName GetVolumePathNamesForVolumeNameW 119 #endif 120 #define FindFirstChangeNotification __MINGW_NAME_AW(FindFirstChangeNotification) 121 #define GetLongPathName __MINGW_NAME_AW(GetLongPathName) 122 #define GetTempFileName __MINGW_NAME_AW(GetTempFileName) 123 124 125 #if _WIN32_WINNT >= 0x0600 126 WINBASEAPI WINBOOL WINAPI GetVolumeInformationByHandleW (HANDLE hFile, LPWSTR lpVolumeNameBuffer, DWORD nVolumeNameSize, LPDWORD lpVolumeSerialNumber, LPDWORD lpMaximumComponentLength, LPDWORD lpFileSystemFlags, LPWSTR lpFileSystemNameBuffer, DWORD nFileSystemNameSize); 127 #endif 128 129 #if NTDDI_VERSION >= NTDDI_WIN10_FE 130 WINBASEAPI WINBOOL WINAPI AreShortNamesEnabled (HANDLE Handle, WINBOOL *Enabled); 131 #endif 132 133 #endif /* WINAPI_PARTITION_DESKTOP */ 134 135 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP) 136 WINBASEAPI DWORD WINAPI GetLongPathNameA (LPCSTR lpszShortPath, LPSTR lpszLongPath, DWORD cchBuffer); 137 WINBASEAPI DWORD WINAPI GetLongPathNameW (LPCWSTR lpszShortPath, LPWSTR lpszLongPath, DWORD cchBuffer); 138 WINBASEAPI UINT WINAPI GetTempFileNameA (LPCSTR lpPathName, LPCSTR lpPrefixString, UINT uUnique, LPSTR lpTempFileName); 139 WINBASEAPI UINT WINAPI GetTempFileNameW (LPCWSTR lpPathName, LPCWSTR lpPrefixString, UINT uUnique, LPWSTR lpTempFileName); 140 WINBASEAPI WINBOOL WINAPI GetVolumeInformationW (LPCWSTR lpRootPathName, LPWSTR lpVolumeNameBuffer, DWORD nVolumeNameSize, LPDWORD lpVolumeSerialNumber, LPDWORD lpMaximumComponentLength, LPDWORD lpFileSystemFlags, LPWSTR lpFileSystemNameBuffer, DWORD nFileSystemNameSize); 141 WINBASEAPI WINBOOL WINAPI LocalFileTimeToFileTime (CONST FILETIME *lpLocalFileTime, LPFILETIME lpFileTime); 142 WINBASEAPI WINBOOL WINAPI LockFile (HANDLE hFile, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh, DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh); 143 WINBASEAPI WINBOOL WINAPI ReadFileEx (HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPOVERLAPPED lpOverlapped, LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine); 144 WINBASEAPI WINBOOL WINAPI SetFileTime (HANDLE hFile, CONST FILETIME *lpCreationTime, CONST FILETIME *lpLastAccessTime, CONST FILETIME *lpLastWriteTime); 145 WINBASEAPI WINBOOL WINAPI UnlockFile (HANDLE hFile, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh, DWORD nNumberOfBytesToUnlockLow, DWORD nNumberOfBytesToUnlockHigh); 146 WINBASEAPI WINBOOL WINAPI WriteFileEx (HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPOVERLAPPED lpOverlapped, LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine); 147 148 #if _WIN32_WINNT >= 0x0600 149 WINBASEAPI DWORD WINAPI GetFinalPathNameByHandleA (HANDLE hFile, LPSTR lpszFilePath, DWORD cchFilePath, DWORD dwFlags); 150 WINBASEAPI DWORD WINAPI GetFinalPathNameByHandleW (HANDLE hFile, LPWSTR lpszFilePath, DWORD cchFilePath, DWORD dwFlags); 151 152 #define GetFinalPathNameByHandle __MINGW_NAME_AW(GetFinalPathNameByHandle) 153 #endif 154 typedef struct _WIN32_FILE_ATTRIBUTE_DATA { 155 DWORD dwFileAttributes; 156 FILETIME ftCreationTime; 157 FILETIME ftLastAccessTime; 158 FILETIME ftLastWriteTime; 159 DWORD nFileSizeHigh; 160 DWORD nFileSizeLow; 161 } WIN32_FILE_ATTRIBUTE_DATA, *LPWIN32_FILE_ATTRIBUTE_DATA; 162 163 #if _WIN32_WINNT >= 0x0602 164 typedef struct _CREATEFILE2_EXTENDED_PARAMETERS { 165 DWORD dwSize; 166 DWORD dwFileAttributes; 167 DWORD dwFileFlags; 168 DWORD dwSecurityQosFlags; 169 LPSECURITY_ATTRIBUTES lpSecurityAttributes; 170 HANDLE hTemplateFile; 171 } CREATEFILE2_EXTENDED_PARAMETERS, *PCREATEFILE2_EXTENDED_PARAMETERS, 172 *LPCREATEFILE2_EXTENDED_PARAMETERS; 173 #endif 174 175 typedef struct DISK_SPACE_INFORMATION { 176 ULONGLONG ActualTotalAllocationUnits; 177 ULONGLONG ActualAvailableAllocationUnits; 178 ULONGLONG ActualPoolUnavailableAllocationUnits; 179 ULONGLONG CallerTotalAllocationUnits; 180 ULONGLONG CallerAvailableAllocationUnits; 181 ULONGLONG CallerPoolUnavailableAllocationUnits; 182 ULONGLONG UsedAllocationUnits; 183 ULONGLONG TotalReservedAllocationUnits; 184 ULONGLONG VolumeStorageReserveAllocationUnits; 185 ULONGLONG AvailableCommittedAllocationUnits; 186 ULONGLONG PoolAvailableAllocationUnits; 187 DWORD SectorsPerAllocationUnit; 188 DWORD BytesPerSector; 189 } DISK_SPACE_INFORMATION; 190 191 WINBASEAPI WINBOOL WINAPI CreateDirectoryA (LPCSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes); 192 WINBASEAPI WINBOOL WINAPI CreateDirectoryW (LPCWSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes); 193 WINBASEAPI WINBOOL WINAPI DeleteFileA (LPCSTR lpFileName); 194 WINBASEAPI WINBOOL WINAPI DeleteFileW (LPCWSTR lpFileName); 195 WINBASEAPI WINBOOL WINAPI FindClose (HANDLE hFindFile); 196 WINBASEAPI HANDLE WINAPI FindFirstFileExA (LPCSTR lpFileName, FINDEX_INFO_LEVELS fInfoLevelId, LPVOID lpFindFileData, FINDEX_SEARCH_OPS fSearchOp, LPVOID lpSearchFilter, DWORD dwAdditionalFlags); 197 WINBASEAPI HANDLE WINAPI FindFirstFileExW (LPCWSTR lpFileName, FINDEX_INFO_LEVELS fInfoLevelId, LPVOID lpFindFileData, FINDEX_SEARCH_OPS fSearchOp, LPVOID lpSearchFilter, DWORD dwAdditionalFlags); 198 WINBASEAPI WINBOOL WINAPI FindNextFileA (HANDLE hFindFile, LPWIN32_FIND_DATAA lpFindFileData); 199 WINBASEAPI WINBOOL WINAPI FindNextFileW (HANDLE hFindFile, LPWIN32_FIND_DATAW lpFindFileData); 200 WINBASEAPI WINBOOL WINAPI FlushFileBuffers (HANDLE hFile); 201 WINBASEAPI WINBOOL WINAPI GetDiskFreeSpaceExA (LPCSTR lpDirectoryName, PULARGE_INTEGER lpFreeBytesAvailableToCaller, PULARGE_INTEGER lpTotalNumberOfBytes, PULARGE_INTEGER lpTotalNumberOfFreeBytes); 202 WINBASEAPI WINBOOL WINAPI GetDiskFreeSpaceExW (LPCWSTR lpDirectoryName, PULARGE_INTEGER lpFreeBytesAvailableToCaller, PULARGE_INTEGER lpTotalNumberOfBytes, PULARGE_INTEGER lpTotalNumberOfFreeBytes); 203 WINBASEAPI WINBOOL WINAPI GetFileAttributesExA (LPCSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation); 204 WINBASEAPI WINBOOL WINAPI GetFileAttributesExW (LPCWSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation); 205 WINBASEAPI WINBOOL WINAPI LockFileEx (HANDLE hFile, DWORD dwFlags, DWORD dwReserved, DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh, LPOVERLAPPED lpOverlapped); 206 WINBASEAPI WINBOOL WINAPI ReadFile (HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped); 207 WINBASEAPI WINBOOL WINAPI RemoveDirectoryA (LPCSTR lpPathName); 208 WINBASEAPI WINBOOL WINAPI RemoveDirectoryW (LPCWSTR lpPathName); 209 WINBASEAPI WINBOOL WINAPI SetEndOfFile (HANDLE hFile); 210 WINBASEAPI WINBOOL WINAPI SetFileAttributesA (LPCSTR lpFileName, DWORD dwFileAttributes); 211 WINBASEAPI WINBOOL WINAPI SetFileAttributesW (LPCWSTR lpFileName, DWORD dwFileAttributes); 212 WINBASEAPI WINBOOL WINAPI SetFilePointerEx (HANDLE hFile, LARGE_INTEGER liDistanceToMove, PLARGE_INTEGER lpNewFilePointer, DWORD dwMoveMethod); 213 WINBASEAPI WINBOOL WINAPI UnlockFileEx (HANDLE hFile, DWORD dwReserved, DWORD nNumberOfBytesToUnlockLow, DWORD nNumberOfBytesToUnlockHigh, LPOVERLAPPED lpOverlapped); 214 WINBASEAPI WINBOOL WINAPI WriteFile (HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped); 215 WINBASEAPI DWORD WINAPI GetTempPathA (DWORD nBufferLength, LPSTR lpBuffer); 216 WINBASEAPI DWORD WINAPI GetTempPathW (DWORD nBufferLength, LPWSTR lpBuffer); 217 WINBASEAPI HRESULT WINAPI GetDiskSpaceInformationA (LPCSTR rootPath, DISK_SPACE_INFORMATION *diskSpaceInfo); 218 WINBASEAPI HRESULT WINAPI GetDiskSpaceInformationW (LPCWSTR rootPath, DISK_SPACE_INFORMATION *diskSpaceInfo); 219 220 #define CreateDirectory __MINGW_NAME_AW(CreateDirectory) 221 #define DeleteFile __MINGW_NAME_AW(DeleteFile) 222 #define FindFirstFileEx __MINGW_NAME_AW(FindFirstFileEx) 223 #define FindNextFile __MINGW_NAME_AW(FindNextFile) 224 #define GetDiskFreeSpaceEx __MINGW_NAME_AW(GetDiskFreeSpaceEx) 225 #define GetFileAttributesEx __MINGW_NAME_AW(GetFileAttributesEx) 226 #define RemoveDirectory __MINGW_NAME_AW(RemoveDirectory) 227 #define SetFileAttributes __MINGW_NAME_AW(SetFileAttributes) 228 #define GetTempPath __MINGW_NAME_AW(GetTempPath) 229 #define GetDiskSpaceInformation __MINGW_NAME_AW(GetDiskSpaceInformation) 230 231 #if _WIN32_WINNT >= 0x0600 232 WINBASEAPI WINBOOL WINAPI SetFileInformationByHandle (HANDLE hFile, FILE_INFO_BY_HANDLE_CLASS FileInformationClass, LPVOID lpFileInformation, DWORD dwBufferSize); 233 #endif 234 #if _WIN32_WINNT >= 0x0602 235 WINBASEAPI HANDLE WINAPI CreateFile2 (LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, DWORD dwCreationDisposition, LPCREATEFILE2_EXTENDED_PARAMETERS pCreateExParams); 236 #endif 237 #if NTDDI_VERSION >= NTDDI_WIN10_FE 238 WINBASEAPI DWORD WINAPI GetTempPath2W (DWORD BufferLength, LPWSTR Buffer); 239 WINBASEAPI DWORD WINAPI GetTempPath2A (DWORD BufferLength, LPSTR Buffer); 240 #define GetTempPath2 __MINGW_NAME_AW(GetTempPath2) 241 #endif 242 243 #endif /* WINAPI_PARTITION_APP */ 244 245 #ifdef __cplusplus 246 } 247 #endif 248 #endif