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

6
我正在开发一个使用Visual Studio 2017的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);
}

我所知道的是,此函数使用名为“智能卡”的 Windows 服务来获取执行数据库操作(读/写卡)的范围。
不幸的是,这个简单的应用程序只在 Windows 7 环境下工作(即返回 SCARD_S_SUCCESS 代码)。在我测试的所有 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 上正常工作?

1
智能卡子系统(和资源管理器)必须“即插即用”。尝试安装一些向系统呈现虚拟槽的智能卡驱动程序。例如这个one - Alexander
你是通过远程桌面协议在工作吗? - Alexander
你的进展如何? - Alexander
@Alexander 连接了读卡器之后,一切正常工作。谢谢! - S.Orioli
很高兴听到这个! - Alexander
显示剩余3条评论
2个回答

4
智能卡子系统(和资源管理器)必须即插即用。尝试安装一些智能卡驱动程序,这些驱动程序会向系统展示虚拟插槽。例如,这个。你是通过RDP工作吗?

1
我回答了RDP问题中的“是”。我直接登录电脑,神奇的是:我看到了智能卡读卡器。我猜这是一种安全功能,以便您不与世界共享您的智能卡。 - Radu C

0

正如文档所述

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

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


是的,我在问题中没有提到,但我也尝试使用管理员权限,但结果是相同的。 - S.Orioli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接