FreeRDP
Loading...
Searching...
No Matches
winpr/include/winpr/file.h
1
21#ifndef WINPR_FILE_H
22#define WINPR_FILE_H
23
24#include <winpr/config.h>
25#include <winpr/winpr.h>
26#include <winpr/wtypes.h>
27
28#include <winpr/nt.h>
29#include <winpr/io.h>
30#include <winpr/error.h>
31#include <winpr/handle.h>
32
33#ifndef _WIN32
34
35#include <stdio.h>
36
37#ifndef MAX_PATH
38#define MAX_PATH 260
39#endif
40
41#define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1)
42#define INVALID_FILE_SIZE ((DWORD)0xFFFFFFFF)
43#define INVALID_SET_FILE_POINTER ((DWORD)-1)
44#define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
45
46#define FILE_ATTRIBUTE_READONLY 0x00000001u
47#define FILE_ATTRIBUTE_HIDDEN 0x00000002u
48#define FILE_ATTRIBUTE_SYSTEM 0x00000004u
49#define FILE_ATTRIBUTE_DIRECTORY 0x00000010u
50#define FILE_ATTRIBUTE_ARCHIVE 0x00000020u
51#define FILE_ATTRIBUTE_DEVICE 0x00000040u
52#define FILE_ATTRIBUTE_NORMAL 0x00000080u
53#define FILE_ATTRIBUTE_TEMPORARY 0x00000100u
54#define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200u
55#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400u
56#define FILE_ATTRIBUTE_COMPRESSED 0x00000800u
57#define FILE_ATTRIBUTE_OFFLINE 0x00001000u
58#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000u
59#define FILE_ATTRIBUTE_ENCRYPTED 0x00004000u
60#define FILE_ATTRIBUTE_VIRTUAL 0x00010000u
61
62#define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
63#define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
64#define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
65#define FILE_NOTIFY_CHANGE_SIZE 0x00000008
66#define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
67#define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
68#define FILE_NOTIFY_CHANGE_CREATION 0x00000040
69#define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
70
71#define FILE_ACTION_ADDED 0x00000001
72#define FILE_ACTION_REMOVED 0x00000002
73#define FILE_ACTION_MODIFIED 0x00000003
74#define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
75#define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
76
77#define FILE_CASE_SENSITIVE_SEARCH 0x00000001
78#define FILE_CASE_PRESERVED_NAMES 0x00000002
79#define FILE_UNICODE_ON_DISK 0x00000004
80#define FILE_PERSISTENT_ACLS 0x00000008
81#define FILE_FILE_COMPRESSION 0x00000010
82#define FILE_VOLUME_QUOTAS 0x00000020
83#define FILE_SUPPORTS_SPARSE_FILES 0x00000040
84#define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
85#define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
86#define FILE_VOLUME_IS_COMPRESSED 0x00008000
87#define FILE_SUPPORTS_OBJECT_IDS 0x00010000
88#define FILE_SUPPORTS_ENCRYPTION 0x00020000
89#define FILE_NAMED_STREAMS 0x00040000
90#define FILE_READ_ONLY_VOLUME 0x00080000
91#define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
92#define FILE_SUPPORTS_TRANSACTIONS 0x00200000
93#define FILE_SUPPORTS_HARD_LINKS 0x00400000
94#define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
95#define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
96#define FILE_SUPPORTS_USN_JOURNAL 0x02000000
97
98#define FILE_FLAG_WRITE_THROUGH 0x80000000
99#define FILE_FLAG_OVERLAPPED 0x40000000
100#define FILE_FLAG_NO_BUFFERING 0x20000000
101#define FILE_FLAG_RANDOM_ACCESS 0x10000000
102#define FILE_FLAG_SEQUENTIAL_SCAN 0x08000000
103#define FILE_FLAG_DELETE_ON_CLOSE 0x04000000
104#define FILE_FLAG_BACKUP_SEMANTICS 0x02000000
105#define FILE_FLAG_POSIX_SEMANTICS 0x01000000
106#define FILE_FLAG_OPEN_REPARSE_POINT 0x00200000
107#define FILE_FLAG_OPEN_NO_RECALL 0x00100000
108#define FILE_FLAG_FIRST_PIPE_INSTANCE 0x00080000
109
110#define PAGE_NOACCESS 0x00000001
111#define PAGE_READONLY 0x00000002
112#define PAGE_READWRITE 0x00000004
113#define PAGE_WRITECOPY 0x00000008
114#define PAGE_EXECUTE 0x00000010
115#define PAGE_EXECUTE_READ 0x00000020
116#define PAGE_EXECUTE_READWRITE 0x00000040
117#define PAGE_EXECUTE_WRITECOPY 0x00000080
118#define PAGE_GUARD 0x00000100
119#define PAGE_NOCACHE 0x00000200
120#define PAGE_WRITECOMBINE 0x00000400
121
122#define MEM_COMMIT 0x00001000
123#define MEM_RESERVE 0x00002000
124#define MEM_DECOMMIT 0x00004000
125#define MEM_RELEASE 0x00008000
126#define MEM_FREE 0x00010000
127#define MEM_PRIVATE 0x00020000
128#define MEM_MAPPED 0x00040000
129#define MEM_RESET 0x00080000
130#define MEM_TOP_DOWN 0x00100000
131#define MEM_WRITE_WATCH 0x00200000
132#define MEM_PHYSICAL 0x00400000
133#define MEM_4MB_PAGES 0x80000000
134#define MEM_IMAGE SEC_IMAGE
135
136#define SEC_NO_CHANGE 0x00400000
137#define SEC_FILE 0x00800000
138#define SEC_IMAGE 0x01000000
139#define SEC_VLM 0x02000000
140#define SEC_RESERVE 0x04000000
141#define SEC_COMMIT 0x08000000
142#define SEC_NOCACHE 0x10000000
143#define SEC_WRITECOMBINE 0x40000000
144#define SEC_LARGE_PAGES 0x80000000
145
146#define SECTION_MAP_EXECUTE_EXPLICIT 0x00020
147#define SECTION_EXTEND_SIZE 0x00010
148#define SECTION_MAP_READ 0x00004
149#define SECTION_MAP_WRITE 0x00002
150#define SECTION_QUERY 0x00001
151#define SECTION_MAP_EXECUTE 0x00008
152#define SECTION_ALL_ACCESS 0xF001F
153
154#define FILE_MAP_COPY SECTION_QUERY
155#define FILE_MAP_WRITE SECTION_MAP_WRITE
156#define FILE_MAP_READ SECTION_MAP_READ
157#define FILE_MAP_ALL_ACCESS SECTION_ALL_ACCESS
158#define FILE_MAP_EXECUTE SECTION_MAP_EXECUTE_EXPLICIT
159
160#define CREATE_NEW 1
161#define CREATE_ALWAYS 2
162#define OPEN_EXISTING 3
163#define OPEN_ALWAYS 4
164#define TRUNCATE_EXISTING 5
165
166#define FIND_FIRST_EX_CASE_SENSITIVE 0x1
167#define FIND_FIRST_EX_LARGE_FETCH 0x2
168
169#define STD_INPUT_HANDLE (DWORD) - 10
170#define STD_OUTPUT_HANDLE (DWORD) - 11
171#define STD_ERROR_HANDLE (DWORD) - 12
172
173#define FILE_BEGIN 0
174#define FILE_CURRENT 1
175#define FILE_END 2
176
177#define LOCKFILE_FAIL_IMMEDIATELY 1
178#define LOCKFILE_EXCLUSIVE_LOCK 2
179
180#define MOVEFILE_REPLACE_EXISTING 0x1
181#define MOVEFILE_COPY_ALLOWED 0x2
182#define MOVEFILE_DELAY_UNTIL_REBOOT 0x4
183#define MOVEFILE_WRITE_THROUGH 0x8
184#define MOVEFILE_CREATE_HARDLINK 0x10
185#define MOVEFILE_FAIL_IF_NOT_TRACKABLE 0x20
186
187typedef union
188{
189 PVOID64 Buffer;
190 ULONGLONG Alignment;
192
193typedef struct
194{
195 DWORD dwFileAttributes;
196 FILETIME ftCreationTime;
197 FILETIME ftLastAccessTime;
198 FILETIME ftLastWriteTime;
199 DWORD nFileSizeHigh;
200 DWORD nFileSizeLow;
201 DWORD dwReserved0;
202 DWORD dwReserved1;
203 CHAR cFileName[MAX_PATH];
204 CHAR cAlternateFileName[14];
206
207typedef struct
208{
209 DWORD dwFileAttributes;
210 FILETIME ftCreationTime;
211 FILETIME ftLastAccessTime;
212 FILETIME ftLastWriteTime;
213 DWORD nFileSizeHigh;
214 DWORD nFileSizeLow;
215 DWORD dwReserved0;
216 DWORD dwReserved1;
217 WCHAR cFileName[MAX_PATH];
218 WCHAR cAlternateFileName[14];
220
221typedef struct
222{
223 DWORD dwFileAttributes;
224 FILETIME ftCreationTime;
225 FILETIME ftLastAccessTime;
226 FILETIME ftLastWriteTime;
227 DWORD dwVolumeSerialNumber;
228 DWORD nFileSizeHigh;
229 DWORD nFileSizeLow;
230 DWORD nNumberOfLinks;
231 DWORD nFileIndexHigh;
232 DWORD nFileIndexLow;
234
235typedef enum
236{
237 FindExInfoStandard,
238 FindExInfoMaxInfoLevel
239} FINDEX_INFO_LEVELS;
240
241typedef enum
242{
243 FindExSearchNameMatch,
244 FindExSearchLimitToDirectories,
245 FindExSearchLimitToDevices,
246 FindExSearchMaxSearchOp
247} FINDEX_SEARCH_OPS;
248
249typedef VOID (*LPOVERLAPPED_COMPLETION_ROUTINE)(DWORD dwErrorCode, DWORD dwNumberOfBytesTransfered,
250 LPOVERLAPPED lpOverlapped);
251
252#ifdef UNICODE
253#define WIN32_FIND_DATA WIN32_FIND_DATAW
254#define PWIN32_FIND_DATA PWIN32_FIND_DATAW
255#define LPWIN32_FIND_DATA LPWIN32_FIND_DATAW
256#else
257#define WIN32_FIND_DATA WIN32_FIND_DATAA
258#define PWIN32_FIND_DATA PWIN32_FIND_DATAA
259#define LPWIN32_FIND_DATA LPWIN32_FIND_DATAA
260#endif
261
262#ifdef __cplusplus
263extern "C"
264{
265#endif
266
267#if !defined(WITHOUT_WINPR_3x_DEPRECATED)
268 WINPR_DEPRECATED_VAR("since 3.16.0, Use winpr_CreateFile",
269 WINPR_ATTR_MALLOC(CloseHandle, 1) WINPR_API HANDLE CreateFileA(
270 LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode,
271 LPSECURITY_ATTRIBUTES lpSecurityAttributes,
272 DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes,
273 HANDLE hTemplateFile));
274#endif /* WITHOUT_WINPR_3x_DEPRECATED */
275
276 WINPR_ATTR_MALLOC(CloseHandle, 1)
277 WINPR_API HANDLE CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode,
278 LPSECURITY_ATTRIBUTES lpSecurityAttributes,
279 DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes,
280 HANDLE hTemplateFile);
281
282#if !defined(WITHOUT_WINPR_3x_DEPRECATED)
283 WINPR_DEPRECATED_VAR("since 3.16.0, Use winpr_DeleteFile",
284 WINPR_ATTR_NODISCARD WINPR_API BOOL DeleteFileA(LPCSTR lpFileName));
285#endif /* WITHOUT_WINPR_3x_DEPRECATED */
286
287 WINPR_ATTR_NODISCARD
288 WINPR_API BOOL DeleteFileW(LPCWSTR lpFileName);
289
290 WINPR_ATTR_NODISCARD
291 WINPR_API BOOL ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead,
292 LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped);
293
294 WINPR_ATTR_NODISCARD
295 WINPR_API BOOL ReadFileEx(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead,
296 LPOVERLAPPED lpOverlapped,
297 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
298
299 WINPR_ATTR_NODISCARD
300 WINPR_API BOOL ReadFileScatter(HANDLE hFile, FILE_SEGMENT_ELEMENT aSegmentArray[],
301 DWORD nNumberOfBytesToRead, LPDWORD lpReserved,
302 LPOVERLAPPED lpOverlapped);
303
304 WINPR_ATTR_NODISCARD
305 WINPR_API BOOL WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite,
306 LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped);
307
308 WINPR_ATTR_NODISCARD
309 WINPR_API BOOL WriteFileEx(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite,
310 LPOVERLAPPED lpOverlapped,
311 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
312
313 WINPR_ATTR_NODISCARD
314 WINPR_API BOOL WriteFileGather(HANDLE hFile, FILE_SEGMENT_ELEMENT aSegmentArray[],
315 DWORD nNumberOfBytesToWrite, LPDWORD lpReserved,
316 LPOVERLAPPED lpOverlapped);
317
318 WINPR_ATTR_NODISCARD
319 WINPR_API BOOL FlushFileBuffers(HANDLE hFile);
320
321 typedef struct
322 {
323 DWORD dwFileAttributes;
324 FILETIME ftCreationTime;
325 FILETIME ftLastAccessTime;
326 FILETIME ftLastWriteTime;
327 DWORD nFileSizeHigh;
328 DWORD nFileSizeLow;
330
331 typedef enum
332 {
333 GetFileExInfoStandard,
334 GetFileExMaxInfoLevel
335 } GET_FILEEX_INFO_LEVELS;
336
337 WINPR_ATTR_NODISCARD
338 WINPR_API BOOL GetFileAttributesExA(LPCSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId,
339 LPVOID lpFileInformation);
340
341 WINPR_ATTR_NODISCARD
342 WINPR_API DWORD GetFileAttributesA(LPCSTR lpFileName);
343
344 WINPR_ATTR_NODISCARD
345 WINPR_API BOOL GetFileAttributesExW(LPCWSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId,
346 LPVOID lpFileInformation);
347
348 WINPR_ATTR_NODISCARD
349 WINPR_API DWORD GetFileAttributesW(LPCWSTR lpFileName);
350
351 WINPR_ATTR_NODISCARD
352 WINPR_API BOOL GetFileInformationByHandle(HANDLE hFile,
353 LPBY_HANDLE_FILE_INFORMATION lpFileInformation);
354
355 WINPR_ATTR_NODISCARD
356 WINPR_API BOOL SetFileAttributesA(LPCSTR lpFileName, DWORD dwFileAttributes);
357
358 WINPR_ATTR_NODISCARD
359 WINPR_API BOOL SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes);
360
361 WINPR_ATTR_NODISCARD
362 WINPR_API BOOL SetEndOfFile(HANDLE hFile);
363
364 WINPR_ATTR_NODISCARD
365 WINPR_API DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh);
366
367 WINPR_ATTR_NODISCARD
368 WINPR_API DWORD SetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh,
369 DWORD dwMoveMethod);
370
371 WINPR_ATTR_NODISCARD
372 WINPR_API BOOL SetFilePointerEx(HANDLE hFile, LARGE_INTEGER liDistanceToMove,
373 PLARGE_INTEGER lpNewFilePointer, DWORD dwMoveMethod);
374
375 WINPR_ATTR_NODISCARD
376 WINPR_API BOOL LockFile(HANDLE hFile, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh,
377 DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh);
378
379 WINPR_ATTR_NODISCARD
380 WINPR_API BOOL LockFileEx(HANDLE hFile, DWORD dwFlags, DWORD dwReserved,
381 DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh,
382 LPOVERLAPPED lpOverlapped);
383
384 WINPR_ATTR_NODISCARD
385 WINPR_API BOOL UnlockFile(HANDLE hFile, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh,
386 DWORD nNumberOfBytesToUnlockLow, DWORD nNumberOfBytesToUnlockHigh);
387
388 WINPR_ATTR_NODISCARD
389 WINPR_API BOOL UnlockFileEx(HANDLE hFile, DWORD dwReserved, DWORD nNumberOfBytesToUnlockLow,
390 DWORD nNumberOfBytesToUnlockHigh, LPOVERLAPPED lpOverlapped);
391
392 WINPR_ATTR_NODISCARD
393 WINPR_API BOOL SetFileTime(HANDLE hFile, const FILETIME* lpCreationTime,
394 const FILETIME* lpLastAccessTime, const FILETIME* lpLastWriteTime);
395
396 WINPR_API BOOL FindClose(HANDLE hFindFile);
397
398 WINPR_ATTR_MALLOC(FindClose, 1)
399 WINPR_API HANDLE FindFirstFileA(LPCSTR lpFileName, LPWIN32_FIND_DATAA lpFindFileData);
400
401 WINPR_ATTR_MALLOC(FindClose, 1)
402 WINPR_API HANDLE FindFirstFileW(LPCWSTR lpFileName, LPWIN32_FIND_DATAW lpFindFileData);
403
404 WINPR_ATTR_MALLOC(FindClose, 1)
405 WINPR_API HANDLE FindFirstFileExA(LPCSTR lpFileName, FINDEX_INFO_LEVELS fInfoLevelId,
406 LPVOID lpFindFileData, FINDEX_SEARCH_OPS fSearchOp,
407 LPVOID lpSearchFilter, DWORD dwAdditionalFlags);
408
409 WINPR_ATTR_MALLOC(FindClose, 1)
410 WINPR_API HANDLE FindFirstFileExW(LPCWSTR lpFileName, FINDEX_INFO_LEVELS fInfoLevelId,
411 LPVOID lpFindFileData, FINDEX_SEARCH_OPS fSearchOp,
412 LPVOID lpSearchFilter, DWORD dwAdditionalFlags);
413
414 WINPR_ATTR_NODISCARD
415 WINPR_API BOOL FindNextFileA(HANDLE hFindFile, LPWIN32_FIND_DATAA lpFindFileData);
416 WINPR_ATTR_NODISCARD
417 WINPR_API BOOL FindNextFileW(HANDLE hFindFile, LPWIN32_FIND_DATAW lpFindFileData);
418
419 WINPR_ATTR_NODISCARD
420 WINPR_API BOOL CreateDirectoryA(LPCSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes);
421
422 WINPR_ATTR_NODISCARD
423 WINPR_API BOOL CreateDirectoryW(LPCWSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes);
424
425#if !defined(WITHOUT_WINPR_3x_DEPRECATED)
426 WINPR_DEPRECATED_VAR("since 3.16.0, Use winpr_RemoveDirectory",
427 WINPR_ATTR_NODISCARD WINPR_API BOOL RemoveDirectoryA(LPCSTR lpPathName));
428#endif /* WITHOUT_WINPR_3x_DEPRECATED */
429
430 WINPR_ATTR_NODISCARD
431 WINPR_API BOOL RemoveDirectoryW(LPCWSTR lpPathName);
432
433 WINPR_ATTR_NODISCARD
434 WINPR_API HANDLE GetStdHandle(DWORD nStdHandle);
435
436 WINPR_ATTR_NODISCARD
437 WINPR_API BOOL SetStdHandle(DWORD nStdHandle, HANDLE hHandle);
438
439 WINPR_ATTR_NODISCARD
440 WINPR_API BOOL SetStdHandleEx(DWORD dwStdHandle, HANDLE hNewHandle, HANDLE* phOldHandle);
441
442 WINPR_ATTR_NODISCARD
443 WINPR_API BOOL GetDiskFreeSpaceA(LPCSTR lpRootPathName, LPDWORD lpSectorsPerCluster,
444 LPDWORD lpBytesPerSector, LPDWORD lpNumberOfFreeClusters,
445 LPDWORD lpTotalNumberOfClusters);
446
447 WINPR_ATTR_NODISCARD
448 WINPR_API BOOL GetDiskFreeSpaceW(LPCWSTR lpRootPathName, LPDWORD lpSectorsPerCluster,
449 LPDWORD lpBytesPerSector, LPDWORD lpNumberOfFreeClusters,
450 LPDWORD lpTotalNumberOfClusters);
451
452#if !defined(WITHOUT_WINPR_3x_DEPRECATED)
453 WINPR_DEPRECATED_VAR("since 3.16.0, Use winpr_MoveFileEx",
454 WINPR_ATTR_NODISCARD WINPR_API BOOL MoveFileExA(LPCSTR lpExistingFileName,
455 LPCSTR lpNewFileName,
456 DWORD dwFlags));
457#endif /* WITHOUT_WINPR_3x_DEPRECATED */
458
459 WINPR_ATTR_NODISCARD
460 WINPR_API BOOL MoveFileExW(LPCWSTR lpExistingFileName, LPCWSTR lpNewFileName, DWORD dwFlags);
461
462#if !defined(WITHOUT_WINPR_3x_DEPRECATED)
463 WINPR_DEPRECATED_VAR("since 3.16.0, Use winpr_MoveFile",
464 WINPR_ATTR_NODISCARD WINPR_API BOOL MoveFileA(LPCSTR lpExistingFileName,
465 LPCSTR lpNewFileName));
466#endif /* WITHOUT_WINPR_3x_DEPRECATED */
467
468 WINPR_ATTR_NODISCARD
469 WINPR_API BOOL MoveFileW(LPCWSTR lpExistingFileName, LPCWSTR lpNewFileName);
470
471#ifdef __cplusplus
472}
473#endif
474
475#ifdef UNICODE
476#define CreateFile CreateFileW
477#define DeleteFile DeleteFileW
478#define FindFirstFile FindFirstFileW
479#define FindFirstFileEx FindFirstFileExW
480#define FindNextFile FindNextFileW
481#define CreateDirectory CreateDirectoryW
482#define RemoveDirectory RemoveDirectoryW
483#define GetFileAttributesEx GetFileAttributesExW
484#define GetFileAttributes GetFileAttributesW
485#define SetFileAttributes SetFileAttributesW
486#define GetDiskFreeSpace GetDiskFreeSpaceW
487#define MoveFileEx MoveFileExW
488#define MoveFile MoveFileW
489#else
490#define CreateFile CreateFileA
491#define DeleteFile DeleteFileA
492#define FindFirstFile FindFirstFileA
493#define FindFirstFileEx FindFirstFileExA
494#define FindNextFile FindNextFileA
495#define CreateDirectory CreateDirectoryA
496#define RemoveDirectory RemoveDirectoryA
497#define GetFileAttributesEx GetFileAttributesExA
498#define GetFileAttributes GetFileAttributesA
499#define SetFileAttributes SetFileAttributesA
500#define GetDiskFreeSpace GetDiskFreeSpaceA
501#define MoveFileEx MoveFileExA
502#define MoveFile MoveFileA
503#endif
504
505/* Extra Functions */
506
507typedef BOOL (*pcIsFileHandled)(LPCSTR lpFileName);
508typedef HANDLE (*pcCreateFileA)(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode,
509 LPSECURITY_ATTRIBUTES lpSecurityAttributes,
510 DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes,
511 HANDLE hTemplateFile);
512
513typedef struct
514{
515 WINPR_ATTR_NODISCARD pcIsFileHandled IsHandled;
516 WINPR_ATTR_NODISCARD pcCreateFileA CreateFileA;
518
519#endif /* _WIN32 */
520
521#ifdef __cplusplus
522extern "C"
523{
524#endif
525 WINPR_ATTR_NODISCARD
526 WINPR_API BOOL ValidFileNameComponent(LPCWSTR lpFileName);
527
528#if defined(_UWP) || !defined(_WIN32)
529 WINPR_ATTR_NODISCARD
530 WINPR_API DWORD GetLogicalDriveStringsA(DWORD nBufferLength, LPSTR lpBuffer);
531
532 WINPR_ATTR_NODISCARD
533 WINPR_API DWORD GetLogicalDriveStringsW(DWORD nBufferLength, LPWSTR lpBuffer);
534#endif
535
536WINPR_ATTR_MALLOC(CloseHandle, 1)
537WINPR_ATTR_NODISCARD
538WINPR_API HANDLE winpr_CreateFile(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode,
539 LPSECURITY_ATTRIBUTES lpSecurityAttributes,
540 DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes,
541 HANDLE hTemplateFile);
542
543#ifdef __cplusplus
544}
545#endif
546
547#ifdef _UWP
548
549#ifdef __cplusplus
550extern "C"
551{
552#endif
553
554 WINPR_ATTR_NODISCARD
555 WINPR_API HANDLE CreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode,
556 LPSECURITY_ATTRIBUTES lpSecurityAttributes,
557 DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes,
558 HANDLE hTemplateFile);
559
560 WINPR_ATTR_NODISCARD
561 WINPR_API HANDLE CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode,
562 LPSECURITY_ATTRIBUTES lpSecurityAttributes,
563 DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes,
564 HANDLE hTemplateFile);
565
566 WINPR_ATTR_NODISCARD
567 WINPR_API DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh);
568
569 WINPR_ATTR_NODISCARD
570 WINPR_API DWORD SetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh,
571 DWORD dwMoveMethod);
572
573 WINPR_ATTR_NODISCARD
574 WINPR_API HANDLE FindFirstFileA(LPCSTR lpFileName, LPWIN32_FIND_DATAA lpFindFileData);
575 WINPR_ATTR_NODISCARD
576 WINPR_API HANDLE FindFirstFileW(LPCWSTR lpFileName, LPWIN32_FIND_DATAW lpFindFileData);
577
578 WINPR_ATTR_NODISCARD
579 WINPR_API DWORD GetFullPathNameA(LPCSTR lpFileName, DWORD nBufferLength, LPSTR lpBuffer,
580 LPSTR* lpFilePart);
581
582 WINPR_ATTR_NODISCARD
583 WINPR_API BOOL GetDiskFreeSpaceA(LPCSTR lpRootPathName, LPDWORD lpSectorsPerCluster,
584 LPDWORD lpBytesPerSector, LPDWORD lpNumberOfFreeClusters,
585 LPDWORD lpTotalNumberOfClusters);
586
587 WINPR_ATTR_NODISCARD
588 WINPR_API BOOL GetDiskFreeSpaceW(LPCWSTR lpRootPathName, LPDWORD lpSectorsPerCluster,
589 LPDWORD lpBytesPerSector, LPDWORD lpNumberOfFreeClusters,
590 LPDWORD lpTotalNumberOfClusters);
591
592 WINPR_ATTR_NODISCARD
593 WINPR_API BOOL PathIsDirectoryEmptyA(LPCSTR pszPath);
594
595 WINPR_ATTR_NODISCARD
596 WINPR_API UINT GetACP(void);
597
598#ifdef UNICODE
599#define CreateFile CreateFileW
600#define FindFirstFile FindFirstFileW
601#else
602#define CreateFile CreateFileA
603#define FindFirstFile FindFirstFileA
604#endif
605
606#ifdef __cplusplus
607}
608#endif
609
610#ifdef UNICODE
611#define FindFirstFile FindFirstFileW
612#else
613#define FindFirstFile FindFirstFileA
614#endif
615
616#endif
617
618#define WILDCARD_STAR 0x00000001
619#define WILDCARD_QM 0x00000002
620#define WILDCARD_DOS 0x00000100
621#define WILDCARD_DOS_STAR 0x00000110
622#define WILDCARD_DOS_QM 0x00000120
623#define WILDCARD_DOS_DOT 0x00000140
624
625#ifdef __cplusplus
626extern "C"
627{
628#endif
629
630 WINPR_ATTR_NODISCARD
631 WINPR_API BOOL FilePatternMatchA(LPCSTR lpFileName, LPCSTR lpPattern);
632
633 WINPR_ATTR_NODISCARD
634 WINPR_API LPSTR FilePatternFindNextWildcardA(LPCSTR lpPattern, DWORD* pFlags);
635
636 WINPR_API int UnixChangeFileMode(const char* filename, int flags);
637
638 WINPR_ATTR_NODISCARD
639 WINPR_API BOOL IsNamedPipeFileNameA(LPCSTR lpName);
640
641 WINPR_ATTR_MALLOC(free, 1)
642 WINPR_API char* GetNamedPipeNameWithoutPrefixA(LPCSTR lpName);
643
644 WINPR_ATTR_MALLOC(free, 1)
645 WINPR_API char* GetNamedPipeUnixDomainSocketBaseFilePathA(void);
646
647 WINPR_ATTR_MALLOC(free, 1)
648 WINPR_API char* GetNamedPipeUnixDomainSocketFilePathA(LPCSTR lpName);
649
650 WINPR_ATTR_NODISCARD
651 WINPR_API int GetNamePipeFileDescriptor(HANDLE hNamedPipe);
652
653 WINPR_ATTR_NODISCARD
654 WINPR_API HANDLE GetFileHandleForFileDescriptor(int fd);
655
656 WINPR_ATTR_MALLOC(fclose, 1)
657 WINPR_API FILE* winpr_fopen(const char* path, const char* mode);
658
659#ifdef __cplusplus
660}
661#endif
662
663#endif /* WINPR_FILE_H */