Source code of Windows XP (NT5)
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.

1252 lines
44 KiB

  1. /*
  2. ** d e m a n d . h
  3. **
  4. ** Purpose: create an intelligent method of defer loading functions
  5. **
  6. ** Creators: jimsch, brimo, t-erikne
  7. ** Created: 5/15/97
  8. **
  9. ** Copyright (C) Microsoft Corp. 1997
  10. */
  11. //
  12. // IF YOU #INCLUDE A FILE HERE YOU PROBABLY ARE CONFUSED.
  13. // THIS FILE IS INCLUDED BY LOTS OF PEOPLE. THINK THRICE
  14. // BEFORE #INCLUDING *ANYTHING* HERE. MAKE GOOD USE
  15. // OF FORWARD REFS INSTEAD.
  16. //
  17. #define USE_CRITSEC
  18. #ifdef IMPLEMENT_LOADER_FUNCTIONS
  19. #define LOADER_FUNCTION(ret, name, args1, args2, err, dll) \
  20. typedef ret (WINAPI * TYP_##name) args1; \
  21. extern TYP_##name VAR_##name; \
  22. ret WINAPI LOADER_##name args1 \
  23. { \
  24. DemandLoad##dll(); \
  25. if (VAR_##name == LOADER_##name) return err; \
  26. return VAR_##name args2; \
  27. } \
  28. TYP_##name VAR_##name = LOADER_##name;
  29. #define LOADER_FUNCTION_VOID(ret, name, args1, args2, dll) \
  30. typedef ret (WINAPI * TYP_##name) args1; \
  31. extern TYP_##name VAR_##name; \
  32. ret WINAPI LOADER_##name args1 \
  33. { \
  34. DemandLoad##dll(); \
  35. if (VAR_##name == LOADER_##name) return; \
  36. VAR_##name args2; \
  37. return; \
  38. } \
  39. TYP_##name VAR_##name = LOADER_##name;
  40. #else // !IMPLEMENT_LOADER_FUNCTIONS
  41. #define LOADER_FUNCTION(ret, name, args1, args2, err, dll) \
  42. typedef ret (WINAPI * TYP_##name) args1; \
  43. extern TYP_##name VAR_##name;
  44. #define LOADER_FUNCTION_VOID(ret, name, args1, args2, dll) \
  45. typedef ret (WINAPI * TYP_##name) args1; \
  46. extern TYP_##name VAR_##name;
  47. #endif // IMPLEMENT_LOADER_FUNCTIONS
  48. extern HINSTANCE g_hInst;
  49. void InitDemandLoadedLibs();
  50. void FreeDemandLoadedLibs();
  51. /////////////////////////////////////
  52. // CRYPT32.DLL
  53. #define _CRYPT32_
  54. BOOL DemandLoadCrypt32(void);
  55. extern BOOL g_FSupportV3;
  56. BOOL IsSMIME3Supported(void);
  57. typedef void *HCERTSTORE;
  58. typedef const struct _CERT_CONTEXT *PCCERT_CONTEXT;
  59. typedef ULONG_PTR HCRYPTPROV;
  60. typedef struct _CERT_INFO *PCERT_INFO;
  61. typedef struct _CERT_RDN_ATTR *PCERT_RDN_ATTR;
  62. typedef struct _CERT_NAME_INFO *PCERT_NAME_INFO;
  63. typedef void *HCRYPTMSG;
  64. typedef struct _CMSG_STREAM_INFO *PCMSG_STREAM_INFO;
  65. typedef struct _CERT_RDN_ATTR *PCERT_RDN_ATTR;
  66. typedef struct _CERT_NAME_INFO *PCCERT_NAME_INFO;
  67. LOADER_FUNCTION( DWORD, CertRDNValueToStrA,
  68. (DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue, LPTSTR pszValueString, DWORD cszValueString),
  69. (dwValueType, pValue, pszValueString, cszValueString),
  70. NULL, Crypt32)
  71. #define CertRDNValueToStrA VAR_CertRDNValueToStrA
  72. LOADER_FUNCTION( BOOL, CertAddCertificateContextToStore,
  73. (HCERTSTORE hCertStore, PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition, PCCERT_CONTEXT *ppStoreContext),
  74. (hCertStore, pCertContext, dwAddDisposition, ppStoreContext),
  75. FALSE, Crypt32)
  76. #define CertAddCertificateContextToStore VAR_CertAddCertificateContextToStore
  77. LOADER_FUNCTION( BOOL, CertAddEncodedCertificateToStore,
  78. (HCERTSTORE hCertStore,
  79. DWORD dwCertEncodingType,
  80. BYTE *pbCertEncoded,
  81. DWORD cbCertEncoded,
  82. DWORD dwAddDisposition,
  83. PCCERT_CONTEXT *ppStoreContext),
  84. (hCertStore, dwCertEncodingType, pbCertEncoded, cbCertEncoded, dwAddDisposition, ppStoreContext),
  85. FALSE, Crypt32)
  86. #define CertAddEncodedCertificateToStore VAR_CertAddEncodedCertificateToStore
  87. LOADER_FUNCTION( PCCERT_CONTEXT, CertEnumCertificatesInStore,
  88. (HCERTSTORE hCertStore, PCCERT_CONTEXT pPrevCertContext),
  89. (hCertStore, pPrevCertContext),
  90. NULL, Crypt32)
  91. #define CertEnumCertificatesInStore VAR_CertEnumCertificatesInStore
  92. LOADER_FUNCTION( BOOL, CryptDecodeObject,
  93. (DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo),
  94. (dwCertEncodingType, lpszStructType, pbEncoded, cbEncoded, dwFlags, pvStructInfo, pcbStructInfo),
  95. FALSE, Crypt32)
  96. #define CryptDecodeObject VAR_CryptDecodeObject
  97. LOADER_FUNCTION( BOOL, CryptEncodeObject,
  98. (DWORD dwCertEncodingType, LPCSTR lpszStructType, const void * pvStructInfo, BYTE * pbEncoded, DWORD * pcbEncoded),
  99. (dwCertEncodingType, lpszStructType, pvStructInfo, pbEncoded, pcbEncoded),
  100. FALSE, Crypt32)
  101. #define CryptEncodeObject VAR_CryptEncodeObject
  102. LOADER_FUNCTION( BOOL, CryptDecodeObjectEx,
  103. (DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo),
  104. (dwCertEncodingType, lpszStructType, pbEncoded, cbEncoded, dwFlags, pDecodePara, pvStructInfo, pcbStructInfo),
  105. FALSE, Crypt32)
  106. #define CryptDecodeObjectEx VAR_CryptDecodeObjectEx
  107. LOADER_FUNCTION( BOOL, CryptEncodeObjectEx,
  108. (DWORD dwCertEncodingType, LPCSTR lpszStructType, const void * pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, void * pbEncoded, DWORD * pcbEncoded),
  109. (dwCertEncodingType, lpszStructType, pvStructInfo, dwFlags, pEncodePara, pbEncoded, pcbEncoded),
  110. FALSE, Crypt32)
  111. #define CryptEncodeObjectEx VAR_CryptEncodeObjectEx
  112. LOADER_FUNCTION(PCERT_RDN_ATTR, CertFindRDNAttr,
  113. (LPCSTR pszObjId, PCERT_NAME_INFO pName),
  114. (pszObjId, pName),
  115. NULL, Crypt32)
  116. #define CertFindRDNAttr VAR_CertFindRDNAttr
  117. LOADER_FUNCTION( BOOL, CertFreeCertificateContext,
  118. (PCCERT_CONTEXT pCertContext),
  119. (pCertContext),
  120. TRUE, Crypt32) // return success since GLE() is meaningless
  121. #define CertFreeCertificateContext VAR_CertFreeCertificateContext
  122. LOADER_FUNCTION( PCCERT_CONTEXT, CertDuplicateCertificateContext,
  123. (PCCERT_CONTEXT pCertContext),
  124. (pCertContext), NULL, Crypt32)
  125. #define CertDuplicateCertificateContext VAR_CertDuplicateCertificateContext
  126. LOADER_FUNCTION( PCCERT_CONTEXT, CertFindCertificateInStore,
  127. (HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void *pvFindPara, PCCERT_CONTEXT pPrevCertContext),
  128. (hCertStore, dwCertEncodingType, dwFindFlags, dwFindType, pvFindPara, pPrevCertContext),
  129. NULL, Crypt32)
  130. #define CertFindCertificateInStore VAR_CertFindCertificateInStore
  131. LOADER_FUNCTION( LONG, CertVerifyTimeValidity,
  132. (LPFILETIME pTimeToVerify, PCERT_INFO pCertInfo),
  133. (pTimeToVerify, pCertInfo),
  134. 1, Crypt32)
  135. #define CertVerifyTimeValidity VAR_CertVerifyTimeValidity
  136. LOADER_FUNCTION( BOOL, CertCompareCertificate,
  137. (DWORD dwCertEncodingType, PCERT_INFO pCertId1, PCERT_INFO pCertId2),
  138. (dwCertEncodingType, pCertId1, pCertId2),
  139. FALSE, Crypt32)
  140. #define CertCompareCertificate VAR_CertCompareCertificate
  141. LOADER_FUNCTION( BOOL, CertCompareCertificateName,
  142. (DWORD dwCertEncodingType, PCERT_NAME_BLOB pCertName1, PCERT_NAME_BLOB pCertName2),
  143. (dwCertEncodingType, pCertName1, pCertName2),
  144. FALSE, Crypt32)
  145. #define CertCompareCertificateName VAR_CertCompareCertificateName
  146. LOADER_FUNCTION( BOOL, CertCompareIntegerBlob,
  147. (PCRYPT_INTEGER_BLOB pInt1, PCRYPT_INTEGER_BLOB pInt2),
  148. (pInt1, pInt2),
  149. FALSE, Crypt32)
  150. #define CertCompareIntegerBlob VAR_CertCompareIntegerBlob
  151. LOADER_FUNCTION( HCERTSTORE, CertOpenStore,
  152. (LPCSTR lpszStoreProvider, DWORD dwEncodingType, HCRYPTPROV hCryptProv, DWORD dwFlags, const void *pvPara),
  153. (lpszStoreProvider, dwEncodingType, hCryptProv, dwFlags, pvPara),
  154. NULL, Crypt32)
  155. #define CertOpenStore VAR_CertOpenStore
  156. LOADER_FUNCTION( HCERTSTORE, CertDuplicateStore,
  157. (HCERTSTORE hCertStore),
  158. (hCertStore),
  159. NULL, Crypt32)
  160. #define CertDuplicateStore VAR_CertDuplicateStore
  161. LOADER_FUNCTION( BOOL, CertCloseStore,
  162. (HCERTSTORE hCertStore, DWORD dwFlags),
  163. (hCertStore, dwFlags),
  164. FALSE, Crypt32)
  165. #define CertCloseStore VAR_CertCloseStore
  166. LOADER_FUNCTION( BOOL, CertControlStore,
  167. (
  168. HCERTSTORE hCertStore,
  169. DWORD dwFlags,
  170. DWORD dwCtrlType,
  171. void const *pvCtrlPara
  172. ),
  173. (
  174. hCertStore,
  175. dwFlags,
  176. dwCtrlType,
  177. pvCtrlPara
  178. ),
  179. FALSE, Crypt32)
  180. #define CertControlStore VAR_CertControlStore
  181. LOADER_FUNCTION( PCCERT_CONTEXT, CertGetSubjectCertificateFromStore,
  182. (HCERTSTORE hCertStore, DWORD dwCertEncodingType, PCERT_INFO pCertId),
  183. (hCertStore, dwCertEncodingType, pCertId),
  184. NULL, Crypt32)
  185. #define CertGetSubjectCertificateFromStore VAR_CertGetSubjectCertificateFromStore
  186. LOADER_FUNCTION( PCCERT_CONTEXT, CertGetIssuerCertificateFromStore,
  187. (HCERTSTORE hCertStore, PCCERT_CONTEXT pSubjectContext, PCCERT_CONTEXT pPrevIssuerContext, DWORD *pdwFlags),
  188. (hCertStore, pSubjectContext, pPrevIssuerContext, pdwFlags),
  189. NULL, Crypt32)
  190. #define CertGetIssuerCertificateFromStore VAR_CertGetIssuerCertificateFromStore
  191. LOADER_FUNCTION( BOOL, CertGetCertificateContextProperty,
  192. (PCCERT_CONTEXT pCertContext, DWORD dwPropId, void *pvData, DWORD *pcbData),
  193. (pCertContext, dwPropId, pvData, pcbData),
  194. FALSE, Crypt32)
  195. #define CertGetCertificateContextProperty VAR_CertGetCertificateContextProperty
  196. LOADER_FUNCTION( HCRYPTMSG, CryptMsgOpenToEncode,
  197. (DWORD dwMsgEncodingType, DWORD dwFlags, DWORD dwMsgType, void const *pvMsgEncodeInfo, LPSTR pszInnerContentObjID, PCMSG_STREAM_INFO pStreamInfo),
  198. (dwMsgEncodingType, dwFlags, dwMsgType, pvMsgEncodeInfo, pszInnerContentObjID, pStreamInfo),
  199. NULL, Crypt32)
  200. #define CryptMsgOpenToEncode VAR_CryptMsgOpenToEncode
  201. LOADER_FUNCTION( HCRYPTMSG, CryptMsgOpenToDecode,
  202. (DWORD dwMsgEncodingType, DWORD dwFlags, DWORD dwMsgType, HCRYPTPROV hCryptProv, PCERT_INFO pRecipientInfo, PCMSG_STREAM_INFO pStreamInfo),
  203. (dwMsgEncodingType, dwFlags, dwMsgType, hCryptProv, pRecipientInfo, pStreamInfo),
  204. NULL, Crypt32)
  205. #define CryptMsgOpenToDecode VAR_CryptMsgOpenToDecode
  206. LOADER_FUNCTION( BOOL, CryptMsgUpdate,
  207. (HCRYPTMSG hCryptMsg, const BYTE *pbData, DWORD cbData, BOOL fFinal),
  208. (hCryptMsg, pbData, cbData, fFinal),
  209. FALSE, Crypt32)
  210. #define CryptMsgUpdate VAR_CryptMsgUpdate
  211. LOADER_FUNCTION( BOOL, CryptMsgGetParam,
  212. (HCRYPTMSG hCryptMsg, DWORD dwParamType, DWORD dwIndex, void *pvData, DWORD *pcbData),
  213. (hCryptMsg, dwParamType, dwIndex, pvData, pcbData),
  214. FALSE, Crypt32)
  215. #define CryptMsgGetParam VAR_CryptMsgGetParam
  216. LOADER_FUNCTION( BOOL, CryptMsgControl,
  217. (HCRYPTMSG hCryptMsg, DWORD dwFlags, DWORD dwCtrlType, void const *pvCtrlPara),
  218. (hCryptMsg, dwFlags, dwCtrlType, pvCtrlPara),
  219. FALSE, Crypt32)
  220. #define CryptMsgControl VAR_CryptMsgControl
  221. LOADER_FUNCTION( BOOL, CryptMsgClose,
  222. (HCRYPTMSG hCryptMsg),
  223. (hCryptMsg),
  224. TRUE, Crypt32) // return success since GLE() is meaningless
  225. #define CryptMsgClose VAR_CryptMsgClose
  226. LOADER_FUNCTION( BOOL, CertAddEncodedCRLToStore,
  227. (HCERTSTORE hCertStore, DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded, DWORD dwAddDisposition, PCCRL_CONTEXT *ppCrlContext),
  228. (hCertStore, dwCertEncodingType, pbCrlEncoded, cbCrlEncoded, dwAddDisposition, ppCrlContext),
  229. FALSE, Crypt32)
  230. #define CertAddEncodedCRLToStore VAR_CertAddEncodedCRLToStore
  231. LOADER_FUNCTION( PCCRL_CONTEXT, CertEnumCRLsInStore,
  232. (HCERTSTORE hCertStore, PCCRL_CONTEXT pPrevCrlContext),
  233. (hCertStore, pPrevCrlContext),
  234. NULL, Crypt32)
  235. #define CertEnumCRLsInStore VAR_CertEnumCRLsInStore
  236. LOADER_FUNCTION( PCERT_EXTENSION, CertFindExtension,
  237. (LPCSTR pszObjId, DWORD cExtensions, CERT_EXTENSION rgExtensions[]),
  238. (pszObjId, cExtensions, rgExtensions),
  239. NULL, Crypt32)
  240. #define CertFindExtension VAR_CertFindExtension
  241. LOADER_FUNCTION( PCERT_CONTEXT, CertCreateCertificateContext,
  242. (DWORD dwCertEncodingType, const BYTE * pbCertEncoded, DWORD cbCertEncoded),
  243. (dwCertEncodingType, pbCertEncoded, cbCertEncoded),
  244. NULL, Crypt32)
  245. #define CertCreateCertificateContext VAR_CertCreateCertificateContext
  246. LOADER_FUNCTION( DWORD, CertNameToStrA,
  247. (DWORD dwCertEncodingType, PCERT_NAME_BLOB pName, DWORD dwStrType,
  248. LPSTR psz, DWORD csz),
  249. (dwCertEncodingType, pName, dwStrType, psz, csz),
  250. NULL, Crypt32)
  251. #define CertNameToStrA VAR_CertNameToStrA
  252. LOADER_FUNCTION( BOOL, CertGetEnhancedKeyUsage,
  253. (PCCERT_CONTEXT pCertContext, DWORD dwFlags, PCERT_ENHKEY_USAGE pUsage,
  254. DWORD *pcbUsage),
  255. (pCertContext, dwFlags, pUsage, pcbUsage),
  256. FALSE, Crypt32)
  257. #define CertGetEnhancedKeyUsage VAR_CertGetEnhancedKeyUsage
  258. LOADER_FUNCTION( DWORD, CertAddStoreToCollection,
  259. (HCERTSTORE hCollectionStore, HCERTSTORE hSiblingStore, DWORD dwUpdateFlags,
  260. DWORD dwPriority),
  261. (hCollectionStore, hSiblingStore, dwUpdateFlags, dwPriority),
  262. NULL, Crypt32)
  263. #define CertAddStoreToCollection VAR_CertAddStoreToCollection
  264. LOADER_FUNCTION( BOOL, CertSetCertificateContextProperty,
  265. (PCCERT_CONTEXT pCertContext, DWORD dwPropId, DWORD dwFlags, const void *pvData),
  266. (pCertContext, dwPropId, dwFlags, pvData),
  267. NULL, Crypt32)
  268. #define CertSetCertificateContextProperty VAR_CertSetCertificateContextProperty
  269. LOADER_FUNCTION( BOOL, CertVerifySubjectCertificateContext,
  270. (PCCERT_CONTEXT pSubject, PCCERT_CONTEXT pIssuer, DWORD *pdwFlags),
  271. (pSubject, pIssuer, pdwFlags),
  272. FALSE, Crypt32)
  273. #define CertVerifySubjectCertificateContext VAR_CertVerifySubjectCertificateContext
  274. LOADER_FUNCTION_VOID( void, CertFreeCertificateChain,
  275. (PCCERT_CHAIN_CONTEXT pChainContext),
  276. (pChainContext),
  277. Crypt32)
  278. #define CertFreeCertificateChain VAR_CertFreeCertificateChain
  279. LOADER_FUNCTION( BOOL, CertGetCertificateChain,
  280. (HCERTCHAINENGINE hChainEngine, PCCERT_CONTEXT pCertContext, LPFILETIME pTime, HCERTSTORE hAdditionalStore,
  281. PCERT_CHAIN_PARA pChainPara, DWORD dwFlags, LPVOID pvReserved, PCCERT_CHAIN_CONTEXT* ppChainContext),
  282. (hChainEngine, pCertContext, pTime, hAdditionalStore, pChainPara, dwFlags, pvReserved, ppChainContext),
  283. FALSE, Crypt32)
  284. #define CertGetCertificateChain VAR_CertGetCertificateChain
  285. LOADER_FUNCTION( BOOL, CertVerifyCertificateChainPolicy,
  286. (LPCSTR pszPolicyOID, PCCERT_CHAIN_CONTEXT pChainContext, PCERT_CHAIN_POLICY_PARA pPolicyPara, PCERT_CHAIN_POLICY_STATUS pPolicyStatus),
  287. (pszPolicyOID, pChainContext, pPolicyPara, pPolicyStatus),
  288. FALSE, Crypt32)
  289. #define CertVerifyCertificateChainPolicy VAR_CertVerifyCertificateChainPolicy
  290. /////////////////////////////////////
  291. // CRYPTDLG.DLL
  292. #define _CRYPTDLG_
  293. // Old cert dialogs
  294. typedef struct tagCERT_VIEWPROPERTIES_STRUCT_A *PCERT_VIEWPROPERTIES_STRUCT_A;
  295. typedef struct tagCSSA *PCERT_SELECT_STRUCT_A;
  296. BOOL DemandLoadCryptDlg();
  297. LOADER_FUNCTION( BOOL, CertViewPropertiesA,
  298. (PCERT_VIEWPROPERTIES_STRUCT_A pCertViewInfo),
  299. (pCertViewInfo),
  300. FALSE, CryptDlg)
  301. #define CertViewPropertiesA VAR_CertViewPropertiesA
  302. LOADER_FUNCTION( DWORD, GetFriendlyNameOfCertA,
  303. (PCCERT_CONTEXT pccert, LPSTR pchBuffer, DWORD cchBuffer),
  304. (pccert, pchBuffer, cchBuffer),
  305. 0, CryptDlg)
  306. #define GetFriendlyNameOfCertA VAR_GetFriendlyNameOfCertA
  307. LOADER_FUNCTION( BOOL, CertSelectCertificateA,
  308. (PCERT_SELECT_STRUCT_A pCertSelectInfo),
  309. (pCertSelectInfo),
  310. FALSE, CryptDlg)
  311. #define CertSelectCertificateA VAR_CertSelectCertificateA
  312. /////////////////////////////////////
  313. // WINTRUST.DLL
  314. BOOL DemandLoadWinTrust();
  315. LOADER_FUNCTION( LONG, WinVerifyTrust,
  316. (HWND hwnd, GUID *ActionID, LPVOID ActionData),
  317. (hwnd, ActionID, ActionData),
  318. 0, WinTrust)
  319. #define WinVerifyTrust VAR_WinVerifyTrust
  320. /////////////////////////////////////
  321. // WININET.DLL
  322. #include <wininet.h>
  323. #define _WININET_
  324. typedef struct _INTERNET_CACHE_ENTRY_INFOA INTERNET_CACHE_ENTRY_INFOA;
  325. BOOL DemandLoadWinINET();
  326. LOADER_FUNCTION( BOOL, RetrieveUrlCacheEntryFileA,
  327. (LPCSTR lpszUrlName, INTERNET_CACHE_ENTRY_INFOA *lpCacheEntryInfo, LPDWORD lpdwCacheEntryInfoBufferSize, DWORD dwReserved),
  328. (lpszUrlName, lpCacheEntryInfo, lpdwCacheEntryInfoBufferSize, dwReserved),
  329. FALSE, WinINET)
  330. #define RetrieveUrlCacheEntryFileA VAR_RetrieveUrlCacheEntryFileA
  331. LOADER_FUNCTION( BOOL, CommitUrlCacheEntryA,
  332. (LPCSTR lpszUrlName, LPCSTR lpszLocalFileName, FILETIME ExpireTime, FILETIME LastModifiedTime, DWORD CacheEntryType, LPBYTE lpHeaderInfo,
  333. DWORD dwHeaderSize, LPCSTR lpszFileExtension, LPCSTR lpszOriginalUrl),
  334. (lpszUrlName, lpszLocalFileName, ExpireTime, LastModifiedTime, CacheEntryType, lpHeaderInfo,
  335. dwHeaderSize, lpszFileExtension, lpszOriginalUrl),
  336. FALSE, WinINET)
  337. #define CommitUrlCacheEntryA VAR_CommitUrlCacheEntryA
  338. LOADER_FUNCTION( BOOL, CreateUrlCacheEntryA,
  339. (LPCSTR lpszUrlName, DWORD dwExpectedFileSize, LPCSTR lpszFileExtension, LPSTR lpszFileName, DWORD dwReserved),
  340. (lpszUrlName, dwExpectedFileSize, lpszFileExtension, lpszFileName, dwReserved),
  341. FALSE, WinINET)
  342. #define CreateUrlCacheEntryA VAR_CreateUrlCacheEntryA
  343. LOADER_FUNCTION( BOOL, DeleteUrlCacheEntryA,
  344. (LPCSTR lpszUrlName),
  345. (lpszUrlName),
  346. FALSE, WinINET)
  347. #define DeleteUrlCacheEntryA VAR_DeleteUrlCacheEntryA
  348. LOADER_FUNCTION( BOOL, UnlockUrlCacheEntryFileA,
  349. (LPCSTR lpszUrlName, DWORD dwRes),
  350. (lpszUrlName, dwRes),
  351. FALSE, WinINET)
  352. #define UnlockUrlCacheEntryFileA VAR_UnlockUrlCacheEntryFileA
  353. LOADER_FUNCTION( BOOL, InternetQueryOptionA,
  354. (HINTERNET hInternet, DWORD dwOption, LPVOID lpBuffer, LPDWORD lpdwBufferLength),
  355. (hInternet, dwOption, lpBuffer, lpdwBufferLength),
  356. NULL, WinINET)
  357. #define InternetQueryOptionA VAR_InternetQueryOptionA
  358. LOADER_FUNCTION( BOOL, InternetSetOptionA,
  359. (HINTERNET hInternet, DWORD dwOption, LPVOID lpBuffer, DWORD dwBufferLength),
  360. (hInternet, dwOption, lpBuffer, dwBufferLength),
  361. NULL, WinINET)
  362. #define InternetSetOptionA VAR_InternetSetOptionA
  363. LOADER_FUNCTION( BOOL, InternetDialA,
  364. (HWND hwndParent, LPSTR lpszConnectoid, DWORD dwFlags, DWORD_PTR *lpdwConnection, DWORD dwReserved),
  365. (hwndParent, lpszConnectoid, dwFlags, lpdwConnection, dwReserved),
  366. NULL, WinINET)
  367. #define InternetDialA VAR_InternetDialA
  368. LOADER_FUNCTION( BOOL, InternetHangUp,
  369. (DWORD_PTR dwConnection, DWORD dwReserved),
  370. (dwConnection, dwReserved),
  371. NULL, WinINET)
  372. #define InternetHangUp VAR_InternetHangUp
  373. LOADER_FUNCTION(BOOL, InternetGetConnectedStateExA,
  374. (LPDWORD dwFlags, LPTSTR szconn, DWORD size, DWORD reserved),
  375. (dwFlags, szconn, size, reserved),
  376. FALSE, WinINET)
  377. #define InternetGetConnectedStateExA VAR_InternetGetConnectedStateExA
  378. LOADER_FUNCTION(BOOL, InternetCombineUrlA,
  379. (LPCSTR lpszBaseUrl, LPCSTR lpszRelativeUrl, LPSTR lpszBuffer, LPDWORD lpdwBufferLength, DWORD dwFlags),
  380. (lpszBaseUrl, lpszRelativeUrl, lpszBuffer, lpdwBufferLength, dwFlags),
  381. FALSE, WinINET)
  382. #define InternetCombineUrlA VAR_InternetCombineUrlA
  383. LOADER_FUNCTION(BOOL, InternetCrackUrlA,
  384. (LPCSTR lpszUrl, DWORD dwUrlLength, DWORD dwFlags, LPURL_COMPONENTS lpUrlComponents),
  385. (lpszUrl, dwUrlLength, dwFlags, lpUrlComponents),
  386. FALSE, WinINET)
  387. #define InternetCrackUrlA VAR_InternetCrackUrlA
  388. LOADER_FUNCTION(BOOL, InternetCloseHandle,
  389. (HINTERNET hInternet),
  390. (hInternet),
  391. FALSE, WinINET)
  392. #define InternetCloseHandle VAR_InternetCloseHandle
  393. LOADER_FUNCTION(BOOL, InternetReadFile,
  394. (HINTERNET hInternet, LPVOID lpBuffer, DWORD dwNumberOfBytesToRead, LPDWORD lpdwNumberOfBytesRead),
  395. (hInternet, lpBuffer, dwNumberOfBytesToRead, lpdwNumberOfBytesRead),
  396. FALSE, WinINET)
  397. #define InternetReadFile VAR_InternetReadFile
  398. LOADER_FUNCTION(HINTERNET, InternetConnectA,
  399. (HINTERNET hInternet, LPCSTR lpszServerName, INTERNET_PORT nServerPort,
  400. LPCSTR lpszUserName,LPCSTR lpszPassword, DWORD dwService, DWORD dwFlags, DWORD_PTR dwContext),
  401. (hInternet, lpszServerName, nServerPort, lpszUserName, lpszPassword, dwService, dwFlags, dwContext),
  402. NULL, WinINET)
  403. #define InternetConnectA VAR_InternetConnectA
  404. LOADER_FUNCTION(HINTERNET, InternetOpenA,
  405. (LPCSTR lpszAgent, DWORD dwAccessType, LPCSTR lpszProxy, LPCSTR lpszProxyBypass, DWORD dwFlags),
  406. (lpszAgent, dwAccessType, lpszProxy, lpszProxyBypass, dwFlags),
  407. NULL, WinINET)
  408. #define InternetOpenA VAR_InternetOpenA
  409. LOADER_FUNCTION(INTERNET_STATUS_CALLBACK, InternetSetStatusCallbackA,
  410. (HINTERNET hInternet, INTERNET_STATUS_CALLBACK lpfnInternetCallback),
  411. (hInternet, lpfnInternetCallback),
  412. NULL, WinINET)
  413. #define InternetSetStatusCallbackA VAR_InternetSetStatusCallbackA
  414. LOADER_FUNCTION(BOOL, HttpQueryInfoA,
  415. (HINTERNET hRequest, DWORD dwInfoLevel, LPVOID lpBuffer, LPDWORD lpdwBufferLength, LPDWORD lpdwIndex),
  416. (hRequest, dwInfoLevel, lpBuffer, lpdwBufferLength, lpdwIndex),
  417. FALSE, WinINET)
  418. #define HttpQueryInfoA VAR_HttpQueryInfoA
  419. LOADER_FUNCTION(HINTERNET, HttpOpenRequestA,
  420. (HINTERNET hConnect, LPCSTR lpszVerb, LPCSTR lpszObjectName, LPCSTR lpszVersion,
  421. LPCSTR lpszReferrer, LPCSTR FAR * lplpszAcceptTypes, DWORD dwFlags, DWORD_PTR dwContext),
  422. ( hConnect, lpszVerb, lpszObjectName, lpszVersion, lpszReferrer, lplpszAcceptTypes, dwFlags, dwContext),
  423. NULL, WinINET)
  424. #define HttpOpenRequestA VAR_HttpOpenRequestA
  425. LOADER_FUNCTION(BOOL, HttpAddRequestHeadersA,
  426. (HINTERNET hRequest, LPCSTR lpszHeaders, DWORD dwHeadersLength, DWORD dwModifiers),
  427. (hRequest, lpszHeaders, dwHeadersLength, dwModifiers),
  428. FALSE, WinINET)
  429. #define HttpAddRequestHeadersA VAR_HttpAddRequestHeadersA
  430. LOADER_FUNCTION(BOOL, HttpSendRequestA,
  431. (HINTERNET hRequest, LPCSTR lpszHeaders, DWORD dwHeadersLength, LPVOID lpOptional, DWORD dwOptionalLength),
  432. (hRequest, lpszHeaders, dwHeadersLength, lpOptional, dwOptionalLength),
  433. FALSE, WinINET)
  434. #define HttpSendRequestA VAR_HttpSendRequestA
  435. LOADER_FUNCTION(BOOL, InternetWriteFile,
  436. (HINTERNET hFile, LPCVOID lpBuffer, DWORD dwNumberOfBytesToWrite, LPDWORD lpdwNumberOfBytesWritten),
  437. (hFile, lpBuffer, dwNumberOfBytesToWrite, lpdwNumberOfBytesWritten),
  438. FALSE, WinINET)
  439. #define InternetWriteFile VAR_InternetWriteFile
  440. LOADER_FUNCTION(BOOL, HttpEndRequestA,
  441. (HINTERNET hRequest, LPINTERNET_BUFFERSA lpBuffersOut, DWORD dwFlags, DWORD_PTR dwContext),
  442. (hRequest, lpBuffersOut, dwFlags, dwContext),
  443. FALSE, WinINET)
  444. #define HttpEndRequestA VAR_HttpEndRequestA
  445. LOADER_FUNCTION(BOOL, HttpSendRequestExA,
  446. (HINTERNET hRequest, LPINTERNET_BUFFERSA lpBuffersIn,
  447. LPINTERNET_BUFFERSA lpBuffersOut, DWORD dwFlags, DWORD_PTR dwContext),
  448. (hRequest, lpBuffersIn, lpBuffersOut, dwFlags, dwContext),
  449. FALSE, WinINET)
  450. #define HttpSendRequestExA VAR_HttpSendRequestExA
  451. /////////////////////////////////////
  452. // SHELL32.DLL
  453. #include <shellapi.h>
  454. #include <shlobj.h>
  455. #include <shlobjp.h>
  456. BOOL DemandLoadSHELL32();
  457. LOADER_FUNCTION(BOOL, SHFree, // Actually a void
  458. (LPVOID lpv),
  459. (lpv),
  460. FALSE, SHELL32)
  461. #define SHFree VAR_SHFree
  462. LOADER_FUNCTION(BOOL, SHGetPathFromIDListA,
  463. (LPCITEMIDLIST pidl, LPSTR pszPath),
  464. (pidl, pszPath),
  465. FALSE, SHELL32)
  466. #define SHGetPathFromIDListA VAR_SHGetPathFromIDListA
  467. LOADER_FUNCTION(BOOL, SHGetPathFromIDListW,
  468. (LPCITEMIDLIST pidl, LPWSTR pwszPath),
  469. (pidl, pwszPath),
  470. FALSE, SHELL32)
  471. #define SHGetPathFromIDListW VAR_SHGetPathFromIDListW
  472. LOADER_FUNCTION(HRESULT, SHGetSpecialFolderLocation,
  473. (HWND hwndOwner, int nFolder, LPITEMIDLIST * ppidl),
  474. (hwndOwner, nFolder, ppidl),
  475. E_FAIL, SHELL32)
  476. #define SHGetSpecialFolderLocation VAR_SHGetSpecialFolderLocation
  477. LOADER_FUNCTION(LPITEMIDLIST, SHBrowseForFolderA,
  478. (LPBROWSEINFOA lpbi),
  479. (lpbi),
  480. NULL, SHELL32)
  481. #define SHBrowseForFolderA VAR_SHBrowseForFolderA
  482. LOADER_FUNCTION(LPITEMIDLIST, SHBrowseForFolderW,
  483. (LPBROWSEINFOW lpbi),
  484. (lpbi),
  485. NULL, SHELL32)
  486. #define SHBrowseForFolderW VAR_SHBrowseForFolderW
  487. LOADER_FUNCTION(HRESULT, SHSetUnreadMailCountW,
  488. (LPCWSTR pszMailAddress, DWORD dwCount, LPCWSTR pszShellExecuteCommand),
  489. (pszMailAddress, dwCount, pszShellExecuteCommand),
  490. NULL, SHELL32)
  491. #define SHSetUnreadMailCountW VAR_SHSetUnreadMailCountW
  492. LOADER_FUNCTION(HINSTANCE, ShellExecuteA,
  493. (HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd),
  494. (hwnd, lpOperation, lpFile, lpParameters, lpDirectory, nShowCmd),
  495. NULL, SHELL32)
  496. #define ShellExecuteA VAR_ShellExecuteA
  497. LOADER_FUNCTION(BOOL, ShellExecuteExA,
  498. (LPSHELLEXECUTEINFOA lpExecInfo),
  499. (lpExecInfo),
  500. FALSE, SHELL32)
  501. #define ShellExecuteExA VAR_ShellExecuteExA
  502. LOADER_FUNCTION(UINT, DragQueryFileA,
  503. (HDROP hDrop, UINT iFile, LPSTR lpszFile, UINT cb),
  504. (hDrop, iFile, lpszFile, cb),
  505. 0, SHELL32)
  506. #define DragQueryFileA VAR_DragQueryFileA
  507. LOADER_FUNCTION(DWORD, SHGetFileInfoA,
  508. (LPCSTR pszPath, DWORD dwFileAttributes, SHFILEINFOA FAR *psfi, UINT cbFileInfo, UINT uFlags),
  509. (pszPath, dwFileAttributes, psfi, cbFileInfo, uFlags),
  510. 0, SHELL32)
  511. #define SHGetFileInfoA VAR_SHGetFileInfoA
  512. LOADER_FUNCTION(BOOL, Shell_NotifyIconA,
  513. (DWORD dwMessage, PNOTIFYICONDATAA lpData),
  514. (dwMessage, lpData),
  515. FALSE, SHELL32)
  516. #define Shell_NotifyIconA VAR_Shell_NotifyIconA
  517. LOADER_FUNCTION(int, SHFileOperationA,
  518. (LPSHFILEOPSTRUCTA lpfo),
  519. (lpfo),
  520. -1, SHELL32)
  521. #define SHFileOperationA VAR_SHFileOperationA
  522. LOADER_FUNCTION(HICON, ExtractIconA,
  523. (HINSTANCE hInst, LPCSTR lpszExeFileName, UINT nIconIndex),
  524. (hInst, lpszExeFileName, nIconIndex),
  525. NULL, SHELL32)
  526. #define ExtractIconA VAR_ExtractIconA
  527. #if 0
  528. /////////////////////////////////////
  529. // OLEAUT32.DLL
  530. BOOL DemandLoadOLEAUT32();
  531. #include <olectl.h>
  532. LOADER_FUNCTION(SAFEARRAY *, SafeArrayCreate,
  533. (VARTYPE vt, UINT cDims, SAFEARRAYBOUND* rgsabound),
  534. (vt, cDims, rgsabound),
  535. NULL, OLEAUT32)
  536. #define SafeArrayCreate VAR_SafeArrayCreate
  537. LOADER_FUNCTION(HRESULT, SafeArrayPutElement,
  538. (SAFEARRAY * psa, LONG * rgIndices, void * pv),
  539. (psa, rgIndices, pv),
  540. E_FAIL, OLEAUT32)
  541. #define SafeArrayPutElement VAR_SafeArrayPutElement
  542. LOADER_FUNCTION(HRESULT, DispInvoke,
  543. (void * _this, ITypeInfo * ptinfo, DISPID dispidMember, WORD wFlags, DISPPARAMS * pparams, VARIANT * pvarResult, EXCEPINFO * pexcepinfo, UINT * puArgErr),
  544. (_this, ptinfo, dispidMember, wFlags, pparams, pvarResult, pexcepinfo, puArgErr),
  545. E_FAIL, OLEAUT32)
  546. #define DispInvoke VAR_DispInvoke
  547. LOADER_FUNCTION(HRESULT, DispGetIDsOfNames,
  548. (ITypeInfo * ptinfo, OLECHAR ** rgszNames, UINT cNames, DISPID * rgdispid),
  549. (ptinfo, rgszNames, cNames, rgdispid),
  550. E_FAIL, OLEAUT32)
  551. #define DispGetIDsOfNames VAR_DispGetIDsOfNames
  552. LOADER_FUNCTION(BSTR, SysAllocStringByteLen,
  553. (LPCSTR psz, UINT len),
  554. (psz, len),
  555. NULL, OLEAUT32)
  556. #define SysAllocStringByteLen VAR_SysAllocStringByteLen
  557. LOADER_FUNCTION(int, SysReAllocString,
  558. (BSTR * pbstr, const OLECHAR * sz),
  559. (pbstr, sz),
  560. 0, OLEAUT32)
  561. #define SysReAllocString VAR_SysReAllocString
  562. LOADER_FUNCTION(BSTR, SysAllocStringLen,
  563. (const OLECHAR *pch, unsigned int i),
  564. (pch, i),
  565. NULL, OLEAUT32)
  566. #define SysAllocStringLen VAR_SysAllocStringLen
  567. LOADER_FUNCTION(BSTR, SysAllocString,
  568. (const OLECHAR *pch),
  569. (pch),
  570. NULL, OLEAUT32)
  571. #define SysAllocString VAR_SysAllocString
  572. LOADER_FUNCTION(BOOL, SysFreeString, // Actually a void
  573. (BSTR bs),
  574. (bs),
  575. FALSE, OLEAUT32)
  576. #define SysFreeString VAR_SysFreeString
  577. LOADER_FUNCTION(UINT, SysStringLen,
  578. (BSTR bs),
  579. (bs),
  580. 0, OLEAUT32)
  581. #define SysStringLen VAR_SysStringLen
  582. LOADER_FUNCTION(BOOL, VariantInit,
  583. (VARIANTARG * pvarg),
  584. (pvarg),
  585. FALSE, OLEAUT32)
  586. #define VariantInit VAR_VariantInit
  587. LOADER_FUNCTION(HRESULT, LoadTypeLib,
  588. (const OLECHAR *szFile, ITypeLib ** pptlib),
  589. (szFile, pptlib),
  590. E_FAIL, OLEAUT32)
  591. #define LoadTypeLib VAR_LoadTypeLib
  592. LOADER_FUNCTION(HRESULT, RegisterTypeLib,
  593. (ITypeLib * ptlib, OLECHAR *szFullPath, OLECHAR *szHelpDir),
  594. (ptlib, szFullPath, szHelpDir),
  595. E_FAIL, OLEAUT32)
  596. #define RegisterTypeLib VAR_RegisterTypeLib
  597. LOADER_FUNCTION(HRESULT, SafeArrayAccessData,
  598. (SAFEARRAY * psa, void HUGEP** ppvData),
  599. (psa, ppvData),
  600. E_FAIL, OLEAUT32)
  601. #define SafeArrayAccessData VAR_SafeArrayAccessData
  602. LOADER_FUNCTION(HRESULT, SafeArrayUnaccessData,
  603. (SAFEARRAY * psa),
  604. (psa),
  605. E_FAIL, OLEAUT32)
  606. #define SafeArrayUnaccessData VAR_SafeArrayUnaccessData
  607. LOADER_FUNCTION(UINT, SysStringByteLen,
  608. (BSTR bstr),
  609. (bstr),
  610. 0, OLEAUT32)
  611. #define SysStringByteLen VAR_SysStringByteLen
  612. LOADER_FUNCTION(HRESULT, SafeArrayDestroy,
  613. (SAFEARRAY *psa),
  614. (psa),
  615. E_FAIL, OLEAUT32)
  616. #define SafeArrayDestroy VAR_SafeArrayDestroy
  617. LOADER_FUNCTION(HRESULT, SafeArrayGetElement,
  618. (SAFEARRAY * psa, LONG * rgIndices, void * pv),
  619. (psa, rgIndices, pv),
  620. E_FAIL, OLEAUT32)
  621. #define SafeArrayGetElement VAR_SafeArrayGetElement
  622. LOADER_FUNCTION(HRESULT, SafeArrayGetUBound,
  623. (SAFEARRAY * psa, UINT nDim, LONG * plUbound),
  624. (psa, nDim, plUbound),
  625. E_FAIL, OLEAUT32)
  626. #define SafeArrayGetUBound VAR_SafeArrayGetUBound
  627. LOADER_FUNCTION(HRESULT, SafeArrayGetLBound,
  628. (SAFEARRAY * psa, UINT nDim, LONG * plLbound),
  629. (psa, nDim, plLbound),
  630. E_FAIL, OLEAUT32)
  631. #define SafeArrayGetLBound VAR_SafeArrayGetLBound
  632. LOADER_FUNCTION(HRESULT, VariantClear,
  633. (VARIANTARG * pvarg),
  634. (pvarg),
  635. E_FAIL, OLEAUT32)
  636. #define VariantClear VAR_VariantClear
  637. LOADER_FUNCTION(HRESULT, VariantCopy,
  638. (VARIANTARG * pvargDest, VARIANTARG * pvargSrc),
  639. (pvargDest, pvargSrc),
  640. E_FAIL, OLEAUT32)
  641. #define VariantCopy VAR_VariantCopy
  642. LOADER_FUNCTION(HRESULT, SetErrorInfo,
  643. (ULONG dwReserved, IErrorInfo * perrinfo),
  644. (dwReserved, perrinfo),
  645. E_FAIL, OLEAUT32)
  646. #define SetErrorInfo VAR_SetErrorInfo
  647. LOADER_FUNCTION(HRESULT, CreateErrorInfo,
  648. (ICreateErrorInfo ** pperrinfo),
  649. (pperrinfo),
  650. E_FAIL, OLEAUT32)
  651. #define CreateErrorInfo VAR_CreateErrorInfo
  652. #endif
  653. /////////////////////////////////////
  654. // COMDLG32.DLL
  655. #include <commdlg.h>
  656. BOOL DemandLoadCOMDLG32();
  657. LOADER_FUNCTION(BOOL, GetSaveFileNameA,
  658. (LPOPENFILENAME pof),
  659. (pof),
  660. FALSE, COMDLG32)
  661. #define GetSaveFileNameA VAR_GetSaveFileNameA
  662. LOADER_FUNCTION(BOOL, GetOpenFileNameA,
  663. (LPOPENFILENAME pof),
  664. (pof),
  665. FALSE, COMDLG32)
  666. #define GetOpenFileNameA VAR_GetOpenFileNameA
  667. LOADER_FUNCTION(BOOL, ChooseFontA,
  668. (LPCHOOSEFONT pcf),
  669. (pcf),
  670. FALSE, COMDLG32)
  671. #define ChooseFontA VAR_ChooseFontA
  672. /////////////////////////////////////
  673. // VERSION.DLL
  674. BOOL DemandLoadVERSION();
  675. LOADER_FUNCTION(BOOL, VerQueryValueA,
  676. (const LPVOID pBlock, LPSTR lpSubBlock, LPVOID *lplpBuffer, PUINT puLen),
  677. (pBlock, lpSubBlock, lplpBuffer, puLen),
  678. FALSE, VERSION)
  679. #define VerQueryValueA VAR_VerQueryValueA
  680. LOADER_FUNCTION(BOOL, GetFileVersionInfoA,
  681. (PSTR lptstrFilename, DWORD dwHandle, DWORD dwLen, LPVOID lpData),
  682. (lptstrFilename, dwHandle, dwLen, lpData),
  683. FALSE, VERSION)
  684. #define GetFileVersionInfoA VAR_GetFileVersionInfoA
  685. LOADER_FUNCTION(DWORD, GetFileVersionInfoSizeA,
  686. (LPSTR lptstrFilename, LPDWORD lpdwHandle),
  687. (lptstrFilename, lpdwHandle),
  688. 0, VERSION)
  689. #define GetFileVersionInfoSizeA VAR_GetFileVersionInfoSizeA
  690. /////////////////////////////////////
  691. // URLMON.DLL
  692. BOOL DemandLoadURLMON();
  693. LOADER_FUNCTION(HRESULT, CreateURLMoniker,
  694. (LPMONIKER pMkCtx, LPCWSTR szURL, LPMONIKER FAR *ppmk),
  695. (pMkCtx, szURL, ppmk),
  696. E_FAIL, URLMON)
  697. #define CreateURLMoniker VAR_CreateURLMoniker
  698. LOADER_FUNCTION(HRESULT, URLOpenBlockingStreamA,
  699. (LPUNKNOWN pUnk,LPCSTR pURL,LPSTREAM* ppstm,DWORD i,LPBINDSTATUSCALLBACK p),
  700. (pUnk, pURL, ppstm, i, p),
  701. E_FAIL, URLMON)
  702. #define URLOpenBlockingStreamA VAR_URLOpenBlockingStreamA
  703. LOADER_FUNCTION(HRESULT, FindMimeFromData,
  704. (LPBC pBC, LPCWSTR pwzUrl, LPVOID pBuffer, DWORD cbSize, LPCWSTR pwzMimeProposed, DWORD dwMimeFlags, LPWSTR *ppwzMimeOut, DWORD dwReserved),
  705. (pBC, pwzUrl, pBuffer, cbSize, pwzMimeProposed, dwMimeFlags, ppwzMimeOut, dwReserved),
  706. E_FAIL, URLMON)
  707. #define FindMimeFromData VAR_FindMimeFromData
  708. LOADER_FUNCTION( HRESULT, CoInternetCombineUrl,
  709. (LPCWSTR pwzBaseUrl, LPCWSTR pwzRelativeUrl, DWORD dwCombineFlags, LPWSTR pszResult, DWORD cchResult, DWORD *pcchResult, DWORD dwReserved),
  710. (pwzBaseUrl, pwzRelativeUrl, dwCombineFlags, pszResult, cchResult, pcchResult, dwReserved),
  711. E_FAIL, URLMON)
  712. #define CoInternetCombineUrl VAR_CoInternetCombineUrl
  713. LOADER_FUNCTION( HRESULT, RegisterBindStatusCallback,
  714. (LPBC pBC, IBindStatusCallback *pBSCb, IBindStatusCallback** ppBSCBPrev, DWORD dwReserved),
  715. (pBC, pBSCb, ppBSCBPrev, dwReserved),
  716. E_FAIL, URLMON)
  717. #define RegisterBindStatusCallback VAR_RegisterBindStatusCallback
  718. LOADER_FUNCTION( HRESULT, RevokeBindStatusCallback,
  719. (LPBC pBC, IBindStatusCallback *pBSCb),
  720. (pBC, pBSCb),
  721. E_FAIL, URLMON)
  722. #define RevokeBindStatusCallback VAR_RevokeBindStatusCallback
  723. LOADER_FUNCTION( HRESULT, FaultInIEFeature,
  724. (HWND hwnd, uCLSSPEC *classpec, QUERYCONTEXT *pQuery, DWORD dwFlags),
  725. (hwnd, classpec, pQuery, dwFlags),
  726. E_FAIL, URLMON)
  727. #define FaultInIEFeature VAR_FaultInIEFeature
  728. LOADER_FUNCTION( HRESULT, CoInternetGetSecurityUrl,
  729. (LPCWSTR pwzUrl, LPWSTR *ppwzSecUrl, PSUACTION psuAction, DWORD dwReserved),
  730. (pwzUrl, ppwzSecUrl, psuAction, dwReserved),
  731. E_FAIL, URLMON)
  732. #define CoInternetGetSecurityUrl VAR_CoInternetGetSecurityUrl
  733. LOADER_FUNCTION( HRESULT, ObtainUserAgentString,
  734. (DWORD dwOption, LPSTR pszUAOut, DWORD* cbSize),
  735. (dwOption, pszUAOut, cbSize),
  736. E_FAIL, URLMON)
  737. #define ObtainUserAgentString VAR_ObtainUserAgentString
  738. LOADER_FUNCTION( HRESULT, CoInternetCreateSecurityManager,
  739. (IServiceProvider *pSP, IInternetSecurityManager **ppSM, DWORD dwReserved),
  740. (pSP, ppSM, dwReserved),
  741. E_FAIL, URLMON)
  742. #define CoInternetCreateSecurityManager VAR_CoInternetCreateSecurityManager
  743. /////////////////////////////////////
  744. // MLANG.DLL
  745. #include <mlang.h>
  746. BOOL DemandLoadMLANG(void);
  747. LOADER_FUNCTION( HRESULT, IsConvertINetStringAvailable,
  748. (DWORD dwSrcEncoding, DWORD dwDstEncoding),
  749. (dwSrcEncoding, dwDstEncoding),
  750. S_FALSE, MLANG)
  751. #define IsConvertINetStringAvailable VAR_IsConvertINetStringAvailable
  752. LOADER_FUNCTION( HRESULT, ConvertINetString,
  753. (LPDWORD lpdwMode, DWORD dwSrcEncoding, DWORD dwDstEncoding, LPCSTR lpSrcStr, LPINT lpnSrcSize, LPSTR lpDstStr, LPINT lpnDstSize),
  754. (lpdwMode, dwSrcEncoding, dwDstEncoding, lpSrcStr, lpnSrcSize, lpDstStr, lpnDstSize),
  755. E_FAIL, MLANG)
  756. #define ConvertINetString VAR_ConvertINetString
  757. /////////////////////////////////////
  758. // SHDOCVW.DLL
  759. #include <shlobjp.h>
  760. BOOL DemandLoadSHDOCVW();
  761. LOADER_FUNCTION(HRESULT, AddUrlToFavorites,
  762. (HWND hwnd, LPWSTR pszUrlW, LPWSTR pszTitleW, BOOL fDisplayUI),
  763. (hwnd, pszUrlW, pszTitleW, fDisplayUI),
  764. E_FAIL, SHDOCVW)
  765. #define AddUrlToFavorites VAR_AddUrlToFavorites
  766. LOADER_FUNCTION(long, SetQueryNetSessionCount,
  767. (enum SessionOp Op),
  768. (Op),
  769. 0, SHDOCVW)
  770. #define SetQueryNetSessionCount VAR_SetQueryNetSessionCount
  771. LOADER_FUNCTION_VOID(void, SetShellOfflineState,
  772. (BOOL fPutOfflineState),
  773. (fPutOfflineState),
  774. SHDOCVW)
  775. #define SetShellOfflineState VAR_SetShellOfflineState
  776. /////////////////////////////////////
  777. // INETCPL.CPL
  778. BOOL DemandLoadINETCPL();
  779. LOADER_FUNCTION(int, OpenFontsDialog,
  780. (HWND hwnd, LPCSTR lpszKey),
  781. (hwnd, lpszKey),
  782. 0, INETCPL)
  783. #define OpenFontsDialog VAR_OpenFontsDialog
  784. LOADER_FUNCTION(BOOL, LaunchConnectionDialog,
  785. (HWND hwnd),
  786. (hwnd),
  787. FALSE, INETCPL)
  788. #define LaunchConnectionDialog VAR_LaunchConnectionDialog
  789. /////////////////////////////////////
  790. // MSO9.DLL
  791. #include "msoci.h"
  792. BOOL DemandLoadMSO9();
  793. LOADER_FUNCTION(BOOL, MsoFGetComponentManager,
  794. (IMsoComponentManager **ppicm),
  795. (ppicm),
  796. FALSE, MSO9)
  797. #define MsoFGetComponentManager VAR_MsoFGetComponentManager
  798. /////////////////////////////////////
  799. // WINMM.DLL
  800. BOOL DemandLoadWinMM();
  801. LOADER_FUNCTION(BOOL, sndPlaySoundA,
  802. (LPCSTR pszSound, UINT fuSound),
  803. (pszSound, fuSound),
  804. FALSE, WinMM)
  805. #define sndPlaySoundA VAR_sndPlaySoundA
  806. /////////////////////////////////////
  807. // WSOCK32.DLL
  808. #include <winsock.h>
  809. typedef struct WSAData FAR * LPWSADATA;
  810. typedef unsigned int u_int;
  811. typedef unsigned short u_short;
  812. #ifdef _WIN64
  813. typedef UINT_PTR SOCKET;
  814. #else
  815. typedef u_int SOCKET;
  816. #endif // _WIN64
  817. BOOL DemandLoadWSOCK32();
  818. LOADER_FUNCTION( int, WSAStartup,
  819. (WORD wVersionRequired, LPWSADATA lpWSAData),
  820. (wVersionRequired, lpWSAData),
  821. WSAVERNOTSUPPORTED, WSOCK32)
  822. #define WSAStartup VAR_WSAStartup
  823. LOADER_FUNCTION( int, WSACleanup,
  824. (void),
  825. (),
  826. SOCKET_ERROR, WSOCK32)
  827. #define WSACleanup VAR_WSACleanup
  828. LOADER_FUNCTION( int, WSAGetLastError,
  829. (void),
  830. (),
  831. 0, WSOCK32)
  832. #define WSAGetLastError VAR_WSAGetLastError
  833. LOADER_FUNCTION( int, gethostname,
  834. (char FAR * name, int namelen),
  835. (name, namelen),
  836. SOCKET_ERROR, WSOCK32)
  837. #define gethostname VAR_gethostname
  838. LOADER_FUNCTION( struct hostent FAR *, gethostbyname,
  839. (const char FAR * name),
  840. (name),
  841. NULL, WSOCK32)
  842. #define gethostbyname VAR_gethostbyname
  843. LOADER_FUNCTION( HANDLE, WSAAsyncGetHostByName,
  844. (HWND hWnd, u_int wMsg, const char FAR * name, char FAR * buf, int buflen),
  845. (hWnd, wMsg, name, buf, buflen),
  846. 0, WSOCK32)
  847. #define WSAAsyncGetHostByName VAR_WSAAsyncGetHostByName
  848. LOADER_FUNCTION( unsigned long, inet_addr,
  849. (const char FAR * cp),
  850. (cp),
  851. INADDR_NONE, WSOCK32)
  852. #define inet_addr VAR_inet_addr
  853. LOADER_FUNCTION( u_short, htons,
  854. (u_short hostshort),
  855. (hostshort),
  856. 0, WSOCK32)
  857. #define htons VAR_htons
  858. LOADER_FUNCTION( int, WSACancelAsyncRequest,
  859. (HANDLE hAsyncTaskHandle),
  860. (hAsyncTaskHandle),
  861. SOCKET_ERROR, WSOCK32)
  862. #define WSACancelAsyncRequest VAR_WSACancelAsyncRequest
  863. LOADER_FUNCTION( int, send,
  864. (SOCKET s, const char FAR * buf, int len, int flags),
  865. (s, buf, len, flags),
  866. SOCKET_ERROR, WSOCK32)
  867. #define send VAR_send
  868. LOADER_FUNCTION( int, connect,
  869. (SOCKET s, const struct sockaddr FAR *name, int namelen),
  870. (s, name, namelen),
  871. SOCKET_ERROR, WSOCK32)
  872. #define connect VAR_connect
  873. LOADER_FUNCTION( int, WSAAsyncSelect,
  874. (SOCKET s, HWND hWnd, u_int wMsg, long lEvent),
  875. (s, hWnd, wMsg, lEvent),
  876. SOCKET_ERROR, WSOCK32)
  877. #define WSAAsyncSelect VAR_WSAAsyncSelect
  878. LOADER_FUNCTION( SOCKET, socket,
  879. (int af, int type, int protocol),
  880. (af, type, protocol),
  881. INVALID_SOCKET, WSOCK32)
  882. #define socket VAR_socket
  883. LOADER_FUNCTION( char FAR *, inet_ntoa,
  884. (struct in_addr in),
  885. (in),
  886. NULL, WSOCK32)
  887. #define inet_ntoa VAR_inet_ntoa
  888. LOADER_FUNCTION( int, closesocket,
  889. (SOCKET s),
  890. (s),
  891. SOCKET_ERROR, WSOCK32)
  892. #define closesocket VAR_closesocket
  893. LOADER_FUNCTION( int, recv,
  894. (SOCKET s, char FAR * buf, int len, int flags),
  895. (s, buf, len, flags),
  896. SOCKET_ERROR, WSOCK32)
  897. #define recv VAR_recv
  898. /////////////////////////////////////
  899. // PSTOREC.DLL
  900. #ifndef __IEnumPStoreProviders_FWD_DEFINED__
  901. #define __IEnumPStoreProviders_FWD_DEFINED__
  902. typedef interface IEnumPStoreProviders IEnumPStoreProviders;
  903. #endif /* __IEnumPStoreProviders_FWD_DEFINED__ */
  904. #ifndef __IPStore_FWD_DEFINED__
  905. #define __IPStore_FWD_DEFINED__
  906. typedef interface IPStore IPStore;
  907. #endif /* __IPStore_FWD_DEFINED__ */
  908. typedef GUID PST_PROVIDERID;
  909. BOOL DemandLoadPStoreC();
  910. LOADER_FUNCTION( HRESULT, PStoreCreateInstance,
  911. (IPStore __RPC_FAR *__RPC_FAR *ppProvider, PST_PROVIDERID __RPC_FAR *pProviderID, void __RPC_FAR *pReserved, DWORD dwFlags),
  912. (ppProvider, pProviderID, pReserved, dwFlags),
  913. E_FAIL, PStoreC)
  914. #define PStoreCreateInstance VAR_PStoreCreateInstance
  915. /////////////////////////////////////
  916. // RICHED32.DLL
  917. // note: special case as we don't use any riched functions but need to LoadLibrary it.
  918. BOOL DemandLoadRichEdit();
  919. /////////////////////////////////////
  920. // RAS.DLL
  921. #include <ras.h>
  922. #include <raserror.h>
  923. extern BOOL DemandLoadRAS(void);
  924. LOADER_FUNCTION( DWORD, RasEnumEntriesA,
  925. (LPSTR reserved, LPSTR lpszPhoneBook, LPRASENTRYNAMEA lpEntry, LPDWORD lpcb, LPDWORD lpcEntries),
  926. (reserved, lpszPhoneBook, lpEntry, lpcb, lpcEntries),
  927. ERROR_FILE_NOT_FOUND, RAS)
  928. #define RasEnumEntriesA VAR_RasEnumEntriesA
  929. LOADER_FUNCTION( DWORD, RasEditPhonebookEntryA,
  930. (HWND hwnd, LPSTR lpszPhoneBook, LPSTR lpszEntryName),
  931. (hwnd, lpszPhoneBook, lpszEntryName),
  932. ERROR_FILE_NOT_FOUND, RAS)
  933. #define RasEditPhonebookEntryA VAR_RasEditPhonebookEntryA
  934. LOADER_FUNCTION( DWORD, RasCreatePhonebookEntryA,
  935. (HWND hwnd, LPSTR lpszPhoneBook),
  936. (hwnd, lpszPhoneBook),
  937. ERROR_FILE_NOT_FOUND, RAS)
  938. #define RasCreatePhonebookEntryA VAR_RasCreatePhonebookEntryA
  939. /////////////////////////////////////
  940. // ADVAPI32.DLL
  941. #ifndef ALGIDDEF
  942. #define ALGIDDEF
  943. typedef unsigned int ALG_ID;
  944. #endif
  945. typedef ULONG_PTR HCRYPTKEY;
  946. BOOL DemandLoadAdvApi32(void);
  947. LOADER_FUNCTION( BOOL, CryptAcquireContextW,
  948. (HCRYPTPROV *phProv, LPCWSTR pszContainer, LPCWSTR pszProvider, DWORD dwProvType, DWORD dwFlags),
  949. (phProv, pszContainer, pszProvider, dwProvType, dwFlags),
  950. FALSE, AdvApi32)
  951. #define CryptAcquireContextW VAR_CryptAcquireContextW
  952. LOADER_FUNCTION( BOOL, CryptContextAddRef,
  953. (HCRYPTPROV hProv, DWORD * pdwReserved, DWORD dwFlags),
  954. (hProv, pdwReserved, dwFlags),
  955. FALSE, AdvApi32)
  956. #define CryptContextAddRef VAR_CryptContextAddRef
  957. LOADER_FUNCTION( BOOL, CryptDuplicateKey,
  958. (HCRYPTKEY hkey, DWORD * pdwReserved, DWORD dwFlags, HCRYPTKEY * phKey),
  959. (hkey, pdwReserved, dwFlags, phKey),
  960. FALSE, AdvApi32)
  961. #define CryptDuplicateKey VAR_CryptDuplicateKey
  962. BOOL MY_CryptContextAddRef(HCRYPTPROV hProv, DWORD * pdwReserved, DWORD dwFlags);
  963. BOOL MY_CryptDuplicateKey(HCRYPTKEY hkey, DWORD * pdwReserved, DWORD dwFlags, HCRYPTKEY * phKey);
  964. HINSTANCE DemandLoadShlWapi(void);
  965. /////////////////////////////////////
  966. // CRYPTUI.DLL
  967. #ifndef _CRYPTUI_YST
  968. #define _CRYPTUI_YST
  969. typedef struct _CRYPTUI_CERT_MGR_STRUCT
  970. {
  971. DWORD dwSize; // REQUIRED
  972. HWND hwndParent; // OPTIONAL
  973. DWORD dwFlags; // OPTIONAL
  974. LPCWSTR pwszTitle; // OPTIONAL
  975. LPCSTR pszInitUsageOID; // OPTIONAL
  976. }CRYPTUI_CERT_MGR_STRUCT, *PCRYPTUI_CERT_MGR_STRUCT;
  977. typedef const CRYPTUI_CERT_MGR_STRUCT *PCCRYPTUI_CERT_MGR_STRUCT;
  978. #endif
  979. BOOL DemandLoadCryptUI();
  980. LOADER_FUNCTION(BOOL, CryptUIDlgCertMgr,
  981. (PCCRYPTUI_CERT_MGR_STRUCT pCryptUICertMgr),
  982. (pCryptUICertMgr),
  983. 0, CryptUI)
  984. #define CryptUIDlgCertMgr VAR_CryptUIDlgCertMgr
  985. /////////////////////////////////////
  986. // MSI.DLL
  987. // Windows Installer (DARWIN) - Used primarily for speller
  988. #include <msi.h>
  989. BOOL DemandLoadMSI();
  990. LOADER_FUNCTION(UINT, MsiEnumComponentQualifiersA,
  991. (LPCSTR szComponent, DWORD iIndex, LPSTR lpQualifierBuf, DWORD *pcchQualifierBuf, LPSTR lpApplicationDataBuf, DWORD *pcchApplicationDataBuf),
  992. ( szComponent, iIndex, lpQualifierBuf, pcchQualifierBuf, lpApplicationDataBuf, pcchApplicationDataBuf),
  993. ERROR_UNKNOWN_COMPONENT, MSI)
  994. #define MsiEnumComponentQualifiersA VAR_MsiEnumComponentQualifiersA
  995. LOADER_FUNCTION(UINT, MsiProvideQualifiedComponentA,
  996. (LPCSTR szCategory, LPCSTR szQualifier, DWORD dwInstallMode, LPSTR lpPathBuf, DWORD *pcchPathBuf),
  997. ( szCategory, szQualifier, dwInstallMode, lpPathBuf, pcchPathBuf),
  998. ERROR_UNKNOWN_COMPONENT, MSI)
  999. #define MsiProvideQualifiedComponentA VAR_MsiProvideQualifiedComponentA
  1000. LOADER_FUNCTION(INSTALLSTATE, MsiLocateComponentA,
  1001. (LPCSTR szComponent, LPSTR lpPathBuf, DWORD *pcchBuf),
  1002. ( szComponent, lpPathBuf, pcchBuf),
  1003. INSTALLSTATE_UNKNOWN, MSI)
  1004. #define MsiLocateComponentA VAR_MsiLocateComponentA
  1005. LOADER_FUNCTION(INSTALLUILEVEL, MsiSetInternalUI,
  1006. (INSTALLUILEVEL dwUILevel, HWND *phwnd),
  1007. ( dwUILevel, phwnd),
  1008. INSTALLUILEVEL_NOCHANGE, MSI)
  1009. #define MsiSetInternalUI VAR_MsiSetInternalUI