|
|
//+--------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1996 - 1999
//
// File: column.cpp
//
// Contents: CertCli implementation
//
//---------------------------------------------------------------------------
#include "pch.cpp"
#pragma hdrstop
#include "csprop.h"
#include "resource.h"
extern HINSTANCE g_hInstance;
typedef struct _COLUMNTRANSLATE { WCHAR const *pwszColumnName; DWORD idMsgDisplayName; WCHAR const *pwszDisplayName; } COLUMNTRANSLATE;
COLUMNTRANSLATE g_aColTable[] = { { wszPROPREQUESTDOT wszPROPREQUESTREQUESTID, IDS_COLUMN_REQUESTID, }, { wszPROPREQUESTDOT wszPROPREQUESTRAWREQUEST, IDS_COLUMN_REQUESTRAWREQUEST, }, { wszPROPREQUESTDOT wszPROPREQUESTRAWARCHIVEDKEY, IDS_COLUMN_REQUESTRAWARCHIVEDKEY, }, { wszPROPREQUESTDOT wszPROPREQUESTKEYRECOVERYHASHES, IDS_COLUMN_REQUESTKEYRECOVERYHASHES, }, { wszPROPREQUESTDOT wszPROPREQUESTRAWOLDCERTIFICATE, IDS_COLUMN_REQUESTRAWOLDCERTIFICATE, }, { wszPROPREQUESTDOT wszPROPREQUESTATTRIBUTES, IDS_COLUMN_REQUESTATTRIBUTES, }, { wszPROPREQUESTDOT wszPROPREQUESTTYPE, IDS_COLUMN_REQUESTTYPE, }, { wszPROPREQUESTDOT wszPROPREQUESTFLAGS, IDS_COLUMN_REQUESTFLAGS, }, { wszPROPREQUESTDOT L"Status", IDS_COLUMN_REQUESTSTATUS, }, { wszPROPREQUESTDOT wszPROPREQUESTSTATUSCODE, IDS_COLUMN_REQUESTSTATUSCODE, }, { wszPROPREQUESTDOT wszPROPREQUESTDISPOSITION, IDS_COLUMN_REQUESTDISPOSITION, }, { wszPROPREQUESTDOT wszPROPREQUESTDISPOSITIONMESSAGE, IDS_COLUMN_REQUESTDISPOSITIONMESSAGE, }, { wszPROPREQUESTDOT wszPROPREQUESTSUBMITTEDWHEN, IDS_COLUMN_REQUESTSUBMITTEDWHEN, }, { wszPROPREQUESTDOT wszPROPREQUESTRESOLVEDWHEN, IDS_COLUMN_REQUESTRESOLVEDWHEN, }, { wszPROPREQUESTDOT wszPROPREQUESTREVOKEDWHEN, IDS_COLUMN_REQUESTREVOKEDWHEN, }, { wszPROPREQUESTDOT wszPROPREQUESTREVOKEDEFFECTIVEWHEN, IDS_COLUMN_REQUESTREVOKEDEFFECTIVEWHEN, }, { wszPROPREQUESTDOT wszPROPREQUESTREVOKEDREASON, IDS_COLUMN_REQUESTREVOKEDREASON, }, { wszPROPREQUESTDOT wszPROPREQUESTERNAME, IDS_COLUMN_REQUESTERNAME, }, { wszPROPREQUESTDOT wszPROPCALLERNAME, IDS_COLUMN_CALLERNAME, }, { wszPROPREQUESTDOT wszPROPREQUESTERADDRESS, IDS_COLUMN_REQUESTERADDRESS, },
{ wszPROPREQUESTDOT wszPROPDISTINGUISHEDNAME, IDS_COLUMN_REQUESTDISTINGUISHEDNAME, }, { wszPROPREQUESTDOT wszPROPRAWNAME, IDS_COLUMN_REQUESTRAWNAME, }, { wszPROPREQUESTDOT wszPROPCOUNTRY, IDS_COLUMN_REQUESTCOUNTRY, }, { wszPROPREQUESTDOT wszPROPORGANIZATION, IDS_COLUMN_REQUESTORGANIZATION, }, { wszPROPREQUESTDOT wszPROPORGUNIT, IDS_COLUMN_REQUESTORGUNIT, }, { wszPROPREQUESTDOT wszPROPCOMMONNAME, IDS_COLUMN_REQUESTCOMMONNAME, }, { wszPROPREQUESTDOT wszPROPLOCALITY, IDS_COLUMN_REQUESTLOCALITY, }, { wszPROPREQUESTDOT wszPROPSTATE, IDS_COLUMN_REQUESTSTATE, }, { wszPROPREQUESTDOT wszPROPTITLE, IDS_COLUMN_REQUESTTITLE, }, { wszPROPREQUESTDOT wszPROPGIVENNAME, IDS_COLUMN_REQUESTGIVENNAME, }, { wszPROPREQUESTDOT wszPROPINITIALS, IDS_COLUMN_REQUESTINITIALS, }, { wszPROPREQUESTDOT wszPROPSURNAME, IDS_COLUMN_REQUESTSURNAME, }, { wszPROPREQUESTDOT wszPROPDOMAINCOMPONENT, IDS_COLUMN_REQUESTDOMAINCOMPONENT, }, { wszPROPREQUESTDOT wszPROPEMAIL, IDS_COLUMN_REQUESTEMAIL, }, { wszPROPREQUESTDOT wszPROPSTREETADDRESS, IDS_COLUMN_REQUESTSTREETADDRESS, }, { wszPROPREQUESTDOT wszPROPUNSTRUCTUREDNAME, IDS_COLUMN_REQUESTUNSTRUCTUREDNAME, }, { wszPROPREQUESTDOT wszPROPUNSTRUCTUREDADDRESS, IDS_COLUMN_REQUESTUNSTRUCTUREDADDRESS, }, { wszPROPREQUESTDOT wszPROPDEVICESERIALNUMBER, IDS_COLUMN_REQUESTDEVICESERIALNUMBER }, { wszPROPREQUESTDOT wszPROPSIGNERPOLICIES, IDS_COLUMN_REQUESTSIGNERPOLICIES }, { wszPROPREQUESTDOT wszPROPSIGNERAPPLICATIONPOLICIES, IDS_COLUMN_REQUESTSIGNERAPPLICATIONPOLICIES },
{ wszPROPCERTIFICATEREQUESTID, IDS_COLUMN_CERTIFICATEREQUESTID, }, { wszPROPRAWCERTIFICATE, IDS_COLUMN_CERTIFICATERAWCERTIFICATE, }, { wszPROPCERTIFICATEHASH, IDS_COLUMN_CERTIFICATECERTIFICATEHASH, }, { wszPROPCERTIFICATETEMPLATE, IDS_COLUMN_PROPCERTIFICATETEMPLATE, }, { wszPROPCERTIFICATEENROLLMENTFLAGS, IDS_COLUMN_PROPCERTIFICATEENROLLMENTFLAGS, }, { wszPROPCERTIFICATEGENERALFLAGS, IDS_COLUMN_PROPCERTIFICATEGENERALFLAGS, }, { wszPROPCERTIFICATESERIALNUMBER, IDS_COLUMN_CERTIFICATESERIALNUMBER, }, { wszPROPCERTIFICATEISSUERNAMEID, IDS_COLUMN_CERTIFICATEISSUERNAMEID, }, { wszPROPCERTIFICATENOTBEFOREDATE, IDS_COLUMN_CERTIFICATENOTBEFOREDATE, }, { wszPROPCERTIFICATENOTAFTERDATE, IDS_COLUMN_CERTIFICATENOTAFTERDATE, }, { wszPROPCERTIFICATESUBJECTKEYIDENTIFIER, IDS_COLUMN_CERTIFICATESUBJECTKEYIDENTIFIER , }, { wszPROPCERTIFICATERAWPUBLICKEY, IDS_COLUMN_CERTIFICATERAWPUBLICKEY, }, { wszPROPCERTIFICATEPUBLICKEYLENGTH, IDS_COLUMN_CERTIFICATEPUBLICKEYLENGTH, }, { wszPROPCERTIFICATEPUBLICKEYALGORITHM, IDS_COLUMN_CERTIFICATEPUBLICKEYALGORITHM, }, { wszPROPCERTIFICATERAWPUBLICKEYALGORITHMPARAMETERS, IDS_COLUMN_CERTIFICATERAWPUBLICKEYALGORITHMPARAMETERS, }, { wszPROPCERTIFICATEUPN, IDS_COLUMN_CERTIFICATEUPN, },
{ wszPROPDISTINGUISHEDNAME, IDS_COLUMN_CERTIFICATEDISTINGUISHEDNAME, }, { wszPROPRAWNAME, IDS_COLUMN_CERTIFICATERAWNAME, }, { wszPROPCOUNTRY, IDS_COLUMN_CERTIFICATECOUNTRY, }, { wszPROPORGANIZATION, IDS_COLUMN_CERTIFICATEORGANIZATION, }, { wszPROPORGUNIT, IDS_COLUMN_CERTIFICATEORGUNIT, }, { wszPROPCOMMONNAME, IDS_COLUMN_CERTIFICATECOMMONNAME, }, { wszPROPLOCALITY, IDS_COLUMN_CERTIFICATELOCALITY, }, { wszPROPSTATE, IDS_COLUMN_CERTIFICATESTATE, }, { wszPROPTITLE, IDS_COLUMN_CERTIFICATETITLE, }, { wszPROPGIVENNAME, IDS_COLUMN_CERTIFICATEGIVENNAME, }, { wszPROPINITIALS, IDS_COLUMN_CERTIFICATEINITIALS, }, { wszPROPSURNAME, IDS_COLUMN_CERTIFICATESURNAME, }, { wszPROPDOMAINCOMPONENT, IDS_COLUMN_CERTIFICATEDOMAINCOMPONENT, }, { wszPROPEMAIL, IDS_COLUMN_CERTIFICATEEMAIL, }, { wszPROPSTREETADDRESS, IDS_COLUMN_CERTIFICATESTREETADDRESS, }, { wszPROPUNSTRUCTUREDNAME, IDS_COLUMN_CERTIFICATEUNSTRUCTUREDNAME, }, { wszPROPUNSTRUCTUREDADDRESS, IDS_COLUMN_CERTIFICATEUNSTRUCTUREDADDRESS, }, { wszPROPDEVICESERIALNUMBER, IDS_COLUMN_CERTIFICATEDEVICESERIALNUMBER },
{ wszPROPEXTREQUESTID, IDS_COLUMN_EXTREQUESTID, }, { wszPROPEXTNAME, IDS_COLUMN_EXTNAME, }, { wszPROPEXTFLAGS, IDS_COLUMN_EXTFLAGS, }, { wszPROPEXTRAWVALUE, IDS_COLUMN_EXTRAWVALUE, },
{ wszPROPATTRIBREQUESTID, IDS_COLUMN_ATTRIBREQUESTID, }, { wszPROPATTRIBNAME, IDS_COLUMN_ATTRIBNAME, }, { wszPROPATTRIBVALUE, IDS_COLUMN_ATTRIBVALUE, },
{ wszPROPCRLROWID, IDS_COLUMN_CRLROWID, }, { wszPROPCRLNUMBER, IDS_COLUMN_CRLNUMBER, }, { wszPROPCRLMINBASE, IDS_COLUMN_CRLMINBASE, }, { wszPROPCRLNAMEID, IDS_COLUMN_CRLNAMEID, }, { wszPROPCRLCOUNT, IDS_COLUMN_CRLCOUNT, }, { wszPROPCRLTHISUPDATE, IDS_COLUMN_CRLTHISUPDATE, }, { wszPROPCRLNEXTUPDATE, IDS_COLUMN_CRLNEXTUPDATE, }, { wszPROPCRLTHISPUBLISH, IDS_COLUMN_CRLTHISPUBLISH, }, { wszPROPCRLNEXTPUBLISH, IDS_COLUMN_CRLNEXTPUBLISH, }, { wszPROPCRLEFFECTIVE, IDS_COLUMN_CRLEFFECTIVE, }, { wszPROPCRLPROPAGATIONCOMPLETE, IDS_COLUMN_CRLPROPAGATIONCOMPLETE, }, { wszPROPCRLLASTPUBLISHED, IDS_COLUMN_CRLLASTPUBLISHED, }, { wszPROPCRLPUBLISHATTEMPTS, IDS_COLUMN_CRLPUBLISHATTEMPTS, }, { wszPROPCRLPUBLISHFLAGS, IDS_COLUMN_CRLPUBLISHFLAGS, }, { wszPROPCRLPUBLISHSTATUSCODE, IDS_COLUMN_CRLPUBLISHSTATUSCODE, }, { wszPROPCRLPUBLISHERROR, IDS_COLUMN_CRLPUBLISHERROR, }, { wszPROPCRLRAWCRL, IDS_COLUMN_CRLRAWCRL, },
// Obsolete:
{ wszPROPCERTIFICATETYPE, IDS_COLUMN_CERTIFICATETYPE, }, { wszPROPCERTIFICATERAWSMIMECAPABILITIES, IDS_COLUMN_CERTIFICATERAWSMIMECAPABILITIES }, { wszPROPNAMETYPE, IDS_COLUMN_CERTIFICATENAMETYPE, }, { wszPROPREQUESTDOT wszPROPNAMETYPE, IDS_COLUMN_REQUESTNAMETYPE, },
{ NULL, 0, }, };
#define CCOL_MAX (ARRAYSIZE(g_aColTable) - 1)
typedef struct _CAPROPTRANSLATE { LONG lPropId; DWORD idMsgDisplayName; WCHAR const *pwszDisplayName; } CAPROPTRANSLATE;
CAPROPTRANSLATE g_aCAPropTable[] = { { CR_PROP_FILEVERSION, IDS_CAPROP_FILEVERSION, }, { CR_PROP_PRODUCTVERSION, IDS_CAPROP_PRODUCTVERSION, }, { CR_PROP_EXITCOUNT, IDS_CAPROP_EXITCOUNT, }, { CR_PROP_EXITDESCRIPTION, IDS_CAPROP_EXITDESCRIPTION, }, { CR_PROP_POLICYDESCRIPTION, IDS_CAPROP_POLICYDESCRIPTION, }, { CR_PROP_CANAME, IDS_CAPROP_CANAME, }, { CR_PROP_SANITIZEDCANAME, IDS_CAPROP_SANITIZEDCANAME, }, { CR_PROP_SHAREDFOLDER, IDS_CAPROP_SHAREDFOLDER, }, { CR_PROP_PARENTCA, IDS_CAPROP_PARENTCA, },
{ CR_PROP_CATYPE, IDS_CAPROP_CATYPE, }, { CR_PROP_CASIGCERTCOUNT, IDS_CAPROP_CASIGCERTCOUNT, }, { CR_PROP_CASIGCERT, IDS_CAPROP_CASIGCERT, }, { CR_PROP_CASIGCERTCHAIN, IDS_CAPROP_CASIGCERTCHAIN, }, { CR_PROP_CAXCHGCERTCOUNT, IDS_CAPROP_CAXCHGCERTCOUNT, }, { CR_PROP_CAXCHGCERT, IDS_CAPROP_CAXCHGCERT, }, { CR_PROP_CAXCHGCERTCHAIN, IDS_CAPROP_CAXCHGCERTCHAIN, }, { CR_PROP_BASECRL, IDS_CAPROP_BASECRL, }, { CR_PROP_DELTACRL, IDS_CAPROP_DELTACRL, }, { CR_PROP_CACERTSTATE, IDS_CAPROP_CACERTSTATE, }, { CR_PROP_CRLSTATE, IDS_CAPROP_CRLSTATE, }, { CR_PROP_CAPROPIDMAX, IDS_CAPROP_CAPROPIDMAX, }, { CR_PROP_DNSNAME, IDS_CAPROP_DNSNAME, }, { CR_PROP_KRACERTUSEDCOUNT, IDS_CAPROP_KRACERTUSEDCOUNT, }, { CR_PROP_KRACERTCOUNT, IDS_CAPROP_KRACERTCOUNT, }, { CR_PROP_KRACERT, IDS_CAPROP_KRACERT, }, { CR_PROP_KRACERTSTATE, IDS_CAPROP_KRACERTSTATE, }, { CR_PROP_ADVANCEDSERVER, IDS_CAPROP_ADVANCEDSERVER, }, { CR_PROP_TEMPLATES, IDS_CAPROP_TEMPLATES, }, { CR_PROP_BASECRLPUBLISHSTATUS, IDS_CAPROP_BASECRLPUBLISHSTATUS, }, { CR_PROP_DELTACRLPUBLISHSTATUS, IDS_CAPROP_DELTACRLPUBLISHSTATUS, }, { CR_PROP_CASIGCERTCRLCHAIN, IDS_CAPROP_CASIGCERTCRLCHAIN, }, { CR_PROP_CAXCHGCERTCRLCHAIN,IDS_CAPROP_CAXCHGCERTCRLCHAIN, }, { CR_PROP_CACERTSTATUSCODE, IDS_CAPROP_CACERTSTATUSCODE, }, { 0, 0, }, };
#define CAPROP_MAX (ARRAYSIZE(g_aCAPropTable) - 1)
HRESULT LoadDisplayNames() { HRESULT hr; COLUMNTRANSLATE *pct; CAPROPTRANSLATE *pcapt; WCHAR awc[512];
for (pct = g_aColTable; NULL != pct->pwszColumnName; pct++) { WCHAR *pwsz;
if (!LoadString( g_hInstance, pct->idMsgDisplayName, awc, ARRAYSIZE(awc))) { hr = myHLastError(); CSASSERT(S_OK != hr); _JumpError(hr, error, "LoadString"); } pwsz = (WCHAR *) LocalAlloc( LMEM_FIXED, (wcslen(awc) + 1) * sizeof(WCHAR)); if (NULL == pwsz) { hr = E_OUTOFMEMORY; _JumpError(hr, error, "LocalAlloc display name"); } wcscpy(pwsz, awc); pct->pwszDisplayName = pwsz; DBGPRINT(( DBG_SS_CERTLIBI, "%x: '%ws' --> '%ws'\n", SAFE_SUBTRACT_POINTERS(pct, g_aColTable), pct->pwszColumnName, pct->pwszDisplayName)); } for (pcapt = g_aCAPropTable; 0 != pcapt->lPropId; pcapt++) { WCHAR *pwsz;
if (!LoadString( g_hInstance, pcapt->idMsgDisplayName, awc, ARRAYSIZE(awc))) { hr = myHLastError(); CSASSERT(S_OK != hr); _JumpError(hr, error, "LoadString"); } pwsz = (WCHAR *) LocalAlloc( LMEM_FIXED, (wcslen(awc) + 1) * sizeof(WCHAR)); if (NULL == pwsz) { hr = E_OUTOFMEMORY; _JumpError(hr, error, "LocalAlloc display name"); } wcscpy(pwsz, awc); pcapt->pwszDisplayName = pwsz; DBGPRINT(( DBG_SS_CERTLIBI, "%x: %x --> '%ws'\n", SAFE_SUBTRACT_POINTERS(pcapt, g_aCAPropTable), pcapt->lPropId, pcapt->pwszDisplayName)); } hr = S_OK;
error: if(S_OK != hr) { for (pct = g_aColTable; NULL != pct->pwszColumnName; pct++) { if(pct->pwszDisplayName) { LocalFree(const_cast<WCHAR *>(pct->pwszDisplayName)); pct->pwszDisplayName = NULL; } } } return(hr); }
HRESULT myGetColumnDisplayName( IN WCHAR const *pwszColumnName, OUT WCHAR const **ppwszDisplayName) { HRESULT hr; COLUMNTRANSLATE *pct;
*ppwszDisplayName = NULL; if (NULL == g_aColTable[0].pwszDisplayName) { hr = LoadDisplayNames(); _JumpIfError(hr, error, "LoadDisplayNames"); } hr = E_INVALIDARG; for (pct = g_aColTable; NULL != pct->pwszColumnName; pct++) { if (0 == lstrcmpi(pct->pwszColumnName, pwszColumnName)) { *ppwszDisplayName = pct->pwszDisplayName; hr = S_OK; break; } } _JumpIfError(hr, error, "Bad Column Name");
DBGPRINT(( DBG_SS_CERTLIBI, "myGetColumnDisplayName(%ws) --> '%ws'\n", pwszColumnName, *ppwszDisplayName)); error: return(hr); }
HRESULT myGetColumnName( IN DWORD Index, IN BOOL fDisplayName, OUT WCHAR const **ppwszName) { HRESULT hr; COLUMNTRANSLATE *pct;
*ppwszName = NULL; if (NULL == g_aColTable[0].pwszDisplayName) { hr = LoadDisplayNames(); _JumpIfError(hr, error, "LoadDisplayNames"); } if (CCOL_MAX <= Index) { hr = E_INVALIDARG; _JumpError(hr, error, "Bad Index"); } pct = &g_aColTable[Index]; *ppwszName = fDisplayName? pct->pwszDisplayName : pct->pwszColumnName; hr = S_OK;
DBGPRINT(( DBG_SS_CERTLIBI, "myGetColumnName(%x, fDisplay=%d) --> '%ws'\n", Index, fDisplayName, *ppwszName));
error: return(hr); }
VOID myFreeColumnDisplayNames2() { COLUMNTRANSLATE *pct; CAPROPTRANSLATE *pcapt;
if (NULL != g_aColTable[0].pwszDisplayName) { for (pct = g_aColTable; NULL != pct->pwszColumnName; pct++) { LocalFree(const_cast<WCHAR *>(pct->pwszDisplayName)); pct->pwszDisplayName = NULL; } for (pcapt = g_aCAPropTable; 0 != pcapt->lPropId; pcapt++) { LocalFree(const_cast<WCHAR *>(pcapt->pwszDisplayName)); pcapt->pwszDisplayName = NULL; } } }
HRESULT myCAPropGetDisplayName( IN LONG lPropId, OUT WCHAR const **ppwszDisplayName) { HRESULT hr; CAPROPTRANSLATE *pcapt;
*ppwszDisplayName = NULL; if (NULL == g_aColTable[0].pwszDisplayName) { hr = LoadDisplayNames(); _JumpIfError(hr, error, "LoadDisplayNames"); } hr = E_INVALIDARG; for (pcapt = g_aCAPropTable; 0 != pcapt->lPropId; pcapt++) { if (lPropId == pcapt->lPropId) { *ppwszDisplayName = pcapt->pwszDisplayName; hr = S_OK; break; } } _JumpIfError(hr, error, "Bad PropId");
error: DBGPRINT(( S_OK == hr? DBG_SS_CERTLIBI : DBG_SS_CERTLIB, "myCAPropGetDisplayName(%x) --> hr=%x, '%ws'\n", lPropId, hr, *ppwszDisplayName)); return(hr); }
HRESULT myCAPropInfoUnmarshal( IN OUT CAPROP *pCAPropInfo, IN LONG cCAPropInfo, IN DWORD cbCAPropInfo) { HRESULT hr; CAPROP *pcap; CAPROP *pcapEnd; BYTE *pbEnd; LONG i;
if (NULL == pCAPropInfo) { hr = E_POINTER; _JumpError(hr, error, "NULL parm"); }
pbEnd = (BYTE *) Add2Ptr(pCAPropInfo, cbCAPropInfo); pcapEnd = &pCAPropInfo[cCAPropInfo]; for (pcap = pCAPropInfo; pcap < pcapEnd; pcap++) { WCHAR const *pwszDisplayName; WCHAR const *pwszT; hr = HRESULT_FROM_WIN32(ERROR_INVALID_DATA); if ((BYTE *) (pcap + 1) > pbEnd) { _JumpError(hr, error, "bad marshalled data"); } pwszDisplayName = NULL; if (NULL != pcap->pwszDisplayName) { pwszDisplayName = (WCHAR *) Add2Ptr( pCAPropInfo, pcap->pwszDisplayName); if ((BYTE *) pwszDisplayName < (BYTE *) (pcap + 1) || (BYTE *) pwszDisplayName >= pbEnd) { _JumpError(hr, error, "bad marshalled pointer"); } pwszT = pwszDisplayName + wcslen(pwszDisplayName) + 1; if ((BYTE *) pwszT > pbEnd) { _JumpError(hr, error, "bad marshalled string"); } }
hr = myCAPropGetDisplayName(pcap->lPropId, &pwszT); _PrintIfError(hr, "myCAPropGetDisplayName"); if (S_OK == hr) { pwszDisplayName = pwszT; } pcap->pwszDisplayName = const_cast<WCHAR *>(pwszDisplayName);
DBGPRINT(( DBG_SS_CERTLIBI, "RequestGetCAPropertyInfo: ielt=%d idx=%x t=%x \"%ws\"\n", SAFE_SUBTRACT_POINTERS(pcap, pCAPropInfo), pcap->lPropId, pcap->lPropFlags, pcap->pwszDisplayName)); } hr = S_OK;
error: return(hr); }
HRESULT myCAPropInfoLookup( IN CAPROP const *pCAPropInfo, IN LONG cCAPropInfo, IN LONG lPropId, OUT CAPROP const **ppcap) { HRESULT hr; CAPROP const *pcap; CAPROP const *pcapEnd;
if (NULL == ppcap) { hr = E_POINTER; _JumpError(hr, error, "NULL parm"); } *ppcap = NULL;
hr = HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND); pcapEnd = &pCAPropInfo[cCAPropInfo]; for (pcap = pCAPropInfo; pcap < pcapEnd; pcap++) { if (lPropId == pcap->lPropId) { *ppcap = pcap; hr = S_OK; break; } } _JumpIfError(hr, error, "Bad lPropId");
error: return(hr); }
|