Fixed packing and layout of many system structures.
[wine] / include / shlwapi.h
1 #ifndef __WINE_SHLWAPI_H
2 #define __WINE_SHLWAPI_H
3
4 #include "objbase.h"
5
6 #ifdef __cplusplus
7 extern "C" {
8 #endif /* defined(__cplusplus) */
9
10
11 /* Mask returned by GetPathCharType */
12 #define GCT_INVALID     0x0000
13 #define GCT_LFNCHAR     0x0001
14 #define GCT_SHORTCHAR   0x0002
15 #define GCT_WILD        0x0004
16 #define GCT_SEPARATOR   0x0008
17
18
19 /* These are used by UrlGetPart routine */
20 typedef enum {
21     URL_PART_NONE    = 0,
22     URL_PART_SCHEME  = 1,
23     URL_PART_HOSTNAME,
24     URL_PART_USERNAME,
25     URL_PART_PASSWORD,
26     URL_PART_PORT,
27     URL_PART_QUERY,
28 } URL_PART;
29 #define URL_PARTFLAG_KEEPSCHEME  0x00000001
30
31 /* These are used by the UrlIs... routines */
32 typedef enum {
33     URLIS_URL,
34     URLIS_OPAQUE,
35     URLIS_NOHISTORY,
36     URLIS_FILEURL,
37     URLIS_APPLIABLE,
38     URLIS_DIRECTORY,
39     URLIS_HASQUERY,
40 } URLIS;
41
42 #define URL_WININET_COMPATIBILITY    0x80000000
43 #define URL_PLUGGABLE_PROTOCOL       0x40000000
44 #define URL_ESCAPE_UNSAFE            0x20000000
45 #define URL_UNESCAPE                 0x10000000
46
47 #define URL_DONT_SIMPLIFY            0x08000000
48 #define URL_NO_META                  URL_DONT_SIMPLIFY
49 #define URL_ESCAPE_SPACES_ONLY       0x04000000
50 #define URL_DONT_ESCAPE_EXTRA_INFO   0x02000000
51 #define URL_DONT_UNESCAPE_EXTRA_INFO URL_DONT_ESCAPE_EXTRA_INFO
52 #define URL_BROWSER_MODE             URL_DONT_ESCAPE_EXTRA_INFO
53
54 #define URL_INTERNAL_PATH            0x00800000  /* Will escape #'s in paths */
55 #define URL_UNESCAPE_HIGH_ANSI_ONLY  0x00400000
56 #define URL_CONVERT_IF_DOSPATH       0x00200000
57 #define URL_UNESCAPE_INPLACE         0x00100000
58
59 #define URL_FILE_USE_PATHURL         0x00010000
60
61 #define URL_ESCAPE_SEGMENT_ONLY      0x00002000
62 #define URL_ESCAPE_PERCENT           0x00001000
63
64 LPSTR  WINAPI PathAddBackslashA(LPSTR path);    
65 LPWSTR WINAPI PathAddBackslashW(LPWSTR path);   
66 #define PathAddBackslash WINELIB_NAME_AW(PathAddBackslash)
67
68 BOOL WINAPI PathAddExtensionA(LPSTR pszPath, LPCSTR pszExt);
69 BOOL WINAPI PathAddExtensionW(LPWSTR pszPath, LPCWSTR pszExt);
70 #define PathAddExtension WINELIB_NAME_AW(PathAddExtension)
71
72 BOOL WINAPI PathAppendA(LPSTR lpszPath1,LPCSTR lpszPath2);
73 BOOL WINAPI PathAppendW(LPWSTR lpszPath1,LPCWSTR lpszPath2);
74 #define PathAppend WINELIB_NAME_AW(PathAppend)
75
76 LPSTR WINAPI PathBuildRootA(LPSTR lpszPath, int drive);
77 LPWSTR WINAPI PathBuildRootW(LPWSTR lpszPath, int drive);
78 #define PathBuildRoot WINELIB_NAME_AW(PathBuiltRoot)
79
80 BOOL WINAPI PathCanonicalizeA(LPSTR lpszDst, LPCSTR lpszSrc);
81 BOOL WINAPI PathCanonicalizeW(LPWSTR lpszDst, LPCWSTR lpszSrc);
82 #define PathCanonicalize WINELIB_NAME_AW(PathCanonicalize)
83
84 LPSTR  WINAPI PathCombineA(LPSTR szDest, LPCSTR lpszDir, LPCSTR lpszFile);
85 LPWSTR WINAPI PathCombineW(LPWSTR szDest, LPCWSTR lpszDir, LPCWSTR lpszFile);
86 #define PathCombine WINELIB_NAME_AW(PathCombine)
87
88 BOOL WINAPI PathFileExistsA(LPCSTR lpszPath);
89 BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath);
90 #define PathFileExists WINELIB_NAME_AW(PathFileExists)
91
92 LPSTR WINAPI PathFindExtensionA(LPCSTR path);
93 LPWSTR WINAPI PathFindExtensionW(LPCWSTR path);
94 #define PathFindExtension WINELIB_NAME_AW(PathFindExtension)
95
96 LPSTR WINAPI PathFindFileNameA(LPCSTR pPath);
97 LPWSTR WINAPI PathFindFileNameW(LPCWSTR pPath);
98 #define PathFindFileName WINELIB_NAME_AW(PathFindFileName)
99
100 LPSTR WINAPI PathFindNextComponentA(LPCSTR pszPath);
101 LPWSTR WINAPI PathFindNextComponentW(LPCWSTR pszPath);
102 #define PathFindNextComponent WINELIB_NAME_AW(PathFindNextComponent)
103
104 BOOL WINAPI PathFindOnPathA(LPSTR sFile, LPCSTR sOtherDirs);
105 BOOL WINAPI PathFindOnPathW(LPWSTR sFile, LPCWSTR sOtherDirs);
106 #define PathFindOnPath WINELIB_NAME_AW(PathFindOnPath)
107
108 LPSTR WINAPI PathGetArgsA(LPCSTR lpszPath);
109 LPWSTR WINAPI PathGetArgsW(LPCWSTR lpszPath);
110 #define PathGetArgs WINELIB_NAME_AW(PathGetArgs)
111
112 int WINAPI PathGetDriveNumberA(LPCSTR lpszPath);
113 int WINAPI PathGetDriveNumberW(LPCWSTR lpszPath);
114 #define PathGetDriveNumber WINELIB_NAME_AW(PathGetDriveNumber)
115
116 BOOL WINAPI PathIsDirectoryA(LPCSTR lpszPath);
117 BOOL WINAPI PathIsDirectoryW(LPCWSTR lpszPath);
118 #define PathIsDirectory WINELIB_NAME_AW(PathIsDirectory)
119
120 BOOL WINAPI PathIsRelativeA(LPCSTR lpszPath);
121 BOOL WINAPI PathIsRelativeW(LPCWSTR lpszPath);
122 #define PathIsRelative WINELIB_NAME_AW(PathIsRelative)
123
124 BOOL WINAPI PathIsRootA(LPCSTR x);
125 BOOL WINAPI PathIsRootW(LPCWSTR x);
126 #define PathIsRoot WINELIB_NAME_AW(PathIsRoot)
127
128 BOOL WINAPI PathIsSameRootA(LPCSTR lpszPath1, LPCSTR lpszPath2);
129 BOOL WINAPI PathIsSameRootW(LPCWSTR lpszPath1, LPCWSTR lpszPath2);
130 #define PathIsSameRoot WINELIB_NAME_AW(PathIsSameRoot)
131
132 BOOL WINAPI PathIsUNCA(LPCSTR lpszPath);
133 BOOL WINAPI PathIsUNCW(LPCWSTR lpszPath);
134 #define PathIsUNC WINELIB_NAME_AW(PathIsUNC)
135
136 BOOL WINAPI PathIsURLA(LPCSTR pszPath);
137 BOOL WINAPI PathIsURLW(LPCWSTR pszPath);
138 #define PathIsURL WINELIB_NAME_AW(PathIsURL)
139
140 BOOL WINAPI PathMatchSpecA(LPCSTR lpszPath, LPCSTR lpszSpec);
141 BOOL WINAPI PathMatchSpecW(LPCWSTR lpszPath, LPCWSTR lpszSpec);
142 #define PathMatchSpec WINELIB_NAME_AW(PathMatchSpec)
143
144 int WINAPI PathParseIconLocationA(LPSTR lpszPath);
145 int WINAPI PathParseIconLocationW(LPWSTR lpszPath);
146 #define PathParseIconLocation WINELIB_NAME_AW(PathParseIconLocation)
147
148 LPSTR  WINAPI PathQuoteSpacesA(LPSTR path);     
149 LPWSTR WINAPI PathQuoteSpacesW(LPWSTR path);    
150 #define PathQuoteSpaces WINELIB_NAME_AW(PathQuoteSpaces)
151
152 void WINAPI PathRemoveArgsA(LPSTR lpszPath);
153 void WINAPI PathRemoveArgsW(LPWSTR lpszPath);
154 #define PathRemoveArgs WINELIB_NAME_AW(PathRemoveArgs)
155
156 LPSTR WINAPI PathRemoveBackslashA(LPSTR lpszPath);
157 LPWSTR WINAPI PathRemoveBackslashW(LPWSTR lpszPath);
158 #define PathRemoveBackslash WINELIB_NAME_AW(PathRemoveBackslash)
159
160 void WINAPI PathRemoveBlanksA(LPSTR lpszPath);
161 void WINAPI PathRemoveBlanksW(LPWSTR lpszPath);
162 #define PathRemoveBlanks WINELIB_NAME_AW(PathRemoveBlanks)
163
164 void WINAPI PathRemoveExtensionA(LPSTR lpszPath);
165 void WINAPI PathRemoveExtensionW(LPWSTR lpszPath);
166 #define PathRemoveExtension WINELIB_NAME_AW(PathRemoveExtension)
167
168 BOOL WINAPI PathRemoveFileSpecA(LPSTR lpszPath);
169 BOOL WINAPI PathRemoveFileSpecW(LPWSTR lpszPath);
170 #define PathRemoveFileSpec WINELIB_NAME_AW(PathRemoveFileSpec)
171
172 BOOL WINAPI PathSetDlgItemPathA(HWND hDlg, int id, LPCSTR pszPath);
173 BOOL WINAPI PathSetDlgItemPathW(HWND hDlg, int id, LPCWSTR pszPath);
174 #define PathSetDlgItemPath WINELIB_NAME_AW(PathSetDlgItemPath)
175
176 void WINAPI PathStripPathA(LPSTR lpszPath);
177 void WINAPI PathStripPathW(LPWSTR lpszPath);
178 #define PathStripPath WINELIB_NAME_AW(PathStripPath)
179
180 BOOL WINAPI PathStripToRootA(LPSTR pszPath);
181 BOOL WINAPI PathStripToRootW(LPWSTR pszPath);
182 #define PathStripToRoot WINELIB_NAME_AW(PathStripToRoot)
183
184 void WINAPI PathUnquoteSpacesA(LPSTR str);
185 void WINAPI PathUnquoteSpacesW(LPWSTR str);
186 #define PathUnquoteSpaces WINELIB_NAME_AW(PathUnquoteSpaces)
187
188
189 INT WINAPI StrCSpnA(LPCSTR lpStr, LPCSTR lpSet);
190 INT WINAPI StrCSpnW(LPCWSTR lpStr, LPCWSTR lpSet);
191 #define StrCSpn WINELIB_NAME_AW(StrCSpn)
192
193 INT WINAPI StrCSpnIA(LPCSTR lpStr, LPCSTR lpSet);
194 INT WINAPI StrCSpnIW(LPCWSTR lpStr, LPCWSTR lpSet);
195 #define StrCSpnI WINELIB_NAME_AW(StrCSpnI)
196
197 #define StrCatA lstrcatA
198 LPWSTR WINAPI StrCatW(LPWSTR front, LPCWSTR back);
199 #define StrCat WINELIB_NAME_AW(StrCat)
200
201 LPSTR WINAPI StrCatBuffA(LPSTR front, LPCSTR back, INT size);
202 LPWSTR WINAPI StrCatBuffW(LPWSTR front, LPCWSTR back, INT size);
203 #define StrCatBuff WINELIB_NAME_AW(StrCatBuff)
204
205 LPSTR WINAPI StrChrA(LPCSTR lpStart, WORD wMatch);
206 LPWSTR WINAPI StrChrW(LPCWSTR lpStart, WCHAR wMatch); 
207 #define StrChr WINELIB_NAME_AW(StrChr)
208
209 LPSTR WINAPI StrChrIA(LPCSTR lpStart, WORD wMatch);
210 LPWSTR WINAPI StrChrIW(LPCWSTR lpStart, WCHAR wMatch); 
211 #define StrChrI WINELIB_NAME_AW(StrChrI)
212
213 INT WINAPI StrCmpIW(LPCWSTR lpStr1, LPCWSTR lpStr2);
214
215 INT WINAPI StrCmpNA(LPCSTR lpStr1, LPCSTR lpStr2, INT nChar);
216 INT WINAPI StrCmpNW(LPCWSTR lpStr1, LPCWSTR lpStr2, INT nChar);
217 #define StrCmpN WINELIB_NAME_AW(StrCmpN)
218
219 INT WINAPI StrCmpNIA(LPCSTR lpStr1, LPCSTR lpStr2, INT nChar);
220 INT WINAPI StrCmpNIW(LPCWSTR lpStr1, LPCWSTR lpStr2, INT nChar);
221 #define StrCmpNI WINELIB_NAME_AW(StrCmpNI)
222
223 INT WINAPI StrCmpW(LPCWSTR lpStr1, LPCWSTR lpStr2);
224
225 LPWSTR WINAPI StrCpyW(LPWSTR lpStr1, LPCWSTR lpStr2);
226
227 LPWSTR WINAPI StrCpyNW(LPWSTR lpStr1, LPCWSTR lpStr2, int n);
228
229 LPSTR WINAPI StrDupA(LPCSTR lpSrc);
230 LPWSTR WINAPI StrDupW(LPCWSTR lpSrc);
231 #define StrDup WINELIB_NAME_AW(StrDup)
232
233 LPSTR WINAPI StrFormatByteSizeA ( DWORD dw, LPSTR pszBuf, UINT cchBuf );
234 LPWSTR WINAPI StrFormatByteSizeW ( DWORD dw, LPWSTR pszBuf, UINT cchBuf );
235 #define StrFormatByteSize WINELIB_NAME_AW(StrFormatByteSize)
236
237 LPSTR WINAPI StrNCatA(LPSTR front, LPCSTR back, INT cchMax);
238 LPWSTR WINAPI StrNCatW(LPWSTR front, LPCWSTR back, INT cchMax);
239 #define StrNCat WINELIB_NAME_AW(StrNCat)
240
241 LPSTR WINAPI StrRChrA(LPCSTR lpStart, LPCSTR lpEnd, WORD wMatch);
242 LPWSTR WINAPI StrRChrW(LPCWSTR lpStart, LPCWSTR lpEnd, WCHAR wMatch); 
243 #define StrRChr WINELIB_NAME_AW(StrRChr)
244
245 LPSTR WINAPI StrRChrIA(LPCSTR lpStart, LPCSTR lpEnd, WORD wMatch);
246 LPWSTR WINAPI StrRChrIW(LPCWSTR lpStart, LPCWSTR lpEnd, WCHAR wMatch); 
247 #define StrRChrI WINELIB_NAME_AW(StrRChrI)
248
249 LPSTR WINAPI StrStrA(LPCSTR lpFirst, LPCSTR lpSrch);
250 LPWSTR WINAPI StrStrW(LPCWSTR lpFirst, LPCWSTR lpSrch);
251 #define StrStr WINELIB_NAME_AW(StrStr)
252
253 LPSTR WINAPI StrStrIA(LPCSTR lpFirst, LPCSTR lpSrch);
254 LPWSTR WINAPI StrStrIW(LPCWSTR lpFirst, LPCWSTR lpSrch);
255 #define StrStrI WINELIB_NAME_AW(StrStrI)
256
257 int WINAPI StrToIntA(LPCSTR lpSrc);
258 int WINAPI StrToIntW(LPCWSTR lpSrc);
259 #define StrToInt WINELIB_NAME_AW(StrToInt)
260
261 int WINAPI StrToIntExA(LPCSTR lpSrc, DWORD dwFlags, LPINT piRet);
262 int WINAPI StrToIntExW(LPCWSTR lpSrc, DWORD dwFlags, LPINT piRet);
263 #define StrToIntEx WINELIB_NAME_AW(StrToIntEx)
264
265 BOOL WINAPI StrTrimA(LPSTR pszSrc, LPCSTR pszTrimChars);
266 BOOL WINAPI StrTrimW(LPWSTR pszSrc, LPCWSTR pszTrimChars);
267 #define StrTrim WINELIB_NAME_AW(StrTrim)
268
269 INT WINAPI wvnsprintfA(LPSTR lpOut, INT cchLimitIn, LPCSTR lpFmt, va_list arglist);
270 INT WINAPI wvnsprintfW(LPWSTR lpOut, INT cchLimitIn, LPCWSTR lpFmt, va_list arglist);
271 #define wvnsprintf WINELIB_NAME_AW(wvnsprintf)
272
273 INT WINAPIV wnsprintfA(LPSTR lpOut, INT cchLimitIn, LPCSTR lpFmt, ...);
274 INT WINAPIV wnsprintfW(LPWSTR lpOut, INT cchLimitIn, LPCWSTR lpFmt, ...);
275 #define wnsprintf WINELIB_NAME_AW(wnsprintf)
276
277
278 struct _STRRET;
279 struct _ITEMIDLIST;
280 HRESULT WINAPI StrRetToBufA(struct _STRRET *src, const struct _ITEMIDLIST *pidl, LPSTR dest, DWORD len);
281 HRESULT WINAPI StrRetToBufW(struct _STRRET *src, const struct _ITEMIDLIST *pidl, LPWSTR dest, DWORD len);
282 #define StrRetToBuf WINELIB_NAME_AW(StrRetToBuf)
283
284
285 /* Shell Registry interfaces */
286
287 HRESULT WINAPI SHQueryValueExA(HKEY hkey, LPSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData);
288 HRESULT WINAPI SHQueryValueExW(HKEY hkey, LPWSTR pszValue, LPDWORD pdwReserved, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData);
289 #define SHQueryValueEx WINELIB_NAME_AW(SHQueryValueEx)
290
291 HRESULT WINAPI SHDeleteKeyA(HKEY hKey, LPCSTR lpszSubKey);
292 HRESULT WINAPI SHDeleteKeyW(HKEY hkey, LPCWSTR pszSubKey);
293 #define  SHDeleteKey WINELIB_NAME_AW(SHDeleteKey)
294
295 HRESULT WINAPI SHDeleteValueA(HKEY hKey, LPCSTR lpszSubKey, LPCSTR pszValue);
296 HRESULT WINAPI SHDeleteValueW(HKEY hkey, LPCWSTR pszSubKey, LPCWSTR pszValue);
297 #define  SHDeleteValue WINELIB_NAME_AW(SHDeleteValue)
298
299 DWORD WINAPI SHDeleteEmptyKeyA(HKEY hKey, LPCSTR lpszSubKey);
300 DWORD WINAPI SHDeleteEmptyKeyW(HKEY hKey, LPCWSTR lpszSubKey);
301 #define  SHDeleteEmptyKey WINELIB_NAME_AW(SHDeleteEmptyKey)
302
303 DWORD WINAPI SHRegGetPathA(HKEY hKey, LPCSTR pcszSubKey,
304                            LPCSTR pcszValue, LPSTR pszPath, DWORD dwFlags);
305 DWORD WINAPI SHRegGetPathW(HKEY hKey, LPCWSTR pcszSubKey,
306                            LPCWSTR pcszValue, LPWSTR pszPath, DWORD dwFlags);
307 #define  SHRegGetPath WINELIB_NAME_AW(SHRegGetPath)
308
309 DWORD WINAPI SHGetValueA(HKEY hKey, LPCSTR pSubKey, LPCSTR pValue,
310                          LPDWORD pwType, LPVOID pvData, LPDWORD pbData);
311 DWORD WINAPI SHGetValueW(HKEY hKey, LPCWSTR pSubKey, LPCWSTR pValue,
312                          LPDWORD pwType, LPVOID pvData, LPDWORD pbData);
313 #define  SHGetValue WINELIB_NAME_AW(SHGetValue)
314
315 HRESULT WINAPI SHSetValueA(HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue,
316                          DWORD dwType, LPCVOID pvData, DWORD cbData);
317 HRESULT WINAPI SHSetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue,
318                          DWORD dwType, LPCVOID pvData, DWORD cbData);
319 #define  SHSetValue WINELIB_NAME_AW(SHSetValue)
320
321
322
323 typedef HANDLE HUSKEY;
324 typedef HUSKEY *PHUSKEY;
325
326 typedef enum {
327     SHREGDEL_DEFAULT = 0,   /* delete HKCU if found or HKLM if not */
328     SHREGDEL_HKCU = 0x01,   /* delete HKCU */
329     SHREGDEL_HKLM = 0x10,   /* delete HKLM */
330     SHREGDEL_BOTH = 0x11,   /* delete HKCU *and* HKLM */
331 } SHREGDEL_FLAGS; 
332
333 typedef enum {
334     SHREGENUM_DEFAULT = 0,  /* do HKCU or HKLM if not found */
335     SHREGENUM_HKCU = 0x01,  /* do HKCU only  */
336     SHREGENUM_HKLM = 0x10,  /* do HKLM only  */
337     SHREGENUM_BOTH = 0x11,  /* do both HKCU and HKLM without dups */
338 } SHREGENUM_FLAGS; 
339
340 #define SHREGSET_HKCU        0x00000001  /* Write to HKCU if empty */
341 #define SHREGSET_FORCE_HKCU  0x00000002  /* Write to HKCU          */
342 #define SHREGSET_HKLM        0x00000004  /* Write to HKLM if empty */
343 #define SHREGSET_FORCE_HKLM  0x00000008  /* Write to HKLM          */
344 #define SHREGSET_DEFAULT  (SHREGSET_FORCE_HKCU | SHREGSET_HKLM)
345
346 /* Shell User Key Registry interfaces */
347
348 LONG  WINAPI SHRegOpenUSKeyA(LPCSTR Path, REGSAM AccessType, 
349                              HUSKEY hRelativeUSKey, PHUSKEY phNewUSKey,
350                              BOOL fIgnoreHKCU);
351 LONG  WINAPI SHRegOpenUSKeyW(LPCWSTR Path, REGSAM AccessType, 
352                              HUSKEY hRelativeUSKey, PHUSKEY phNewUSKey,
353                              BOOL fIgnoreHKCU);
354 #define SHRegOpenUSKey WINELIB_NAME_AW(SHRegOpenUSKey)
355
356 LONG  WINAPI SHRegCloseUSKey(HUSKEY hUSKey);
357
358 LONG  WINAPI SHRegGetUSValueA(LPCSTR pszSubKey, LPCSTR pszValue, 
359                               LPDWORD pdwType, LPVOID pvData,
360                               LPDWORD pcbData, BOOL fIgnoreHKCU,
361                               LPVOID pvDefaultData, DWORD dwDefaultDataSize);
362 LONG  WINAPI SHRegGetUSValueW(LPCWSTR pszSubKey, LPCWSTR pszValue, 
363                               LPDWORD pdwType, LPVOID pvData,
364                               LPDWORD pcbData, BOOL fIgnoreHKCU, 
365                               LPVOID pvDefaultData, DWORD dwDefaultDataSize);
366 #define SHRegGetUSValue WINELIB_NAME_AW(SHRegGetUSValue)
367
368 BOOL  WINAPI SHRegGetBoolUSValueA(LPCSTR pszSubKey, LPCSTR pszValue, 
369                                   BOOL fIgnoreHKCU, BOOL fDefault);
370 BOOL  WINAPI SHRegGetBoolUSValueW(LPCWSTR pszSubKey, LPCWSTR pszValue, 
371                                   BOOL fIgnoreHKCU, BOOL fDefault);
372 #define SHRegGetBoolUSValue WINELIB_NAME_AW(SHRegGetBoolUSValue)
373
374 LONG  WINAPI SHRegQueryUSValueA(HUSKEY hUSKey, LPCSTR pszValue, 
375                                 LPDWORD pdwType, LPVOID pvData,
376                                 LPDWORD pcbData, BOOL fIgnoreHKCU, 
377                                 LPVOID pvDefaultData, DWORD dwDefaultDataSize);
378 LONG  WINAPI SHRegQueryUSValueW(HUSKEY hUSKey, LPCWSTR pszValue, 
379                                 LPDWORD pdwType, LPVOID pvData,
380                                 LPDWORD pcbData, BOOL fIgnoreHKCU, 
381                                 LPVOID pvDefaultData, DWORD dwDefaultDataSize);
382 #define SHRegQueryUSValue WINELIB_NAME_AW(SHRegQueryUSValue)
383
384 DWORD  WINAPI SHRegQueryInfoUSKeyA(HUSKEY hUSKey, LPDWORD pcSubKeys,
385                                   LPDWORD pcchMaxSubKeyLen,
386                                   LPDWORD pcValues,
387                                   LPDWORD pcchMaxValueNameLen,
388                                   SHREGENUM_FLAGS enumRegFlags);
389 DWORD  WINAPI SHRegQueryInfoUSKeyW(HUSKEY hUSKey, LPDWORD pcSubKeys,
390                                   LPDWORD pcchMaxSubKeyLen,
391                                   LPDWORD pcValues,
392                                   LPDWORD pcchMaxValueNameLen,
393                                   SHREGENUM_FLAGS enumRegFlags);
394 #define SHRegQueryInfoUSKey WINELIB_NAME_AW(SHRegQueryInfoUSKey)
395
396 LONG  WINAPI SHRegEnumUSKeyA(HUSKEY hUSKey, DWORD dwIndex, LPSTR pszName,
397                              LPDWORD pcchValueNameLen,
398                              SHREGENUM_FLAGS enumRegFlags);
399 LONG  WINAPI SHRegEnumUSKeyW(HUSKEY hUSKey, DWORD dwIndex, LPWSTR pszName,
400                              LPDWORD pcchValueNameLen,
401                              SHREGENUM_FLAGS enumRegFlags);
402 #define SHRegEnumUSKey WINELIB_NAME_AW(SHRegEnumUSKey)
403
404 LONG  WINAPI SHRegWriteUSValueA(HUSKEY hUSKey, LPCSTR pszValue, DWORD dwType,
405                                 LPVOID pvData, DWORD cbData, DWORD dwFlags);
406 LONG  WINAPI SHRegWriteUSValueW(HUSKEY hUSKey, LPCWSTR pszValue, DWORD dwType,
407                                 LPVOID pvData, DWORD cbData, DWORD dwFlags);
408 #define SHRegWriteUSValue WINELIB_NAME_AW(SHRegWriteUSValue)
409
410 /* Shell URL interfaces */
411
412 HRESULT WINAPI UrlCanonicalizeA(LPCSTR pszUrl, LPSTR pszCanonicalized, 
413                                 LPDWORD pcchCanonicalized, DWORD dwFlags);
414 HRESULT WINAPI UrlCanonicalizeW(LPCWSTR pszUrl, LPWSTR pszCanonicalized, 
415                                 LPDWORD pcchCanonicalized, DWORD dwFlags);
416 #define UrlCanonicalize WINELIB_NAME_AW(UrlCanoncalize)
417
418 HRESULT WINAPI UrlCombineA(LPCSTR pszBase, LPCSTR pszRelative,
419                            LPSTR pszCombined, LPDWORD pcchCombined,
420                            DWORD dwFlags);
421 HRESULT WINAPI UrlCombineW(LPCWSTR pszBase, LPCWSTR pszRelative,
422                            LPWSTR pszCombined, LPDWORD pcchCombined,
423                            DWORD dwFlags);
424 #define UrlCombine WINELIB_NAME_AW(UrlCombine)
425
426 HRESULT WINAPI UrlEscapeA(LPCSTR pszUrl, LPSTR pszEscaped, LPDWORD pcchEscaped,
427                           DWORD dwFlags);
428 HRESULT WINAPI UrlEscapeW(LPCWSTR pszUrl, LPWSTR pszEscaped,
429                           LPDWORD pcchEscaped, DWORD dwFlags);
430 #define UrlEscape WINELIB_NAME_AW(UrlEscape)
431
432 LPCSTR  WINAPI UrlGetLocationA(LPCSTR pszUrl);
433 LPCWSTR WINAPI UrlGetLocationW(LPCWSTR pszUrl);
434 #define UrlGetLocation WINELIB_NAME_AW(UrlGetLocation)
435
436 HRESULT WINAPI UrlGetPartA(LPCSTR pszIn, LPSTR pszOut, LPDWORD pcchOut, 
437                            DWORD dwPart, DWORD dwFlags);
438 HRESULT WINAPI UrlGetPartW(LPCWSTR pszIn, LPWSTR pszOut, LPDWORD pcchOut, 
439                            DWORD dwPart, DWORD dwFlags);
440 #define UrlGetPart WINELIB_NAME_AW(UrlGetPart)
441
442 BOOL    WINAPI HashData(const unsigned char *lpSrc, INT nSrcLen,
443                         unsigned char *lpDest, INT nDestLen);
444 HRESULT WINAPI UrlHashA(LPCSTR pszUrl, unsigned char *lpDest, INT nDestlen);
445 HRESULT WINAPI UrlHashW(LPCWSTR pszUrl, unsigned char *lpDest, INT nDestlen);
446 #define UrlHash WINELIB_NAME_AW(UrlHash)
447
448 BOOL    WINAPI UrlIsA(LPCSTR pszUrl, URLIS UrlIs);
449 BOOL    WINAPI UrlIsW(LPCWSTR pszUrl, URLIS UrlIs);
450 #define UrlIs WINELIB_NAME_AW(UrlIs)
451
452 BOOL    WINAPI UrlIsNoHistoryA(LPCSTR pszUrl);
453 BOOL    WINAPI UrlIsNoHistoryW(LPCWSTR pszUrl);
454 #define UrlIsNoHistory WINELIB_NAME_AW(UrlIsNoHistory)
455
456 BOOL    WINAPI UrlIsOpaqueA(LPCSTR pszUrl);
457 BOOL    WINAPI UrlIsOpaqueW(LPCWSTR pszUrl);
458 #define UrlIsOpaque WINELIB_NAME_AW(UrlIsOpaque)
459
460 HRESULT WINAPI UrlUnescapeA(LPCSTR pszUrl, LPSTR pszUnescaped,
461                             LPDWORD pcchUnescaped, DWORD dwFlags);
462 HRESULT WINAPI UrlUnescapeW(LPCWSTR pszUrl, LPWSTR pszUnescaped,
463                             LPDWORD pcchUnescaped, DWORD dwFlags);
464 #define UrlUnescape WINELIB_AW_NAME(UrlUnescape)
465
466 typedef struct _DllVersionInfo {
467     DWORD cbSize;
468     DWORD dwMajorVersion;
469     DWORD dwMinorVersion;
470     DWORD dwBuildNumber;
471     DWORD dwPlatformID;
472 } DLLVERSIONINFO;
473
474 #define DLLVER_PLATFORM_WINDOWS         0x00000001      // Windows 9x
475 #define DLLVER_PLATFORM_NT              0x00000002      // Windows NT
476
477 typedef HRESULT CALLBACK (*DLLGETVERSIONPROC)(DLLVERSIONINFO *);
478
479 #ifdef __cplusplus
480 } /* extern "C" */
481 #endif /* defined(__cplusplus) */
482
483 #endif /* __WINE_SHLWAPI_H */