master
  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
 14extern "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)
 31WINBASEAPI DWORD WINAPI GetFileAttributesW (LPCWSTR lpFileName);
 32#define GetFileAttributes __MINGW_NAME_AW(GetFileAttributes)
 33WINBASEAPI 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