スマート カード リーダーを使用するアプリがあります。ユーザーは複数の同一のリーダーを持っている場合があり、 によって返されるシステム名は、SCardListReaders
番号サフィックスが異なります (たとえば、「OMNIKEY CardMan 5x21 0」と「OMNIKEY CardMan 5x21 1」)。ユーザーはアプリのリーダーを設定できます。作業中にユーザーがスマート カードを別のリーダーに挿入すると、アプリは反応しません。
問題は、Windows の再起動後にリーダーもシャッフルできるという報告があることです。以前名前に「0 」があったものは、「 1」を持つことができます。私はこれに影響を与えません。シャッフルが発生した後、ユーザーはアプリでリーダーを再度選択する必要があります。これを修正して、ユーザーが何もする必要がないようにしたいと考えています。
最初はSCardGetAttrib
andをいじっていましSCARD_ATTR_VENDOR_IFD_SERIAL_NO
たが、このパラメーターは世界中のすべてのリーダーに対して一意の文字列を返すわけではありません。たとえば、同じ特定のタイプのすべてのリーダーに対して「12345678」を返す場合があります。
私は今 SetupAPI function を見ていますSetupDiGetDeviceRegistryProperty
。すべての USB デバイスとパラメータを一覧表示できますが、それらはSPDRP_PHYSICAL_DEVICE_OBJECT_NAME
一意SPDRP_LOCATION_PATHS
のように見えます。システムで修正されることを願っています。リーダーが USB デバイスでない場合は、今のように名前だけに頼ります。問題は、リーダーの名前からどの USB デバイスを見ているかを推測できないことです。どのSPDRP_
パラメーターも読者名を与えてくれないので、に与えることができる名前が必要SCardConnect
です。
リーダー名からHDEVINFO
、私が与えることができる対応する名前を取得するにはどうすればよいSetupDiGetDeviceRegistryProperty
ですか? または、Windows の再起動後も信頼できる、同じタイプのスマート カード リーダーを区別する別の方法はありますか?