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.

2691 lines
66 KiB

  1. //+--------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. // Copyright (C) Microsoft Corporation, 1996 - 1999
  5. //
  6. // File: certlib.h
  7. //
  8. // Contents: Cert Server wrapper routines
  9. //
  10. //---------------------------------------------------------------------------
  11. #ifndef __CERTLIB_H__
  12. #define __CERTLIB_H__
  13. #include <wintrust.h> // for spc_xxxx
  14. #include <cryptui.h> // for CRYPTUI_CA_CONTEXT
  15. #include <setupapi.h> // for HINF
  16. #include <stdio.h> // for wprintf -- include before cs.h
  17. #include "cs.h" // for CSASSERT
  18. #include <xelib.h> // for CERTLIB_ALLOCATOR
  19. #include "csregstr.h" // for ENUM_CATYPES
  20. #include "csfile.h" // for __dwFILE__
  21. #include "csauto.h" // self cleaning pointers
  22. #ifndef CERTREQUEST_CLIENT_CERTREQ // moved to xelib.h
  23. #define SECURITY_WIN32
  24. #include <security.h> // for EXTENDED_NAME_FORMAT
  25. #define DWORDROUND(cb) (((cb) + (sizeof(DWORD) - 1)) & ~(sizeof(DWORD) - 1))
  26. #define POINTERROUND(cb) (((cb) + (sizeof(VOID *) - 1)) & ~(sizeof(VOID *) - 1))
  27. #endif
  28. #define myCASIGN_KEY_USAGE \
  29. (CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_DIGITAL_SIGNATURE_KEY_USAGE | \
  30. CERT_CRL_SIGN_KEY_USAGE)
  31. // "flags" property values for DS CA object
  32. // CN=CAName,CN=Certification Authorities
  33. #define CA_SERVER_TYPE_UNKNOWN 0x0
  34. #define CA_SERVER_TYPE_SERVER 0x1
  35. #define CA_SERVER_TYPE_ADVANCEDSERVER 0x2
  36. #define _16BITMASK ((1 << 16) - 1)
  37. #define MAKECANAMEID(iCert, iKey) (((iKey) << 16) | (iCert))
  38. #define CANAMEIDTOIKEY(NameId) ((NameId) >> 16)
  39. #define CANAMEIDTOICERT(NameId) (_16BITMASK & (NameId))
  40. #define MAKECROSSCAVERSION(iSource, iTarget) (((iSource) << 16) | (iTarget))
  41. #define CROSSCAVERSIONTOSOURCE(CrossCAVersion) ((CrossCAVersion) >> 16)
  42. #define CROSSCAVERSIONTOTARGET(CrossCAVersion) (_16BITMASK & (CrossCAVersion))
  43. #define cwcHRESULTSTRING 40
  44. #define cwcDWORDSPRINTF (1 + 10 + 1) // DWORD "%d" w/sign & '\0'
  45. #define cwcULONG_INTEGERSPRINTF 2*cwcDWORDSPRINTF
  46. #define GETCERT_CAXCHGCERT TRUE
  47. #define GETCERT_CASIGCERT FALSE
  48. #define GETCERT_CHAIN 0x80000000 // internal use only
  49. #define GETCERT_CRLS 0x00800000 // internal use only
  50. #define GETCERT_FILEVERSION 0x66696c65 // "file"
  51. #define GETCERT_PRODUCTVERSION 0x70726f64 // "prod"
  52. #define GETCERT_POLICYVERSION 0x706f6c69 // "poli"
  53. #define GETCERT_CANAME 0x6e616d65 // "name"
  54. #define GETCERT_SANITIZEDCANAME 0x73616e69 // "sani"
  55. #define GETCERT_SHAREDFOLDER 0x73686172 // "shar"
  56. #define GETCERT_ERRORTEXT1 0x65727231 // "err1"
  57. #define GETCERT_ERRORTEXT2 0x65727232 // "err2"
  58. #define GETCERT_CATYPE 0x74797065 // "type"
  59. #define GETCERT_CAINFO 0x696e666f // "info"
  60. #define GETCERT_PARENTCONFIG 0x70617265 // "pare"
  61. #define GETCERT_CURRENTCRL 0x6363726c // "ccrl"
  62. #define GETCERT_CACERTBYINDEX 0x63740000 // "ct??" + 0 based index
  63. #define GETCERT_CACERTSTATEBYINDEX 0x73740000 // "st??" + 0 based index
  64. #define GETCERT_CRLBYINDEX 0x636c0000 // "cl??" + 0 based index
  65. #define GETCERT_CRLSTATEBYINDEX 0x736c0000 // "sl??" + 0 based index
  66. #define GETCERT_EXITVERSIONBYINDEX 0x65780000 // "ex??" + 0 based index
  67. #define GETCERT_BYINDEXMASK 0x7f7f0000 // mask for fetch by index
  68. #define GETCERT_INDEXVALUEMASK 0x0000ffff // mask for index extraction
  69. #define GETCERT_VERSIONMASK 0x7f7f7f7f // mask for above
  70. #define CSREG_UPGRADE 0x00000001
  71. #define CSREG_APPEND 0x00000002
  72. #define CSREG_REPLACE 0x00000004
  73. #define CSREG_MERGE 0x00000008
  74. #define wszCERTENROLLSHARENAME L"CertEnroll"
  75. #define wszCERTENROLLSHAREPATH L"CertSrv\\CertEnroll"
  76. #define wszCERTCONFIGSHARENAME L"CertConfig"
  77. #define CB_IPV4ADDRESS 4
  78. #define CB_IPV6ADDRESS 16
  79. // Constants chosen to avoid DWORD overflow:
  80. #define CVT_WEEKS (7 * CVT_DAYS)
  81. #define CVT_DAYS (24 * CVT_HOURS)
  82. #define CVT_HOURS (60 * CVT_MINUTES)
  83. #define CVT_MINUTES (60 * CVT_SECONDS)
  84. #define CVT_SECONDS (1)
  85. #define CVT_BASE (1000 * 1000 * 10)
  86. #define chLBRACKET '['
  87. #define chRBRACKET ']'
  88. #define szLBRACKET "["
  89. #define szRBRACKET "]"
  90. #define wcLBRACKET L'['
  91. #define wcRBRACKET L']'
  92. #define wszLBRACKET L"["
  93. #define wszRBRACKET L"]"
  94. #define chLBRACE '{'
  95. #define chRBRACE '}'
  96. #define szLBRACE "{"
  97. #define szRBRACE "}"
  98. #define wcLBRACE L'{'
  99. #define wcRBRACE L'}'
  100. #define wszLBRACE L"{"
  101. #define wszRBRACE L"}"
  102. #define chLPAREN '('
  103. #define chRPAREN ')'
  104. #define szLPAREN "("
  105. #define szRPAREN ")"
  106. #define wcLPAREN L'('
  107. #define wcRPAREN L')'
  108. #define wszLPAREN L"("
  109. #define wszRPAREN L")"
  110. #define wcENDASH (WCHAR) 0x2013
  111. #define wcEMDASH (WCHAR) 0x2014
  112. #define wcMINUSSIGN (WCHAR) 0x2212
  113. #define myIsMinusSign(wc) \
  114. (L'-' == (wc) || wcENDASH == (wc) || wcEMDASH == (wc) || wcMINUSSIGN == (wc))
  115. #define myIsSwitchChar(wc) (L'/' == (wc) || myIsMinusSign(wc))
  116. BOOL
  117. myIsMinusSignString(
  118. IN WCHAR const *pwsz);
  119. typedef struct _CSURLTEMPLATE
  120. {
  121. DWORD Flags;
  122. WCHAR *pwszURL;
  123. } CSURLTEMPLATE;
  124. WCHAR const *
  125. myHResultToString(
  126. IN OUT WCHAR *awchr,
  127. IN HRESULT hr);
  128. WCHAR const *
  129. myHResultToStringRaw(
  130. IN OUT WCHAR *awchr,
  131. IN HRESULT hr);
  132. WCHAR const *
  133. myGetErrorMessageText(
  134. IN HRESULT hr,
  135. IN BOOL fHResultString);
  136. WCHAR const *
  137. myGetErrorMessageText1(
  138. IN HRESULT hr,
  139. IN BOOL fHResultString,
  140. IN OPTIONAL WCHAR const *pwszInsertionText);
  141. WCHAR const *
  142. myGetErrorMessageTextEx(
  143. IN HRESULT hr,
  144. IN BOOL fHResultString,
  145. IN OPTIONAL WCHAR const * const *papwszInsertionText);
  146. HRESULT
  147. myJetHResult(IN HRESULT hr);
  148. BOOL
  149. myIsDelayLoadHResult(IN HRESULT hr);
  150. BOOL
  151. myShouldPrintError(
  152. IN HRESULT hr,
  153. IN HRESULT hrquiet);
  154. HRESULT
  155. myGetLong(
  156. IN WCHAR const *pwszIn,
  157. OUT LONG *pLong);
  158. HRESULT
  159. myGetSignedLong(
  160. IN WCHAR const *pwszIn,
  161. OUT LONG *pLong);
  162. // Case-ignore compare a dynamic string (possibly supplied by the user)
  163. // against a static string. WSZARRAYSIZE will assert the static string
  164. // parameter is indeed static. mylstrcmpiS wil assert the static string
  165. // contains a strict subset of 7-bit ASCII characters.
  166. #if DBG_CERTSRV
  167. # define LSTRCMPIS(pwszDynamic, pwszStatic) \
  168. (WSZARRAYSIZE(pwszStatic), \
  169. mylstrcmpiS((pwszDynamic), (pwszStatic)))
  170. #else
  171. # define LSTRCMPIS(pwszDynamic, pwszStatic) \
  172. mylstrcmpiS((pwszDynamic), (pwszStatic))
  173. #endif //DBG_CERTSRV
  174. // Locale-independent case-ignore string compare
  175. // asserts the static string contains a strict subset of 7-bit ASCII characters.
  176. int
  177. mylstrcmpiS(
  178. IN WCHAR const *pwszDynamic,
  179. IN WCHAR const *pwszStatic);
  180. // Locale-independent case-ignore string compare
  181. int
  182. mylstrcmpiL(
  183. IN WCHAR const *pwsz1,
  184. IN WCHAR const *pwsz2);
  185. #define CBMAX_CRYPT_HASH_LEN 20
  186. BOOL
  187. myCryptSignMessage(
  188. IN CRYPT_SIGN_MESSAGE_PARA const *pcsmp,
  189. IN BYTE const *pbToBeSigned,
  190. IN DWORD cbToBeSigned,
  191. IN CERTLIB_ALLOCATOR allocType,
  192. OUT BYTE **ppbSignedBlob, // CoTaskMem*
  193. OUT DWORD *pcbSignedBlob);
  194. HRESULT
  195. myCryptMsgGetParam(
  196. IN HCRYPTMSG hCryptMsg,
  197. IN DWORD dwParamType,
  198. IN DWORD dwIndex,
  199. OUT VOID **ppvData,
  200. OUT DWORD *pcbData);
  201. BOOL
  202. myEncodeCert(
  203. IN DWORD dwEncodingType,
  204. IN CERT_SIGNED_CONTENT_INFO const *pInfo,
  205. IN CERTLIB_ALLOCATOR allocType,
  206. OUT BYTE **ppbEncoded,
  207. OUT DWORD *pcbEncoded);
  208. BOOL
  209. myEncodeName(
  210. IN DWORD dwEncodingType,
  211. IN CERT_NAME_INFO const *pInfo,
  212. IN DWORD dwFlags,
  213. IN CERTLIB_ALLOCATOR allocType,
  214. OUT BYTE **ppbEncoded,
  215. OUT DWORD *pcbEncoded);
  216. BOOL
  217. myEncodeKeyAttributes(
  218. IN DWORD dwEncodingType,
  219. IN CERT_KEY_ATTRIBUTES_INFO const *pInfo,
  220. IN CERTLIB_ALLOCATOR allocType,
  221. OUT BYTE **ppbEncoded,
  222. OUT DWORD *pcbEncoded);
  223. BOOL
  224. myEncodeKeyUsage(
  225. IN DWORD dwEncodingType,
  226. IN CRYPT_BIT_BLOB const *pInfo,
  227. IN CERTLIB_ALLOCATOR allocType,
  228. OUT BYTE **ppbEncoded,
  229. OUT DWORD *pcbEncoded);
  230. BOOL
  231. myEncodeKeyAuthority(
  232. IN DWORD dwEncodingType,
  233. IN CERT_AUTHORITY_KEY_ID_INFO const *pInfo,
  234. IN CERTLIB_ALLOCATOR allocType,
  235. OUT BYTE **ppbEncoded,
  236. OUT DWORD *pcbEncoded);
  237. BOOL
  238. myEncodeKeyAuthority2(
  239. IN DWORD dwEncodingType,
  240. IN CERT_AUTHORITY_KEY_ID2_INFO const *pInfo,
  241. IN CERTLIB_ALLOCATOR allocType,
  242. OUT BYTE **ppbEncoded,
  243. OUT DWORD *pcbEncoded);
  244. BOOL
  245. myEncodeToBeSigned(
  246. DWORD dwEncodingType,
  247. CERT_INFO const *pInfo,
  248. IN CERTLIB_ALLOCATOR allocType,
  249. BYTE **ppbEncoded,
  250. DWORD *pcbEncoded);
  251. BOOL
  252. myDecodeName(
  253. IN DWORD dwEncodingType,
  254. IN LPCSTR lpszStructType,
  255. IN BYTE const *pbEncoded,
  256. IN DWORD cbEncoded,
  257. IN CERTLIB_ALLOCATOR allocType,
  258. OUT CERT_NAME_INFO **ppNameInfo,
  259. OUT DWORD *pcbNameInfo);
  260. HRESULT
  261. myDecodeCSPProviderAttribute(
  262. IN BYTE const *pbCSPEncoded,
  263. IN DWORD cbCSPEncoded,
  264. OUT CRYPT_CSP_PROVIDER **ppccp);
  265. BOOL
  266. myDecodeKeyGenRequest(
  267. IN BYTE const *pbRequest,
  268. IN DWORD cbRequest,
  269. IN CERTLIB_ALLOCATOR allocType,
  270. OUT CERT_KEYGEN_REQUEST_INFO **ppKeyGenRequest,
  271. OUT DWORD *pcbKeyGenRequest);
  272. BOOL
  273. myDecodeExtensions(
  274. IN DWORD dwEncodingType,
  275. IN BYTE const *pbEncoded,
  276. IN DWORD cbEncoded,
  277. IN CERTLIB_ALLOCATOR allocType,
  278. OUT CERT_EXTENSIONS **ppInfo,
  279. OUT DWORD *pcbInfo);
  280. BOOL
  281. myDecodeKeyAuthority(
  282. IN DWORD dwEncodingType,
  283. IN BYTE const *pbEncoded,
  284. IN DWORD cbEncoded,
  285. IN CERTLIB_ALLOCATOR allocType,
  286. OUT CERT_AUTHORITY_KEY_ID_INFO const **ppInfo,
  287. OUT DWORD *pcbInfo);
  288. BOOL
  289. myDecodeKeyAuthority2(
  290. IN DWORD dwEncodingType,
  291. IN BYTE const *pbEncoded,
  292. IN DWORD cbEncoded,
  293. IN CERTLIB_ALLOCATOR allocType,
  294. OUT CERT_AUTHORITY_KEY_ID2_INFO const **ppInfo,
  295. OUT DWORD *pcbInfo);
  296. BOOL
  297. myCertGetCertificateContextProperty(
  298. IN CERT_CONTEXT const *pCertContext,
  299. IN DWORD dwPropId,
  300. IN CERTLIB_ALLOCATOR allocType,
  301. OUT VOID **ppvData,
  302. OUT DWORD *pcbData);
  303. HRESULT
  304. myCryptEncrypt(
  305. IN HCRYPTKEY hKey,
  306. IN BYTE const *pbIn,
  307. IN DWORD cbIn,
  308. OUT BYTE **ppbEncrypted,
  309. OUT DWORD *pcbEncrypted);
  310. HRESULT
  311. myCryptDecrypt(
  312. IN HCRYPTKEY hKey,
  313. IN BYTE const *pbIn,
  314. IN DWORD cbIn,
  315. OUT BYTE **ppbDecrypted,
  316. OUT DWORD *pcbDecrypted);
  317. HRESULT
  318. myCryptEncryptMessage(
  319. IN ALG_ID algId,
  320. IN DWORD cCertRecipient,
  321. IN CERT_CONTEXT const **rgCertRecipient,
  322. IN BYTE const *pbIn,
  323. IN DWORD cbIn,
  324. IN OPTIONAL HCRYPTPROV hCryptProv,
  325. OUT BYTE **ppbEncrypted,
  326. OUT DWORD *pcbEncrypted);
  327. HRESULT
  328. myCryptDecryptMessage(
  329. IN HCERTSTORE hStoreCA,
  330. IN BYTE const *pbEncrypted,
  331. IN DWORD cbEncrypted,
  332. IN CERTLIB_ALLOCATOR allocType,
  333. OUT BYTE **ppbDecrypted,
  334. OUT DWORD *pcbDecrypted);
  335. HRESULT
  336. myGetInnerPKCS10(
  337. IN HCRYPTMSG hMsg,
  338. IN char const *pszInnerContentObjId,
  339. OUT CERT_REQUEST_INFO **ppRequest);
  340. BOOL
  341. myDecodeNameValuePair(
  342. IN DWORD dwEncodingType,
  343. IN BYTE const *pbEncoded,
  344. IN DWORD cbEncoded,
  345. IN CERTLIB_ALLOCATOR allocType,
  346. OUT CRYPT_ENROLLMENT_NAME_VALUE_PAIR **ppInfo,
  347. OUT DWORD *pcbInfo);
  348. HRESULT
  349. myEncodeExtension(
  350. IN DWORD Flags,
  351. IN BYTE const *pbIn,
  352. IN DWORD cbIn,
  353. OUT BYTE **ppbOut,
  354. OUT DWORD *pcbOut);
  355. HRESULT
  356. myDecodeExtension(
  357. IN DWORD Flags,
  358. IN BYTE const *pbIn,
  359. IN DWORD cbIn,
  360. OUT BYTE **ppbOut,
  361. OUT DWORD *pcbOut);
  362. HRESULT
  363. myGenerateKeys(
  364. IN WCHAR const *pwszContainer,
  365. OPTIONAL IN WCHAR const *pwszProvName,
  366. IN DWORD dwFlags,
  367. IN BOOL fMachineKeySet,
  368. IN DWORD dwKeySpec,
  369. IN DWORD dwProvType,
  370. IN DWORD dwKeySize,
  371. OUT HCRYPTPROV *phProv);
  372. HRESULT
  373. myCryptExportKey(
  374. IN HCRYPTKEY hKey,
  375. IN HCRYPTKEY hKeyExp,
  376. IN DWORD dwBlobType,
  377. IN DWORD dwFlags,
  378. OUT BYTE **ppbKey,
  379. OUT DWORD *pcbKey);
  380. HRESULT
  381. mySetEnablePrivateKeyUsageCount(
  382. IN HCRYPTPROV hProv,
  383. IN BOOL fEnabled);
  384. HRESULT
  385. myGetSigningKeyUsageCount(
  386. IN HCRYPTPROV hProv,
  387. OUT BOOL *pfSupported,
  388. OUT BOOL *pfEnabled,
  389. OPTIONAL OUT ULARGE_INTEGER *puliCount);
  390. HRESULT
  391. myIsDeltaCRL(
  392. IN CRL_CONTEXT const *pCRL,
  393. OUT BOOL *pfIsDeltaCRL);
  394. HCERTSTORE
  395. myUrlCertOpenStore(
  396. IN DWORD dwFlags,
  397. IN WCHAR const *pwszURL);
  398. HRESULT
  399. myCertGetNameString(
  400. IN CERT_CONTEXT const *pcc,
  401. IN DWORD dwType,
  402. OUT WCHAR **ppwszSimpleName);
  403. #define CA_VERIFY_FLAGS_ALLOW_UNTRUSTED_ROOT 0x00000001
  404. #define CA_VERIFY_FLAGS_IGNORE_OFFLINE 0x00000002
  405. #define CA_VERIFY_FLAGS_NO_REVOCATION 0x00000004
  406. #define CA_VERIFY_FLAGS_FULL_CHAIN_REVOCATION 0x00000008
  407. #define CA_VERIFY_FLAGS_NT_AUTH 0x00000010
  408. #define CA_VERIFY_FLAGS_IGNORE_INVALID_POLICIES 0x00000020
  409. #define CA_VERIFY_FLAGS_IGNORE_NOREVCHECK 0x00000040
  410. #define CA_VERIFY_FLAGS_DUMP_CHAIN 0x40000000
  411. #define CA_VERIFY_FLAGS_SAVE_CHAIN 0x80000000
  412. typedef VOID (FNSIMPLECHAINELEMENTCALLBACK)(
  413. IN DWORD dwFlags,
  414. IN DWORD iElement,
  415. IN CERT_SIMPLE_CHAIN const *pChain);
  416. HRESULT
  417. myVerifyCertContext(
  418. IN CERT_CONTEXT const *pCert,
  419. IN DWORD dwFlags,
  420. IN DWORD cUsageOids,
  421. OPTIONAL IN CHAR const * const *apszUsageOids,
  422. OPTIONAL IN HCERTCHAINENGINE hChainEngine,
  423. OPTIONAL IN HCERTSTORE hAdditionalStore,
  424. OPTIONAL OUT WCHAR **ppwszMissingIssuer);
  425. HRESULT
  426. myVerifyCertContextEx(
  427. IN CERT_CONTEXT const *pCert,
  428. IN DWORD dwFlags,
  429. IN DWORD dwmsTimeout,
  430. IN DWORD cUsageOids,
  431. OPTIONAL IN CHAR const * const *apszUsageOids,
  432. IN DWORD cIssuanceOids,
  433. OPTIONAL IN CHAR const * const *apszIssuanceOids,
  434. OPTIONAL IN HCERTCHAINENGINE hChainEngine,
  435. OPTIONAL IN FILETIME const *pft,
  436. OPTIONAL IN HCERTSTORE hAdditionalStore,
  437. OPTIONAL IN FNSIMPLECHAINELEMENTCALLBACK *pfnCallback,
  438. OPTIONAL OUT WCHAR **ppwszMissingIssuer,
  439. OPTIONAL OUT WCHAR **ppwszzIssuancePolicies,
  440. OPTIONAL OUT WCHAR **ppwszzApplicationPolicies,
  441. OPTIONAL OUT WCHAR **ppwszExtendedErrorInfo,
  442. OPTIONAL OUT CERT_TRUST_STATUS *pTrustStatus);
  443. VOID
  444. myDumpChain(
  445. IN HRESULT hrVerify,
  446. IN DWORD dwFlags,
  447. IN CERT_CONTEXT const *pCert,
  448. OPTIONAL IN FNSIMPLECHAINELEMENTCALLBACK *pfnCallback,
  449. OPTIONAL IN WCHAR const *pwszMissingIssuer,
  450. IN CERT_CHAIN_CONTEXT const *pChainContext);
  451. HRESULT
  452. myVerifyKRACertContext(
  453. IN CERT_CONTEXT const *pCert,
  454. IN DWORD dwFlags);
  455. DWORD
  456. myCRLNumber(
  457. IN CRL_CONTEXT const *pCRL);
  458. HRESULT
  459. myCertStrToName(
  460. IN DWORD dwCertEncodingType,
  461. IN LPCWSTR pszX500,
  462. IN DWORD dwStrType,
  463. IN OPTIONAL void *pvReserved,
  464. OUT BYTE **ppbEncoded,
  465. OUT DWORD *pcbEncoded,
  466. OUT OPTIONAL LPCWSTR *ppszError);
  467. HRESULT
  468. myCertNameToStr(
  469. IN DWORD dwCertEncodingType,
  470. IN CERT_NAME_BLOB const *pName,
  471. IN DWORD dwStrType,
  472. OUT WCHAR **ppwszName);
  473. HRESULT
  474. myCryptStringToBinaryA(
  475. IN LPCSTR pszString,
  476. IN DWORD cchString,
  477. IN DWORD dwFlags,
  478. OUT BYTE **ppbBinary,
  479. OUT DWORD *pcbBinary,
  480. OUT DWORD *pdwSkip, // OPTIONAL
  481. OUT DWORD *pdwFlags); // OPTIONAL
  482. HRESULT
  483. myCryptStringToBinary(
  484. IN LPCWSTR pwszString,
  485. IN DWORD cwcString,
  486. IN DWORD dwFlags,
  487. OUT BYTE **ppbBinary,
  488. OUT DWORD *pcbBinary,
  489. OUT DWORD *pdwSkip, // OPTIONAL
  490. OUT DWORD *pdwFlags); // OPTIONAL
  491. HRESULT
  492. myCryptBinaryToStringA(
  493. IN CONST BYTE *pbBinary,
  494. IN DWORD cbBinary,
  495. IN DWORD dwFlags,
  496. OUT LPSTR *ppszString);
  497. HRESULT
  498. myCryptBinaryToString(
  499. IN CONST BYTE *pbBinary,
  500. IN DWORD cbBinary,
  501. IN DWORD dwFlags,
  502. OUT LPWSTR *ppwszString);
  503. HRESULT
  504. myIsFirstSigner(
  505. IN CERT_NAME_BLOB const *pNameBlob,
  506. OUT BOOL *pfDummy);
  507. HRESULT
  508. myCopyKeys(
  509. IN CRYPT_KEY_PROV_INFO const *pkpi,
  510. IN WCHAR const *pwszOldContainer,
  511. IN WCHAR const *pwszNewContainer,
  512. IN WCHAR const *pwszNewCSP,
  513. IN BOOL fOldUserKey,
  514. IN BOOL fNewUserKey,
  515. IN BOOL fNewProtect,
  516. IN BOOL fForceOverWrite);
  517. HRESULT
  518. mySaveChainAndKeys(
  519. IN CERT_SIMPLE_CHAIN const *pSimpleChain,
  520. IN WCHAR const *pwszStore,
  521. IN DWORD dwStoreFlags,
  522. IN CRYPT_KEY_PROV_INFO const *pkpi,
  523. OPTIONAL OUT CERT_CONTEXT const **ppCert);
  524. HCERTSTORE
  525. myPFXImportCertStore(
  526. IN CRYPT_DATA_BLOB *ppfx,
  527. OPTIONAL IN WCHAR const *pwszPassword,
  528. IN DWORD dwFlags);
  529. HRESULT
  530. myPFXExportCertStore(
  531. IN HCERTSTORE hStore,
  532. OUT CRYPT_DATA_BLOB *ppfx,
  533. IN WCHAR const *pwszPassword,
  534. IN BOOL fEnhancedStrength,
  535. IN DWORD dwFlags);
  536. HRESULT
  537. myAddChainToMemoryStore(
  538. IN HCERTSTORE hMemoryStore,
  539. IN CERT_CONTEXT const *pCertContext,
  540. IN DWORD dwmsTimeout);
  541. typedef struct _RESTORECHAIN
  542. {
  543. CERT_CHAIN_CONTEXT const *pChain;
  544. DWORD NameId;
  545. } RESTORECHAIN;
  546. HRESULT
  547. myGetChainArrayFromStore(
  548. IN HCERTSTORE hStore,
  549. IN BOOL fCAChain,
  550. IN BOOL fUserStore,
  551. OPTIONAL OUT WCHAR **ppwszCommonName,
  552. IN OUT DWORD *pcRestoreChain,
  553. OPTIONAL OUT RESTORECHAIN *paRestoreChain);
  554. #ifndef CERTREQUEST_CLIENT_CERTREQ // moved to xelib.h
  555. HRESULT
  556. myGetUserNameEx(
  557. IN EXTENDED_NAME_FORMAT NameFormat,
  558. OUT WCHAR **ppwszUserName);
  559. #endif
  560. HRESULT
  561. myGetComputerObjectName(
  562. IN EXTENDED_NAME_FORMAT NameFormat,
  563. OUT WCHAR **ppwszDnsName);
  564. HRESULT
  565. myGetComputerNameEx(
  566. IN COMPUTER_NAME_FORMAT NameFormat,
  567. OUT WCHAR **ppwszName);
  568. HRESULT
  569. myGetComputerNames(
  570. OUT WCHAR **ppwszDnsName,
  571. OUT WCHAR **ppwszOldName);
  572. #ifndef CERTREQUEST_CLIENT_CERTREQ // moved to xelib.h
  573. HRESULT
  574. myGetMachineDnsName(
  575. OUT WCHAR **ppwszDnsName);
  576. #endif
  577. LANGID
  578. mySetThreadUILanguage(
  579. IN WORD wReserved);
  580. BOOL
  581. myConvertStringSecurityDescriptorToSecurityDescriptor(
  582. IN LPCWSTR StringSecurityDescriptor,
  583. IN DWORD StringSDRevision,
  584. OUT PSECURITY_DESCRIPTOR *SecurityDescriptor,
  585. OUT PULONG SecurityDescriptorSize OPTIONAL);
  586. BOOL
  587. myConvertSidToStringSid(
  588. IN PSID Sid,
  589. OUT LPWSTR *StringSid);
  590. BOOL
  591. myConvertStringSidToSid(
  592. IN LPCWSTR StringSid,
  593. OUT PSID *Sid);
  594. #define DH_INDENTMASK 0x000000ff
  595. #define DH_MULTIADDRESS 0x00000100 // add address to multi-line output only
  596. #define DH_NOADDRESS 0x00000200
  597. #define DH_NOASCIIHEX 0x00000400
  598. #define DH_NOTABPREFIX 0x00000800 // double space after addr if displayed
  599. #define DH_PRIVATEDATA 0x00001000 // private data -- don't write to log
  600. VOID
  601. DumpHex(
  602. IN DWORD Flags,
  603. IN BYTE const *pb,
  604. IN ULONG cb);
  605. DWORD
  606. myGetDisplayLength(
  607. IN WCHAR const *pwsz);
  608. LONG
  609. myConsolePrintString(
  610. IN DWORD ccolMin,
  611. IN WCHAR const *pwszString);
  612. BOOL
  613. myConsolePrintfDisable(
  614. IN BOOL fDisable);
  615. int __cdecl
  616. myConsolePrintf(
  617. IN WCHAR const *pwszFmt,
  618. ...);
  619. //+==============================
  620. // Date/Time conversion routines:
  621. HRESULT
  622. myDateToFileTime(
  623. IN DATE const *pDate,
  624. OUT FILETIME *pft);
  625. HRESULT
  626. myFileTimeToDate(
  627. IN FILETIME const *pft,
  628. OUT DATE *pDate);
  629. HRESULT
  630. myFileTimePeriodToWszTimePeriod(
  631. IN FILETIME const *pftGMT,
  632. IN BOOL fExact,
  633. OUT WCHAR **ppwszTimePeriod);
  634. HRESULT
  635. myTranslateUnlocalizedPeriodString(
  636. IN enum ENUM_PERIOD enumPeriod,
  637. OUT WCHAR const **ppwszPeriodString);
  638. HRESULT
  639. myGMTFileTimeToWszLocalTime(
  640. IN FILETIME const *pftGMT,
  641. IN BOOL fSeconds,
  642. OUT WCHAR **ppwszLocalTime);
  643. HRESULT
  644. myFileTimeToWszTime(
  645. IN FILETIME const *pftGMT,
  646. IN BOOL fSeconds,
  647. OUT WCHAR **ppwszGMTTime);
  648. HRESULT
  649. myGMTDateToWszLocalTime(
  650. IN DATE const *pDateGMT,
  651. IN BOOL fSeconds,
  652. OUT WCHAR **ppwszLocalTime);
  653. HRESULT
  654. myWszLocalTimeToGMTDate(
  655. IN WCHAR const *pwszLocalTime,
  656. OUT DATE *pDateGMT);
  657. HRESULT
  658. myWszLocalTimeToGMTFileTime(
  659. IN WCHAR const *pwszLocalTime,
  660. OUT FILETIME *pftGMT);
  661. HRESULT
  662. mySystemTimeToGMTSystemTime(
  663. IN OUT SYSTEMTIME *pSys);
  664. enum ENUM_FORCETELETEX
  665. {
  666. ENUM_TELETEX_OFF = 0,
  667. ENUM_TELETEX_ON = 1,
  668. ENUM_TELETEX_AUTO = 2,
  669. ENUM_TELETEX_MASK = 0xf,
  670. ENUM_TELETEX_UTF8 = 0x10
  671. };
  672. typedef struct _LLFILETIME
  673. {
  674. union {
  675. LONGLONG ll;
  676. FILETIME ft;
  677. };
  678. } LLFILETIME;
  679. __inline VOID
  680. myAddToFileTime(
  681. IN OUT FILETIME *pft,
  682. IN LONGLONG ll)
  683. {
  684. LLFILETIME llft;
  685. llft.ft = *pft;
  686. llft.ll += ll;
  687. *pft = llft.ft;
  688. }
  689. __inline LONGLONG
  690. mySubtractFileTimes(
  691. IN FILETIME const *pft1,
  692. IN FILETIME const *pft2)
  693. {
  694. LLFILETIME llft1;
  695. LLFILETIME llft2;
  696. llft1.ft = *pft1;
  697. llft2.ft = *pft2;
  698. return(llft1.ll - llft2.ll);
  699. }
  700. HRESULT
  701. myMakeExprDate(
  702. IN OUT DATE *pDate,
  703. IN LONG lDelta,
  704. IN enum ENUM_PERIOD enumPeriod);
  705. HRESULT
  706. myTranslatePeriodUnits(
  707. IN WCHAR const *pwszPeriod,
  708. IN LONG lCount,
  709. OUT enum ENUM_PERIOD *penumPeriod,
  710. OUT LONG *plCount);
  711. HRESULT
  712. myDupString(
  713. IN WCHAR const *pwszIn,
  714. OUT WCHAR **ppwszOut);
  715. HRESULT
  716. myDupStringA(
  717. IN CHAR const *pszIn,
  718. OUT CHAR **ppszOut);
  719. HRESULT
  720. myUnmarshalVariant(
  721. IN DWORD PropType,
  722. IN DWORD cbValue,
  723. IN BYTE const *pbValue,
  724. OUT VARIANT *pvarValue);
  725. HRESULT
  726. myUnmarshalFormattedVariant(
  727. IN DWORD Flags,
  728. IN DWORD PropId,
  729. IN DWORD PropType,
  730. IN DWORD cbValue,
  731. IN BYTE const *pbValue,
  732. OUT VARIANT *pvarValue);
  733. HRESULT
  734. myMarshalVariant(
  735. IN VARIANT const *pvarPropertyValue,
  736. IN DWORD PropType,
  737. OUT DWORD *pcbprop,
  738. OUT BYTE **ppbprop);
  739. // Output values for myCheck7f's *pState parameter:
  740. #define CHECK7F_NONE 0x0000
  741. #define CHECK7F_OTHER 0x0001
  742. #define CHECK7F_ISSUER 0x0002
  743. #define CHECK7F_ISSUER_RDN 0x0003
  744. #define CHECK7F_ISSUER_RDN_ATTRIBUTE 0x0004
  745. #define CHECK7F_ISSUER_RDN_STRING 0x0005
  746. #define CHECK7F_SUBJECT 0x0006
  747. #define CHECK7F_SUBJECT_RDN 0x0007
  748. #define CHECK7F_SUBJECT_RDN_ATTRIBUTE 0x0008
  749. #define CHECK7F_SUBJECT_RDN_STRING 0x0009
  750. #define CHECK7F_EXTENSIONS 0x000a
  751. #define CHECK7F_EXTENSION_ARRAY 0x000b
  752. #define CHECK7F_EXTENSION 0x000c
  753. #define CHECK7F_EXTENSION_VALUE 0x000d
  754. #define CHECK7F_EXTENSION_VALUE_RAW 0x000e
  755. #define CHECK7F_COUNT 0x000f
  756. HRESULT
  757. myCheck7f(
  758. IN const BYTE *pbCert,
  759. IN DWORD cbCert,
  760. IN BOOL fVerbose,
  761. OUT DWORD *pState,
  762. OPTIONAL OUT DWORD *pIndex1,
  763. OPTIONAL OUT DWORD *pIndex2,
  764. OPTIONAL IN OUT DWORD *pcwcField,
  765. OPTIONAL OUT WCHAR *pwszField,
  766. OPTIONAL IN OUT DWORD *pcwcObjectId,
  767. OPTIONAL OUT WCHAR *pwszObjectId,
  768. OPTIONAL OUT WCHAR const **ppwszObjectIdDescription); // Static: don't free!
  769. HRESULT
  770. myVerifyObjIdA(
  771. IN char const *pszObjId);
  772. HRESULT
  773. myVerifyObjId(
  774. IN WCHAR const *pwszObjId);
  775. WCHAR const *
  776. myGetOIDNameA(
  777. IN char const *pszObjId);
  778. WCHAR const *
  779. myGetOIDName(
  780. IN WCHAR const *pwszObjId);
  781. BOOL
  782. myIsCharSanitized(
  783. IN WCHAR wc);
  784. HRESULT
  785. mySanitizeName(
  786. IN WCHAR const *pwszName,
  787. OUT WCHAR **ppwszNameOut);
  788. HRESULT
  789. myRevertSanitizeName(
  790. IN WCHAR const *pwszName,
  791. OUT WCHAR **ppwszNameOut);
  792. HRESULT
  793. mySanitizedNameToDSName(
  794. IN WCHAR const *pwszName,
  795. OUT WCHAR **ppwszNameOut);
  796. HRESULT
  797. myAppendString(
  798. IN WCHAR const *pwszNew,
  799. OPTIONAL IN WCHAR const *pwszSeparator,
  800. IN OUT WCHAR **ppwszInOut);
  801. HRESULT
  802. myPrependString(
  803. IN WCHAR const *pwszNew,
  804. OPTIONAL IN WCHAR const *pwszSeparator,
  805. IN OUT WCHAR **ppwszInOut);
  806. HRESULT
  807. myGetCommonName(
  808. IN CERT_NAME_BLOB const *pNameBlob,
  809. IN BOOL fAllowDefault,
  810. OUT WCHAR **ppwszCN);
  811. HRESULT
  812. myGetRDNAttributeFromNameBlob(
  813. IN CERT_NAME_BLOB const *pNameBlob,
  814. IN LPCSTR pcszAttributeOID,
  815. OUT WCHAR **ppwszCN);
  816. HRESULT
  817. myDecodeCMCRegInfo(
  818. IN BYTE const *pbOctet,
  819. IN DWORD cbOctet,
  820. OUT WCHAR **ppwszOut);
  821. HRESULT
  822. mySplitConfigString(
  823. IN WCHAR const *pwszConfig,
  824. OUT WCHAR **ppwszServer,
  825. OUT WCHAR **ppwszAuthority);
  826. HRESULT
  827. myCLSIDToWsz(
  828. IN CLSID const *pclsid,
  829. OUT WCHAR **ppwsz);
  830. VOID
  831. myUuidCreate(
  832. OUT UUID *pUuid);
  833. interface ICertAdminD2;
  834. interface ICertRequestD2;
  835. HRESULT
  836. myOpenAdminDComConnection(
  837. IN WCHAR const *pwszConfig,
  838. OPTIONAL OUT WCHAR const **ppwszAuthority,
  839. OPTIONAL IN OUT WCHAR **ppwszServerName,
  840. IN OUT DWORD *pdwServerVersion,
  841. IN OUT ICertAdminD2 **ppICertAdminD);
  842. HRESULT
  843. myOpenRequestDComConnection(
  844. IN WCHAR const *pwszConfig,
  845. OPTIONAL OUT WCHAR const **ppwszAuthority,
  846. OPTIONAL IN OUT WCHAR **ppwszServerName,
  847. OPTIONAL OUT BOOL *pfNewConnection,
  848. IN OUT DWORD *pdwServerVersion,
  849. IN OUT ICertRequestD2 **ppICertRequestD);
  850. VOID
  851. myCloseDComConnection(
  852. OPTIONAL IN OUT IUnknown **ppUnknown,
  853. OPTIONAL IN OUT WCHAR **ppwszServerName);
  854. HRESULT
  855. myPingCertSrv(
  856. IN WCHAR const *pwszCAName,
  857. OPTIONAL IN WCHAR const *pwszMachineName,
  858. OPTIONAL OUT WCHAR **ppwszzCANames,
  859. OPTIONAL OUT WCHAR **ppwszSharedFolder,
  860. OPTIONAL OUT CAINFO **ppCAInfo,
  861. OPTIONAL OUT DWORD *pdwServerVersion,
  862. OPTIONAL OUT WCHAR **ppwszCADnsName);
  863. DWORD
  864. myGetCertNameProperty(
  865. IN BOOL fFirstRDN, // else last matching RDN
  866. IN CERT_NAME_INFO const *pNameInfo,
  867. IN char const *pszObjId,
  868. OUT WCHAR const **ppwszName);
  869. HRESULT
  870. mySetCARegFileNameTemplate(
  871. IN WCHAR const *pwszRegValueName,
  872. IN WCHAR const *pwszServerName,
  873. IN WCHAR const *pwszSanitizedName,
  874. IN WCHAR const *pwszFileName);
  875. HRESULT
  876. myGetCARegFileNameTemplate(
  877. IN WCHAR const *pwszRegValueName,
  878. IN WCHAR const *pwszServerName,
  879. IN WCHAR const *pwszSanitizedName,
  880. IN DWORD iCert,
  881. IN DWORD iCRL,
  882. OUT WCHAR **ppwszFileName);
  883. #define CSRH_CASIGCERT 0
  884. #define CSRH_CAXCHGCERT 1
  885. #define CSRH_CAKRACERT 2
  886. HRESULT
  887. mySetCARegHash(
  888. IN WCHAR const *pwszSanitizedCAName,
  889. IN DWORD dwRegHashChoice,
  890. IN DWORD Index,
  891. IN CERT_CONTEXT const *pCert);
  892. HRESULT
  893. myGetCARegHash(
  894. IN WCHAR const *pwszSanitizedCAName,
  895. IN DWORD dwRegHashChoice,
  896. IN DWORD Index,
  897. OUT BYTE **ppbHash,
  898. OUT DWORD *pcbHash);
  899. HRESULT
  900. myGetCARegHashCount(
  901. IN WCHAR const *pwszSanitizedCAName,
  902. IN DWORD dwRegHashChoice,
  903. OUT DWORD *pCount);
  904. HRESULT myShrinkCARegHash(
  905. IN WCHAR const *pwszSanitizedCAName,
  906. IN DWORD dwRegHashChoice,
  907. IN DWORD Index);
  908. HRESULT
  909. myGetNameId(
  910. IN CERT_CONTEXT const *pCACert,
  911. OUT DWORD *pdwNameId);
  912. HRESULT
  913. myGetCRLNameId(
  914. IN CRL_CONTEXT const *pCRL,
  915. OUT DWORD *pdwNameId);
  916. HRESULT
  917. myFindCACertByHash(
  918. IN HCERTSTORE hStore,
  919. IN BYTE const *pbHash,
  920. IN DWORD cbHash,
  921. OUT OPTIONAL DWORD *pdwNameId,
  922. OUT CERT_CONTEXT const **ppCACert);
  923. HRESULT
  924. myFindCACertByHashIndex(
  925. IN HCERTSTORE hStore,
  926. IN WCHAR const *pwszSanitizedCAName,
  927. IN DWORD dwRegHashChoice,
  928. IN DWORD Index,
  929. OPTIONAL OUT DWORD *pdwNameId,
  930. OUT CERT_CONTEXT const **ppCACert);
  931. BOOL
  932. myAreBlobsSame(
  933. IN BYTE const *pbData1,
  934. IN DWORD cbData1,
  935. IN BYTE const *pbData2,
  936. IN DWORD cbData2);
  937. BOOL
  938. myAreSerialNumberBlobsSame(
  939. IN CRYPT_INTEGER_BLOB const *pBlob1,
  940. IN CRYPT_INTEGER_BLOB const *pBlob2);
  941. BOOL
  942. myAreCertContextBlobsSame(
  943. IN CERT_CONTEXT const *pcc1,
  944. IN CERT_CONTEXT const *pcc2);
  945. VOID
  946. myGenerateGuidSerialNumber(
  947. OUT GUID *pguidSerialNumber);
  948. #define CSRF_INSTALLCACERT 0x00000000
  949. #define CSRF_RENEWCACERT 0x00000001
  950. #define CSRF_NEWKEYS 0x00000002
  951. #define CSRF_UNATTENDED 0x40000000
  952. #define CSRF_OVERWRITE 0x80000000
  953. HRESULT
  954. CertServerRequestCACertificateAndComplete(
  955. IN HINSTANCE hInstance,
  956. IN HWND hwnd,
  957. IN DWORD Flags,
  958. IN WCHAR const *pwszCAName,
  959. OPTIONAL IN WCHAR const *pwszParentMachine,
  960. OPTIONAL IN WCHAR const *pwszParentCA,
  961. OPTIONAL IN WCHAR const *pwszCAChainFile,
  962. OPTIONAL OUT WCHAR **ppwszRequestFile);
  963. HRESULT
  964. myBuildPathAndExt(
  965. IN WCHAR const *pwszDir,
  966. IN WCHAR const *pwszFile,
  967. OPTIONAL IN WCHAR const *pwszExt,
  968. OUT WCHAR **ppwszPath);
  969. HRESULT
  970. myCreateBackupDir(
  971. IN WCHAR const *pwszDir,
  972. IN BOOL fForceOverWrite);
  973. typedef struct _DBBACKUPPROGRESS
  974. {
  975. DWORD dwDBPercentComplete;
  976. DWORD dwLogPercentComplete;
  977. DWORD dwTruncateLogPercentComplete;
  978. } DBBACKUPPROGRESS;
  979. #define CDBBACKUP_INCREMENTAL 0x00000001 // else full backup
  980. #define CDBBACKUP_KEEPOLDLOGS 0x00000002 // else truncate logs
  981. #define CDBBACKUP_OVERWRITE 0x00000100 // for myBackupDB only
  982. #define CDBBACKUP_VERIFYONLY 0x00000200 // for myBackupDB and myRestoreDB
  983. #define CDBBACKUP_BACKUPVALID (CDBBACKUP_INCREMENTAL | \
  984. CDBBACKUP_KEEPOLDLOGS | \
  985. CDBBACKUP_OVERWRITE | \
  986. CDBBACKUP_VERIFYONLY)
  987. #define CDBBACKUP_RESTOREVALID (CDBBACKUP_INCREMENTAL | \
  988. CDBBACKUP_KEEPOLDLOGS | \
  989. CDBBACKUP_VERIFYONLY)
  990. HRESULT
  991. myBackupDB(
  992. OPTIONAL IN WCHAR const *pwszConfig,
  993. IN DWORD Flags,
  994. IN WCHAR const *pwszBackupDir,
  995. OPTIONAL OUT DBBACKUPPROGRESS *pdbp);
  996. HRESULT
  997. myRestoreDB(
  998. IN WCHAR const *pwszConfig,
  999. IN DWORD Flags,
  1000. OPTIONAL IN WCHAR const *pwszBackupDir,
  1001. OPTIONAL IN WCHAR const *pwszCheckPointFilePath,
  1002. OPTIONAL IN WCHAR const *pwszLogPath,
  1003. OPTIONAL IN WCHAR const *pwszBackupLogPath,
  1004. OPTIONAL OUT DBBACKUPPROGRESS *pdbp);
  1005. HRESULT
  1006. myDeleteDBFilesInDir(
  1007. IN WCHAR const *pwszDir);
  1008. HRESULT
  1009. myDoDBFilesExist(
  1010. IN WCHAR const *pwszSanitizedName,
  1011. OUT BOOL *pfFilesExist,
  1012. OPTIONAL OUT WCHAR **ppwszFileInUse);
  1013. HRESULT
  1014. myDoDBFilesExistInDir(
  1015. IN WCHAR const *pwszDir,
  1016. OUT BOOL *pfFilesExist,
  1017. OPTIONAL OUT WCHAR **ppwszFileInUse);
  1018. HRESULT
  1019. myIsConfigLocal(
  1020. IN WCHAR const *pwszConfig,
  1021. OPTIONAL OUT WCHAR **ppwszMachine,
  1022. OUT BOOL *pfLocal);
  1023. HRESULT
  1024. myIsConfigLocal2(
  1025. IN WCHAR const *pwszConfig,
  1026. IN WCHAR const *pwszDnsName,
  1027. IN WCHAR const *pwszOldName,
  1028. OUT BOOL *pfLocal);
  1029. HRESULT
  1030. myGetConfig(
  1031. IN DWORD dwUIFlag,
  1032. OUT WCHAR **ppwszConfig);
  1033. HRESULT
  1034. myConvertLocalPathToUNC(
  1035. OPTIONAL IN WCHAR const *pwszServer,
  1036. IN WCHAR const *pwszFile,
  1037. OUT WCHAR **ppwszFileUNC);
  1038. HRESULT
  1039. myConvertUNCPathToLocal(
  1040. IN WCHAR const *pwszUNCPath,
  1041. OUT WCHAR **ppwszLocalPath);
  1042. ULONG
  1043. myLocalPathwcslen(
  1044. IN WCHAR const *pwsz);
  1045. VOID
  1046. myLocalPathwcscpy(
  1047. OUT WCHAR *pwszOut,
  1048. IN WCHAR const *pwszIn);
  1049. HRESULT
  1050. myCertServerExportPFX(
  1051. IN WCHAR const *pwszCAName,
  1052. IN WCHAR const *pwszBackupDir,
  1053. IN WCHAR const *pwszPassword,
  1054. IN BOOL fEnhancedStrength,
  1055. IN BOOL fForceOverWrite,
  1056. IN BOOL fMustExportPrivateKeys,
  1057. IN DWORD dwmsTimeout,
  1058. OPTIONAL OUT WCHAR **ppwszPFXFile);
  1059. HRESULT
  1060. myCertServerImportPFX(
  1061. IN WCHAR const *pwszBackupDirOrPFXFile,
  1062. IN WCHAR const *pwszPassword,
  1063. IN BOOL fForceOverWrite,
  1064. OPTIONAL OUT WCHAR **ppwszCommonName,
  1065. OPTIONAL OUT WCHAR **ppwszPFXFile,
  1066. OPTIONAL OUT CERT_CONTEXT const **ppSavedLeafCert);
  1067. HRESULT
  1068. myDeleteGuidKeys(
  1069. IN HCERTSTORE hStorePFX,
  1070. IN BOOL fMachineKeySet);
  1071. #define IsHrSkipPrivateKey(hresult) \
  1072. (NTE_BAD_KEY_STATE == (hresult) || \
  1073. CRYPT_E_NO_KEY_PROPERTY == (hresult) || \
  1074. E_HANDLE == (hresult))
  1075. HRESULT
  1076. myCryptExportPrivateKey(
  1077. IN HCRYPTKEY hKey,
  1078. OUT BYTE **ppbKey,
  1079. OUT DWORD *pcbKey);
  1080. HRESULT
  1081. myCertGetKeyProviderInfo(
  1082. IN CERT_CONTEXT const *pCert,
  1083. OUT CRYPT_KEY_PROV_INFO **ppkpi);
  1084. HRESULT
  1085. myRepairCertKeyProviderInfo(
  1086. IN CERT_CONTEXT const *pCert,
  1087. IN BOOL fForceMachineKey,
  1088. OPTIONAL OUT CRYPT_KEY_PROV_INFO **ppkpi);
  1089. HRESULT
  1090. myVerifyPublicKey(
  1091. IN OPTIONAL CERT_CONTEXT const *pCert,
  1092. IN BOOL fV1Cert,
  1093. IN OPTIONAL CRYPT_KEY_PROV_INFO const *pKeyProvInfo,
  1094. IN OPTIONAL CERT_PUBLIC_KEY_INFO const *pSubjectPublicKeyInfo,
  1095. OPTIONAL OUT BOOL *pfMatchingKey);
  1096. HRESULT
  1097. myVerifyPublicKeyFromHProv(
  1098. IN HCRYPTPROV hProv,
  1099. IN DWORD dwKeySpec,
  1100. IN OPTIONAL CERT_CONTEXT const *pCert,
  1101. IN BOOL fV1Cert,
  1102. IN OPTIONAL CERT_PUBLIC_KEY_INFO const *pPublicKeyInfo,
  1103. OPTIONAL OUT BOOL *pfMatchingKey);
  1104. HRESULT
  1105. myValidateKeyBlob(
  1106. IN BYTE const *pbKey,
  1107. IN DWORD cbKey,
  1108. IN CERT_PUBLIC_KEY_INFO const *pPublicKeyInfo,
  1109. IN BOOL fV1Cert,
  1110. OUT BOOL *pfSigningKey,
  1111. OPTIONAL OUT CRYPT_KEY_PROV_INFO *pkpi);
  1112. DWORD
  1113. myASNGetDataIndex(
  1114. IN BYTE bBERTag,
  1115. IN DWORD iStart,
  1116. IN BYTE const *pb,
  1117. IN DWORD cb,
  1118. OUT DWORD *pdwLen);
  1119. HRESULT
  1120. myCanonicalizePublicKey(
  1121. IN BYTE const *pbKeyIn,
  1122. IN DWORD cbKeyIn,
  1123. OUT BYTE **ppbKeyOut,
  1124. OUT DWORD *pcbKeyOut);
  1125. HRESULT
  1126. mySqueezePublicKey(
  1127. IN BYTE const *pbKeyIn,
  1128. IN DWORD cbKeyIn,
  1129. OUT BYTE **ppbKeyOut,
  1130. OUT DWORD *pcbKeyOut);
  1131. BOOL
  1132. myCertComparePublicKeyInfo(
  1133. IN DWORD dwCertEncodingType,
  1134. IN BOOL fV1Cert,
  1135. IN CERT_PUBLIC_KEY_INFO const *pPublicKey1,
  1136. IN CERT_PUBLIC_KEY_INFO const *pPublicKey2);
  1137. BOOL
  1138. myIsDirectory(
  1139. IN WCHAR const *pwszDirectoryPath);
  1140. BOOL
  1141. myIsDirEmpty(
  1142. IN WCHAR const *pwszDir);
  1143. HRESULT
  1144. myIsDirWriteable(
  1145. IN WCHAR const *pwszPath,
  1146. IN BOOL fFilePath);
  1147. BOOL
  1148. myIsFileInUse(
  1149. IN WCHAR const *pwszFile);
  1150. __inline BOOL
  1151. myDoesFileExist(
  1152. IN WCHAR const *pwszFile)
  1153. {
  1154. DWORD dw;
  1155. // Allow Ansi subdirectory builds, use GetFileAttributesW
  1156. dw = GetFileAttributesW(pwszFile);
  1157. return(MAXDWORD != dw && 0 == (FILE_ATTRIBUTE_DIRECTORY & dw));
  1158. }
  1159. WCHAR *
  1160. myLoadResourceStringNoCache(
  1161. IN HINSTANCE hInstance,
  1162. IN DWORD ResourceId);
  1163. WCHAR const *
  1164. myLoadResourceString(
  1165. IN DWORD ResourceId);
  1166. VOID
  1167. myFreeResourceStrings(
  1168. IN char const *pszModule);
  1169. HRESULT
  1170. myDoesDSExist(
  1171. IN BOOL fRetry);
  1172. #define GCFPF_USEDS 0x00000001
  1173. #define GCFPF_SKIPLOCALCA 0x00000002
  1174. HRESULT
  1175. myGetConfigFromPicker(
  1176. OPTIONAL IN HWND hwndParent,
  1177. OPTIONAL IN WCHAR const *pwszPrompt,
  1178. OPTIONAL IN WCHAR const *pwszTitle,
  1179. OPTIONAL IN WCHAR const *pwszSharedFolder,
  1180. IN DWORD dwFlags, // GCFPF_*
  1181. IN BOOL fCountOnly,
  1182. OUT DWORD *pdwCACount,
  1183. OUT CRYPTUI_CA_CONTEXT const **ppCAContext);
  1184. HRESULT
  1185. myGetConfigStringFromPicker(
  1186. OPTIONAL IN HWND hwndParent,
  1187. OPTIONAL IN WCHAR const *pwszPrompt,
  1188. OPTIONAL IN WCHAR const *pwszTitle,
  1189. OPTIONAL IN WCHAR const *pwszSharedFolder,
  1190. IN DWORD dwFlags, // GCFPF_*
  1191. OUT WCHAR **ppwszConfig);
  1192. HRESULT
  1193. myDeleteCertRegValueEx(
  1194. OPTIONAL IN WCHAR const *pwszName1,
  1195. OPTIONAL IN WCHAR const *pwszName2,
  1196. OPTIONAL IN WCHAR const *pwszName3,
  1197. OPTIONAL IN WCHAR const *pwszValueName,
  1198. IN BOOL fAbsolutePath);
  1199. HRESULT
  1200. myDeleteCertRegValue(
  1201. OPTIONAL IN WCHAR const *pwszName1,
  1202. OPTIONAL IN WCHAR const *pwszName2,
  1203. OPTIONAL IN WCHAR const *pwszName3,
  1204. OPTIONAL IN WCHAR const *pwszValueName);
  1205. HRESULT
  1206. myDeleteCertRegKeyEx(
  1207. OPTIONAL IN WCHAR const *pwszName1,
  1208. OPTIONAL IN WCHAR const *pwszName2,
  1209. OPTIONAL IN WCHAR const *pwszName3,
  1210. IN BOOL fConfigLevel);
  1211. HRESULT
  1212. myDeleteCertRegKey(
  1213. OPTIONAL IN WCHAR const *pwszName1,
  1214. OPTIONAL IN WCHAR const *pwszName2,
  1215. OPTIONAL IN WCHAR const *pwszName3);
  1216. HRESULT
  1217. myCreateCertRegKeyEx(
  1218. IN BOOL fUpgrade,
  1219. OPTIONAL IN WCHAR const *pwszName1,
  1220. OPTIONAL IN WCHAR const *pwszName2,
  1221. OPTIONAL IN WCHAR const *pwszName3);
  1222. HRESULT
  1223. myCreateCertRegKey(
  1224. OPTIONAL IN WCHAR const *pwszName1,
  1225. OPTIONAL IN WCHAR const *pwszName2,
  1226. OPTIONAL IN WCHAR const *pwszName3);
  1227. HRESULT
  1228. mySetCertRegValue(
  1229. OPTIONAL IN WCHAR const *pwszMachine,
  1230. OPTIONAL IN WCHAR const *pwszName1,
  1231. OPTIONAL IN WCHAR const *pwszName2,
  1232. OPTIONAL IN WCHAR const *pwszName3,
  1233. IN WCHAR const *pwszValueName,
  1234. IN DWORD const dwValueType,
  1235. IN BYTE const *pbData,
  1236. IN DWORD const cbData,
  1237. IN BOOL fAbsolutePath);
  1238. HRESULT
  1239. mySetCertRegValueEx(
  1240. OPTIONAL IN WCHAR const *pwszMachine,
  1241. OPTIONAL IN WCHAR const *pwszName1,
  1242. OPTIONAL IN WCHAR const *pwszName2,
  1243. OPTIONAL IN WCHAR const *pwszName3,
  1244. IN BOOL fConfigLevel,
  1245. OPTIONAL IN WCHAR const *pwszValueName,
  1246. IN DWORD const dwValueType,
  1247. IN BYTE const *pbData,
  1248. IN DWORD const cbData,
  1249. IN BOOL fAbsolutePath);
  1250. HRESULT
  1251. myGetCertRegValue(
  1252. OPTIONAL IN WCHAR const *pwszMachine,
  1253. OPTIONAL IN WCHAR const *pwszName1,
  1254. OPTIONAL IN WCHAR const *pwszName2,
  1255. OPTIONAL IN WCHAR const *pwszName3,
  1256. IN WCHAR const *pwszValueName,
  1257. OUT BYTE **ppbData, // free using LocalFree
  1258. OPTIONAL OUT DWORD *pcbData,
  1259. OPTIONAL OUT DWORD *pValueType);
  1260. HRESULT
  1261. myGetCertRegValueEx(
  1262. OPTIONAL IN WCHAR const *pwszMachine,
  1263. OPTIONAL IN WCHAR const *pwszName1,
  1264. OPTIONAL IN WCHAR const *pwszName2,
  1265. OPTIONAL IN WCHAR const *pwszName3,
  1266. IN BOOL fConfigLevel,
  1267. IN WCHAR const *pwszValueName,
  1268. OUT BYTE **ppbData,
  1269. OPTIONAL OUT DWORD *pcbData,
  1270. OPTIONAL OUT DWORD *pValueType);
  1271. HRESULT
  1272. mySetCertRegMultiStrValue(
  1273. OPTIONAL IN WCHAR const *pwszName1,
  1274. OPTIONAL IN WCHAR const *pwszName2,
  1275. OPTIONAL IN WCHAR const *pwszName3,
  1276. OPTIONAL IN WCHAR const *pwszValueName,
  1277. IN WCHAR const *pwszzValue);
  1278. HRESULT
  1279. myGetCertRegMultiStrValue(
  1280. OPTIONAL IN WCHAR const *pwszName1,
  1281. OPTIONAL IN WCHAR const *pwszName2,
  1282. OPTIONAL IN WCHAR const *pwszName3,
  1283. OPTIONAL IN WCHAR const *pwszValueName,
  1284. OUT WCHAR **ppwszzValue);
  1285. HRESULT
  1286. mySetCertRegStrValue(
  1287. OPTIONAL IN WCHAR const *pwszName1,
  1288. OPTIONAL IN WCHAR const *pwszName2,
  1289. OPTIONAL IN WCHAR const *pwszName3,
  1290. IN WCHAR const *pwszValueName,
  1291. IN WCHAR const *pwszValue);
  1292. HRESULT
  1293. mySetCertRegStrValueEx(
  1294. IN BOOL fUpgrade,
  1295. OPTIONAL IN WCHAR const *pwszName1,
  1296. OPTIONAL IN WCHAR const *pwszName2,
  1297. OPTIONAL IN WCHAR const *pwszName3,
  1298. OPTIONAL IN WCHAR const *pwszValueName,
  1299. IN WCHAR const *pwszValue);
  1300. HRESULT
  1301. mySetCertRegMultiStrValueEx(
  1302. IN DWORD dwFlags, //CSREG_UPGRADE | CSREG_APPEND
  1303. OPTIONAL IN WCHAR const *pwszName1,
  1304. OPTIONAL IN WCHAR const *pwszName2,
  1305. OPTIONAL IN WCHAR const *pwszName3,
  1306. OPTIONAL IN WCHAR const *pwszValueName,
  1307. IN WCHAR const *pwszzValue);
  1308. HRESULT
  1309. mySetAbsRegMultiStrValue(
  1310. IN WCHAR const *pwszName,
  1311. IN WCHAR const *pwszValueName,
  1312. IN WCHAR const *pwszzValue);
  1313. HRESULT
  1314. mySetAbsRegStrValue(
  1315. IN WCHAR const *pwszName,
  1316. IN WCHAR const *pwszValueName,
  1317. IN WCHAR const *pwszValue);
  1318. HRESULT
  1319. mySetCertRegDWValue(
  1320. OPTIONAL IN WCHAR const *pwszName1,
  1321. OPTIONAL IN WCHAR const *pwszName2,
  1322. OPTIONAL IN WCHAR const *pwszName3,
  1323. IN WCHAR const *pwszValueName,
  1324. IN DWORD const dwValue);
  1325. HRESULT
  1326. mySetCertRegDWValueEx(
  1327. IN BOOL fUpgrade,
  1328. OPTIONAL IN WCHAR const *pwszName1,
  1329. OPTIONAL IN WCHAR const *pwszName2,
  1330. OPTIONAL IN WCHAR const *pwszName3,
  1331. OPTIONAL IN WCHAR const *pwszValueName,
  1332. IN DWORD const dwValue);
  1333. HRESULT
  1334. myGetCertRegBinaryValue(
  1335. OPTIONAL IN WCHAR const *pwszName1,
  1336. OPTIONAL IN WCHAR const *pwszName2,
  1337. OPTIONAL IN WCHAR const *pwszName3,
  1338. IN WCHAR const *pwszValueName,
  1339. OUT BYTE **ppbValue);
  1340. HRESULT
  1341. myGetCertRegStrValue(
  1342. OPTIONAL IN WCHAR const *pwszName1,
  1343. OPTIONAL IN WCHAR const *pwszName2,
  1344. OPTIONAL IN WCHAR const *pwszName3,
  1345. IN WCHAR const *pwszValueName,
  1346. OUT WCHAR **ppwszValue); // free using LocalFree
  1347. HRESULT
  1348. myGetCertRegDWValue(
  1349. OPTIONAL IN WCHAR const *pwszName1,
  1350. OPTIONAL IN WCHAR const *pwszName2,
  1351. OPTIONAL IN WCHAR const *pwszName3,
  1352. IN WCHAR const *pwszValueName,
  1353. OUT DWORD *pdwValue);
  1354. HRESULT
  1355. myCopyCertRegStrValue(
  1356. OPTIONAL IN WCHAR const *pwszSrcName1,
  1357. OPTIONAL IN WCHAR const *pwszSrcName2,
  1358. OPTIONAL IN WCHAR const *pwszSrcName3,
  1359. IN WCHAR const *pwszSrcValueName,
  1360. OPTIONAL IN WCHAR const *pwszDesName1,
  1361. OPTIONAL IN WCHAR const *pwszDesName2,
  1362. OPTIONAL IN WCHAR const *pwszDesName3,
  1363. OPTIONAL IN WCHAR const *pwszDesValueName,
  1364. IN BOOL fMultiStr);
  1365. HRESULT
  1366. myMoveCertRegStrValue(
  1367. OPTIONAL IN WCHAR const *pwszSrcName1,
  1368. OPTIONAL IN WCHAR const *pwszSrcName2,
  1369. OPTIONAL IN WCHAR const *pwszSrcName3,
  1370. IN WCHAR const *pwszSrcValueName,
  1371. OPTIONAL IN WCHAR const *pwszDesName1,
  1372. OPTIONAL IN WCHAR const *pwszDesName2,
  1373. OPTIONAL IN WCHAR const *pwszDesName3,
  1374. OPTIONAL IN WCHAR const *pwszDesValueName,
  1375. IN BOOL fMultiStr);
  1376. HRESULT
  1377. myMoveOrCopyCertRegStrValue(
  1378. OPTIONAL IN WCHAR const *pwszSrcName1,
  1379. OPTIONAL IN WCHAR const *pwszSrcName2,
  1380. OPTIONAL IN WCHAR const *pwszSrcName3,
  1381. IN WCHAR const *pwszSrcValueName,
  1382. OPTIONAL IN WCHAR const *pwszDesName1,
  1383. OPTIONAL IN WCHAR const *pwszDesName2,
  1384. OPTIONAL IN WCHAR const *pwszDesName3,
  1385. OPTIONAL IN WCHAR const *pwszDesValueName,
  1386. IN BOOL fMultiStr,
  1387. IN BOOL fMove);
  1388. HRESULT
  1389. SetSetupStatus(
  1390. OPTIONAL IN WCHAR const *pwszSanitizedCAName,
  1391. IN const DWORD dwFlag,
  1392. IN const BOOL fComplete);
  1393. HRESULT
  1394. GetSetupStatus(
  1395. OPTIONAL IN WCHAR const *pwszSanitizedCAName,
  1396. OUT DWORD *pdwStatus);
  1397. HRESULT
  1398. myGetCASerialNumber(
  1399. IN WCHAR const *pwszSanitizedCAName,
  1400. OUT BYTE **ppbSerialNumber,
  1401. OUT DWORD *cbSerialNumber);
  1402. HRESULT
  1403. myGetColumnDisplayName(
  1404. IN WCHAR const *pwszColumnName,
  1405. OUT WCHAR const **ppwszDisplayName);
  1406. HRESULT
  1407. myGetColumnName(
  1408. IN DWORD Index,
  1409. IN BOOL fDisplayName,
  1410. OUT WCHAR const **ppwszName);
  1411. VOID
  1412. myFreeColumnDisplayNames(VOID);
  1413. typedef struct _CATRANSPROP // Marshalled form
  1414. {
  1415. LONG lPropId;
  1416. LONG lPropFlags;
  1417. ULONG obwszDisplayName;
  1418. } CATRANSPROP;
  1419. typedef struct _CAPROP // Native form
  1420. {
  1421. LONG lPropId;
  1422. LONG lPropFlags;
  1423. WCHAR const *pwszDisplayName;
  1424. } CAPROP;
  1425. HRESULT
  1426. myCAPropGetDisplayName(
  1427. IN LONG lPropId,
  1428. OUT WCHAR const **ppwszDisplayName);
  1429. HRESULT
  1430. myCAPropInfoUnmarshal(
  1431. IN CATRANSPROP const *pCATransPropInfo,
  1432. IN LONG cCAPropInfo,
  1433. IN DWORD cbCATransPropInfo,
  1434. OUT CAPROP **ppCAPropInfo);
  1435. HRESULT
  1436. myCAPropInfoLookup(
  1437. IN CAPROP const *pCAPropInfo,
  1438. IN LONG cCAPropInfo,
  1439. IN LONG lPropId,
  1440. OUT CAPROP const **ppcap);
  1441. // active modules
  1442. HRESULT
  1443. myGetActiveModule(
  1444. OPTIONAL IN WCHAR const *pwszMachine,
  1445. IN WCHAR const *pwszCAName,
  1446. IN BOOL fPolicyModule,
  1447. IN DWORD Index,
  1448. OUT LPOLESTR *ppwszProgIdModule, // CoTaskMem*
  1449. OUT CLSID *pclsidModule);
  1450. // active manage module
  1451. HRESULT
  1452. myGetActiveManageModule(
  1453. OPTIONAL IN WCHAR const *pwszMachine,
  1454. IN WCHAR const *pwszCAName,
  1455. IN BOOL fPolicyModule,
  1456. IN DWORD Index,
  1457. OUT LPOLESTR *ppwszProgIdManageModule, // CoTaskMem*
  1458. OUT CLSID *pclsidManageModule);
  1459. HRESULT
  1460. myFormConfigString(
  1461. IN WCHAR const *pwszServer,
  1462. IN WCHAR const *pwszCAName,
  1463. OUT WCHAR **ppwszConfig);
  1464. HRESULT
  1465. myLoadRCString(
  1466. IN HINSTANCE hInstance,
  1467. IN int iRCId,
  1468. OUT WCHAR **ppwsz);
  1469. #define RORKF_FULLPATH 0x00000001
  1470. #define RORKF_CREATESUBKEYS 0x00000002
  1471. #define RORKF_USERKEY 0x00000004
  1472. #define RORKF_CREATEKEY 0x00000008
  1473. HRESULT
  1474. myRegOpenRelativeKey(
  1475. OPTIONAL IN WCHAR const *pwszConfig,
  1476. IN WCHAR const *pwszRegName,
  1477. IN DWORD Flags, // RORKF_*
  1478. OUT WCHAR **ppwszPath,
  1479. OUT OPTIONAL WCHAR **ppwszName,
  1480. OUT OPTIONAL HKEY *phkey);
  1481. HRESULT
  1482. myFixupRCFilterString(
  1483. IN WCHAR *pwszFilter);
  1484. // NOTE: disappears in release builds
  1485. #define ASSERTVALIDCATYPE(__CATYPE__) \
  1486. CSASSERT( (\
  1487. ENUM_ENTERPRISE_SUBCA == (__CATYPE__) || \
  1488. ENUM_ENTERPRISE_ROOTCA == (__CATYPE__) || \
  1489. ENUM_UNKNOWN_CA == (__CATYPE__) || \
  1490. ENUM_STANDALONE_SUBCA == (__CATYPE__) || \
  1491. ENUM_STANDALONE_ROOTCA == (__CATYPE__) ))
  1492. __inline BOOL
  1493. IsEnterpriseCA(
  1494. IN ENUM_CATYPES CAType)
  1495. {
  1496. // assert we're a valid type
  1497. ASSERTVALIDCATYPE(CAType);
  1498. return(ENUM_ENTERPRISE_SUBCA == CAType || ENUM_ENTERPRISE_ROOTCA == CAType);
  1499. }
  1500. __inline BOOL
  1501. IsStandaloneCA(
  1502. IN ENUM_CATYPES CAType)
  1503. {
  1504. // assert we're a valid type
  1505. ASSERTVALIDCATYPE(CAType);
  1506. return(ENUM_STANDALONE_SUBCA == CAType || ENUM_STANDALONE_ROOTCA == CAType);
  1507. }
  1508. __inline BOOL
  1509. IsRootCA(
  1510. IN ENUM_CATYPES CAType)
  1511. {
  1512. // assert we're a valid type
  1513. ASSERTVALIDCATYPE(CAType);
  1514. return(ENUM_STANDALONE_ROOTCA == CAType || ENUM_ENTERPRISE_ROOTCA == CAType);
  1515. }
  1516. __inline BOOL
  1517. IsSubordinateCA(
  1518. IN ENUM_CATYPES CAType)
  1519. {
  1520. // assert we're a valid type
  1521. ASSERTVALIDCATYPE(CAType);
  1522. return(ENUM_ENTERPRISE_SUBCA == CAType || ENUM_STANDALONE_SUBCA == CAType);
  1523. }
  1524. HRESULT
  1525. myEnablePrivilege(
  1526. IN LPCTSTR szPrivilege,
  1527. IN BOOL fEnable);
  1528. HRESULT
  1529. myDeleteFilePattern(
  1530. IN WCHAR const *pwszDir,
  1531. OPTIONAL IN WCHAR const *pwszPattern, // defaults to L"*.*"
  1532. IN BOOL fRecurse);
  1533. HRESULT
  1534. myRemoveFilesAndDirectory(
  1535. IN WCHAR const *pwszPath,
  1536. IN BOOL fRecurse);
  1537. HRESULT
  1538. myCreateNestedDirectories(
  1539. WCHAR const *pwszDirectory);
  1540. #define VFF_CREATEVROOTS 0x00000001
  1541. #define VFF_CREATEFILESHARES 0x00000002
  1542. #define VFF_DELETEVROOTS 0x00000004
  1543. #define VFF_DELETEFILESHARES 0x00000008
  1544. #define VFF_SETREGFLAGFIRST 0x00000010
  1545. #define VFF_CHECKREGFLAGFIRST 0x00000020
  1546. #define VFF_CLEARREGFLAGFIRST 0x00000040
  1547. #define VFF_CLEARREGFLAGIFOK 0x00000100
  1548. #define VFF_SETRUNONCEIFERROR 0x00000200
  1549. #define VFF_ENABLEASP 0x00000400
  1550. #define VFCSEC_TIMEOUT 15 // Recommended timeout in seconds
  1551. #define VFD_NOACTION 0
  1552. #define VFD_CREATED 1
  1553. #define VFD_DELETED 2
  1554. #define VFD_EXISTS 3
  1555. #define VFD_NOTFOUND 4
  1556. #define VFD_CREATEERROR 5
  1557. #define VFD_DELETEERROR 6
  1558. #define VFD_NOTSUPPORTED 7
  1559. #define VFD_VERIFYERROR 8
  1560. HRESULT
  1561. myModifyVirtualRootsAndFileShares(
  1562. IN DWORD Flags, // VFF_*: Create/Delete VRoots and/or Shares
  1563. IN ENUM_CATYPES CAType, // CA Type
  1564. IN BOOL fAsynchronous, // block during call?
  1565. IN DWORD csecTimeOut, // 0 implies synchronous call
  1566. OPTIONAL OUT DWORD *pVRootDisposition, // VFD_*
  1567. OPTIONAL OUT DWORD *pShareDisposition); // VFD_*
  1568. HRESULT
  1569. myAddShare(
  1570. IN LPCWSTR szShareName,
  1571. IN LPCWSTR szShareDescr,
  1572. IN LPCWSTR szSharePath,
  1573. IN BOOL fOverwrite,
  1574. OPTIONAL OUT BOOL *pfCreated);
  1575. typedef struct {
  1576. HINSTANCE hInstance; // instance handle
  1577. HWND hDlg; // dialog handle
  1578. HWND hwndComputerEdit; // control handle of computer edit
  1579. HWND hwndCAList; // control handle of ca list control
  1580. WNDPROC pfnUICASelectionComputerWndProcs; // computer edit win procs
  1581. // info on selected CA
  1582. ENUM_CATYPES CAType;
  1583. bool fWebProxySetup;
  1584. bool fSkipLocalCA;
  1585. } CERTSRVUICASELECTION;
  1586. LRESULT CALLBACK
  1587. myUICASelectionComputerEditFilterHook(
  1588. HWND hwndComputer,
  1589. UINT iMsg,
  1590. WPARAM wParam,
  1591. LPARAM lParam);
  1592. #define UNC_PATH 1
  1593. #define LOCAL_PATH 2
  1594. BOOL
  1595. myIsFullPath(
  1596. IN WCHAR const *pwszPath,
  1597. OUT DWORD *pdwFlag);
  1598. HRESULT
  1599. myUICAHandleCABrowseButton(
  1600. CERTSRVUICASELECTION *pData,
  1601. IN BOOL fUseDS,
  1602. OPTIONAL IN int idsPickerTitle,
  1603. OPTIONAL IN int idsPickerSubTitle,
  1604. OPTIONAL OUT WCHAR **ppwszSharedFolder);
  1605. HRESULT
  1606. myUICAHandleCAListDropdown(
  1607. IN int iNotification,
  1608. IN OUT CERTSRVUICASELECTION *pData,
  1609. IN OUT BOOL *pfComputerChange);
  1610. HRESULT
  1611. myUICASelectionValidation(
  1612. CERTSRVUICASELECTION *pData,
  1613. BOOL *pfValidate);
  1614. HRESULT
  1615. myInitUICASelectionControls(
  1616. IN OUT CERTSRVUICASELECTION *pUICASelection,
  1617. IN HINSTANCE hInstance,
  1618. IN HWND hDlg,
  1619. IN HWND hwndBrowseButton,
  1620. IN HWND hwndComputerEdit,
  1621. IN HWND hwndCAList,
  1622. IN BOOL fDSCA,
  1623. OUT BOOL *pfCAsExist);
  1624. HRESULT
  1625. myUICASelectionUpdateCAList(
  1626. HWND hwndList,
  1627. WCHAR const *pwszzCAList);
  1628. HRESULT
  1629. myUICAConditionallyDisplayEnterpriseWarning(
  1630. IN CERTSRVUICASELECTION *pData);
  1631. char PrintableChar(char ch);
  1632. HRESULT
  1633. myGetMapiInfo(
  1634. OPTIONAL IN WCHAR const *pwszServerName,
  1635. OUT WCHAR **ppwszProfileName,
  1636. OUT WCHAR **ppwszLogonName,
  1637. OUT WCHAR **ppwszPassword);
  1638. HRESULT
  1639. mySaveMapiInfo(
  1640. OPTIONAL IN WCHAR const *pwszServerName,
  1641. OUT WCHAR const *pwszProfileName,
  1642. OUT WCHAR const *pwszLogonName,
  1643. OUT WCHAR const *pwszPassword);
  1644. #define cwcFILENAMESUFFIXMAX 20
  1645. #define cwcSUFFIXMAX (1 + 5 + 1) // five decimal digits plus parentheses
  1646. #define wszFCSAPARM_SERVERDNSNAME L"%1"
  1647. #define wszFCSAPARM_SERVERSHORTNAME L"%2"
  1648. #define wszFCSAPARM_SANITIZEDCANAME L"%3"
  1649. #define wszFCSAPARM_CERTFILENAMESUFFIX L"%4"
  1650. #define wszFCSAPARM_DOMAINDN L"%5"
  1651. #define wszFCSAPARM_CONFIGDN L"%6"
  1652. #define wszFCSAPARM_SANITIZEDCANAMEHASH L"%7"
  1653. #define wszFCSAPARM_CRLFILENAMESUFFIX L"%8"
  1654. #define wszFCSAPARM_CRLDELTAFILENAMESUFFIX L"%9"
  1655. #define wszFCSAPARM_DSCRLATTRIBUTE L"%10"
  1656. #define wszFCSAPARM_DSCACERTATTRIBUTE L"%11"
  1657. #define wszFCSAPARM_DSUSERCERTATTRIBUTE L"%12"
  1658. #define wszFCSAPARM_DSKRACERTATTRIBUTE L"%13"
  1659. #define wszFCSAPARM_DSCROSSCERTPAIRATTRIBUTE L"%14"
  1660. HRESULT
  1661. myFormatCertsrvStringArray(
  1662. IN BOOL fURL,
  1663. IN LPCWSTR pwszServerName_p1_2,
  1664. IN LPCWSTR pwszSanitizedName_p3_7,
  1665. IN DWORD iCert_p4,
  1666. IN DWORD iCertTarget_p4,
  1667. IN LPCWSTR pwszDomainDN_p5,
  1668. IN LPCWSTR pwszConfigDN_p6,
  1669. IN DWORD iCRL_p8,
  1670. IN BOOL fDeltaCRL_p9,
  1671. IN BOOL fDSAttrib_p10_11,
  1672. IN DWORD cStrings,
  1673. IN LPCWSTR *apwszStringsIn,
  1674. OUT LPWSTR *apwszStringsOut);
  1675. HRESULT
  1676. myUncanonicalizeURLParm(
  1677. IN WCHAR const *pwszParmIn,
  1678. OUT WCHAR **ppwszParmOut);
  1679. HRESULT
  1680. myAllocIndexedName(
  1681. IN WCHAR const *pwszName,
  1682. IN DWORD Index,
  1683. IN DWORD IndexTarget,
  1684. OUT WCHAR **ppwszIndexedName);
  1685. HRESULT
  1686. myUIGetWindowText(
  1687. IN HWND hwndCtrl,
  1688. OUT WCHAR **ppwszText);
  1689. HRESULT
  1690. myGetSaveFileName(
  1691. IN HWND hwndOwner,
  1692. IN HINSTANCE hInstance,
  1693. OPTIONAL IN int iRCTitle,
  1694. OPTIONAL IN int iRCFilter,
  1695. OPTIONAL IN int iRCDefExt,
  1696. OPTIONAL IN DWORD Flags, //see OPENFILENAME Flags
  1697. OPTIONAL IN WCHAR const *pwszDefaultFile,
  1698. OUT WCHAR **ppwszFile);
  1699. HRESULT
  1700. myGetOpenFileName(
  1701. IN HWND hwndOwner,
  1702. IN HINSTANCE hInstance,
  1703. OPTIONAL IN int iRCTitle,
  1704. OPTIONAL IN int iRCFilter,
  1705. OPTIONAL IN int iRCDefExt,
  1706. OPTIONAL IN DWORD Flags, //see OPENFILENAME Flags
  1707. OPTIONAL IN WCHAR const *pwszDefaultFile,
  1708. OUT WCHAR **ppwszFile);
  1709. HRESULT
  1710. myGetSaveFileNameEx(
  1711. IN HWND hwndOwner,
  1712. IN HINSTANCE hInstance,
  1713. OPTIONAL IN int iRCTitle,
  1714. OPTIONAL IN WCHAR const *pwszTitleInsert,
  1715. OPTIONAL IN int iRCFilter,
  1716. OPTIONAL IN int iRCDefExt,
  1717. OPTIONAL IN DWORD Flags, //see OPENFILENAME Flags
  1718. OPTIONAL IN WCHAR const *pwszDefaultFile,
  1719. OUT WCHAR **ppwszFile);
  1720. HRESULT
  1721. myGetOpenFileNameEx(
  1722. IN HWND hwndOwner,
  1723. IN HINSTANCE hInstance,
  1724. OPTIONAL IN int iRCTitle,
  1725. OPTIONAL IN WCHAR const *pwszTitleInsert,
  1726. OPTIONAL IN int iRCFilter,
  1727. OPTIONAL IN int iRCDefExt,
  1728. OPTIONAL IN DWORD Flags, //see OPENFILENAME Flags
  1729. OPTIONAL IN WCHAR const *pwszDefaultFile,
  1730. OUT WCHAR **ppwszFile);
  1731. int
  1732. myWtoI(
  1733. IN WCHAR const *pwszDigitString,
  1734. OUT BOOL *pfValid);
  1735. HRESULT
  1736. myFormCertRegPath(
  1737. IN WCHAR const *pwszName1,
  1738. IN WCHAR const *pwszName2,
  1739. IN WCHAR const *pwszName3,
  1740. IN BOOL fConfigLevel, // from CertSrv if FALSE
  1741. OUT WCHAR **ppwszPath);
  1742. HRESULT
  1743. myGetEnvString(
  1744. OUT WCHAR **ppwszOut,
  1745. IN WCHAR const *pwszVariable);
  1746. typedef HRESULT (FNMYINFGETEXTENSION)(
  1747. IN HINF hInf,
  1748. OUT CERT_EXTENSION *pext);
  1749. FNMYINFGETEXTENSION myInfGetPolicyConstraintsExtension;
  1750. FNMYINFGETEXTENSION myInfGetPolicyMappingExtension;
  1751. FNMYINFGETEXTENSION myInfGetPolicyStatementExtension;
  1752. FNMYINFGETEXTENSION myInfGetApplicationPolicyConstraintsExtension;
  1753. FNMYINFGETEXTENSION myInfGetApplicationPolicyMappingExtension;
  1754. FNMYINFGETEXTENSION myInfGetApplicationPolicyStatementExtension;
  1755. FNMYINFGETEXTENSION myInfGetNameConstraintsExtension;
  1756. FNMYINFGETEXTENSION myInfGetEnhancedKeyUsageExtension;
  1757. FNMYINFGETEXTENSION myInfGetBasicConstraints2CAExtension;
  1758. FNMYINFGETEXTENSION myInfGetBasicConstraints2CAExtensionOrDefault;
  1759. FNMYINFGETEXTENSION myInfGetCrossCertDistributionPointsExtension;
  1760. WCHAR *
  1761. myInfGetError();
  1762. VOID
  1763. myInfClearError();
  1764. HRESULT
  1765. myInfGetUnreferencedSectionNames(
  1766. OUT WCHAR **ppwszzSectionNames);
  1767. HRESULT
  1768. myInfOpenFile(
  1769. OPTIONAL IN WCHAR const *pwszfnPolicy,
  1770. OUT HINF *phInf,
  1771. OUT DWORD *pErrorLine);
  1772. VOID
  1773. myInfCloseFile(
  1774. IN HINF hInf);
  1775. HRESULT
  1776. myInfGetCRLDistributionPoints(
  1777. IN HINF hInf,
  1778. OUT BOOL *pfCritical,
  1779. OUT WCHAR **ppwszz);
  1780. HRESULT
  1781. myInfGetAuthorityInformationAccess(
  1782. IN HINF hInf,
  1783. OUT BOOL *pfCritical,
  1784. OUT WCHAR **ppwszz);
  1785. HRESULT
  1786. myInfGetEnhancedKeyUsage(
  1787. IN HINF hInf,
  1788. OUT BOOL *pfCritical,
  1789. OUT WCHAR **ppwszz);
  1790. HRESULT
  1791. myInfGetValidityPeriod(
  1792. IN HINF hInf,
  1793. OPTIONAL IN WCHAR const *pwszValidityPeriodCount,
  1794. OPTIONAL IN WCHAR const *pwszValidityPeriodString,
  1795. OUT DWORD *pdwValidityPeriodCount,
  1796. OUT ENUM_PERIOD *penumValidityPeriod,
  1797. OPTIONAL OUT BOOL *pfSwap);
  1798. HRESULT
  1799. myInfGetCRLPublicationParams(
  1800. IN HINF hInf,
  1801. IN WCHAR const *pwszKeyCRLPeriodString,
  1802. IN WCHAR const *pwszKeyCRLPeriodCount,
  1803. OUT WCHAR **ppwszCRLPeriodString,
  1804. OUT DWORD *pdwCRLPeriodCount);
  1805. HRESULT
  1806. myInfGetKeyLength(
  1807. IN HINF hInf,
  1808. OUT DWORD *pdwKeyLength);
  1809. HRESULT
  1810. myInfParseBooleanValue(
  1811. IN WCHAR const *pwszValue,
  1812. OUT BOOL *pfValue);
  1813. HRESULT
  1814. myInfGetNumericKeyValue(
  1815. IN HINF hInf,
  1816. IN BOOL fLog,
  1817. IN WCHAR const *pwszSection,
  1818. IN WCHAR const *pwszKey,
  1819. IN DWORD Index,
  1820. IN BOOL fLastValue,
  1821. OUT DWORD *pdwValue);
  1822. HRESULT
  1823. myInfGetBooleanValue(
  1824. IN HINF hInf,
  1825. IN WCHAR const *pwszSection,
  1826. IN WCHAR const *pwszKey,
  1827. IN BOOL fIgnoreMissingKey,
  1828. OUT BOOL *pfValue);
  1829. HRESULT
  1830. myInfGetKeyValue(
  1831. IN HINF hInf,
  1832. IN BOOL fLog,
  1833. IN WCHAR const *pwszSection,
  1834. IN WCHAR const *pwszKey,
  1835. IN DWORD Index,
  1836. IN BOOL fLastValue,
  1837. OUT WCHAR **ppwszValue);
  1838. HRESULT
  1839. myInfGetKeyList(
  1840. IN HINF hInf,
  1841. IN WCHAR const *pwszSection,
  1842. OPTIONAL IN WCHAR const *pwszKey,
  1843. OPTIONAL WCHAR const * const *ppwszValidKeys,
  1844. OPTIONAL OUT BOOL *pfCritical,
  1845. OPTIONAL OUT WCHAR **ppwszz);
  1846. typedef struct _INFVALUES
  1847. {
  1848. WCHAR *pwszKey;
  1849. DWORD cValues;
  1850. WCHAR **rgpwszValues;
  1851. } INFVALUES;
  1852. HRESULT
  1853. myInfGetSectionValues(
  1854. IN HINF hInf,
  1855. IN WCHAR const *pwszSection,
  1856. OUT DWORD *pcInfValues,
  1857. OUT INFVALUES **prgInfValues);
  1858. VOID
  1859. myInfFreeSectionValues(
  1860. IN DWORD cInfValues,
  1861. IN OUT INFVALUES *rgInfValues);
  1862. HRESULT
  1863. myInfGetRequestAttributes(
  1864. IN HINF hInf,
  1865. OUT DWORD *pcAttribute,
  1866. OUT CRYPT_ATTR_BLOB **ppaAttribute,
  1867. OUT WCHAR **ppwszTemplateName);
  1868. HRESULT
  1869. myInfGetEnableKeyCounting(
  1870. IN HINF hInf,
  1871. OUT BOOL *pfValue);
  1872. VOID
  1873. myInfFreeRequestAttributes(
  1874. IN DWORD cAttribute,
  1875. IN OUT CRYPT_ATTR_BLOB *paAttribute);
  1876. VOID
  1877. myInfFreeExtensions(
  1878. IN DWORD cExt,
  1879. IN CERT_EXTENSION *rgExt);
  1880. HRESULT
  1881. myInfGetExtensions(
  1882. IN HINF hInf,
  1883. OUT DWORD *pcExt,
  1884. OUT CERT_EXTENSION **ppExt);
  1885. VOID
  1886. myPackExtensionArray(
  1887. IN BOOL fFreeData,
  1888. IN OUT DWORD *pcExt,
  1889. IN OUT CERT_EXTENSION **prgExt);
  1890. HRESULT
  1891. myMergeExtensions(
  1892. IN DWORD cExtOrg,
  1893. IN CERT_EXTENSION *rgExtOrg,
  1894. IN DWORD cExtInf,
  1895. IN CERT_EXTENSION *rgExtInf,
  1896. OUT DWORD *pcExtMerged,
  1897. OUT CERT_EXTENSION **prgExtMerged);
  1898. HRESULT
  1899. myBuildOSVersionAttribute(
  1900. OUT BYTE **ppbVersion,
  1901. OUT DWORD *pcbVersion);
  1902. WCHAR const *
  1903. myFixTemplateCase(
  1904. IN WCHAR const *pwszCertType);
  1905. HRESULT
  1906. myBuildCertTypeExtension(
  1907. IN WCHAR const *pwszCertType,
  1908. OUT CERT_EXTENSION *pExt);
  1909. HRESULT
  1910. myParseNextAttribute(
  1911. IN OUT WCHAR **ppwszBuf,
  1912. IN BOOL fURL,
  1913. OUT WCHAR const **ppwszName,
  1914. OUT WCHAR const **ppwszValue);
  1915. HRESULT
  1916. myParseIPAddress(
  1917. IN WCHAR const *pwszValue,
  1918. OUT BYTE *pbData,
  1919. OUT DWORD *pcbData);
  1920. #define CUCS_MYSTORE 0x00000001
  1921. #define CUCS_CASTORE 0x00000002
  1922. #define CUCS_KRASTORE 0x00000004
  1923. #define CUCS_ROOTSTORE 0x00000008
  1924. #define CUCS_MACHINESTORE 0x00010000
  1925. #define CUCS_USERSTORE 0x00020000
  1926. #define CUCS_DSSTORE 0x00040000
  1927. #define CUCS_V1ONLY 0x04000000
  1928. #define CUCS_V3ONLY 0x08000000
  1929. #define CUCS_ARCHIVED 0x10000000
  1930. #define CUCS_USAGEREQUIRED 0x20000000
  1931. #define CUCS_SILENT 0x40000000
  1932. #define CUCS_PRIVATEKEYREQUIRED 0x80000000
  1933. #define CUCS_USAGEKEYENCIPHER 0x02000000
  1934. HRESULT
  1935. myGetCertificateFromPicker(
  1936. OPTIONAL IN HINSTANCE hInstance,
  1937. OPTIONAL IN HWND hwndParent,
  1938. OPTIONAL IN int idTitle,
  1939. OPTIONAL IN int idSubTitle,
  1940. IN DWORD dwFlags, // CUCS_*
  1941. OPTIONAL IN WCHAR const *pwszCommonName,
  1942. OPTIONAL IN DWORD cStore,
  1943. OPTIONAL IN HCERTSTORE *rghStore,
  1944. IN DWORD cpszObjId,
  1945. OPTIONAL IN CHAR const * const *apszObjId,
  1946. OUT CERT_CONTEXT const **ppCert);
  1947. HRESULT
  1948. myGetKRACertificateFromPicker(
  1949. OPTIONAL IN HINSTANCE hInstance,
  1950. OPTIONAL IN HWND hwndParent,
  1951. OPTIONAL IN int idTitle,
  1952. OPTIONAL IN int idSubTitle,
  1953. OPTIONAL IN WCHAR const *pwszCommonName,
  1954. IN BOOL fUseDS,
  1955. IN BOOL fSilent,
  1956. OUT CERT_CONTEXT const **ppCert);
  1957. HRESULT
  1958. myGetERACertificateFromPicker(
  1959. OPTIONAL IN HINSTANCE hInstance,
  1960. OPTIONAL IN HWND hwndParent,
  1961. OPTIONAL IN int idTitle,
  1962. OPTIONAL IN int idSubTitle,
  1963. OPTIONAL IN WCHAR const *pwszCommonName,
  1964. IN BOOL fSilent,
  1965. OUT CERT_CONTEXT const **ppCert);
  1966. HRESULT
  1967. myMakeSerialBstr(
  1968. IN WCHAR const *pwszSerialNumber,
  1969. OUT BSTR *pstrSerialNumber);
  1970. HRESULT
  1971. myNameBlobMatch(
  1972. IN CERT_NAME_BLOB const *pSubject,
  1973. IN WCHAR const *pwszCertName,
  1974. IN BOOL fAllowMissingCN,
  1975. OUT BOOL *pfMatch);
  1976. HRESULT
  1977. mySerialNumberMatch(
  1978. IN CRYPT_INTEGER_BLOB const *pSerialNumber,
  1979. IN WCHAR const *pwszSerialNumber,
  1980. OUT BOOL *pfMatch);
  1981. HRESULT
  1982. myCertHashMatch(
  1983. IN CERT_CONTEXT const *pCert,
  1984. IN DWORD cb,
  1985. IN BYTE const *pb,
  1986. OUT BOOL *pfMatch);
  1987. HRESULT
  1988. myCertMatch(
  1989. IN CERT_CONTEXT const *pCert,
  1990. IN WCHAR const *pwszCertName,
  1991. IN BOOL fAllowMissingCN,
  1992. OPTIONAL IN BYTE const *pbHash,
  1993. IN DWORD cbHash,
  1994. OPTIONAL IN WCHAR const *pwszSerialNumber,
  1995. OUT BOOL *pfMatch);
  1996. HRESULT
  1997. myCRLHashMatch(
  1998. IN CRL_CONTEXT const *pCRL,
  1999. IN DWORD cb,
  2000. IN BYTE const *pb,
  2001. OUT BOOL *pfMatch);
  2002. HRESULT
  2003. myCRLMatch(
  2004. IN CRL_CONTEXT const *pCRL,
  2005. IN WCHAR const *pwszCRLName,
  2006. IN BOOL fAllowMissingCN,
  2007. OPTIONAL IN BYTE const *pbHash,
  2008. IN DWORD cbHash,
  2009. OUT BOOL *pfMatch);
  2010. HRESULT
  2011. myCTLMatch(
  2012. IN CTL_CONTEXT const *pCTL,
  2013. OPTIONAL IN BYTE const *pbHash,
  2014. IN DWORD cbHash,
  2015. OUT BOOL *pfMatch);
  2016. HRESULT
  2017. myCertMatchEKUOrApplicationPolicies(
  2018. IN CERT_CONTEXT const *pCert,
  2019. IN DWORD cpszObjId,
  2020. IN CHAR const * const *apszObjId,
  2021. IN BOOL fUsageRequired,
  2022. OUT BOOL *pfMatch);
  2023. HRESULT
  2024. myLoadPrivateKey(
  2025. IN CERT_PUBLIC_KEY_INFO const *pPubKeyInfo,
  2026. IN DWORD dwFlags, // CUCS_*
  2027. OUT HCRYPTPROV *phProv,
  2028. OUT DWORD *pdwKeySpec,
  2029. OUT BOOL *pfCallerFreeProv);
  2030. HRESULT
  2031. myLoadPrivateKeyFromCertStores(
  2032. IN CERT_PUBLIC_KEY_INFO const *pPubKeyInfo,
  2033. IN DWORD cStore,
  2034. IN HCERTSTORE *rghStore,
  2035. OUT HCRYPTPROV *phProv,
  2036. OUT DWORD *pdwKeySpec,
  2037. OUT BOOL *pfCallerFreeProv);
  2038. HRESULT
  2039. myOpenCertStores(
  2040. IN DWORD dwFlags, // CUCS_*
  2041. OUT DWORD *pcStore,
  2042. OUT HCERTSTORE **prghStore);
  2043. VOID
  2044. myCloseCertStores(
  2045. IN DWORD cStore,
  2046. IN HCERTSTORE *rghStore);
  2047. #define DECF_FORCEOVERWRITE 0x00000100
  2048. HRESULT
  2049. DecodeFileW(
  2050. IN WCHAR const *pwszfn,
  2051. OUT BYTE **ppbOut,
  2052. OUT DWORD *pcbOut,
  2053. IN DWORD Flags);
  2054. HRESULT
  2055. EncodeToFileW(
  2056. IN WCHAR const *pwszfn,
  2057. IN BYTE const *pbIn,
  2058. IN DWORD cbIn,
  2059. IN DWORD Flags);
  2060. HRESULT
  2061. DecodeCertString(
  2062. IN BSTR const bstrIn,
  2063. IN DWORD Flags,
  2064. OUT BYTE **ppbOut,
  2065. OUT DWORD *pcbOut);
  2066. HRESULT
  2067. EncodeCertString(
  2068. IN BYTE const *pbIn,
  2069. IN DWORD cbIn,
  2070. IN DWORD Flags,
  2071. OUT BSTR *pbstrOut);
  2072. HRESULT
  2073. WszToMultiByteIntegerBuf(
  2074. IN BOOL fOctetString,
  2075. IN WCHAR const *pwszIn,
  2076. IN OUT DWORD *pcbOut,
  2077. OPTIONAL OUT BYTE const *pbOut);
  2078. HRESULT
  2079. WszToMultiByteInteger(
  2080. IN BOOL fOctetString,
  2081. IN WCHAR const *pwszIn,
  2082. OUT DWORD *pcbOut,
  2083. OUT BYTE **ppbOut);
  2084. HRESULT
  2085. myGetSecurityDescriptorDacl(
  2086. IN PSECURITY_DESCRIPTOR pSD,
  2087. OUT PACL *ppDacl); // no free
  2088. HRESULT
  2089. myRegValueToVariant(
  2090. IN DWORD dwType,
  2091. IN DWORD cbValue,
  2092. IN BYTE const *pbValue,
  2093. OUT VARIANT *pVar);
  2094. HRESULT
  2095. myVariantToRegValue(
  2096. IN VARIANT const *pvarPropertyValue,
  2097. OUT DWORD *pdwType,
  2098. OUT DWORD *pcbprop,
  2099. OUT BYTE **ppbprop);
  2100. // are we the Whistler version?
  2101. BOOL IsWhistler(VOID);
  2102. // should we run advanced functionality?
  2103. BOOL FIsAdvancedServer(VOID);
  2104. // should we be running at all?
  2105. BOOL FIsServer(VOID);
  2106. HRESULT
  2107. myAddLogSourceToRegistry(
  2108. IN LPWSTR pwszMsgDLL,
  2109. IN LPWSTR pwszApp);
  2110. #define LOCAL_FREE(ptr) \
  2111. if(NULL != ptr) \
  2112. LocalFree(ptr)
  2113. inline bool EmptyString(LPCWSTR pwszString)
  2114. {
  2115. return((NULL == pwszString || L'\0' == *pwszString)? true : false);
  2116. }
  2117. HRESULT
  2118. myOIDHashOIDToString(
  2119. IN WCHAR const *pwszOID,
  2120. OUT WCHAR **ppwsz);
  2121. LPCWSTR
  2122. myCAGetDN(
  2123. IN HCAINFO hCAInfo);
  2124. HRESULT
  2125. myIsCurrentUserBuiltinAdmin(
  2126. OUT bool *pfIsMember);
  2127. HRESULT
  2128. mySetRegistryLocalPathString(
  2129. IN HKEY hkey,
  2130. IN WCHAR const *pwszRegValueName,
  2131. IN WCHAR const *pwszUNCPath);
  2132. HRESULT
  2133. myLocalMachineIsDomainMember(
  2134. OUT bool *pfIsDomainMember);
  2135. HRESULT
  2136. myComputeMAC(
  2137. IN WCHAR const *pcwsFileName,
  2138. OUT WCHAR **ppwszMAC);
  2139. HRESULT IsASPEnabledInIIS(
  2140. bool& rfEnabled);
  2141. HRESULT EnableASPInIIS(
  2142. OUT BOOL *pfEnabledASP);
  2143. HRESULT
  2144. EnableISAPIExtension(
  2145. IN LPCWSTR pcwszExtension,
  2146. OUT BOOL *pfEnabledASP);
  2147. HRESULT IsISAPIExtensionEnabled(
  2148. LPCWSTR pcwszExtension,
  2149. bool& rfEnabled);
  2150. HRESULT EnableASPInIIS_New(
  2151. OUT BOOL *pfEnabledASP);
  2152. HRESULT IsASPEnabledInIIS_New(
  2153. bool& rfEnabled);
  2154. HRESULT
  2155. SetCertSrvASPDependency();
  2156. HRESULT myFindCertTypeByNameOrOID(
  2157. IN const HCERTTYPE &hCertTypeList,
  2158. IN OPTIONAL LPCWSTR pcwszCertName,
  2159. IN OPTIONAL LPCWSTR pcwszCertOID,
  2160. OUT HCERTTYPE& hCertType);
  2161. HRESULT
  2162. myGetCertSubjectField(
  2163. IN CERT_CONTEXT const *pCert,
  2164. IN LPCSTR pcszFieldOID,
  2165. OUT WCHAR **ppwszField);
  2166. HRESULT
  2167. myCertGetEnhancedKeyUsage(
  2168. IN CERT_CONTEXT const *pcc,
  2169. IN DWORD dwFlags,
  2170. OUT CERT_ENHKEY_USAGE **ppUsage);
  2171. HRESULT
  2172. myEncodeUTF8(
  2173. IN WCHAR const *pwszIn,
  2174. OUT BYTE **ppbOut,
  2175. OUT DWORD *pcbOut);
  2176. HRESULT
  2177. myEncodeOtherNameBinary(
  2178. IN WCHAR const *pwszIn,
  2179. OUT BYTE **ppbOut,
  2180. OUT DWORD *pcbOut);
  2181. VOID
  2182. myZeroDataString(
  2183. IN WCHAR *pwsz);
  2184. VOID
  2185. myZeroDataStringA(
  2186. IN char *psz);
  2187. ///////////////////////////////////////////////////////////////////////////////
  2188. // ConvertToString*
  2189. HRESULT ConvertToStringI2I4(
  2190. LONG lVal,
  2191. LPWSTR *ppwszOut);
  2192. HRESULT ConvertToStringUI2UI4(
  2193. ULONG ulVal,
  2194. LPWSTR *ppwszOut);
  2195. HRESULT ConvertToStringUI8(
  2196. ULARGE_INTEGER *puliVal,
  2197. LPWSTR *ppwszOut);
  2198. HRESULT ConvertToStringWSZ(
  2199. LPCWSTR pcwszVal,
  2200. LPWSTR *ppwszOut,
  2201. bool fDoublePercentsInString = false);
  2202. HRESULT ConvertToStringArrayUI1(
  2203. LPSAFEARRAY psa,
  2204. LPWSTR *ppwszOut);
  2205. HRESULT ConvertToStringArrayBSTR(
  2206. LPSAFEARRAY psa,
  2207. LPWSTR *ppwszOut,
  2208. bool fDoublePercentsInString = false);
  2209. HRESULT DoublePercentsInString(
  2210. LPCWSTR pcwszIn,
  2211. LPWSTR *ppwszOut);
  2212. HRESULT ConvertToStringDATE(
  2213. IN DATE const *pDate,
  2214. IN BOOL fGMT,
  2215. OUT LPWSTR *ppwszOut);
  2216. // ConvertToString*
  2217. ///////////////////////////////////////////////////////////////////////////////
  2218. HRESULT
  2219. myRegQueryValueEx(
  2220. IN HKEY hKey,
  2221. IN LPCTSTR pwszValueName,
  2222. OUT LPDWORD pValueType,
  2223. OUT LPBYTE *ppbData,
  2224. OUT LPDWORD pcbData);
  2225. HRESULT
  2226. myGetSidFromRid(
  2227. DWORD dwGroupRid,
  2228. OPTIONAL PSID *ppSid,
  2229. OPTIONAL LPWSTR* ppwszSid);
  2230. HRESULT
  2231. myConvertAppPoliciesToEKU(
  2232. IN BYTE * pbAppPolicies,
  2233. IN DWORD cbAppPolicies,
  2234. OUT BYTE **ppbEKU,
  2235. OUT DWORD *pcbEKU);
  2236. using namespace CertSrv;
  2237. #endif // __CERTLIB_H__