如何通过WMI得到所有我的系统上的智能卡阅读器?(How do I get all the smar

2019-09-17 15:01发布

我想所有PCSC智能卡阅读器的的DeviceID和服务使用WMI我的系统上。 他们通过USB连接的所有,所以我查询所有的WMI注册表Win32_PnPEntity秒。 但我不知道如何确定哪些设备是“读卡器”。 下面是我已经有:

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());
}

我不能只在设备名称进行筛选,有读者的不同品牌/型号,并没有共同点。 在设备管理器中他们都在“智能卡读卡器”分组,所以必须有一个(另)的方式。

Answer 1:

我发现设备类GUID在MSDN :{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}'");

这似乎给我我想要的东西:)



Answer 2:

我没有任何智能卡读取器在这里,所以这是理论:

  • 什么是实际类型( __CLASS返回的实例的属性)。 如果一个亚型,也许寻找),该类型的其他情况下会有所帮助。

  • 智能卡设备存在哪些关联:

     associators of {__RELPATH} 

    其中__RELPATH是来自同一个命名的属性Win32_PnPEntity实例。 还包括社员的社员。

    需要注意的是最相关的情况下,将代表东西,如USB主机/集线器设备,但其他人可以是设备(如硬盘驱动器将同时拥有等方面Win32_PhysicalDisk除了一个实例Win32_PnPEntity )。

此外,要加快探索WMI类型和对象,我建议的控制台或GUI工具之一,这将是比写C#代码容易得多。 例如。 在PowerShell中:

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

更容易比C#代码工作(但它需要一个很宽的控制台窗口:-))。



文章来源: How do I get all the smart card readers on my system via WMI?