| ||||
| ||||
Не находится сертификата УЦ, если искать его следующим образом: в 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); А если в последней функции явно прописать название УЦ, то данный сертификат находиться. | ||||
Ответы: | ||||
| ||||
Так в MSDN ясно сказано, что если dwFindType=CERT_FIND_SUBJECT_STR, то "pvFindPara data type: null-terminated Unicode string", т.е. нужно преобразование типа const void* к LPCSTR. Или проще: LPCSTR CaIssuer = L"имяЦС"; где задаёте имя этого ЦС. Кстати, странно, что переменная называется CaIssuer а сертификат ищем по значению Subject... | ||||
| ||||
Если на писать так: LPCSTR CaIssuer = L"имяЦС"; то компилятор ругается. | ||||
| ||||
Собственно, это пример прямо из MSDN. Попробовал - работает. | ||||
| ||||
Не могли бы ссылку дать? | ||||
| ||||
http://msdn2.microsoft.com/en-US/library/aa376064.aspx | ||||
| ||||
У меня компилятор ругается на строку LPCSTR lpszCertSubject = L"Cert_subject_1"; говорит следующее: [C++ Error] Unit1.cpp(278): E2034 Cannot convert 'wchar_t *' to 'const char *' | ||||
| ||||
мда. LPCWSTR вместо LPCSTR | ||||