问题标签 [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.
apdu - ScardTransmit 总是返回错误 16
我正在尝试使用 Winscard 库在 Windows 中构建应用程序以与非接触式智能卡读卡器进行通信。我能够连接到设备,但是当我尝试使用 scardtransmit 发送一些数据时,我收到错误 16。我附上了我在下面使用的一段代码
smartcard - 读取印在 HID iClass 卡上的数字
我想读取印在 HID iClass(2ks) 卡上的数字。使用 WinScard.dll 我能够读取 UID 和 ATR。
我做了一些研究并得出结论,打印的数字是一个编程数据,可能受 PIN 保护。我在这里正确吗?如果是这样,我如何阅读这个打印的数字。
任何帮助将不胜感激。提前致谢。
c++ - SCardGetStatusChange 第一次机会异常
我在一个线程中使用以下代码:
在哪里:
一切正常,但是这个函数会产生很多错误:
app.exe 中 0x7510C42D 处的第一次机会异常:Microsoft C++ 异常:内存位置 0x05A0F3A8 处的 unsigned long。
我正在使用 Visual Studio 2012 和 Windows-7 64 位。
请帮忙。
谢谢!
c# - 智能卡读卡器命名
我在系统中有两个阅读器(HID OMNIKEY 5321)(每个阅读器执行不同的功能)
- 读卡器 1 - “智能卡读卡器0 ”
- 读卡器 2 - “智能卡读卡器1 ”
在我的程序中设置了
- “智能卡读卡器0 ” - 动作 1
- “智能卡阅读器1 ” - 动作 2
但有时(没有重新启动,可能失去联系)
- 读卡器 1 的名称为“智能卡读卡器1 ”
- 读卡器 2 的名称为“智能卡读卡器0 ”
并且程序没有做用户需要的事情。我在 WinScard.dll 中使用 SCardGetStatusChange(需要阅读器的名称)
该怎么办?有没有办法更改阅读器的名称(固件、驱动程序......)?是否可以使用阅读器的序列号?
我也看了,但没有结果 智能卡读卡器命名:当移除任何读卡器时,其余的名称发生变化 PCSC 智能卡读卡器的“友好名称”是如何构造的?
smartcard - 如何读/写仅同步的智能卡,如存储卡
我有一个只支持同步接口的 IC 存储卡(如 SLE5532、SLE5542...等)
我想知道如何编写一个读取内存内容、验证 PSC(PIN)和写入内存的应用程序。
这种类型的卡不能接受像微处理器卡这样的普通 APDU。在数据表中,它指定要以二进制形式发送的命令(所有命令为 3 字节长度)
我找到了一个设计用于与 SCM Reader(基于 MCSCM.dll)一起使用的应用程序,但它不适用于我的 OmniKey 阅读器。
我想知道是否有可能构建一个直接调用 winsCard API 函数而无需直接使用 Reader 的 DLL 的应用程序。如果是这样,调用的正确函数是什么?
如果不可能,我怎样才能找到 OmniKey 的 API?任何人都可以寄给我使用 OmniKey 3121 读卡器和同步卡的样品吗?
提前致谢
c# - SCardEstablishContext 未在释放模式下设置上下文指针
我正在从 C# 调用 winscard.dll 方法,并且在调试模式下一切正常。我遇到的问题是处于发布模式
我建立上下文的呼吁是
在我的测试应用程序中,当我调用它时,pntContext 变量似乎在调试模式下正确设置。但是,在发布模式下,它没有被设置。但奇怪的是,返回码仍然是 0(成功)。
所以,我只是想知道可能导致这种情况的情况是什么,或者我可能做错了什么?
PS 另外我检查的一件事是编译平台设置为任何 CPU。我正在尝试更改平台,当我将 x86 作为平台和发布模式时它会起作用。如此奇怪的行为,为什么它会在调试模式下工作?
nfc - 无法验证 NTAG213
我正在使用 ACR122U NFC 阅读器对 NTAG213 NFC 标签进行密码保护。我想我已经设法正确设置了密码,但之后我无法进行身份验证和更改标签。我的身份验证代码如下所示:
这应该将 PWD_AUTH 命令与 Pwd 一起发送到 NTAG213。如果密码错误,我希望收到一个错误,如果密码正确,我希望收到两个字节的 PACK。但是 SCard_Status 是 SCARD_S_SUCCESS 并且之后 RxLength 是 0。如果我尝试写入标签,我会收到错误消息。
我无法找到任何显示如何执行此操作的示例。谁能看到我做错了什么?
smartcard - WinScard SCardConnect 返回 SCARD_E_NOT_READY
我有一个 Java 程序,它使用 javax.smartcardio.* 成功地与带有智能卡读卡器的 Java 智能卡通信。通过 API 监视器,我发现运行它的 java.exe 女巫实际上是在使用 WinSCard winAPI(它在我开始通信的那一刻加载了 winscard.dll。我还没有设法找到我们的实际调用)
我的问题是我尝试使用 WinSCard 库在 Qt 框架 C++ 程序中实现相同的东西。如果我在阅读器插入 USB 后 10 秒内运行程序,一切正常,但在那之后阅读器进入我认为是某种节电状态的状态,然后几秒钟后它击落了 USB 管道。java程序在我尝试连接时会自动“唤醒”阅读器,但我写的C++没有,我也不知道自己做错了什么。
SCardEstablishContext()
首先我用调用建立一个上下文,然后用 列出读卡器SCardListReaders()
,它实际上列出了读卡器是问题,最后我调用SCardConnect()
连接,SCARD_E_NOT_READY
如果智能卡读卡器处于这种“睡眠”状态,则返回。
请注意,如果智能卡读卡器不是这种“睡眠”模式,我可以用相同的代码与卡通信,没有问题。
winAPI 描述没有提示在这种情况下要做什么,我找不到任何线索。如果有人知道这个问题的解决方案,请分享!
c++ - 如何读取智能卡上的用户数据?
首先,我在使用智能卡方面还是个新手,我不知道数据是如何存储的,哪些数据在智能卡上受到保护。
我正在尝试读取受 PIN 保护的学生证智能卡。我一直在使用默认的 Windows 智能卡库 (winscard.lib) 使用 C++ 进行编程。
我已成功读取 ATR 标头,但据我所知,ATR 标头包含有关如何与阅读器通信的信息,而不是用户信息。
我尝试从卡中读取二进制文件,但 APDU 总是返回 6E 00,表示“不支持类”或“错误指令”。这是代码:
其中 cmdRead 如下:
有什么问题?我需要先验证卡才能读取二进制文件吗?读取二进制权限函数是否可以读取学生 ID 等基本数据?
delphi - SCardGetStatusChange 的 SCARD_F_INTERNAL_ERROR 结果
我正在开发使用 Mifare Classic 1K 卡和 HID Omnikey 5421(5321 的继任者)的应用程序。我使用线程来检测卡移除/插入。Delphi代码(线程方法):
我正在使用 SendMessage 通知我的智能卡类我检测到正确的状态。当我检测到卡插入时,我也会自动连接并从智能卡读取数据。
我的应用程序在大多数情况下都可以正常工作,但有时例如在 10000 次卡插入中,我会从SCardGetStatusChange
. 当这种情况发生时,SCardGetStatusChange 开始一直只产生SCARD_F_INTERNAL_ERROR。当我检测到这种情况时,我尝试结束线程SCardCancel
并SCardReleaseContext
建立新上下文并使用这个新上下文创建新的观察者线程,但这没有帮助,因为 SCardGetStatusChange 继续返回SCARD_F_INTERNAL_ERROR。只有当我关闭应用程序并再次运行时,问题才会消失。它对我来说是随机发生的,我无法使用某些已知场景重现它。在 PC 中可以有更多的读者,但我只建立与 Omnikey 5421 的连接。
有人遇到过这个问题吗?