2

WMIを使用して、システム上のすべてのPCSCスマートカードリーダーのDeviceIDとサービスを取得したいと思います。これらはすべてUSB経由で接続されているため、すべてWin32_PnPEntityのをWMIレジストリに照会します。しかし、どのデバイスが「カードリーダー」であるかを判断する方法がわかりません。これが私がすでに持っているものです:

ManagementObjectSearcher mos =
new ManagementObjectSearcher(@"\root\cimv2", @"Select * From Win32_PnPEntity");

ManagementObjectCollection mob = mos.Get();

foreach (ManagementObject mo in mob)
{
    Console.WriteLine("DeviceID: " + mo["DeviceID"].ToString());
    Console.WriteLine("Service: " + mo["Service"].ToString());
}

デバイス名だけでフィルタリングすることはできません。さまざまなブランド/モデルのリーダーがあり、共通の分母はありません。デバイスマネージャでは、それらはすべて「スマートカードリーダー」の下にグループ化されているため、(別の)方法が必要です。

4

2 に答える 2

8

MSDNでデバイス クラス GUID を見つけました: {50dd5230-ba8a-11d1-bf5d-0000f805f530}

Smart Card Readers
Class = SmartCardReader
ClassGuid = {50dd5230-ba8a-11d1-bf5d-0000f805f530}
This class includes smart card readers.

だから最終的に私はこれを思いついた:

ManagementObjectSearcher mos = new ManagementObjectSearcher(@"\root\cimv2",
@"SELECT * FROM Win32_PnPEntity WHERE ClassGuid = '{50DD5230-BA8A-11D1-BF5D-0000F805F530}'");

それは私が欲しいものを私に与えるようです:)

于 2012-05-30T12:42:02.570 に答える
2

ここにはスマートカードリーダーがないので、これは理論上のことです。

  • __CLASS返されるインスタンスの実際のタイプ(プロパティ)は何ですか。サブタイプの場合は、そのタイプのインスタンスをさらに探すと役立つ場合があります)。

  • スマートカードデバイスにはどのような関連付けがありますか。

    associators of {__RELPATH}
    

    ここで、__ RELPATHは、Win32_PnPEntityインスタンスと同じ名前のプロパティです。アソシエーターのアソシエーターも含めます。

    ほとんどの関連インスタンスはUSBホスト/ハブデバイスのようなものを表しますが、他のインスタンスはデバイスの他の側面である可能性があることに注意してください(HDDにはWin32_PhysicalDiskに加えて両方のインスタンスがあるなどWin32_PnPEntity)。

また、WMIの種類とオブジェクトの探索を高速化するために、コンソールまたはGUIツールの1つを提案します。これは、C#コードを記述するよりもはるかに簡単です。例えば。PowerShellの場合:

gwmi -query "select * from Win32_PnpEntity" | ft -autosize __RELPATH, DeviceID

C#コードよりも操作が簡単です(ただし、非常に広いコンソールウィンドウが必要になります:-))。

于 2012-05-30T09:25:01.553 に答える