| ||||
| ||||
открываю хранилище сертификатов 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; | ||||
Ответы: | ||||
| ||||
Я плохо разбираюсь в Дельфи и не знаю, что такое Pchar - это то же самое, что и char* в С? Если да, то проблема вероятно в этом - имя хранилища должно быть Unicode строкой. | ||||