Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

3 Страницы123>
Опции
К последнему сообщению К первому непрочитанному
Offline Den94  
#1 Оставлено : 12 октября 2017 г. 10:03:24(UTC)
Den94

Статус: Участник

Группы: Участники
Зарегистрирован: 12.10.2017(UTC)
Сообщений: 16

Сказал(а) «Спасибо»: 1 раз
Добрый день. Просмотрел несколько подобных тем на форуме, но не получается реализовать перечисление всех считывателей на Delphi. Возможно ли это? Использую Delphi XE2, модуль от JEDY JwaWinCrypt. При разных вариантах передачи в качестве dwParam неописанной в модуле PP_ENUMREADERS (114) и с разными комбинациями флагов возникает одна и та же ошибка: Указан неправильный тип.
Offline Андрей Писарев  
#2 Оставлено : 12 октября 2017 г. 10:52:22(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,630
Мужчина
Российская Федерация

Сказал «Спасибо»: 494 раз
Поблагодарили: 2034 раз в 1578 постах
Здравствуйте.


Да, возможно.

Показывайте код
Техническую поддержку оказываем тут
Наша база знаний
Offline Den94  
#3 Оставлено : 12 октября 2017 г. 11:23:00(UTC)
Den94

Статус: Участник

Группы: Участники
Зарегистрирован: 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;
Offline Андрей Писарев  
#4 Оставлено : 12 октября 2017 г. 12:04:48(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 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
Техническую поддержку оказываем тут
Наша база знаний
Offline Den94  
#5 Оставлено : 12 октября 2017 г. 12:17:11(UTC)
Den94

Статус: Участник

Группы: Участники
Зарегистрирован: 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.
И теперь если в системе больше одного считывателя, то функция выводит диалог, для выбора этого носителя. Можно просто получить список без него?
Offline Андрей Писарев  
#6 Оставлено : 12 октября 2017 г. 12:24:35(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 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.
И теперь если в системе больше одного считывателя, то функция выводит диалог, для выбора этого носителя. Можно просто получить список без него?


Указанная функция не выводит диалога, она возвращает список доступных считывателей.
Меняйте код, который не показан в данном посте.

Задача какая вообще?

Техническую поддержку оказываем тут
Наша база знаний
Offline Den94  
#7 Оставлено : 12 октября 2017 г. 12:35:44(UTC)
Den94

Статус: Участник

Группы: Участники
Зарегистрирован: 12.10.2017(UTC)
Сообщений: 16

Сказал(а) «Спасибо»: 1 раз
Автор: Андрей * Перейти к цитате

Указанная функция не выводит диалога, она возвращает список доступных считывателей.
Меняйте код, который не показан в данном посте.

Ну, как бы диалог возникает, когда код входит в эту функцию. Что в коде вне этой функции может влиять на его появление?

Автор: Андрей * Перейти к цитате

Задача какая вообще?

Задача стоит добраться в интерфейсе до сертификатов на носителе, минуя кучу диалоговых окошек. Желательно в виде списка носитель\контейнер\сертификат и дальше работать с выбранным сертификатом
Offline Андрей Писарев  
#8 Оставлено : 12 октября 2017 г. 12:56:37(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,630
Мужчина
Российская Федерация

Сказал «Спасибо»: 494 раз
Поблагодарили: 2034 раз в 1578 постах
У меня без диалогов.

Что мешает сократить путь и получить непосредственно сами контейнеры через PP_ENUMCONTAINERS ?
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#9 Оставлено : 12 октября 2017 г. 12:58:01(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,630
Мужчина
Российская Федерация

Сказал «Спасибо»: 494 раз
Поблагодарили: 2034 раз в 1578 постах
Вот здесь в исходниках всё есть необходимое (список csp\контейнеров\получение сертификата из контейнера и т.п.)
Техническую поддержку оказываем тут
Наша база знаний
Offline Den94  
#10 Оставлено : 12 октября 2017 г. 13:01:48(UTC)
Den94

Статус: Участник

Группы: Участники
Зарегистрирован: 12.10.2017(UTC)
Сообщений: 16

Сказал(а) «Спасибо»: 1 раз
Автор: Андрей * Перейти к цитате
У меня без диалогов.

Что мешает сократить путь и получить непосредственно сами контейнеры через PP_ENUMCONTAINERS ?


ничего не мешает, просто программа в основном будет работать именно с сертификатами на считывателях. По этому, во-первых, хотелось бы отсечь остальной мусор, а во-вторых, всё таки хорошо бы знать где и что лежит
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
3 Страницы123>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.