1

我有一个我正在使用的 PC/SC 抽象层(自制),我很好奇如何确定我可能正在与之交互的阅读器的类型。我目前正在使用一种方法,该方法涉及基于阅读器名称的字符串的名称正则表达式匹配。这很好,接受没有关于如何命名阅读器的标准,导致此方法容易出错。任何人有任何具体的建议可以尝试,这可能是基于与读者的一些较低级别的交流?

希望听到一些想法!

4

3 回答 3

1

我不知道您所说的阅读器类型到底是什么意思,但要了解连接到系统的所有阅读器,您可以使用 SCardListReaders(...) API。

如Microsoft MSDN 页面所定义:

LONG WINAPI SCardListReaders(
  __in      SCARDCONTEXT hContext,
  __in_opt  LPCTSTR mszGroups,
  __out     LPTSTR mszReaders,
  __inout   LPDWORD pcchReaders
);

这将返回字符串格式的所有阅读器列表,例如 SCM 阅读器将返回类似“SCM Microsystems Inc. SCL011 Contactless Reader 0”的内容。

希望这可以帮助 !!

于 2012-02-16T09:38:33.437 回答
1

您只能在非接触式阅读器上获得 ISO 14443 非接触式 UID。

PC/SC 的“第 3 部分。PC 连接接口设备的要求”,第 26 页,表 3-8a 中:定义了返回非接触式设备的 UID 的 GET DATA 命令 APDU。

FF CA 00 00 00 

因此,如果命令成功,您就知道它是非接触式阅读器。如果命令失败,要么您的阅读器不支持该命令,要么它是接触式阅读器。

我知道这些读者支持命令:

  • OMNIKEY CardMan 5x21-CL 0
  • Identive SDI011G 非接触式读卡器 0
  • Identive SDI010 非接触式阅读器 0
  • SCM Microsystems Inc. SDI011G 非接触式读卡器 0
  • ACS ACR1252 1S CL 读卡器 PICC 0

查看pcsc3_v2.01.09.pdfPcsc1-10 V2 01 14.zip来自PC/SC 工作组规范文件)。

于 2017-04-11T00:14:21.397 回答
1

对不起,我知道它不能回答你的问题,但听到这个。我的解决方案和你的完全一样。从名称列表中,我检查它们是否包含特定部分,然后得出结论是已知类型还是未知阅读器。

之后,如果阅读器是已知类型,我知道阅读器使用什么协议,而不仅仅是非接触式阅读器。如果你有两个,你知道哪个是哪个。

它对我很有用(现在几个月),如果你因为我不明白的原因不需要切换它,你可以保持原样。

于 2017-04-11T11:02:43.647 回答