建立资源管理器上下文以使用智能卡读卡器

时间:2019-05-31 15:33:46

标签: visual-c++ windows-10 winscard

我正在使用Visual Studio 2017中的visual c++开发应用程序。

我正在使用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);

    return(1);
}

我所知道的是,此功能使用Windows服务(称为“智能卡”)来获取执行数据库操作(读/写卡)的范围。

不幸的是,这个简单的应用程序仅在Windows 7环境中有效(即返回SCARD_S_SUCCESS代码)。在我测试过的所有Windows 10系统中,返回代码始终为0x8010001DL,它与声明以下内容的定义SCARD_E_NO_SERVICE相关联:

  

智能卡资源管理器未运行。

在我测试过的每个Windows 10系统中,在测试程序之前,我都会手动启动“智能卡”服务,并在测试过程中检查程序是否仍在运行。

我使用的winscard.lib文件带有Microsoft Windows SDK版本10.0.17763.0

要在Windows 10上运行还需要做些额外的事情吗?

2 个答案:

答案 0 :(得分:1)

智能卡子系统(和资源管理器)必须“开箱即用”工作。

尝试安装一些向系统提供虚拟插槽的智能卡驱动程序。
例如,one

您是否通过RDP工作?

答案 1 :(得分:0)

documentation

中所述
  

调用应用程序必须具有相应的访问权限   任何数据库操作。

这意味着您应使用管理员权限运行程序。