| ||||
| ||||
Не могу найти сертификат в хранилище, подскажите где ошибка. var phProv: HCRYPTPROV; phCont: PChar; hCert: HCERTSTORE; pCertCntx: PCCERT_CONTEXT; myCert: PChar; begin hCert := CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0, CERT_STORE_OPEN_EXISTING_FLAG or CERT_STORE_READONLY_FLAG or CERT_SYSTEM_STORE_CURRENT_USER, PChar(’MY’) ); StrPCopy(myCert, ’cert2003’); pCertCntx:=CertFindCertificateInStore(hCert, TYPE_DER, 0, CERT_FIND_SUBJECT_STR, myCert, Nil); pCertCntx возвращает nil | ||||
Ответы: | ||||
| ||||
попробуйте так: var phProv: HCRYPTPROV; phCont: PChar; pCertCntx: PCCERT_CONTEXT; hCert: HCERTSTORE; hCertName: PWideChar //"..The system and physical // store names are Unicode strings.." myCert: PWideChar; // CertFindCertificateInStore с ключом // CERT_FIND_SUBJECT_STR должна получить //"...null- terminated Unicode string" begin hCertName:=’MY’; hCert := CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0, CERT_STORE_OPEN_EXISTING_FLAG or CERT_STORE_READONLY_FLAG or CERT_SYSTEM_STORE_CURRENT_USER, hCertName ); //да, если hCertName будет PChar, какой-то hCert вы получите, но не тот. myCert:=’cert2003’; pCertCntx:=CertFindCertificateInStore(hCert, TYPE_DER, 0, CERT_FIND_SUBJECT_STR, myCert, Nil); если сертификат есть в этом хранилище, вы его получите. | ||||
| ||||
Спасибо, полегчало. Почуствовал разницу между PChar и PWideString | ||||