Я хочу получить CTL (список доверия сертификатов) в Windows7, используя Crypto API, я использую функцию CertFindCTLInStore, но она всегда возвращает false, функция GetLastError () возвращает -2146885682, я не знаю, где я поступила неправильно.
код следующий:
hCertStore = CertOpenSystemStore (
НОЛЬ,
pszStoreName);
if(NULL != hCertStore)
{
char buffer[8*1024];
memset(buffer,0,sizeof(buffer));
PCCTL_CONTEXT pCTL = CertCreateCTLContext(
X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,
(const BYTE*)buffer,
sizeof(buffer));
CTL_FIND_USAGE_PARA usagePara;
//first
pCTL = CertFindCTLInStore(
hCertStore,
X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,
0,
CTL_FIND_ANY,
NULL,
NULL);
if (NULL != pCTL)
{
printf("Find a CTL\n");
}
else
{
printf("Error Code :%d\n",GetLastError());
}//Second
CRYPT_HASH_BLOB cryBlob;
pCTL = CertFindCTLInStore(
hCertStore,
X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,
0,
CTL_FIND_SHA1_HASH,
&cryBlob,
NULL);
if (NULL != pCTL)
{
printf("Find a CTL\n");
}
else
{
printf("Error Code :%d\n",GetLastError());
}//third
pCTL = CertFindCTLInStore(
hCertStore,
X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,
0,
CTL_FIND_MD5_HASH,
&cryBlob,
NULL);
if (NULL != pCTL)
{
printf("Find a CTL\n");
}
else
{
printf("Error Code :%d\n",GetLastError());
}
//fourth
CTL_FIND_USAGE_PARA ctlPara;
pCTL = CertFindCTLInStore(
hCertStore,
X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,
0,
CTL_FIND_USAGE,
&ctlPara,
NULL);
if (NULL != pCTL)
{
printf("Find a CTL\n");
}
else
{
printf("Error Code :%d\n",GetLastError());
}//fifth
CTL_FIND_USAGE_PARA ctlPara2;
pCTL = CertFindCTLInStore(
hCertStore,
X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,
0,
CTL_FIND_SAME_USAGE_FLAG,
&ctlPara2,
NULL);
if (NULL != pCTL)
{
printf("Find a CTL\n");
}
else
{
printf("Error Code :%d\n",GetLastError());
}//six
CTL_CONTEXT ctlText;
pCTL = CertFindCTLInStore(
hCertStore,
X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,
0,
CTL_FIND_EXISTING,
&ctlText,
NULL);
if (NULL != pCTL)
{
printf("Find a CTL\n");
}
else
{
printf("Error Code :%d\n",GetLastError());
}
//seven
CTL_FIND_SUBJECT_PARA ctlSubPara;
pCTL = CertFindCTLInStore(
hCertStore,
X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,
0,
CTL_FIND_SUBJECT,
&ctlSubPara,
NULL);
if (NULL != pCTL)
{
printf("Find a CTL\n");
}
else
{
printf("Error Code :%d\n",GetLastError());
}
Бьюсь об заклад, вы не получаете -2146885682, но -2146885628, он же 0x80092004 ака CRYPT_E_NOT_FOUND
, Проще говоря, в магазине нет CTL.
Других решений пока нет …