我有一個PC/SC抽象層,我正在使用(家庭釀造),並且很好奇如何確定可能與之交互的閱讀器的類型。我目前正在使用一種方法,它涉及基於閱讀器名稱的字符串的名稱正則表達式匹配。這很好,接受沒有關於如何命名讀者的標準,導致這種方法容易出錯。任何人有任何具體的建議可以嘗試,可能是基於與讀者的一些較低層次的溝通?如何確定智能卡閱讀器的類型(聯繫vs非接觸式)
希望聽到一些想法!
我有一個PC/SC抽象層,我正在使用(家庭釀造),並且很好奇如何確定可能與之交互的閱讀器的類型。我目前正在使用一種方法,它涉及基於閱讀器名稱的字符串的名稱正則表達式匹配。這很好,接受沒有關於如何命名讀者的標準,導致這種方法容易出錯。任何人有任何具體的建議可以嘗試,可能是基於與讀者的一些較低層次的溝通?如何確定智能卡閱讀器的類型(聯繫vs非接觸式)
希望聽到一些想法!
我不確切地知道你的意思是讀者的類型,但要知道連接到系統的所有讀者,你可以使用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」。
希望這有助於!
您只能在非接觸式閱讀器上獲得ISO 14443非接觸式UID。
PC/SC的「第3部分PC連接接口設備的要求」,第26頁,在表格3-8a中:定義了返回非接觸設備的UID的GET DATA命令APDU。
FF CA 00 00 00
所以,如果命令成功,你知道它是一個非接觸式閱讀器。 如果命令失敗,您的閱讀器不支持該命令,或者它是聯繫人閱讀器。
我知道這些讀者支持的命令:
查看pcsc3_v2.01.09.pdf
的Pcsc1-10 V2 01 14.zip
(來自PC/SC Workgroup Specification Files)。
對不起,我知道它沒有回答你的問題,但聽到這個。我的解決方案與您的解決方案完全相同。從名稱列表中,我檢查它們是否包含特定部分,然後,如果這是已知類型或未知讀者,則作出結論。
之後,如果讀者是已知的類型,我知道讀者使用什麼協議,而不只是它是非接觸式閱讀器。如果你有兩個,你知道哪個是哪個。
它對我來說很好(幾個月後),如果您不想因爲我不明白的原因而切換它,您可以保持原樣。
感謝您的回覆。我目前使用SCardListReaders來獲取我的機器上PC/SC兼容讀卡器的名稱。我試圖確定讀者是否接觸或無接觸。目前,我使用正則表達式定義對名稱進行評估,但不知道是否有更具體的方法。 –