опубликован 14-11-2001 10:32 MSK
PCCERT_CONTEXT GetCert(CString sOwnerName,HCRYPTPROV cpCryptProv,CString sStoreName)
{
USES_CONVERSION;
//owner name - it is certificate id
PCCERT_CONTEXT ccCert=NULL;
wchar_t *k;
DATA_BLOB blbData; //here we will store certificate
CERT_ID CertId;
CString sSubject;
static char buffer[10240];
HCERTSTORE csCertStore;
csCertStore = CertOpenSystemStore(cpCryptProv, sStoreName);
k=A2W(LPCTSTR(sOwnerName));
//put cert if into blob
Hex2Blob(sOwnerName,&blbData);
//fill CertId structure
CertId.dwIdChoice = CERT_ID_KEY_IDENTIFIER; if(!csCertStore)
{
//....error
}
again:
ccCert = CertFindCertificateInStore(
csCertStore,
MY_TYPE,
0,
CERT_FIND_ANY,
NULL,
ccCert);
if(!ccCert)
{
//...error
}
else
{
CertNameToStr(
MY_TYPE,
&ccCert->pCertInfo->Subject,
CERT_SIMPLE_NAME_STR | CERT_NAME_STR_NO_PLUS_FLAG,
buffer,
10240);
sSubject = buffer;
//verify, that this is our cert ;)
CString sTemp = Blob2Hex(&ccCert->pCertInfo->SerialNumber) + sSubject;
if(sOwnerName != sTemp)
goto again;
}
delete[]blbData.pbData;
CertCloseStore(csCertStore,0);
return ccCert;
}