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.

650 lines
24 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. #if _MSC_VER > 1000
  12. #pragma once
  13. #endif
  14. #ifndef __DEMAND_H
  15. #define __DEMAND_H
  16. #ifndef MAC
  17. //
  18. // IF YOU #INCLUDE A FILE HERE YOU PROBABLY ARE CONFUSED.
  19. // THIS FILE IS INCLUDED BY LOTS OF PEOPLE. THINK THRICE
  20. // BEFORE #INCLUDING *ANYTHING* HERE. MAKE GOOD USE
  21. // OF FORWARD REFS INSTEAD.
  22. //
  23. #ifdef IMPLEMENT_LOADER_FUNCTIONS
  24. #define USE_CRITSEC
  25. #define LOADER_FUNCTION(ret, name, args1, args2, err, dll) \
  26. typedef ret (WINAPI * TYP_##name) args1; \
  27. extern TYP_##name VAR_##name; \
  28. ret WINAPI LOADER_##name args1 \
  29. { \
  30. DemandLoad##dll(); \
  31. if (VAR_##name == LOADER_##name) return err; \
  32. return VAR_##name args2; \
  33. } \
  34. TYP_##name VAR_##name = LOADER_##name;
  35. #define LOADER_FUNCTION_VOID(ret, name, args1, args2, dll) \
  36. typedef ret (WINAPI * TYP_##name) args1; \
  37. extern TYP_##name VAR_##name; \
  38. ret WINAPI LOADER_##name args1 \
  39. { \
  40. DemandLoad##dll(); \
  41. if (VAR_##name == LOADER_##name) return; \
  42. VAR_##name args2; \
  43. return; \
  44. } \
  45. TYP_##name VAR_##name = LOADER_##name;
  46. #if 0
  47. // my 1st attempt
  48. #define DemandLoadDLL_GENERATOR(fnsuffix, dllname, handle, procaddrlist) \
  49. BOOL DemandLoad##fnsuffix() \
  50. { \
  51. BOOL fRet = TRUE; \
  52. \
  53. Assert(fInit); \
  54. EnterCriticalSection(&cs); \
  55. \
  56. if (0 == handle) \
  57. { \
  58. handle = LoadLibrary(#dllname); \
  59. \
  60. if (0 == handle) \
  61. fRet = FALSE; \
  62. else \
  63. { \
  64. procaddrlist \
  65. } \
  66. } \
  67. \
  68. LeaveCriticalSection(&cs); \
  69. return fRet; \
  70. }
  71. #endif
  72. #else // !IMPLEMENT_LOADER_FUNCTIONS
  73. #define LOADER_FUNCTION(ret, name, args1, args2, err, dll) \
  74. typedef ret (WINAPI * TYP_##name) args1; \
  75. extern TYP_##name VAR_##name;
  76. #define LOADER_FUNCTION_VOID(ret, name, args1, args2, dll) \
  77. typedef ret (WINAPI * TYP_##name) args1; \
  78. extern TYP_##name VAR_##name;
  79. #if 0
  80. #define DemandLoadDLL_GENERATOR(fnsuffix, dllname, handle, procaddrlist) \
  81. BOOL DemandLoad##fnsuffix(void);
  82. #endif
  83. #endif // IMPLEMENT_LOADER_FUNCTIONS
  84. void InitDemandLoadedLibs();
  85. void FreeDemandLoadedLibs();
  86. /////////////////////////////////////
  87. // CRYPT32.DLL
  88. BOOL DemandLoadCrypt32(void);
  89. typedef void *HCERTSTORE;
  90. typedef const struct _CERT_CONTEXT *PCCERT_CONTEXT;
  91. typedef ULONG_PTR HCRYPTPROV;
  92. typedef struct _CERT_INFO *PCERT_INFO;
  93. LOADER_FUNCTION( BOOL, CertFreeCertificateContext,
  94. (PCCERT_CONTEXT pCertContext),
  95. (pCertContext),
  96. FALSE, Crypt32)
  97. #define CertFreeCertificateContext VAR_CertFreeCertificateContext
  98. LOADER_FUNCTION( PCCERT_CONTEXT, CertDuplicateCertificateContext,
  99. (PCCERT_CONTEXT pCertContext),
  100. (pCertContext), NULL, Crypt32)
  101. #define CertDuplicateCertificateContext VAR_CertDuplicateCertificateContext
  102. LOADER_FUNCTION( PCCERT_CONTEXT, CertFindCertificateInStore,
  103. (HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void *pvFindPara, PCCERT_CONTEXT pPrevCertContext),
  104. (hCertStore, dwCertEncodingType, dwFindFlags, dwFindType, pvFindPara, pPrevCertContext),
  105. NULL, Crypt32)
  106. #define CertFindCertificateInStore VAR_CertFindCertificateInStore
  107. LOADER_FUNCTION( BOOL, CertCloseStore,
  108. (HCERTSTORE hCertStore, DWORD dwFlags),
  109. (hCertStore, dwFlags),
  110. FALSE, Crypt32)
  111. #define CertCloseStore VAR_CertCloseStore
  112. LOADER_FUNCTION( BOOL, CertDeleteCertificateFromStore,
  113. (PCCERT_CONTEXT pccert),
  114. (pccert),
  115. FALSE, Crypt32)
  116. #define CertDeleteCertificateFromStore VAR_CertDeleteCertificateFromStore
  117. LOADER_FUNCTION( HCERTSTORE, CertOpenStore,
  118. (LPCSTR lpszStoreProvider, DWORD dwEncodingType, HCRYPTPROV hCryptProv,
  119. DWORD dwFlags, const void *pvPara),
  120. (lpszStoreProvider, dwEncodingType, hCryptProv, dwFlags, pvPara),
  121. NULL, Crypt32)
  122. #define CertOpenStore VAR_CertOpenStore
  123. LOADER_FUNCTION( BOOL, CertGetCertificateContextProperty,
  124. (PCCERT_CONTEXT pCertContext, DWORD dwPropId, void *pvData, DWORD *pcbData),
  125. (pCertContext, dwPropId, pvData, pcbData),
  126. FALSE, Crypt32)
  127. #define CertGetCertificateContextProperty VAR_CertGetCertificateContextProperty
  128. LOADER_FUNCTION( BOOL, CertCompareCertificate,
  129. (DWORD dwCertEncodingType, PCERT_INFO pCertId1, PCERT_INFO pCertId2),
  130. (dwCertEncodingType, pCertId1, pCertId2),
  131. FALSE, Crypt32)
  132. #define CertCompareCertificate VAR_CertCompareCertificate
  133. LOADER_FUNCTION( PCCERT_CONTEXT, CertEnumCertificatesInStore,
  134. (HCERTSTORE hCertStore, PCCERT_CONTEXT pPrevCertContext),
  135. (hCertStore, pPrevCertContext),
  136. NULL, Crypt32)
  137. #define CertEnumCertificatesInStore VAR_CertEnumCertificatesInStore
  138. LOADER_FUNCTION( BOOL, CryptDecodeObject,
  139. (DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE * pbEncoded,
  140. DWORD cbEncoded, DWORD dwFlags, void * pvStructInfo, DWORD * pcbStructInfo),
  141. (dwCertEncodingType, lpszStructType, pbEncoded, cbEncoded, dwFlags,
  142. pvStructInfo, pcbStructInfo),
  143. FALSE, Crypt32)
  144. #define CryptDecodeObject VAR_CryptDecodeObject
  145. LOADER_FUNCTION( PCERT_EXTENSION, CertFindExtension,
  146. (LPCSTR pszObjId, DWORD cExtensions, CERT_EXTENSION rgExtensions[]),
  147. (pszObjId, cExtensions, rgExtensions),
  148. NULL, Crypt32)
  149. #define CertFindExtension VAR_CertFindExtension
  150. LOADER_FUNCTION( BOOL, CryptFormatObject,
  151. (DWORD dwCertEncodingType, DWORD dwFormatType, DWORD dwFormatStrType,
  152. void * pFormatStruct, LPCSTR lpszStructType, const BYTE * pbEncoded,
  153. DWORD cbEncoded, void * pbFormat, DWORD * pcbFormat),
  154. (dwCertEncodingType, dwFormatType, dwFormatStrType, pFormatStruct,
  155. lpszStructType, pbEncoded, cbEncoded, pbFormat, pcbFormat),
  156. FALSE, Crypt32)
  157. #define CryptFormatObject VAR_CryptFormatObject
  158. LOADER_FUNCTION( DWORD, CertNameToStrW,
  159. (DWORD dwCertEncodingType, PCERT_NAME_BLOB pName, DWORD dwStrType,
  160. LPWSTR psz, DWORD csz),
  161. (dwCertEncodingType, pName, dwStrType, psz, csz),
  162. 0, Crypt32)
  163. #define CertNameToStrW VAR_CertNameToStrW
  164. LOADER_FUNCTION( BOOL, CertStrToNameA,
  165. (DWORD dwCertEncodingType, LPCSTR pszX500, DWORD dwStrType, void *pvReserved,
  166. BYTE *pbEncoded, DWORD *pcbEncoded, LPCSTR *ppszError),
  167. (dwCertEncodingType, pszX500, dwStrType, pvReserved,
  168. pbEncoded, pcbEncoded, ppszError),
  169. FALSE, Crypt32)
  170. #define CertStrToNameA VAR_CertStrToNameA
  171. LOADER_FUNCTION( DWORD, CertRDNValueToStrW,
  172. (DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue, LPWSTR psz, DWORD csz),
  173. (dwValueType, pValue, psz, csz),
  174. 0, Crypt32)
  175. #define CertRDNValueToStrW VAR_CertRDNValueToStrW
  176. LOADER_FUNCTION( PCERT_RDN_ATTR, CertFindRDNAttr,
  177. (LPCSTR pszObjId, PCERT_NAME_INFO pName),
  178. (pszObjId, pName),
  179. NULL, Crypt32)
  180. #define CertFindRDNAttr VAR_CertFindRDNAttr
  181. LOADER_FUNCTION( BOOL, CryptRegisterOIDFunction,
  182. (DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID, LPCWSTR pwszDll,
  183. LPCSTR pszOverrideFuncName),
  184. (dwEncodingType, pszFuncName, pszOID, pwszDll, pszOverrideFuncName),
  185. FALSE, Crypt32)
  186. #define CryptRegisterOIDFunction VAR_CryptRegisterOIDFunction
  187. LOADER_FUNCTION( BOOL, CryptUnregisterOIDFunction,
  188. (DWORD dwEncodingType, LPCSTR pszFuncName, LPCSTR pszOID),
  189. (dwEncodingType, pszFuncName, pszOID),
  190. FALSE, Crypt32)
  191. #define CryptUnregisterOIDFunction VAR_CryptUnregisterOIDFunction
  192. LOADER_FUNCTION( BOOL, CertSetCertificateContextProperty,
  193. (PCCERT_CONTEXT pCertContext, DWORD dwPropId, DWORD dwFlags, const void * pvData),
  194. (pCertContext, dwPropId, dwFlags, pvData),
  195. FALSE, Crypt32)
  196. #define CertSetCertificateContextProperty VAR_CertSetCertificateContextProperty
  197. LOADER_FUNCTION( BOOL, CertVerifyCTLUsage,
  198. (DWORD dwEncodingType, DWORD dwSubjectType, void *pvSubject,
  199. PCTL_USAGE pSubjectUsage, DWORD dwFlags,
  200. PCTL_VERIFY_USAGE_PARA pVerifyUsagePara,
  201. PCTL_VERIFY_USAGE_STATUS pVerifyUsageStatus),
  202. (dwEncodingType, dwSubjectType, pvSubject, pSubjectUsage, dwFlags,
  203. pVerifyUsagePara, pVerifyUsageStatus),
  204. 0, Crypt32)
  205. #define CertVerifyCTLUsage VAR_CertVerifyCTLUsage
  206. LOADER_FUNCTION( PCCERT_CONTEXT, CertGetIssuerCertificateFromStore,
  207. (HCERTSTORE hCertStore, PCCERT_CONTEXT pSubjectContext,
  208. PCCERT_CONTEXT pPrevIssuerContext, DWORD *pdwFlags),
  209. (hCertStore, pSubjectContext, pPrevIssuerContext, pdwFlags),
  210. NULL, Crypt32)
  211. #define CertGetIssuerCertificateFromStore VAR_CertGetIssuerCertificateFromStore
  212. LOADER_FUNCTION( BOOL, CertFreeCTLContext,
  213. (PCCTL_CONTEXT pCtlContext),
  214. (pCtlContext),
  215. FALSE, Crypt32)
  216. #define CertFreeCTLContext VAR_CertFreeCTLContext
  217. LOADER_FUNCTION( BOOL, CertAddEncodedCTLToStore,
  218. (HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType, const BYTE *pbCtlEncoded,
  219. DWORD cbCtlEncoded, DWORD dwAddDisposition, PCCTL_CONTEXT *ppCtlContext),
  220. (hCertStore, dwMsgAndCertEncodingType, pbCtlEncoded, cbCtlEncoded,
  221. dwAddDisposition, ppCtlContext),
  222. FALSE, Crypt32)
  223. #define CertAddEncodedCTLToStore VAR_CertAddEncodedCTLToStore
  224. LOADER_FUNCTION( BOOL, CryptMsgEncodeAndSignCTL,
  225. (DWORD dwMsgEncodingType, PCTL_INFO pCtlInfo, PCMSG_SIGNED_ENCODE_INFO pSignInfo,
  226. DWORD dwFlags, BYTE *pbEncoded, DWORD *pcbEncoded),
  227. (dwMsgEncodingType, pCtlInfo, pSignInfo, dwFlags, pbEncoded, pcbEncoded),
  228. FALSE, Crypt32)
  229. #define CryptMsgEncodeAndSignCTL VAR_CryptMsgEncodeAndSignCTL
  230. LOADER_FUNCTION( PCCTL_CONTEXT, CertFindCTLInStore,
  231. (HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType, DWORD dwFindFlags,
  232. DWORD dwFindType, const void *pvFindPara, PCCTL_CONTEXT pPrevCtlContext),
  233. (hCertStore, dwMsgAndCertEncodingType, dwFindFlags,
  234. dwFindType, pvFindPara, pPrevCtlContext),
  235. NULL, Crypt32)
  236. #define CertFindCTLInStore VAR_CertFindCTLInStore
  237. LOADER_FUNCTION( PCCTL_CONTEXT, CryptSignAndEncodeCertificate,
  238. (HCRYPTPROV hCryptProv, DWORD dwKeySpec, DWORD dwCertEncodingType,
  239. LPCSTR lpszStructType, const void *pvStructInfo,
  240. PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
  241. const void *pvHashAuxInfo, PBYTE pbEncoded, DWORD *pcbEncoded),
  242. (hCryptProv, dwKeySpec, dwCertEncodingType, lpszStructType,
  243. pvStructInfo, pSignatureAlgorithm, pvHashAuxInfo, pbEncoded,
  244. pcbEncoded),
  245. NULL, Crypt32)
  246. #define CryptSignAndEncodeCertificate VAR_CryptSignAndEncodeCertificate
  247. LOADER_FUNCTION( BOOL, CryptEncodeObject,
  248. (DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo,
  249. BYTE *pbEncoded, DWORD *pcbEncoded),
  250. (dwCertEncodingType, lpszStructType, pvStructInfo, pbEncoded,pcbEncoded),
  251. FALSE, Crypt32)
  252. #define CryptEncodeObject VAR_CryptEncodeObject
  253. LOADER_FUNCTION( BOOL, CryptExportPublicKeyInfo,
  254. (HCRYPTPROV hCryptProv, DWORD dwKeySpec, DWORD dwCertEncodingType,
  255. PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo),
  256. (hCryptProv, dwKeySpec, dwCertEncodingType, pInfo, pcbInfo),
  257. FALSE, Crypt32)
  258. #define CryptExportPublicKeyInfo VAR_CryptExportPublicKeyInfo
  259. LOADER_FUNCTION( HCERTSTORE, CertDuplicateStore,
  260. (HCERTSTORE hCertStore),
  261. (hCertStore),
  262. NULL, Crypt32)
  263. #define CertDuplicateStore VAR_CertDuplicateStore
  264. LOADER_FUNCTION( BOOL, CertAddEncodedCertificateToStore,
  265. (HCERTSTORE hCertStore, DWORD dwCertEncodingType, const BYTE *pbCertEncoded,
  266. DWORD cbCertEncoded, DWORD dwAddDisposition, PCCERT_CONTEXT *ppCertContext),
  267. (hCertStore, dwCertEncodingType, pbCertEncoded,
  268. cbCertEncoded, dwAddDisposition, ppCertContext),
  269. FALSE, Crypt32)
  270. #define CertAddEncodedCertificateToStore VAR_CertAddEncodedCertificateToStore
  271. LOADER_FUNCTION( LONG, CertVerifyTimeValidity,
  272. (LPFILETIME pTimeToVerify, PCERT_INFO pCertInfo),
  273. (pTimeToVerify, pCertInfo),
  274. +1, Crypt32) // Return AFTER by default
  275. #define CertVerifyTimeValidity VAR_CertVerifyTimeValidity
  276. LOADER_FUNCTION( PCTL_ENTRY, CertFindSubjectInCTL,
  277. (DWORD dwEncodingType, DWORD dwSubjectType, void *pvSubject,
  278. PCCTL_CONTEXT pCtlContext, DWORD dwFlags),
  279. (dwEncodingType, dwSubjectType, pvSubject, pCtlContext, dwFlags),
  280. NULL, Crypt32)
  281. #define CertFindSubjectInCTL VAR_CertFindSubjectInCTL
  282. LOADER_FUNCTION( BOOL, CertVerifySubjectCertificateContext,
  283. (PCCERT_CONTEXT pSubject, PCCERT_CONTEXT pIssuer, DWORD *pdwFlags),
  284. (pSubject, pIssuer, pdwFlags),
  285. FALSE, Crypt32)
  286. #define CertVerifySubjectCertificateContext VAR_CertVerifySubjectCertificateContext
  287. LOADER_FUNCTION( BOOL, CertGetEnhancedKeyUsage,
  288. (PCCERT_CONTEXT pCertContext, DWORD dwFlags, PCERT_ENHKEY_USAGE pUsage,
  289. DWORD *pcbUsage),
  290. (pCertContext, dwFlags, pUsage, pcbUsage),
  291. FALSE, Crypt32)
  292. #define CertGetEnhancedKeyUsage VAR_CertGetEnhancedKeyUsage
  293. LOADER_FUNCTION( BOOL, CryptDecodeObjectEx,
  294. (DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo),
  295. (dwCertEncodingType, lpszStructType, pbEncoded, cbEncoded, dwFlags, pDecodePara, pvStructInfo, pcbStructInfo),
  296. FALSE, Crypt32)
  297. #define CryptDecodeObjectEx VAR_CryptDecodeObjectEx
  298. LOADER_FUNCTION( BOOL, CryptEncodeObjectEx,
  299. (DWORD dwCertEncodingType, LPCSTR lpszStructType, const void * pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, void * pbEncoded, DWORD * pcbEncoded),
  300. (dwCertEncodingType, lpszStructType, pvStructInfo, dwFlags, pEncodePara, pbEncoded, pcbEncoded),
  301. FALSE, Crypt32)
  302. #define CryptEncodeObjectEx VAR_CryptEncodeObjectEx
  303. LOADER_FUNCTION( BOOL, CertGetCertificateChain,
  304. (
  305. HCERTCHAINENGINE hChainEngine,
  306. PCCERT_CONTEXT pCertContext,
  307. LPFILETIME pTime,
  308. HCERTSTORE hAdditionalStore,
  309. PCERT_CHAIN_PARA pChainPara,
  310. DWORD dwFlags,
  311. LPVOID pvReserved,
  312. PCCERT_CHAIN_CONTEXT* ppChainContext
  313. ),
  314. (
  315. hChainEngine,
  316. pCertContext,
  317. pTime,
  318. hAdditionalStore,
  319. pChainPara,
  320. dwFlags,
  321. pvReserved,
  322. ppChainContext
  323. ),
  324. FALSE, Crypt32)
  325. #define CertGetCertificateChain VAR_CertGetCertificateChain
  326. LOADER_FUNCTION( BOOL, CertFreeCertificateChain,
  327. (
  328. PCCERT_CHAIN_CONTEXT pChainContext
  329. ),
  330. (
  331. pChainContext
  332. ),
  333. FALSE, Crypt32)
  334. #define CertFreeCertificateChain VAR_CertFreeCertificateChain
  335. LOADER_FUNCTION( PCCERT_CHAIN_CONTEXT, CertDuplicateCertificateChain,
  336. (
  337. PCCERT_CHAIN_CONTEXT pChainContext
  338. ),
  339. (
  340. pChainContext
  341. ),
  342. NULL, Crypt32)
  343. #define CertDuplicateCertificateChain VAR_CertDuplicateCertificateChain
  344. LOADER_FUNCTION( BOOL, CertAddStoreToCollection,
  345. (
  346. HCERTSTORE hCollectionStore,
  347. HCERTSTORE hSiblingStore,
  348. DWORD dwUpdateFlags,
  349. DWORD dwPriority
  350. ),
  351. (
  352. hCollectionStore,
  353. hSiblingStore,
  354. dwUpdateFlags,
  355. dwPriority
  356. ),
  357. FALSE, Crypt32)
  358. #define CertAddStoreToCollection VAR_CertAddStoreToCollection
  359. LOADER_FUNCTION( BOOL, CertAddCertificateContextToStore,
  360. (
  361. HCERTSTORE hCertStore,
  362. PCCERT_CONTEXT pCertContext,
  363. DWORD dwAddDisposition,
  364. PCCERT_CONTEXT *ppStoreContext
  365. ),
  366. (
  367. hCertStore,
  368. pCertContext,
  369. dwAddDisposition,
  370. ppStoreContext
  371. ),
  372. FALSE, Crypt32)
  373. #define CertAddCertificateContextToStore VAR_CertAddCertificateContextToStore
  374. LOADER_FUNCTION( BOOL, CertControlStore,
  375. (
  376. HCERTSTORE hCertStore,
  377. DWORD dwFlags,
  378. DWORD dwCtrlType,
  379. void const *pvCtrlPara
  380. ),
  381. (
  382. hCertStore,
  383. dwFlags,
  384. dwCtrlType,
  385. pvCtrlPara
  386. ),
  387. FALSE, Crypt32)
  388. #define CertControlStore VAR_CertControlStore
  389. #if 0
  390. LOADER_FUNCTION( BOOL, ,
  391. (),
  392. (),
  393. FALSE, Crypt32)
  394. #define X VAR_
  395. #endif // 0
  396. /////////////////////////////////////
  397. // CRYPTUI.DLL
  398. BOOL DemandLoadCryptUI(void);
  399. BOOL CryptUIAvailable(void);
  400. #ifdef OLD_STUFF
  401. typedef const struct _CERT_CONTEXT *PCCERT_CONTEXT;
  402. typedef const struct tagCRYPTUI_VIEWCERTIFICATE_STRUCTW *PCCRYPTUI_VIEWCERTIFICATE_STRUCTW;
  403. typedef const struct tagCRYPTUI_VIEWCERTIFICATE_STRUCTA *PCCRYPTUI_VIEWCERTIFICATE_STRUCTA;
  404. typedef const struct tagCRYPTUI_VIEWCERTIFICATEPROPERTIES_STRUCTW *PCCRYPTUI_VIEWCERTIFICATEPROPERTIES_STRUCTW;
  405. typedef const struct tagCRYPTUI_VIEWCERTIFICATEPROPERTIES_STRUCTA *PCCRYPTUI_VIEWCERTIFICATEPROPERTIES_STRUCTA;
  406. typedef const struct tagCRYPTUI_SELECTCERTIFICATE_STRUCTW *PCCRYPTUI_SELECTCERTIFICATE_STRUCTW;
  407. typedef const struct tagCRYPTUI_SELECTCERTIFICATE_STRUCTA *PCCRYPTUI_SELECTCERTIFICATE_STRUCTA;
  408. #endif
  409. LOADER_FUNCTION(BOOL, CryptUIDlgViewCertificateW,
  410. (IN PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo, OUT BOOL *pfPropertiesChanged),
  411. (pCertViewInfo, pfPropertiesChanged),
  412. FALSE, CryptUI)
  413. #define CryptUIDlgViewCertificateW VAR_CryptUIDlgViewCertificateW
  414. LOADER_FUNCTION(BOOL, CryptUIDlgViewCertificateA,
  415. (IN PCCRYPTUI_VIEWCERTIFICATE_STRUCTA pCertViewInfo, OUT BOOL *pfPropertiesChanged),
  416. (pCertViewInfo, pfPropertiesChanged),
  417. FALSE, CryptUI)
  418. #define CryptUIDlgViewCertificateA VAR_CryptUIDlgViewCertificateA
  419. LOADER_FUNCTION(BOOL, CryptUIDlgViewCertificatePropertiesW,
  420. (IN PCCRYPTUI_VIEWCERTIFICATEPROPERTIES_STRUCTW pcsp, OUT BOOL *pfPropertiesChanged),
  421. (pcsp, pfPropertiesChanged),
  422. FALSE, CryptUI)
  423. #define CryptUIDlgViewCertificatePropertiesW VAR_CryptUIDlgViewCertificatePropertiesW
  424. LOADER_FUNCTION(BOOL, CryptUIDlgViewCertificatePropertiesA,
  425. (IN PCCRYPTUI_VIEWCERTIFICATEPROPERTIES_STRUCTA pcsp, OUT BOOL *pfPropertiesChanged),
  426. (pcsp, pfPropertiesChanged),
  427. FALSE, CryptUI)
  428. #define CryptUIDlgViewCertificatePropertiesA VAR_CryptUIDlgViewCertificatePropertiesA
  429. LOADER_FUNCTION(PCCERT_CONTEXT, CryptUIDlgSelectCertificateW,
  430. (IN PCCRYPTUI_SELECTCERTIFICATE_STRUCTW pcsc),
  431. (pcsc),
  432. NULL, CryptUI)
  433. #define CryptUIDlgSelectCertificateW VAR_CryptUIDlgSelectCertificateW
  434. LOADER_FUNCTION(PCCERT_CONTEXT, CryptUIDlgSelectCertificateA,
  435. (IN PCCRYPTUI_SELECTCERTIFICATE_STRUCTA pcsc),
  436. (pcsc),
  437. NULL, CryptUI)
  438. #define CryptUIDlgSelectCertificateA VAR_CryptUIDlgSelectCertificateA
  439. LOADER_FUNCTION( BOOL, CryptInstallDefaultContext,
  440. (HCRYPTPROV hCryptProv, DWORD dwDefaultType, const void *pvDefaultPara,
  441. DWORD dwFlags, void *pvReserved, HCRYPTDEFAULTCONTEXT *phDefaultContext),
  442. (hCryptProv, dwDefaultType, pvDefaultPara, dwFlags, pvReserved,
  443. phDefaultContext),
  444. FALSE, Crypt32)
  445. #define CryptInstallDefaultContext VAR_CryptInstallDefaultContext
  446. LOADER_FUNCTION( BOOL, CryptUninstallDefaultContext,
  447. (HCRYPTDEFAULTCONTEXT hDefaultContext, DWORD dwFlags, void *pvReserved),
  448. (hDefaultContext, dwFlags, pvReserved),
  449. FALSE, Crypt32)
  450. #define CryptUninstallDefaultContext VAR_CryptUninstallDefaultContext
  451. LOADER_FUNCTION( PCCERT_CONTEXT, CertGetSubjectCertificateFromStore,
  452. (HCERTSTORE hCertStore, DWORD dwCertEncodingType, PCERT_INFO pCertId),
  453. (hCertStore, dwCertEncodingType, pCertId),
  454. NULL, Crypt32)
  455. #define CertGetSubjectCertificateFromStore VAR_CertGetSubjectCertificateFromStore
  456. #if 0
  457. LOADER_FUNCTION( BOOL, ,
  458. (),
  459. (),
  460. FALSE, Crypt32)
  461. #define X VAR_
  462. #endif // 0
  463. /////////////////////////////////////
  464. // ADVAPI32.DLL
  465. #ifndef ALGIDDEF
  466. #define ALGIDDEF
  467. typedef unsigned int ALG_ID;
  468. #endif
  469. typedef ULONG_PTR HCRYPTKEY;
  470. BOOL DemandLoadAdvApi32(void);
  471. LOADER_FUNCTION( BOOL, CryptAcquireContextW,
  472. (HCRYPTPROV *phProv, LPCWSTR pszContainer, LPCWSTR pszProvider, DWORD dwProvType, DWORD dwFlags),
  473. (phProv, pszContainer, pszProvider, dwProvType, dwFlags),
  474. FALSE, AdvApi32)
  475. #define CryptAcquireContextW VAR_CryptAcquireContextW
  476. #if 0
  477. LOADER_FUNCTION( BOOL, CryptGetProvParam,
  478. (HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags),
  479. (hProv, dwParam, pbData, pdwDataLen, dwFlags),
  480. FALSE, AdvApi32)
  481. #define CryptGetProvParam VAR_CryptGetProvParam
  482. LOADER_FUNCTION( BOOL, CryptReleaseContext,
  483. (HCRYPTPROV hProv, DWORD dwFlags),
  484. (hProv, dwFlags),
  485. FALSE, AdvApi32)
  486. #define CryptReleaseContext VAR_CryptReleaseContext
  487. LOADER_FUNCTION( BOOL, CryptGenKey,
  488. (HCRYPTPROV hProv, ALG_ID Algid, DWORD dwFlags, HCRYPTKEY *phKey),
  489. (hProv, Algid, dwFlags, phKey),
  490. FALSE, AdvApi32)
  491. #define CryptGenKey VAR_CryptGenKey
  492. LOADER_FUNCTION( BOOL, CryptDestroyKey,
  493. (HCRYPTKEY hKey),
  494. (hKey),
  495. FALSE, AdvApi32)
  496. #define CryptDestroyKey VAR_CryptDestroyKey
  497. #endif // 0
  498. #ifndef WIN16
  499. /////////////////////////////////////
  500. // USER32.DLL
  501. BOOL DemandLoadUser32();
  502. LOADER_FUNCTION( LRESULT, SendDlgItemMessageW,
  503. (HWND hwnd, int idCtl, UINT msg, WPARAM wparam, LPARAM lparam),
  504. (hwnd, idCtl, msg, wparam, lparam),
  505. -1, User32)
  506. #define SendDlgItemMessageW VAR_SendDlgItemMessageW
  507. LOADER_FUNCTION( BOOL, SetDlgItemTextW,
  508. (HWND hwnd, int idCtl, LPCWSTR psz),
  509. (hwnd, idCtl, psz),
  510. FALSE, User32)
  511. #define SetDlgItemTextW VAR_SetDlgItemTextW
  512. LOADER_FUNCTION( UINT, GetDlgItemTextW,
  513. (HWND hwnd, int idCtl, LPWSTR psz, int nMax),
  514. (hwnd, idCtl, psz, nMax),
  515. FALSE, User32)
  516. #define GetDlgItemTextW VAR_GetDlgItemTextW
  517. LOADER_FUNCTION( int, LoadStringW,
  518. (HINSTANCE hinst, UINT idStr, LPWSTR rgwch, int cwch),
  519. (hinst, idStr, rgwch, cwch),
  520. 0, User32)
  521. #define LoadStringW VAR_LoadStringW
  522. LOADER_FUNCTION( DWORD, FormatMessageW,
  523. (DWORD dwFlags, LPCVOID pbSource, DWORD dwMessageId,
  524. DWORD dwLangId, LPWSTR lpBuffer, DWORD nSize, va_list * args),
  525. (dwFlags, pbSource, dwMessageId, dwLangId, lpBuffer, nSize, args),
  526. 0, User32)
  527. #define FormatMessageW VAR_FormatMessageW
  528. LOADER_FUNCTION( BOOL, WinHelpW,
  529. (HWND hWndMain, LPCWSTR szHelp, UINT uCommand, ULONG_PTR dwData),
  530. (hWndMain, szHelp, uCommand, dwData),
  531. FALSE, User32)
  532. #define WinHelpW VAR_WinHelpW
  533. #endif // !WIN16
  534. #else // MAC
  535. #define SendDlgItemMessageW MySendDlgItemMessageW
  536. #define SetDlgItemTextW MySetDlgItemTextW
  537. #define GetDlgItemTextW MyGetDlgItemTextW
  538. #define LoadStringW MyLoadStringW
  539. #define FormatMessageW MyFormatMessageW
  540. #define WinHelpW MyWinHelpW
  541. #define SendMessageW SendMessageA
  542. #undef CertOpenStore
  543. EXTERN_C WINCRYPT32API HCERTSTORE WINAPI MacCertOpenStore(LPCSTR lpszStoreProvider,
  544. DWORD dwEncodingType,
  545. HCRYPTPROV hCryptProv,
  546. DWORD dwFlags,
  547. const void *pvPara);
  548. #define CertOpenStore MacCertOpenStore
  549. #endif // !MAC
  550. #endif // include once