2012-06-12 4 views
1

Я разрабатываю приложение для окон, используя C# .net 3.5Как узнать, уникален ли идентификатор экземпляра устройства?

Устройство USB должно иметь уникальный идентификатор экземпляра, который отличает устройство от других устройств того же типа на компьютере.

Если идентификатор экземпляра устройства не уникален, диспетчер PnP изменяет идентификатор экземпляра и объединяет его с соответствующим идентификатором DeviceTypeID, чтобы создать уникальный идентификатор экземпляра устройства, который является уникальным в системе.

Мне нужно найти, если USB Device Instance Id уникален для всей системы.

я могу использовать IRP_MN_QUERY_CAPABILITIES для получения возможностей устройства, , а затем проверить элемент UniqueID в DEVICE_CAPABILITIES, чтобы указать, является ли идентификатор экземпляра является уникальным во всей системе.

Мои вопросы:

  1. Как я могу использовать IRP_MN_QUERY_CAPABILITIES в C# .NET

  2. Есть пример кода в CPP о том, как использовать этот запрос?

  3. Есть ли другой способ узнать, является ли идентификатор экземпляра уникальным?

Благодаря

ответ

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; 
    } 
0

Device Instance ID не является уникальным, потому что нет стандарта во всем мире. И я работал на USB-накопителях. Однако экземпляр устройства может отображать название компании и отличает устройство от одной компании от другой. Единственными уникальными данными, которые я знаю, является длинный серийный номер устройства, полученный из генератора случайных чисел. Если вы используете Windows, вы можете узнать о WMI и его возможности доступа к USB-устройствам.

Смежные вопросы