Я занимаюсь разработкой приложения 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?