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

S.O*_*oli 5 c++ smartcard winscard windows-10

我正在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);
}
Run Code Online (Sandbox Code Playgroud)

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

不幸的是,这个简单的应用程序SCARD_S_SUCCESS仅在Windows 7环境中有效(即返回代码)。在我测试过的所有Windows 10系统中,返回代码始终0x8010001DLSCARD_E_NO_SERVICE断言的定义相关联:

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

在Windows 7系统上,该程序无需管理员权限即可工作;在Windows 10系统上,我也尝试使用管理员权限,但错误相同。

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

在Windows 7和Windows 10系统中,我都没有连接智能卡读卡器。

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

要使其与Windows 10兼容,还有其他事情要做?

小智 4

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

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

您通过 RDP 工作吗?