21.06.2007 12:55:55Поиск сертификата УЦ Ответов: 7
Волков
Не находится сертификата УЦ, если искать его следующим образом: в CaString имя УЦ
HCERTSTORE hStoreHandleCheck;
hStoreHandleCheck=CertOpenStore(
CERT_STORE_PROV_SYSTEM,
0,
NULL,
CERT_SYSTEM_STORE_CURRENT_USER,
L"CA");

DWORD dwFlagsCheck=CERT_STORE_SIGNATURE_FLAG | CERT_STORE_TIME_VALIDITY_FLAG;
PCCRL_CONTEXT pCRLContext=0;

AnsiString CaName=AnsiString(caString);
CaName.WideChar(buf,CaName.Length());
const void *CaIssuer = buf;

PCCERT_CONTEXT pCaCert=0;

pCaCert = CertFindCertificateInStore(
hStoreHandleCheck,
MY_ENCODING_TYPE,
0,
CERT_FIND_SUBJECT_STR,
CaIssuer,
NULL);
А если в последней функции явно прописать название УЦ, то данный сертификат находиться.
 
Ответы:
21.06.2007 18:11:54Василий
Так в MSDN ясно сказано, что если dwFindType=CERT_FIND_SUBJECT_STR, то "pvFindPara data type: null-terminated Unicode string", т.е. нужно преобразование типа const void* к LPCSTR.
Или проще:
LPCSTR CaIssuer = L"имяЦС";
где задаёте имя этого ЦС.

Кстати, странно, что переменная называется CaIssuer а сертификат ищем по значению Subject...
22.06.2007 9:07:03Волков
Если на писать так:
LPCSTR CaIssuer = L"имяЦС";
то компилятор ругается.
22.06.2007 12:29:31Василий
Собственно, это пример прямо из MSDN.

Попробовал - работает.
25.06.2007 10:35:59Волков
Не могли бы ссылку дать?
25.06.2007 11:13:42Василий
http://msdn2.microsoft.com/en-US/library/aa376064.aspx
25.06.2007 12:13:47Волков
У меня компилятор ругается на строку LPCSTR lpszCertSubject = L"Cert_subject_1";
говорит следующее:
[C++ Error] Unit1.cpp(278): E2034 Cannot convert 'wchar_t *' to 'const char *'
25.06.2007 12:36:04maxdm
мда.
LPCWSTR вместо LPCSTR