问题标签 [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# - 从 C# 中的 ATR 确定设施代码和卡号
我有以下读卡器 HID Omnikey 5325。我有一张名为 HIS Proximity 的非接触式卡。
这张卡上写的号码是 1 33593 42101044091-3。
通过读取卡片,我得到以下 ATR 十六进制:3B050002F10673
使用以下应用程序,我设法看到了以下信息。
我需要提取设施代码和代码编号以识别卡。
我设法找到了以下代码,但我遗漏了一些:
我无法弄清楚 FromByteArray 函数。我在第 69 页找到了描述:http: //www.intraproc.com/downloads/Fargo/HDP5000%20OLD/Omnikey%20CardMan%205121/Manuals/ok_contactless_developer_guide_an_en.pdf
编辑:解决方案由于@Chris Haas,我创建了与代码一起使用的 FromByteArray 函数
和用法:
delphi - Omnikey 5421 无法读取 SLE4442
我有接触式 SLE4442智能卡 (2W) 和Omnikey 5421智能卡读卡器。我的问题是与卡的连接。WinSCard 的方法SCardConnect
返回错误SCARD_W_UNRESPONSIVE_CARD 0x80100066
。有趣的是,Omnikey 5 3 21(前身 5421)不存在这个问题。我发布了用于测试读取数据的代码(Delphi):
有人遇到过这个问题吗?我也问过 HID,但暂时没有答案。
winapi - 在库中找不到函数符号
声明 SCardStatus 函数会导致错误:“在库中找不到函数符号”
代码如下:
我猜 TYPES.LPBYTE 不正确,根据https://msdn.microsoft.com/en-us/library/windows/desktop/aa379803%28v=vs.85%29.aspx, LPBYTE 应该是指向一个 32 字节的缓冲区,用于从当前插入的卡接收 ATR 字符串(如果可用)。但是我无法修复它,我感谢任何高级帮助。
c++ - 在 js-ctypes 中定义、初始化和使用类型
SCardTransmit 函数定义在https://msdn.microsoft.com/en-us/library/windows/desktop/aa379804%28v=vs.85%29.aspx
我想声明和使用这个函数,我对 js-ctypes 中一些参数的定义有问题(特别是在类型转换中):
- LPCCARD_IO_REQUEST:指向协议头结构的指针
- LPCBYTE:指向要写入卡的实际数据的指针
- LPBYTE:指向一个 32 字节缓冲区的指针,该缓冲区从当前插入的卡(如果可用)接收 ATR 字符串。(此参数在状态函数中)
如何定义、初始化和使用它们?
这是我的代码:
windows - 如何检测智能卡读卡器接口特性
我在我的 Dotnet 智能卡应用程序中使用 winscard.dll。我的阅读器 Omnikey 5321 同时具有接触式和非接触式界面,它们被检测为两个不同的阅读器。非接触式的名称中有字母“CL”。我手动选择阅读器并做我需要做的一切都没有问题。
但是,是否有可靠的方法,使用 SCardGetAttrib 或其他调用来确定这些阅读器中的哪些支持 ISO14443 - 即 EMV 非接触式?我最终想要一个快速的“选择非接触式设置”按钮,该按钮足够通用,可以与所有 PC/SC 阅读器一起使用,因此如果没有这样的界面,我还可以禁用非接触式选项。
smartcard - 双接口智能卡读卡器切换
我正在使用 HID omnikey 5421 智能卡读卡器。读卡器是双接口的,当我读取双接口(接触式和非接触式)卡时,它会自动读取非接触式数据,有时会自动读取联系人数据。但我想先读取联系人卡数据。读取联系人卡详细信息后取出双接口卡我放了另一张非接触式卡,从非接触式读取数据(仅此卡非接触式)。这种情况如何处理。我在 HID 全键阅读器中检查了选项。
请给我建议。
windows - 非接触式“重置”失败
除了我希望移除非接触式卡“A”并将其替换为非接触式卡“B”之外,我的应用程序在所有方面都正常工作。
一旦存在卡 B,我将运行以下 PCSC 功能:
尽管此代码断开连接、释放上下文、重新建立上下文并重新连接到卡,但我似乎收到 8010000f 协议不匹配错误。两张牌都是T=0。经过多次测试,我发现真正起作用的唯一方法是在将非接触式卡B引入现场后等待大约10秒无活动,然后读卡器的活动灯再次闪烁,似乎重置卡并允许交易进行像往常一样前进。
为什么会这样?有没有办法让我尽快强制最终重置?
我确实将 ScardDisconnect 和 ScardReleaseContext 命令分开,在非接触式卡 A 仍在现场时执行它们,但没有任何区别。
c# - 在 Wcf 中使用 ScardConnect 函数 (winscard.dll)
我正在尝试在我的 WCF 项目中使用 winscard.dll 的连接功能连接到智能卡。Wcf 服务,正在与安装在 Windows Server 8.1 上的远程机器一起发布
ScardConnect 函数返回值 6。
[OperationContract] [FaultContract(typeof(Service1))] int Connect(int hContext, string szReaderName, ref int phCard, ref int ActiveProtocol);
ScardConnect 功能
返回代码“6”是什么意思。
注意:Wcf 项目构建操作:x86 客户端项目构建操作:x86
c++ - 智能卡 GENERAL AUTHENTICATE 在 VMWare 下失败
尝试使用来自 VMWare Player 虚拟机(Windows 8.1 AMD64)的智能卡读卡器。该卡是美国政府发行的 PIV 卡,如相应的 NIST 标准中所述。主机是 Windows 7 AMD64。
我正在使用 WinSCard API。VERIFY 和 GET DATA 命令按预期工作。但是,当我执行 GENERAL AUTHENTICATE 以生成数字签名时,SCardTransmit() 返回错误代码 1,并且在调试输出中有消息:
在系统日志中,也有一些消息:
智能卡服务,ID 610:智能卡读卡器“VMware Virtual USB CCID 0”被拒绝 IOCTL 传输:功能不正确。如果此错误仍然存在,您的智能卡或读卡器可能无法正常工作。
命令头:00 87 07 9c
命令头与我传输的内容相匹配。
WudfUsbccidDrv ID 11:请求返回失败。MsgType:0x80 ICCStatus:0x0 CmdStatus:0x1 错误:0x0 SW1:0x0 SW2:0x0
接着
WudfUsbccidDrv ID 1:操作失败(0x0、0x0、0x0、0x0)。ScT1Transmit:发送请求失败。HResult:指定的请求对目标设备不是有效的操作。
并且
WudfUsbccidDrv ID 10: 请求 [0] (CLS=0x0,INS=0x87,P1=0x7,P2=0x9C,Lc=266,Le=0,.NETServiceMethod=0x0)
再次,这正是我的要求。
完全相同的代码在主机上按预期工作。相同的卡,相同的物理读卡器,相同的命令。卡驱动程序可能不同。
我已经针对 SunPCSC 安全提供程序尝试了一段等效的 Java 代码,只是为了检查细微的协议故障;它在 VM 上失败并显示类似消息:
javax.smartcardio.CardException:sun.security.smartcardio.PCSCException:未知错误 0x1
看起来 VMWare 的智能卡虚拟化层不喜欢这个特定的命令。请问有什么想法吗?
c# - 区分智能卡/ eeprom 卡
问题:我的程序可以区分两种类型的卡:智能卡和简单的 eeprom 卡(Typ AT24C02SC)。
我在 Windows 系统事件日志中收到以下错误:
智能卡读卡器“SCM Microsystems Inc. SCR33x USB 智能卡读卡器 0”被拒绝 IOCTL 0x3136b0:不支持该请求。如果此错误仍然存在,您的智能卡或读卡器可能无法正常工作。
命令头:86 XX XX XX
伪代码(我使用 winscard.dll 和 MCSCM.dll):
当我的读卡器中有智能卡时出现此错误,我检查它是否是带有ConnectMCard()
. 我必须首先检查 eeprom 卡的两种不同卡类型,因为 winscard.dll 函数SCardConnect()
为每张卡(eeprom 或智能卡)返回 0(成功)。
这是有效的,但应该有更好的方法。