我想所有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());
}
我不能只在设备名称进行筛选,有读者的不同品牌/型号,并没有共同点。 在设备管理器中他们都在“智能卡读卡器”分组,所以必须有一个(另)的方式。
我发现设备类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}'");
这似乎给我我想要的东西:)
我没有任何智能卡读取器在这里,所以这是理论:
什么是实际类型( __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#代码工作(但它需要一个很宽的控制台窗口:-))。