smartcard — обнаружение проблем / обмен данными с устройством чтения карт с использованием pcsc-lite в RHEL 6 linux с использованием переполнения стека

Я пытаюсь разработать приложение, которое будет взаимодействовать с устройством чтения смарт-карт и считывать информацию со смарт-карты.

Позвольте мне дать вам среду разработки и используемое оборудование.
ОС: Red Hat Enterprise Linux 6
IDE: Затмение Юнона CDT
Язык: C / C ++

Оборудование:
Считыватель смарт-карт: Omnikey 5321 (https://www.hidglobal.com/products/readers/omnikey/5321)
Я установил драйвер и могу найти следующие каталоги / файлы:

/usr/lib64/pcsc/drivers/ifd-ccid.bundle
/usr/lib64/pcsc/drivers/ifdokrfid_lnx_x64-2.10.0.1.bundle/Contents
/usr/lib64/pcsc/drivers/ifdokrfid_lnx_x64-2.10.0.1.bundle/Contents/info.plist
/usr/lib64/pcsc/drivers/ifdokrfid_lnx_x64-2.10.0.1.bundle/Contents/Linux

Содержимое info.plist четко показывает строку «OMNIKEY CardMan 5×21» под ключом «ifdFriendlyName».

Я хочу использовать стандарт PC / SC. Следовательно, я скачал и установил PCSC-lite и проверил, что демон (pcscd) работает и статус службы в порядке.

Теперь начинается интересная часть …
В своем коде я последовательно использовал следующие API.

 
SCARDCONTEXT oSCardContext;
SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, & SCardContext);

SCardEstablishContext () возвращает SCARD_S_SUCCESS. Большой!


SCARDCONTEXT oSCardContext;
DWORD dwReaders = SCARD_AUTOALLOCATE;
LPSTR mszReaders;
SCardListReaders(oSCardContext, NULL, (LPSTR) & mszReaders, & dwReaders);

SCardListReaders () возвращает SCARD_E_NO_READERS_AVAILABLE. Нехорошо.

В этот момент я иду и проверяю, правильно ли подключен ридер. Да, это.
Я проверяю, могу ли я видеть какие-либо записи читателей в /etc/reader.conf, но я не вижу читателей, перечисленных здесь.
Затем я захожу в /etc/reader.conf.d, но здесь также не нахожу никаких файлов.
Я полагаю, что контекст смарт-карты пуст, и поэтому в списке нет читателей.

Таким образом, проблема сейчас заключается в том, что pcsc-lite не может обнаружить (?) Подключенный мой ридер и для какого драйвера был установлен?

Просто для проверки я написал простую программу, использующую библиотеку udev для чтения всех записей подсистемы "usb", и смог найти следующую информацию от udev о подключенном картридере:
Путь к узлу устройства: (ноль)
ID поставщика: 076b
Код продукта: 5321
Производитель: OMNIKEY
Продукт: Считыватель смарт-карт USB
серийный номер: (нуль)

Так что я уверен, что устройство можно обнаружить. Но почему PC / SC Resource Manager не может создать этот контекст?

Итак, как мне решить это?

Я новичок в Linux и пытаюсь решить эту проблему самостоятельно, не обращаясь за помощью. Но потом я вижу, что, когда есть нехватка времени, действительно разумнее обратиться за помощью к экспертам и людям, которые работали и / или сталкивались с такой проблемой.

Я слишком много гуглял, но не видел ни одной, у которой есть моя проблема. Так что я предполагаю, что мне не хватает чего-то действительно базового, возможно.

Если есть что-то, что я должен предоставить, пожалуйста, дайте мне знать. Я сделаю это как можно скорее.

Я ценю ваше время, чтобы прочитать.

С уважением.

РЕДАКТИРОВАТЬ :
У меня есть обновления ...

Я сделал следующее:
1. Я получил новый кард-ридер (SCM Microsystems), и все же он не был обнаружен.
2. Демон pcscd был запущен во время загрузки по умолчанию. После того, как я вошел в систему, я остановил службу, а затем запустил ее в режиме переднего плана с помощью команды «pcscd -a -f -d», и считыватель SCM был успешно обнаружен.
3. Я попытался подключить читателя в моем вопросе выше, OMNIKIEY 5321, и он не был обнаружен.

По-видимому, я пришел к следующему выводу:
1. По какой-то причине, пока pcscd не был остановлен и запущен вручную в режиме переднего плана после того, как я вошел в систему, считыватели не были обнаружены.
2. У читателя / водителя OMNIKEY есть проблема.

С уважением.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет ...

По вопросам рекламы [email protected]