6

我正在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 一起工作,还需要做一些额外的事情吗?

4

2 回答 2

3

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

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

您是否通过 RDP 工作?

于 2019-06-07T12:21:24.617 回答
0

正如它在文档中所说

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

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

于 2019-06-06T15:30:21.133 回答