问题标签 [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.
winapi - 仅列出本地智能卡读卡器
我一直在努力寻找一种仅列出本地可用的智能卡读卡器的方法。或者至少区分本地读者和通过 RDP 会话共享的读者。
我正在使用SCardListReaders
,但它列出了所有注册到 SmartCard 子系统的阅读器,包括来自 RDP 共享的阅读器。有没有办法过滤该列表?
一种方法是使用 列出物理阅读器设备 SetupDiGetClassDevs
,然后使用SCardListReadersWithDeviceInstanceId
。但我需要有 Windows 7 支持,并且SCardListReadersWithDeviceInstanceId
是从 Windows 8 引入的。
也赞赏任何替代解决方案。
c# - NFC MIFARE Classic 1K 无法读取或写入
我有一个 NFC 读卡器和 MIFARE Classic 1K 卡。我有一个 Visual C# winforms 项目。现在我能够连接到读卡器并检测卡并获取它的 UUID。我面临的问题是在写入和读取数据时。我在互联网上搜索了很多,找到了一些解决方案,甚至测试了 SDK 提供的演示代码......没有任何工作。
让我描述一下我用于编写、验证块、发送 APDU 和读取块的工作流程和代码。
以下是将数据写入块 5 的代码。
SendAPDUandDisplay 函数如下
功能 authenticateBlock 如下
这里要注意的一件奇怪的事情是,无论我在sendBuff中设置什么值,这个函数总是返回真值,并且写入数据代码“第一个代码块”返回写入成功消息
但是,当我在我的情况下读取那个块“5”时执行写入数据代码之后,那里什么都没有。我的读取块代码返回一个空字符串,当我尝试仔细检查数据是否已写入并且我的错误代码无法读取时,我使用外部软件来验证是否添加了值,该软件也不会显示数据我写的并得到了写成功的消息。
好的,下面是我用来读取块 5 的代码。
请注意,在检查读取器是否已连接后调用 readblock 方法,如果是这样,那么我调用 readblock方法并返回一个空字符串
正如您在评论中看到的那样,我已经尝试了几个值,但似乎没有任何帮助,已经 3 天了,我仍然被困在这里。
有人可以帮我弄清楚我在哪里做错了,我应该发送什么值来验证块?
请帮我一个忙,如果有人知道我的代码中的问题或想要更正我在sendBuff[]中设置的值,请在 C# 代码中引用它们,以便我可以使用您希望我实现的解决方案
任何真诚的帮助都将受到高度重视,在此先感谢。
c# - C# WPF zebra 智能卡打印机 ZC 350:应用程序在 Visual Studio 中工作,但在运行 exe 时崩溃
我在 VS 2019 中最新版本的 Windows 10 上的 .NET 4.8 上的 C# 8 中有一个 WPF 应用程序。它通过斑马的链接 OS SDK 在斑马 ZC 350 打印机上打印和写入 mifare 卡。
它在 Visual Studio 中运行时(在调试模式下)运行良好,但是当我运行独立 exe 时,当应用程序尝试通过 winscard dll 编写 mifare 标签/芯片时它崩溃(C# 调用 win32/winscard.dll 本机代码)。它因 AccessViolationException 而崩溃。通常你会认为 winscard.dll 的本机代码中有一个指针错误,但它在 Visual Studio 中工作......
我不知道如何解决这个问题。谷歌搜索没有提供任何答案。有没有人经历过同样的事情或类似的事情?解决方案是什么?
谢谢!
vba - 确定计算机是否被锁定
我有一个宏,当会议通知弹出时,它会从 Outlook 向我发送文本。我想找出一种方法,使该宏仅在我不在计算机旁时才运行。我一直在寻找一种方法来从 Skype for Business 中提取我的状态,确定 PC 是否被锁定,并查看是否插入了智能卡。都没有太多的运气。寻找适用于 VBA 的简单解决方案。
c# - 如果在 C# 应用程序的线程上执行,SCardControl 会慢 5 倍
我正在使用 Visual Studio 2019 构建一个 C# Win Form 应用程序,旨在与智能卡 (ACR 122U) 进行通信。
简而言之:我正在使用的标签类型是阅读器无法识别的被动标签。使用这些标签的唯一方法是将直接命令发送到阅读器内部的芯片。
使用 winscard.dll 我设法做到了。
我正在尝试对标签进行备份:该过程必须读取并存储 128 个块(因此将调用 128 个 SCardControl)。
如果我在 UI 线程中执行此操作,它就像一个魅力(最多 5 秒,在此过程中进程使用 30MB 内存)。但是,如果我尝试在后台线程中执行此操作,则需要很长时间(最少 25 秒,并且在此过程中进程使用 150MB 内存)。
为什么会这样?
编辑:
这是线程的一些代码
如果您注释线程启动部分并取消注释对 bgWorker() 的调用,则该过程将持续 2.1 秒。如果您保持这样(使用线程),则该过程将持续超过 20 秒(无论是在调试模式、发布中、Visual Studio 内部还是外部)。
c# - 无法使用winscard.dll c#读取RFID卡USB
我有阅读器:Promag PCR-300FMU,USB(无手册,无 SDK)。
所以我照顾了winscard.dll上的文档
this.ListReaders() 发回给我 ==> 一件 ==> 通用 EMV 智能卡读卡器 0 ==> 这不是我的读卡器
这是我得到的 VID 和 PID
USB\VID_1667&PID_0005&MI_01\6&DE89751&0&0001 VID: 1667 PID: 0005 USB\VID_1667&PID_0005&MI_00\6&DE89751&0&0000 VID: 1667 PID: 0005 USB\VID_1667&PID:48_0005\PGM-T
在 MyUsbDevice1 和 MyUsbDevice2 中始终为 NULL
你能帮助我吗 ?
c++ - 如何获取卡序列号?
我家里有一个读卡器,所以我想用它,但是有一个问题。
如何通过智能卡读卡器获取卡序列号?在 windows 操作系统中由 winscard 库使用。
它可能使用“SCardTransmit”功能,对吗?
我看过了,但我不明白这个过程。
链接:https ://docs.microsoft.com/ko-kr/windows/win32/api/winscard/
发生错误:1734(数组范围无效)
c# - SCardConnect C# 内存泄漏
我无法修复由winscard.dll 库包装器中的SCardConnect函数导致的内存泄漏。有没有办法通过winscard.dll修复内存
总结:当SCardConnect成功返回 0 时,这意味着读卡器上有一张卡,内存就会爆炸。
细节:
我发现SCardEstablishContext也会造成内存泄漏,所以我尽量减少对该函数的使用。我也尝试使用SCardStatusChange函数,但它也会造成内存泄漏并且逻辑很复杂。
- 包装卡.cs:
- 主要代码:(省略了一些全局变量)
- 内存诊断: 在此处输入图像描述。
所有内存上升都在读卡器上持卡时。
PS:我在 Window Form、Console 和 Window Service 平台上都试过这个。
flutter - flutter:SCardTransmit 成功,但是 Idm 检索不到
内容
我写的代码
这很成功,但我无法获得 UID。问题是什么?
我知道有什么遗漏或错误,但我不知道它是什么。
我们使用的是:https://pub.dev/packages/win32
使用的读卡器:RC-380
添加
与第一次和第二次不同。