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