问题标签 [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 投票
2 回答
2552 浏览

windows - 如何查找 PCSC 阅读器的设备实例 ID

只有在 Windows >= XP 上使用的 PCSC 阅读器的句柄和上下文winscard,是否有某种方法可以获取其设备实例 ID 或其他可用于SetupDi*API 以找出为所述阅读器加载的驱动程序的方法。

SCardGetReaderDeviceInstanceId仅在 Windows 8 上可用,所以很遗憾不适用于我。

作为方案 B,所有智能卡读卡器都可以在SetupDi使用智能卡读卡器类 guid 时进行枚举。但是我需要一个独特的属性才能在SCard*API 和SetupDi*API 之间关联阅读器。例如,序列号听起来不错,但并非所有制造商都使用它。

有任何想法吗?

0 投票
1 回答
782 浏览

c# - SCardGetCardTypeProviderName 返回空结果

我正在尝试通过 C# 中的互操作使用 SCardGetCardTypeProviderName。其中一个参数是引用,它应该根据传入的卡上下文返回智能卡提供者的名称。这是我正在使用的代码:

但是 providerName 总是返回空,而 providerNameLength 更改为 43,这让我认为这是一个编组问题。但我尝试将 providerName 编组为:

  • LPWStr
  • LPTStr
  • LPStr

在后两者的情况下,我得到一串奇怪的字符,而不是空字符串,这让我再次认为这是一个编组/翻译问题。

0 投票
1 回答
846 浏览

parameters - 当 dwMaxCCIDMessageLength 大于 4KB 时,SCardTransmit 返回 ERROR_INVALID_PARAMETER

我正在开发一个 USB 智能卡,并且我使用 Windows PC/SC API 来使用该智能卡传输数据。这是我的代码的一部分:

我确定大小和指向两个输入/输出缓冲区的指针都是有效的。

直到dwMaxCCIDMessageLength设备描述符的字段低于0x00001000h,没有问题并且程序工作正常,但是当我将其增加到更大的值(超过 4kb)时,SCardTransmit失败并显示 ERROR_INVALID_PARAMETER 结果代码。

目前,我知道pSendBuf智能卡已成功接收内容并处理内容已完成,但是当卡想要返回响应时,会发生该错误,我认为这是 PC/ 中的某种不一致(例如缓冲区大小限制) SC司机。

有谁能够帮我?

0 投票
1 回答
1410 浏览

smartcard - SCardEstablishContext 未设置上下文指针

我正在从 C# 调用 winscard.dll 方法,并且在测试应用程序中一切正常。将代码移动到更大的项目时,我很难建立上下文。

我建立上下文的呼吁如下:

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

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

任何想法都非常感谢。

0 投票
1 回答
6900 浏览

c# - 连接金雅拓智能卡时出现错误 6

我是智能卡开发的新手。我想做的是,
1>获取读卡器的名称。
2>连接到读卡器中的卡。
3>使用 c# 更改卡的管理员密钥。

对于第一点,我使用了 winscard.DLL- 函数 SCardListReaders。它运作良好。
现在为下一步,我尝试使用 winscard.dll 的函数 -SCardConnect。

但是当我运行它时,它会返回“6”,但它应该返回 0。我真的很困惑。
任何想法,这意味着什么?我在哪里做错了?
请帮忙。
先感谢您。

0 投票
2 回答
12663 浏览

c# - 使用 WinSCard 库获取 mifare 卡序列号

我正在开发一个需要读取 mifare 卡序列号的应用程序,我使用的语言是 C#。

我是 mifare reader 编程的新手,所以很抱歉提出愚蠢的问题。首先我想知道 Mifare UID 和 Mifare 序列号是否不同。

我已经设法在 WinSCard 库的帮助下获得 UID,但我无法弄清楚如何获得应该是 10 位数字的卡序列号。

如果您能指出正确的方向,我将不胜感激。

在此先感谢您的帮助。问候

0 投票
0 回答
174 浏览

c++ - 在 Citrix 终端会话中捕捉到新的智能卡读卡器的到来

根据 MSDN,有一个特殊的虚拟读卡器 \?PNP?\Notification 允许获取新智能卡读卡器到达的通知(通过SCardGetStatusChange函数)。我的代码看起来像(省略了错误处理和检查):

此代码在非终端会话上完美运行。但是通过 Citrix 终端会话函数 SCardGetStatusChange 立即返回并且 rgReaderStates[0].dwEventState 为 7 (SCARD_STATE_UNKNOWN)。那么,我如何才能收到插入新智能卡读卡器的通知?

0 投票
3 回答
73337 浏览

rfid - MiFare - MiFare 卡的 UID 和序列号的区别

我需要使用 WinSCard 读取 MiFare 卡的序列号。我能够从 MiFare 卡中读取 7B UID。

困惑是我不知道MiFare卡的UID和序列号是否相同?!

我已经用谷歌搜索了这个问题,但只能获得部分成功。我也在stackoverflow上发现了一个问题,但没有帮助。

我在网上找到了一份NXP的文档,上面写着UID和序列号不同。(在第 3 页,第 5 行)

OmniKey 有一个应用程序可以读取卡的序列号,它也只返回 UID。

NXP 文档说UID <> Serial Number和其他标准 OmniKey 应用程序返回UID 作为 Serial Number

我已经开始在这个问题上扯掉我的头发了。如果有人可以提供帮助,我将不胜感激。

0 投票
1 回答
3321 浏览

c# - 获取智能卡序列号 SCardGetAttrib 返回错误 50

我正在使用 ACS-ACR88 智能卡读卡器。我正在尝试使用SCardGetAttribin 中的函数读取智能卡序列号Winscard.dll,但它总是返回错误 50。50 未在Smart Card Return Values中定义。错误 50 是 0x32,它可能是ERROR_NOT_SUPPORTED.

我寻找可能是什么意思,发现它可能是读卡器的驱动程序!这是答案的链接:Re: SCardGetAttrib, SERIAL_NO, error 50

我已经更新了驱动程序,但没有运气。这是我到目前为止所做的:

为什么我在使用 时收到错误SCardGetAttrib,我该如何解决?

0 投票
1 回答
2735 浏览

c++ - 如何在 C++ 中使用单个 APDU 发送和获取数据?

我正在使用 winscard 编写 C++ 代码。我注意到,如果我使用 Scardtransmit 发送仅发送数据或仅接收数据的命令,则没有问题。我可以发送数据或得到正确的响应。但是,当命令既发送数据又期望响应时,我总是得到 61xx。我知道错误代码 61xx 意味着有一个 xx 字节的响应,其中 Le 不正确,并检查了所有可能的 Le,包括返回值 xx,但没有任何变化。例如,让 Apdu 的形式为 CLA INS P1 P2 Lc Data Le,我得到 61XX,然后我发送 CLA INS P1 P2 Lc Data XX,我再次得到 61XX。

我使用java和其他工具检查了卡,并验证卡没有任何东西。

据我了解,为 Lc 和 Le 分配了一个字节 P3。有没有办法从 DATADATA 命令获得响应(除了 SW1SW2)?