Установите контекст диспетчера ресурсов для использования считывателя смарт-карт - PullRequest
5 голосов
/ 31 мая 2019

Я занимаюсь разработкой приложения c++ с использованием Visual Studio 2017.

Я использую библиотеку Windows winscard . Я начинаю с простого проекта, в котором я вызываю функцию SCardEstablishContext в качестве первого шага, необходимого для чтения смарт-карты.

Следующий фрагмент кода, который я использую:

LONG resContext = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &hSC);
if (resContext != SCARD_S_SUCCESS) {
    printf("Failed\n");
    printf("Error %X\n", resContext);
}

Что я знаю, так это то, что эта функция использует службу Windows под названием «Смарт-карта», чтобы получить область, в которой выполняются операции с базой данных (карты чтения / записи).

К сожалению, это простое приложение работает (то есть возвращает код SCARD_S_SUCCESS) только в среде Windows 7. Во всех системах Windows 10, которые я тестировал, код возврата всегда 0x8010001DL, который связан с определением SCARD_E_NO_SERVICE, которое утверждает:

Диспетчер ресурсов смарт-карт не работает.

В системах Windows 7 программа работает без прав администратора, в системах Windows 10 я тоже пытался с правами администратора, но ошибка та же.

В каждой протестированной мной системе Windows 10 я вручную запускал службу «Смарт-карта» перед тестированием своей программы и проверял, что она все еще работает во время тестирования.

В системах Windows 7 и Windows 10 у меня нет подключенного устройства чтения смарт-карт.

Файл winscard.lib, который я использую, поставляется с Microsoft Windows SDK версией 10.0.17763.0

Что-нибудь еще нужно сделать, чтобы он работал с Windows 10?

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Подсистема смарт-карт (и менеджер ресурсов) должны работать «из коробки».

Попробуйте установить некоторые драйверы смарт-карт, которые представляют виртуальные слоты в системе.
Например, one .

Вы работаете через RDP?

0 голосов
/ 06 июня 2019

Как сказано в документации

Вызывающее приложение должно иметь соответствующие права доступа для любые действия с базой данных.

Это означает, что вы должны запустить программу с правами администратора.

...