13.05.2003 12:26:42Проблема с вызовом ф-ии CertOpenStore() Ответов: 1
Дмитрий
открываю хранилище сертификатов
Delphi
procedure ()
var
hProv: HCRYPTPROV;
hStore:HCERTSTORE;
cont:Pchar;
sert:string;
begin
sert:=’AddressBook’;
cont:=Pchar(sert);
hStore:=nil;
hProv:=0;
hStore:=CertOpenStore(CERT_STORE_PROV_SYSTEM,0,hprov,CERT_SYSTEM_STORE_CURRENT_USER,cont);
MessageDlg(ErrToStr(GetLastError()), mtError, [mbOK], 0);
end;
//Выдается сообщение неизвестная ошибка
// Может не правильно передаю параметры
hprov=0, или не правильно передаю указатель на ’AddressBook’
//При этом создается новая структура в HKEY_CURRENT_USER\Software\Microsoft\SystemCertificates\
//Не могу разобраться
//Где можно взять пример работа с хранилищем сертификатов на Delphi
function ErrToStr(e: int64): string;
begin
case e of
ERROR_BUSY: ErrToStr := ’ERROR_BUSY’;
ERROR_CALL_NOT_IMPLEMENTED: ErrToStr := ’ERROR_CALL_NOT_IMPLEMENTED’;
ERROR_INVALID_HANDLE: ErrToStr := ’ERROR_INVALID_HANDLE’;
ERROR_INVALID_PARAMETER: ErrToStr := ’ERROR_INVALID_PARAMETER’;
ERROR_MORE_DATA: ErrToStr := ’ERROR_MORE_DATA’;
ERROR_NO_MORE_ITEMS: ErrToStr := ’ERROR_NO_MORE_ITEMS’;
ERROR_NOT_ENOUGH_MEMORY: ErrToStr := ’ERROR_NOT_ENOUGH_MEMORY’;
NTE_BAD_ALGID: ErrToStr := ’NTE_BAD_ALGID’;
NTE_BAD_DATA: ErrToStr := ’NTE_BAD_DATA’;
NTE_BAD_FLAGS: ErrToStr := ’NTE_BAD_FLAGS’;
NTE_BAD_HASH: ErrToStr := ’NTE_BAD_HASH’;
NTE_BAD_HASH_STATE: ErrToStr := ’NTE_BAD_HASH_STATE’;
NTE_BAD_KEY: ErrToStr := ’NTE_BAD_KEY’;
NTE_BAD_KEYSET: ErrToStr := ’NTE_BAD_KEYSET’;
NTE_BAD_KEYSET_PARAM: ErrToStr := ’NTE_BAD_KEYSET_PARAM’;
NTE_BAD_LEN: ErrToStr := ’NTE_BAD_LEN’;
NTE_BAD_PROV_TYPE: ErrToStr := ’NTE_BAD_PROV_TYPE’;
NTE_BAD_PUBLIC_KEY: ErrToStr := ’NTE_BAD_PUBLIC_KEY’;
NTE_BAD_SIGNATURE: ErrToStr := ’NTE_BAD_SIGNATURE’;
NTE_BAD_TYPE: ErrToStr := ’NTE_BAD_TYPE’;
NTE_BAD_UID: ErrToStr := ’NTE_BAD_UID’;
NTE_DOUBLE_ENCRYPT: ErrToStr := ’NTE_DOUBLE_ENCRYPT’;
NTE_EXISTS: ErrToStr := ’NTE_EXISTS’;
NTE_FAIL: ErrToStr := ’NTE_FAIL’;
NTE_KEYSET_ENTRY_BAD: ErrToStr := ’NTE_KEYSET_ENTRY_BAD’;
NTE_KEYSET_NOT_DEF: ErrToStr := ’NTE_KEYSET_NOT_DEF’;
NTE_NO_KEY: ErrToStr := ’NTE_NO_KEY’;
NTE_NO_MEMORY: ErrToStr := ’NTE_NO_MEMORY’;
NTE_PROV_DLL_NOT_FOUND: ErrToStr := ’NTE_PROV_DLL_NOT_FOUND’;
NTE_PROV_TYPE_ENTRY_BAD: ErrToStr := ’NTE_PROV_TYPE_ENTRY_BAD’;
NTE_PROV_TYPE_NO_MATCH: ErrToStr := ’NTE_PROV_TYPE_NO_MATCH’;
NTE_PROV_TYPE_NOT_DEF: ErrToStr := ’NTE_PROV_TYPE_NOT_DEF’;
NTE_PROVIDER_DLL_FAIL: ErrToStr := ’NTE_PROVIDER_DLL_FAIL’;
NTE_SIGNATURE_FILE_BAD: ErrToStr := ’NTE_SIGNATURE_FILE_BAD’;
//: ErrToStr := ’’;
else ErrToStr := ’unknown error’;
end;
end;
 
Ответы:
13.05.2003 13:23:03Kirill Sobolev
Я плохо разбираюсь в Дельфи и не знаю, что такое Pchar - это то же самое, что и char* в С? Если да, то проблема вероятно в этом - имя хранилища должно быть Unicode строкой.