2011-12-09 47 views
1

我有一個PC/SC抽象層,我正在使用(家庭釀造),並且很好奇如何確定可能與之交互的閱讀器的類型。我目前正在使用一種方法,它涉及基於閱讀器名稱的字符串的名稱正則表達式匹配。這很好,接受沒有關於如何命名讀者的標準,導致這種方法容易出錯。任何人有任何具體的建議可以嘗試,可能是基於與讀者的一些較低層次的溝通?如何確定智能卡閱讀器的類型(聯繫vs非接觸式)

希望聽到一些想法!

回答

1

我不確切地知道你的意思是讀者的類型,但要知道連接到系統的所有讀者,你可以使用SCardListReaders(...)API。

如上定義的Microsoft MSDN page

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

這將返回在對於例如字符串格式的所有閱讀器的列表SCM閱讀器將返回「SCM Microsystems Inc. SCL011非接觸式閱讀器0」。

希望這有助於!

+0

感謝您的回覆。我目前使用SCardListReaders來獲取我的機器上PC/SC兼容讀卡器的名稱。我試圖確定讀者是否接觸或無接觸。目前,我使用正則表達式定義對名稱進行評估,但不知道是否有更具體的方法。 –

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公司SDI011G接觸式讀卡器0
  • ACS ACR1252 1S CL讀卡器PICC 0

查看pcsc3_v2.01.09.pdfPcsc1-10 V2 01 14.zip(來自PC/SC Workgroup Specification Files)。

1

對不起,我知道它沒有回答你的問題,但聽到這個。我的解決方案與您的解決方案完全相同。從名稱列表中,我檢查它們是否包含特定部分,然後,如果這是已知類型或未知讀者,則作出結論。

之後,如果讀者是已知的類型,我知道讀者使用什麼協議,而不只是它是非接觸式閱讀器。如果你有兩個,你知道哪個是哪個。

它對我來說很好(幾個月後),如果您不想因爲我不明白的原因而切換它,您可以保持原樣。