问题标签 [winscard]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - SLE5528 存储卡命令读取其唯一 ID
我有 ACR38U 智能卡读卡器和 SLE5528 存储卡。我想知道 SLE5528 存储卡读取其唯一 ID(或序列号)的 HEX 读取命令是什么?那可能吗?
提前致谢。
c# - ACR1252 NFC读写器序列号
我买了几个 ACR1252 NFC 阅读器,因为它们似乎是唯一可以存储和返回内部序列号的阅读器。我需要它们用于 C# 程序,我需要区分插入同一台计算机的 2 个 NFC 阅读器,因为 Windows 按连接顺序分配名称并且可以更改。
我的问题是:如何在没有 NFC 卡的情况下访问返回序列号的命令?它仅在读卡器读取卡片时有效。
我的代码(缩写)是这样的:
只有第一个命令SCardEstablishContext
可以在没有卡的情况下工作。但是如果读卡器上没有卡SCardConnect
,我会得到错误。SCardControl
SCardConnect
返回 retCode = -2146434967
SCardControl
返回 retCode = 6
但我需要 3 个命令才能获得:
SCardEstablishContext -> hContext -> SCardConnect -> hCard -> SCardControl -> 读卡器序列号
如何在没有附加卡的情况下获取读卡器序列号(只是将读卡器插入 USB 端口)?
c++ - 智能卡 API 抛出 First Chance 异常,但程序运行良好
介绍
我正在学习如何使用智能卡 API,以便在将卡号插入读卡器后获取卡号。
到目前为止,我已经设法创建了一个运行(据我所见)没有错误的工作应用程序。
问题
在调试过程中,我看到了各种第一次机会异常,但每个智能卡 API 都会返回SCARD_S_SUCCESS
并且程序不会崩溃,也不会出现任何其他错误行为。
相关信息
- 我正在使用 Visual Studio C++ 2013
- 操作系统是Windows 8.1
- 使用的阅读器是ACR122U
- 重现问题的 MVCE:
我测试了2个案例:
- 阅读器未插入
- 读卡器已插入,程序按ENTER指示按终止
未插入时,应用程序正确显示错误消息,线程干净地退出,但我从输出窗口中获得以下相关内容:
线程0x120C
来自SmartCardListener
演示。
当阅读器插入时,我按下ENTER,代码干净地关闭。
注意输出窗口内容的相关部分:
线程0x1D2C
来自SmartCardListener
演示。
我的努力
在这两种情况下,我都做了以下事情:
- 转到 Visual Studio 菜单 Debug -> Exceptions 并选中
Thrown
复选框 - 通过按在调试模式下运行代码F10
- 每次它都会在 Smart Card API 处中断
- 弹出“第一次机会例外......”会出来
- 我会选择
Continue
(Break
并且Cancel
也被提供) - 弹出窗口会再次出现,我会再次选择
Continue
再次,程序将干净地关闭,检查返回值SCARD_S_SUCCESS
或预期值(SCARD_E_CANCELLED
何时SCardCancel
被调用或SCARD_E_NO_READERS_AVAILABLE
阅读器不存在时)。
我还注意到异常总是发生在内存位置0x76DD5EF8
,但我不知道如何使用这些信息来帮助我解决问题。
我试过谷歌搜索解决方案,我发现唯一有用的是这个。
通过阅读接受的答案中提供的链接,我得出的结论是,这些异常可能是误报。
问题
- 我的结论正确吗?这只是虚惊一场?
- 如果我的结论是错误的,你能指导我如何解决这个问题吗?
c# - C# WinScard.SCardListReaders 应该只列出连接的阅读器(但它列出了所有过去安装的现在未连接的阅读器名称)
请浏览我下面的 C# 代码。我正在尝试获取现在连接到我的计算机的智能卡读卡器列表。但是这个函数会返回过去连接的所有智能卡读卡器名称(我的意思是现在没有连接)。我只想要活动(当前)连接的读者名称列表。我无法理解问题出在哪里。
我尝试了这个网站上的一个 exe,它是用 C 编写和编译的。它只显示连接的读者。我比较了代码,但我发现没有区别。请帮助找到解决方法。
pcsc - 未检测到智能卡读卡器 - PCSC 错误 - 0x8010002e
我的系统工作正常,但现在我的任何应用程序在设备管理器中显示时都没有检测到系统中连接的智能卡读卡器(SCM 微系统)。
在这里,我尝试通过尝试 C++ 代码 (winscard.h) 连接阅读器来获得确切的错误,
在这里它给出了错误 - 0x8010002e
这里有什么建议吗
windows - SCardEstablishContext 在 Windows 10 Home 上返回 1753 (EPT_S_NOT_REGISTERED)
我在用户空间应用程序中使用 Windows SCard (Winscard.h) API 与智能卡读卡器交互。该应用程序在也加入域的 Windows 10 企业版计算机上运行良好,但在未加入任何域的 Windows 10 家庭版计算机上无法正常工作(此类版本不可能)。
函数是这样调用的:
结果变量包含值 1753 (EPT_S_NOT_REGISTERED),我不明白“端点映射器没有更多可用的端点”是什么意思。确实意味着在智能卡上下文中。出现以下问题
Windows 10 家庭版是否支持智能卡 API?
是否需要计算机加入域才能使用此类 API?
smartcard - 带多个插槽的智能卡读卡器 PCSC
我基于具有三个卡槽的微控制器实现了一个带有 CCID 协议的读卡器。
在协议的描述中,每个团队都有接收命令的槽数字节。
我使用应用程序 PCSC_Sample 和 SCardToolSet 的计算机。问题是他们只向 0 号插槽发送请求。
如何确定卡槽的数量?是某个参数在其中一个答案中将 Card READER 作为参数发送到 pcsc 程序,还是程序本身在向导(计算机)上搜索卡片?如果是后者,那么您可以为 Windows 10 推荐什么程序?
c++ - 建立资源管理器上下文以使用智能卡读卡器
我正在c++
使用 Visual Studio 2017 开发应用程序。
我正在使用 windows 库winscard。我从一个简单的项目开始,我将调用该函数SCardEstablishContext
作为读取智能卡所需的第一步。
我正在使用的代码片段如下:
我所知道的是,此功能使用称为“智能卡”的 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 一起工作,还需要做一些额外的事情吗?
smartcard - 第三方智能卡读卡器如何与 HID iCLASS 卡通信?
我正在尝试使用 Broadcom 非接触式智能卡读卡器来读取使用PC/SC和<winscard.h>
.
我可以通过APDU调用 winscard 的SCardTransmit函数成功读取卡的序列号FF CA 00 00 00
;但是,我不知道如何提取和解密 iCLASS 卡的内容。
根据 HID 的OMNIKEY 开发人员指南第 12 章,可以通过发出具有 INS 0x72 的 APDU 来启动安全会话。一旦建立了安全会话,他们就可以读取卡的内容。当我发出 APDUFF 72 00 68 10 <16-byte key>
时,我得到一个响应 SP1/SP26D 00
代表“不支持 INS”。这并不奇怪,因为 INS 0x72 特定于 OMNIKEY 阅读器,我的 Broadcom 阅读器不支持。如何使用第三方读卡器启动与 iCLASS 卡等效的安全会话?
c++ - 读取连续内存块智能卡 Mifare 1k
我正在使用Mifare 1k
卡和acr1252
读卡器;我正在开发使用visual c++
和Winscard
图书馆。
我已经成功地使用以下代码读取了单个块:
此函数调用返回SCARD_S_SUCCESS
并readRes
包含块值 +SW1
和SW2
带值0x90 0x00
(成功)
我要做的是使用相同的函数读取 2 个连续的内存块(即扇区 0 的块 0 和块 1),仅更改 apdu 命令:
但不起作用:返回状态仍然存在SCARD_S_SUCCESS
,但读取的数据仅包含SW1
并SW2
带有值0x63 0x00
(错误)。
带有卡的 AFAIKMifare 1k
可以读取一个扇区的前 3 个块,但所有尝试读取超过一个扇区的读取测试都会因该错误而失败。
我错过了什么吗?