15.01.2004 16:05:37Delphi & CryptoPro v.1.1 Ответов: 2
Динер Андрей
Не могу найти сертификат в хранилище, подскажите где ошибка.

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
 
Ответы:
16.01.2004 16:54:00Евгений
попробуйте так:
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);

если сертификат есть в этом хранилище, вы его получите.
19.01.2004 10:27:39ADA
Спасибо, полегчало.
Почуствовал разницу между PChar и PWideString