main
h 240 lines 6.8 KB
Raw
1 #pragma once
2 // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
3
4
5 #ifdef __cplusplus
6 extern "C" {
7 #endif
8
9 #define ReleaseFile(h) if (INVALID_HANDLE_VALUE != h) { ::CloseHandle(h); h = INVALID_HANDLE_VALUE; }
10 #define ReleaseFileHandle(h) if (INVALID_HANDLE_VALUE != h) { ::CloseHandle(h); h = INVALID_HANDLE_VALUE; }
11 #define ReleaseFileFindHandle(h) if (INVALID_HANDLE_VALUE != h) { ::FindClose(h); h = INVALID_HANDLE_VALUE; }
12
13 #define FILEMAKEVERSION(major, minor, build, revision) static_cast<DWORD64>((static_cast<DWORD64>(major & 0xFFFF) << 48) \
14 | (static_cast<DWORD64>(minor & 0xFFFF) << 32) \
15 | (static_cast<DWORD64>(build & 0xFFFF) << 16) \
16 | (static_cast<DWORD64>(revision & 0xFFFF)))
17
18 typedef enum FILE_ARCHITECTURE
19 {
20 FILE_ARCHITECTURE_UNKNOWN,
21 FILE_ARCHITECTURE_X86,
22 FILE_ARCHITECTURE_X64,
23 FILE_ARCHITECTURE_IA64,
24 } FILE_ARCHITECTURE;
25
26 typedef enum FILE_ENCODING
27 {
28 FILE_ENCODING_UNSPECIFIED = 0,
29 // TODO: distinguish between non-BOM utf-8 and ANSI in the future?
30 FILE_ENCODING_UTF8,
31 FILE_ENCODING_UTF8_WITH_BOM,
32 FILE_ENCODING_UTF16,
33 FILE_ENCODING_UTF16_WITH_BOM,
34 } FILE_ENCODING;
35
36
37 HRESULT DAPI FileStripExtension(
38 __in_z LPCWSTR wzFileName,
39 __out LPWSTR *ppwzFileNameNoExtension
40 );
41 HRESULT DAPI FileChangeExtension(
42 __in_z LPCWSTR wzFileName,
43 __in_z LPCWSTR wzNewExtension,
44 __out LPWSTR *ppwzFileNameNewExtension
45 );
46 HRESULT DAPI FileAddSuffixToBaseName(
47 __in_z LPCWSTR wzFileName,
48 __in_z LPCWSTR wzSuffix,
49 __out_z LPWSTR* psczNewFileName
50 );
51 HRESULT DAPI FileVersionFromString(
52 __in_z LPCWSTR wzVersion,
53 __out DWORD *pdwVerMajor,
54 __out DWORD* pdwVerMinor
55 );
56 HRESULT DAPI FileVersionFromStringEx(
57 __in_z LPCWSTR wzVersion,
58 __in SIZE_T cchVersion,
59 __out DWORD64* pqwVersion
60 );
61 HRESULT DAPI FileVersionToStringEx(
62 __in DWORD64 qwVersion,
63 __out LPWSTR* psczVersion
64 );
65 HRESULT DAPI FileSetPointer(
66 __in HANDLE hFile,
67 __in DWORD64 dw64Move,
68 __out_opt DWORD64* pdw64NewPosition,
69 __in DWORD dwMoveMethod
70 );
71 HRESULT DAPI FileSize(
72 __in_z LPCWSTR pwzFileName,
73 __out LONGLONG* pllSize
74 );
75 HRESULT DAPI FileSizeByHandle(
76 __in HANDLE hFile,
77 __out LONGLONG* pllSize
78 );
79 BOOL DAPI FileExistsEx(
80 __in_z LPCWSTR wzPath,
81 __out_opt DWORD *pdwAttributes
82 );
83 BOOL DAPI FileExistsAfterRestart(
84 __in_z LPCWSTR wzPath,
85 __out_opt DWORD *pdwAttributes
86 );
87 HRESULT DAPI FileRemoveFromPendingRename(
88 __in_z LPCWSTR wzPath
89 );
90 HRESULT DAPI FileRead(
91 __deref_out_bcount_full(*pcbDest) LPBYTE* ppbDest,
92 __out SIZE_T* pcbDest,
93 __in_z LPCWSTR wzSrcPath
94 );
95 HRESULT DAPI FileReadEx(
96 __deref_out_bcount_full(*pcbDest) LPBYTE* ppbDest,
97 __out SIZE_T* pcbDest,
98 __in_z LPCWSTR wzSrcPath,
99 __in DWORD dwShareMode
100 );
101 HRESULT DAPI FileReadUntil(
102 __deref_out_bcount_full(*pcbDest) LPBYTE* ppbDest,
103 __out_range(<=, cbMaxRead) SIZE_T* pcbDest,
104 __in_z LPCWSTR wzSrcPath,
105 __in DWORD cbMaxRead
106 );
107 HRESULT DAPI FileReadPartial(
108 __deref_out_bcount_full(*pcbDest) LPBYTE* ppbDest,
109 __out_range(<=, cbMaxRead) SIZE_T* pcbDest,
110 __in_z LPCWSTR wzSrcPath,
111 __in BOOL fSeek,
112 __in DWORD cbStartPosition,
113 __in DWORD cbMaxRead,
114 __in BOOL fPartialOK
115 );
116 HRESULT DAPI FileReadPartialEx(
117 __deref_inout_bcount_full(*pcbDest) LPBYTE* ppbDest,
118 __out_range(<=, cbMaxRead) SIZE_T* pcbDest,
119 __in_z LPCWSTR wzSrcPath,
120 __in BOOL fSeek,
121 __in DWORD cbStartPosition,
122 __in DWORD cbMaxRead,
123 __in BOOL fPartialOK,
124 __in DWORD dwShareMode
125 );
126 HRESULT DAPI FileReadHandle(
127 __in HANDLE hFile,
128 __in_bcount(cbDest) LPBYTE pbDest,
129 __in SIZE_T cbDest
130 );
131 HRESULT DAPI FileWrite(
132 __in_z LPCWSTR pwzFileName,
133 __in DWORD dwFlagsAndAttributes,
134 __in_bcount_opt(cbData) LPCBYTE pbData,
135 __in SIZE_T cbData,
136 __out_opt HANDLE* pHandle
137 );
138 HRESULT DAPI FileWriteHandle(
139 __in HANDLE hFile,
140 __in_bcount_opt(cbData) LPCBYTE pbData,
141 __in SIZE_T cbData
142 );
143 HRESULT DAPI FileCopyUsingHandles(
144 __in HANDLE hSource,
145 __in HANDLE hTarget,
146 __in DWORD64 cbCopy,
147 __out_opt DWORD64* pcbCopied
148 );
149 HRESULT DAPI FileCopyUsingHandlesWithProgress(
150 __in HANDLE hSource,
151 __in HANDLE hTarget,
152 __in DWORD64 cbCopy,
153 __in_opt LPPROGRESS_ROUTINE lpProgressRoutine,
154 __in_opt LPVOID lpData
155 );
156 HRESULT DAPI FileEnsureCopy(
157 __in_z LPCWSTR wzSource,
158 __in_z LPCWSTR wzTarget,
159 __in BOOL fOverwrite
160 );
161 HRESULT DAPI FileEnsureCopyWithRetry(
162 __in LPCWSTR wzSource,
163 __in LPCWSTR wzTarget,
164 __in BOOL fOverwrite,
165 __in DWORD cRetry,
166 __in DWORD dwWaitMilliseconds
167 );
168 HRESULT DAPI FileEnsureMove(
169 __in_z LPCWSTR wzSource,
170 __in_z LPCWSTR wzTarget,
171 __in BOOL fOverwrite,
172 __in BOOL fAllowCopy
173 );
174 HRESULT DAPI FileEnsureMoveWithRetry(
175 __in LPCWSTR wzSource,
176 __in LPCWSTR wzTarget,
177 __in BOOL fOverwrite,
178 __in BOOL fAllowCopy,
179 __in DWORD cRetry,
180 __in DWORD dwWaitMilliseconds
181 );
182 HRESULT DAPI FileCreateTemp(
183 __in_z LPCWSTR wzPrefix,
184 __in_z LPCWSTR wzExtension,
185 __deref_opt_out_z LPWSTR* ppwzTempFile,
186 __out_opt HANDLE* phTempFile
187 );
188 HRESULT DAPI FileCreateTempW(
189 __in_z LPCWSTR wzPrefix,
190 __in_z LPCWSTR wzExtension,
191 __deref_opt_out_z LPWSTR* ppwzTempFile,
192 __out_opt HANDLE* phTempFile
193 );
194 HRESULT DAPI FileVersion(
195 __in_z LPCWSTR wzFilename,
196 __out DWORD *pdwVerMajor,
197 __out DWORD* pdwVerMinor
198 );
199 HRESULT DAPI FileIsSame(
200 __in_z LPCWSTR wzFile1,
201 __in_z LPCWSTR wzFile2,
202 __out LPBOOL lpfSameFile
203 );
204 HRESULT DAPI FileEnsureDelete(
205 __in_z LPCWSTR wzFile
206 );
207 HRESULT DAPI FileGetTime(
208 __in_z LPCWSTR wzFile,
209 __out_opt LPFILETIME lpCreationTime,
210 __out_opt LPFILETIME lpLastAccessTime,
211 __out_opt LPFILETIME lpLastWriteTime
212 );
213 HRESULT DAPI FileSetTime(
214 __in_z LPCWSTR wzFile,
215 __in_opt const FILETIME *lpCreationTime,
216 __in_opt const FILETIME *lpLastAccessTime,
217 __in_opt const FILETIME *lpLastWriteTime
218 );
219 HRESULT DAPI FileResetTime(
220 __in_z LPCWSTR wzFile
221 );
222 HRESULT DAPI FileExecutableArchitecture(
223 __in_z LPCWSTR wzFile,
224 __out FILE_ARCHITECTURE *pArchitecture
225 );
226 HRESULT DAPI FileToString(
227 __in_z LPCWSTR wzFile,
228 __out LPWSTR *psczString,
229 __out_opt FILE_ENCODING *pfeEncoding
230 );
231 HRESULT DAPI FileFromString(
232 __in_z LPCWSTR wzFile,
233 __in DWORD dwFlagsAndAttributes,
234 __in_z LPCWSTR sczString,
235 __in FILE_ENCODING feEncoding
236 );
237
238 #ifdef __cplusplus
239 }
240 #endif