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.

486 lines
16 KiB

  1. //+--------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. // Copyright (C) Microsoft Corporation, 1996 - 1999
  5. //
  6. // File: column.cpp
  7. //
  8. // Contents: CertCli implementation
  9. //
  10. //---------------------------------------------------------------------------
  11. #include "pch.cpp"
  12. #pragma hdrstop
  13. #include <common.ver>
  14. #include "csprop.h"
  15. #include "resource.h"
  16. #define __dwFILE__ __dwFILE_CERTCLI_COLUMN_CPP__
  17. extern HINSTANCE g_hInstance;
  18. typedef struct _COLUMNTRANSLATE
  19. {
  20. WCHAR const *pwszColumnName;
  21. DWORD idMsgDisplayName;
  22. WCHAR const *pwszDisplayName;
  23. } COLUMNTRANSLATE;
  24. COLUMNTRANSLATE g_aColTable[] =
  25. {
  26. { wszPROPREQUESTDOT wszPROPREQUESTREQUESTID, IDS_COLUMN_REQUESTID, },
  27. { wszPROPREQUESTDOT wszPROPREQUESTRAWREQUEST, IDS_COLUMN_REQUESTRAWREQUEST, },
  28. { wszPROPREQUESTDOT wszPROPREQUESTRAWARCHIVEDKEY, IDS_COLUMN_REQUESTRAWARCHIVEDKEY, },
  29. { wszPROPREQUESTDOT wszPROPREQUESTKEYRECOVERYHASHES, IDS_COLUMN_REQUESTKEYRECOVERYHASHES, },
  30. { wszPROPREQUESTDOT wszPROPREQUESTRAWOLDCERTIFICATE, IDS_COLUMN_REQUESTRAWOLDCERTIFICATE, },
  31. { wszPROPREQUESTDOT wszPROPREQUESTATTRIBUTES, IDS_COLUMN_REQUESTATTRIBUTES, },
  32. { wszPROPREQUESTDOT wszPROPREQUESTTYPE, IDS_COLUMN_REQUESTTYPE, },
  33. { wszPROPREQUESTDOT wszPROPREQUESTFLAGS, IDS_COLUMN_REQUESTFLAGS, },
  34. { wszPROPREQUESTDOT L"Status", IDS_COLUMN_REQUESTSTATUS, },
  35. { wszPROPREQUESTDOT wszPROPREQUESTSTATUSCODE, IDS_COLUMN_REQUESTSTATUSCODE, },
  36. { wszPROPREQUESTDOT wszPROPREQUESTDISPOSITION, IDS_COLUMN_REQUESTDISPOSITION, },
  37. { wszPROPREQUESTDOT wszPROPREQUESTDISPOSITIONMESSAGE, IDS_COLUMN_REQUESTDISPOSITIONMESSAGE, },
  38. { wszPROPREQUESTDOT wszPROPREQUESTSUBMITTEDWHEN, IDS_COLUMN_REQUESTSUBMITTEDWHEN, },
  39. { wszPROPREQUESTDOT wszPROPREQUESTRESOLVEDWHEN, IDS_COLUMN_REQUESTRESOLVEDWHEN, },
  40. { wszPROPREQUESTDOT wszPROPREQUESTREVOKEDWHEN, IDS_COLUMN_REQUESTREVOKEDWHEN, },
  41. { wszPROPREQUESTDOT wszPROPREQUESTREVOKEDEFFECTIVEWHEN, IDS_COLUMN_REQUESTREVOKEDEFFECTIVEWHEN, },
  42. { wszPROPREQUESTDOT wszPROPREQUESTREVOKEDREASON, IDS_COLUMN_REQUESTREVOKEDREASON, },
  43. { wszPROPREQUESTDOT wszPROPREQUESTERNAME, IDS_COLUMN_REQUESTERNAME, },
  44. { wszPROPREQUESTDOT wszPROPCALLERNAME, IDS_COLUMN_CALLERNAME, },
  45. { wszPROPREQUESTDOT wszPROPREQUESTERADDRESS, IDS_COLUMN_REQUESTERADDRESS, },
  46. { wszPROPREQUESTDOT wszPROPDISTINGUISHEDNAME, IDS_COLUMN_REQUESTDISTINGUISHEDNAME, },
  47. { wszPROPREQUESTDOT wszPROPRAWNAME, IDS_COLUMN_REQUESTRAWNAME, },
  48. { wszPROPREQUESTDOT wszPROPCOUNTRY, IDS_COLUMN_REQUESTCOUNTRY, },
  49. { wszPROPREQUESTDOT wszPROPORGANIZATION, IDS_COLUMN_REQUESTORGANIZATION, },
  50. { wszPROPREQUESTDOT wszPROPORGUNIT, IDS_COLUMN_REQUESTORGUNIT, },
  51. { wszPROPREQUESTDOT wszPROPCOMMONNAME, IDS_COLUMN_REQUESTCOMMONNAME, },
  52. { wszPROPREQUESTDOT wszPROPLOCALITY, IDS_COLUMN_REQUESTLOCALITY, },
  53. { wszPROPREQUESTDOT wszPROPSTATE, IDS_COLUMN_REQUESTSTATE, },
  54. { wszPROPREQUESTDOT wszPROPTITLE, IDS_COLUMN_REQUESTTITLE, },
  55. { wszPROPREQUESTDOT wszPROPGIVENNAME, IDS_COLUMN_REQUESTGIVENNAME, },
  56. { wszPROPREQUESTDOT wszPROPINITIALS, IDS_COLUMN_REQUESTINITIALS, },
  57. { wszPROPREQUESTDOT wszPROPSURNAME, IDS_COLUMN_REQUESTSURNAME, },
  58. { wszPROPREQUESTDOT wszPROPDOMAINCOMPONENT, IDS_COLUMN_REQUESTDOMAINCOMPONENT, },
  59. { wszPROPREQUESTDOT wszPROPEMAIL, IDS_COLUMN_REQUESTEMAIL, },
  60. { wszPROPREQUESTDOT wszPROPSTREETADDRESS, IDS_COLUMN_REQUESTSTREETADDRESS, },
  61. { wszPROPREQUESTDOT wszPROPUNSTRUCTUREDNAME, IDS_COLUMN_REQUESTUNSTRUCTUREDNAME, },
  62. { wszPROPREQUESTDOT wszPROPUNSTRUCTUREDADDRESS, IDS_COLUMN_REQUESTUNSTRUCTUREDADDRESS, },
  63. { wszPROPREQUESTDOT wszPROPDEVICESERIALNUMBER, IDS_COLUMN_REQUESTDEVICESERIALNUMBER },
  64. { wszPROPREQUESTDOT wszPROPSIGNERPOLICIES, IDS_COLUMN_REQUESTSIGNERPOLICIES },
  65. { wszPROPREQUESTDOT wszPROPSIGNERAPPLICATIONPOLICIES, IDS_COLUMN_REQUESTSIGNERAPPLICATIONPOLICIES },
  66. { wszPROPREQUESTDOT wszPROPOFFICER, IDS_COLUMN_REQUESTOFFICER },
  67. { wszPROPCERTIFICATEREQUESTID, IDS_COLUMN_CERTIFICATEREQUESTID, },
  68. { wszPROPRAWCERTIFICATE, IDS_COLUMN_CERTIFICATERAWCERTIFICATE, },
  69. { wszPROPCERTIFICATEHASH, IDS_COLUMN_CERTIFICATECERTIFICATEHASH, },
  70. { wszPROPCERTIFICATETEMPLATE, IDS_COLUMN_PROPCERTIFICATETEMPLATE, },
  71. { wszPROPCERTIFICATEENROLLMENTFLAGS, IDS_COLUMN_PROPCERTIFICATEENROLLMENTFLAGS, },
  72. { wszPROPCERTIFICATEGENERALFLAGS, IDS_COLUMN_PROPCERTIFICATEGENERALFLAGS, },
  73. { wszPROPCERTIFICATESERIALNUMBER, IDS_COLUMN_CERTIFICATESERIALNUMBER, },
  74. { wszPROPCERTIFICATEISSUERNAMEID, IDS_COLUMN_CERTIFICATEISSUERNAMEID, },
  75. { wszPROPCERTIFICATENOTBEFOREDATE, IDS_COLUMN_CERTIFICATENOTBEFOREDATE, },
  76. { wszPROPCERTIFICATENOTAFTERDATE, IDS_COLUMN_CERTIFICATENOTAFTERDATE, },
  77. { wszPROPCERTIFICATESUBJECTKEYIDENTIFIER, IDS_COLUMN_CERTIFICATESUBJECTKEYIDENTIFIER , },
  78. { wszPROPCERTIFICATERAWPUBLICKEY, IDS_COLUMN_CERTIFICATERAWPUBLICKEY, },
  79. { wszPROPCERTIFICATEPUBLICKEYLENGTH, IDS_COLUMN_CERTIFICATEPUBLICKEYLENGTH, },
  80. { wszPROPCERTIFICATEPUBLICKEYALGORITHM, IDS_COLUMN_CERTIFICATEPUBLICKEYALGORITHM, },
  81. { wszPROPCERTIFICATERAWPUBLICKEYALGORITHMPARAMETERS, IDS_COLUMN_CERTIFICATERAWPUBLICKEYALGORITHMPARAMETERS, },
  82. { wszPROPCERTIFICATEUPN, IDS_COLUMN_CERTIFICATEUPN, },
  83. { wszPROPDISTINGUISHEDNAME, IDS_COLUMN_CERTIFICATEDISTINGUISHEDNAME, },
  84. { wszPROPRAWNAME, IDS_COLUMN_CERTIFICATERAWNAME, },
  85. { wszPROPCOUNTRY, IDS_COLUMN_CERTIFICATECOUNTRY, },
  86. { wszPROPORGANIZATION, IDS_COLUMN_CERTIFICATEORGANIZATION, },
  87. { wszPROPORGUNIT, IDS_COLUMN_CERTIFICATEORGUNIT, },
  88. { wszPROPCOMMONNAME, IDS_COLUMN_CERTIFICATECOMMONNAME, },
  89. { wszPROPLOCALITY, IDS_COLUMN_CERTIFICATELOCALITY, },
  90. { wszPROPSTATE, IDS_COLUMN_CERTIFICATESTATE, },
  91. { wszPROPTITLE, IDS_COLUMN_CERTIFICATETITLE, },
  92. { wszPROPGIVENNAME, IDS_COLUMN_CERTIFICATEGIVENNAME, },
  93. { wszPROPINITIALS, IDS_COLUMN_CERTIFICATEINITIALS, },
  94. { wszPROPSURNAME, IDS_COLUMN_CERTIFICATESURNAME, },
  95. { wszPROPDOMAINCOMPONENT, IDS_COLUMN_CERTIFICATEDOMAINCOMPONENT, },
  96. { wszPROPEMAIL, IDS_COLUMN_CERTIFICATEEMAIL, },
  97. { wszPROPSTREETADDRESS, IDS_COLUMN_CERTIFICATESTREETADDRESS, },
  98. { wszPROPUNSTRUCTUREDNAME, IDS_COLUMN_CERTIFICATEUNSTRUCTUREDNAME, },
  99. { wszPROPUNSTRUCTUREDADDRESS, IDS_COLUMN_CERTIFICATEUNSTRUCTUREDADDRESS, },
  100. { wszPROPDEVICESERIALNUMBER, IDS_COLUMN_CERTIFICATEDEVICESERIALNUMBER },
  101. { wszPROPEXTREQUESTID, IDS_COLUMN_EXTREQUESTID, },
  102. { wszPROPEXTNAME, IDS_COLUMN_EXTNAME, },
  103. { wszPROPEXTFLAGS, IDS_COLUMN_EXTFLAGS, },
  104. { wszPROPEXTRAWVALUE, IDS_COLUMN_EXTRAWVALUE, },
  105. { wszPROPATTRIBREQUESTID, IDS_COLUMN_ATTRIBREQUESTID, },
  106. { wszPROPATTRIBNAME, IDS_COLUMN_ATTRIBNAME, },
  107. { wszPROPATTRIBVALUE, IDS_COLUMN_ATTRIBVALUE, },
  108. { wszPROPCRLROWID, IDS_COLUMN_CRLROWID, },
  109. { wszPROPCRLNUMBER, IDS_COLUMN_CRLNUMBER, },
  110. { wszPROPCRLMINBASE, IDS_COLUMN_CRLMINBASE, },
  111. { wszPROPCRLNAMEID, IDS_COLUMN_CRLNAMEID, },
  112. { wszPROPCRLCOUNT, IDS_COLUMN_CRLCOUNT, },
  113. { wszPROPCRLTHISUPDATE, IDS_COLUMN_CRLTHISUPDATE, },
  114. { wszPROPCRLNEXTUPDATE, IDS_COLUMN_CRLNEXTUPDATE, },
  115. { wszPROPCRLTHISPUBLISH, IDS_COLUMN_CRLTHISPUBLISH, },
  116. { wszPROPCRLNEXTPUBLISH, IDS_COLUMN_CRLNEXTPUBLISH, },
  117. { wszPROPCRLEFFECTIVE, IDS_COLUMN_CRLEFFECTIVE, },
  118. { wszPROPCRLPROPAGATIONCOMPLETE, IDS_COLUMN_CRLPROPAGATIONCOMPLETE, },
  119. { wszPROPCRLLASTPUBLISHED, IDS_COLUMN_CRLLASTPUBLISHED, },
  120. { wszPROPCRLPUBLISHATTEMPTS, IDS_COLUMN_CRLPUBLISHATTEMPTS, },
  121. { wszPROPCRLPUBLISHFLAGS, IDS_COLUMN_CRLPUBLISHFLAGS, },
  122. { wszPROPCRLPUBLISHSTATUSCODE, IDS_COLUMN_CRLPUBLISHSTATUSCODE, },
  123. { wszPROPCRLPUBLISHERROR, IDS_COLUMN_CRLPUBLISHERROR, },
  124. { wszPROPCRLRAWCRL, IDS_COLUMN_CRLRAWCRL, },
  125. // Obsolete:
  126. { wszPROPCERTIFICATETYPE, IDS_COLUMN_CERTIFICATETYPE, },
  127. { wszPROPCERTIFICATERAWSMIMECAPABILITIES, IDS_COLUMN_CERTIFICATERAWSMIMECAPABILITIES },
  128. { wszPROPNAMETYPE, IDS_COLUMN_CERTIFICATENAMETYPE, },
  129. { wszPROPREQUESTDOT wszPROPNAMETYPE, IDS_COLUMN_REQUESTNAMETYPE, },
  130. { NULL, 0, },
  131. };
  132. #define CCOL_MAX (ARRAYSIZE(g_aColTable) - 1)
  133. typedef struct _CAPROPTRANSLATE
  134. {
  135. LONG lPropId;
  136. DWORD idMsgDisplayName;
  137. WCHAR const *pwszDisplayName;
  138. } CAPROPTRANSLATE;
  139. CAPROPTRANSLATE g_aCAPropTable[] =
  140. {
  141. { CR_PROP_FILEVERSION, IDS_CAPROP_FILEVERSION, },
  142. { CR_PROP_PRODUCTVERSION, IDS_CAPROP_PRODUCTVERSION, },
  143. { CR_PROP_EXITCOUNT, IDS_CAPROP_EXITCOUNT, },
  144. { CR_PROP_EXITDESCRIPTION, IDS_CAPROP_EXITDESCRIPTION, },
  145. { CR_PROP_POLICYDESCRIPTION, IDS_CAPROP_POLICYDESCRIPTION, },
  146. { CR_PROP_CANAME, IDS_CAPROP_CANAME, },
  147. { CR_PROP_SANITIZEDCANAME, IDS_CAPROP_SANITIZEDCANAME, },
  148. { CR_PROP_SANITIZEDCASHORTNAME, IDS_CAPROP_SANITIZEDCASHORTNAME, },
  149. { CR_PROP_SHAREDFOLDER, IDS_CAPROP_SHAREDFOLDER, },
  150. { CR_PROP_PARENTCA, IDS_CAPROP_PARENTCA, },
  151. { CR_PROP_CATYPE, IDS_CAPROP_CATYPE, },
  152. { CR_PROP_CASIGCERTCOUNT, IDS_CAPROP_CASIGCERTCOUNT, },
  153. { CR_PROP_CASIGCERT, IDS_CAPROP_CASIGCERT, },
  154. { CR_PROP_CASIGCERTCHAIN, IDS_CAPROP_CASIGCERTCHAIN, },
  155. { CR_PROP_CAXCHGCERTCOUNT, IDS_CAPROP_CAXCHGCERTCOUNT, },
  156. { CR_PROP_CAXCHGCERT, IDS_CAPROP_CAXCHGCERT, },
  157. { CR_PROP_CAXCHGCERTCHAIN, IDS_CAPROP_CAXCHGCERTCHAIN, },
  158. { CR_PROP_BASECRL, IDS_CAPROP_BASECRL, },
  159. { CR_PROP_DELTACRL, IDS_CAPROP_DELTACRL, },
  160. { CR_PROP_CACERTSTATE, IDS_CAPROP_CACERTSTATE, },
  161. { CR_PROP_CRLSTATE, IDS_CAPROP_CRLSTATE, },
  162. { CR_PROP_CAPROPIDMAX, IDS_CAPROP_CAPROPIDMAX, },
  163. { CR_PROP_DNSNAME, IDS_CAPROP_DNSNAME, },
  164. { CR_PROP_KRACERTUSEDCOUNT, IDS_CAPROP_KRACERTUSEDCOUNT, },
  165. { CR_PROP_KRACERTCOUNT, IDS_CAPROP_KRACERTCOUNT, },
  166. { CR_PROP_KRACERT, IDS_CAPROP_KRACERT, },
  167. { CR_PROP_KRACERTSTATE, IDS_CAPROP_KRACERTSTATE, },
  168. { CR_PROP_ADVANCEDSERVER, IDS_CAPROP_ADVANCEDSERVER, },
  169. { CR_PROP_TEMPLATES, IDS_CAPROP_TEMPLATES, },
  170. { CR_PROP_BASECRLPUBLISHSTATUS, IDS_CAPROP_BASECRLPUBLISHSTATUS, },
  171. { CR_PROP_DELTACRLPUBLISHSTATUS, IDS_CAPROP_DELTACRLPUBLISHSTATUS, },
  172. { CR_PROP_CASIGCERTCRLCHAIN, IDS_CAPROP_CASIGCERTCRLCHAIN, },
  173. { CR_PROP_CAXCHGCERTCRLCHAIN,IDS_CAPROP_CAXCHGCERTCRLCHAIN, },
  174. { CR_PROP_CACERTSTATUSCODE, IDS_CAPROP_CACERTSTATUSCODE, },
  175. { CR_PROP_CAFORWARDCROSSCERT, IDS_CAPROP_CAFORWARDCROSSCERT, },
  176. { CR_PROP_CABACKWARDCROSSCERT, IDS_CAPROP_CABACKWARDCROSSCERT, },
  177. { CR_PROP_CAFORWARDCROSSCERTSTATE, IDS_CAPROP_CAFORWARDCROSSCERTSTATE, },
  178. { CR_PROP_CABACKWARDCROSSCERTSTATE, IDS_CAPROP_CABACKWARDCROSSCERTSTATE, },
  179. { CR_PROP_CACERTVERSION, IDS_CAPROP_CACERTVERSION, },
  180. { 0, 0, },
  181. };
  182. #define CAPROP_MAX (ARRAYSIZE(g_aCAPropTable) - 1)
  183. WCHAR *g_pwszCertCliVersion = NULL;
  184. VOID
  185. myFreeColumnDisplayNames2()
  186. {
  187. COLUMNTRANSLATE *pct;
  188. CAPROPTRANSLATE *pcapt;
  189. if (NULL != g_aColTable[0].pwszDisplayName)
  190. {
  191. for (pct = g_aColTable; NULL != pct->pwszColumnName; pct++)
  192. {
  193. if (NULL != pct->pwszDisplayName)
  194. {
  195. LocalFree(const_cast<WCHAR *>(pct->pwszDisplayName));
  196. pct->pwszDisplayName = NULL;
  197. }
  198. }
  199. }
  200. if (NULL != g_aCAPropTable[0].pwszDisplayName)
  201. {
  202. for (pcapt = g_aCAPropTable; 0 != pcapt->lPropId; pcapt++)
  203. {
  204. if (NULL != pcapt->pwszDisplayName)
  205. {
  206. LocalFree(const_cast<WCHAR *>(pcapt->pwszDisplayName));
  207. pcapt->pwszDisplayName = NULL;
  208. }
  209. }
  210. }
  211. if (NULL != g_pwszCertCliVersion)
  212. {
  213. LocalFree(g_pwszCertCliVersion);
  214. g_pwszCertCliVersion = NULL;
  215. }
  216. }
  217. HRESULT
  218. LoadDisplayNames()
  219. {
  220. HRESULT hr;
  221. COLUMNTRANSLATE *pct;
  222. CAPROPTRANSLATE *pcapt;
  223. WCHAR awc[512];
  224. for (pct = g_aColTable; NULL != pct->pwszColumnName; pct++)
  225. {
  226. WCHAR *pwsz;
  227. if (!LoadString(
  228. g_hInstance,
  229. pct->idMsgDisplayName,
  230. awc,
  231. ARRAYSIZE(awc)))
  232. {
  233. hr = myHLastError();
  234. CSASSERT(S_OK != hr);
  235. _JumpError(hr, error, "LoadString");
  236. }
  237. pwsz = (WCHAR *) LocalAlloc(
  238. LMEM_FIXED,
  239. (wcslen(awc) + 1) * sizeof(WCHAR));
  240. if (NULL == pwsz)
  241. {
  242. hr = E_OUTOFMEMORY;
  243. _JumpError(hr, error, "LocalAlloc display name");
  244. }
  245. wcscpy(pwsz, awc);
  246. pct->pwszDisplayName = pwsz;
  247. DBGPRINT((
  248. DBG_SS_CERTLIBI,
  249. "%x: '%ws' --> '%ws'\n",
  250. SAFE_SUBTRACT_POINTERS(pct, g_aColTable),
  251. pct->pwszColumnName,
  252. pct->pwszDisplayName));
  253. }
  254. for (pcapt = g_aCAPropTable; 0 != pcapt->lPropId; pcapt++)
  255. {
  256. WCHAR *pwsz;
  257. if (!LoadString(
  258. g_hInstance,
  259. pcapt->idMsgDisplayName,
  260. awc,
  261. ARRAYSIZE(awc)))
  262. {
  263. hr = myHLastError();
  264. CSASSERT(S_OK != hr);
  265. _JumpError(hr, error, "LoadString");
  266. }
  267. pwsz = (WCHAR *) LocalAlloc(
  268. LMEM_FIXED,
  269. (wcslen(awc) + 1) * sizeof(WCHAR));
  270. if (NULL == pwsz)
  271. {
  272. hr = E_OUTOFMEMORY;
  273. _JumpError(hr, error, "LocalAlloc display name");
  274. }
  275. wcscpy(pwsz, awc);
  276. pcapt->pwszDisplayName = pwsz;
  277. DBGPRINT((
  278. DBG_SS_CERTLIBI,
  279. "%x: %x --> '%ws'\n",
  280. SAFE_SUBTRACT_POINTERS(pcapt, g_aCAPropTable),
  281. pcapt->lPropId,
  282. pcapt->pwszDisplayName));
  283. }
  284. if (!myConvertSzToWsz(&g_pwszCertCliVersion, szCSVER_STR, -1))
  285. {
  286. hr = E_OUTOFMEMORY;
  287. _JumpError(hr, error, "myConvertSzToWsz");
  288. }
  289. hr = S_OK;
  290. error:
  291. if (S_OK != hr)
  292. {
  293. myFreeColumnDisplayNames2();
  294. }
  295. return(hr);
  296. }
  297. HRESULT
  298. myGetColumnDisplayName(
  299. IN WCHAR const *pwszColumnName,
  300. OUT WCHAR const **ppwszDisplayName)
  301. {
  302. HRESULT hr;
  303. COLUMNTRANSLATE *pct;
  304. *ppwszDisplayName = NULL;
  305. if (NULL == g_aColTable[0].pwszDisplayName)
  306. {
  307. hr = LoadDisplayNames();
  308. _JumpIfError(hr, error, "LoadDisplayNames");
  309. }
  310. for (pct = g_aColTable; NULL != pct->pwszColumnName; pct++)
  311. {
  312. if (0 == mylstrcmpiS(pwszColumnName, pct->pwszColumnName))
  313. {
  314. *ppwszDisplayName = pct->pwszDisplayName;
  315. break;
  316. }
  317. }
  318. if (NULL == *ppwszDisplayName &&
  319. 0 == LSTRCMPIS(pwszColumnName, wszPROPCERTCLIDLL_VERSION))
  320. {
  321. *ppwszDisplayName = g_pwszCertCliVersion;
  322. }
  323. if (NULL == *ppwszDisplayName)
  324. {
  325. hr = E_INVALIDARG;
  326. _JumpError(hr, error, "Bad Column Name");
  327. }
  328. hr = S_OK;
  329. DBGPRINT((
  330. DBG_SS_CERTLIBI,
  331. "myGetColumnDisplayName(%ws) --> '%ws'\n",
  332. pwszColumnName,
  333. *ppwszDisplayName));
  334. error:
  335. return(hr);
  336. }
  337. HRESULT
  338. myGetColumnName(
  339. IN DWORD Index,
  340. IN BOOL fDisplayName,
  341. OUT WCHAR const **ppwszName)
  342. {
  343. HRESULT hr;
  344. COLUMNTRANSLATE *pct;
  345. *ppwszName = NULL;
  346. if (NULL == g_aColTable[0].pwszDisplayName)
  347. {
  348. hr = LoadDisplayNames();
  349. _JumpIfError(hr, error, "LoadDisplayNames");
  350. }
  351. if (CCOL_MAX <= Index)
  352. {
  353. hr = E_INVALIDARG;
  354. _JumpError(hr, error, "Bad Index");
  355. }
  356. pct = &g_aColTable[Index];
  357. *ppwszName = fDisplayName? pct->pwszDisplayName : pct->pwszColumnName;
  358. hr = S_OK;
  359. DBGPRINT((
  360. DBG_SS_CERTLIBI,
  361. "myGetColumnName(%x, fDisplay=%d) --> '%ws'\n",
  362. Index,
  363. fDisplayName,
  364. *ppwszName));
  365. error:
  366. return(hr);
  367. }
  368. HRESULT
  369. myCAPropGetDisplayName(
  370. IN LONG lPropId,
  371. OUT WCHAR const **ppwszDisplayName)
  372. {
  373. HRESULT hr;
  374. CAPROPTRANSLATE *pcapt;
  375. *ppwszDisplayName = NULL;
  376. if (NULL == g_aColTable[0].pwszDisplayName)
  377. {
  378. hr = LoadDisplayNames();
  379. _JumpIfError(hr, error, "LoadDisplayNames");
  380. }
  381. hr = E_INVALIDARG;
  382. for (pcapt = g_aCAPropTable; 0 != pcapt->lPropId; pcapt++)
  383. {
  384. if (lPropId == pcapt->lPropId)
  385. {
  386. *ppwszDisplayName = pcapt->pwszDisplayName;
  387. hr = S_OK;
  388. break;
  389. }
  390. }
  391. _JumpIfError(hr, error, "Bad PropId");
  392. error:
  393. DBGPRINT((
  394. S_OK == hr? DBG_SS_CERTLIBI : DBG_SS_CERTLIB,
  395. "myCAPropGetDisplayName(%x) --> hr=%x, '%ws'\n",
  396. lPropId,
  397. hr,
  398. *ppwszDisplayName));
  399. return(hr);
  400. }
  401. HRESULT
  402. myCAPropInfoLookup(
  403. IN CAPROP const *pCAPropInfo,
  404. IN LONG cCAPropInfo,
  405. IN LONG lPropId,
  406. OUT CAPROP const **ppcap)
  407. {
  408. HRESULT hr;
  409. CAPROP const *pcap;
  410. CAPROP const *pcapEnd;
  411. if (NULL == ppcap)
  412. {
  413. hr = E_POINTER;
  414. _JumpError(hr, error, "NULL parm");
  415. }
  416. *ppcap = NULL;
  417. hr = HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND);
  418. pcapEnd = &pCAPropInfo[cCAPropInfo];
  419. for (pcap = pCAPropInfo; pcap < pcapEnd; pcap++)
  420. {
  421. if (lPropId == pcap->lPropId)
  422. {
  423. *ppcap = pcap;
  424. hr = S_OK;
  425. break;
  426. }
  427. }
  428. _JumpIfError(hr, error, "Bad lPropId");
  429. error:
  430. return(hr);
  431. }