Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4413 lines
187 KiB

  1. /*****************************************************************************\
  2. * *
  3. * shlwapi.h - Interface for the Windows light-weight utility APIs *
  4. * *
  5. * Version 1.0 *
  6. * *
  7. * Copyright (c) Microsoft Corporation. All rights reserved. *
  8. * *
  9. \*****************************************************************************/
  10. #ifndef _INC_SHLWAPIP
  11. #define _INC_SHLWAPIP
  12. #ifndef NOSHLWAPI
  13. #include <objbase.h>
  14. #include <shtypes.h>
  15. #ifdef _WIN32
  16. #include <pshpack8.h>
  17. #endif
  18. #ifdef __cplusplus
  19. extern "C" {
  20. #endif
  21. //
  22. // Users of this header may define any number of these constants to avoid
  23. // the definitions of each functional group.
  24. //
  25. // NO_SHLWAPI_STRFCNS String functions
  26. // NO_SHLWAPI_PATH Path functions
  27. // NO_SHLWAPI_REG Registry functions
  28. // NO_SHLWAPI_UALSTR Unaligned string functions
  29. // NO_SHLWAPI_STREAM Stream functions
  30. // NO_SHLWAPI_HTTP HTTP helper routines
  31. // NO_SHLWAPI_INTERNAL Other random internal things
  32. // NO_SHLWAPI_GDI GDI helper functions
  33. // NO_SHLWAPI_UNITHUNK Unicode wrapper functions
  34. // NO_SHLWAPI_TPS Thread Pool Services
  35. // NO_SHLWAPI_MLUI Multi Language UI functions
  36. #ifndef NO_SHLWAPI_STRFCNS
  37. //
  38. //=============== String Routines ===================================
  39. //
  40. LWSTDAPI_(LPSTR) StrCpyNXA(LPSTR psz1, LPCSTR psz2, int cchMax);
  41. LWSTDAPI_(LPWSTR) StrCpyNXW(LPWSTR psz1, LPCWSTR psz2, int cchMax);
  42. #define ORD_SHLOADREGUISTRINGA 438
  43. #define ORD_SHLOADREGUISTRINGW 439
  44. LWSTDAPI SHLoadRegUIStringA(HKEY hkey, LPCSTR pszValue, LPSTR pszOutBuf, UINT cchOutBuf);
  45. LWSTDAPI SHLoadRegUIStringW(HKEY hkey, LPCWSTR pszValue, LPWSTR pszOutBuf, UINT cchOutBuf);
  46. #ifdef UNICODE
  47. #define SHLoadRegUIString SHLoadRegUIStringW
  48. #else
  49. #define SHLoadRegUIString SHLoadRegUIStringA
  50. #endif // !UNICODE
  51. LWSTDAPI_(BOOL) IsCharCntrlW(WCHAR wch);
  52. LWSTDAPI_(BOOL) IsCharDigitW(WCHAR wch);
  53. LWSTDAPI_(BOOL) IsCharXDigitW(WCHAR wch);
  54. LWSTDAPI_(BOOL) IsCharSpaceW(WCHAR wch);
  55. LWSTDAPI_(BOOL) IsCharBlankW(WCHAR wch);
  56. LWSTDAPI_(BOOL) IsCharPunctW(WCHAR wch);
  57. LWSTDAPI_(BOOL) GetStringType3ExW( LPCWSTR, int, LPWORD );
  58. // StrCmp*C* - Compare strings using C runtime collation rules.
  59. // These functions are faster than the StrCmp family of functions
  60. // above and can be used when the character set of the strings is
  61. // known to be limited to seven ASCII character set.
  62. LWSTDAPI_(int) StrCmpNCA(LPCSTR lpStr1, LPCSTR lpStr2, int nChar);
  63. LWSTDAPI_(int) StrCmpNCW(LPCWSTR lpStr1, LPCWSTR lpStr2, int nChar);
  64. LWSTDAPI_(int) StrCmpNICA(LPCSTR lpStr1, LPCSTR lpStr2, int nChar);
  65. LWSTDAPI_(int) StrCmpNICW(LPCWSTR lpStr1, LPCWSTR lpStr2, int nChar);
  66. LWSTDAPI_(int) StrCmpCA(LPCSTR lpStr1, LPCSTR lpStr2);
  67. LWSTDAPI_(int) StrCmpCW(LPCWSTR lpStr1, LPCWSTR lpStr2);
  68. LWSTDAPI_(int) StrCmpICA(LPCSTR lpStr1, LPCSTR lpStr2);
  69. LWSTDAPI_(int) StrCmpICW(LPCWSTR lpStr1, LPCWSTR lpStr2);
  70. // This is a true-Unicode version of CompareString. It only supports
  71. // STRING_SORT, however. After better test coverage, it shall replace
  72. // the CompareString Unicode wrapper itself. In the mean time, we only
  73. // call this from the find dialog/OM method of Trident.
  74. LWSTDAPI_(int) CompareStringAltW( LCID lcid, DWORD dwFlags, LPCWSTR lpchA, int cchA, LPCWSTR lpchB, int cchB );
  75. //
  76. // Macros for IsCharAlpha, IsCharAlphaNumeric, IsCharLower, IsCharUpper
  77. // are in winuser.h
  78. //
  79. //
  80. #define IsCharCntrl IsCharCntrlW
  81. #define IsCharDigit IsCharDigitW
  82. #define IsCharXDigit IsCharXDigitW
  83. #define IsCharSpace IsCharSpaceW
  84. #define IsCharBlank IsCharBlankW
  85. #define IsCharPunct IsCharPunctW
  86. #define GetStringType3Ex GetStringType3ExW
  87. #ifdef UNICODE
  88. #define StrCmpNC StrCmpNCW
  89. #define StrCmpNIC StrCmpNICW
  90. #define StrCmpC StrCmpCW
  91. #define StrCmpIC StrCmpICW
  92. #define StrCpyNX StrCpyNXW
  93. #else
  94. #define StrCmpNC StrCmpNCA
  95. #define StrCmpNIC StrCmpNICA
  96. #define StrCmpC StrCmpCA
  97. #define StrCmpIC StrCmpICA
  98. #define StrCpyNX StrCpyNXA
  99. #endif
  100. #endif // NO_SHLWAPI_STRFCNS
  101. #ifndef NO_SHLWAPI_PATH
  102. //
  103. //=============== Path Routines ===================================
  104. //
  105. #if (_WIN32_IE >= 0x0600)
  106. LWSTDAPI SHEvaluateSystemCommandTemplate(PCWSTR pszCmdTemplate, PWSTR *ppszApplication, PWSTR *ppszCommandLine, PWSTR *ppszParameters);
  107. //
  108. // SHEvaluateSystemCommandTemplate()
  109. // * enforces stricter validation before calling CreateProcess(). may also be
  110. // used before calling ShellExecute().
  111. // * should be used when caller wants the deterministic behavior from a command template
  112. // regardless of execution context. it ignores the current process state,
  113. // such as the %PATH%, GetCurrentDirectory(), and parent process directory.
  114. // * should be used when the command is hardcoded.
  115. // * is used by ShellExecute() when handling file associations from HKCR.
  116. // * reduces CreateProcess() commandline exploits
  117. // * is not designed for processing user input, and may generate unexpected failures.
  118. //
  119. // INPUT:
  120. // pszCmdTemplate = command line, this may or may not include parameters.
  121. // if the parameters are substitution parameters then this API
  122. // should be called before parameters have been replaced.
  123. // (check the examples below to see sample supported inputs.)
  124. //
  125. // OUTPUT on return: S_OK
  126. // ppszApplication = verified path to the Application. this should be passed as the lpApplication
  127. // parameter to CreateProcess() or the lpFile parameter to ShellExecute().
  128. // (allocated using CoTaskMemAlloc(), free with CoTaskMemFree())
  129. //
  130. // ppszCommandLine = OPTIONAL - use if planning to call CreateProcess().
  131. // resulting command line template. parameters should be replaced based on this template,
  132. // and then passed as the lpCommandLine parameter to CreateProcess().
  133. // it is guaranteed to be of a form that PathGetArgs() will always succeed correctly.
  134. // (allocated using CoTaskMemAlloc(), free with CoTaskMemFree())
  135. //
  136. // ppszParameters = OPTIONAL - use if planning to call ShellExecute().
  137. // resulting parameter list template. parameters should be replaced based on this template,
  138. // and then passed as the lpParameters parameter to ShellExecute().
  139. // NOTE: identical to PathGetArgs(*ppszCommandLine).
  140. // (allocated using CoTaskMemAlloc(), free with CoTaskMemFree())
  141. //
  142. // OUTPUT on return: FAILED()
  143. // all outputs will be NULL'ed on failure
  144. //
  145. // NOTES: the parsing logic to determine a valid Application path is non-trivial, although
  146. // the extension is not required and if missing will be completed
  147. // in the following standard order: { .PIF, .COM, .EXE, .BAT, .CMD }
  148. //
  149. // Relative Paths are System Paths - if the first token has no path qualifiers
  150. // then the token is first checked to see if a key of the same name has
  151. // been installed under HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths.
  152. // if the key or default value does not exist, it is assumed to be a child
  153. // of the system directories. the following directories will be searched
  154. // in order for the relative token: { CSIDL_SYSTEM, CSIDL_WINDOWS }
  155. //
  156. // Prefer Quoted Paths - if the first token in pszCmdTemplate is quoted and appears
  157. // to be an absolute path then the token is the only possible result.
  158. //
  159. // Limit Forms of Unquoted Paths - if the first token is unquoted and appears
  160. // to be an absolute path, then it is subject to more stringent limitations.
  161. // if the token is a substring of CSIDL_PROGRAM_FILES or does not
  162. // exist on the file system, then SHEvaluateSystemCommandTemplate() will
  163. // attempt to complete using a token delimited by the first space of the
  164. // last valid path segment (usually the file name). if this token also doesnt exist,
  165. // then the next space will be used, etc.
  166. //
  167. // USAGE: used before calling into CreateProcess() or ShellExecute(), callers
  168. // would typically look like the following:
  169. /* #if 0 // SAMPLE CODE
  170. HRESULT MyCreateProcessPriv(PCWSTR pszCmd)
  171. {
  172. PWSTR pszApp;
  173. PWSTR pszCmdLine;
  174. HRESULT hr = SHEvaluateSystemCommandTemplate(pszCmd, &pszApp, &pszCmdLine);
  175. if (SUCCEEDED(hr))
  176. {
  177. // if this was a real template, maybe some kind of wnsprintf() first?
  178. PROCESS_INFORMATION pi;
  179. STARTUPINFO si = {0};
  180. si.cb = sizeof(startup);
  181. si.wShowWindow = SW_SHOWNORMAL;
  182. if (CreateProcess(pszApp, pszCmdLine, NULL, NULL, FALSE,
  183. CREATE_DEFAULT_ERROR_MODE, NULL, NULL, &si, &pi))
  184. {
  185. // we are good
  186. ASSERT(hr == S_OK);
  187. CloseHandle(pi.hProcess);
  188. CloseHandle(pi.hThread);
  189. }
  190. else
  191. {
  192. hr = HRESULT_FROM_WIN32(GetLastError());
  193. }
  194. CoTaskMemFree(pszApp);
  195. CoTaskMemFree(pszCmdLine);
  196. }
  197. return hr;
  198. }
  199. HRESULT MyShellExec(PCWSTR pszCmd)
  200. {
  201. PWSTR pszApp;
  202. PWSTR pszCmdLine;
  203. HRESULT hr = SHEvaluateSystemCommandTemplate(pszCmd, &pszApp, &pszCmdLine);
  204. if (SUCCEEDED(hr))
  205. {
  206. // if this was a real template, maybe some kind of wnsprintf() first?
  207. SHELLEXECUTEINFOW sei = {
  208. sizeof(sei), // cbSize;
  209. 0, // fMask
  210. NULL, // hwnd
  211. NULL, // lpVerb
  212. pszApp, // lpFile
  213. PathGetArgs(pszCmdLine), // lpParameters
  214. NULL, // lpDirectory
  215. SW_SHOWNORMAL, // nShow
  216. 0, // hInstApp
  217. NULL, // lpIDList
  218. NULL, // lpClass
  219. NULL, // hkeyClass
  220. 0, // dwHotKey
  221. NULL, // hIcon
  222. NULL // hProcess
  223. };
  224. if (ShellExecuteEx(&sei))
  225. {
  226. // we are good
  227. ASSERT(hr == S_OK);
  228. }
  229. else
  230. {
  231. hr = HRESULT_FROM_WIN32(GetLastError());
  232. }
  233. CoTaskMemFree(pszApp);
  234. CoTaskMemFree(pszCmdLine);
  235. }
  236. return hr;
  237. }
  238. #endif // 0 // SAMPLE CODE */
  239. // EXAMPLE: Each example will show an input parameter and the results returned by
  240. // SHEvaluateSystemCommandTemplate(). Also included is the alternate result
  241. // of what CreateProcess() would have created if pszCmdTemplate were
  242. // passed directly as lpCommandLine and lpApplication were NULL.
  243. // (results marked with an asterisk (*) indicate differences.)
  244. //
  245. // Assume for the examples that the following paths and values exist:
  246. //
  247. // SHGetFolderPath() values:
  248. // CSIDL_SYSTEM = C:\windows\system32
  249. // CSIDL_WINDOWS = C:\windows
  250. // CSIDL_PROGRAM_FILES = C:\Program Files
  251. //
  252. // Environment settings
  253. // GetModuleFileName(NULL) = C:\Program Files\Example\sample.exe
  254. // GetCurrentDirectory() = \\server\share\foo
  255. // HKLM\...\App Paths\pbrush.exe = C:\windows\system32\mspaint.exe
  256. // HKLM\...\App Paths\mycl.exe = C:\Program Files\Compilers\mycl.exe
  257. // PATH = c:\windows\system32;C:\windows;c:\;C:\Program Files\Compilers\
  258. //
  259. // Valid Application paths:
  260. // C:\Program Files\Internet Explorer\iexplore.exe
  261. // C:\windows\system32\rundll32.exe
  262. // C:\windows\system32\notepad.exe
  263. // C:\windows\notepad.exe
  264. // C:\Program Files\Example\sample.exe
  265. // C:\Program Files\Compilers\cl.exe
  266. // C:\Other Programs\prog.exe
  267. //
  268. // Suspicious (possibly hostile) Application paths:
  269. // C:\Program.exe
  270. // C:\Program Files\Internet.exe
  271. // C:\Program Files\Example\regedit.bat
  272. // C:\mycl.exe
  273. // \\server\share\foo\rundll32.exe
  274. // \\server\share\foo\myapp.exe
  275. //
  276. //
  277. // Relative Path Example #1
  278. // pszCmdTemplate = notepad.exe %1
  279. // SHEvaluateSystemCommandTemplate() returns: S_OK
  280. // pszApplication = C:\windows\system32\notepad.exe
  281. // pszCommandLine = "notepad.exe" %1
  282. // CreateProcess() would return TRUE
  283. // new process = C:\windows\system32\notepad.exe
  284. //
  285. // Relative Path Example #2
  286. // pszCmdTemplate = rundll32.exe shell32.dll,RunDll
  287. // SHEvaluateSystemCommandTemplate() returns: S_OK
  288. // pszApplication = C:\windows\system32\rundll32.exe
  289. // pszCommandLine = "rundll32.exe" shell32.dll,RunDll
  290. // * CreateProcess() would return TRUE
  291. // new process = \\server\share\foo\rundll32.exe
  292. //
  293. // Relative Path Example #3
  294. // pszCmdTemplate = regedit %1
  295. // SHEvaluateSystemCommandTemplate() returns: S_OK
  296. // pszApplication = C:\windows\system32\regedit.exe
  297. // pszCommandLine = "regedit.exe" %1
  298. // * CreateProcess() would return TRUE
  299. // new process = C:\Program Files\Example\regedit.bat
  300. //
  301. // Relative Path Example #4
  302. // pszCmdTemplate = pbrush "%1"
  303. // SHEvaluateSystemCommandTemplate() returns: S_OK
  304. // pszApplication = C:\windows\system32\mspaint.exe
  305. // pszCommandLine = "mspaint.exe" "%1"
  306. // * CreateProcess() would return FALSE
  307. //
  308. // Relative Path Example #5
  309. // pszCmdTemplate = mycl "%1" "%2"
  310. // SHEvaluateSystemCommandTemplate() returns: S_OK
  311. // pszApplication = C:\Program Files\Compilers\mycl.exe
  312. // pszCommandLine = "mycl.exe" "%1" "%2"
  313. // * CreateProcess() would return TRUE
  314. // new process = C:\mycl.exe
  315. //
  316. // Relative Path Example #6
  317. // pszCmdTemplate = myapp.exe
  318. // SHEvaluateSystemCommandTemplate() returns: CO_E_APPNOTFOUND
  319. // * CreateProcess() would return TRUE
  320. // new process = \\server\share\foo\myapp.exe
  321. //
  322. // Quoted Path Example #1
  323. // pszCmdTemplate = "C:\Program Files\Internet Explorer\iexplore.exe" -nohome
  324. // SHEvaluateSystemCommandTemplate() returns: S_OK
  325. // pszApplication = C:\Program Files\Internet Explorer\iexplore.exe
  326. // pszCommandLine = "C:\Program Files\Internet Explorer\iexplore.exe" -nohome
  327. // CreateProcess() would return TRUE
  328. // new process = C:\Program Files\Internet Explorer\iexplore.exe
  329. //
  330. // Quoted Path Example #2
  331. // pszCmdTemplate = "C:\Program Files\Internet" -url
  332. // SHEvaluateSystemCommandTemplate() returns: S_OK
  333. // pszApplication = C:\Program Files\Internet.exe
  334. // pszCommandLine = "C:\Program Files\Internet.exe" -url
  335. // CreateProcess() would return TRUE
  336. // new process = C:\Program Files\internet.exe
  337. //
  338. // Quoted Path Example #3
  339. // pszCmdTemplate = "C:\Program" -url
  340. // SHEvaluateSystemCommandTemplate() returns: S_OK
  341. // pszApplication = C:\Program.exe
  342. // pszCommandLine = "C:\Program.exe" -url
  343. // CreateProcess() would return TRUE
  344. // new process = C:\Program.exe
  345. //
  346. // Unquoted Example #1
  347. // pszCmdTemplate = C:\Program Files\Internet Explorer\iexplore.exe -nohome
  348. // SHEvaluateSystemCommandTemplate() returns: S_OK
  349. // pszApplication = C:\Program Files\Internet Explorer\iexplore.exe
  350. // pszCommandLine = "C:\Program Files\Internet Explorer\iexplore.exe" -nohome
  351. // * CreateProcess() would return TRUE
  352. // new process = C:\Program.exe
  353. //
  354. // Unquoted Example #2
  355. // pszCmdTemplate = C:\Program Files\Internet Explorer\iexplore.exe -url fool.htm
  356. // SHEvaluateSystemCommandTemplate() returns: S_OK
  357. // pszApplication = C:\Program Files\Internet Explorer\iexplore.exe
  358. // pszCommandLine = "C:\Program Files\Internet Explorer\iexplore.exe" -url fool.htm
  359. // * CreateProcess() would return TRUE
  360. // new process = C:\Program.exe
  361. //
  362. // Unquoted Example #3
  363. // pszCmdTemplate = C:\Program Files\Internet Explorer\iexplore.exe -url C:\fool.htm
  364. // SHEvaluateSystemCommandTemplate() returns: S_OK
  365. // pszApplication = C:\Program Files\Internet Explorer\iexplore.exe
  366. // pszCommandLine = "C:\Program Files\Internet Explorer\iexplore.exe" -url C:\fool.htm
  367. // * CreateProcess() would return TRUE
  368. // new process = C:\Program.exe
  369. //
  370. // Unquoted Example #4
  371. // pszCmdTemplate = C:\Program Files\Internet -url
  372. // SHEvaluateSystemCommandTemplate() returns: S_OK
  373. // pszApplication = C:\Program Files\Internet.exe
  374. // pszCommandLine = "C:\Program Files\Internet.exe" -url
  375. // * CreateProcess() would return TRUE
  376. // new process = C:\Program.exe
  377. //
  378. // Unquoted Example #5
  379. // pszCmdTemplate = C:\Other Programs\prog.exe -go %1 \fool %2
  380. // SHEvaluateSystemCommandTemplate() returns: S_OK
  381. // pszApplication = C:\Other Programs\prog.exe
  382. // pszCommandLine = "C:\Other Programs\prog.exe" %1 \fool %2
  383. // * CreateProcess() would return TRUE
  384. // new process = C:\Other Programs\prog.exe
  385. //
  386. // Unquoted Example #6
  387. // pszCmdTemplate = C:\Other Programs\prog.exe -go "\fool" "%1"
  388. // SHEvaluateSystemCommandTemplate() returns: S_OK
  389. // pszApplication = C:\Other Programs\prog.exe
  390. // pszCommandLine = "C:\Other Programs\prog.exe" -go "\fool" "%1"
  391. // * CreateProcess() would return TRUE
  392. // new process = C:\Other Programs\prog.exe
  393. //
  394. // Unquoted Example #7
  395. // pszCmdTemplate = C:\Program Files\Internet Explorer\iexplore.exe -url \fool.htm
  396. // SHEvaluateSystemCommandTemplate() returns: CO_E_APPNOTFOUND
  397. // * CreateProcess() would return TRUE
  398. // new process = C:\Program.exe
  399. //
  400. // Unquoted Example #8
  401. // pszCmdTemplate = C:\Program -url
  402. // SHEvaluateSystemCommandTemplate() returns: E_ACCESSDENIED
  403. // * CreateProcess() would return TRUE
  404. // new process = C:\Program.exe
  405. //
  406. // Unquoted Example #9
  407. // pszCmdTemplate = C:\Other Programs\prog.exe -go \fool us
  408. // SHEvaluateSystemCommandTemplate() returns: CO_E_APPNOTFOUND
  409. // * CreateProcess() would return TRUE
  410. // new process = C:\Other Programs\prog.exe
  411. //
  412. // Unquoted Example #10
  413. // pszCmdTemplate = C:\Other Programs\prog.exe -go \fool %1
  414. // SHEvaluateSystemCommandTemplate() returns: CO_E_APPNOTFOUND
  415. // * CreateProcess() would return TRUE
  416. // new process = C:\Other Programs\prog.exe
  417. //
  418. #endif //(_WIN32_IE >= 0x0600)
  419. #if (_WIN32_IE >= 0x0501)
  420. LWSTDAPI_(BOOL) PathUnExpandEnvStringsForUserA(HANDLE hToken, LPCSTR pszPath, LPSTR pszBuf, UINT cchBuf);
  421. LWSTDAPI_(BOOL) PathUnExpandEnvStringsForUserW(HANDLE hToken, LPCWSTR pszPath, LPWSTR pszBuf, UINT cchBuf);
  422. #ifdef UNICODE
  423. #define PathUnExpandEnvStringsForUser PathUnExpandEnvStringsForUserW
  424. #else
  425. #define PathUnExpandEnvStringsForUser PathUnExpandEnvStringsForUserA
  426. #endif // !UNICODE
  427. LWSTDAPI_(void) PrettifyFileDescriptionA(LPTSTR pszDescA, LPCSTR pszCutList);
  428. LWSTDAPI_(void) PrettifyFileDescriptionW(LPTSTR pszDescW, LPCWSTR pszCutList);
  429. #ifdef UNICODE
  430. #define PrettifyFileDescription PrettifyFileDescriptionW
  431. #else
  432. #define PrettifyFileDescription PrettifyFileDescriptionA
  433. #endif // !UNICODE
  434. #endif // (_WIN32_IE >= 0x0501)
  435. #if defined(WINNT) && (_WIN32_IE >= 0x0550)
  436. //====== ACL helpers ==================================================
  437. //
  438. // shell struct to identify user/group for each ACE
  439. //
  440. typedef struct _SHELL_USER_SID
  441. {
  442. SID_IDENTIFIER_AUTHORITY sidAuthority;
  443. DWORD dwUserGroupID;
  444. DWORD dwUserID;
  445. } SHELL_USER_SID, *PSHELL_USER_SID;
  446. //
  447. // common SHELL_USER_SID's
  448. //
  449. // NOTE: you need to link to stocklib.lib to resolve these
  450. //
  451. extern const SHELL_USER_SID susCurrentUser; // the current user
  452. extern const SHELL_USER_SID susSystem; // the "SYSTEM" group
  453. extern const SHELL_USER_SID susAdministrators; // the "Administrators" group
  454. extern const SHELL_USER_SID susPowerUsers; // the "Power Users" group
  455. extern const SHELL_USER_SID susGuests; // the "Guests" group
  456. extern const SHELL_USER_SID susEveryone; // the "Everyone" group
  457. //
  458. // shell struct that is passed to GetShellSecurityDescriptor()
  459. //
  460. typedef struct _SHELL_USER_PERMISSION
  461. {
  462. SHELL_USER_SID susID; // identifies the user for whom you want to grant permissions to
  463. DWORD dwAccessType; // this is either ACCESS_ALLOWED_ACE_TYPE or ACCESS_DENIED_ACE_TYPE
  464. BOOL fInherit; // the permissions inheritable? (eg a directory or reg key and you want new children to inherit this permission)
  465. DWORD dwAccessMask; // access granted (eg FILE_LIST_CONTENTS, KEY_ALL_ACCESS, etc...)
  466. DWORD dwInheritMask; // mask used for inheritance, usually (OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE | INHERIT_ONLY_ACE)
  467. DWORD dwInheritAccessMask; // the inheritable access granted (eg GENERIC_ALL)
  468. } SHELL_USER_PERMISSION, *PSHELL_USER_PERMISSION;
  469. //
  470. // The GetShellSecurityDescriptor API takes an array of PSHELL_USER_PERMISSION's
  471. // and returns a PSECURITY_DESCRIPTOR based on those permission (an ACL is
  472. // contained in the PSECURITY_DESCRIPTOR).
  473. //
  474. // NOTE: The PSECURITY_DESCRIPTOR returned to the caller must be freed with LocalFree()
  475. // if it is non-null.
  476. //
  477. //
  478. // Parameters:
  479. // apUserPerm - Array of shell_user_permission structs that defines what type
  480. // of access various users are allowed
  481. //
  482. // cUserPerm - count of elements in apUserPerm.
  483. //
  484. // Returns:
  485. // SECURITY_DESCRIPTOR* or NULL if failed.
  486. //
  487. LWSTDAPI_(SECURITY_DESCRIPTOR*) GetShellSecurityDescriptor(PSHELL_USER_PERMISSION* apUserPerm, int cUserPerm);
  488. #endif // defined(WINNT) && (_WIN32_IE >= 0x0550)
  489. LWSTDAPI UrlFixupW(LPCWSTR pszIn, LPWSTR pszOut, DWORD cchOut);
  490. // NTRAID:108139 akabir We need to move the components stuff from wininet.h to shlwapi.
  491. typedef WORD SHINTERNET_PORT;
  492. typedef SHINTERNET_PORT * LPSHINTERNET_PORT;
  493. //
  494. // SHINTERNET_SCHEME - enumerated URL scheme type
  495. //
  496. typedef enum {
  497. SHINTERNET_SCHEME_PARTIAL = -2,
  498. SHINTERNET_SCHEME_UNKNOWN = -1,
  499. SHINTERNET_SCHEME_DEFAULT = 0,
  500. SHINTERNET_SCHEME_FTP,
  501. SHINTERNET_SCHEME_GOPHER,
  502. SHINTERNET_SCHEME_HTTP,
  503. SHINTERNET_SCHEME_HTTPS,
  504. SHINTERNET_SCHEME_FILE,
  505. SHINTERNET_SCHEME_NEWS,
  506. SHINTERNET_SCHEME_MAILTO,
  507. SHINTERNET_SCHEME_SOCKS,
  508. SHINTERNET_SCHEME_JAVASCRIPT,
  509. SHINTERNET_SCHEME_VBSCRIPT,
  510. SHINTERNET_SCHEME_RES,
  511. SHINTERNET_SCHEME_FIRST = SHINTERNET_SCHEME_FTP,
  512. SHINTERNET_SCHEME_LAST = SHINTERNET_SCHEME_RES
  513. } SHINTERNET_SCHEME, * LPSHINTERNET_SCHEME;
  514. //
  515. // SHURL_COMPONENTS - the constituent parts of an URL. Used in InternetCrackUrl()
  516. // and InternetCreateUrl()
  517. //
  518. // For InternetCrackUrl(), if a pointer field and its corresponding length field
  519. // are both 0 then that component is not returned. If the pointer field is NULL
  520. // but the length field is not zero, then both the pointer and length fields are
  521. // returned if both pointer and corresponding length fields are non-zero then
  522. // the pointer field points to a buffer where the component is copied. The
  523. // component may be un-escaped, depending on dwFlags
  524. //
  525. // For InternetCreateUrl(), the pointer fields should be NULL if the component
  526. // is not required. If the corresponding length field is zero then the pointer
  527. // field is the address of a zero-terminated string. If the length field is not
  528. // zero then it is the string length of the corresponding pointer field
  529. //
  530. #pragma warning( disable : 4121 ) // disable alignment warning
  531. typedef struct {
  532. DWORD dwStructSize; // size of this structure. Used in version check
  533. LPSTR lpszScheme; // pointer to scheme name
  534. DWORD dwSchemeLength; // length of scheme name
  535. SHINTERNET_SCHEME nScheme; // enumerated scheme type (if known)
  536. LPSTR lpszHostName; // pointer to host name
  537. DWORD dwHostNameLength; // length of host name
  538. SHINTERNET_PORT nPort; // converted port number
  539. LPSTR lpszUserName; // pointer to user name
  540. DWORD dwUserNameLength; // length of user name
  541. LPSTR lpszPassword; // pointer to password
  542. DWORD dwPasswordLength; // length of password
  543. LPSTR lpszUrlPath; // pointer to URL-path
  544. DWORD dwUrlPathLength; // length of URL-path
  545. LPSTR lpszExtraInfo; // pointer to extra information (e.g. ?foo or #foo)
  546. DWORD dwExtraInfoLength; // length of extra information
  547. } SHURL_COMPONENTSA, * LPSHURL_COMPONENTSA;
  548. typedef struct {
  549. DWORD dwStructSize; // size of this structure. Used in version check
  550. LPWSTR lpszScheme; // pointer to scheme name
  551. DWORD dwSchemeLength; // length of scheme name
  552. SHINTERNET_SCHEME nScheme; // enumerated scheme type (if known)
  553. LPWSTR lpszHostName; // pointer to host name
  554. DWORD dwHostNameLength; // length of host name
  555. SHINTERNET_PORT nPort; // converted port number
  556. LPWSTR lpszUserName; // pointer to user name
  557. DWORD dwUserNameLength; // length of user name
  558. LPWSTR lpszPassword; // pointer to password
  559. DWORD dwPasswordLength; // length of password
  560. LPWSTR lpszUrlPath; // pointer to URL-path
  561. DWORD dwUrlPathLength; // length of URL-path
  562. LPWSTR lpszExtraInfo; // pointer to extra information (e.g. ?foo or #foo)
  563. DWORD dwExtraInfoLength; // length of extra information
  564. } SHURL_COMPONENTSW, * LPSHURL_COMPONENTSW;
  565. #ifdef UNICODE
  566. typedef SHURL_COMPONENTSW SHURL_COMPONENTS;
  567. typedef LPSHURL_COMPONENTSW LPSHURL_COMPONENTS;
  568. #else
  569. typedef SHURL_COMPONENTSA SHURL_COMPONENTS;
  570. typedef LPSHURL_COMPONENTSA LPSHURL_COMPONENTS;
  571. #endif // UNICODE
  572. BOOL WINAPI UrlCrackW(LPCWSTR lpszUrl, DWORD dwUrlLength, DWORD dwFlags, LPSHURL_COMPONENTSW lpUrlComponents);
  573. #define UrlFixup UrlFixupW
  574. // no UrlFixupA
  575. //
  576. // Internal APIs which we're not yet sure whether to make public
  577. //
  578. // Private IHlinkFrame::Navigate flags related to history
  579. // This navigate should not go in the History ShellFolder
  580. #define SHHLNF_WRITENOHISTORY 0x08000000
  581. // This navigate should not automatically select History ShellFolder
  582. #define SHHLNF_NOAUTOSELECT 0x04000000
  583. // The order of these flags is important. See the source before
  584. // changing these.
  585. #define PFOPEX_NONE 0x00000000
  586. #define PFOPEX_PIF 0x00000001
  587. #define PFOPEX_COM 0x00000002
  588. #define PFOPEX_EXE 0x00000004
  589. #define PFOPEX_BAT 0x00000008
  590. #define PFOPEX_LNK 0x00000010
  591. #define PFOPEX_CMD 0x00000020
  592. #define PFOPEX_OPTIONAL 0x00000040 // Search only if Extension not present
  593. #define PFOPEX_DEFAULT (PFOPEX_CMD | PFOPEX_COM | PFOPEX_BAT | PFOPEX_PIF | PFOPEX_EXE | PFOPEX_LNK)
  594. LWSTDAPI_(BOOL) PathFileExistsDefExtA(LPSTR pszPath, UINT uFlags);
  595. LWSTDAPI_(BOOL) PathFileExistsDefExtW(LPWSTR pszPath, UINT uFlags);
  596. #ifdef UNICODE
  597. #define PathFileExistsDefExt PathFileExistsDefExtW
  598. #else
  599. #define PathFileExistsDefExt PathFileExistsDefExtA
  600. #endif // !UNICODE
  601. LWSTDAPI_(BOOL) PathFindOnPathExA(LPSTR pszPath, LPCSTR * ppszOtherDirs, UINT uFlags);
  602. LWSTDAPI_(BOOL) PathFindOnPathExW(LPWSTR pszPath, LPCWSTR * ppszOtherDirs, UINT uFlags);
  603. #ifdef UNICODE
  604. #define PathFindOnPathEx PathFindOnPathExW
  605. #else
  606. #define PathFindOnPathEx PathFindOnPathExA
  607. #endif // !UNICODE
  608. LWSTDAPI_(LPCSTR) PathSkipLeadingSlashesA(LPCSTR pszURL);
  609. LWSTDAPI_(LPCWSTR) PathSkipLeadingSlashesW(LPCWSTR pszURL);
  610. #ifdef UNICODE
  611. #define PathSkipLeadingSlashes PathSkipLeadingSlashesW
  612. #else
  613. #define PathSkipLeadingSlashes PathSkipLeadingSlashesA
  614. #endif // !UNICODE
  615. LWSTDAPI_(UINT) SHGetSystemWindowsDirectoryA(LPSTR lpBuffer, UINT uSize);
  616. LWSTDAPI_(UINT) SHGetSystemWindowsDirectoryW(LPWSTR lpBuffer, UINT uSize);
  617. #ifdef UNICODE
  618. #define SHGetSystemWindowsDirectory SHGetSystemWindowsDirectoryW
  619. #else
  620. #define SHGetSystemWindowsDirectory SHGetSystemWindowsDirectoryA
  621. #endif // !UNICODE
  622. #if (_WIN32_IE >= 0x0501)
  623. //
  624. // These are functions that used to be duplicated in shell32, but have
  625. // be consolidated here. They are exported privately until someone decides
  626. // we really want to document them.
  627. //
  628. LWSTDAPI_(BOOL) PathFileExistsAndAttributesA(LPCSTR pszPath, OPTIONAL DWORD* pdwAttributes);
  629. //
  630. // These are functions that used to be duplicated in shell32, but have
  631. // be consolidated here. They are exported privately until someone decides
  632. // we really want to document them.
  633. //
  634. LWSTDAPI_(BOOL) PathFileExistsAndAttributesW(LPCWSTR pszPath, OPTIONAL DWORD* pdwAttributes);
  635. #ifdef UNICODE
  636. #define PathFileExistsAndAttributes PathFileExistsAndAttributesW
  637. #else
  638. #define PathFileExistsAndAttributes PathFileExistsAndAttributesA
  639. #endif // !UNICODE
  640. LWSTDAPI_(BOOL) PathFileExistsDefExtAndAttributesA(LPSTR pszPath, UINT uFlags, DWORD *pdwAttribs);
  641. LWSTDAPI_(BOOL) PathFileExistsDefExtAndAttributesW(LPWSTR pszPath, UINT uFlags, DWORD *pdwAttribs);
  642. #ifdef UNICODE
  643. #define PathFileExistsDefExtAndAttributes PathFileExistsDefExtAndAttributesW
  644. #else
  645. #define PathFileExistsDefExtAndAttributes PathFileExistsDefExtAndAttributesA
  646. #endif // !UNICODE
  647. LWSTDAPI_(void) FixSlashesAndColonA(LPSTR pszPath);
  648. LWSTDAPI_(void) FixSlashesAndColonW(LPWSTR pszPath);
  649. #ifdef UNICODE
  650. #define FixSlashesAndColon FixSlashesAndColonW
  651. #else
  652. #define FixSlashesAndColon FixSlashesAndColonA
  653. #endif // !UNICODE
  654. LWSTDAPI_(LPCSTR) NextPathA(LPCSTR lpPath, LPSTR szPath, int cchPath);
  655. LWSTDAPI_(LPCWSTR) NextPathW(LPCWSTR lpPath, LPWSTR szPath, int cchPath);
  656. #ifdef UNICODE
  657. #define NextPath NextPathW
  658. #else
  659. #define NextPath NextPathA
  660. #endif // !UNICODE
  661. LWSTDAPI_(LPSTR) CharUpperNoDBCSA(LPSTR psz);
  662. LWSTDAPI_(LPWSTR) CharUpperNoDBCSW(LPWSTR psz);
  663. #ifdef UNICODE
  664. #define CharUpperNoDBCS CharUpperNoDBCSW
  665. #else
  666. #define CharUpperNoDBCS CharUpperNoDBCSA
  667. #endif // !UNICODE
  668. LWSTDAPI_(LPSTR) CharLowerNoDBCSA(LPSTR psz);
  669. LWSTDAPI_(LPWSTR) CharLowerNoDBCSW(LPWSTR psz);
  670. #ifdef UNICODE
  671. #define CharLowerNoDBCS CharLowerNoDBCSW
  672. #else
  673. #define CharLowerNoDBCS CharLowerNoDBCSA
  674. #endif // !UNICODE
  675. //
  676. // flags for PathIsValidChar()
  677. //
  678. #define PIVC_ALLOW_QUESTIONMARK 0x00000001 // treat '?' as valid
  679. #define PIVC_ALLOW_STAR 0x00000002 // treat '*' as valid
  680. #define PIVC_ALLOW_DOT 0x00000004 // treat '.' as valid
  681. #define PIVC_ALLOW_SLASH 0x00000008 // treat '\\' as valid
  682. #define PIVC_ALLOW_COLON 0x00000010 // treat ':' as valid
  683. #define PIVC_ALLOW_SEMICOLON 0x00000020 // treat ';' as valid
  684. #define PIVC_ALLOW_COMMA 0x00000040 // treat ',' as valid
  685. #define PIVC_ALLOW_SPACE 0x00000080 // treat ' ' as valid
  686. #define PIVC_ALLOW_NONALPAHABETIC 0x00000100 // treat non-alphabetic exteneded chars as valid
  687. #define PIVC_ALLOW_QUOTE 0x00000200 // treat '"' as valid
  688. //
  689. // standard masks for PathIsValidChar()
  690. //
  691. #define PIVC_SFN_NAME (PIVC_ALLOW_DOT | PIVC_ALLOW_NONALPAHABETIC)
  692. #define PIVC_SFN_FULLPATH (PIVC_SFN_NAME | PIVC_ALLOW_COLON | PIVC_ALLOW_SLASH)
  693. #define PIVC_LFN_NAME (PIVC_ALLOW_DOT | PIVC_ALLOW_NONALPAHABETIC | PIVC_ALLOW_SEMICOLON | PIVC_ALLOW_COMMA | PIVC_ALLOW_SPACE)
  694. #define PIVC_LFN_FULLPATH (PIVC_LFN_NAME | PIVC_ALLOW_COLON | PIVC_ALLOW_SLASH)
  695. #define PIVC_SFN_FILESPEC (PIVC_SFN_FULLPATH | PIVC_ALLOW_STAR | PIVC_ALLOW_QUESTIONMARK)
  696. #define PIVC_LFN_FILESPEC (PIVC_LFN_FULLPATH | PIVC_ALLOW_STAR | PIVC_ALLOW_QUESTIONMARK)
  697. LWSTDAPI_(BOOL) PathIsValidCharA(UCHAR ch, DWORD dwFlags);
  698. LWSTDAPI_(BOOL) PathIsValidCharW(WCHAR ch, DWORD dwFlags);
  699. #ifdef UNICODE
  700. #define PathIsValidChar PathIsValidCharW
  701. #else
  702. #define PathIsValidChar PathIsValidCharA
  703. #endif // !UNICODE
  704. #endif // (_WIN32_IE >= 0x0501)
  705. // parsed URL information returned by ParseURL()
  706. //
  707. // Internet_CrackURL is the correct function for external components
  708. // to use. URL.DLL calls this function to do some work and the shell
  709. // uses this function as a leight-weight parsing function as well.
  710. typedef struct tagPARSEDURLA {
  711. DWORD cbSize;
  712. // Pointers into the buffer that was provided to ParseURL
  713. LPCSTR pszProtocol;
  714. UINT cchProtocol;
  715. LPCSTR pszSuffix;
  716. UINT cchSuffix;
  717. UINT nScheme; // One of URL_SCHEME_*
  718. } PARSEDURLA, * PPARSEDURLA;
  719. typedef struct tagPARSEDURLW {
  720. DWORD cbSize;
  721. // Pointers into the buffer that was provided to ParseURL
  722. LPCWSTR pszProtocol;
  723. UINT cchProtocol;
  724. LPCWSTR pszSuffix;
  725. UINT cchSuffix;
  726. UINT nScheme; // One of URL_SCHEME_*
  727. } PARSEDURLW, * PPARSEDURLW;
  728. #ifdef UNICODE
  729. typedef PARSEDURLW PARSEDURL;
  730. typedef PPARSEDURLW PPARSEDURL;
  731. #else
  732. typedef PARSEDURLA PARSEDURL;
  733. typedef PPARSEDURLA PPARSEDURL;
  734. #endif // UNICODE
  735. LWSTDAPI ParseURLA(LPCSTR pcszURL, PARSEDURLA * ppu);
  736. LWSTDAPI ParseURLW(LPCWSTR pcszURL, PARSEDURLW * ppu);
  737. #ifdef UNICODE
  738. #define ParseURL ParseURLW
  739. #else
  740. #define ParseURL ParseURLA
  741. #endif // !UNICODE
  742. #endif // NO_SHLWAPI_PATH
  743. #ifndef NO_SHLWAPI_REG
  744. //
  745. //=============== Registry Routines ===================================
  746. //
  747. // SHDeleteOrphanKey is the old name for SHDeleteEmptyKey.
  748. // SHDeleteOrphanKey already maps to SHDeleteEmptyKey in the DLL exports.
  749. LWSTDAPI_(DWORD) SHDeleteOrphanKeyA(HKEY hkey, LPCSTR pszSubKey);
  750. LWSTDAPI_(DWORD) SHDeleteOrphanKeyW(HKEY hkey, LPCWSTR pszSubKey);
  751. #ifdef UNICODE
  752. #define SHDeleteOrphanKey SHDeleteOrphanKeyW
  753. #else
  754. #define SHDeleteOrphanKey SHDeleteOrphanKeyA
  755. #endif // !UNICODE
  756. // This is the single, one stop shop for all your 'get registry data' needs.
  757. // If this function doesn't do what you're looking for now, ask yourself if
  758. // it can be enhanced in a simple way to do it before you go adding yet
  759. // another API.
  760. //
  761. typedef struct tagAssocDDEExec
  762. {
  763. LPCWSTR pszDDEExec;
  764. LPCWSTR pszApplication;
  765. LPCWSTR pszTopic;
  766. BOOL fNoActivateHandler;
  767. } ASSOCDDEEXEC;
  768. typedef struct tagAssocVerb
  769. {
  770. LPCWSTR pszVerb;
  771. LPCWSTR pszTitle;
  772. LPCWSTR pszFriendlyAppName;
  773. LPCWSTR pszApplication;
  774. LPCWSTR pszParams;
  775. ASSOCDDEEXEC *pDDEExec;
  776. } ASSOCVERB;
  777. typedef struct tagAssocShell
  778. {
  779. ASSOCVERB *rgVerbs;
  780. DWORD cVerbs;
  781. DWORD iDefaultVerb;
  782. } ASSOCSHELL;
  783. typedef struct tagAssocProgid
  784. {
  785. DWORD cbSize;
  786. LPCWSTR pszProgid;
  787. LPCWSTR pszFriendlyDocName;
  788. LPCWSTR pszDefaultIcon;
  789. ASSOCSHELL *pShellKey;
  790. LPCWSTR pszExtensions;
  791. } ASSOCPROGID;
  792. typedef struct tagAssocApp
  793. {
  794. DWORD cbSize;
  795. LPCWSTR pszFriendlyAppName;
  796. ASSOCSHELL *pShellKey;
  797. } ASSOCAPP;
  798. enum {
  799. ASSOCMAKEF_VERIFY = 0x00000040, // verify data is accurate (DISK HITS)
  800. ASSOCMAKEF_USEEXPAND = 0x00000200, // strings have environment vars and need REG_EXPAND_SZ
  801. ASSOCMAKEF_SUBSTENV = 0x00000400, // attempt to use std env if they match...
  802. ASSOCMAKEF_VOLATILE = 0x00000800, // the progid will not persist between sessions
  803. ASSOCMAKEF_DELETE = 0x00002000, // remove this association if possible
  804. };
  805. typedef DWORD ASSOCMAKEF;
  806. LWSTDAPI AssocMakeProgid(ASSOCMAKEF flags, LPCWSTR pszApplication, ASSOCPROGID *pProgid, HKEY *phkProgid);
  807. LWSTDAPI AssocMakeApp(ASSOCMAKEF flags, LPCWSTR pszApplication, ASSOCAPP *pApp, HKEY *phkApp);
  808. LWSTDAPI AssocMakeApplicationByKeyA(ASSOCMAKEF flags, HKEY hkAssoc, LPCSTR pszVerb);
  809. LWSTDAPI AssocMakeApplicationByKeyW(ASSOCMAKEF flags, HKEY hkAssoc, LPCWSTR pszVerb);
  810. #ifdef UNICODE
  811. #define AssocMakeApplicationByKey AssocMakeApplicationByKeyW
  812. #else
  813. #define AssocMakeApplicationByKey AssocMakeApplicationByKeyA
  814. #endif // !UNICODE
  815. LWSTDAPI AssocMakeFileExtsToApplicationA(ASSOCMAKEF flags, LPCSTR pszExt, LPCSTR pszApplication);
  816. LWSTDAPI AssocMakeFileExtsToApplicationW(ASSOCMAKEF flags, LPCWSTR pszExt, LPCWSTR pszApplication);
  817. #ifdef UNICODE
  818. #define AssocMakeFileExtsToApplication AssocMakeFileExtsToApplicationW
  819. #else
  820. #define AssocMakeFileExtsToApplication AssocMakeFileExtsToApplicationA
  821. #endif // !UNICODE
  822. LWSTDAPI AssocCopyVerbs(HKEY hkSrc, HKEY hkDst);
  823. typedef enum _SHELLKEY
  824. {
  825. SKROOT_HKCU = 0x00000001, // internal to the function
  826. SKROOT_HKLM = 0x00000002, // internal to the function
  827. SKROOT_MASK = 0x0000000F, // internal to the function
  828. SKPATH_EXPLORER = 0x00000000, // internal to the function
  829. SKPATH_SHELL = 0x00000010, // internal to the function
  830. SKPATH_SHELLNOROAM = 0x00000020, // internal to the function
  831. SKPATH_CLASSES = 0x00000030, // internal to the function
  832. SKPATH_MASK = 0x00000FF0, // internal to the function
  833. SKSUB_NONE = 0x00000000, // internal to the function
  834. SKSUB_LOCALIZEDNAMES = 0x00001000, // internal to the function
  835. SKSUB_HANDLERS = 0x00002000, // internal to the function
  836. SKSUB_ASSOCIATIONS = 0x00003000, // internal to the function
  837. SKSUB_VOLATILE = 0x00004000, // internal to the function
  838. SKSUB_MUICACHE = 0x00005000, // internal to the function
  839. SKSUB_FILEEXTS = 0x00006000, // internal to the function
  840. SKSUB_MASK = 0x000FF000, // internal to the function
  841. SHELLKEY_HKCU_EXPLORER = SKROOT_HKCU | SKPATH_EXPLORER | SKSUB_NONE,
  842. SHELLKEY_HKLM_EXPLORER = SKROOT_HKLM | SKPATH_EXPLORER | SKSUB_NONE,
  843. SHELLKEY_HKCU_SHELL = SKROOT_HKCU | SKPATH_SHELL | SKSUB_NONE,
  844. SHELLKEY_HKLM_SHELL = SKROOT_HKLM | SKPATH_SHELL | SKSUB_NONE,
  845. SHELLKEY_HKCU_SHELLNOROAM = SKROOT_HKCU | SKPATH_SHELLNOROAM | SKSUB_NONE,
  846. SHELLKEY_HKCULM_SHELL = SHELLKEY_HKCU_SHELLNOROAM,
  847. SHELLKEY_HKCULM_CLASSES = SKROOT_HKCU | SKPATH_CLASSES | SKSUB_NONE,
  848. SHELLKEY_HKCU_LOCALIZEDNAMES = SKROOT_HKCU | SKPATH_SHELL | SKSUB_LOCALIZEDNAMES,
  849. SHELLKEY_HKCULM_HANDLERS = SKROOT_HKCU | SKPATH_SHELLNOROAM | SKSUB_HANDLERS,
  850. SHELLKEY_HKCULM_ASSOCIATIONS = SKROOT_HKCU | SKPATH_SHELLNOROAM | SKSUB_ASSOCIATIONS,
  851. SHELLKEY_HKCULM_VOLATILE = SKROOT_HKCU | SKPATH_SHELLNOROAM | SKSUB_VOLATILE,
  852. SHELLKEY_HKCULM_MUICACHE = SKROOT_HKCU | SKPATH_SHELLNOROAM | SKSUB_MUICACHE,
  853. SHELLKEY_HKCU_FILEEXTS = SKROOT_HKCU | SKPATH_EXPLORER | SKSUB_FILEEXTS,
  854. SHELLKEY_HKCULM_HANDLERS_RO = SHELLKEY_HKCULM_HANDLERS, // deprecated
  855. SHELLKEY_HKCULM_HANDLERS_RW = SHELLKEY_HKCULM_HANDLERS, // deprecated
  856. SHELLKEY_HKCULM_ASSOCIATIONS_RO = SHELLKEY_HKCULM_ASSOCIATIONS, // deprecated
  857. SHELLKEY_HKCULM_ASSOCIATIONS_RW = SHELLKEY_HKCULM_ASSOCIATIONS, // deprecated
  858. SHELLKEY_HKCULM_RO = SHELLKEY_HKCU_SHELLNOROAM, // deprecated
  859. SHELLKEY_HKCULM_RW = SHELLKEY_HKCU_SHELLNOROAM, // deprecated
  860. } SHELLKEY;
  861. LWSTDAPI_(HKEY) SHGetShellKey(SHELLKEY sk, LPCWSTR pszSubKey, BOOL fCreateSub);
  862. LWSTDAPI SKGetValueA(SHELLKEY sk, LPCSTR pszSubKey, LPCSTR pszValue, DWORD *pdwType, void *pvData, DWORD *pcbData);
  863. LWSTDAPI SKGetValueW(SHELLKEY sk, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD *pdwType, void *pvData, DWORD *pcbData);
  864. #ifdef UNICODE
  865. #define SKGetValue SKGetValueW
  866. #else
  867. #define SKGetValue SKGetValueA
  868. #endif // !UNICODE
  869. LWSTDAPI SKSetValueA(SHELLKEY sk, LPCSTR pszSubKey, LPCSTR pszValue, DWORD dwType, LPCVOID pvData, DWORD cbData);
  870. LWSTDAPI SKSetValueW(SHELLKEY sk, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwType, LPCVOID pvData, DWORD cbData);
  871. #ifdef UNICODE
  872. #define SKSetValue SKSetValueW
  873. #else
  874. #define SKSetValue SKSetValueA
  875. #endif // !UNICODE
  876. LWSTDAPI SKDeleteValueA(SHELLKEY sk, LPCSTR pszSubKey, LPCSTR pszValue);
  877. LWSTDAPI SKDeleteValueW(SHELLKEY sk, LPCWSTR pszSubKey, LPCWSTR pszValue);
  878. #ifdef UNICODE
  879. #define SKDeleteValue SKDeleteValueW
  880. #else
  881. #define SKDeleteValue SKDeleteValueA
  882. #endif // !UNICODE
  883. LWSTDAPI SKAllocValueA(SHELLKEY sk, LPCSTR pszSubKey, LPCSTR pszValue, DWORD *pdwType, void **pvData, DWORD *pcbData);
  884. LWSTDAPI SKAllocValueW(SHELLKEY sk, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD *pdwType, void **pvData, DWORD *pcbData);
  885. #ifdef UNICODE
  886. #define SKAllocValue SKAllocValueW
  887. #else
  888. #define SKAllocValue SKAllocValueA
  889. #endif // !UNICODE
  890. LWSTDAPI QuerySourceCreateFromKey(HKEY hk, PCWSTR pszSub, BOOL fCreate, REFIID riid, void **ppv);
  891. #endif // NO_SHLWAPI_REG
  892. #ifndef NO_SHLWAPI_UALSTR
  893. #include <uastrfnc.h>
  894. #endif // NO_SHLWAPI_UALSTR
  895. #ifndef NO_SHLWAPI_STREAM
  896. //
  897. //=============== Stream Routines ===================================
  898. //
  899. //
  900. // We must say "struct IStream" instead of "IStream" in case we are
  901. // #include'd before <ole2.h>.
  902. //
  903. LWSTDAPI MapWin32ErrorToSTG(HRESULT hrIn);
  904. LWSTDAPI ModeToCreateFileFlags(DWORD grfMode, BOOL fCreate, DWORD *pdwDesiredAccess, DWORD *pdwShareMode, DWORD *pdwCreationDisposition);
  905. // SHConvertGraphicsFile Description:
  906. // pszFile: The source file name to convert. The file can be a JPEG, GIF, PNG, TIFF, BMP, EMF, WMF, or ICO filetype.
  907. // pszDestFile: This is the destination file that will be created. The extension will determine type of
  908. // format for the destiation file. If this file already exists, the function will fail with
  909. // HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS) unless the flag SHCGF_REPLACEFILE is specified.
  910. // Return value: S_OK if the destination file was able to be created, otherwise an HRESULT error.
  911. //
  912. // NOTE: This is currently internal because: 1) we are using a temporary GDI+ interface, 2)
  913. // we can't fix any bugs we find (since they are in GDI+), and 3) it's best if GDI+ owns
  914. // the public version of this interface. GDI+ is working on version 1 of their API for
  915. // whistler. They don't have time to create this API, make it public, and support it
  916. // until version 2, which will be after whistler.
  917. //
  918. // dwFlags:
  919. #define SHCGF_NONE 0x00000000 // Normal behavior
  920. #define SHCGF_REPLACEFILE 0x00000001 // If pszDestFile already exists, delete it.
  921. LWSTDAPI SHConvertGraphicsFile(IN LPCWSTR pszFile, IN LPCWSTR pszDestFile, IN DWORD dwFlags);
  922. LWSTDAPI_(struct IStream *) SHCreateMemStream(LPBYTE pInit, UINT cbInit);
  923. // SHCreateStreamWrapper creates an IStream that spans multiple IStream implementations.
  924. // NOTE: STGM_READ is the only mode currently supported
  925. LWSTDAPI SHCreateStreamWrapper(IStream *aStreams[], UINT cStreams, DWORD grfMode, IStream **ppstm);
  926. // These functions read, write, and maintain a list of DATABLOCK_HEADERs.
  927. // Blocks can be of any size (cbSize) and they are added, found, and removed
  928. // by dwSignature. Each block is guranteed to be aligned on a DWORD boundary
  929. // in memory. The stream format is identical to Windows 95 and NT 4
  930. // CShellLink's "EXP" data format (with one bug fix: stream data is NULL
  931. // terminated on write...)
  932. //
  933. // SHReadDataBlocks and SHAddDataBlock will allocate your pdbList for you.
  934. //
  935. // SHFindDataBlock returns a pointer into the pdbList.
  936. //
  937. // SHAddDataBlock and SHRemoveDataBlock return TRUE if ppdbList modified.
  938. //
  939. /*
  940. * Temporary definition because the definition doesn't show up until shlobj.w.
  941. */
  942. #define LPDATABLOCK_HEADER struct tagDATABLOCKHEADER *
  943. #define LPDBLIST struct tagDATABLOCKHEADER *
  944. LWSTDAPI SHWriteDataBlockList(struct IStream* pstm, LPDBLIST pdbList);
  945. LWSTDAPI SHReadDataBlockList(struct IStream* pstm, LPDBLIST * ppdbList);
  946. LWSTDAPI_(void) SHFreeDataBlockList(LPDBLIST pdbList);
  947. LWSTDAPI_(BOOL) SHAddDataBlock(LPDBLIST * ppdbList, LPDATABLOCK_HEADER pdb);
  948. LWSTDAPI_(BOOL) SHRemoveDataBlock(LPDBLIST * ppdbList, DWORD dwSignature);
  949. LWSTDAPI_(void *) SHFindDataBlock(LPDBLIST pdbList, DWORD dwSignature);
  950. #undef LPDATABLOCK_HEADER
  951. #undef LPDBLIST
  952. // FUNCTION: SHCheckDiskForMedia
  953. //
  954. // hwnd - NULL means no UI will be displayed. Non-NULL means
  955. // punkEnableModless - Make caller modal during UI. (OPTIONAL)
  956. // pszPath - Path that needs verification.
  957. // wFunc - Type of operation (FO_MOVE, FO_COPY, FO_DELETE, FO_RENAME - shellapi.h)
  958. //
  959. // NOTE: USE NT5's SHPathPrepareForWrite() instead, it's MUCH MUCH BETTER.
  960. LWSTDAPI_(BOOL) SHCheckDiskForMediaA(HWND hwnd, IUnknown * punkEnableModless, LPCSTR pszPath, UINT wFunc);
  961. LWSTDAPI_(BOOL) SHCheckDiskForMediaW(HWND hwnd, IUnknown * punkEnableModless, LPCWSTR pwzPath, UINT wFunc);
  962. #ifdef UNICODE
  963. #define SHCheckDiskForMedia SHCheckDiskForMediaW
  964. #else
  965. #define SHCheckDiskForMedia SHCheckDiskForMediaA
  966. #endif
  967. #endif // NO_SHLWAPI_STREAM
  968. #ifndef NO_SHLWAPI_MLUI
  969. //
  970. //=============== Multi Language UI Routines ===================================
  971. //
  972. #define ORD_SHGETWEBFOLDERFILEPATHA 440
  973. #define ORD_SHGETWEBFOLDERFILEPATHW 441
  974. LWSTDAPI SHGetWebFolderFilePathA(LPCSTR pszFileName, LPSTR pszMUIPath, UINT cchMUIPath);
  975. LWSTDAPI SHGetWebFolderFilePathW(LPCWSTR pszFileName, LPWSTR pszMUIPath, UINT cchMUIPath);
  976. #ifdef UNICODE
  977. #define SHGetWebFolderFilePath SHGetWebFolderFilePathW
  978. #else
  979. #define SHGetWebFolderFilePath SHGetWebFolderFilePathA
  980. #endif // !UNICODE
  981. // Use MLLoadLibrary to get the ML-resource file. This function tags the file so
  982. // all standard shlwapi wrap functions automatically get ML-behavior.
  983. //
  984. #define ORD_MLLOADLIBRARYA 377
  985. #define ORD_MLLOADLIBRARYW 378
  986. LWSTDAPI_(HINSTANCE) MLLoadLibraryA(LPCSTR lpLibFileName, HMODULE hModule, DWORD dwCrossCodePage);
  987. LWSTDAPI_(HINSTANCE) MLLoadLibraryW(LPCWSTR lpLibFileName, HMODULE hModule, DWORD dwCrossCodePage);
  988. #ifdef UNICODE
  989. #define MLLoadLibrary MLLoadLibraryW
  990. #else
  991. #define MLLoadLibrary MLLoadLibraryA
  992. #endif // !UNICODE
  993. LWSTDAPI_(BOOL) MLFreeLibrary(HMODULE hModule);
  994. #define ML_NO_CROSSCODEPAGE 0
  995. #define ML_CROSSCODEPAGE_NT 1
  996. #define ML_CROSSCODEPAGE 2
  997. #define ML_SHELL_LANGUAGE 4
  998. #define ML_CROSSCODEPAGE_MASK 7
  999. // If you are a global distributable a-la comctl32 that doesn't follow the IE5
  1000. // PlugUI resource layout, then load your own hinstance and poke it into shlwapi
  1001. // using these functions:
  1002. //
  1003. LWSTDAPI MLSetMLHInstance(HINSTANCE hInst, LANGID lidUI);
  1004. LWSTDAPI MLClearMLHInstance(HINSTANCE hInst);
  1005. // Of course you need to know what UI language to use:
  1006. //
  1007. #define ORD_MLGETUILANGUAGE 376
  1008. LWSTDAPI_(LANGID) MLGetUILanguage(void);
  1009. // Super internal and you probably don't need this one, but comctl32 does
  1010. // some font munging in PlugUI cases on your apps behalf:
  1011. //
  1012. LWSTDAPI_(BOOL) MLIsMLHInstance(HINSTANCE hInst);
  1013. LWSTDAPI_(HRESULT) MLBuildResURLA(LPCSTR szLibFile, HMODULE hModule, DWORD dwCrossCodePage, LPCSTR szResourceName, LPSTR pszResURL, int nBufSize);
  1014. LWSTDAPI_(HRESULT) MLBuildResURLW(LPCWSTR szLibFile, HMODULE hModule, DWORD dwCrossCodePage, LPCWSTR szResourceName, LPWSTR pszResURL, int nBufSize);
  1015. #ifdef UNICODE
  1016. #define MLBuildResURL MLBuildResURLW
  1017. #else
  1018. #define MLBuildResURL MLBuildResURLA
  1019. #endif // !UNICODE
  1020. #define ORD_MLWINHELPA 395
  1021. #define ORD_MLWINHELPW 397
  1022. LWSTDAPI_(BOOL) MLWinHelpA(HWND hWndCaller, LPCSTR lpszHelp, UINT uCommand, DWORD_PTR dwData);
  1023. LWSTDAPI_(BOOL) MLWinHelpW(HWND hWndCaller, LPCWSTR lpszHelp, UINT uCommand, DWORD_PTR dwData);
  1024. #ifdef UNICODE
  1025. #define MLWinHelp MLWinHelpW
  1026. #else
  1027. #define MLWinHelp MLWinHelpA
  1028. #endif // !UNICODE
  1029. #define ORD_MLHTMLHELPA 396
  1030. #define ORD_MLHTMLHELPW 398
  1031. LWSTDAPI_(HWND) MLHtmlHelpA(HWND hWndCaller, LPCSTR pszFile, UINT uCommand, DWORD_PTR dwData, DWORD dwCrossCodePage);
  1032. LWSTDAPI_(HWND) MLHtmlHelpW(HWND hWndCaller, LPCWSTR pszFile, UINT uCommand, DWORD_PTR dwData, DWORD dwCrossCodePage);
  1033. #ifdef UNICODE
  1034. #define MLHtmlHelp MLHtmlHelpW
  1035. #else
  1036. #define MLHtmlHelp MLHtmlHelpA
  1037. #endif // !UNICODE
  1038. #endif // NO_SHLWAPI_MLUI
  1039. #ifndef NO_SHLWAPI_HTTP
  1040. //
  1041. //=============== HTTP helper Routines ===================================
  1042. // The calling thread must have called CoInitialize() before using this
  1043. // function - it will create a format enumerator and associate it as a
  1044. // property with the IShellBrowser passed in, so that it will be reused.
  1045. //
  1046. //
  1047. // We must say "struct IWhatever" instead of "IWhatever" in case we are
  1048. // #include'd before <ole2.h>.
  1049. //
  1050. LWSTDAPI RegisterDefaultAcceptHeaders(struct IBindCtx* pbc, struct IShellBrowser* psb);
  1051. LWSTDAPI RunRegCommand(HWND hwnd, HKEY hkey, LPCWSTR pszKey);
  1052. LWSTDAPI RunIndirectRegCommand(HWND hwnd, HKEY hkey, LPCWSTR pszKey, LPCWSTR pszVerb);
  1053. LWSTDAPI SHRunIndirectRegClientCommand(HWND hwnd, LPCWSTR pszClient);
  1054. LWSTDAPI GetAcceptLanguagesA(LPSTR psz, LPDWORD pcch);
  1055. LWSTDAPI GetAcceptLanguagesW(LPWSTR pwz, LPDWORD pcch);
  1056. #ifdef UNICODE
  1057. #define GetAcceptLanguages GetAcceptLanguagesW
  1058. #else
  1059. #define GetAcceptLanguages GetAcceptLanguagesA
  1060. #endif
  1061. #endif // NO_SHLWAPI_HTTP
  1062. LWSTDAPI_(HWND) SHHtmlHelpOnDemandW(HWND hwnd, LPCWSTR pszFile, UINT uCommand, DWORD_PTR dwData, DWORD dwCrossCodePage, BOOL bUseML);
  1063. LWSTDAPI_(HWND) SHHtmlHelpOnDemandA(HWND hwnd, LPCSTR pszFile, UINT uCommand, DWORD_PTR dwData, DWORD dwCrossCodePage, BOOL bUseML);
  1064. LWSTDAPI_(BOOL) SHWinHelpOnDemandW(HWND hwnd, LPCWSTR pszFile, UINT uCommand, DWORD_PTR dwData, BOOL bUseML);
  1065. LWSTDAPI_(BOOL) SHWinHelpOnDemandA(HWND hwnd, LPCSTR pszFile, UINT uCommand, DWORD_PTR dwData, BOOL bUseML);
  1066. LWSTDAPI_(BOOL) WINAPI Shell_GetCachedImageIndexWrapW(LPCWSTR pszIconPath, int iIconIndex, UINT uIconFlags);
  1067. LWSTDAPI_(BOOL) WINAPI Shell_GetCachedImageIndexWrapA(LPCSTR pszIconPath, int iIconIndex, UINT uIconFlags);
  1068. #ifdef UNICODE
  1069. #define SHHtmlHelpOnDemand SHHtmlHelpOnDemandW
  1070. #define SHWinHelpOnDemand SHWinHelpOnDemandW
  1071. #define Shell_GetCachedImageIndexWrap Shell_GetCachedImageIndexWrapW
  1072. #else
  1073. #define SHHtmlHelpOnDemand SHHtmlHelpOnDemandA
  1074. #define SHWinHelpOnDemand SHWinHelpOnDemandA
  1075. #define Shell_GetCachedImageIndexWrap Shell_GetCachedImageIndexWrapA
  1076. #endif
  1077. #ifndef NO_SHLWAPI_STOPWATCH
  1078. //
  1079. //=============== Performance timing macros and prototypes ================
  1080. // StopWatch performance mode flags used in dwFlags param in API's and in Mode key at
  1081. // HKLM\software\microsoft\windows\currentversion\explorer\performance
  1082. // NOTE: low word is used for the mode, high word is used to change the default painter timer interval.
  1083. // If we need more mode bits then we'll need a new reg key for paint timer
  1084. #define SPMODE_SHELL 0x00000001
  1085. #define SPMODE_DEBUGOUT 0x00000002
  1086. #define SPMODE_TEST 0x00000004
  1087. #define SPMODE_BROWSER 0x00000008
  1088. #define SPMODE_FLUSH 0x00000010
  1089. #define SPMODE_EVENT 0x00000020
  1090. #define SPMODE_JAVA 0x00000040
  1091. #define SPMODE_FORMATTEXT 0x00000080
  1092. #define SPMODE_PROFILE 0x00000100
  1093. #define SPMODE_DEBUGBREAK 0x00000200
  1094. #define SPMODE_MSGTRACE 0x00000400
  1095. #define SPMODE_PERFTAGS 0x00000800
  1096. #define SPMODE_MEMWATCH 0x00001000
  1097. #define SPMODE_DBMON 0x00002000
  1098. #define SPMODE_MARS 0x00004000
  1099. #ifndef NO_ETW_TRACING
  1100. #define SPMODE_EVENTTRACE 0x00008000 // Event Tracing for Windows Enabled
  1101. #endif
  1102. #define SPMODE_RESERVED 0xffff0000
  1103. #ifndef NO_ETW_TRACING
  1104. #define SPMODES (SPMODE_SHELL | SPMODE_BROWSER | SPMODE_JAVA | SPMODE_MSGTRACE | SPMODE_MEMWATCH | SPMODE_DBMON | SPMODE_MARS | SPMODE_EVENTTRACE)
  1105. #else
  1106. #define SPMODES (SPMODE_SHELL | SPMODE_BROWSER | SPMODE_JAVA | SPMODE_MSGTRACE | SPMODE_MEMWATCH | SPMODE_DBMON | SPMODE_MARS)
  1107. #endif
  1108. #ifndef NO_ETW_TRACING
  1109. // Event tracing capability enabled by setting the mode to SPMODE_EVENTTRACE and
  1110. // selecting the part of the shell to trace in the "EventTrace" Value in the
  1111. // following key:
  1112. // HKLM\software\microsoft\windows\currentversion\explorer\performance
  1113. // BROWSER TRACING
  1114. // Do not use with SPMODE_BROWSER. If SPMODE_EVENT is used, the
  1115. // STOPWATCH_STOP_EVENT will be signaled when a web page is done loading.
  1116. #define SPTRACE_BROWSER 0x00000001
  1117. // Used to turn on/off browser event tracing. Setting the registry key enables
  1118. // event tracing use, but doesn't turn it on.
  1119. // {5576F62E-4142-45a8-9516-262A510C13F0}
  1120. DEFINE_GUID(c_BrowserControlGuid,
  1121. 0x5576f62e,
  1122. 0x4142,
  1123. 0x45a8,
  1124. 0x95, 0x16, 0x26, 0x2a, 0x51, 0xc, 0x13, 0xf0);
  1125. // Maps to the structure sent to ETW. ETW definition in
  1126. // \nt\sdktools\trace\tracedmp\mofdata.guid
  1127. // {2B992163-736F-4a68-9153-95BC5F34D884}
  1128. DEFINE_GUID(c_BrowserTraceGuid,
  1129. 0x2b992163,
  1130. 0x736f,
  1131. 0x4a68,
  1132. 0x91, 0x53, 0x95, 0xbc, 0x5f, 0x34, 0xd8, 0x84);
  1133. // BROWSING EVENTS
  1134. // See \nt\sdktools\trace\tracedmp\mofdata.guid
  1135. // The page load starts with a user keystroke message
  1136. #define EVENT_TRACE_TYPE_BROWSE_USERINPUTRET 10
  1137. #define EVENT_TRACE_TYPE_BROWSE_USERINPUTBACK 11
  1138. #define EVENT_TRACE_TYPE_BROWSE_USERINPUTLBUT 12
  1139. #define EVENT_TRACE_TYPE_BROWSE_USERINPUTNEXT 13
  1140. #define EVENT_TRACE_TYPE_BROWSE_USERINPUTPRIOR 14
  1141. #define EVENT_TRACE_TYPE_BROWSE_STARTFRAME 16
  1142. #define EVENT_TRACE_TYPE_BROWSE_LOADEDPARSED 18
  1143. #define EVENT_TRACE_TYPE_BROWSE_LAYOUT 19
  1144. #define EVENT_TRACE_TYPE_BROWSE_LAYOUTTASK 20
  1145. #define EVENT_TRACE_TYPE_BROWSE_PAINT 21
  1146. // Url the user types into the address bar.
  1147. #define EVENT_TRACE_TYPE_BROWSE_ADDRESS 22
  1148. #endif
  1149. // StopWatch node types used in memory log to identify the type of node
  1150. #define EMPTY_NODE 0x0
  1151. #define START_NODE 0x1
  1152. #define LAP_NODE 0x2
  1153. #define STOP_NODE 0x3
  1154. #define OUT_OF_NODES 0x4
  1155. // StopWatch timing ids used to identify the type of timing being performed
  1156. #define SWID_STARTUP 0x0
  1157. #define SWID_FRAME 0x1
  1158. #define SWID_COPY 0x2
  1159. #define SWID_TREE 0x3
  1160. #define SWID_BROWSER_FRAME 0x4
  1161. #define SWID_JAVA_APP 0x5
  1162. #define SWID_MENU 0x6
  1163. #define SWID_BITBUCKET 0x7
  1164. #define SWID_EXPLBAR 0x8
  1165. #define SWID_MSGDISPATCH 0x9
  1166. #define SWID_TRACEMSG 0xa
  1167. #define SWID_DBMON_DLLLOAD 0xb
  1168. #define SWID_DBMON_EXCEPTION 0xc
  1169. #define SWID_THUMBVW_CACHEREAD 0xd
  1170. #define SWID_THUMBVW_EXTRACT 0xe
  1171. #define SWID_THUMBVW_CACHEWRITE 0xf
  1172. #define SWID_THUMBVW_FETCH 0x10
  1173. #define SWID_THUMBVW_INIT 0x11
  1174. #define SWID_MASK_BROWSER_STOPBTN 0x8000000 // identifies BROWSER_FRAME stop caused by stop button
  1175. #define SWID_MASKS SWID_MASK_BROWSER_STOPBTN // add any SWID_MASK_* defines here
  1176. #define SWID(dwId) (dwId & (~SWID_MASKS))
  1177. // The following StopWatch messages are used to drive the timer msg handler. The timer proc is used
  1178. // as a means of delaying while watching paint messages. If the defined number of timer ticks has
  1179. // passed without getting any paint messages, then we mark the time of the last paint message we've
  1180. // saved as the stop time.
  1181. #define SWMSG_PAINT 1 // paint message rcvd
  1182. #define SWMSG_TIMER 2 // timer tick
  1183. #define SWMSG_CREATE 3 // init handler and create timer
  1184. #define SWMSG_STATUS 4 // get status of whether timing is active or not
  1185. #define ID_STOPWATCH_TIMER 0xabcd // Timer id
  1186. // Stopwatch defaults
  1187. #define STOPWATCH_MAX_NODES 100
  1188. #define STOPWATCH_DEFAULT_PAINT_INTERVAL 1000
  1189. #define STOPWATCH_DEFAULT_MAX_DISPATCH_TIME 150
  1190. #define STOPWATCH_DEFAULT_MAX_MSG_TIME 1000
  1191. #define STOPWATCH_DEFAULT_MAX_MSG_INTERVAL 50
  1192. #define STOPWATCH_DEFAULT_CLASSNAMES TEXT("Internet Explorer_Server") TEXT("\0") TEXT("SHELLDLL_DefView") TEXT("\0") TEXT("SysListView32") TEXT("\0\0")
  1193. #define MEMWATCH_DEFAULT_PAGES 512
  1194. #define MEMWATCH_DEFAULT_TIME 1000
  1195. #define MEMWATCH_DEFAULT_FLAGS 0
  1196. #ifdef UNICODE
  1197. #define StopWatch StopWatchW
  1198. #define StopWatchEx StopWatchExW
  1199. #else
  1200. #define StopWatch StopWatchA
  1201. #define StopWatchEx StopWatchExA
  1202. #endif
  1203. #define StopWatch_Start(dwId, pszDesc, dwFlags) StopWatch(dwId, pszDesc, START_NODE, dwFlags, 0)
  1204. #define StopWatch_Lap(dwId, pszDesc, dwFlags) StopWatch(dwId, pszDesc, LAP_NODE, dwFlags, 0)
  1205. #define StopWatch_Stop(dwId, pszDesc, dwFlags) StopWatch(dwId, pszDesc, STOP_NODE, dwFlags, 0)
  1206. #define StopWatch_StartTimed(dwId, pszDesc, dwFlags, dwCount) StopWatch(dwId, pszDesc, START_NODE, dwFlags, dwCount)
  1207. #define StopWatch_LapTimed(dwId, pszDesc, dwFlags, dwCount) StopWatch(dwId, pszDesc, LAP_NODE, dwFlags, dwCount)
  1208. #define StopWatch_StopTimed(dwId, pszDesc, dwFlags, dwCount) StopWatch(dwId, pszDesc, STOP_NODE, dwFlags, dwCount)
  1209. #define StopWatch_StartEx(dwId, pszDesc, dwFlags, dwCookie) StopWatchEx(dwId, pszDesc, START_NODE, dwFlags, 0, dwCookie)
  1210. #define StopWatch_LapEx(dwId, pszDesc, dwFlags, dwCookie) StopWatchEx(dwId, pszDesc, LAP_NODE, dwFlags, 0, dwCookie)
  1211. #define StopWatch_StopEx(dwId, pszDesc, dwFlags, dwCookie) StopWatchEx(dwId, pszDesc, STOP_NODE, dwFlags, 0, dwCookie)
  1212. #define StopWatch_StartTimedEx(dwId, pszDesc, dwFlags, dwCount, dwCookie) StopWatchEx(dwId, pszDesc, START_NODE, dwFlags, dwCount, dwCookie)
  1213. #define StopWatch_LapTimedEx(dwId, pszDesc, dwFlags, dwCount, dwCookie) StopWatchEx(dwId, pszDesc, LAP_NODE, dwFlags, dwCount, dwCookie)
  1214. #define StopWatch_StopTimedEx(dwId, pszDesc, dwFlags, dwCount, dwCookie) StopWatchEx(dwId, pszDesc, STOP_NODE, dwFlags, dwCount, dwCookie)
  1215. VOID InitStopWatchMode(VOID);
  1216. // EXPORTED FUNCTIONS
  1217. DWORD WINAPI StopWatchW(DWORD dwId, LPCWSTR pszDesc, DWORD dwType, DWORD dwFlags, DWORD dwCount);
  1218. DWORD WINAPI StopWatchA(DWORD dwId, LPCSTR pszDesc, DWORD dwType, DWORD dwFlags, DWORD dwCount);
  1219. DWORD WINAPI StopWatchExW(DWORD dwId, LPCWSTR pszDesc, DWORD dwType, DWORD dwFlags, DWORD dwCount, DWORD dwUniqueId);
  1220. DWORD WINAPI StopWatchExA(DWORD dwId, LPCSTR pszDesc, DWORD dwType, DWORD dwFlags, DWORD dwCount, DWORD dwUniqueId);
  1221. DWORD WINAPI StopWatchMode(VOID);
  1222. DWORD WINAPI StopWatchFlush(VOID);
  1223. BOOL WINAPI StopWatch_TimerHandler(HWND hwnd, UINT uInc, DWORD dwFlag, MSG *pmsg);
  1224. VOID WINAPI StopWatch_CheckMsg(HWND hwnd, MSG msg, LPCSTR lpStr);
  1225. VOID WINAPI StopWatch_MarkFrameStart(LPCSTR lpExplStr);
  1226. VOID WINAPI StopWatch_MarkSameFrameStart(HWND hwnd);
  1227. VOID WINAPI StopWatch_MarkJavaStop(LPCSTR lpStringToSend, HWND hwnd, BOOL fChType);
  1228. DWORD WINAPI GetPerfTime(VOID);
  1229. VOID WINAPI StopWatch_SetMsgLastLocation(DWORD dwLast);
  1230. DWORD WINAPI StopWatch_DispatchTime(BOOL fStartTime, MSG msg, DWORD dwStart);
  1231. #ifndef NO_ETW_TRACING
  1232. VOID WINAPI EventTraceHandler(UCHAR uchEventType, PVOID pvData);
  1233. #endif
  1234. extern DWORD g_dwStopWatchMode;
  1235. //
  1236. //=============== End Performance timing macros and prototypes ================
  1237. #endif //#ifndef NO_SHLWAPI_STOPWATCH
  1238. #ifndef NO_SHLWAPI_INTERNAL
  1239. //
  1240. //=============== Internal helper routines ===================================
  1241. //
  1242. // Declare some OLE interfaces we need to refer to and which aren't
  1243. // already defined in objbase.h
  1244. //
  1245. #ifndef RC_INVOKED /* { rc doesn't like these long symbol names */
  1246. #ifndef __IOleCommandTarget_FWD_DEFINED__
  1247. #define __IOleCommandTarget_FWD_DEFINED__
  1248. typedef struct IOleCommandTarget IOleCommandTarget;
  1249. #endif /* __IOleCommandTarget_FWD_DEFINED__ */
  1250. #ifndef __IDropTarget_FWD_DEFINED__
  1251. #define __IDropTarget_FWD_DEFINED__
  1252. typedef struct IDropTarget IDropTarget;
  1253. #endif /* __IDropTarget_FWD_DEFINED__ */
  1254. #ifndef __IPropertyBag_FWD_DEFINED__
  1255. #define __IPropertyBag_FWD_DEFINED__
  1256. typedef struct IPropertyBag IPropertyBag;
  1257. #endif /* __IPropertyBag_FWD_DEFINED__ */
  1258. #ifndef __IConnectionPoint_FWD_DEFINED__
  1259. #define __IConnectionPoint_FWD_DEFINED__
  1260. typedef struct IConnectionPoint IConnectionPoint;
  1261. #endif /* __IConnectionPoint_FWD_DEFINED__ */
  1262. #ifdef __cplusplus
  1263. extern "C++" {
  1264. template <typename T>
  1265. void IUnknown_SafeReleaseAndNullPtr(T *& p)
  1266. {
  1267. if (p)
  1268. {
  1269. T *pTemp = p;
  1270. p = NULL;
  1271. pTemp->Release();
  1272. }
  1273. }
  1274. }
  1275. #endif // __cplusplus
  1276. LWSTDAPI_(void) IUnknown_AtomicRelease(void ** ppunk);
  1277. LWSTDAPI_(BOOL) SHIsSameObject(IUnknown* punk1, IUnknown* punk2);
  1278. LWSTDAPI IUnknown_GetWindow(IUnknown* punk, HWND* phwnd);
  1279. LWSTDAPI IUnknown_SetOwner(IUnknown* punk, IUnknown* punkOwner);
  1280. LWSTDAPI IUnknown_SetSite(IUnknown *punk, IUnknown *punkSite);
  1281. LWSTDAPI IUnknown_GetSite(IUnknown *punk, REFIID riid, void **ppvOut);
  1282. LWSTDAPI IUnknown_EnableModeless(IUnknown * punk, BOOL fEnabled);
  1283. LWSTDAPI IUnknown_GetClassID(IUnknown *punk, CLSID *pclsid);
  1284. LWSTDAPI IUnknown_QueryService(IUnknown* punk, REFGUID guidService, REFIID riid, void ** ppvOut);
  1285. LWSTDAPI IUnknown_QueryServiceForWebBrowserApp(IUnknown* punk, REFIID riid, void **ppvOut);
  1286. LWSTDAPI IUnknown_QueryServiceExec(IUnknown* punk, REFGUID guidService, const GUID *guid,
  1287. DWORD cmdID, DWORD cmdParam, VARIANT* pvarargIn, VARIANT* pvarargOut);
  1288. LWSTDAPI IUnknown_ShowBrowserBar(IUnknown* punk, REFCLSID clsidBrowserBar, BOOL fShow);
  1289. LWSTDAPI IUnknown_HandleIRestrict(IUnknown * punk, const GUID * pguidID, DWORD dwRestrictAction, VARIANT * pvarArgs, DWORD * pdwRestrictionResult);
  1290. LWSTDAPI IUnknown_OnFocusOCS(IUnknown *punk, BOOL fGotFocus);
  1291. LWSTDAPI IUnknown_TranslateAcceleratorOCS(IUnknown *punk, LPMSG lpMsg, DWORD grfMods);
  1292. LWSTDAPI_(void) IUnknown_Set(IUnknown ** ppunk, IUnknown * punk);
  1293. LWSTDAPI IUnknown_ProfferService(IUnknown *punkSite,
  1294. REFGUID sidWhat, IServiceProvider *punkService,
  1295. DWORD *pdwCookie);
  1296. LWSTDAPI IUnknown_QueryServicePropertyBag(IUnknown* punk, DWORD dwFlags, REFIID riid, void ** ppvOut);
  1297. LWSTDAPI IUnknown_TranslateAcceleratorIO(IUnknown* punk, LPMSG lpMsg);
  1298. LWSTDAPI IUnknown_UIActivateIO(IUnknown *punk, BOOL fActivate, LPMSG lpMsg);
  1299. LWSTDAPI IUnknown_OnFocusChangeIS(IUnknown *punk, IUnknown *punkSrc, BOOL fSetFocus);
  1300. LWSTDAPI IUnknown_HasFocusIO(IUnknown *punk);
  1301. LWSTDAPI SHWeakQueryInterface(IUnknown *punkOuter, IUnknown *punkTarget, REFIID riid, void **ppvOut);
  1302. LWSTDAPI_(void) SHWeakReleaseInterface(IUnknown *punkOuter, IUnknown **ppunk);
  1303. #define IUnknown_EnableModless IUnknown_EnableModeless
  1304. // Helper macros for the Weak interface functions.
  1305. #define SHQueryInnerInterface SHWeakQueryInterface
  1306. #define SHReleaseInnerInterface SHWeakReleaseInterface
  1307. #define SHReleaseOuterInterface SHWeakReleaseInterface
  1308. __inline HRESULT SHQueryOuterInterface(IUnknown *punkOuter, REFIID riid, void **ppvOut)
  1309. {
  1310. return SHWeakQueryInterface(punkOuter, punkOuter, riid, ppvOut);
  1311. }
  1312. #if (_WIN32_IE >= 0x0600)
  1313. // App compat-aware CoCreateInstance
  1314. LWSTDAPI SHCoCreateInstanceAC(REFCLSID rclsid,
  1315. IUnknown *punkOuter, DWORD dwClsCtx,
  1316. REFIID riid, void **ppvOut);
  1317. #endif // (_WIN32_IE >= 0x0600)
  1318. #if defined(__IOleAutomationTypes_INTERFACE_DEFINED__) && \
  1319. defined(__IOleCommandTarget_INTERFACE_DEFINED__)
  1320. LWSTDAPI IUnknown_QueryStatus(IUnknown *punk, const GUID *pguidCmdGroup, ULONG cCmds, OLECMD rgCmds[], OLECMDTEXT *pcmdtext);
  1321. LWSTDAPI IUnknown_Exec(IUnknown* punk, const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut);
  1322. // Some of the many connection point helper functions available in
  1323. // connect.cpp. We export only the ones people actually use. If
  1324. // you need a helper function, maybe it's already in connect.cpp
  1325. // and merely needs to be exported.
  1326. LWSTDAPI SHPackDispParamsV(DISPPARAMS * pdispparams, VARIANTARG *rgvt,
  1327. UINT cArgs, va_list arglist);
  1328. LWSTDAPIV SHPackDispParams(DISPPARAMS * pdispparams, VARIANTARG *rgvt,
  1329. UINT cArgs, ...);
  1330. typedef HRESULT (CALLBACK *SHINVOKECALLBACK)(IDispatch *pdisp, struct SHINVOKEPARAMS *pinv);
  1331. #include <pshpack1.h>
  1332. typedef struct SHINVOKEPARAMS {
  1333. UINT flags; // mandatory
  1334. DISPID dispidMember; // mandatory
  1335. const IID*piid; // IPFL_USEDEFAULTS will fill this in
  1336. LCID lcid; // IPFL_USEDEFAULTS will fill this in
  1337. WORD wFlags; // IPFL_USEDEFAULTS will fill this in
  1338. DISPPARAMS * pdispparams; // mandatory, may be NULL
  1339. VARIANT * pvarResult; // IPFL_USEDEFAULTS will fill this in
  1340. EXCEPINFO * pexcepinfo; // IPFL_USEDEFAULTS will fill this in
  1341. UINT * puArgErr; // IPFL_USEDEFAULTS will fill this in
  1342. SHINVOKECALLBACK Callback; // required if IPFL_USECALLBACK
  1343. } SHINVOKEPARAMS, *LPSHINVOKEPARAMS;
  1344. #include <poppack.h> /* Return to byte packing */
  1345. #define IPFL_USECALLBACK 0x0001
  1346. #define IPFL_USEDEFAULTS 0x0002
  1347. #if 0 // These functions not yet needed
  1348. LWSTDAPI IConnectionPoint_InvokeIndirect(IConnectionPoint *pcp,
  1349. SHINVOKEPARAMS *pinv);
  1350. #endif
  1351. LWSTDAPI IConnectionPoint_InvokeWithCancel(IConnectionPoint *pcp,
  1352. DISPID dispidMember, DISPPARAMS * pdispparams,
  1353. LPBOOL pfCancel, LPVOID *ppvCancel);
  1354. LWSTDAPI IConnectionPoint_SimpleInvoke(IConnectionPoint *pcp,
  1355. DISPID dispidMember, DISPPARAMS * pdispparams);
  1356. #if 0 // These functions not yet needed
  1357. LWSTDAPI IConnectionPoint_InvokeParamV(IConnectionPoint *pcp,
  1358. DISPID dispidMember, VARIANTARG *rgvarg,
  1359. UINT cArgs, va_list ap);
  1360. LWSTDAPIV IConnectionPoint_InvokeParam(IConnectionPoint *pcp,
  1361. DISPID dispidMember, VARIANTARG *rgvarg, UINT cArgs, ...)
  1362. #endif
  1363. LWSTDAPI IConnectionPoint_OnChanged(IConnectionPoint *pcp, DISPID dispid);
  1364. #if 0 // These functions not yet needed
  1365. LWSTDAPI IUnknown_FindConnectionPoint(IUnknown *punk,
  1366. REFIID riidCP, IConnectionPoint **pcpOut);
  1367. #endif
  1368. LWSTDAPI IUnknown_CPContainerInvokeIndirect(IUnknown *punk, REFIID riidCP,
  1369. SHINVOKEPARAMS *pinv);
  1370. LWSTDAPIV IUnknown_CPContainerInvokeParam(IUnknown *punk, REFIID riidCP,
  1371. DISPID dispidMember, VARIANTARG *rgvarg, UINT cArgs, ...);
  1372. LWSTDAPI IUnknown_CPContainerOnChanged(IUnknown *punk, DISPID dispid);
  1373. #endif /* IOleAutomationTypes && IOleCommandTarget */
  1374. #endif /* } !RC_INVOKED */
  1375. LWSTDAPI IStream_Read(IStream *pstm, void *pv, ULONG cb);
  1376. LWSTDAPI IStream_Write(IStream *pstm, const void *pv, ULONG cb);
  1377. LWSTDAPI IStream_Reset(IStream *pstm);
  1378. LWSTDAPI IStream_Size(IStream *pstm, ULARGE_INTEGER *pui);
  1379. LWSTDAPI IStream_WritePidl(IStream *pstm, LPCITEMIDLIST pidlWrite);
  1380. LWSTDAPI IStream_ReadPidl(IStream *pstm, LPITEMIDLIST *ppidlOut);
  1381. LWSTDAPI_(BOOL) SHIsEmptyStream(IStream* pstm);
  1382. LWSTDAPI SHSimulateDrop(IDropTarget *pdrop, IDataObject *pdtobj, DWORD grfKeyState,
  1383. const POINTL *ppt, DWORD *pdwEffect);
  1384. LWSTDAPI SHLoadFromPropertyBag(IUnknown* punk, IPropertyBag* ppg);
  1385. LWSTDAPI ConnectToConnectionPoint(IUnknown* punkThis, REFIID riidEvent, BOOL fConnect, IUnknown* punkTarget, DWORD* pdwCookie, IConnectionPoint** ppcpOut);
  1386. LWSTDAPI SHCreatePropertyBagOnRegKey(HKEY hk, LPCWSTR pszSubKey, DWORD grfMode, REFIID riid, void **ppv);
  1387. LWSTDAPI SHCreatePropertyBagOnProfileSection(LPCWSTR pszFile, LPCWSTR pszSection, DWORD grfMode, REFIID riid, void **ppv);
  1388. LWSTDAPI SHCreatePropertyBagOnMemory(DWORD grfMode, REFIID riid, void **ppv);
  1389. LWSTDAPI SHPropertyBag_ReadType(IPropertyBag* ppb, LPCWSTR pszPropName, VARIANT* pv, VARTYPE vt);
  1390. LWSTDAPI SHPropertyBag_ReadStr(IPropertyBag* ppb, LPCWSTR pwzPropName, LPWSTR psz, int cch);
  1391. LWSTDAPI SHPropertyBag_ReadBSTR(IPropertyBag *ppb, LPCWSTR pwzPropName, BSTR* pbstr);
  1392. LWSTDAPI SHPropertyBag_WriteStr(IPropertyBag* ppb, LPCWSTR pwzPropName, LPCWSTR psz);
  1393. LWSTDAPI SHPropertyBag_ReadInt(IPropertyBag* ppb, LPCWSTR pwzPropName, INT* piResult);
  1394. LWSTDAPI SHPropertyBag_WriteInt(IPropertyBag* ppb, LPCWSTR pwzPropName, INT iValue);
  1395. LWSTDAPI SHPropertyBag_ReadSHORT(IPropertyBag* ppb, LPCWSTR pwzPropName, SHORT* psh);
  1396. LWSTDAPI SHPropertyBag_WriteSHORT(IPropertyBag* ppb, LPCWSTR pwzPropName, SHORT sh);
  1397. LWSTDAPI SHPropertyBag_ReadLONG(IPropertyBag* ppb, LPCWSTR pwzPropName, LONG* pl);
  1398. LWSTDAPI SHPropertyBag_WriteLONG(IPropertyBag* ppb, LPCWSTR pwzPropName, LONG l);
  1399. LWSTDAPI SHPropertyBag_ReadDWORD(IPropertyBag* ppb, LPCWSTR pwzPropName, DWORD* pdw);
  1400. LWSTDAPI SHPropertyBag_WriteDWORD(IPropertyBag* ppb, LPCWSTR pwzPropName, DWORD dw);
  1401. LWSTDAPI SHPropertyBag_ReadBOOL(IPropertyBag* ppb, LPCWSTR pwzPropName, BOOL* pfResult);
  1402. LWSTDAPI SHPropertyBag_WriteBOOL(IPropertyBag* ppb, LPCWSTR pwzPropName, BOOL fValue);
  1403. LWSTDAPI SHPropertyBag_ReadGUID(IPropertyBag* ppb, LPCWSTR pwzPropName, GUID* pguid);
  1404. LWSTDAPI SHPropertyBag_WriteGUID(IPropertyBag* ppb, LPCWSTR pwzPropName, const GUID* pguid);
  1405. LWSTDAPI SHPropertyBag_ReadPIDL(IPropertyBag *ppb, LPCWSTR pwzPropName, LPITEMIDLIST* ppidl);
  1406. LWSTDAPI SHPropertyBag_WritePIDL(IPropertyBag *ppb, LPCWSTR pwzPropName, LPCITEMIDLIST pidl);
  1407. LWSTDAPI SHPropertyBag_ReadPOINTL(IPropertyBag* ppb, LPCWSTR pwzPropName, POINTL* ppt);
  1408. LWSTDAPI SHPropertyBag_WritePOINTL(IPropertyBag* ppb, LPCWSTR pwzPropName, const POINTL* ppt);
  1409. LWSTDAPI SHPropertyBag_ReadPOINTS(IPropertyBag* ppb, LPCWSTR pwzPropName, POINTS* ppt);
  1410. LWSTDAPI SHPropertyBag_WritePOINTS(IPropertyBag* ppb, LPCWSTR pwzPropName, const POINTS* ppt);
  1411. LWSTDAPI SHPropertyBag_ReadRECTL(IPropertyBag* ppb, LPCWSTR pwzPropName, RECTL* prc);
  1412. LWSTDAPI SHPropertyBag_WriteRECTL(IPropertyBag* ppb, LPCWSTR pwzPropName, const RECTL* prc);
  1413. LWSTDAPI SHPropertyBag_ReadStream(IPropertyBag* ppb, LPCWSTR pwzPropName, IStream** ppstm);
  1414. LWSTDAPI SHPropertyBag_WriteStream(IPropertyBag* ppb, LPCWSTR pwzPropName, IStream* pstm);
  1415. LWSTDAPI SHPropertyBag_Delete(IPropertyBag* ppb, LPCWSTR pszPropName);
  1416. // Doc'ed for DOJ compliance
  1417. LWSTDAPI_(ULONG) SHGetPerScreenResName(WCHAR* pszRes, ULONG cch, DWORD dwVersion);
  1418. //
  1419. // SH(Get/Set)IniStringUTF7
  1420. //
  1421. // These are just like Get/WriteProfileString except that if the KeyName
  1422. // begins with SZ_CANBEUNICODE, we will use SHGetIniString instead of
  1423. // the profile functions. (The SZ_CANBEUNICODE will be stripped off
  1424. // before calling SHGetIniString.) This allows us to stash unicode
  1425. // strings into INI files (which are ASCII) by encoding them as UTF7.
  1426. //
  1427. // In other words, SHGetIniStringUTF7("Settings", SZ_CANBEUNICODE "Name", ...)
  1428. // will read from section "Settings", key name "Name", but will also
  1429. // look at the UTF7-encoded version stashed in the "Settings.W" section.
  1430. //
  1431. #define CH_CANBEUNICODEW L'@'
  1432. LWSTDAPI_(DWORD) SHGetIniStringUTF7W(LPCWSTR lpSection, LPCWSTR lpKey, LPWSTR lpBuf, DWORD nSize, LPCWSTR lpFile);
  1433. LWSTDAPI_(BOOL) SHSetIniStringUTF7W(LPCWSTR lpSection, LPCWSTR lpKey, LPCWSTR lpString, LPCWSTR lpFile);
  1434. #ifdef UNICODE
  1435. #define SZ_CANBEUNICODE TEXT("@")
  1436. #define SHSetIniStringUTF7 SHSetIniStringUTF7W
  1437. #define SHGetIniStringUTF7 SHGetIniStringUTF7W
  1438. #else
  1439. #define SZ_CANBEUNICODE TEXT("")
  1440. #define SHGetIniStringUTF7(lpSection, lpKey, lpBuf, nSize, lpFile) \
  1441. GetPrivateProfileStringA(lpSection, lpKey, "", lpBuf, nSize, lpFile)
  1442. #define SHSetIniStringUTF7 WritePrivateProfileStringA
  1443. #endif
  1444. /*
  1445. * Like PrivateProfileString except that UNICODE strings are encoded so they
  1446. * will successfully round-trip.
  1447. */
  1448. LWSTDAPI_(DWORD) SHGetIniStringW(LPCWSTR lpSection, LPCWSTR lpKey, LPWSTR lpBuf, DWORD nSize, LPCWSTR lpFile);
  1449. #define SHGetIniStringA(lpSection, lpKey, lpBuf, nSize, lpFile) \
  1450. GetPrivateProfileStringA(lpSection, lpKey, "", lpBuf, nSize, lpFile)
  1451. LWSTDAPI_(BOOL) SHSetIniStringW(LPCWSTR lpSection, LPCWSTR lpKey, LPCWSTR lpString, LPCWSTR lpFile);
  1452. #define SHSetIniStringA WritePrivateProfileStringA
  1453. LWSTDAPI CreateURLFileContentsW(LPCWSTR pwszUrl, LPSTR *ppszOut);
  1454. LWSTDAPI CreateURLFileContentsA(LPCSTR pszUrl, LPSTR *ppszOut);
  1455. #ifdef UNICODE
  1456. #define SHGetIniString SHGetIniStringW
  1457. #define SHSetIniString SHSetIniStringW
  1458. #define CreateURLFileContents CreateURLFileContentsW
  1459. #else
  1460. #define SHGetIniString SHGetIniStringA
  1461. #define SHSetIniString SHSetIniStringA
  1462. #define CreateURLFileContents CreateURLFileContentsA
  1463. #endif // UNICODE
  1464. #define ISHGDN2_CANREMOVEFORPARSING 0x0001
  1465. LWSTDAPI IShellFolder_GetDisplayNameOf(struct IShellFolder *psf,
  1466. LPCITEMIDLIST pidl, DWORD uFlags, STRRET *pstr, DWORD dwFlags2);
  1467. LWSTDAPI IShellFolder_ParseDisplayName(struct IShellFolder *psf, HWND hwnd,
  1468. struct IBindCtx *pbc, LPWSTR pszDisplayName, ULONG *pchEaten,
  1469. LPITEMIDLIST *ppidl, ULONG *pdwAttributes);
  1470. LWSTDAPI IShellFolder_CompareIDs(struct IShellFolder *psf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2);
  1471. LWSTDAPI IShellFolder_EnumObjects(struct IShellFolder *psf, HWND hwnd,
  1472. DWORD grfFlags, struct IEnumIDList **ppenumIDList);
  1473. LWSTDAPI_(BOOL) SHIsExpandableFolder(struct IShellFolder *psf, LPCITEMIDLIST pidl);
  1474. LWSTDAPI IContextMenu_Invoke(struct IContextMenu* pcm, HWND hwndOwner, LPCSTR pVerb, UINT fFlags);
  1475. #ifdef UNICODE
  1476. // SHTruncateString takes a BUFFER SIZE, so subtract 1 to properly null terminate.
  1477. //
  1478. #define SHTruncateString(wzStr, cch) ((cch) ? ((wzStr)[cch-1]=L'\0', (cch-1)) : 0)
  1479. #else
  1480. LWSTDAPI_(int) SHTruncateString(CHAR *sz, int cchBufferSize);
  1481. #endif // UNICODE
  1482. // SHFormatDateTime flags
  1483. // (FDTF_SHORTDATE and FDTF_LONGDATE are mutually exclusive, as is
  1484. // FDTF_SHORTIME and FDTF_LONGTIME.)
  1485. //
  1486. #define FDTF_SHORTTIME 0x00000001 // eg, "7:48 PM"
  1487. #define FDTF_SHORTDATE 0x00000002 // eg, "3/29/98"
  1488. #define FDTF_DEFAULT (FDTF_SHORTDATE | FDTF_SHORTTIME) // eg, "3/29/98 7:48 PM"
  1489. #define FDTF_LONGDATE 0x00000004 // eg, "Monday, March 29, 1998"
  1490. #define FDTF_LONGTIME 0x00000008 // eg. "7:48:33 PM"
  1491. #define FDTF_RELATIVE 0x00000010 // uses "Yesterday", etc. if possible
  1492. #define FDTF_LTRDATE 0x00000100 // Left To Right reading order
  1493. #define FDTF_RTLDATE 0x00000200 // Right To Left reading order
  1494. LWSTDAPI_(int) SHFormatDateTimeA(const FILETIME UNALIGNED * pft, DWORD * pdwFlags, LPSTR pszBuf, UINT cchBuf);
  1495. LWSTDAPI_(int) SHFormatDateTimeW(const FILETIME UNALIGNED * pft, DWORD * pdwFlags, LPWSTR pszBuf, UINT cchBuf);
  1496. #ifdef UNICODE
  1497. #define SHFormatDateTime SHFormatDateTimeW
  1498. #else
  1499. #define SHFormatDateTime SHFormatDateTimeA
  1500. #endif // !UNICODE
  1501. LWSTDAPI_(SECURITY_ATTRIBUTES*) SHGetAllAccessSA();
  1502. LWSTDAPI_(int) SHAnsiToUnicode(LPCSTR pszSrc, LPWSTR pwszDst, int cwchBuf);
  1503. LWSTDAPI_(int) SHAnsiToUnicodeCP(UINT uiCP, LPCSTR pszSrc, LPWSTR pwszDst, int cwchBuf);
  1504. LWSTDAPI_(int) SHAnsiToAnsi(LPCSTR pszSrc, LPSTR pszDst, int cchBuf);
  1505. LWSTDAPI_(int) SHUnicodeToAnsi(LPCWSTR pwszSrc, LPSTR pszDst, int cchBuf);
  1506. LWSTDAPI_(int) SHUnicodeToAnsiCP(UINT uiCP, LPCWSTR pwszSrc, LPSTR pszDst, int cchBuf);
  1507. LWSTDAPI_(int) SHUnicodeToUnicode(LPCWSTR pwzSrc, LPWSTR pwzDst, int cwchBuf);
  1508. LWSTDAPI_(BOOL) DoesStringRoundTripA(LPCSTR pwszIn, LPSTR pszOut, UINT cchOut);
  1509. LWSTDAPI_(BOOL) DoesStringRoundTripW(LPCWSTR pwszIn, LPSTR pszOut, UINT cchOut);
  1510. #ifdef UNICODE
  1511. #define DoesStringRoundTrip DoesStringRoundTripW
  1512. #else
  1513. #define DoesStringRoundTrip DoesStringRoundTripA
  1514. #endif
  1515. // The return value from all SH<Type>To<Type> is the size of szDest including the terminater.
  1516. #ifdef UNICODE
  1517. #define SHTCharToUnicode(wzSrc, wzDest, cchSize) SHUnicodeToUnicode(wzSrc, wzDest, cchSize)
  1518. #define SHTCharToUnicodeCP(uiCP, wzSrc, wzDest, cchSize) SHUnicodeToUnicode(wzSrc, wzDest, cchSize)
  1519. #define SHTCharToAnsi(wzSrc, szDest, cchSize) SHUnicodeToAnsi(wzSrc, szDest, cchSize)
  1520. #define SHTCharToAnsiCP(uiCP, wzSrc, szDest, cchSize) SHUnicodeToAnsiCP(uiCP, wzSrc, szDest, cchSize)
  1521. #define SHUnicodeToTChar(wzSrc, wzDest, cchSize) SHUnicodeToUnicode(wzSrc, wzDest, cchSize)
  1522. #define SHUnicodeToTCharCP(uiCP, wzSrc, wzDest, cchSize) SHUnicodeToUnicode(wzSrc, wzDest, cchSize)
  1523. #define SHAnsiToTChar(szSrc, wzDest, cchSize) SHAnsiToUnicode(szSrc, wzDest, cchSize)
  1524. #define SHAnsiToTCharCP(uiCP, szSrc, wzDest, cchSize) SHAnsiToUnicodeCP(uiCP, szSrc, wzDest, cchSize)
  1525. #define SHOtherToTChar(szSrc, szDest, cchSize) SHAnsiToUnicode(szSrc, szDest, cchSize)
  1526. #define SHTCharToOther(szSrc, szDest, cchSize) SHUnicodeToAnsi(szSrc, szDest, cchSize)
  1527. #else // UNICODE
  1528. #define SHTCharToUnicode(szSrc, wzDest, cchSize) SHAnsiToUnicode(szSrc, wzDest, cchSize)
  1529. #define SHTCharToUnicodeCP(uiCP, szSrc, wzDest, cchSize) SHAnsiToUnicodeCP(uiCP, szSrc, wzDest, cchSize)
  1530. #define SHTCharToAnsi(szSrc, szDest, cchSize) SHAnsiToAnsi(szSrc, szDest, cchSize)
  1531. #define SHTCharToAnsiCP(uiCP, szSrc, szDest, cchSize) SHAnsiToAnsi(szSrc, szDest, cchSize)
  1532. #define SHUnicodeToTChar(wzSrc, szDest, cchSize) SHUnicodeToAnsi(wzSrc, szDest, cchSize)
  1533. #define SHUnicodeToTCharCP(uiCP, wzSrc, szDest, cchSize) SHUnicodeToAnsiCP(uiCP, wzSrc, szDest, cchSize)
  1534. #define SHAnsiToTChar(szSrc, szDest, cchSize) SHAnsiToAnsi(szSrc, szDest, cchSize)
  1535. #define SHAnsiToTCharCP(uiCP, szSrc, szDest, cchSize) SHAnsiToAnsi(szSrc, szDest, cchSize)
  1536. #define SHOtherToTChar(szSrc, szDest, cchSize) SHUnicodeToAnsi(szSrc, szDest, cchSize)
  1537. #define SHTCharToOther(szSrc, szDest, cchSize) SHAnsiToUnicode(szSrc, szDest, cchSize)
  1538. #endif // UNICODE
  1539. // Internal HRESULT-to-help-topic mapping structure
  1540. typedef struct _tagHRESULTHELPMAPPING
  1541. {
  1542. HRESULT hr;
  1543. LPCSTR szHelpFile;
  1544. LPCSTR szHelpTopic;
  1545. } HRESULTHELPMAPPING;
  1546. LWSTDAPI_(BOOL) SHRegisterClassA(const WNDCLASSA* pwc);
  1547. LWSTDAPI_(BOOL) SHRegisterClassW(const WNDCLASSW* pwc);
  1548. LWSTDAPI_(void) SHUnregisterClassesA(HINSTANCE hinst, const LPCSTR *rgpszClasses, UINT cpsz);
  1549. LWSTDAPI_(void) SHUnregisterClassesW(HINSTANCE hinst, const LPCWSTR *rgpszClasses, UINT cpsz);
  1550. LWSTDAPI_(int) SHMessageBoxHelpW(HWND hwnd, LPCWSTR pszText, LPCWSTR pszCaption, UINT uType, HRESULT hrErr, HRESULTHELPMAPPING* prghhm, DWORD chhm);
  1551. LWSTDAPI_(int) SHMessageBoxHelpA(HWND hwnd, LPCSTR pszText, LPCSTR pszCaption, UINT uType, HRESULT hrErr, HRESULTHELPMAPPING* prghhm, DWORD chhm);
  1552. LWSTDAPI_(int) SHMessageBoxCheckW(HWND hwnd, LPCWSTR pszText, LPCWSTR pszCaption, UINT uType, int iDefault, LPCWSTR pszRegVal);
  1553. LWSTDAPI_(int) SHMessageBoxCheckA(HWND hwnd, LPCSTR pszText, LPCSTR pszCaption, UINT uType, int iDefault, LPCSTR pszRegVal);
  1554. LWSTDAPI_(void) SHRestrictedMessageBox(HWND hwnd);
  1555. LWSTDAPI_(HMENU) SHGetMenuFromID(HMENU hmMain, UINT uID);
  1556. LWSTDAPI_(int) SHMenuIndexFromID(HMENU hm, UINT id);
  1557. LWSTDAPI_(void) SHRemoveDefaultDialogFont(HWND hDlg);
  1558. LWSTDAPI_(void) SHSetDefaultDialogFont(HWND hDlg, int idCtl);
  1559. LWSTDAPI_(void) SHRemoveAllSubMenus(HMENU hmenu);
  1560. LWSTDAPI_(void) SHEnableMenuItem(HMENU hmenu, UINT id, BOOL fEnable);
  1561. LWSTDAPI_(void) SHCheckMenuItem(HMENU hmenu, UINT id, BOOL fChecked);
  1562. LWSTDAPI_(DWORD) SHSetWindowBits(HWND hWnd, int iWhich, DWORD dwBits, DWORD dwValue);
  1563. LWSTDAPI_(HMENU) SHLoadMenuPopup(HINSTANCE hinst, UINT id);
  1564. #define SPM_POST 0x0000
  1565. #define SPM_SEND 0x0001
  1566. #define SPM_ONELEVEL 0x0002 // default: send to all descendants including grandkids, etc.
  1567. LWSTDAPI_(void) SHPropagateMessage(HWND hwndParent, UINT uMsg, WPARAM wParam, LPARAM lParam, int iFlags);
  1568. LWSTDAPI_(void) SHSetParentHwnd(HWND hwnd, HWND hwndParent);
  1569. LWSTDAPI_(UINT) SHGetCurColorRes();
  1570. LWSTDAPI_(DWORD) SHWaitForSendMessageThread(HANDLE hThread, DWORD dwTimeout);
  1571. LWSTDAPI SHWaitForCOMSendMessageThread(HANDLE hThread, DWORD dwTimeout);
  1572. LWSTDAPI_(BOOL) SHVerbExistsNA(LPCSTR szExtension, LPCSTR pszVerb, LPSTR pszCommand, DWORD cchCommand);
  1573. LWSTDAPI_(void) SHFillRectClr(HDC hdc, LPRECT prc, COLORREF clr);
  1574. LWSTDAPI_(int) SHSearchMapInt(const int *src, const int *dst, int cnt, int val);
  1575. LWSTDAPI_(CHAR) SHStripMneumonicA(LPSTR pszMenu);
  1576. LWSTDAPI_(WCHAR) SHStripMneumonicW(LPWSTR pszMenu);
  1577. LWSTDAPI SHIsChildOrSelf(HWND hwndParent, HWND hwnd);
  1578. LWSTDAPI_(DWORD) SHGetValueGoodBootA(HKEY hkeyParent, LPCSTR pcszSubKey,
  1579. LPCSTR pcszValue, PDWORD pdwValueType,
  1580. PBYTE pbyteBuf, PDWORD pdwcbBufLen);
  1581. LWSTDAPI_(DWORD) SHGetValueGoodBootW(HKEY hkeyParent, LPCWSTR pcwzSubKey,
  1582. LPCWSTR pcwzValue, PDWORD pdwValueType,
  1583. PBYTE pbyteBuf, PDWORD pdwcbBufLen);
  1584. LWSTDAPI_(LRESULT) SHDefWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
  1585. LWSTDAPI_(BOOL) SHGetFileDescriptionA(LPCSTR pszPath, LPCSTR pszVersionKeyIn, LPCSTR pszCutListIn, LPSTR pszDesc, UINT *pcchDesc);
  1586. LWSTDAPI_(BOOL) SHGetFileDescriptionW(LPCWSTR pszPath, LPCWSTR pszVersionKeyIn, LPCWSTR pszCutListIn, LPWSTR pszDesc, UINT *pcchDesc);
  1587. #ifdef UNICODE
  1588. #define SHGetFileDescription SHGetFileDescriptionW
  1589. #else
  1590. #define SHGetFileDescription SHGetFileDescriptionA
  1591. #endif // !UNICODE
  1592. LWSTDAPI_(int) SHMessageBoxCheckExA(HWND hwnd, HINSTANCE hinst, LPCSTR pszTemplateName, DLGPROC pDlgProc, LPVOID pData, int iDefault, LPCSTR pszRegVal);
  1593. LWSTDAPI_(int) SHMessageBoxCheckExW(HWND hwnd, HINSTANCE hinst, LPCWSTR pszTemplateName, DLGPROC pDlgProc, LPVOID pData, int iDefault, LPCWSTR pszRegVal);
  1594. #ifdef UNICODE
  1595. #define SHMessageBoxCheckEx SHMessageBoxCheckExW
  1596. #else
  1597. #define SHMessageBoxCheckEx SHMessageBoxCheckExA
  1598. #endif // !UNICODE
  1599. #define IDC_MESSAGEBOXCHECKEX 0x1202
  1600. // Prevents shell hang do to hung window on broadcast
  1601. LWSTDAPI_(LRESULT) SHSendMessageBroadcastA(UINT uMsg, WPARAM wParam, LPARAM lParam);
  1602. // Prevents shell hang do to hung window on broadcast
  1603. LWSTDAPI_(LRESULT) SHSendMessageBroadcastW(UINT uMsg, WPARAM wParam, LPARAM lParam);
  1604. #ifdef UNICODE
  1605. #define SHSendMessageBroadcast SHSendMessageBroadcastW
  1606. #else
  1607. #define SHSendMessageBroadcast SHSendMessageBroadcastA
  1608. #endif // !UNICODE
  1609. #ifdef UNICODE
  1610. #define SHGetValueGoodBoot SHGetValueGoodBootW
  1611. #define SHStripMneumonic SHStripMneumonicW
  1612. #define SHMessageBoxHelp SHMessageBoxHelpW
  1613. #define SHMessageBoxCheck SHMessageBoxCheckW
  1614. #define SHRegisterClass SHRegisterClassW
  1615. #define SHUnregisterClasses SHUnregisterClassesW
  1616. #define SHSendMessageBroadcast SHSendMessageBroadcastW
  1617. #else // UNICODE
  1618. #define SHGetValueGoodBoot SHGetValueGoodBootA
  1619. #define SHStripMneumonic SHStripMneumonicA
  1620. #define SHMessageBoxHelp SHMessageBoxHelpA
  1621. #define SHMessageBoxCheck SHMessageBoxCheckA
  1622. #define SHRegisterClass SHRegisterClassA
  1623. #define SHUnregisterClasses SHUnregisterClassesA
  1624. #define SHSendMessageBroadcast SHSendMessageBroadcastA
  1625. #endif // UNICODE
  1626. // old IsOS() flags -- don't use these
  1627. // we have to keep them public since we shipped them in win2k
  1628. #define OS_MEMPHIS OS_WIN98ORGREATER // don't use this
  1629. #define OS_MEMPHIS_GOLD OS_WIN98_GOLD // don't use this
  1630. #define OS_WIN95GOLD OS_WIN95_GOLD
  1631. #define OS_WIN2000EMBED OS_EMBEDDED
  1632. #define OS_WIN2000 OS_WIN2000ORGREATER // lame, but IsOS(WIN2000) meant >= win2k
  1633. #define OS_WIN95 OS_WIN95ORGREATER // lame, but IsOS(WIN95) meant >= win95
  1634. #define OS_NT4 OS_NT4ORGREATER // lame, but IsOS(NT4) meant >= NT4
  1635. #define OS_NT5 OS_WIN2000ORGREATER // lame, but IsOS(NT5) meant >= wink2
  1636. #define OS_WIN98 OS_WIN98ORGREATER // lame, but IsOS(OS_WIN98) meant >= win98
  1637. #define OS_MILLENNIUM OS_MILLENNIUMORGREATER // lame, but IsOS(OS_MILLENNIUM) meant >= winMe
  1638. // end old flags
  1639. // Returns TRUE/FALSE depending on question
  1640. #define OS_WINDOWS 0 // windows vs. NT
  1641. #define OS_NT 1 // windows vs. NT
  1642. #define OS_WIN95ORGREATER 2 // Win95 or greater
  1643. #define OS_NT4ORGREATER 3 // NT4 or greater
  1644. // don't use (used to be OS_NT5) 4 // this flag is redundant w/ OS_WIN2000ORGREATER, use that instead
  1645. #define OS_WIN98ORGREATER 5 // Win98 or greater
  1646. #define OS_WIN98_GOLD 6 // Win98 Gold (Version 4.10 build 1998)
  1647. #define OS_WIN2000ORGREATER 7 // Some derivative of Win2000
  1648. // NOTE: these flags are bogus, they check explicitly for (dwMajorVersion == 5) so they will fail when majorversion is bumped to 6
  1649. // !!! DO NOT USE THESE FLAGS !!!
  1650. #define OS_WIN2000PRO 8 // Windows 2000 Professional (Workstation)
  1651. #define OS_WIN2000SERVER 9 // Windows 2000 Server
  1652. #define OS_WIN2000ADVSERVER 10 // Windows 2000 Advanced Server
  1653. #define OS_WIN2000DATACENTER 11 // Windows 2000 Data Center Server
  1654. #define OS_WIN2000TERMINAL 12 // Windows 2000 Terminal Server in "Application Server" mode (now simply called "Terminal Server")
  1655. // END bogus flags
  1656. #define OS_EMBEDDED 13 // Embedded Windows Edition
  1657. #define OS_TERMINALCLIENT 14 // Windows Terminal Client (eg user is comming in via tsclient)
  1658. #define OS_TERMINALREMOTEADMIN 15 // Terminal Server in "Remote Administration" mode
  1659. #define OS_WIN95_GOLD 16 // Windows 95 Gold (Version 4.0 Build 1995)
  1660. #define OS_MILLENNIUMORGREATER 17 // Windows Millennium (Version 5.0)
  1661. #define OS_WHISTLERORGREATER 18 // Whistler or greater
  1662. #define OS_PERSONAL 19 // Personal (eg NOT Professional, Server, Advanced Server, or Datacenter)
  1663. #if (_WIN32_IE >= 0x0600)
  1664. #define OS_PROFESSIONAL 20 // Professional (aka Workstation; eg NOT Server, Advanced Server, or Datacenter)
  1665. #define OS_DATACENTER 21 // Datacenter (eg NOT Server, Advanced Server, Professional, or Personal)
  1666. #define OS_ADVSERVER 22 // Advanced Server (eg NOT Datacenter, Server, Professional, or Personal)
  1667. #define OS_SERVER 23 // Server (eg NOT Datacenter, Advanced Server, Professional, or Personal)
  1668. #define OS_TERMINALSERVER 24 // Terminal Server - server running in what used to be called "Application Server" mode (now simply called "Terminal Server")
  1669. // OS_TERMINALREMOTEADMIN 15 // Terminal Server - server running in "Remote Administration" mode
  1670. #define OS_PERSONALTERMINALSERVER 25 // Personal Terminal Server - per/pro machine running in single user TS mode
  1671. #define OS_FASTUSERSWITCHING 26 // Fast User Switching
  1672. #define OS_FRIENDLYLOGONUI 27 // New friendly logon UI
  1673. #define OS_DOMAINMEMBER 28 // Is this machine a member of a domain (eg NOT a workgroup)
  1674. #define OS_ANYSERVER 29 // is this machine any type of server? (eg datacenter or advanced server or server)?
  1675. #define OS_WOW6432 30 // Is this process a 32-bit process running on an 64-bit platform?
  1676. #define OS_BLADE 31 // Blade Server
  1677. #define OS_SMALLBUSINESSSERVER 32 // SBS Server
  1678. // Added for .NET Server
  1679. #define OS_TABLETPC 33 // Are we running on a TabletPC?
  1680. #define OS_SERVERADMINUI 34 // Should defaults lean towards those preferred by server administrators?
  1681. #define OS_MEDIACENTER 35 // eHome Freestyle Project
  1682. #define OS_APPLIANCE 36 // Windows .NET Appliance Server
  1683. #endif // _WIN32_IE >= 0x0600
  1684. LWSTDAPI_(BOOL) IsOS(DWORD dwOS);
  1685. ///// BEGIN Private CommandTarget helpers
  1686. //*** IOleCommandTarget helpers {
  1687. //*** octd -- OleCT direction
  1688. // NOTES
  1689. // used both as a return value from IsXxxForward, and as an iUpDown
  1690. // param for MayXxxForward.
  1691. enum octd {
  1692. // do *not* change these values; we rely upon all 3 of:
  1693. // - sign +/-
  1694. // - powers of 2
  1695. // - (?) broadcast > down
  1696. OCTD_DOWN=+1,
  1697. OCTD_DOWNBROADCAST=+2,
  1698. OCTD_UP=-1
  1699. };
  1700. #ifndef RC_INVOKED /* { rc doesn't like these long symbol names */
  1701. #ifdef __IOleCommandTarget_INTERFACE_DEFINED__
  1702. HRESULT IsQSForward(const GUID *pguidCmdGroup, int cCmds, OLECMD rgCmds[]);
  1703. // WARNING: note the hoaky cast of nCmdID to a struct ptr
  1704. #define IsExecForward(pguidCmdGroup, nCmdID) \
  1705. IsQSForward(pguidCmdGroup, 1, (OLECMD *) &nCmdID)
  1706. HRESULT MayQSForward(IUnknown *punk, int iUpDown, const GUID *pguidCmdGroup,
  1707. ULONG cCmds, OLECMD rgCmds[], OLECMDTEXT *pcmdtext);
  1708. HRESULT MayExecForward(IUnknown *punk, int iUpDown, const GUID *pguidCmdGroup,
  1709. DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut);
  1710. #endif //__IOleCommandTarget_INTERFACE_DEFINED__
  1711. #endif /* } !RC_INVOKED */
  1712. // }
  1713. ///// end
  1714. typedef struct _FDSA {
  1715. // cItem *must* be at beginning of struct for GetItemCount() to work
  1716. int cItem; // # elements
  1717. void * aItem; // data for elements (either static or dynamic)
  1718. int cItemAlloc; // # of elements currently alloc'ed (>= cItem)
  1719. int cItemGrow:8; // # of elements to grow cItemAlloc by
  1720. int cbItem:8; // sizeof element
  1721. DWORD fAllocated:1; // 1:overflowed from static to dynamic array
  1722. DWORD unused:15;
  1723. } FDSA, *PFDSA;
  1724. LWSTDAPI_(BOOL) FDSA_Initialize(int cbItem, int cItemGrow, PFDSA pfdsa, void * aItemStatic, int cItemStatic);
  1725. LWSTDAPI_(BOOL) FDSA_Destroy(PFDSA pfdsa);
  1726. LWSTDAPI_(int) FDSA_InsertItem(PFDSA pfdsa, int index, void * pitem);
  1727. LWSTDAPI_(BOOL) FDSA_DeleteItem(PFDSA pfdsa, int index);
  1728. #define FDSA_AppendItem(pfdsa, pitem) FDSA_InsertItem(pfdsa, DA_LAST, pitem)
  1729. #define FDSA_GetItemPtr(pfdsa, i, type) (&(((type *)((pfdsa)->aItem))[(i)]))
  1730. #define FDSA_GetItemCount(hdsa) (*(int *)(hdsa))
  1731. #if defined( __LPGUID_DEFINED__ )
  1732. // Copied from OLE source code
  1733. // format for string form of GUID is:
  1734. // ????{%08lX-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}
  1735. #define GUIDSTR_MAX (1+ 8 + 1 + 4 + 1 + 4 + 1 + 4 + 1 + 12 + 1 + 1)
  1736. LWSTDAPI_(BOOL) GUIDFromStringA(LPCSTR psz, LPGUID pguid);
  1737. LWSTDAPI_(BOOL) GUIDFromStringW(LPCWSTR psz, LPGUID pguid);
  1738. #ifdef UNICODE
  1739. #define GUIDFromString GUIDFromStringW
  1740. #else
  1741. #define GUIDFromString GUIDFromStringA
  1742. #endif // !UNICODE
  1743. #endif
  1744. #ifdef _REFGUID_DEFINED
  1745. LWSTDAPI_(int) SHStringFromGUIDA(UNALIGNED REFGUID rguid, LPSTR psz, int cchMax);
  1746. LWSTDAPI_(int) SHStringFromGUIDW(UNALIGNED REFGUID rguid, LPWSTR psz, int cchMax);
  1747. #ifdef UNICODE
  1748. #define SHStringFromGUID SHStringFromGUIDW
  1749. #else
  1750. #define SHStringFromGUID SHStringFromGUIDA
  1751. #endif // !UNICODE
  1752. LWSTDAPI SHRegGetCLSIDKeyA(UNALIGNED REFGUID rguid, LPCSTR lpszSubKey, BOOL fUserSpecific, BOOL fCreate, HKEY *phkey);
  1753. LWSTDAPI SHRegGetCLSIDKeyW(UNALIGNED REFGUID rguid, LPCWSTR lpszSubKey, BOOL fUserSpecific, BOOL fCreate, HKEY *phkey);
  1754. #ifdef UNICODE
  1755. #define SHRegGetCLSIDKey SHRegGetCLSIDKeyW
  1756. #else
  1757. #define SHRegGetCLSIDKey SHRegGetCLSIDKeyA
  1758. #endif // !UNICODE
  1759. LWSTDAPI_(HANDLE) SHGlobalCounterCreate(REFGUID rguid);
  1760. LWSTDAPI_(HANDLE) SHGlobalCounterCreateNamedA(LPCSTR szName, LONG lInitialValue);
  1761. LWSTDAPI_(HANDLE) SHGlobalCounterCreateNamedW(LPCWSTR szName, LONG lInitialValue);
  1762. #ifdef UNICODE
  1763. #define SHGlobalCounterCreateNamed SHGlobalCounterCreateNamedW
  1764. #else
  1765. #define SHGlobalCounterCreateNamed SHGlobalCounterCreateNamedA
  1766. #endif // !UNICODE
  1767. LWSTDAPI_(long) SHGlobalCounterGetValue(HANDLE hCounter);
  1768. LWSTDAPI_(long) SHGlobalCounterIncrement(HANDLE hCounter);
  1769. LWSTDAPI_(long) SHGlobalCounterDecrement(HANDLE hCounter);
  1770. #define SHGlobalCounterDestroy CloseHandle
  1771. #endif
  1772. // WNDPROCs are thunked by user to send ANSI/UNICODE messages (ex: WM_WININICHANGE)
  1773. // so providing a W version that automatically thunks to the A version
  1774. // is dangerous. but we do it anyway. if a caller needs to work on both win95 and NT
  1775. // it needs to be aware that on win95 the W version actually calls the A version.
  1776. // thus all worker windows on win95 are ANSI. this should rarely affect worker wndprocs
  1777. // because they are internal, and the messages are usually custom. but system messages
  1778. // like WM_WININICHANGE, and the WM_DDE* messages will be changed accordingly
  1779. HWND SHCreateWorkerWindowA(WNDPROC pfnWndProc, HWND hwndParent, DWORD dwExStyle, DWORD dwFlags, HMENU hmenu, void * p);
  1780. HWND SHCreateWorkerWindowW(WNDPROC pfnWndProc, HWND hwndParent, DWORD dwExStyle, DWORD dwFlags, HMENU hmenu, void * p);
  1781. #ifdef UNICODE
  1782. #define SHCreateWorkerWindow SHCreateWorkerWindowW
  1783. #else
  1784. #define SHCreateWorkerWindow SHCreateWorkerWindowA
  1785. #endif
  1786. BOOL SHAboutInfoA(LPSTR lpszInfo, DWORD cchSize);
  1787. BOOL SHAboutInfoW(LPWSTR lpszInfo, DWORD cchSize);
  1788. #ifdef UNICODE
  1789. #define SHAboutInfo SHAboutInfoW
  1790. #else
  1791. #define SHAboutInfo SHAboutInfoA
  1792. #endif
  1793. // Types for SHIsLowMemoryMachine
  1794. #define ILMM_IE4 0 // 1997-style machine
  1795. LWSTDAPI_(BOOL) SHIsLowMemoryMachine(DWORD dwType);
  1796. LWSTDAPI_(HINSTANCE) SHPinDllOfCLSID(const CLSID *pclsid);
  1797. // Menu Helpers
  1798. LWSTDAPI_(int) GetMenuPosFromID(HMENU hmenu, UINT id);
  1799. LWSTDAPI SHGetInverseCMAP(BYTE *pbMap, ULONG cbMap);
  1800. //
  1801. // Shared memory apis
  1802. //
  1803. LWSTDAPI_(HANDLE) SHAllocShared(const void *pvData, DWORD dwSize, DWORD dwProcessId);
  1804. LWSTDAPI_(BOOL) SHFreeShared(HANDLE hData,DWORD dwProcessId);
  1805. LWSTDAPI_(void *) SHLockShared(HANDLE hData, DWORD dwProcessId);
  1806. LWSTDAPI_(void *) SHLockSharedEx(HANDLE hData, DWORD dwProcessId, BOOL fForWriting);
  1807. LWSTDAPI_(BOOL) SHUnlockShared(void *pvData);
  1808. LWSTDAPI_(HANDLE) SHMapHandle(HANDLE h, DWORD dwProcSrc, DWORD dwProcDest, DWORD dwDesiredAccess, DWORD dwFlags);
  1809. //
  1810. // Shared memory structs
  1811. //
  1812. #define MAPHEAD_SIG 0xbaff1aff
  1813. typedef struct _shmapheader {
  1814. DWORD dwSize;
  1815. DWORD dwSig;
  1816. DWORD dwSrcId;
  1817. DWORD dwDstId;
  1818. } SHMAPHEADER; // NOTE: should always be QUADWORD alignment
  1819. #ifdef UNIX
  1820. #include <urlmon.h>
  1821. #endif /* UNIX */
  1822. //
  1823. // Zone Security APIs
  1824. //
  1825. LWSTDAPI ZoneCheckPathA(LPCSTR pszPath, DWORD dwActionType, DWORD dwFlags, IInternetSecurityMgrSite * pisms);
  1826. LWSTDAPI ZoneCheckPathW(LPCWSTR pwzPath, DWORD dwActionType, DWORD dwFlags, IInternetSecurityMgrSite * pisms);
  1827. LWSTDAPI ZoneCheckUrlA(LPCSTR pszUrl, DWORD dwActionType, DWORD dwFlags, IInternetSecurityMgrSite * pisms);
  1828. LWSTDAPI ZoneCheckUrlW(LPCWSTR pwzUrl, DWORD dwActionType, DWORD dwFlags, IInternetSecurityMgrSite * pisms);
  1829. LWSTDAPI ZoneCheckUrlExA(LPCSTR pszUrl, DWORD * pdwPolicy, DWORD dwPolicySize, DWORD * pdwContext, DWORD dwContextSize, DWORD dwActionType, DWORD dwFlags, IInternetSecurityMgrSite * pisms);
  1830. LWSTDAPI ZoneCheckUrlExW(LPCWSTR pwzUrl, DWORD * pdwPolicy, DWORD dwPolicySize, DWORD * pdwContext, DWORD dwContextSize, DWORD dwActionType, DWORD dwFlags, IInternetSecurityMgrSite * pisms);
  1831. LWSTDAPI ZoneCheckUrlExCacheA(LPCSTR pszUrl, DWORD * pdwPolicy, DWORD dwPolicySize, DWORD * pdwContext, DWORD dwContextSize,
  1832. DWORD dwActionType, DWORD dwFlags, IInternetSecurityMgrSite * pisms, IInternetSecurityManager ** ppismCache);
  1833. LWSTDAPI ZoneCheckUrlExCacheW(LPCWSTR pwzUrl, DWORD * pdwPolicy, DWORD dwPolicySize, DWORD * pdwContext, DWORD dwContextSize,
  1834. DWORD dwActionType, DWORD dwFlags, IInternetSecurityMgrSite * pisms, IInternetSecurityManager ** ppismCache);
  1835. LWSTDAPI ZoneCheckHost(IInternetHostSecurityManager * pihsm, DWORD dwActionType, DWORD dwFlags);
  1836. LWSTDAPI ZoneCheckHostEx(IInternetHostSecurityManager * pihsm, DWORD * pdwPolicy, DWORD dwPolicySize, DWORD * pdwContext,
  1837. DWORD dwContextSize, DWORD dwActionType, DWORD dwFlags);
  1838. LWSTDAPI_(int) ZoneComputePaneSize(HWND hwndStatus);
  1839. LWSTDAPI_(void) ZoneConfigureW(HWND hwnd, LPCWSTR pwszUrl);
  1840. #ifdef UNICODE
  1841. #define ZoneCheckUrl ZoneCheckUrlW
  1842. #define ZoneCheckPath ZoneCheckPathW
  1843. #define ZoneCheckUrlEx ZoneCheckUrlExW
  1844. #define ZoneCheckUrlExCache ZoneCheckUrlExCacheW
  1845. #else // UNICODE
  1846. #define ZoneCheckUrl ZoneCheckUrlA
  1847. #define ZoneCheckPath ZoneCheckPathA
  1848. #define ZoneCheckUrlEx ZoneCheckUrlExA
  1849. #define ZoneCheckUrlExCache ZoneCheckUrlExCacheA
  1850. #endif // UNICODE
  1851. LWSTDAPI SHRegisterValidateTemplate(LPCWSTR pwzTemplate, DWORD dwFlags);
  1852. // Flags for SHRegisterValidateTemplate
  1853. #define SHRVT_REGISTER 0x00000001
  1854. #define SHRVT_VALIDATE 0x00000002
  1855. #define SHRVT_PROMPTUSER 0x00000004
  1856. #define SHRVT_REGISTERIFPROMPTOK 0x00000008
  1857. #define SHRVT_ALLOW_INTRANET 0x00000010
  1858. #define SHRVT_VALID 0x0000001f
  1859. BOOL RegisterGlobalHotkeyW(WORD wOldHotkey, WORD wNewHotkey,LPCWSTR pcwszPath);
  1860. BOOL RegisterGlobalHotkeyA(WORD wOldHotkey, WORD wNewHotkey,LPCSTR pcszPath);
  1861. LWSTDAPI_(UINT) WhichPlatform(void);
  1862. // Return values of WhichPlatform
  1863. #define PLATFORM_UNKNOWN 0
  1864. #define PLATFORM_IE3 1 // obsolete: use PLATFORM_BROWSERONLY
  1865. #define PLATFORM_BROWSERONLY 1 // browser-only (no new shell)
  1866. #define PLATFORM_INTEGRATED 2 // integrated shell
  1867. #ifdef UNICODE
  1868. #define RegisterGlobalHotkey RegisterGlobalHotkeyW
  1869. #else // UNICODE
  1870. #define RegisterGlobalHotkey RegisterGlobalHotkeyA
  1871. #endif // UNICODE
  1872. // qistub {
  1873. //*** QueryInterface helpers
  1874. // NOTES
  1875. // ATL has a fancier version of this. if we need to extend ours, we
  1876. // should probably just switch to ATL's rather than reinvent.
  1877. // EXAMPLE
  1878. // Cfoo::QI(REFIID riid, void **ppv)
  1879. // {
  1880. // // (the IID_xxx comments make grep'ing work!)
  1881. // static const QITAB qit = {
  1882. // QITABENT(Cfoo, Iiface1), // IID_Iiface1
  1883. // ...
  1884. // QITABENT(Cfoo, IifaceN), // IID_IifaceN
  1885. // { 0 }, // n.b. don't forget the 0
  1886. // };
  1887. //
  1888. // // n.b. make sure you don't cast 'this'
  1889. // hr = QISearch(this, qit, riid, ppv);
  1890. // if (FAILED(hr))
  1891. // hr = SUPER::QI(riid, ppv);
  1892. // // custom code could be added here for FAILED() case
  1893. // return hr;
  1894. // }
  1895. typedef struct
  1896. {
  1897. const IID * piid;
  1898. int dwOffset;
  1899. } QITAB, *LPQITAB;
  1900. typedef const QITAB *LPCQITAB;
  1901. #define QITABENTMULTI(Cthis, Ifoo, Iimpl) \
  1902. { (IID*) &IID_##Ifoo, OFFSETOFCLASS(Iimpl, Cthis) }
  1903. #define QITABENTMULTI2(Cthis, Ifoo, Iimpl) \
  1904. { (IID*) &Ifoo, OFFSETOFCLASS(Iimpl, Cthis) }
  1905. #define QITABENT(Cthis, Ifoo) QITABENTMULTI(Cthis, Ifoo, Ifoo)
  1906. STDAPI QISearch(void* that, LPCQITAB pqit, REFIID riid, void **ppv);
  1907. #ifndef STATIC_CAST
  1908. //*** STATIC_CAST -- 'portable' static_cast<>
  1909. // NOTES
  1910. // do *not* use SAFE_CAST (see comment in OFFSETOFCLASS)
  1911. #define STATIC_CAST(typ) static_cast<typ>
  1912. #ifndef _X86_
  1913. // assume only intel compiler (>=vc5) supports static_cast for now
  1914. // we could key off of _MSC_VER >= 1100 but i'm not sure that will work
  1915. //
  1916. // a straight cast will give the correct result but no error checking,
  1917. // so we'll have to catch errors on intel.
  1918. #undef STATIC_CAST
  1919. #define STATIC_CAST(typ) (typ)
  1920. #endif
  1921. #endif
  1922. #ifndef OFFSETOFCLASS
  1923. //*** OFFSETOFCLASS -- (stolen from ATL)
  1924. // we use STATIC_CAST not SAFE_CAST because the compiler gets confused
  1925. // (it doesn't constant-fold the ,-op in SAFE_CAST so we end up generating
  1926. // code for the table!)
  1927. #define OFFSETOFCLASS(base, derived) \
  1928. ((DWORD)(DWORD_PTR)(STATIC_CAST(base*)((derived*)8))-8)
  1929. #endif
  1930. // } qistub
  1931. #if (_WIN32_IE >= 0x0500)
  1932. // SHRestrictionLookup
  1933. typedef struct
  1934. {
  1935. INT iFlag;
  1936. LPCWSTR pszKey;
  1937. LPCWSTR pszValue;
  1938. } SHRESTRICTIONITEMS;
  1939. LWSTDAPI_(DWORD) SHRestrictionLookup(INT iFlag, LPCWSTR pszBaseKey,
  1940. const SHRESTRICTIONITEMS *pRestrictions,
  1941. DWORD* rdwRestrictionItemValues);
  1942. LWSTDAPI_(DWORD) SHGetRestriction(LPCWSTR pszBaseKey, LPCWSTR pszGroup, LPCWSTR pszSubKey);
  1943. typedef INT_PTR (CALLBACK* SHDLGPROC)(void *lpData, HWND, UINT, WPARAM, LPARAM);
  1944. LWSTDAPI_(INT_PTR) SHDialogBox(HINSTANCE hInstance, LPCWSTR lpTemplateName,
  1945. HWND hwndParent, SHDLGPROC lpDlgFunc, void*lpData);
  1946. LWSTDAPI SHInvokeDefaultCommand(HWND hwnd, struct IShellFolder* psf, LPCITEMIDLIST pidl);
  1947. LWSTDAPI SHInvokeCommand(HWND hwnd, struct IShellFolder* psf, LPCITEMIDLIST pidl, LPCSTR lpVerb);
  1948. LWSTDAPI SHInvokeCommandOnContextMenu(HWND hwnd, struct IUnknown* punk, struct IContextMenu *pcm, DWORD fMask, LPCSTR lpVerb);
  1949. LWSTDAPI SHInvokeCommandsOnContextMenu(HWND hwnd, struct IUnknown* punk, struct IContextMenu *pcm, DWORD fMask, const LPCSTR rgszVerbs[], UINT cVerbs);
  1950. LWSTDAPI SHForwardContextMenuMsg(struct IContextMenu* pcm, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT* plResult, BOOL fAllowICM2);
  1951. LWSTDAPI IUnknown_DoContextMenuPopup(struct IUnknown *punkSite, struct IContextMenu* pcm, UINT fFlags, POINT pt);
  1952. #endif // _WIN32_IE >= 0x0500
  1953. //============= Internal Routines that are always to be built ================
  1954. LWSTDAPI_(DWORD)
  1955. GetLongPathNameWrapW(
  1956. LPCWSTR lpszShortPath,
  1957. LPWSTR lpszLongPath,
  1958. DWORD cchBuffer);
  1959. LWSTDAPI_(DWORD)
  1960. GetLongPathNameWrapA(
  1961. LPCSTR lpszShortPath,
  1962. LPSTR lpszLongPath,
  1963. DWORD cchBuffer);
  1964. #ifdef UNICODE
  1965. #define GetLongPathNameWrap GetLongPathNameWrapW
  1966. #else
  1967. #define GetLongPathNameWrap GetLongPathNameWrapA
  1968. #endif //UNICODE
  1969. //=============== Unicode Wrapper Routines ===================================
  1970. #if (_WIN32_IE >= 0x0500) && !defined(NO_SHLWAPI_UNITHUNK)
  1971. //
  1972. // There are two styles of usage for the wrap functions.
  1973. //
  1974. // * Explicit wrapping.
  1975. //
  1976. // If you explicitly call GetPropWrap (for example), then
  1977. // your UNICODE build will call the wrapper function, and your ANSI
  1978. // build will call the normal ANSI API directly.
  1979. //
  1980. // Calls to GetProp, GetPropW, and GetPropA still go
  1981. // directly to the underlying system DLL that implements them.
  1982. //
  1983. // This lets you select which calls to UNICODE APIs should get
  1984. // wrapped and which should go straight through to the OS
  1985. // (and most likely fail on Win95).
  1986. //
  1987. // * Automatic wrapping.
  1988. //
  1989. // If you #include <w95wraps.h>, then when you call GetProp,
  1990. // your UNICODE build will call the wrapper function, and your ANSI
  1991. // ANSI build will call the normal ANSI API directly.
  1992. //
  1993. // This lets you just call the UNICODE APIs normally throughout
  1994. // your code, and the wrappers will do their best.
  1995. //
  1996. // Here's a table explaining what you get under the various scenarios.
  1997. //
  1998. // You Get
  1999. // <w95wraps.h> <w95wraps.h>
  2000. // You Write UNICODE ANSI UNICODE ANSI
  2001. // ============ ============ ============ ============ ============
  2002. // GetProp GetPropW GetPropA GetPropWrapW GetPropA
  2003. // GetPropWrap GetPropWrapW GetPropA GetPropWrapW GetPropA
  2004. //
  2005. // GetPropW GetPropW GetPropW GetPropWrapW GetPropWrapW
  2006. // GetPropA GetPropA GetPropA GetPropA GetPropA
  2007. // GetPropWrapW GetPropWrapW GetPropWrapW GetPropWrapW GetPropWrapW
  2008. // GetPropWrapA GetPropA GetPropA GetPropA GetPropA
  2009. //
  2010. // Final quirk: If you are running on a non-x86 platform, then the
  2011. // wrap functions are forwarded to the unwrapped functions, since
  2012. // the only OS that runs on non-x86 is NT.
  2013. //
  2014. // Before using the wrapper functions, see the warnings at the top of
  2015. // <w95wraps.h> to make sure you understand the consequences.
  2016. //
  2017. LWSTDAPI_(BOOL) IsCharAlphaWrapW(IN WCHAR ch);
  2018. LWSTDAPI_(BOOL) IsCharUpperWrapW(IN WCHAR ch);
  2019. LWSTDAPI_(BOOL) IsCharLowerWrapW(IN WCHAR ch);
  2020. LWSTDAPI_(BOOL) IsCharAlphaNumericWrapW(IN WCHAR ch);
  2021. LWSTDAPI_(BOOL)
  2022. AppendMenuWrapW(
  2023. IN HMENU hMenu,
  2024. IN UINT uFlags,
  2025. IN UINT_PTR uIDNewItem,
  2026. IN LPCWSTR lpNewItem
  2027. );
  2028. LWSTDAPI_(LRESULT)
  2029. CallWindowProcWrapW(
  2030. WNDPROC lpPrevWndFunc,
  2031. HWND hWnd,
  2032. UINT Msg,
  2033. WPARAM wParam,
  2034. LPARAM lParam);
  2035. #ifdef POST_IE5_BETA
  2036. LWSTDAPI_(BOOL) CallMsgFilterWrapW(LPMSG lpMsg, int nCode);
  2037. #endif
  2038. LWSTDAPI_(LPWSTR) CharLowerWrapW( LPWSTR pch );
  2039. LWSTDAPI_(DWORD) CharLowerBuffWrapW( LPWSTR pch, DWORD cchLength );
  2040. LWSTDAPI_(LPWSTR) CharNextWrapW(LPCWSTR lpszCurrent);
  2041. LWSTDAPI_(LPWSTR) CharPrevWrapW(LPCWSTR lpszStart, LPCWSTR lpszCurrent);
  2042. LWSTDAPI_(BOOL) CharToOemWrapW(LPCWSTR lpszSrc, LPSTR lpszDst);
  2043. LWSTDAPI_(LPWSTR) CharUpperWrapW( LPWSTR pch );
  2044. LWSTDAPI_(DWORD) CharUpperBuffWrapW( LPWSTR pch, DWORD cchLength );
  2045. LWSTDAPI_(HRESULT) CLSIDFromStringWrap(LPOLESTR lpsz, LPCLSID pclsid);
  2046. LWSTDAPI_(HRESULT) CLSIDFromProgIDWrap(LPCOLESTR lpszProgID, LPCLSID lpclsid);
  2047. LWSTDAPI_(int)
  2048. CompareStringWrapW(
  2049. LCID Locale,
  2050. DWORD dwCmpFlags,
  2051. LPCWSTR lpString1,
  2052. int cchCount1,
  2053. LPCWSTR lpString2,
  2054. int cchCount2);
  2055. LWSTDAPI_(int)
  2056. CopyAcceleratorTableWrapW(
  2057. HACCEL hAccelSrc,
  2058. LPACCEL lpAccelDst,
  2059. int cAccelEntries);
  2060. LWSTDAPI_(HACCEL)
  2061. CreateAcceleratorTableWrapW(LPACCEL lpAccel, int cEntries);
  2062. LWSTDAPI_(HDC)
  2063. CreateDCWrapW(
  2064. LPCWSTR lpszDriver,
  2065. LPCWSTR lpszDevice,
  2066. LPCWSTR lpszOutput,
  2067. CONST DEVMODEW * lpInitData);
  2068. LWSTDAPI_(BOOL)
  2069. CreateDirectoryWrapW(
  2070. LPCWSTR lpPathName,
  2071. LPSECURITY_ATTRIBUTES lpSecurityAttributes);
  2072. LWSTDAPI_(HANDLE)
  2073. CreateEventWrapW(
  2074. LPSECURITY_ATTRIBUTES lpEventAttributes,
  2075. BOOL bManualReset,
  2076. BOOL bInitialState,
  2077. LPCWSTR lpName);
  2078. LWSTDAPI_(HANDLE)
  2079. CreateFileWrapW(
  2080. LPCWSTR lpFileName,
  2081. DWORD dwDesiredAccess,
  2082. DWORD dwShareMode,
  2083. LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  2084. DWORD dwCreationDisposition,
  2085. DWORD dwFlagsAndAttributes,
  2086. HANDLE hTemplateFile);
  2087. LWSTDAPI_(HFONT)
  2088. CreateFontIndirectWrapW(CONST LOGFONTW * plfw);
  2089. LWSTDAPI_(HDC)
  2090. CreateICWrapW(
  2091. LPCWSTR lpszDriver,
  2092. LPCWSTR lpszDevice,
  2093. LPCWSTR lpszOutput,
  2094. CONST DEVMODEW * lpInitData);
  2095. LWSTDAPI_(HWND)
  2096. CreateWindowExWrapW(
  2097. DWORD dwExStyle,
  2098. LPCWSTR lpClassName,
  2099. LPCWSTR lpWindowName,
  2100. DWORD dwStyle,
  2101. int X,
  2102. int Y,
  2103. int nWidth,
  2104. int nHeight,
  2105. HWND hWndParent,
  2106. HMENU hMenu,
  2107. HINSTANCE hInstance,
  2108. void * lpParam);
  2109. LWSTDAPI_(LRESULT)
  2110. DefWindowProcWrapW(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
  2111. LWSTDAPI_(BOOL) DeleteFileWrapW(LPCWSTR pwsz);
  2112. LWSTDAPI_(LRESULT)
  2113. DispatchMessageWrapW(CONST MSG * lpMsg);
  2114. LWSTDAPI_(int)
  2115. DrawTextWrapW(
  2116. HDC hDC,
  2117. LPCWSTR lpString,
  2118. int nCount,
  2119. LPRECT lpRect,
  2120. UINT uFormat);
  2121. LWSTDAPI_(int)
  2122. EnumFontFamiliesWrapW(
  2123. HDC hdc,
  2124. LPCWSTR lpszFamily,
  2125. FONTENUMPROCW lpEnumFontProc,
  2126. LPARAM lParam);
  2127. LWSTDAPI_(int)
  2128. EnumFontFamiliesExWrapW(
  2129. HDC hdc,
  2130. LPLOGFONTW lplfw,
  2131. FONTENUMPROCW lpEnumFontProc,
  2132. LPARAM lParam,
  2133. DWORD dwFlags );
  2134. LWSTDAPI_(BOOL)
  2135. EnumResourceNamesWrapW(
  2136. HINSTANCE hModule,
  2137. LPCWSTR lpType,
  2138. ENUMRESNAMEPROCW lpEnumFunc,
  2139. LONG_PTR lParam);
  2140. LWSTDAPI_(BOOL)
  2141. ExtTextOutWrapW(
  2142. HDC hdc,
  2143. int x,
  2144. int y,
  2145. UINT fuOptions,
  2146. CONST RECT * lprc,
  2147. LPCWSTR lpString,
  2148. UINT nCount,
  2149. CONST INT * lpDx);
  2150. LWSTDAPI_(HANDLE)
  2151. FindFirstFileWrapW(
  2152. LPCWSTR lpFileName,
  2153. LPWIN32_FIND_DATAW pwszFd);
  2154. LWSTDAPI_(HRSRC)
  2155. FindResourceWrapW(HINSTANCE hModule, LPCWSTR lpName, LPCWSTR lpType);
  2156. LWSTDAPI_(HWND)
  2157. FindWindowWrapW(LPCWSTR lpClassName, LPCWSTR lpWindowName);
  2158. LWSTDAPI_(DWORD)
  2159. FormatMessageWrapW(
  2160. DWORD dwFlags,
  2161. LPCVOID lpSource,
  2162. DWORD dwMessageId,
  2163. DWORD dwLanguageId,
  2164. LPWSTR lpBuffer,
  2165. DWORD nSize,
  2166. va_list * Arguments);
  2167. LWSTDAPI_(BOOL)
  2168. GetClassInfoWrapW(HINSTANCE hModule, LPCWSTR lpClassName, LPWNDCLASSW lpWndClassW);
  2169. LWSTDAPI_(DWORD)
  2170. GetClassLongWrapW(HWND hWnd, int nIndex);
  2171. LWSTDAPI_(int)
  2172. GetClassNameWrapW(HWND hWnd, LPWSTR lpClassName, int nMaxCount);
  2173. LWSTDAPI_(int)
  2174. GetClipboardFormatNameWrapW(UINT format, LPWSTR lpFormatName, int cchFormatName);
  2175. LWSTDAPI_(DWORD)
  2176. GetCurrentDirectoryWrapW(DWORD nBufferLength, LPWSTR lpBuffer);
  2177. LWSTDAPI_(UINT)
  2178. GetDlgItemTextWrapW(
  2179. HWND hWndDlg,
  2180. int idControl,
  2181. LPWSTR lpsz,
  2182. int cchMax);
  2183. LWSTDAPI_(DWORD)
  2184. GetFileAttributesWrapW(LPCWSTR lpFileName);
  2185. // Cannot be LWSTDAPI because winver.h declares the function as STDAPI and not DLLIMPORT
  2186. STDAPI_(BOOL)
  2187. GetFileVersionInfoWrapW(LPCWSTR pwzFilename, DWORD dwHandle, DWORD dwLen, LPVOID lpData);
  2188. // Cannot be LWSTDAPI because winver.h declares the function as STDAPI and not DLLIMPORT
  2189. STDAPI_(DWORD)
  2190. GetFileVersionInfoSizeWrapW(LPCWSTR pwzFilename, LPDWORD lpdwHandle);
  2191. LWSTDAPI_(DWORD)
  2192. GetFullPathNameWrapW( LPCWSTR lpFileName,
  2193. DWORD nBufferLength,
  2194. LPWSTR lpBuffer,
  2195. LPWSTR *lpFilePart);
  2196. LWSTDAPI_(int)
  2197. GetLocaleInfoWrapW(LCID Locale, LCTYPE LCType, LPWSTR lpsz, int cchData);
  2198. LWSTDAPI_(int)
  2199. GetMenuStringWrapW(
  2200. HMENU hMenu,
  2201. UINT uIDItem,
  2202. LPWSTR lpString,
  2203. int nMaxCount,
  2204. UINT uFlag);
  2205. LWSTDAPI_(BOOL)
  2206. GetMessageWrapW(
  2207. LPMSG lpMsg,
  2208. HWND hWnd,
  2209. UINT wMsgFilterMin,
  2210. UINT wMsgFilterMax);
  2211. LWSTDAPI_(DWORD)
  2212. GetModuleFileNameWrapW(HINSTANCE hModule, LPWSTR pwszFilename, DWORD nSize);
  2213. LWSTDAPI_(UINT)
  2214. GetSystemDirectoryWrapW(LPWSTR lpBuffer, UINT uSize);
  2215. LWSTDAPI_(DWORD)
  2216. GetEnvironmentVariableWrapW(LPCWSTR lpName, LPWSTR lpBuffer, DWORD nSize);
  2217. LWSTDAPI_(DWORD)
  2218. SearchPathWrapW(
  2219. LPCWSTR lpPathName,
  2220. LPCWSTR lpFileName,
  2221. LPCWSTR lpExtension,
  2222. DWORD cchReturnBuffer,
  2223. LPWSTR lpReturnBuffer,
  2224. LPWSTR * plpfilePart);
  2225. LWSTDAPI_(HMODULE)
  2226. GetModuleHandleWrapW(LPCWSTR lpModuleName);
  2227. LWSTDAPI_(int)
  2228. GetObjectWrapW(HGDIOBJ hgdiObj, int cbBuffer, void *lpvObj);
  2229. LWSTDAPI_(UINT)
  2230. GetPrivateProfileIntWrapW(
  2231. LPCWSTR lpAppName,
  2232. LPCWSTR lpKeyName,
  2233. INT nDefault,
  2234. LPCWSTR lpFileName);
  2235. LWSTDAPI_(DWORD)
  2236. GetProfileStringWrapW(
  2237. LPCWSTR lpAppName,
  2238. LPCWSTR lpKeyName,
  2239. LPCWSTR lpDefault,
  2240. LPWSTR lpBuffer,
  2241. DWORD dwBuffersize);
  2242. LWSTDAPI_(HANDLE)
  2243. GetPropWrapW(HWND hWnd, LPCWSTR lpString);
  2244. LWSTDAPI_(ATOM)
  2245. GlobalAddAtomWrapW(LPCWSTR lpAtomName);
  2246. LWSTDAPI_(ATOM)
  2247. GlobalFindAtomWrapW(LPCWSTR lpAtomName);
  2248. LWSTDAPI_(DWORD)
  2249. GetShortPathNameWrapW(
  2250. LPCWSTR lpszLongPath,
  2251. LPWSTR lpszShortPath,
  2252. DWORD cchBuffer);
  2253. LWSTDAPI_(BOOL)
  2254. GetStringTypeExWrapW(LCID lcid, DWORD dwInfoType, LPCWSTR lpSrcStr, int cchSrc, LPWORD lpCharType);
  2255. LWSTDAPI_(UINT)
  2256. GetTempFileNameWrapW(
  2257. LPCWSTR lpPathName,
  2258. LPCWSTR lpPrefixString,
  2259. UINT uUnique,
  2260. LPWSTR lpTempFileName);
  2261. LWSTDAPI_(DWORD)
  2262. GetTempPathWrapW(DWORD nBufferLength, LPWSTR lpBuffer);
  2263. LWSTDAPI_(BOOL)
  2264. GetTextExtentPoint32WrapW(
  2265. HDC hdc,
  2266. LPCWSTR pwsz,
  2267. int cb,
  2268. LPSIZE pSize);
  2269. LWSTDAPI_(int)
  2270. GetTextFaceWrapW(
  2271. HDC hdc,
  2272. int cch,
  2273. LPWSTR lpFaceName);
  2274. LWSTDAPI_(BOOL)
  2275. GetTextMetricsWrapW(HDC hdc, LPTEXTMETRICW lptm);
  2276. LWSTDAPI_(BOOL)
  2277. GetUserNameWrapW(LPWSTR lpUserName, LPDWORD lpcchName);
  2278. LWSTDAPI_(LONG)
  2279. GetWindowLongWrapW(HWND hWnd, int nIndex);
  2280. LWSTDAPI_(int)
  2281. GetWindowTextWrapW(HWND hWnd, LPWSTR lpString, int nMaxCount);
  2282. LWSTDAPI_(int)
  2283. GetWindowTextLengthWrapW(HWND hWnd);
  2284. LWSTDAPI_(UINT)
  2285. GetWindowsDirectoryWrapW(LPWSTR lpWinPath, UINT cch);
  2286. LWSTDAPI_(BOOL)
  2287. InsertMenuWrapW(
  2288. HMENU hMenu,
  2289. UINT uPosition,
  2290. UINT uFlags,
  2291. UINT_PTR uIDNewItem,
  2292. LPCWSTR lpNewItem);
  2293. LWSTDAPI_(BOOL)
  2294. IsDialogMessageWrapW(HWND hWndDlg, LPMSG lpMsg);
  2295. LWSTDAPI_(HACCEL)
  2296. LoadAcceleratorsWrapW(HINSTANCE hInstance, LPCWSTR lpTableName);
  2297. LWSTDAPI_(HBITMAP)
  2298. LoadBitmapWrapW(HINSTANCE hInstance, LPCWSTR lpBitmapName);
  2299. LWSTDAPI_(HCURSOR)
  2300. LoadCursorWrapW(HINSTANCE hInstance, LPCWSTR lpCursorName);
  2301. LWSTDAPI_(HICON)
  2302. LoadIconWrapW(HINSTANCE hInstance, LPCWSTR lpIconName);
  2303. LWSTDAPI_(HANDLE)
  2304. LoadImageWrapA(
  2305. HINSTANCE hInstance,
  2306. LPCSTR lpName,
  2307. UINT uType,
  2308. int cxDesired,
  2309. int cyDesired,
  2310. UINT fuLoad);
  2311. LWSTDAPI_(HANDLE)
  2312. LoadImageWrapW(
  2313. HINSTANCE hInstance,
  2314. LPCWSTR lpName,
  2315. UINT uType,
  2316. int cxDesired,
  2317. int cyDesired,
  2318. UINT fuLoad);
  2319. LWSTDAPI_(HINSTANCE)
  2320. LoadLibraryExWrapW(
  2321. LPCWSTR lpLibFileName,
  2322. HANDLE hFile,
  2323. DWORD dwFlags);
  2324. LWSTDAPI_(HMENU)
  2325. LoadMenuWrapW(HINSTANCE hInstance, LPCWSTR lpMenuName);
  2326. LWSTDAPI_(int)
  2327. LoadStringWrapW(HINSTANCE hInstance, UINT uID, LPWSTR lpBuffer, int nBufferMax);
  2328. #ifndef UNIX
  2329. LWSTDAPI_(BOOL)
  2330. MessageBoxIndirectWrapW(CONST MSGBOXPARAMSW *pmbp);
  2331. #else
  2332. LWSTDAPI_(int)
  2333. MessageBoxIndirectWrapW(LPMSGBOXPARAMSW pmbp);
  2334. #endif /* UNIX */
  2335. LWSTDAPI_(BOOL)
  2336. ModifyMenuWrapW(
  2337. HMENU hMenu,
  2338. UINT uPosition,
  2339. UINT uFlags,
  2340. UINT_PTR uIDNewItem,
  2341. LPCWSTR lpNewItem);
  2342. LWSTDAPI_(BOOL)
  2343. GetCharWidth32WrapW(
  2344. HDC hdc,
  2345. UINT iFirstChar,
  2346. UINT iLastChar,
  2347. LPINT lpBuffer);
  2348. LWSTDAPI_(DWORD)
  2349. GetCharacterPlacementWrapW(
  2350. HDC hdc, // handle to device context
  2351. LPCWSTR lpString, // pointer to string
  2352. int nCount, // number of characters in string
  2353. int nMaxExtent, // maximum extent for displayed string
  2354. LPGCP_RESULTSW lpResults, // pointer to buffer for placement result
  2355. DWORD dwFlags // placement flags
  2356. );
  2357. LWSTDAPI_(BOOL)
  2358. CopyFileWrapW(LPCWSTR lpExistingFileName, LPCWSTR lpNewFileName, BOOL bFailIfExists);
  2359. LWSTDAPI_(BOOL)
  2360. MoveFileWrapW(LPCWSTR lpExistingFileName, LPCWSTR lpNewFileName);
  2361. LWSTDAPI_(BOOL)
  2362. OemToCharWrapW(LPCSTR lpszSrc, LPWSTR lpszDst);
  2363. LWSTDAPI_(HANDLE)
  2364. OpenEventWrapW(
  2365. DWORD fdwAccess,
  2366. BOOL fInherit,
  2367. LPCWSTR lpszEventName);
  2368. LWSTDAPI_(void)
  2369. OutputDebugStringWrapW(LPCWSTR lpOutputString);
  2370. LWSTDAPI_(BOOL)
  2371. PeekMessageWrapW(
  2372. LPMSG lpMsg,
  2373. HWND hWnd,
  2374. UINT wMsgFilterMin,
  2375. UINT wMsgFilterMax,
  2376. UINT wRemoveMsg);
  2377. LWSTDAPI_(BOOL)
  2378. PlaySoundWrapW(
  2379. LPCWSTR pszSound,
  2380. HMODULE hmod,
  2381. DWORD fdwSound);
  2382. LWSTDAPI_(BOOL)
  2383. PostMessageWrapW(
  2384. HWND hWnd,
  2385. UINT Msg,
  2386. WPARAM wParam,
  2387. LPARAM lParam);
  2388. LWSTDAPI_(BOOL)
  2389. PostThreadMessageWrapW(
  2390. DWORD idThread,
  2391. UINT Msg,
  2392. WPARAM wParam,
  2393. LPARAM lParam);
  2394. LWSTDAPI_(LONG)
  2395. RegCreateKeyWrapW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult);
  2396. LWSTDAPI_(LONG)
  2397. RegCreateKeyExWrapW(HKEY hKey, LPCWSTR lpSubKey, DWORD Reserved, LPWSTR lpClass, DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition);
  2398. LWSTDAPI_(LONG)
  2399. RegDeleteKeyWrapW(HKEY hKey, LPCWSTR pwszSubKey);
  2400. LWSTDAPI_(LONG)
  2401. RegDeleteValueWrapW(HKEY hKey, LPCWSTR pwszSubKey);
  2402. LWSTDAPI_(LONG)
  2403. RegEnumKeyWrapW(
  2404. HKEY hKey,
  2405. DWORD dwIndex,
  2406. LPWSTR lpName,
  2407. DWORD cbName);
  2408. LWSTDAPI_(LONG)
  2409. RegEnumKeyExWrapW(
  2410. HKEY hKey,
  2411. DWORD dwIndex,
  2412. LPWSTR lpName,
  2413. LPDWORD lpcbName,
  2414. LPDWORD lpReserved,
  2415. LPWSTR lpClass,
  2416. LPDWORD lpcbClass,
  2417. PFILETIME lpftLastWriteTime);
  2418. LWSTDAPI_(LONG)
  2419. RegOpenKeyWrapW(HKEY hKey, LPCWSTR pwszSubKey, PHKEY phkResult);
  2420. LWSTDAPI_(LONG)
  2421. RegOpenKeyExWrapW(
  2422. HKEY hKey,
  2423. LPCWSTR lpSubKey,
  2424. DWORD ulOptions,
  2425. REGSAM samDesired,
  2426. PHKEY phkResult);
  2427. LWSTDAPI_(LONG)
  2428. RegQueryInfoKeyWrapW(
  2429. HKEY hKey,
  2430. LPWSTR lpClass,
  2431. LPDWORD lpcbClass,
  2432. LPDWORD lpReserved,
  2433. LPDWORD lpcSubKeys,
  2434. LPDWORD lpcbMaxSubKeyLen,
  2435. LPDWORD lpcbMaxClassLen,
  2436. LPDWORD lpcValues,
  2437. LPDWORD lpcbMaxValueNameLen,
  2438. LPDWORD lpcbMaxValueLen,
  2439. LPDWORD lpcbSecurityDescriptor,
  2440. PFILETIME lpftLastWriteTime);
  2441. LWSTDAPI_(LONG)
  2442. RegQueryValueWrapW(
  2443. HKEY hKey,
  2444. LPCWSTR pwszSubKey,
  2445. LPWSTR pwszValue,
  2446. PLONG lpcbValue);
  2447. LWSTDAPI_(LONG)
  2448. RegQueryValueExWrapW(
  2449. HKEY hKey,
  2450. LPCWSTR lpValueName,
  2451. LPDWORD lpReserved,
  2452. LPDWORD lpType,
  2453. LPBYTE lpData,
  2454. LPDWORD lpcbData);
  2455. LWSTDAPI_(LONG)
  2456. RegSetValueWrapW(
  2457. HKEY hKey,
  2458. LPCWSTR lpSubKey,
  2459. DWORD dwType,
  2460. LPCWSTR lpData,
  2461. DWORD cbData);
  2462. LWSTDAPI_(LONG)
  2463. RegSetValueExWrapW(
  2464. HKEY hKey,
  2465. LPCWSTR lpValueName,
  2466. DWORD Reserved,
  2467. DWORD dwType,
  2468. CONST BYTE* lpData,
  2469. DWORD cbData);
  2470. LWSTDAPI_(ATOM)
  2471. RegisterClassWrapW(CONST WNDCLASSW * lpWndClass);
  2472. LWSTDAPI_(UINT)
  2473. RegisterClipboardFormatWrapW(LPCWSTR lpString);
  2474. LWSTDAPI_(UINT)
  2475. RegisterWindowMessageWrapW(LPCWSTR lpString);
  2476. LWSTDAPI_(BOOL)
  2477. RemoveDirectoryWrapW(LPCWSTR lpszDir);
  2478. LWSTDAPI_(HANDLE)
  2479. RemovePropWrapW(
  2480. HWND hWnd,
  2481. LPCWSTR lpString);
  2482. LWSTDAPI_(LRESULT)
  2483. SendDlgItemMessageWrapW(
  2484. HWND hDlg,
  2485. int nIDDlgItem,
  2486. UINT Msg,
  2487. WPARAM wParam,
  2488. LPARAM lParam);
  2489. LWSTDAPI_(LRESULT)
  2490. SendMessageWrapW(
  2491. HWND hWnd,
  2492. UINT Msg,
  2493. WPARAM wParam,
  2494. LPARAM lParam);
  2495. LWSTDAPI_(LRESULT)
  2496. SendMessageTimeoutWrapW(
  2497. HWND hWnd,
  2498. UINT Msg,
  2499. WPARAM wParam,
  2500. LPARAM lParam,
  2501. UINT uFlags,
  2502. UINT uTimeout,
  2503. PULONG_PTR lpdwResult);
  2504. LWSTDAPI_(BOOL)
  2505. SetCurrentDirectoryWrapW(LPCWSTR lpszCurDir);
  2506. LWSTDAPI_(BOOL)
  2507. SetDlgItemTextWrapW(HWND hDlg, int nIDDlgItem, LPCWSTR lpString);
  2508. LWSTDAPI_(BOOL)
  2509. SetMenuItemInfoWrapW(
  2510. HMENU hMenu,
  2511. UINT uItem,
  2512. BOOL fByPosition,
  2513. LPCMENUITEMINFOW lpmiiW);
  2514. LWSTDAPI_(BOOL)
  2515. SetPropWrapW(
  2516. HWND hWnd,
  2517. LPCWSTR lpString,
  2518. HANDLE hData);
  2519. LWSTDAPI_(LONG)
  2520. SetWindowLongWrapW(HWND hWnd, int nIndex, LONG dwNewLong);
  2521. LWSTDAPI_(HHOOK)
  2522. SetWindowsHookExWrapW(
  2523. int idHook,
  2524. HOOKPROC lpfn,
  2525. HINSTANCE hmod,
  2526. DWORD dwThreadId);
  2527. LWSTDAPI_(int)
  2528. StartDocWrapW( HDC hDC, const DOCINFOW * lpdi );
  2529. LWSTDAPI_(BOOL)
  2530. SystemParametersInfoWrapW(
  2531. UINT uiAction,
  2532. UINT uiParam,
  2533. void *pvParam,
  2534. UINT fWinIni);
  2535. LWSTDAPI_(BOOL)
  2536. TrackPopupMenuWrap(HMENU hMenu, UINT uFlags, int x, int y, int nReserved, HWND hWnd, CONST RECT *prcRect);
  2537. LWSTDAPI_(BOOL)
  2538. TrackPopupMenuExWrap(HMENU hMenu, UINT uFlags, int x, int y, HWND hWnd, LPTPMPARAMS lptpm);
  2539. LWSTDAPI_(int)
  2540. TranslateAcceleratorWrapW(HWND hWnd, HACCEL hAccTable, LPMSG lpMsg);
  2541. LWSTDAPI_(BOOL)
  2542. UnregisterClassWrapW(LPCWSTR lpClassName, HINSTANCE hInstance);
  2543. // Cannot be LWSTDAPI because winver.h declares the function as STDAPI and not DLLIMPORT
  2544. STDAPI_(BOOL)
  2545. VerQueryValueWrapW(const LPVOID pBlock, LPWSTR pwzSubBlock, LPVOID *ppBuffer, PUINT puLen);
  2546. LWSTDAPI_(SHORT)
  2547. VkKeyScanWrapW(WCHAR ch);
  2548. LWSTDAPI_(BOOL)
  2549. WinHelpWrapW(HWND hwnd, LPCWSTR szFile, UINT uCmd, DWORD_PTR dwData);
  2550. LWSTDAPI_(int)
  2551. wvsprintfWrapW(LPWSTR pwszOut, LPCWSTR pwszFormat, va_list arglist);
  2552. // Cannot be LWSTDAPI because winnetp.h declares the function as STDAPI and not DLLIMPORT
  2553. STDAPI_(DWORD) WNetRestoreConnectionWrapW(IN HWND hwndParent, IN LPCWSTR pwzDevice);
  2554. // Cannot be LWSTDAPI because winnetwk.h declares the function as STDAPI and not DLLIMPORT
  2555. STDAPI_(DWORD) WNetGetLastErrorWrapW(OUT LPDWORD pdwError, OUT LPWSTR pwzErrorBuf, IN DWORD cchErrorBufSize, OUT LPWSTR pwzNameBuf, IN DWORD cchNameBufSize);
  2556. LWSTDAPI_(int) DrawTextExWrapW(HDC hdc, LPWSTR pwzText, int cchText, LPRECT lprc, UINT dwDTFormat, LPDRAWTEXTPARAMS lpDTParams);
  2557. LWSTDAPI_(BOOL) GetMenuItemInfoWrapW(HMENU hMenu, UINT uItem, BOOL fByPosition, LPMENUITEMINFOW pmiiW);
  2558. LWSTDAPI_(BOOL) InsertMenuItemWrapW(HMENU hMenu, UINT uItem, BOOL fByPosition, LPCMENUITEMINFOW pmiiW);
  2559. LWSTDAPI_(HFONT) CreateFontWrapW(int nHeight, int nWidth, int nEscapement, int nOrientation, int fnWeight, DWORD fdwItalic, DWORD fdwUnderline,
  2560. DWORD fdwStrikeOut, DWORD fdwCharSet, DWORD fdwOutputPrecision, DWORD fdwClipPrecision,
  2561. DWORD fdwQuality, DWORD fdwPitchAndFamily, LPCWSTR lpszFace);
  2562. LWSTDAPI_(HDC) CreateMetaFileWrapW(LPCWSTR pwzFile);
  2563. LWSTDAPI_(HANDLE) CreateMutexWrapW(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCWSTR pwzName);
  2564. LWSTDAPI_(DWORD) ExpandEnvironmentStringsWrapW(LPCWSTR pwszSrc, LPWSTR pwszDst, DWORD cchSize);
  2565. LWSTDAPI_(DWORD) SHExpandEnvironmentStringsA(LPCSTR pszSrc, LPSTR pszDst, DWORD cchSize);
  2566. LWSTDAPI_(DWORD) SHExpandEnvironmentStringsW(LPCWSTR pszSrc, LPWSTR pszDst, DWORD cchSize);
  2567. #ifdef UNICODE
  2568. #define SHExpandEnvironmentStrings SHExpandEnvironmentStringsW
  2569. #else
  2570. #define SHExpandEnvironmentStrings SHExpandEnvironmentStringsA
  2571. #endif // !UNICODE
  2572. LWSTDAPI_(DWORD) SHExpandEnvironmentStringsForUserA(HANDLE hToken, LPCSTR pszSrc, LPSTR pszDst, DWORD cchSize);
  2573. LWSTDAPI_(DWORD) SHExpandEnvironmentStringsForUserW(HANDLE hToken, LPCWSTR pszSrc, LPWSTR pszDst, DWORD cchSize);
  2574. #ifdef UNICODE
  2575. #define SHExpandEnvironmentStringsForUser SHExpandEnvironmentStringsForUserW
  2576. #else
  2577. #define SHExpandEnvironmentStringsForUser SHExpandEnvironmentStringsForUserA
  2578. #endif // !UNICODE
  2579. LWSTDAPI_(HANDLE) CreateSemaphoreWrapW(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCWSTR pwzName);
  2580. LWSTDAPI_(BOOL) IsBadStringPtrWrapW(LPCWSTR pwzString, UINT_PTR ucchMax);
  2581. LWSTDAPI_(HINSTANCE) LoadLibraryWrapW(LPCWSTR pwzLibFileName);
  2582. LWSTDAPI_(int) GetTimeFormatWrapW(LCID Locale, DWORD dwFlags, CONST SYSTEMTIME * lpTime, LPCWSTR pwzFormat, LPWSTR pwzTimeStr, int cchTime);
  2583. LWSTDAPI_(int) GetDateFormatWrapW(LCID Locale, DWORD dwFlags, CONST SYSTEMTIME * lpDate, LPCWSTR pwzFormat, LPWSTR pwzDateStr, int cchDate);
  2584. LWSTDAPI_(DWORD) GetPrivateProfileStringWrapW(LPCWSTR pwzAppName, LPCWSTR pwzKeyName, LPCWSTR pwzDefault, LPWSTR pwzReturnedString, DWORD cchSize, LPCWSTR pwzFileName);
  2585. LWSTDAPI_(BOOL) WritePrivateProfileStringWrapW(LPCWSTR pwzAppName, LPCWSTR pwzKeyName, LPCWSTR pwzString, LPCWSTR pwzFileName);
  2586. #ifndef SHFILEINFO_DEFINED
  2587. #define SHFILEINFO_DEFINED
  2588. /*
  2589. * The SHGetFileInfo API provides an easy way to get attributes
  2590. * for a file given a pathname.
  2591. *
  2592. * PARAMETERS
  2593. *
  2594. * pszPath file name to get info about
  2595. * dwFileAttributes file attribs, only used with SHGFI_USEFILEATTRIBUTES
  2596. * psfi place to return file info
  2597. * cbFileInfo size of structure
  2598. * uFlags flags
  2599. *
  2600. * RETURN
  2601. * TRUE if things worked
  2602. */
  2603. typedef struct _SHFILEINFOA
  2604. {
  2605. HICON hIcon; // out: icon
  2606. int iIcon; // out: icon index
  2607. DWORD dwAttributes; // out: SFGAO_ flags
  2608. CHAR szDisplayName[MAX_PATH]; // out: display name (or path)
  2609. CHAR szTypeName[80]; // out: type name
  2610. } SHFILEINFOA;
  2611. typedef struct _SHFILEINFOW
  2612. {
  2613. HICON hIcon; // out: icon
  2614. int iIcon; // out: icon index
  2615. DWORD dwAttributes; // out: SFGAO_ flags
  2616. WCHAR szDisplayName[MAX_PATH]; // out: display name (or path)
  2617. WCHAR szTypeName[80]; // out: type name
  2618. } SHFILEINFOW;
  2619. #ifdef UNICODE
  2620. typedef SHFILEINFOW SHFILEINFO;
  2621. #else
  2622. typedef SHFILEINFOA SHFILEINFO;
  2623. #endif // UNICODE
  2624. // NOTE: This is also in shellapi.h. Please keep in synch.
  2625. #endif // !SHFILEINFO_DEFINED
  2626. LWSTDAPI_(DWORD_PTR) SHGetFileInfoWrapW(LPCWSTR pwzPath, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT cbFileInfo, UINT uFlags);
  2627. LWSTDAPI_(ATOM) RegisterClassExWrapW(CONST WNDCLASSEXW *pwcx);
  2628. LWSTDAPI_(BOOL) GetClassInfoExWrapW(HINSTANCE hinst, LPCWSTR pwzClass, LPWNDCLASSEXW lpwcx);
  2629. // This allows us to be included either before or after shellapi.h
  2630. #ifdef STRICT
  2631. LWSTDAPI_(UINT) DragQueryFileWrapW(struct HDROP__*,UINT,LPWSTR,UINT);
  2632. #else
  2633. LWSTDAPI_(UINT) DragQueryFileWrapW(HANDLE,UINT,LPWSTR,UINT);
  2634. #endif
  2635. LWSTDAPI_(HWND) FindWindowExWrapW(HWND hwndParent, HWND hwndChildAfter, LPCWSTR pwzClassName, LPCWSTR pwzWindowName);
  2636. LWSTDAPI_(LPITEMIDLIST) SHBrowseForFolderWrapW(struct _browseinfoW * pbiW);
  2637. LWSTDAPI_(BOOL) SHGetPathFromIDListWrapW(LPCITEMIDLIST pidl, LPWSTR pwzPath);
  2638. LWSTDAPI_(BOOL) SHGetNewLinkInfoWrapW(LPCWSTR pszpdlLinkTo, LPCWSTR pszDir, LPWSTR pszName, BOOL *pfMustCopy, UINT uFlags);
  2639. LWSTDAPI SHDefExtractIconWrapW(LPCWSTR pszIconFile, int iIndex, UINT uFlags, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize);
  2640. LWSTDAPI_(BOOL) GetUserNameWrapW(LPWSTR pszBuffer, LPDWORD pcch);
  2641. LWSTDAPI_(LONG) RegEnumValueWrapW(HKEY hkey, DWORD dwIndex, LPWSTR lpValueName, LPDWORD lpcbValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData);
  2642. LWSTDAPI_(BOOL) WritePrivateProfileStructWrapW(LPCWSTR lpszSection, LPCWSTR lpszKey, LPVOID lpStruct, UINT uSizeStruct, LPCWSTR szFile);
  2643. LWSTDAPI_(BOOL) GetPrivateProfileStructWrapW(LPCWSTR lpszSection, LPCWSTR lpszKey, LPVOID lpStruct, UINT uSizeStruct, LPCWSTR szFile);
  2644. LWSTDAPI_(BOOL) CreateProcessWrapW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes,
  2645. LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory,
  2646. LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation);
  2647. LWSTDAPI_(HICON) ExtractIconWrapW(HINSTANCE hInst, LPCWSTR lpszExeFileName, UINT nIconIndex);
  2648. #ifndef WIN32_LEAN_AND_MEAN
  2649. // Cannot be LWSTDAPI because ddeml.h declares the function as STDAPI and not DLLIMPORT
  2650. STDAPI_(UINT) DdeInitializeWrapW(LPDWORD pidInst, PFNCALLBACK pfnCallback, DWORD afCmd, DWORD ulRes);
  2651. STDAPI_(HSZ) DdeCreateStringHandleWrapW(DWORD idInst, LPCWSTR psz, int iCodePage);
  2652. STDAPI_(DWORD) DdeQueryStringWrapW(DWORD idInst, HSZ hsz, LPWSTR psz, DWORD cchMax, int iCodePage);
  2653. LWSTDAPI_(BOOL) GetSaveFileNameWrapW(LPOPENFILENAMEW lpofn);
  2654. LWSTDAPI_(BOOL) GetOpenFileNameWrapW(LPOPENFILENAMEW lpofn);
  2655. LWSTDAPI_(BOOL) PrintDlgWrapW(LPPRINTDLGW lppd);
  2656. LWSTDAPI_(BOOL) PageSetupDlgWrapW(LPPAGESETUPDLGW lppsd);
  2657. #endif
  2658. LWSTDAPI_(void) SHChangeNotifyWrap(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2);
  2659. LWSTDAPI_(void) SHFlushSFCacheWrap(void);
  2660. LWSTDAPI_(BOOL) ShellExecuteExWrapW(struct _SHELLEXECUTEINFOW * pExecInfoW);
  2661. LWSTDAPI_(int) SHFileOperationWrapW(struct _SHFILEOPSTRUCTW * pFileOpW);
  2662. LWSTDAPI_(UINT) ExtractIconExWrapW(LPCWSTR pwzFile, int nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIcons);
  2663. LWSTDAPI_(BOOL) SetFileAttributesWrapW(LPCWSTR pwzFile, DWORD dwFileAttributes);
  2664. LWSTDAPI_(int) GetNumberFormatWrapW(LCID Locale, DWORD dwFlags, LPCWSTR pwzValue, CONST NUMBERFMTW * pFormatW, LPWSTR pwzNumberStr, int cchNumber);
  2665. LWSTDAPI_(int) MessageBoxWrapW(HWND hwnd, LPCWSTR pwzText, LPCWSTR pwzCaption, UINT uType);
  2666. LWSTDAPI_(BOOL) FindNextFileWrapW(HANDLE hSearchHandle, LPWIN32_FIND_DATAW pFindFileDataW);
  2667. #ifdef UNICODE
  2668. #define IsCharAlphaWrap IsCharAlphaWrapW
  2669. #define IsCharUpperWrap IsCharUpperWrapW
  2670. #define IsCharLowerWrap IsCharLowerWrapW
  2671. #define IsCharAlphaNumericWrap IsCharAlphaNumericWrapW
  2672. #define AppendMenuWrap AppendMenuWrapW
  2673. #ifdef POST_IE5_BETA
  2674. #define CallMsgFilterWrap CallMsgFilterWrapW
  2675. #endif
  2676. #define CallWindowProcWrap CallWindowProcWrapW
  2677. #define CharLowerWrap CharLowerWrapW
  2678. #define CharLowerBuffWrap CharLowerBuffWrapW
  2679. #define CharNextWrap CharNextWrapW
  2680. #define CharPrevWrap CharPrevWrapW
  2681. #define CharToOemWrap CharToOemWrapW
  2682. #define CharUpperWrap CharUpperWrapW
  2683. #define CharUpperBuffWrap CharUpperBuffWrapW
  2684. #define CompareStringWrap CompareStringWrapW
  2685. #define CopyAcceleratorTableWrap CopyAcceleratorTableWrapW
  2686. #define CreateAcceleratorTableWrap CreateAcceleratorTableWrapW
  2687. #define CreateDCWrap CreateDCWrapW
  2688. #define CreateDirectoryWrap CreateDirectoryWrapW
  2689. #define CreateEventWrap CreateEventWrapW
  2690. #define CreateFontWrap CreateFontWrapW
  2691. #define CreateFileWrap CreateFileWrapW
  2692. #define CreateFontIndirectWrap CreateFontIndirectWrapW
  2693. #define CreateICWrap CreateICWrapW
  2694. #define CreateMetaFileWrap CreateMetaFileWrapW
  2695. #define CreateMutexWrap CreateMutexWrapW
  2696. #define CreateSemaphoreWrap CreateSemaphoreWrapW
  2697. #define CreateWindowExWrap CreateWindowExWrapW
  2698. #define DefWindowProcWrap DefWindowProcWrapW
  2699. #define DeleteFileWrap DeleteFileWrapW
  2700. #define DispatchMessageWrap DispatchMessageWrapW
  2701. #define DrawTextExWrap DrawTextExWrapW
  2702. #define DrawTextWrap DrawTextWrapW
  2703. #define EnumFontFamiliesWrap EnumFontFamiliesWrapW
  2704. #define EnumFontFamiliesExWrap EnumFontFamiliesExWrapW
  2705. #define EnumResourceNamesWrap EnumResourceNamesWrapW
  2706. #define ExpandEnvironmentStringsWrap ExpandEnvironmentStringsWrapW
  2707. #define ExtractIconExWrap ExtractIconExWrapW
  2708. #define ExtTextOutWrap ExtTextOutW
  2709. #define FindFirstFileWrap FindFirstFileWrapW
  2710. #define FindNextFileWrap FindNextFileWrapW
  2711. #define FindResourceWrap FindResourceWrapW
  2712. #define FindWindowWrap FindWindowWrapW
  2713. #define FindWindowExWrap FindWindowExWrapW
  2714. #define FormatMessageWrap FormatMessageWrapW
  2715. #define GetClassInfoWrap GetClassInfoWrapW
  2716. #define GetClassInfoExWrap GetClassInfoExWrapW
  2717. #define GetClassLongWrap GetClassLongWrapW
  2718. #define GetClassNameWrap GetClassNameWrapW
  2719. #define GetClipboardFormatNameWrap GetClipboardFormatNameWrapW
  2720. #define GetCurrentDirectoryWrap GetCurrentDirectoryWrapW
  2721. #define GetDlgItemTextWrap GetDlgItemTextWrapW
  2722. #define GetFileAttributesWrap GetFileAttributesWrapW
  2723. #define GetFullPathNameWrap GetFullPathNameWrapW
  2724. #define GetLocaleInfoWrap GetLocaleInfoWrapW
  2725. #define GetMenuItemInfoWrap GetMenuItemInfoWrapW
  2726. #define GetMenuStringWrap GetMenuStringWrapW
  2727. #define GetMessageWrap GetMessageWrapW
  2728. #define GetModuleFileNameWrap GetModuleFileNameWrapW
  2729. #define GetNumberFormatWrap GetNumberFormatWrapW
  2730. #define GetSystemDirectoryWrap GetSystemDirectoryWrapW
  2731. #define GetEnvironmentVariableWrap GetEnvironmentVariableWrapW
  2732. #define GetModuleHandleWrap GetModuleHandleWrapW
  2733. #define GetObjectWrap GetObjectWrapW
  2734. #define GetPrivateProfileIntWrap GetPrivateProfileIntWrapW
  2735. #define GetProfileStringWrap GetProfileStringWrapW
  2736. #define GetPrivateProfileStringWrap GetPrivateProfileStringWrapW
  2737. #define WritePrivateProfileStringWrap WritePrivateProfileStringWrapW
  2738. #define GetPropWrap GetPropWrapW
  2739. #define GetStringTypeExWrap GetStringTypeExWrapW
  2740. #define GetTempFileNameWrap GetTempFileNameWrapW
  2741. #define GetTempPathWrap GetTempPathWrapW
  2742. #define GetTextExtentPoint32Wrap GetTextExtentPoint32WrapW
  2743. #define GetTextFaceWrap GetTextFaceWrapW
  2744. #define GetTextMetricsWrap GetTextMetricsWrapW
  2745. #define GetTimeFormatWrap GetTimeFormatWrapW
  2746. #define GetDateFormatWrap GetDateFormatWrapW
  2747. #define GetUserNameWrap GetUserNameWrapW
  2748. #define GetWindowLongWrap GetWindowLongWrapW
  2749. #define GetWindowTextWrap GetWindowTextWrapW
  2750. #define GetWindowTextLengthWrap GetWindowTextLengthWrapW
  2751. #define GetWindowsDirectoryWrap GetWindowsDirectoryWrapW
  2752. #define InsertMenuItemWrap InsertMenuItemWrapW
  2753. #define InsertMenuWrap InsertMenuWrapW
  2754. #define IsBadStringPtrWrap IsBadStringPtrWrapW
  2755. #define IsDialogMessageWrap IsDialogMessageWrapW
  2756. #define LoadAcceleratorsWrap LoadAcceleratorsWrapW
  2757. #define LoadBitmapWrap LoadBitmapWrapW
  2758. #define LoadCursorWrap LoadCursorWrapW
  2759. #define LoadIconWrap LoadIconWrapW
  2760. #define LoadImageWrap LoadImageWrapW
  2761. #define LoadLibraryWrap LoadLibraryWrapW
  2762. #define LoadLibraryExWrap LoadLibraryExWrapW
  2763. #define LoadMenuWrap LoadMenuWrapW
  2764. #define LoadStringWrap LoadStringWrapW
  2765. #define MessageBoxIndirectWrap MessageBoxIndirectWrapW
  2766. #define MessageBoxWrap MessageBoxWrapW
  2767. #define ModifyMenuWrap ModifyMenuWrapW
  2768. #define GetCharWidth32Wrap GetCharWidth32WrapW
  2769. #define GetCharacterPlacementWrap GetCharacterPlacementWrapW
  2770. #define CopyFileWrap CopyFileWrapW
  2771. #define MoveFileWrap MoveFileWrapW
  2772. #define OemToCharWrap OemToCharWrapW
  2773. #define OutputDebugStringWrap OutputDebugStringWrapW
  2774. #define PeekMessageWrap PeekMessageWrapW
  2775. #define PostMessageWrap PostMessageWrapW
  2776. #define PostThreadMessageWrap PostThreadMessageWrapW
  2777. #define RegCreateKeyWrap RegCreateKeyWrapW
  2778. #define RegCreateKeyExWrap RegCreateKeyExWrapW
  2779. #define RegDeleteKeyWrap RegDeleteKeyWrapW
  2780. #define RegDeleteValueWrap RegDeleteValueWrapW
  2781. #define RegEnumKeyWrap RegEnumKeyWrapW
  2782. #define RegEnumKeyExWrap RegEnumKeyExWrapW
  2783. #define RegOpenKeyWrap RegOpenKeyWrapW
  2784. #define RegOpenKeyExWrap RegOpenKeyExWrapW
  2785. #define RegQueryInfoKeyWrap RegQueryInfoKeyWrapW
  2786. #define RegQueryValueWrap RegQueryValueWrapW
  2787. #define RegQueryValueExWrap RegQueryValueExWrapW
  2788. #define RegSetValueWrap RegSetValueWrapW
  2789. #define RegSetValueExWrap RegSetValueExWrapW
  2790. #define RegisterClassWrap RegisterClassWrapW
  2791. #define RegisterClassExWrap RegisterClassExWrapW
  2792. #define RegisterClipboardFormatWrap RegisterClipboardFormatWrapW
  2793. #define RegisterWindowMessageWrap RegisterWindowMessageWrapW
  2794. #define RemovePropWrap RemovePropWrapW
  2795. #define SearchPathWrap SearchPathWrapW
  2796. #define SendDlgItemMessageWrap SendDlgItemMessageWrapW
  2797. #define SendMessageWrap SendMessageWrapW
  2798. #define SendMessageTimeoutWrap SendMessageTimeoutWrapW
  2799. #define SetCurrentDirectoryWrap SetCurrentDirectoryWrapW
  2800. #define SetDlgItemTextWrap SetDlgItemTextWrapW
  2801. #define SetMenuItemInfoWrap SetMenuItemInfoWrapW
  2802. #define SetPropWrap SetPropWrapW
  2803. #define SetFileAttributesWrap SetFileAttributesWrapW
  2804. #define SetWindowLongWrap SetWindowLongWrapW
  2805. #define SetWindowsHookExWrap SetWindowsHookExWrapW
  2806. #define SHBrowseForFolderWrap SHBrowseForFolderWrapW
  2807. #define ShellExecuteExWrap ShellExecuteExWrapW
  2808. #define SHFileOperationWrap SHFileOperationWrapW
  2809. #define SHGetFileInfoWrap SHGetFileInfoWrapW
  2810. #define SHGetPathFromIDListWrap SHGetPathFromIDListWrapW
  2811. #define StartDocWrap StartDocWrapW
  2812. #define SystemParametersInfoWrap SystemParametersInfoWrapW
  2813. #define TranslateAcceleratorWrap TranslateAcceleratorWrapW
  2814. #define UnregisterClassWrap UnregisterClassWrapW
  2815. #define VkKeyScanWrap VkKeyScanWrapW
  2816. #define WinHelpWrap WinHelpWrapW
  2817. #define WNetRestoreConnectionWrap WNetRestoreConnectionWrapW
  2818. #define WNetGetLastErrorWrap WNetGetLastErrorWrapW
  2819. #define wvsprintfWrap wvsprintfWrapW
  2820. #define CreateFontWrap CreateFontWrapW
  2821. #define DrawTextExWrap DrawTextExWrapW
  2822. #define GetMenuItemInfoWrap GetMenuItemInfoWrapW
  2823. #define SetMenuItemInfoWrap SetMenuItemInfoWrapW
  2824. #define InsertMenuItemWrap InsertMenuItemWrapW
  2825. #define DragQueryFileWrap DragQueryFileWrapW
  2826. #else
  2827. #define IsCharAlphaWrap IsCharAlphaA
  2828. #define IsCharUpperWrap IsCharUpperA
  2829. #define IsCharLowerWrap IsCharLowerA
  2830. #define IsCharAlphaNumericWrap IsCharAlphaNumericA
  2831. #define AppendMenuWrap AppendMenuA
  2832. #ifdef POST_IE5_BETA
  2833. #define CallMsgFilterWrap CallMsgFilterA
  2834. #endif
  2835. #define CallWindowProcWrap CallWindowProcA
  2836. #define CharLowerWrap CharLowerA
  2837. #define CharLowerBuffWrap CharLowerBuffA
  2838. #define CharNextWrap CharNextA
  2839. #define CharPrevWrap CharPrevA
  2840. #define CharToOemWrap CharToOemA
  2841. #define CharUpperWrap CharUpperA
  2842. #define CharUpperBuffWrap CharUpperBuffA
  2843. #define CompareStringWrap CompareStringA
  2844. #define CopyAcceleratorTableWrap CopyAcceleratorTableA
  2845. #define CreateAcceleratorTableWrap CreateAcceleratorTableA
  2846. #define CreateDCWrap CreateDCA
  2847. #define CreateDirectoryWrap CreateDirectoryA
  2848. #define CreateEventWrap CreateEventA
  2849. #define CreateFontWrap CreateFontA
  2850. #define CreateFileWrap CreateFileA
  2851. #define CreateFontIndirectWrap CreateFontIndirectA
  2852. #define CreateICWrap CreateICA
  2853. #define CreateMetaFileWrap CreateMetaFileA
  2854. #define CreateMutexWrap CreateMutexA
  2855. #define CreateSemaphoreWrap CreateSemaphoreA
  2856. #define CreateWindowExWrap CreateWindowExA
  2857. #define DefWindowProcWrap DefWindowProcA
  2858. #define DeleteFileWrap DeleteFileA
  2859. #define DispatchMessageWrap DispatchMessageA
  2860. #define DrawTextExWrap DrawTextExA
  2861. #define DrawTextWrap DrawTextA
  2862. #define EnumFontFamiliesWrap EnumFontFamiliesA
  2863. #define EnumFontFamiliesExWrap EnumFontFamiliesExA
  2864. #define EnumResourceNamesWrap EnumResourceNamesA
  2865. #define ExpandEnvironmentStringsWrap ExpandEnvironmentStringsA
  2866. #define ExtractIconExWrap ExtractIconExA
  2867. #define ExtTextOutWrap ExtTextOutA
  2868. #define FindFirstFileWrap FindFirstFileA
  2869. #define FindResourceWrap FindResourceA
  2870. #define FindNextFileWrap FindNextFileA
  2871. #define FindWindowWrap FindWindowA
  2872. #define FindWindowExWrap FindWindowExA
  2873. #define FormatMessageWrap FormatMessageA
  2874. #define GetClassInfoWrap GetClassInfoA
  2875. #define GetClassInfoExWrap GetClassInfoExA
  2876. #define GetClassLongWrap GetClassLongA
  2877. #define GetClassNameWrap GetClassNameA
  2878. #define GetClipboardFormatNameWrap GetClipboardFormatNameA
  2879. #define GetCurrentDirectoryWrap GetCurrentDirectoryA
  2880. #define GetDlgItemTextWrap GetDlgItemTextA
  2881. #define GetFileAttributesWrap GetFileAttributesA
  2882. #define GetFullPathNameWrap GetFullPathNameA
  2883. #define GetLocaleInfoWrap GetLocaleInfoA
  2884. #define GetMenuItemInfoWrap GetMenuItemInfoA
  2885. #define GetMenuStringWrap GetMenuStringA
  2886. #define GetMessageWrap GetMessageA
  2887. #define GetModuleFileNameWrap GetModuleFileNameA
  2888. #define GetNumberFormatWrap GetNumberFormatA
  2889. #define GetPrivateProfileStringWrap GetPrivateProfileStringA
  2890. #define WritePrivateProfileStringWrap WritePrivateProfileStringA
  2891. #define GetSystemDirectoryWrap GetSystemDirectoryA
  2892. #define GetEnvironmentVariableWrap GetEnvironmentVariableA
  2893. #define SearchPathWrap SearchPathA
  2894. #define GetModuleHandleWrap GetModuleHandleA
  2895. #define GetObjectWrap GetObjectA
  2896. #define GetPrivateProfileIntWrap GetPrivateProfileIntA
  2897. #define GetProfileStringWrap GetProfileStringA
  2898. #define GetPropWrap GetPropA
  2899. #define GetStringTypeExWrap GetStringTypeExA
  2900. #define GetTempFileNameWrap GetTempFileNameA
  2901. #define GetTempPathWrap GetTempPathA
  2902. #define GetTextExtentPoint32Wrap GetTextExtentPoint32A
  2903. #define GetTextFaceWrap GetTextFaceA
  2904. #define GetTextMetricsWrap GetTextMetricsA
  2905. #define GetTimeFormatWrap GetTimeFormatA
  2906. #define GetDateFormatWrap GetDateFormatA
  2907. #define GetUserNameWrap GetUserNameA
  2908. #define GetWindowLongWrap GetWindowLongA
  2909. #define GetWindowTextWrap GetWindowTextA
  2910. #define GetWindowTextLengthWrap GetWindowTextLengthA
  2911. #define GetWindowsDirectoryWrap GetWindowsDirectoryA
  2912. #define InsertMenuItemWrap InsertMenuItemA
  2913. #define InsertMenuWrap InsertMenuA
  2914. #define IsBadStringPtrWrap IsBadStringPtrA
  2915. #define IsDialogMessageWrap IsDialogMessageA
  2916. #define LoadAcceleratorsWrap LoadAcceleratorsA
  2917. #define LoadBitmapWrap LoadBitmapA
  2918. #define LoadCursorWrap LoadCursorA
  2919. #define LoadIconWrap LoadIconA
  2920. #define LoadImageWrap LoadImageWrapA
  2921. #define LoadLibraryWrap LoadLibraryA
  2922. #define LoadLibraryExWrap LoadLibraryExA
  2923. #define LoadMenuWrap LoadMenuA
  2924. #define LoadStringWrap LoadStringA
  2925. #define MessageBoxIndirectWrap MessageBoxIndirectA
  2926. #define MessageBoxWrap MessageBoxA
  2927. #define ModifyMenuWrap ModifyMenuA
  2928. #define GetCharWidth32Wrap GetCharWidth32A
  2929. #define GetCharacterPlacementWrap GetCharacterPlacementA
  2930. #define CopyFileWrap CopyFileA
  2931. #define MoveFileWrap MoveFileA
  2932. #define OemToCharWrap OemToCharA
  2933. #define OutputDebugStringWrap OutputDebugStringA
  2934. #define PeekMessageWrap PeekMessageA
  2935. #define PostMessageWrap PostMessageA
  2936. #define PostThreadMessageWrap PostThreadMessageA
  2937. #define RegCreateKeyWrap RegCreateKeyA
  2938. #define RegCreateKeyExWrap RegCreateKeyExA
  2939. #define RegDeleteKeyWrap RegDeleteKeyA
  2940. #define RegDeleteValueWrap RegDeleteValueA
  2941. #define RegEnumKeyWrap RegEnumKeyA
  2942. #define RegEnumKeyExWrap RegEnumKeyExA
  2943. #define RegOpenKeyWrap RegOpenKeyA
  2944. #define RegOpenKeyExWrap RegOpenKeyExA
  2945. #define RegQueryInfoKeyWrap RegQueryInfoKeyA
  2946. #define RegQueryValueWrap RegQueryValueA
  2947. #define RegQueryValueExWrap RegQueryValueExA
  2948. #define RegSetValueWrap RegSetValueA
  2949. #define RegSetValueExWrap RegSetValueExA
  2950. #define RegisterClassWrap RegisterClassA
  2951. #define RegisterClassExWrap RegisterClassExA
  2952. #define RegisterClipboardFormatWrap RegisterClipboardFormatA
  2953. #define RegisterWindowMessageWrap RegisterWindowMessageA
  2954. #define RemovePropWrap RemovePropA
  2955. #define SendDlgItemMessageWrap SendDlgItemMessageA
  2956. #define SendMessageWrap SendMessageA
  2957. #define SendMessageTimeoutWrap SendMessageTimeoutA
  2958. #define SetCurrentDirectoryWrap SetCurrentDirectoryA
  2959. #define SetDlgItemTextWrap SetDlgItemTextA
  2960. #define SetMenuItemInfoWrap SetMenuItemInfoA
  2961. #define SetPropWrap SetPropA
  2962. #define SetWindowLongWrap SetWindowLongA
  2963. #define SHBrowseForFolderWrap SHBrowseForFolderA
  2964. #define ShellExecuteExWrap ShellExecuteExA
  2965. #define SHFileOperationWrap SHFileOperationA
  2966. #define SHGetFileInfoWrap SHGetFileInfoA
  2967. #define SHGetPathFromIDListWrap SHGetPathFromIDListA
  2968. #define SetFileAttributesWrap SetFileAttributesA
  2969. #define SetWindowsHookExWrap SetWindowsHookExA
  2970. #define StartDocWrap StartDocA
  2971. #define SystemParametersInfoWrap SystemParametersInfoA
  2972. #define TranslateAcceleratorWrap TranslateAcceleratorA
  2973. #define UnregisterClassWrap UnregisterClassA
  2974. #define VkKeyScanWrap VkKeyScanA
  2975. #define WinHelpWrap WinHelpA
  2976. #define WNetRestoreConnectionWrap WNetRestoreConnectionA
  2977. #define WNetGetLastErrorWrap WNetGetLastErrorA
  2978. #define wvsprintfWrap wvsprintfA
  2979. #define CreateFontWrap CreateFontA
  2980. #define DrawTextExWrap DrawTextExA
  2981. #define GetMenuItemInfoWrap GetMenuItemInfoA
  2982. #define SetMenuItemInfoWrap SetMenuItemInfoA
  2983. #define InsertMenuItemWrap InsertMenuItemA
  2984. #define DragQueryFileWrap DragQueryFileA
  2985. #endif
  2986. #endif // (_WIN32_IE >= 0x0500) && !defined(NO_SHLWAPI_UNITHUNK)
  2987. #if defined(UNIX) && defined(NO_SHLWAPI_UNITHUNK)
  2988. #define SHFlushSFCacheWrap()
  2989. #ifdef UNICODE
  2990. #define IsCharAlphaWrapW IsCharAlphaW
  2991. #define IsCharUpperWrapW IsCharUpperW
  2992. #define IsCharLowerWrapW IsCharLowerW
  2993. #define IsCharAlphaNumericWrapW IsCharAlphaNumericW
  2994. #define AppendMenuWrapW AppendMenuW
  2995. #ifdef POST_IE5_BETA
  2996. #define CallMsgFilterWrapW CallMsgFilterW
  2997. #endif
  2998. #define CallWindowProcWrapW CallWindowProcW
  2999. #define CharLowerWrapW CharLowerW
  3000. #define CharLowerBuffWrapW CharLowerBuffW
  3001. #define CharNextWrapW CharNextW
  3002. #define CharPrevWrapW CharPrevW
  3003. #define CharToOemWrapW CharToOemW
  3004. #define CharUpperWrapW CharUpperW
  3005. #define CharUpperBuffWrapW CharUpperBuffW
  3006. #define CompareStringWrapW CompareStringW
  3007. #define CopyAcceleratorTableWrapW CopyAcceleratorTableW
  3008. #define CreateAcceleratorTableWrapW CreateAcceleratorTableW
  3009. #define CreateDCWrapW CreateDCW
  3010. #define CreateDirectoryWrapW CreateDirectoryW
  3011. #define CreateEventWrapW CreateEventW
  3012. #define CreateFontWrapW CreateFontW
  3013. #define CreateFileWrapW CreateFileW
  3014. #define CreateFontIndirectWrapW CreateFontIndirectW
  3015. #define CreateICWrapW CreateICW
  3016. #define CreateMetaFileWrapW CreateMetaFileW
  3017. #define CreateMutexWrapW CreateMutexW
  3018. #define CreateSemaphoreWrapW CreateSemaphoreW
  3019. #define CreateWindowExWrapW CreateWindowExW
  3020. #define DefWindowProcWrapW DefWindowProcW
  3021. #define DeleteFileWrapW DeleteFileW
  3022. #define DispatchMessageWrapW DispatchMessageW
  3023. #define DrawTextExWrapW DrawTextExW
  3024. #define DrawTextWrapW DrawTextW
  3025. #define EnumFontFamiliesWrapW EnumFontFamiliesW
  3026. #define EnumFontFamiliesExWrapW EnumFontFamiliesExW
  3027. #define EnumResourceNamesWrapW EnumResourceNamesW
  3028. #define ExpandEnvironmentStringsWrapW ExpandEnvironmentStringsW
  3029. #define ExtractIconExWrapW ExtractIconExW
  3030. #define ExtTextOutWrapW ExtTextOutW
  3031. #define FindFirstFileWrapW FindFirstFileW
  3032. #define FindNextFileWrapW FindNextFileW
  3033. #define FindResourceWrapW FindResourceW
  3034. #define FindWindowWrapW FindWindowW
  3035. #define FindWindowExWrapW FindWindowExW
  3036. #define FormatMessageWrapW FormatMessageW
  3037. #define GetClassInfoWrapW GetClassInfoW
  3038. #define GetClassInfoExWrapW GetClassInfoExW
  3039. #define GetClassLongWrapW GetClassLongW
  3040. #define GetClassNameWrapW GetClassNameW
  3041. #define GetClipboardFormatNameWrapW GetClipboardFormatNameW
  3042. #define GetCurrentDirectoryWrapW GetCurrentDirectoryW
  3043. #define GetDlgItemTextWrapW GetDlgItemTextW
  3044. #define GetFileAttributesWrapW GetFileAttributesW
  3045. #define GetFullPathNameWrapW GetFullPathNameW
  3046. #define GetLocaleInfoWrapW GetLocaleInfoW
  3047. #define GetMenuStringWrapW GetMenuStringW
  3048. #define GetMessageWrapW GetMessageW
  3049. #define GetModuleFileNameWrapW GetModuleFileNameW
  3050. #define GetNumberFormatWrapW GetNumberFormatW
  3051. #define GetSystemDirectoryWrapW GetSystemDirectoryW
  3052. #define GetModuleHandleWrapW GetModuleHandleW
  3053. #define GetObjectWrapW GetObjectW
  3054. #define GetPrivateProfileIntWrapW GetPrivateProfileIntW
  3055. #define GetProfileStringWrapW GetProfileStringW
  3056. #define GetPrivateProfileStringWrapW GetPrivateProfileStringW
  3057. #define WritePrivateProfileStringWrapW WritePrivateProfileStringW
  3058. #define GetPropWrapW GetPropW
  3059. #define GetStringTypeExWrapW GetStringTypeExW
  3060. #define GetTempFileNameWrapW GetTempFileNameW
  3061. #define GetTempPathWrapW GetTempPathW
  3062. #define GetTextExtentPoint32WrapW GetTextExtentPoint32W
  3063. #define GetTextFaceWrapW GetTextFaceW
  3064. #define GetTextMetricsWrapW GetTextMetricsW
  3065. #define GetTimeFormatWrapW GetTimeFormatW
  3066. #define GetDateFormatWrapW GetDateFormatW
  3067. #define GetUserNameWrapW GetUserNameW
  3068. #define GetWindowLongWrapW GetWindowLongW
  3069. #define GetWindowTextWrapW GetWindowTextW
  3070. #define GetWindowTextLengthWrapW GetWindowTextLengthW
  3071. #define GetWindowsDirectoryWrapW GetWindowsDirectoryW
  3072. #define InsertMenuItemWrapW InsertMenuItemW
  3073. #define InsertMenuWrapW InsertMenuW
  3074. #define IsBadStringPtrWrapW IsBadStringPtrW
  3075. #define IsDialogMessageWrapW IsDialogMessageW
  3076. #define LoadAcceleratorsWrapW LoadAcceleratorsW
  3077. #define LoadBitmapWrapW LoadBitmapW
  3078. #define LoadCursorWrapW LoadCursorW
  3079. #define LoadIconWrapW LoadIconW
  3080. #define LoadImageWrapW LoadImageW
  3081. #define LoadLibraryWrapW LoadLibraryW
  3082. #define LoadLibraryExWrapW LoadLibraryExW
  3083. #define LoadMenuWrapW LoadMenuW
  3084. #define LoadStringWrapW LoadStringW
  3085. #define MessageBoxIndirectWrapW MessageBoxIndirectW
  3086. #define MessageBoxWrapW MessageBoxW
  3087. #define ModifyMenuWrapW ModifyMenuW
  3088. #define GetCharWidth32WrapW GetCharWidth32W
  3089. #define GetCharacterPlacementWrapW GetCharacterPlacementW
  3090. #define CopyFileWrapW CopyFileW
  3091. #define MoveFileWrapW MoveFileW
  3092. #define OemToCharWrapW OemToCharW
  3093. #define OutputDebugStringWrapW OutputDebugStringW
  3094. #define PeekMessageWrapW PeekMessageW
  3095. #define PostMessageWrapW PostMessageW
  3096. #define PostThreadMessageWrapW PostThreadMessageW
  3097. #define RegCreateKeyWrapW RegCreateKeyW
  3098. #define RegCreateKeyExWrapW RegCreateKeyExW
  3099. #define RegDeleteKeyWrapW RegDeleteKeyW
  3100. #define RegDeleteValueWrapW RegDeleteValueW
  3101. #define RegEnumKeyWrapW RegEnumKeyW
  3102. #define RegEnumKeyExWrapW RegEnumKeyExW
  3103. #define RegOpenKeyWrapW RegOpenKeyW
  3104. #define RegOpenKeyExWrapW RegOpenKeyExW
  3105. #define RegQueryInfoKeyWrapW RegQueryInfoKeyW
  3106. #define RegQueryValueWrapW RegQueryValueW
  3107. #define RegQueryValueExWrapW RegQueryValueExW
  3108. #define RegSetValueWrapW RegSetValueW
  3109. #define RegSetValueExWrapW RegSetValueExW
  3110. #define RegisterClassWrapW RegisterClassW
  3111. #define RegisterClassExWrapW RegisterClassExW
  3112. #define RegisterClipboardFormatWrapWRegisterClipboardFormatW
  3113. #define RegisterWindowMessageWrapW RegisterWindowMessageW
  3114. #define RemovePropWrapW RemovePropW
  3115. #define SearchPathWrapW SearchPathW
  3116. #define SendDlgItemMessageWrapW SendDlgItemMessageW
  3117. #define SendMessageWrapW SendMessageW
  3118. #define SetCurrentDirectoryWrapW SetCurrentDirectoryW
  3119. #define SetDlgItemTextWrapW SetDlgItemTextW
  3120. #define SetMenuItemInfoWrapW SetMenuItemInfoW
  3121. #define SetPropWrapW SetPropW
  3122. #define SetFileAttributesWrapW SetFileAttributesW
  3123. #define SetWindowLongWrapW SetWindowLongW
  3124. #define SetWindowsHookExWrapW SetWindowsHookExW
  3125. #define SHBrowseForFolderWrapW SHBrowseForFolderW
  3126. #define ShellExecuteExWrapW ShellExecuteExW
  3127. #define SHFileOperationWrapW SHFileOperationW
  3128. #define SHGetFileInfoWrapW SHGetFileInfoW
  3129. #define SHGetPathFromIDListWrapW SHGetPathFromIDListW
  3130. #define StartDocWrapW StartDocW
  3131. #define SystemParametersInfoWrapW SystemParametersInfoW
  3132. #define TranslateAcceleratorWrapW TranslateAcceleratorW
  3133. #define UnregisterClassWrapW UnregisterClassW
  3134. #define VkKeyScanWrapW VkKeyScanW
  3135. #define WinHelpWrapW WinHelpW
  3136. #define WNetRestoreConnectionWrapW WNetRestoreConnectionW
  3137. #define WNetGetLastErrorWrapW WNetGetLastErrorW
  3138. #define wvsprintfWrapW wvsprintfW
  3139. #define CreateFontWrapW CreateFontW
  3140. #define DrawTextExWrapW DrawTextExW
  3141. #define SetMenuItemInfoWrapW SetMenuItemInfoW
  3142. #define InsertMenuItemWrapW InsertMenuItemW
  3143. #define DragQueryFileWrapW DragQueryFileW
  3144. #define IsCharAlphaWrap IsCharAlphaW
  3145. #define IsCharUpperWrap IsCharUpperW
  3146. #define IsCharLowerWrap IsCharLowerW
  3147. #define IsCharAlphaNumericWrap IsCharAlphaNumericW
  3148. #define AppendMenuWrap AppendMenuW
  3149. #ifdef POST_IE5_BETA
  3150. #define CallMsgFilterWrap CallMsgFilterW
  3151. #endif
  3152. #define CallWindowProcWrap CallWindowProcW
  3153. #define CharLowerWrap CharLowerW
  3154. #define CharLowerBuffWrap CharLowerBuffW
  3155. #define CharNextWrap CharNextW
  3156. #define CharPrevWrap CharPrevW
  3157. #define CharToOemWrap CharToOemW
  3158. #define CharUpperWrap CharUpperW
  3159. #define CharUpperBuffWrap CharUpperBuffW
  3160. #define CompareStringWrap CompareStringW
  3161. #define CopyAcceleratorTableWrap CopyAcceleratorTableW
  3162. #define CreateAcceleratorTableWrap CreateAcceleratorTableW
  3163. #define CreateDCWrap CreateDCW
  3164. #define CreateDirectoryWrap CreateDirectoryW
  3165. #define CreateEventWrap CreateEventW
  3166. #define CreateFontWrap CreateFontW
  3167. #define CreateFileWrap CreateFileW
  3168. #define CreateFontIndirectWrap CreateFontIndirectW
  3169. #define CreateICWrap CreateICW
  3170. #define CreateMetaFileWrap CreateMetaFileW
  3171. #define CreateMutexWrap CreateMutexW
  3172. #define CreateSemaphoreWrap CreateSemaphoreW
  3173. #define CreateWindowExWrap CreateWindowExW
  3174. #define DefWindowProcWrap DefWindowProcW
  3175. #define DeleteFileWrap DeleteFileW
  3176. #define DispatchMessageWrap DispatchMessageW
  3177. #define DrawTextExWrap DrawTextExW
  3178. #define DrawTextWrap DrawTextW
  3179. #define EnumFontFamiliesWrap EnumFontFamiliesW
  3180. #define EnumFontFamiliesExWrap EnumFontFamiliesExW
  3181. #define EnumResourceNamesWrap EnumResourceNamesW
  3182. #define ExpandEnvironmentStringsWrap ExpandEnvironmentStringsW
  3183. #define ExtractIconExWrap ExtractIconExW
  3184. #define ExtTextOutWrap ExtTextOutW
  3185. #define FindFirstFileWrap FindFirstFileW
  3186. #define FindNextFileWrap FindNextFileW
  3187. #define FindResourceWrap FindResourceW
  3188. #define FindWindowWrap FindWindowW
  3189. #define FindWindowExWrap FindWindowExW
  3190. #define FormatMessageWrap FormatMessageW
  3191. #define GetClassInfoWrap GetClassInfoW
  3192. #define GetClassInfoExWrap GetClassInfoExW
  3193. #define GetClassLongWrap GetClassLongW
  3194. #define GetClassNameWrap GetClassNameW
  3195. #define GetClipboardFormatNameWrap GetClipboardFormatNameW
  3196. #define GetCurrentDirectoryWrap GetCurrentDirectoryW
  3197. #define GetDlgItemTextWrap GetDlgItemTextW
  3198. #define GetFileAttributesWrap GetFileAttributesW
  3199. #define GetFullPathNameWrap GetFullPathNameW
  3200. #define GetLocaleInfoWrap GetLocaleInfoW
  3201. #define GetMenuItemInfoWrap GetMenuItemInfoWrapW
  3202. #define GetMenuStringWrap GetMenuStringW
  3203. #define GetMessageWrap GetMessageW
  3204. #define GetModuleFileNameWrap GetModuleFileNameW
  3205. #define GetNumberFormatWrap GetNumberFormatW
  3206. #define GetSystemDirectoryWrap GetSystemDirectoryW
  3207. #define GetModuleHandleWrap GetModuleHandleW
  3208. #define GetObjectWrap GetObjectW
  3209. #define GetPrivateProfileIntWrap GetPrivateProfileIntW
  3210. #define GetProfileStringWrap GetProfileStringW
  3211. #define GetPrivateProfileStringWrap GetPrivateProfileStringW
  3212. #define WritePrivateProfileStringWrap WritePrivateProfileStringW
  3213. #define GetPropWrap GetPropW
  3214. #define GetStringTypeExWrap GetStringTypeExW
  3215. #define GetTempFileNameWrap GetTempFileNameW
  3216. #define GetTempPathWrap GetTempPathW
  3217. #define GetTextExtentPoint32Wrap GetTextExtentPoint32W
  3218. #define GetTextFaceWrap GetTextFaceW
  3219. #define GetTextMetricsWrap GetTextMetricsW
  3220. #define GetTimeFormatWrap GetTimeFormatW
  3221. #define GetDateFormatWrap GetDateFormatW
  3222. #define GetUserNameWrap GetUserNameW
  3223. #define GetWindowLongWrap GetWindowLongW
  3224. #define GetWindowTextWrap GetWindowTextW
  3225. #define GetWindowTextLengthWrap GetWindowTextLengthW
  3226. #define GetWindowsDirectoryWrap GetWindowsDirectoryW
  3227. #define InsertMenuItemWrap InsertMenuItemW
  3228. #define InsertMenuWrap InsertMenuW
  3229. #define IsBadStringPtrWrap IsBadStringPtrW
  3230. #define IsDialogMessageWrap IsDialogMessageW
  3231. #define LoadAcceleratorsWrap LoadAcceleratorsW
  3232. #define LoadBitmapWrap LoadBitmapW
  3233. #define LoadCursorWrap LoadCursorW
  3234. #define LoadIconWrap LoadIconW
  3235. #define LoadImageWrap LoadImageW
  3236. #define LoadLibraryWrap LoadLibraryW
  3237. #define LoadLibraryExWrap LoadLibraryExW
  3238. #define LoadMenuWrap LoadMenuW
  3239. #define LoadStringWrap LoadStringW
  3240. #define MessageBoxIndirectWrap MessageBoxIndirectW
  3241. #define MessageBoxWrap MessageBoxW
  3242. #define ModifyMenuWrap ModifyMenuW
  3243. #define GetCharWidth32Wrap GetCharWidth32W
  3244. #define GetCharacterPlacementWrap GetCharacterPlacementW
  3245. #define CopyFileWrap CopyFileW
  3246. #define MoveFileWrap MoveFileW
  3247. #define OemToCharWrap OemToCharW
  3248. #define OutputDebugStringWrap OutputDebugStringW
  3249. #define PeekMessageWrap PeekMessageW
  3250. #define PostMessageWrap PostMessageW
  3251. #define PostThreadMessageWrap PostThreadMessageW
  3252. #define RegCreateKeyWrap RegCreateKeyW
  3253. #define RegCreateKeyExWrap RegCreateKeyExW
  3254. #define RegDeleteKeyWrap RegDeleteKeyW
  3255. #define RegDeleteValueWrap RegDeleteValueW
  3256. #define RegEnumKeyWrap RegEnumKeyW
  3257. #define RegEnumKeyExWrap RegEnumKeyExW
  3258. #define RegOpenKeyWrap RegOpenKeyW
  3259. #define RegOpenKeyExWrap RegOpenKeyExW
  3260. #define RegQueryInfoKeyWrap RegQueryInfoKeyW
  3261. #define RegQueryValueWrap RegQueryValueW
  3262. #define RegQueryValueExWrap RegQueryValueExW
  3263. #define RegSetValueWrap RegSetValueW
  3264. #define RegSetValueExWrap RegSetValueExW
  3265. #define RegisterClassWrap RegisterClassW
  3266. #define RegisterClassExWrap RegisterClassExW
  3267. #define RegisterClipboardFormatWrap RegisterClipboardFormatW
  3268. #define RegisterWindowMessageWrap RegisterWindowMessageW
  3269. #define RemovePropWrap RemovePropW
  3270. #define SearchPathWrap SearchPathW
  3271. #define SendDlgItemMessageWrap SendDlgItemMessageW
  3272. #define SendMessageWrap SendMessageW
  3273. #define SetCurrentDirectoryWrap SetCurrentDirectoryW
  3274. #define SetDlgItemTextWrap SetDlgItemTextW
  3275. #define SetMenuItemInfoWrap SetMenuItemInfoW
  3276. #define SetPropWrap SetPropW
  3277. #define SetFileAttributesWrap SetFileAttributesW
  3278. #define SetWindowLongWrap SetWindowLongW
  3279. #define SetWindowsHookExWrap SetWindowsHookExW
  3280. #define SHBrowseForFolderWrap SHBrowseForFolderW
  3281. #define ShellExecuteExWrap ShellExecuteExW
  3282. #define SHFileOperationWrap SHFileOperationW
  3283. #define SHGetFileInfoWrap SHGetFileInfoW
  3284. #define SHGetPathFromIDListWrap SHGetPathFromIDListW
  3285. #define StartDocWrap StartDocW
  3286. #define SystemParametersInfoWrap SystemParametersInfoW
  3287. #define TranslateAcceleratorWrap TranslateAcceleratorW
  3288. #define UnregisterClassWrap UnregisterClassW
  3289. #define VkKeyScanWrap VkKeyScanW
  3290. #define WinHelpWrap WinHelpW
  3291. #define WNetRestoreConnectionWrap WNetRestoreConnectionW
  3292. #define WNetGetLastErrorWrap WNetGetLastErrorW
  3293. #define wvsprintfWrap wvsprintfW
  3294. #define CreateFontWrap CreateFontW
  3295. #define DrawTextExWrap DrawTextExW
  3296. #define GetMenuItemInfoWrap GetMenuItemInfoWrapW
  3297. #define SetMenuItemInfoWrap SetMenuItemInfoW
  3298. #define InsertMenuItemWrap InsertMenuItemW
  3299. #define DragQueryFileWrap DragQueryFileW
  3300. #else
  3301. #define IsCharAlphaWrap IsCharAlphaA
  3302. #define IsCharUpperWrap IsCharUpperA
  3303. #define IsCharLowerWrap IsCharLowerA
  3304. #define IsCharAlphaNumericWrap IsCharAlphaNumericA
  3305. #define AppendMenuWrap AppendMenuA
  3306. #ifdef POST_IE5_BETA
  3307. #define CallMsgFilterWrap CallMsgFilterA
  3308. #endif
  3309. #define CallWindowProcWrap CallWindowProcA
  3310. #define CharLowerWrap CharLowerA
  3311. #define CharLowerBuffWrap CharLowerBuffA
  3312. #define CharNextWrap CharNextA
  3313. #define CharPrevWrap CharPrevA
  3314. #define CharToOemWrap CharToOemA
  3315. #define CharUpperWrap CharUpperA
  3316. #define CharUpperBuffWrap CharUpperBuffA
  3317. #define CompareStringWrap CompareStringA
  3318. #define CopyAcceleratorTableWrap CopyAcceleratorTableA
  3319. #define CreateAcceleratorTableWrap CreateAcceleratorTableA
  3320. #define CreateDCWrap CreateDCA
  3321. #define CreateDirectoryWrap CreateDirectoryA
  3322. #define CreateEventWrap CreateEventA
  3323. #define CreateFontWrap CreateFontA
  3324. #define CreateFileWrap CreateFileA
  3325. #define CreateFontIndirectWrap CreateFontIndirectA
  3326. #define CreateICWrap CreateICA
  3327. #define CreateMetaFileWrap CreateMetaFileA
  3328. #define CreateMutexWrap CreateMutexA
  3329. #define CreateSemaphoreWrap CreateSemaphoreA
  3330. #define CreateWindowExWrap CreateWindowExA
  3331. #define DefWindowProcWrap DefWindowProcA
  3332. #define DeleteFileWrap DeleteFileA
  3333. #define DispatchMessageWrap DispatchMessageA
  3334. #define DrawTextExWrap DrawTextExA
  3335. #define DrawTextWrap DrawTextA
  3336. #define EnumFontFamiliesWrap EnumFontFamiliesA
  3337. #define EnumFontFamiliesExWrap EnumFontFamiliesExA
  3338. #define EnumResourceNamesWrap EnumResourceNamesA
  3339. #define ExpandEnvironmentStringsWrap ExpandEnvironmentStringsA
  3340. #define ExtractIconExWrap ExtractIconExA
  3341. #define ExtTextOutWrap ExtTextOutA
  3342. #define FindFirstFileWrap FindFirstFileA
  3343. #define FindResourceWrap FindResourceA
  3344. #define FindNextFileWrap FindNextFileA
  3345. #define FindWindowWrap FindWindowA
  3346. #define FindWindowExWrap FindWindowExA
  3347. #define FormatMessageWrap FormatMessageA
  3348. #define GetClassInfoWrap GetClassInfoA
  3349. #define GetClassInfoExWrap GetClassInfoExA
  3350. #define GetClassLongWrap GetClassLongA
  3351. #define GetClassNameWrap GetClassNameA
  3352. #define GetClipboardFormatNameWrap GetClipboardFormatNameA
  3353. #define GetCurrentDirectoryWrap GetCurrentDirectoryA
  3354. #define GetDlgItemTextWrap GetDlgItemTextA
  3355. #define GetFileAttributesWrap GetFileAttributesA
  3356. #define GetFullPathNameWrap GetFullPathNameA
  3357. #define GetLocaleInfoWrap GetLocaleInfoA
  3358. #define GetMenuItemInfoWrap GetMenuItemInfoA
  3359. #define GetMenuStringWrap GetMenuStringA
  3360. #define GetMessageWrap GetMessageA
  3361. #define GetModuleFileNameWrap GetModuleFileNameA
  3362. #define GetNumberFormatWrap GetNumberFormatA
  3363. #define GetPrivateProfileStringWrap GetPrivateProfileStringA
  3364. #define WritePrivateProfileStringWrap WritePrivateProfileStringA
  3365. #define GetSystemDirectoryWrap GetSystemDirectoryA
  3366. #define SearchPathWrap SearchPathA
  3367. #define GetModuleHandleWrap GetModuleHandleA
  3368. #define GetObjectWrap GetObjectA
  3369. #define GetPrivateProfileIntWrap GetPrivateProfileIntA
  3370. #define GetProfileStringWrap GetProfileStringA
  3371. #define GetPropWrap GetPropA
  3372. #define GetStringTypeExWrap GetStringTypeExA
  3373. #define GetTempFileNameWrap GetTempFileNameA
  3374. #define GetTempPathWrap GetTempPathA
  3375. #define GetTextExtentPoint32Wrap GetTextExtentPoint32A
  3376. #define GetTextFaceWrap GetTextFaceA
  3377. #define GetTextMetricsWrap GetTextMetricsA
  3378. #define GetTimeFormatWrap GetTimeFormatA
  3379. #define GetDateFormatWrap GetDateFormatA
  3380. #define GetUserNameWrap GetUserNameA
  3381. #define GetWindowLongWrap GetWindowLongA
  3382. #define GetWindowTextWrap GetWindowTextA
  3383. #define GetWindowTextLengthWrap GetWindowTextLengthA
  3384. #define GetWindowsDirectoryWrap GetWindowsDirectoryA
  3385. #define InsertMenuItemWrap InsertMenuItemA
  3386. #define InsertMenuWrap InsertMenuA
  3387. #define IsBadStringPtrWrap IsBadStringPtrA
  3388. #define IsDialogMessageWrap IsDialogMessageA
  3389. #define LoadAcceleratorsWrap LoadAcceleratorsA
  3390. #define LoadBitmapWrap LoadBitmapA
  3391. #define LoadCursorWrap LoadCursorA
  3392. #define LoadIconWrap LoadIconA
  3393. #define LoadImageWrap LoadImageWrapA
  3394. #define LoadLibraryWrap LoadLibraryA
  3395. #define LoadLibraryExWrap LoadLibraryExA
  3396. #define LoadMenuWrap LoadMenuA
  3397. #define LoadStringWrap LoadStringA
  3398. #define MessageBoxIndirectWrap MessageBoxIndirectA
  3399. #define MessageBoxWrap MessageBoxA
  3400. #define ModifyMenuWrap ModifyMenuA
  3401. #define GetCharWidth32Wrap GetCharWidth32A
  3402. #define GetCharacterPlacementWrap GetCharacterPlacementA
  3403. #define CopyFileWrap CopyFileA
  3404. #define MoveFileWrap MoveFileA
  3405. #define OemToCharWrap OemToCharA
  3406. #define OutputDebugStringWrap OutputDebugStringA
  3407. #define PeekMessageWrap PeekMessageA
  3408. #define PostMessageWrap PostMessageA
  3409. #define PostThreadMessageWrap PostThreadMessageA
  3410. #define RegCreateKeyWrap RegCreateKeyA
  3411. #define RegCreateKeyExWrap RegCreateKeyExA
  3412. #define RegDeleteKeyWrap RegDeleteKeyA
  3413. #define RegDeleteValueWrap RegDeleteValueA
  3414. #define RegEnumKeyWrap RegEnumKeyA
  3415. #define RegEnumKeyExWrap RegEnumKeyExA
  3416. #define RegOpenKeyWrap RegOpenKeyA
  3417. #define RegOpenKeyExWrap RegOpenKeyExA
  3418. #define RegQueryInfoKeyWrap RegQueryInfoKeyA
  3419. #define RegQueryValueWrap RegQueryValueA
  3420. #define RegQueryValueExWrap RegQueryValueExA
  3421. #define RegSetValueWrap RegSetValueA
  3422. #define RegSetValueExWrap RegSetValueExA
  3423. #define RegisterClassWrap RegisterClassA
  3424. #define RegisterClassExWrap RegisterClassExA
  3425. #define RegisterClipboardFormatWrap RegisterClipboardFormatA
  3426. #define RegisterWindowMessageWrap RegisterWindowMessageA
  3427. #define RemovePropWrap RemovePropA
  3428. #define SendDlgItemMessageWrap SendDlgItemMessageA
  3429. #define SendMessageWrap SendMessageA
  3430. #define SetCurrentDirectoryWrap SetCurrentDirectoryA
  3431. #define SetDlgItemTextWrap SetDlgItemTextA
  3432. #define SetMenuItemInfoWrap SetMenuItemInfoA
  3433. #define SetPropWrap SetPropA
  3434. #define SetWindowLongWrap SetWindowLongA
  3435. #define SHBrowseForFolderWrap SHBrowseForFolderA
  3436. #define ShellExecuteExWrap ShellExecuteExA
  3437. #define SHFileOperationWrap SHFileOperationA
  3438. #define SHGetFileInfoWrap SHGetFileInfoA
  3439. #define SHGetPathFromIDListWrap SHGetPathFromIDListA
  3440. #define SetFileAttributesWrap SetFileAttributesA
  3441. #define SetWindowsHookExWrap SetWindowsHookExA
  3442. #define StartDocWrap StartDocA
  3443. #define SystemParametersInfoWrap SystemParametersInfoA
  3444. #define TranslateAcceleratorWrap TranslateAcceleratorA
  3445. #define UnregisterClassWrap UnregisterClassA
  3446. #define VkKeyScanWrap VkKeyScanA
  3447. #define WinHelpWrap WinHelpA
  3448. #define WNetRestoreConnectionWrap WNetRestoreConnectionA
  3449. #define WNetGetLastErrorWrap WNetGetLastErrorA
  3450. #define wvsprintfWrap wvsprintfA
  3451. #define CreateFontWrap CreateFontA
  3452. #define DrawTextExWrap DrawTextExA
  3453. #define GetMenuItemInfoWrap GetMenuItemInfoA
  3454. #define SetMenuItemInfoWrap SetMenuItemInfoA
  3455. #define InsertMenuItemWrap InsertMenuItemA
  3456. #define DragQueryFileWrap DragQueryFileA
  3457. #endif
  3458. #endif // defined(UNIX) && defined(NO_SHLWAPI_UNITHUNK)
  3459. // Some functions are used to wrap unicode win95 functions AND to provide ML wrappers,
  3460. // so they are needed unless BOTH NO_SHLWAPI_UNITHUNG and NO_SHLWAPI_MLUI are defined
  3461. //
  3462. #if (_WIN32_IE >= 0x0500) && (!defined(NO_SHLWAPI_UNITHUNK) || !defined(NO_SHLWAPI_MLUI))
  3463. LWSTDAPI_(HWND)
  3464. CreateDialogIndirectParamWrapW(
  3465. HINSTANCE hInstance,
  3466. LPCDLGTEMPLATEW hDialogTemplate,
  3467. HWND hWndParent,
  3468. DLGPROC lpDialogFunc,
  3469. LPARAM dwInitParam);
  3470. LWSTDAPI_(HWND)
  3471. CreateDialogParamWrapW(
  3472. HINSTANCE hInstance,
  3473. LPCWSTR lpTemplateName,
  3474. HWND hWndParent,
  3475. DLGPROC lpDialogFunc,
  3476. LPARAM dwInitParam);
  3477. LWSTDAPI_(INT_PTR)
  3478. DialogBoxIndirectParamWrapW(
  3479. HINSTANCE hInstance,
  3480. LPCDLGTEMPLATEW hDialogTemplate,
  3481. HWND hWndParent,
  3482. DLGPROC lpDialogFunc,
  3483. LPARAM dwInitParam);
  3484. LWSTDAPI_(INT_PTR)
  3485. DialogBoxParamWrapW(
  3486. HINSTANCE hInstance,
  3487. LPCWSTR lpszTemplate,
  3488. HWND hWndParent,
  3489. DLGPROC lpDialogFunc,
  3490. LPARAM dwInitParam);
  3491. LWSTDAPI_(BOOL) SetWindowTextWrapW(HWND hWnd, LPCWSTR lpString);
  3492. LWSTDAPI_(BOOL) DeleteMenuWrap(HMENU hMenu, UINT uPosition, UINT uFlags);
  3493. LWSTDAPI_(BOOL) DestroyMenuWrap(HMENU hMenu);
  3494. #ifdef UNICODE
  3495. #define CreateDialogIndirectParamWrap CreateDialogIndirectParamWrapW
  3496. #define CreateDialogParamWrap CreateDialogParamWrapW
  3497. #define DialogBoxIndirectParamWrap DialogBoxIndirectParamWrapW
  3498. #define DialogBoxParamWrap DialogBoxParamWrapW
  3499. #define SetWindowTextWrap SetWindowTextWrapW
  3500. #else
  3501. #define CreateDialogIndirectParamWrap CreateDialogIndirectParamA
  3502. #define CreateDialogParamWrap CreateDialogParamA
  3503. #define DialogBoxIndirectParamWrap DialogBoxIndirectParamA
  3504. #define DialogBoxParamWrap DialogBoxParamA
  3505. #define SetWindowTextWrap SetWindowTextA
  3506. #endif // UNICODE
  3507. #endif // (_WIN32_IE >= 0x0500) && !defined(NO_SHLWAPI_UNITHUNK) && !defined (NO_SHLWAPI_MLUI)
  3508. //=============== Thread Pool Services ===================================
  3509. #if (_WIN32_IE >= 0x0500) && !defined(NO_SHLWAPI_TPS)
  3510. //
  3511. // SHLWAPIP versions of KERNEL32 Thread Pool Services APIs
  3512. //
  3513. typedef void (NTAPI * WAITORTIMERCALLBACKFUNC)(void *, BOOLEAN);
  3514. typedef WAITORTIMERCALLBACKFUNC WAITORTIMERCALLBACK;
  3515. LWSTDAPI_(HANDLE)
  3516. SHRegisterWaitForSingleObject(
  3517. IN HANDLE hObject,
  3518. IN WAITORTIMERCALLBACKFUNC pfnCallback,
  3519. IN LPVOID pContext,
  3520. IN DWORD dwMilliseconds,
  3521. IN LPCSTR lpszLibrary OPTIONAL,
  3522. IN DWORD dwFlags
  3523. );
  3524. //
  3525. // flags for SHRegisterWaitForSingleObject (keep separate from other TPS flags)
  3526. //
  3527. //
  3528. // SRWSO_NOREMOVE - if set, the handle is not to be removed from the list once
  3529. // signalled. Intended for use with auto-reset events that the caller wants to
  3530. // keep until unregistered
  3531. //
  3532. #define SRWSO_NOREMOVE 0x00000100
  3533. #define SRWSO_VALID_FLAGS (SRWSO_NOREMOVE)
  3534. #define SRWSO_INVALID_FLAGS (~SRWSO_VALID_FLAGS)
  3535. LWSTDAPI_(BOOL)
  3536. SHUnregisterWait(
  3537. IN HANDLE hWait
  3538. );
  3539. typedef struct {
  3540. DWORD dwStructSize;
  3541. DWORD dwMinimumWorkerThreads;
  3542. DWORD dwMaximumWorkerThreads;
  3543. DWORD dwMaximumWorkerQueueDepth;
  3544. DWORD dwWorkerThreadIdleTimeout;
  3545. DWORD dwWorkerThreadCreationDelta;
  3546. DWORD dwMinimumIoWorkerThreads;
  3547. DWORD dwMaximumIoWorkerThreads;
  3548. DWORD dwMaximumIoWorkerQueueDepth;
  3549. DWORD dwIoWorkerThreadCreationDelta;
  3550. } SH_THREAD_POOL_LIMITS, *PSH_THREAD_POOL_LIMITS;
  3551. LWSTDAPI_(BOOL)
  3552. SHSetThreadPoolLimits(
  3553. IN PSH_THREAD_POOL_LIMITS pLimits
  3554. );
  3555. LWSTDAPI_(BOOL)
  3556. SHTerminateThreadPool(
  3557. VOID
  3558. );
  3559. LWSTDAPI_(BOOL)
  3560. SHQueueUserWorkItem(
  3561. IN LPTHREAD_START_ROUTINE pfnCallback,
  3562. IN LPVOID pContext,
  3563. IN LONG lPriority,
  3564. IN DWORD_PTR dwTag,
  3565. OUT DWORD_PTR * pdwId OPTIONAL,
  3566. IN LPCSTR pszModule OPTIONAL,
  3567. IN DWORD dwFlags
  3568. );
  3569. LWSTDAPI_(DWORD)
  3570. SHCancelUserWorkItems(
  3571. IN DWORD_PTR dwTagOrId,
  3572. IN BOOL bTag
  3573. );
  3574. LWSTDAPI_(HANDLE)
  3575. SHCreateTimerQueue(
  3576. VOID
  3577. );
  3578. LWSTDAPI_(BOOL)
  3579. SHDeleteTimerQueue(
  3580. IN HANDLE hQueue
  3581. );
  3582. LWSTDAPI_(HANDLE)
  3583. SHSetTimerQueueTimer(
  3584. IN HANDLE hQueue,
  3585. IN WAITORTIMERCALLBACK pfnCallback,
  3586. IN LPVOID pContext,
  3587. IN DWORD dwDueTime,
  3588. IN DWORD dwPeriod,
  3589. IN LPCSTR lpszLibrary OPTIONAL,
  3590. IN DWORD dwFlags
  3591. );
  3592. LWSTDAPI_(BOOL)
  3593. SHChangeTimerQueueTimer(
  3594. IN HANDLE hQueue,
  3595. IN HANDLE hTimer,
  3596. IN DWORD dwDueTime,
  3597. IN DWORD dwPeriod
  3598. );
  3599. LWSTDAPI_(BOOL)
  3600. SHCancelTimerQueueTimer(
  3601. IN HANDLE hQueue,
  3602. IN HANDLE hTimer
  3603. );
  3604. //
  3605. // Thread Pool Services flags
  3606. //
  3607. //
  3608. // TPS_EXECUTEIO - execute in I/O thread (via APC). Default is non-IO thread
  3609. //
  3610. #define TPS_EXECUTEIO 0x00000001
  3611. //
  3612. // TPS_TAGGEDITEM - the dwTag parameter is meaningful
  3613. //
  3614. #define TPS_TAGGEDITEM 0x00000002
  3615. //
  3616. // TPS_DEMANDTHREAD - always create a new thread if none currently available.
  3617. // Used in situations where immediate response required
  3618. //
  3619. #define TPS_DEMANDTHREAD 0x00000004
  3620. //
  3621. // TPS_LONGEXECTIME - the work item will take relatively long time to execute.
  3622. // Used as management hint to TPS
  3623. //
  3624. #define TPS_LONGEXECTIME 0x00000008
  3625. //
  3626. // TPS_RESERVED_FLAGS - mask of bits reserved for internal use
  3627. //
  3628. #define TPS_RESERVED_FLAGS 0xFF000000
  3629. #define TPS_VALID_FLAGS (TPS_EXECUTEIO \
  3630. | TPS_TAGGEDITEM \
  3631. | TPS_DEMANDTHREAD \
  3632. | TPS_LONGEXECTIME \
  3633. )
  3634. #define TPS_INVALID_FLAGS (~TPS_VALID_FLAGS)
  3635. #endif // (_WIN32_IE >= 0x0500) && !defined(NO_SHLWAPI_TPS)
  3636. //
  3637. // Private MIME helper functions used by shdocvw & shell32
  3638. //
  3639. #if (_WIN32_IE >= 0x0500)
  3640. LWSTDAPI_(BOOL) GetMIMETypeSubKeyA(LPCSTR pszMIMEType, LPSTR pszBuf, UINT cchBuf);
  3641. LWSTDAPI_(BOOL) GetMIMETypeSubKeyW(LPCWSTR pszMIMEType, LPWSTR pszBuf, UINT cchBuf);
  3642. LWSTDAPI_(BOOL) RegisterMIMETypeForExtensionA(LPCSTR pcszExtension, LPCSTR pcszMIMEContentType);
  3643. LWSTDAPI_(BOOL) RegisterMIMETypeForExtensionW(LPCWSTR pcszExtension, LPCWSTR pcszMIMEContentType);
  3644. LWSTDAPI_(BOOL) UnregisterMIMETypeForExtensionA(LPCSTR pcszExtension);
  3645. LWSTDAPI_(BOOL) UnregisterMIMETypeForExtensionW(LPCWSTR pcszExtension);
  3646. LWSTDAPI_(BOOL) RegisterExtensionForMIMETypeA(LPCSTR pcszExtension, LPCSTR pcszMIMEContentType);
  3647. LWSTDAPI_(BOOL) RegisterExtensionForMIMETypeW(LPCWSTR pcszExtension, LPCWSTR pcszMIMEContentType);
  3648. LWSTDAPI_(BOOL) UnregisterExtensionForMIMETypeA(LPCSTR pcszMIMEContentType);
  3649. LWSTDAPI_(BOOL) UnregisterExtensionForMIMETypeW(LPCWSTR pcszMIMEContentType);
  3650. LWSTDAPI_(BOOL) MIME_GetExtensionA(LPCSTR pcszMIMEType, LPSTR pszExtensionBuf, UINT ucExtensionBufLen);
  3651. LWSTDAPI_(BOOL) MIME_GetExtensionW(LPCWSTR pcszMIMEType, LPWSTR pszExtensionBuf, UINT ucExtensionBufLen);
  3652. #ifdef UNICODE
  3653. #define GetMIMETypeSubKey GetMIMETypeSubKeyW
  3654. #define RegisterMIMETypeForExtension RegisterMIMETypeForExtensionW
  3655. #define UnregisterMIMETypeForExtension UnregisterMIMETypeForExtensionW
  3656. #define RegisterExtensionForMIMEType RegisterExtensionForMIMETypeW
  3657. #define UnregisterExtensionForMIMEType UnregisterExtensionForMIMETypeW
  3658. #define MIME_GetExtension MIME_GetExtensionW
  3659. #else
  3660. #define GetMIMETypeSubKey GetMIMETypeSubKeyA
  3661. #define RegisterMIMETypeForExtension RegisterMIMETypeForExtensionA
  3662. #define UnregisterMIMETypeForExtension UnregisterMIMETypeForExtensionA
  3663. #define RegisterExtensionForMIMEType RegisterExtensionForMIMETypeA
  3664. #define UnregisterExtensionForMIMEType UnregisterExtensionForMIMETypeA
  3665. #define MIME_GetExtension MIME_GetExtensionA
  3666. #endif
  3667. // Options for SHGetMachineInfo
  3668. //
  3669. // Note that GMI_DOCKSTATE is unreliable for ACPI laptops.
  3670. //
  3671. #define GMI_DOCKSTATE 0x0000
  3672. // Return values for SHGetMachineInfo(GMI_DOCKSTATE)
  3673. #define GMID_NOTDOCKABLE 0 // Cannot be docked
  3674. #define GMID_UNDOCKED 1 // Is undocked
  3675. #define GMID_DOCKED 2 // Is docked
  3676. //
  3677. // GMI_BATTERYSTATE reports on the presence and status of non-UPS
  3678. // batteries.
  3679. //
  3680. #define GMI_BATTERYSTATE 0x0001
  3681. // Return value for SHGetMachineInfo(GMI_BATTERYSTATE) is a bitmask
  3682. #define GMIB_HASBATTERY 0x0001 // Can run on batteries
  3683. #define GMIB_ONBATTERY 0x0002 // Is now on batteries
  3684. //
  3685. // WARNING! DANGER! EVIL!
  3686. //
  3687. // GMI_LAPTOP is not perfect. It can be fooled by particular hardware
  3688. // configurations. You are much better off asking specifically why you
  3689. // care about laptops and use one of the above GMI values instead. For
  3690. // example, if you want to scale back some intensive operation so you
  3691. // don't drain the battery, use GMI_BATTERYSTATE instead.
  3692. //
  3693. #define GMI_LAPTOP 0x0002 // Returns nonzero if might be a laptop
  3694. #if (_WIN32_IE >= 0x0501)
  3695. //
  3696. // GMI_TSCLIENT tells you whether you are running as a Terminal Server
  3697. // client and should disable your animations.
  3698. //
  3699. #define GMI_TSCLIENT 0x0003 // Returns nonzero if TS client
  3700. #endif // (_WIN32_IE >= 0x0501)
  3701. LWSTDAPI_(DWORD_PTR) SHGetMachineInfo(UINT gmi);
  3702. // support InterlockedCompareExchange() on Win95
  3703. LWSTDAPI_(void *) SHInterlockedCompareExchange(void **ppDest, void *pExch, void *pComp);
  3704. #if !defined(_X86_)
  3705. // Win95 doesn't run on Alpha/UNIX so we can use the OS function directly
  3706. // Use a #define instead of a forwarder because it's an intrinsic on most
  3707. // compilers.
  3708. #define SHInterlockedCompareExchange InterlockedCompareExchangePointer
  3709. #endif
  3710. LWSTDAPI_(BOOL) SHMirrorIcon(HICON* phiconSmall, HICON* phiconLarge);
  3711. #endif // (_WIN32_IE >= 0x0500)
  3712. // Raw Accelerator Table API
  3713. //
  3714. // Allows an accelerator table grep without having to invoke ::TranslateAccelerator.
  3715. // Useful for dealing with parent-child window accelerator conflicts.
  3716. //
  3717. // HANDLE SHLoadRawAccelerators( HINSTANCE hInst, LPCTSTR lpTableName );
  3718. // Loads the raw accelerator table.
  3719. // hInst Module instance containing the accelerator resource.
  3720. // lpTableName Names the accelerator table resource to load.
  3721. // The return value is a handle that can be passed to a SHQueryRawAcceleratorXXX function.
  3722. // When the handle is no longer required, it should be freed with LocalFree().
  3723. LWSTDAPI_(HANDLE) SHLoadRawAccelerators ( HINSTANCE hInst, LPCTSTR lpTableName );
  3724. // BOOL SHQueryRawAccelerator ( HANDLE hcaAcc, IN BYTE fVirtMask, IN BYTE fVirt, IN WPARAM wKey, OUT OPTIONAL UINT* puCmdID );
  3725. // Queries the raw accelererator table for the specified key
  3726. // hcaAcc Handle returned from SHLoadRawAccelerators().
  3727. // fVirtMask Relevant accelerator flags (any combo of FALT|FCONTROL|FNOINVERT|FSHIFT|FVIRTKEY)
  3728. // fVirt Accelerator flags to test (any combo of FALT|FCONTROL|FNOINVERT|FSHIFT|FVIRTKEY).
  3729. // wKey Accelerator key. This can either be a virtual key (FVIRTKEY) or an ASCII char code.
  3730. // puCmdID Optional address to receive command identifier for the accelerator entry if
  3731. // the key is in the table.
  3732. // Returns nonzero if the key is in the accelerator table; otherwise 0.
  3733. LWSTDAPI_(BOOL) SHQueryRawAccelerator ( HANDLE hcaAcc, IN BYTE fVirtMask, IN BYTE fVirt, IN WPARAM wKey, OUT OPTIONAL UINT* puCmdID );
  3734. // BOOL SHQueryRawAcceleratorMsg( HANDLE hcaAcc, MSG* pmsg, OUT OPTIONAL UINT* puCmdID );
  3735. // Determines whether the specified message is an accelerator message mapping to
  3736. // an entry in the raw accelerator table.
  3737. // hcaAcc Handle returned from SHLoadRawAccelerators().
  3738. // pmsg Address of the message to test.
  3739. // puCmdID Optional address to receive command identifier for the accelerator entry if
  3740. // the message maps to an accelerator in the table.
  3741. // Returns nonzero if the message is a WM_KEYUP or WM_KEYDOWN and the key is in
  3742. // the accelerator table; otherwise 0.
  3743. LWSTDAPI_(BOOL) SHQueryRawAcceleratorMsg( HANDLE hcaAcc, MSG* pmsg, OUT OPTIONAL UINT* puCmdID );
  3744. //
  3745. //
  3746. LWSTDAPI_(BOOL) SHBoolSystemParametersInfo(UINT uiAction, DWORD *pdwParam);
  3747. LWSTDAPI_(BOOL) SHAreIconsEqual(HICON hIcon1, HICON hIcon2);
  3748. LWSTDAPI_(BOOL) IEHardened(void);
  3749. //
  3750. //====== End Internal functions ===============================================
  3751. //
  3752. #endif // NO_SHLWAPI_INTERNAL
  3753. #ifdef NOTYET // once this is implemented, make this public
  3754. // SHGetCommonResourceID
  3755. //
  3756. // (use MAKEINTRESOURCE on the following IDs)
  3757. // These values are indexes into an internal table. Be careful.
  3758. #define SHGCR_BITMAP_WINDOWS_LOGO MAKEINTRESOURCE(1)
  3759. #define SHGCR_AVI_FLASHLIGHT MAKEINTRESOURCE(2)
  3760. #define SHGCR_AVI_FINDFILE MAKEINTRESOURCE(3)
  3761. #define SHGCR_AVI_FINDCOMPUTER MAKEINTRESOURCE(4)
  3762. #define SHGCR_AVI_FILEMOVE MAKEINTRESOURCE(5)
  3763. #define SHGCR_AVI_FILECOPY MAKEINTRESOURCE(6)
  3764. #define SHGCR_AVI_FILEDELETE MAKEINTRESOURCE(7)
  3765. #define SHGCR_AVI_EMPTYWASTEBASKET MAKEINTRESOURCE(8)
  3766. #define SHGCR_AVI_FILEREALDELETE MAKEINTRESOURCE(9) // Bypass Recycle Bin
  3767. #define SHGCR_AVI_DOWNLOAD MAKEINTRESOURCE(10)
  3768. LWSTDAPI SHGetCommonResourceIDA(IN LPCSTR pszID, IN DWORD dwRes, OUT HMODULE * phmod, OUT UINT * pnID);
  3769. LWSTDAPI SHGetCommonResourceIDA(IN LPCSTR pszID, IN DWORD dwRes, OUT HMODULE * phmod, OUT UINT * pnID);
  3770. #ifdef UNICODE
  3771. #define SHGetCommonResourceID SHGetCommonResourceIDW
  3772. #else
  3773. #define SHGetCommonResourceID SHGetCommonResourceIDW
  3774. #endif
  3775. #endif // NOTYET
  3776. // dwFlags is really for alignment purposes
  3777. #if (_WIN32_IE >= 0x0501)
  3778. //
  3779. // ======== SHGetAppCompatFlags ================================================
  3780. //
  3781. //===========================================================================
  3782. // Shell Application Compatability flags
  3783. // SHGetAppCompatFlags flags
  3784. #define ACF_NONE 0x00000000
  3785. #define ACF_CONTEXTMENU 0x00000001
  3786. #define ACF_CORELINTERNETENUM 0x00000004 // corel suite 8 has this same problem as suite 7 but does not have context menu one so need new bit
  3787. #define ACF_OLDCREATEVIEWWND 0x00000004 // PowerDesk relies on CreateViewWindow returning S_OK
  3788. #define ACF_WIN95DEFVIEW 0x00000004 // for apps that depend on win95 defview behavior
  3789. #define ACF_DOCOBJECT 0x00000002
  3790. #define ACF_FLUSHNOWAITALWAYS 0x00000001
  3791. #define ACF_MYCOMPUTERFIRST 0x00000008 // MyComp must be first item on the desktop
  3792. #define ACF_OLDREGITEMGDN 0x00000010 // Win95-compatible GetDisplayNameOf on regitems
  3793. #define ACF_LOADCOLUMNHANDLER 0x00000040 // Dont delay load column handler.
  3794. #define ACF_ANSI 0x00000080 // For Apps that Pass in ANSI Strings
  3795. #define ACF_STRIPFOLDERBIT 0x00000100 // nuke the folder GAO in file dialog (for folder shortcuts, zip & cab files)
  3796. #define ACF_WIN95SHLEXEC 0x00000200 // dont use DDEWAIT when thunking to ShellExecEx()
  3797. #define ACF_STAROFFICE5PRINTER 0x00000400 // special return values from printer folder GAO
  3798. #define ACF_NOVALIDATEFSIDS 0x00000800 // FS pidls should not be validated.
  3799. #define ACF_FILEOPENNEEDSEXT 0x00001000 // Need to show extensioin in the name box of the open file common dialog
  3800. #define ACF_WIN95BINDTOOBJECT 0x00002000 // Win95 BindToObject behavior dependencies
  3801. #define ACF_IGNOREENUMRESET 0x00004000 // App relies on IEnumIDList::Reset returning E_NOTIMPL
  3802. #define ACF_ANSIDISPLAYNAMES 0x00010000 // calling process requires the ISF::GDN in ansi
  3803. #define ACF_FILEOPENBOGUSCTRLID 0x00020000 // Requires that the toolbar in fileopen have ctrl ID == ID_OK
  3804. #define ACF_FORCELFNIDLIST 0x00040000 // forces no AltName in the FS pidls (for apps that read directly from the pidl)
  3805. #define ACF_APPISOFFICE 0x01000000 // calling app is office (95, 97, 2000, ++)
  3806. #define ACF_KNOWPERPROCESS 0x80000000 // We know the per process flags already.
  3807. // The flags that are per-process
  3808. #define ACF_PERPROCESSFLAGS (ACF_CONTEXTMENU | ACF_CORELINTERNETENUM | ACF_OLDCREATEVIEWWND | ACF_WIN95DEFVIEW | \
  3809. ACF_DOCOBJECT | ACF_FLUSHNOWAITALWAYS | ACF_MYCOMPUTERFIRST | ACF_OLDREGITEMGDN | \
  3810. ACF_LOADCOLUMNHANDLER | ACF_ANSI | ACF_WIN95SHLEXEC | ACF_STAROFFICE5PRINTER | \
  3811. ACF_NOVALIDATEFSIDS | ACF_FILEOPENNEEDSEXT | ACF_WIN95BINDTOOBJECT | \
  3812. ACF_IGNOREENUMRESET | ACF_ANSIDISPLAYNAMES | ACF_FILEOPENBOGUSCTRLID | ACF_FORCELFNIDLIST)
  3813. // Flags that are per caller
  3814. #define ACF_PERCALLFLAGS (ACF_APPISOFFICE | ACF_STRIPFOLDERBIT)
  3815. LWSTDAPI_(DWORD) SHGetAppCompatFlags (DWORD dwFlagsNeeded);
  3816. enum {
  3817. OBJCOMPATF_OTNEEDSSFCACHE = 0x00000001,
  3818. OBJCOMPATF_NO_WEBVIEW = 0x00000002,
  3819. OBJCOMPATF_UNBINDABLE = 0x00000004,
  3820. OBJCOMPATF_PINDLL = 0x00000008,
  3821. OBJCOMPATF_NEEDSFILESYSANCESTOR = 0x00000010,
  3822. OBJCOMPATF_NOTAFILESYSTEM = 0x00000020,
  3823. OBJCOMPATF_CTXMENU_NOVERBS = 0x00000040,
  3824. OBJCOMPATF_CTXMENU_LIMITEDQI = 0x00000080,
  3825. OBJCOMPATF_COCREATESHELLFOLDERONLY = 0x00000100,
  3826. OBJCOMPATF_NEEDSSTORAGEANCESTOR = 0x00000200,
  3827. OBJCOMPATF_NOLEGACYWEBVIEW = 0x00000400,
  3828. OBJCOMPATF_BLOCKSHELLSERVICEOBJECT = 0x00000800,
  3829. } ;
  3830. typedef DWORD OBJCOMPATFLAGS;
  3831. LWSTDAPI_(OBJCOMPATFLAGS) SHGetObjectCompatFlags(IUnknown *punk, const CLSID *pclsid);
  3832. #endif // (_WIN32_IE >= 0x0501)
  3833. #if (_WIN32_IE >= 0x0560)
  3834. LWSTDAPI_(UINT) GetUIVersion();
  3835. #endif // (_WIN32_IE >= 0x0560)
  3836. #ifdef __cplusplus
  3837. }
  3838. #endif
  3839. #ifdef _WIN32
  3840. #include <poppack.h>
  3841. #endif
  3842. #endif
  3843. #endif // _INC_SHLWAPIP