Статус: Участник
Группы: Участники
Зарегистрирован: 12.10.2017(UTC) Сообщений: 16
Сказал(а) «Спасибо»: 1 раз
|
Добрый день. Просмотрел несколько подобных тем на форуме, но не получается реализовать перечисление всех считывателей на Delphi. Возможно ли это? Использую Delphi XE2, модуль от JEDY JwaWinCrypt. При разных вариантах передачи в качестве dwParam неописанной в модуле PP_ENUMREADERS (114) и с разными комбинациями флагов возникает одна и та же ошибка: Указан неправильный тип.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,630 Сказал «Спасибо»: 494 раз Поблагодарили: 2034 раз в 1578 постах
|
Здравствуйте.
Да, возможно.
Показывайте код |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.10.2017(UTC) Сообщений: 16
Сказал(а) «Спасибо»: 1 раз
|
Код:function EnumReadersList(var List:TArray<string>):boolean;
var DataLen,hProv,Flag: Cardinal;
Data:PByte;
res:boolean;
index:integer;
const
PP_ENUMREADERS = 114;
begin
SetLength(List,0);
result:=CryptAcquireContext(hProv,nil,nil,PROV_RSA_FULL,0);
if result then begin
res:=CryptGetProvParam(hProv,PP_ENUMREADERS,nil,DataLen,CRYPT_FIRST OR 32); //Ошибка возникает здесь
if res then begin
GetMem(Data,DataLen);
Flag:=CRYPT_FIRST;
while CryptGetProvParam(hProv,PP_ENUMREADERS,Data,DataLen,Flag) do begin
index:=length(List);
SetLength(List,index+1);
List[index]:=string(PChar(Data));
Flag := CRYPT_NEXT;
end;
FreeMem(Data);
end;
CryptReleaseContext(hProv, 0);
end;
end;
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,630 Сказал «Спасибо»: 494 раз Поблагодарили: 2034 раз в 1578 постах
|
А зачем в коде используется обращение к PROV_RSA_FULL? dwProvType = 75 (или 80\81) В моём случае выдает необходимое: Цитата: Реестр Aktiv Co. ruToken 2 Aktiv Co. ruToken 1 Aktiv Co. ruToken 0 Диск Y Диск D
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.10.2017(UTC) Сообщений: 16
Сказал(а) «Спасибо»: 1 раз
|
Автор: Андрей * А зачем в коде используется обращение к PROV_RSA_FULL? dwProvType = 75 (или 80\81) В моём случае выдает необходимое: Цитата: Реестр Aktiv Co. ruToken 2 Aktiv Co. ruToken 1 Aktiv Co. ruToken 0 Диск Y Диск D
Видимо скопипастилось с других функций, сам дурак, признаю. Спасибо. А можно поподробнее о разницы в dwProvType с 75,80,81. И теперь если в системе больше одного считывателя, то функция выводит диалог, для выбора этого носителя. Можно просто получить список без него?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,630 Сказал «Спасибо»: 494 раз Поблагодарили: 2034 раз в 1578 постах
|
Автор: Den94 Автор: Андрей * А зачем в коде используется обращение к PROV_RSA_FULL? dwProvType = 75 (или 80\81) В моём случае выдает необходимое: Цитата: Реестр Aktiv Co. ruToken 2 Aktiv Co. ruToken 1 Aktiv Co. ruToken 0 Диск Y Диск D
Видимо скопипастилось с других функций, сам дурак, признаю. Спасибо. А можно поподробнее о разницы в dwProvType с 75,80,81. И теперь если в системе больше одного считывателя, то функция выводит диалог, для выбора этого носителя. Можно просто получить список без него? Указанная функция не выводит диалога, она возвращает список доступных считывателей. Меняйте код, который не показан в данном посте. Задача какая вообще? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.10.2017(UTC) Сообщений: 16
Сказал(а) «Спасибо»: 1 раз
|
Автор: Андрей * Указанная функция не выводит диалога, она возвращает список доступных считывателей. Меняйте код, который не показан в данном посте.
Ну, как бы диалог возникает, когда код входит в эту функцию. Что в коде вне этой функции может влиять на его появление? Автор: Андрей * Задача какая вообще?
Задача стоит добраться в интерфейсе до сертификатов на носителе, минуя кучу диалоговых окошек. Желательно в виде списка носитель\контейнер\сертификат и дальше работать с выбранным сертификатом
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,630 Сказал «Спасибо»: 494 раз Поблагодарили: 2034 раз в 1578 постах
|
У меня без диалогов.
Что мешает сократить путь и получить непосредственно сами контейнеры через PP_ENUMCONTAINERS ?
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,630 Сказал «Спасибо»: 494 раз Поблагодарили: 2034 раз в 1578 постах
|
Вот здесь в исходниках всё есть необходимое (список csp\контейнеров\получение сертификата из контейнера и т.п.) |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.10.2017(UTC) Сообщений: 16
Сказал(а) «Спасибо»: 1 раз
|
Автор: Андрей * У меня без диалогов.
Что мешает сократить путь и получить непосредственно сами контейнеры через PP_ENUMCONTAINERS ?
ничего не мешает, просто программа в основном будет работать именно с сертификатами на считывателях. По этому, во-первых, хотелось бы отсечь остальной мусор, а во-вторых, всё таки хорошо бы знать где и что лежит
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close