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