我正在使用c#.net 3.5
开发一个Windows应用程序USB设备应具有唯一的实例ID,以区分设备与计算机上相同类型的其他设备。
如果设备InstanceID不是唯一的,PnP管理器会修改InstanceID,并将其与相应的DeviceTypeID组合,以创建系统中唯一的设备实例ID。
我需要查找USB Device Instance Id是否在系统范围内是唯一的。
我可以使用IRP_MN_QUERY_CAPABILITIES 来检索设备功能, 然后检查DEVICE_CAPABILITIES的UniqueID成员,以指示实例ID在整个系统中是否唯一。
我的问题是:
如何在c#.net
cpp中是否有关于如何使用此查询的示例代码?
由于
答案 0 :(得分:0)
设备实例ID不是唯一的,因为世界上没有标准。我一直在研究USB闪存驱动器。但是,设备实例可以显示公司的名称,并将设备与一个公司区分开来。我所知道的唯一唯一数据是从随机数生成器检索的长设备序列号。如果您使用的是Windows,则可以了解WMI及其访问USB设备的能力。
答案 1 :(得分:0)
我找到了一个解决方案,我使用SetupDiGetDeviceRegistryProperty并要求DEVICE_CAPABILITIES structure
private static bool IsDeviceIdUnique(IntPtr usbDev, NativeMethods.SP_DEVINFO_DATA devInfoData,string deviceId)
{
uint bufferSize;
uint propertyRegDataType;
var buffer = new byte[WinConstants.MAX_PATH];
NativeMethods.SetupDiGetDeviceRegistryProperty(usbDev, ref devInfoData, WinConstants.SPDRP_CAPABILITIES, out propertyRegDataType, buffer, WinConstants.MAX_PATH, out bufferSize);
var capabilities = BitConverter.ToUInt32(buffer, 0);
return (capabilities & WinConstants.CM_DEVCAP_UNIQUEID) == WinConstants.CM_DEVCAP_UNIQUEID;
}