问题标签 [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.

0 投票
1 回答
1218 浏览

apdu - ScardTransmit 总是返回错误 16

我正在尝试使用 Winscard 库在 Windows 中构建应用程序以与非接触式智能卡读卡器进行通信。我能够连接到设备,但是当我尝试使用 scardtransmit 发送一些数据时,我收到错误 16。我附上了我在下面使用的一段代码

0 投票
1 回答
1117 浏览

smartcard - 读取印在 HID iClass 卡上的数字

我想读取印在 HID iClass(2ks) 卡上的数字。使用 WinScard.dll 我能够读取 UID 和 ATR。

我做了一些研究并得出结论,打印的数字是一个编程数据,可能受 PIN 保护。我在这里正确吗?如果是这样,我如何阅读这个打印的数字。

任何帮助将不胜感激。提前致谢。

0 投票
0 回答
400 浏览

c++ - SCardGetStatusChange 第一次机会异常

我在一个线程中使用以下代码:

在哪里:

一切正常,但是这个函数会产生很多错误:

app.exe 中 0x7510C42D 处的第一次机会异常:Microsoft C++ 异常:内存位置 0x05A0F3A8 处的 unsigned long。

我正在使用 Visual Studio 2012 和 Windows-7 64 位。

请帮忙。
谢谢!

0 投票
2 回答
1751 浏览

c# - 智能卡读卡器命名

我在系统中有两个阅读器(HID OMNIKEY 5321)(每个阅读器执行不同的功能)

  • 读卡器 1 - “智能卡读卡器0
  • 读卡器 2 - “智能卡读卡器1

在我的程序中设置了

  • “智能卡读卡器0 ” - 动作 1
  • “智能卡阅读器1 ” - 动作 2

但有时(没有重新启动,可能失去联系)

  • 读卡器 1 的名称为“智能卡读卡器1
  • 读卡器 2 的名称为“智能卡读卡器0

并且程序没有做用户需要的事情。我在 WinScard.dll 中使用 SCardGetStatusChange(需要阅读器的名称)

该怎么办?有没有办法更改阅读器的名称(固件、驱动程序......)?是否可以使用阅读器的序列号?

我也看了,但没有结果 智能卡读卡器命名:当移除任何读卡器时,其余的名称发生变化 PCSC 智能卡读卡器的“友好名称”是如何构造的?

0 投票
2 回答
4024 浏览

smartcard - 如何读/写仅同步的智能卡,如存储卡

我有一个只支持同步接口的 IC 存储卡(如 SLE5532、SLE5542...等)

我想知道如何编写一个读取内存内容、验证 PSC(PIN)和写入内存的应用程序。

这种类型的卡不能接受像微处理器卡这样的普通 APDU。在数据表中,它指定要以二进制形式发送的命令(所有命令为 3 字节长度)

我找到了一个设计用于与 SCM Reader(基于 MCSCM.dll)一起使用的应用程序,但它不适用于我的 OmniKey 阅读器。

我想知道是否有可能构建一个直接调用 winsCard API 函数而无需直接使用 Reader 的 DLL 的应用程序。如果是这样,调用的正确函数是什么?

如果不可能,我怎样才能找到 OmniKey 的 API?任何人都可以寄给我使用 OmniKey 3121 读卡器和同步卡的样品吗?

提前致谢

0 投票
1 回答
2288 浏览

c# - SCardEstablishContext 未在释放模式下设置上下文指针

我正在从 C# 调用 winscard.dll 方法,并且在调试模式下一切正常。我遇到的问题是处于发布模式

我建立上下文的呼吁是

在我的测试应用程序中,当我调用它时,pntContext 变量似乎在调试模式下正确设置。但是,在发布模式下,它没有被设置。但奇怪的是,返回码仍然是 0(成功)。

所以,我只是想知道可能导致这种情况的情况是什么,或者我可能做错了什么?

PS 另外我检查的一件事是编译平台设置为任何 CPU。我正在尝试更改平台,当我将 x86 作为平台和发布模式时它会起作用。如此奇怪的行为,为什么它会在调试模式下工作?

0 投票
1 回答
1752 浏览

nfc - 无法验证 NTAG213

我正在使用 ACR122U NFC 阅读器对 NTAG213 NFC 标签进行密码保护。我想我已经设法正确设置了密码,但之后我无法进行身份验证和更改标签。我的身份验证代码如下所示:

这应该将 PWD_AUTH 命令与 Pwd 一起发送到 NTAG213。如果密码错误,我希望收到一个错误,如果密码正确,我希望收到两个字节的 PACK。但是 SCard_Status 是 SCARD_S_SUCCESS 并且之后 RxLength 是 0。如果我尝试写入标签,我会收到错误消息。

我无法找到任何显示如何执行此操作的示例。谁能看到我做错了什么?

0 投票
2 回答
4866 浏览

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 描述没有提示在这种情况下要做什么,我找不到任何线索。如果有人知道这个问题的解决方案,请分享!

0 投票
4 回答
3699 浏览

c++ - 如何读取智能卡上的用户数据?

首先,我在使用智能卡方面还是个新手,我不知道数据是如何存储的,哪些数据在智能卡上受到保护。

我正在尝试读取受 PIN 保护的学生证智能卡。我一直在使用默认的 Windows 智能卡库 (winscard.lib) 使用 C++ 进行编程。

我已成功读取 ATR 标头,但据我所知,ATR 标头包含有关如何与阅读器通信的信息,而不是用户信息。

我尝试从卡中读取二进制文件,但 APDU 总是返回 6E 00,表示“不支持类”或“错误指令”。这是代码:

其中 cmdRead 如下:

有什么问题?我需要先验证卡才能读取二进制文件吗?读取二进制权限函数是否可以读取学生 ID 等基本数据?

0 投票
1 回答
934 浏览

delphi - SCardGetStatusChange 的 SCARD_F_INTERNAL_ERROR 结果

我正在开发使用 Mifare Classic 1K 卡和 HID Omnikey 5421(5321 的继任者)的应用程序。我使用线程来检测卡移除/插入。Delphi代码(线程方法):

我正在使用 SendMessage 通知我的智能卡类我检测到正确的状态。当我检测到卡插入时,我也会自动连接并从智能卡读取数据。

我的应用程序在大多数情况下都可以正常工作,但有时例如在 10000 次卡插入中,我SCardGetStatusChange. 当这种情况发生时,SCardGetStatusChange 开始一直只产生SCARD_F_INTERNAL_ERROR。当我检测到这种情况时,我尝试结束线程SCardCancelSCardReleaseContext建立新上下文并使用这个新上下文创建新的观察者线程,但这没有帮助,因为 SCardGetStatusChange 继续返回SCARD_F_INTERNAL_ERROR。只有当我关闭应用程序并再次运行时,问题才会消失。它对我来说是随机发生的,我无法使用某些已知场景重现它。在 PC 中可以有更多的读者,但我只建立与 Omnikey 5421 的连接。

有人遇到过这个问题吗?