]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/boost/winapi/file_management.hpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / boost / winapi / file_management.hpp
CommitLineData
b32b8144
FG
1/*
2 * Copyright 2010 Vicente J. Botet Escriba
3 * Copyright 2015 Andrey Semashev
4 * Copyright 2016 Jorge Lodos
5 * Copyright 2017 James E. King, III
6 *
7 * Distributed under the Boost Software License, Version 1.0.
8 * See http://www.boost.org/LICENSE_1_0.txt
9 */
10
11#ifndef BOOST_WINAPI_FILE_MANAGEMENT_HPP_INCLUDED_
12#define BOOST_WINAPI_FILE_MANAGEMENT_HPP_INCLUDED_
13
14#include <boost/winapi/basic_types.hpp>
15#include <boost/winapi/limits.hpp>
16#include <boost/winapi/time.hpp>
17#include <boost/winapi/overlapped.hpp>
20effc67 18#include <boost/winapi/detail/header.hpp>
7c673cae
FG
19
20#ifdef BOOST_HAS_PRAGMA_ONCE
21#pragma once
22#endif
23
b32b8144
FG
24/*
25 * UWP:
26 * API SDK 8 SDK 10 _WIN32_WINNT
27 * AreFileApisANSI DESKTOP - DESKTOP | SYSTEM
28 * CreateFile DESKTOP - DESKTOP | SYSTEM
29 * DeleteFile APP - APP | SYSTEM
30 * FindClose APP - APP | SYSTEM
31 * FindFirstFile DESKTOP > APP | SYSTEM
32 * FindNextFile DESKTOP > APP | SYSTEM
33 * GetFileAttributes DESKTOP > APP | SYSTEM
34 * GetFileInformationByHandle DESKTOP - DESKTOP | SYSTEM
35 * GetFileSizeEx DESKTOP > APP | SYSTEM
36 * LockFile DESKTOP - DESKTOP | SYSTEM
37 * MoveFileEx APP - APP | SYSTEM
38 * ReadFile APP - APP | SYSTEM
39 * SetEndOfFile APP - APP | SYSTEM
40 * SetFilePointer DESKTOP > APP | SYSTEM
41 * SetFileValidData DESKTOP - DESKTOP | SYSTEM >= 0x0501
42 * UnlockFile DESKTOP - DESKTOP | SYSTEM
43 * WriteFile APP - APP | SYSTEM
44 */
45
7c673cae
FG
46#if !defined( BOOST_USE_WINDOWS_H )
47extern "C" {
48
b32b8144 49#if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
7c673cae 50#if !defined( BOOST_NO_ANSI_APIS )
20effc67 51BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
b32b8144
FG
52AreFileApisANSI(BOOST_WINAPI_DETAIL_VOID);
53
20effc67 54BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC
7c673cae 55CreateFileA(
b32b8144
FG
56 boost::winapi::LPCSTR_ lpFileName,
57 boost::winapi::DWORD_ dwDesiredAccess,
58 boost::winapi::DWORD_ dwShareMode,
7c673cae 59 ::_SECURITY_ATTRIBUTES* lpSecurityAttributes,
b32b8144
FG
60 boost::winapi::DWORD_ dwCreationDisposition,
61 boost::winapi::DWORD_ dwFlagsAndAttributes,
62 boost::winapi::HANDLE_ hTemplateFile);
7c673cae
FG
63
64struct _WIN32_FIND_DATAA;
20effc67 65BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC
b32b8144 66FindFirstFileA(boost::winapi::LPCSTR_ lpFileName, ::_WIN32_FIND_DATAA* lpFindFileData);
7c673cae 67
20effc67 68BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
b32b8144 69FindNextFileA(boost::winapi::HANDLE_ hFindFile, ::_WIN32_FIND_DATAA* lpFindFileData);
7c673cae
FG
70#endif
71
20effc67 72BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC
7c673cae 73CreateFileW(
b32b8144
FG
74 boost::winapi::LPCWSTR_ lpFileName,
75 boost::winapi::DWORD_ dwDesiredAccess,
76 boost::winapi::DWORD_ dwShareMode,
7c673cae 77 ::_SECURITY_ATTRIBUTES* lpSecurityAttributes,
b32b8144
FG
78 boost::winapi::DWORD_ dwCreationDisposition,
79 boost::winapi::DWORD_ dwFlagsAndAttributes,
80 boost::winapi::HANDLE_ hTemplateFile);
7c673cae
FG
81
82struct _WIN32_FIND_DATAW;
20effc67 83BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC
b32b8144 84FindFirstFileW(boost::winapi::LPCWSTR_ lpFileName, ::_WIN32_FIND_DATAW* lpFindFileData);
7c673cae 85
20effc67 86BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
b32b8144 87FindNextFileW(boost::winapi::HANDLE_ hFindFile, ::_WIN32_FIND_DATAW* lpFindFileData);
7c673cae 88
b32b8144 89struct _BY_HANDLE_FILE_INFORMATION;
20effc67 90BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
b32b8144
FG
91GetFileInformationByHandle(
92 boost::winapi::HANDLE_ hFile,
93 ::_BY_HANDLE_FILE_INFORMATION* lpFileInformation);
7c673cae 94
20effc67 95BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
b32b8144
FG
96LockFile(
97 boost::winapi::HANDLE_ hFile,
98 boost::winapi::DWORD_ dwFileOffsetLow,
99 boost::winapi::DWORD_ dwFileOffsetHigh,
100 boost::winapi::DWORD_ nNumberOfBytesToLockLow,
101 boost::winapi::DWORD_ nNumberOfBytesToLockHigh);
7c673cae 102
20effc67 103BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
b32b8144
FG
104LockFileEx(
105 boost::winapi::HANDLE_ hFile,
106 boost::winapi::DWORD_ dwFlags,
107 boost::winapi::DWORD_ dwReserved,
108 boost::winapi::DWORD_ nNumberOfBytesToLockLow,
109 boost::winapi::DWORD_ nNumberOfBytesToLockHigh,
110 ::_OVERLAPPED* lpOverlapped);
7c673cae
FG
111
112#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WINXP
20effc67 113BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
b32b8144
FG
114SetFileValidData(
115 boost::winapi::HANDLE_ hFile,
116 boost::winapi::LONGLONG_ ValidDataLength);
117#endif
7c673cae 118
20effc67 119BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
b32b8144
FG
120UnlockFile(
121 boost::winapi::HANDLE_ hFile,
122 boost::winapi::DWORD_ dwFileOffsetLow,
123 boost::winapi::DWORD_ dwFileOffsetHigh,
124 boost::winapi::DWORD_ nNumberOfBytesToUnlockLow,
125 boost::winapi::DWORD_ nNumberOfBytesToUnlockHigh);
7c673cae 126
20effc67 127BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
b32b8144
FG
128UnlockFileEx(
129 boost::winapi::HANDLE_ hFile,
130 boost::winapi::DWORD_ dwReserved,
131 boost::winapi::DWORD_ nNumberOfBytesToUnlockLow,
132 boost::winapi::DWORD_ nNumberOfBytesToUnlockHigh,
133 ::_OVERLAPPED* lpOverlapped);
7c673cae
FG
134#endif
135
b32b8144
FG
136#if BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM
137#if !defined( BOOST_NO_ANSI_APIS )
20effc67 138BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
b32b8144 139DeleteFileA(boost::winapi::LPCSTR_ lpFileName);
7c673cae 140
20effc67 141BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
b32b8144
FG
142MoveFileExA(
143 boost::winapi::LPCSTR_ lpExistingFileName,
144 boost::winapi::LPCSTR_ lpNewFileName,
145 boost::winapi::DWORD_ dwFlags);
146#endif
7c673cae 147
20effc67 148BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
b32b8144 149DeleteFileW(boost::winapi::LPCWSTR_ lpFileName);
7c673cae 150
20effc67 151BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
b32b8144 152FindClose(boost::winapi::HANDLE_ hFindFile);
7c673cae 153
20effc67 154BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
b32b8144
FG
155MoveFileExW(
156 boost::winapi::LPCWSTR_ lpExistingFileName,
157 boost::winapi::LPCWSTR_ lpNewFileName,
158 boost::winapi::DWORD_ dwFlags);
7c673cae 159
20effc67 160BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
7c673cae 161ReadFile(
b32b8144
FG
162 boost::winapi::HANDLE_ hFile,
163 boost::winapi::LPVOID_ lpBuffer,
164 boost::winapi::DWORD_ nNumberOfBytesToRead,
165 boost::winapi::LPDWORD_ lpNumberOfBytesRead,
7c673cae
FG
166 ::_OVERLAPPED* lpOverlapped);
167
20effc67 168BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
b32b8144
FG
169SetEndOfFile(boost::winapi::HANDLE_ hFile);
170
20effc67 171BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
7c673cae 172WriteFile(
b32b8144
FG
173 boost::winapi::HANDLE_ hFile,
174 boost::winapi::LPCVOID_ lpBuffer,
175 boost::winapi::DWORD_ nNumberOfBytesToWrite,
176 boost::winapi::LPDWORD_ lpNumberOfBytesWritten,
7c673cae 177 ::_OVERLAPPED* lpOverlapped);
b32b8144
FG
178#endif // BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM
179
180#if BOOST_WINAPI_PARTITION_APP_SYSTEM
181#if !defined( BOOST_NO_ANSI_APIS )
20effc67 182BOOST_WINAPI_IMPORT boost::winapi::DWORD_ BOOST_WINAPI_WINAPI_CC
b32b8144
FG
183GetFileAttributesA(boost::winapi::LPCSTR_ lpFileName);
184#endif
185
20effc67 186BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::DWORD_ BOOST_WINAPI_WINAPI_CC
b32b8144
FG
187GetFileAttributesW(boost::winapi::LPCWSTR_ lpFileName);
188
20effc67 189BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
b32b8144 190GetFileSizeEx(boost::winapi::HANDLE_ hFile, ::_LARGE_INTEGER* lpFileSize);
7c673cae 191
20effc67 192BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::DWORD_ BOOST_WINAPI_WINAPI_CC
7c673cae 193SetFilePointer(
b32b8144
FG
194 boost::winapi::HANDLE_ hFile,
195 boost::winapi::LONG_ lpDistanceToMove,
196 boost::winapi::PLONG_ lpDistanceToMoveHigh,
197 boost::winapi::DWORD_ dwMoveMethod);
198#endif // BOOST_WINAPI_PARTITION_APP_SYSTEM
7c673cae 199
b32b8144
FG
200} // extern "C"
201#endif // !defined(BOOST_USE_WINDOWS_H)
7c673cae
FG
202
203namespace boost {
7c673cae
FG
204namespace winapi {
205
206#if defined( BOOST_USE_WINDOWS_H )
207
92f5a8d4
TL
208BOOST_CONSTEXPR_OR_CONST DWORD_ INVALID_FILE_SIZE_ = INVALID_FILE_SIZE;
209BOOST_CONSTEXPR_OR_CONST DWORD_ INVALID_SET_FILE_POINTER_ = INVALID_SET_FILE_POINTER;
210BOOST_CONSTEXPR_OR_CONST DWORD_ INVALID_FILE_ATTRIBUTES_ = INVALID_FILE_ATTRIBUTES;
211
212BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_READONLY_ = FILE_ATTRIBUTE_READONLY;
213BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_HIDDEN_ = FILE_ATTRIBUTE_HIDDEN;
214BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_SYSTEM_ = FILE_ATTRIBUTE_SYSTEM;
215BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_DIRECTORY_ = FILE_ATTRIBUTE_DIRECTORY;
216BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_ARCHIVE_ = FILE_ATTRIBUTE_ARCHIVE;
217BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_DEVICE_ = FILE_ATTRIBUTE_DEVICE;
218BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_NORMAL_ = FILE_ATTRIBUTE_NORMAL;
219BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_TEMPORARY_ = FILE_ATTRIBUTE_TEMPORARY;
220BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_SPARSE_FILE_ = FILE_ATTRIBUTE_SPARSE_FILE;
221BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_REPARSE_POINT_ = FILE_ATTRIBUTE_REPARSE_POINT;
222BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_COMPRESSED_ = FILE_ATTRIBUTE_COMPRESSED;
223BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_OFFLINE_ = FILE_ATTRIBUTE_OFFLINE;
224BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_NOT_CONTENT_INDEXED_ = FILE_ATTRIBUTE_NOT_CONTENT_INDEXED;
225BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_ENCRYPTED_ = FILE_ATTRIBUTE_ENCRYPTED;
226
227BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_NEW_ = CREATE_NEW;
228BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_ALWAYS_ = CREATE_ALWAYS;
229BOOST_CONSTEXPR_OR_CONST DWORD_ OPEN_EXISTING_ = OPEN_EXISTING;
230BOOST_CONSTEXPR_OR_CONST DWORD_ OPEN_ALWAYS_ = OPEN_ALWAYS;
231BOOST_CONSTEXPR_OR_CONST DWORD_ TRUNCATE_EXISTING_ = TRUNCATE_EXISTING;
232
233BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_SHARE_READ_ = FILE_SHARE_READ;
234BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_SHARE_WRITE_ = FILE_SHARE_WRITE;
235BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_SHARE_DELETE_ = FILE_SHARE_DELETE;
236
237BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_BEGIN_ = FILE_BEGIN;
238BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_CURRENT_ = FILE_CURRENT;
239BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_END_ = FILE_END;
7c673cae
FG
240
241#else // defined( BOOST_USE_WINDOWS_H )
242
92f5a8d4
TL
243BOOST_CONSTEXPR_OR_CONST DWORD_ INVALID_FILE_SIZE_ = ((DWORD_)0xFFFFFFFF);
244BOOST_CONSTEXPR_OR_CONST DWORD_ INVALID_SET_FILE_POINTER_ = ((DWORD_)-1);
245BOOST_CONSTEXPR_OR_CONST DWORD_ INVALID_FILE_ATTRIBUTES_ = ((DWORD_)-1);
246
247BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_READONLY_ = 0x00000001;
248BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_HIDDEN_ = 0x00000002;
249BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_SYSTEM_ = 0x00000004;
250BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_DIRECTORY_ = 0x00000010;
251BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_ARCHIVE_ = 0x00000020;
252BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_DEVICE_ = 0x00000040;
253BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_NORMAL_ = 0x00000080;
254BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_TEMPORARY_ = 0x00000100;
255BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_SPARSE_FILE_ = 0x00000200;
256BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_REPARSE_POINT_ = 0x00000400;
257BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_COMPRESSED_ = 0x00000800;
258BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_OFFLINE_ = 0x00001000;
259BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_NOT_CONTENT_INDEXED_ = 0x00002000;
260BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_ENCRYPTED_ = 0x00004000;
261
262BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_NEW_ = 1;
263BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_ALWAYS_ = 2;
264BOOST_CONSTEXPR_OR_CONST DWORD_ OPEN_EXISTING_ = 3;
265BOOST_CONSTEXPR_OR_CONST DWORD_ OPEN_ALWAYS_ = 4;
266BOOST_CONSTEXPR_OR_CONST DWORD_ TRUNCATE_EXISTING_ = 5;
267
268BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_SHARE_READ_ = 0x00000001;
269BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_SHARE_WRITE_ = 0x00000002;
270BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_SHARE_DELETE_ = 0x00000004;
271
272BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_BEGIN_ = 0;
273BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_CURRENT_ = 1;
274BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_END_ = 2;
7c673cae
FG
275
276#endif // defined( BOOST_USE_WINDOWS_H )
277
b32b8144 278// Some of these constants are not defined by Windows SDK in MinGW or older MSVC
92f5a8d4
TL
279BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_WRITE_THROUGH_ = 0x80000000;
280BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_OVERLAPPED_ = 0x40000000;
281BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_NO_BUFFERING_ = 0x20000000;
282BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_RANDOM_ACCESS_ = 0x10000000;
283BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_SEQUENTIAL_SCAN_ = 0x08000000;
284BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_DELETE_ON_CLOSE_ = 0x04000000;
285BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_BACKUP_SEMANTICS_ = 0x02000000;
286BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_POSIX_SEMANTICS_ = 0x01000000;
287BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_SESSION_AWARE_ = 0x00800000;
288BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_OPEN_REPARSE_POINT_ = 0x00200000;
289BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_OPEN_NO_RECALL_ = 0x00100000;
290BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_FIRST_PIPE_INSTANCE_ = 0x00080000;
b32b8144
FG
291
292#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN8
92f5a8d4 293BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_OPEN_REQUIRING_OPLOCK_ = 0x00040000;
b32b8144
FG
294#endif
295
7c673cae 296// This constant is not defined in Windows SDK up until 6.0A
92f5a8d4 297BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_VIRTUAL_ = 0x00010000;
7c673cae
FG
298
299// These constants are not defined in Windows SDK up until 8.0 and MinGW/MinGW-w64 (as of 2016-02-14).
300// They are documented to be supported only since Windows 8/Windows Server 2012
301// but defined unconditionally.
92f5a8d4
TL
302BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_INTEGRITY_STREAM_ = 0x00008000;
303BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_NO_SCRUB_DATA_ = 0x00020000;
7c673cae 304// Undocumented
92f5a8d4 305BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_EA_ = 0x00040000;
7c673cae 306
b32b8144 307#if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
7c673cae 308#if !defined( BOOST_NO_ANSI_APIS )
7c673cae 309using ::AreFileApisANSI;
7c673cae 310
7c673cae
FG
311BOOST_FORCEINLINE HANDLE_ CreateFileA(
312 LPCSTR_ lpFileName,
313 DWORD_ dwDesiredAccess,
314 DWORD_ dwShareMode,
315 SECURITY_ATTRIBUTES_* lpSecurityAttributes,
316 DWORD_ dwCreationDisposition,
317 DWORD_ dwFlagsAndAttributes,
318 HANDLE_ hTemplateFile)
319{
320 return ::CreateFileA(
321 lpFileName,
322 dwDesiredAccess,
323 dwShareMode,
324 reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes),
325 dwCreationDisposition,
326 dwFlagsAndAttributes,
327 hTemplateFile);
328}
329
b32b8144
FG
330BOOST_FORCEINLINE HANDLE_ create_file(
331 LPCSTR_ lpFileName,
332 DWORD_ dwDesiredAccess,
333 DWORD_ dwShareMode,
334 SECURITY_ATTRIBUTES_* lpSecurityAttributes,
335 DWORD_ dwCreationDisposition,
336 DWORD_ dwFlagsAndAttributes,
337 HANDLE_ hTemplateFile)
338{
339 return ::CreateFileA(
340 lpFileName,
341 dwDesiredAccess,
342 dwShareMode,
343 reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes),
344 dwCreationDisposition,
345 dwFlagsAndAttributes,
346 hTemplateFile);
347}
348
349typedef struct BOOST_MAY_ALIAS _WIN32_FIND_DATAA {
7c673cae
FG
350 DWORD_ dwFileAttributes;
351 FILETIME_ ftCreationTime;
352 FILETIME_ ftLastAccessTime;
353 FILETIME_ ftLastWriteTime;
354 DWORD_ nFileSizeHigh;
355 DWORD_ nFileSizeLow;
356 DWORD_ dwReserved0;
357 DWORD_ dwReserved1;
358 CHAR_ cFileName[MAX_PATH_];
359 CHAR_ cAlternateFileName[14];
360#ifdef _MAC
361 DWORD_ dwFileType;
362 DWORD_ dwCreatorType;
363 WORD_ wFinderFlags;
364#endif
365} WIN32_FIND_DATAA_, *PWIN32_FIND_DATAA_, *LPWIN32_FIND_DATAA_;
366
367BOOST_FORCEINLINE HANDLE_ FindFirstFileA(LPCSTR_ lpFileName, WIN32_FIND_DATAA_* lpFindFileData)
368{
369 return ::FindFirstFileA(lpFileName, reinterpret_cast< ::_WIN32_FIND_DATAA* >(lpFindFileData));
370}
371
b32b8144
FG
372BOOST_FORCEINLINE HANDLE_ find_first_file(LPCSTR_ lpFileName, WIN32_FIND_DATAA_* lpFindFileData)
373{
374 return ::FindFirstFileA(lpFileName, reinterpret_cast< ::_WIN32_FIND_DATAA* >(lpFindFileData));
375}
376
7c673cae
FG
377BOOST_FORCEINLINE BOOL_ FindNextFileA(HANDLE_ hFindFile, WIN32_FIND_DATAA_* lpFindFileData)
378{
379 return ::FindNextFileA(hFindFile, reinterpret_cast< ::_WIN32_FIND_DATAA* >(lpFindFileData));
380}
b32b8144
FG
381
382BOOST_FORCEINLINE BOOL_ find_next_file(HANDLE_ hFindFile, WIN32_FIND_DATAA_* lpFindFileData)
383{
384 return ::FindNextFileA(hFindFile, reinterpret_cast< ::_WIN32_FIND_DATAA* >(lpFindFileData));
385}
386
387#endif // !defined( BOOST_NO_ANSI_APIS )
7c673cae
FG
388
389BOOST_FORCEINLINE HANDLE_ CreateFileW(
390 LPCWSTR_ lpFileName,
391 DWORD_ dwDesiredAccess,
392 DWORD_ dwShareMode,
393 SECURITY_ATTRIBUTES_* lpSecurityAttributes,
394 DWORD_ dwCreationDisposition,
395 DWORD_ dwFlagsAndAttributes,
396 HANDLE_ hTemplateFile)
397{
398 return ::CreateFileW(
399 lpFileName,
400 dwDesiredAccess,
401 dwShareMode,
402 reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes),
403 dwCreationDisposition,
404 dwFlagsAndAttributes,
405 hTemplateFile);
406}
407
b32b8144
FG
408BOOST_FORCEINLINE HANDLE_ create_file(
409 LPCWSTR_ lpFileName,
410 DWORD_ dwDesiredAccess,
411 DWORD_ dwShareMode,
412 SECURITY_ATTRIBUTES_* lpSecurityAttributes,
413 DWORD_ dwCreationDisposition,
414 DWORD_ dwFlagsAndAttributes,
415 HANDLE_ hTemplateFile)
416{
417 return ::CreateFileW(
418 lpFileName,
419 dwDesiredAccess,
420 dwShareMode,
421 reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes),
422 dwCreationDisposition,
423 dwFlagsAndAttributes,
424 hTemplateFile);
425}
426
427typedef struct BOOST_MAY_ALIAS _WIN32_FIND_DATAW {
7c673cae
FG
428 DWORD_ dwFileAttributes;
429 FILETIME_ ftCreationTime;
430 FILETIME_ ftLastAccessTime;
431 FILETIME_ ftLastWriteTime;
432 DWORD_ nFileSizeHigh;
433 DWORD_ nFileSizeLow;
434 DWORD_ dwReserved0;
435 DWORD_ dwReserved1;
436 WCHAR_ cFileName[MAX_PATH_];
437 WCHAR_ cAlternateFileName[14];
438#ifdef _MAC
439 DWORD_ dwFileType;
440 DWORD_ dwCreatorType;
441 WORD_ wFinderFlags;
442#endif
443} WIN32_FIND_DATAW_, *PWIN32_FIND_DATAW_, *LPWIN32_FIND_DATAW_;
444
b32b8144 445typedef struct BOOST_MAY_ALIAS _BY_HANDLE_FILE_INFORMATION {
7c673cae
FG
446 DWORD_ dwFileAttributes;
447 FILETIME_ ftCreationTime;
448 FILETIME_ ftLastAccessTime;
449 FILETIME_ ftLastWriteTime;
450 DWORD_ dwVolumeSerialNumber;
451 DWORD_ nFileSizeHigh;
452 DWORD_ nFileSizeLow;
453 DWORD_ nNumberOfLinks;
454 DWORD_ nFileIndexHigh;
455 DWORD_ nFileIndexLow;
456} BY_HANDLE_FILE_INFORMATION_, *PBY_HANDLE_FILE_INFORMATION_, *LPBY_HANDLE_FILE_INFORMATION_;
457
458BOOST_FORCEINLINE HANDLE_ FindFirstFileW(LPCWSTR_ lpFileName, WIN32_FIND_DATAW_* lpFindFileData)
459{
460 return ::FindFirstFileW(lpFileName, reinterpret_cast< ::_WIN32_FIND_DATAW* >(lpFindFileData));
461}
462
b32b8144
FG
463BOOST_FORCEINLINE HANDLE_ find_first_file(LPCWSTR_ lpFileName, WIN32_FIND_DATAW_* lpFindFileData)
464{
465 return ::FindFirstFileW(lpFileName, reinterpret_cast< ::_WIN32_FIND_DATAW* >(lpFindFileData));
466}
467
7c673cae
FG
468BOOST_FORCEINLINE BOOL_ FindNextFileW(HANDLE_ hFindFile, WIN32_FIND_DATAW_* lpFindFileData)
469{
470 return ::FindNextFileW(hFindFile, reinterpret_cast< ::_WIN32_FIND_DATAW* >(lpFindFileData));
471}
472
b32b8144 473BOOST_FORCEINLINE BOOL_ find_next_file(HANDLE_ hFindFile, WIN32_FIND_DATAW_* lpFindFileData)
7c673cae 474{
b32b8144 475 return ::FindNextFileW(hFindFile, reinterpret_cast< ::_WIN32_FIND_DATAW* >(lpFindFileData));
7c673cae
FG
476}
477
b32b8144
FG
478BOOST_FORCEINLINE BOOL_ GetFileInformationByHandle(HANDLE_ h, BY_HANDLE_FILE_INFORMATION_* info)
479{
480 return ::GetFileInformationByHandle(h, reinterpret_cast< ::_BY_HANDLE_FILE_INFORMATION* >(info));
481}
482
483using ::LockFile;
484
7c673cae
FG
485BOOST_FORCEINLINE BOOL_ LockFileEx(
486 HANDLE_ hFile,
487 DWORD_ dwFlags,
488 DWORD_ dwReserved,
489 DWORD_ nNumberOfBytesToLockLow,
490 DWORD_ nNumberOfBytesToLockHigh,
491 OVERLAPPED_* lpOverlapped)
492{
493 return ::LockFileEx(hFile, dwFlags, dwReserved, nNumberOfBytesToLockLow, nNumberOfBytesToLockHigh, reinterpret_cast< ::_OVERLAPPED* >(lpOverlapped));
494}
495
b32b8144
FG
496#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WINXP
497using ::SetFileValidData;
498#endif
499
500using ::UnlockFile;
501
7c673cae
FG
502BOOST_FORCEINLINE BOOL_ UnlockFileEx(
503 HANDLE_ hFile,
504 DWORD_ dwReserved,
505 DWORD_ nNumberOfBytesToUnlockLow,
506 DWORD_ nNumberOfBytesToUnlockHigh,
507 OVERLAPPED_* lpOverlapped)
508{
509 return ::UnlockFileEx(hFile, dwReserved, nNumberOfBytesToUnlockLow, nNumberOfBytesToUnlockHigh, reinterpret_cast< ::_OVERLAPPED* >(lpOverlapped));
510}
b32b8144 511#endif // BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
7c673cae 512
b32b8144 513#if BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM
7c673cae 514#if !defined( BOOST_NO_ANSI_APIS )
b32b8144 515using ::DeleteFileA;
7c673cae
FG
516
517BOOST_FORCEINLINE BOOL_ delete_file(LPCSTR_ lpFileName)
518{
519 return ::DeleteFileA(lpFileName);
520}
521
b32b8144 522using ::MoveFileExA;
7c673cae
FG
523
524BOOST_FORCEINLINE BOOL_ move_file(LPCSTR_ lpExistingFileName, LPCSTR_ lpNewFileName, DWORD_ dwFlags)
525{
526 return ::MoveFileExA(lpExistingFileName, lpNewFileName, dwFlags);
527}
528
7c673cae 529#endif
b32b8144 530using ::DeleteFileW;
7c673cae 531
b32b8144 532BOOST_FORCEINLINE BOOL_ delete_file(LPCWSTR_ lpFileName)
7c673cae 533{
b32b8144 534 return ::DeleteFileW(lpFileName);
7c673cae
FG
535}
536
b32b8144
FG
537using ::FindClose;
538using ::MoveFileExW;
539
540BOOST_FORCEINLINE BOOL_ move_file(LPCWSTR_ lpExistingFileName, LPCWSTR_ lpNewFileName, DWORD_ dwFlags)
7c673cae 541{
b32b8144 542 return ::MoveFileExW(lpExistingFileName, lpNewFileName, dwFlags);
7c673cae
FG
543}
544
b32b8144
FG
545BOOST_FORCEINLINE BOOL_ ReadFile(
546 HANDLE_ hFile,
547 LPVOID_ lpBuffer,
548 DWORD_ nNumberOfBytesToWrite,
549 LPDWORD_ lpNumberOfBytesWritten,
550 OVERLAPPED_* lpOverlapped)
7c673cae 551{
b32b8144 552 return ::ReadFile(hFile, lpBuffer, nNumberOfBytesToWrite, lpNumberOfBytesWritten, reinterpret_cast< ::_OVERLAPPED* >(lpOverlapped));
7c673cae
FG
553}
554
b32b8144
FG
555using ::SetEndOfFile;
556
557BOOST_FORCEINLINE BOOL_ WriteFile(
558 HANDLE_ hFile,
559 LPCVOID_ lpBuffer,
560 DWORD_ nNumberOfBytesToWrite,
561 LPDWORD_ lpNumberOfBytesWritten,
562 OVERLAPPED_* lpOverlapped)
7c673cae 563{
b32b8144 564 return ::WriteFile(hFile, lpBuffer, nNumberOfBytesToWrite, lpNumberOfBytesWritten, reinterpret_cast< ::_OVERLAPPED* >(lpOverlapped));
7c673cae 565}
b32b8144 566#endif // BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM
7c673cae 567
b32b8144
FG
568#if BOOST_WINAPI_PARTITION_APP_SYSTEM
569#if !defined( BOOST_NO_ANSI_APIS )
570using ::GetFileAttributesA;
571
572BOOST_FORCEINLINE DWORD_ get_file_attributes(LPCSTR_ lpFileName)
7c673cae 573{
b32b8144 574 return ::GetFileAttributesA(lpFileName);
7c673cae 575}
b32b8144
FG
576#endif
577using ::GetFileAttributesW;
7c673cae
FG
578
579BOOST_FORCEINLINE DWORD_ get_file_attributes(LPCWSTR_ lpFileName)
580{
581 return ::GetFileAttributesW(lpFileName);
582}
583
b32b8144 584BOOST_FORCEINLINE BOOL_ GetFileSizeEx(HANDLE_ hFile, LARGE_INTEGER_* lpFileSize)
7c673cae 585{
b32b8144 586 return ::GetFileSizeEx(hFile, reinterpret_cast< ::_LARGE_INTEGER* >(lpFileSize));
7c673cae
FG
587}
588
b32b8144
FG
589using ::SetFilePointer;
590#endif // BOOST_WINAPI_PARTITION_APP_SYSTEM
591
7c673cae
FG
592}
593}
594
20effc67
TL
595#include <boost/winapi/detail/footer.hpp>
596
b32b8144 597#endif // BOOST_WINAPI_FILE_MANAGEMENT_HPP_INCLUDED_