| ||||
| ||||
Здасти всем! Помогите начинающему. Надо показать на экране список имеющехся сертификатов в хранилеще, для выбора пользователем. Плдскажите какими функциями это можно сделать. (имеется ввиду CryptoAPI функции) | ||||
Ответы: | ||||
| ||||
перебор можно сделать с помощью CertEnumCertificatesInStore | ||||
| ||||
Пытался. Но после выполнения функции CertNameToStr мне отдается пустая строка. | ||||
| ||||
А пример можно? | ||||
| ||||
Я пишу не на С так что не обесутте. hCertStore=CertOpenSystemStore(0,"MY") hSertCont=0 do while .t. hSertCont=CertEnumCertificatesInStore(hCertStore,hSertCont) if hSertCont=0 exit endif name_=space(512) CertNameToStr(X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,hSertCont,0,@name_,512) ............. enddo CertNameToStr на выходе дает единицу. Запускаю обработчик ошибок выдает "Встречено неверное значение тега ASN1" | ||||
| ||||
Вообще то CertNameToStr надо передавать имя а не контекст сертификата целиком. Посмотрите поле структуры CERT_CONTEXT pCertInfo. В pCertInfo есть поля Issuer и Subject, их как раз и надо передавать. | ||||
| ||||
Да все правильно я так и делаю, просто ошибся набирая текст. | ||||
| ||||
Хорошо, а можно тогда взглянуть на текст без ошибок? И еще, что имеется в виду под 3им параметром, который 0. | ||||
| ||||
В Visual FoxPro нет понятия структур поэтому приходится изврощатся. hCertStore=CertOpenSystemStore(0,"MY") hSertCont=0 do while .t. hSertCont=CertEnumCertificatesInStore(hCertStore,hSertCont) if hSertCont=0 exit endif a=createobject(’cert_contex’) a.SetPointer(hSertCont) a1=createobject(’ctruct_info’) a1.SetPointer(a.pSertInfo) CERT_NAME=a1.Subject name_=space(512) CertNameToStr(X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,CERT_NAME,1,@name_,51 2) ............. enddo В CERT_NAME получаем некое число, тоесть ссылку на CERT_NAME_BLOB | ||||
| ||||
Да, с FoxPro я не знаком :) Но 2й параметр должен быть не ссылка, а указатель, т.е. видимо @CERT_NAME? | ||||
| ||||
Пробовал по разному нечего неполучается. Всетаки видемо проблема описания структуры. Хотя уже не первый день работаю с нимим на Фоксе. | ||||
| ||||
Поищите в MSDN "CryptUI". Например, http://msdn.microsoft.com/library/en-us/seccrypto/security/cryptuidlgselectcertificatefromstore.asp | ||||