Домой USB Получение значений VID и PID usb накопителей: Справочник по C#

Получение значений VID и PID usb накопителей: Справочник по C#

1088
0


      В случае если необходимо установить драйвер к USB накопителю или выполнить программный ремонт, вам не обойтись без получения двух идентификаторов устройства:

  • VID – это Vendor Identifier (идентификатор производителя);
  • PID – это Product Identifier (идентификатор продукта, то есть конкретной модели устройства).

      Узнать VID и PID USB устройства вы можете через специальные утилиты, но можно обойтись и без них. Необходимо открыть «Диспетчер устройств» и найти раздел «Контроллеры универсальной последовательной шины USB» в Windows XP или «Контроллеры USB» в Windows Vista/7/8. Там вы можете найти свое USB устройство, VID и PID которого вы собираетесь определить. После выбора необходимого вам запоминающего устройства, сделайте клик правой клавишей мыши по нему и выберете из контекстного меню, пункт «Свойства».

      В появившемся окне свойств, перейдите на вкладку «Сведения» и выберете из выпадающего списка строку «Код экземпляра устройства» в Windows XP или «ИД оборудования» в Windows Vista/7/8.

      В поле «Значение», вам будет отображен VID и PID USB устройства, но важно учесть, что некоторые производители, экономя на регистрации собственных VID и PID, могут указать их произвольно!
      Рассмотрим программное получение этих значений с использованием Windows Management Instrumentation (WMI) и класса «Win32_USBHub».

Дополнительную информацию по данному классу вы можете получить по адресу http://msdn.microsoft.com/en-us/library/aa394506(v=vs.85).aspx.

      Если воспользоваться программой «WmiExplorer» и открыть класс «Win32_USBHub», то можно увидеть в столбце «PNPDeviceID» строку вида USBVID_152D&PID_25090A123457D9C, которая имеет формат USBVID_XXXX&PID_XXXXSerial_number. Именно из этой строки мы и будем извлекать данные. Но данный класс возвращает список всех USB устройств подключенных к компьютеру, поэтому необходимо их отфильтровать.

      Посмотрите внимательно на представленный скриншот программы «WmiExplorer», вы увидите в колонке «Name» название устройства. Как и в диспетчере устройств, usb накопители представлены в виде «Запоминающее устройство для USB». Именно по этому значению будет сделан фильтр. Извлечение данных осуществляется через класс «ManagementObjectSearcher», путем указания запроса «Select», так как нам необходимо организовать фильтр «where», в запросе укажем условие поиска, вывести только устройства с именем «Запоминающее устройство для USB».

Дополнительную информацию по классу «ManagementObjectSearcher», вы можете получить по адресу http://msdn.microsoft.com/ru-ru/library/system.management.managementobjectsearcher(v=vs.110).aspx.

Функционал данного примера:

  • Получение VID usb накопителя;
  • Получение PID usb накопителя;
  • Получение серийного номера usb накопителя.
ЧИТАТЬ ТАКЖЕ:  Создание общей папки: Справочник по C#

Создайте проект Windows Form в Microsoft Visual Studio и добавьте два компонента:

  • ListBox – вывод информации по usb устройствам;
  • Button – запуск процесса получения информации.

У вас получится приведенный ниже пример.

      Сделайте двойной клик левой клавишей мыши по компоненту «button1» и перейдите в автоматически созданный метод «button1_Click». Добавьте в него, приведенный ниже листинг.

string PNPDeviceID = string.Empty;

//Предварительно очищаем список
listBox1.Items.Clear();

//Получение списка USB накопителей
foreach (System.Management.ManagementObject drive in
new System.Management.ManagementObjectSearcher(
"select * from Win32_USBHub where Caption='Запоминающее устройство для USB'").Get())
{
PNPDeviceID = drive["PNPDeviceID"].ToString().Trim();
//Получение Ven устройства
listBox1.Items.Add("VID= " +
parseVidFromDeviceID(drive["PNPDeviceID"].ToString().Trim()).Trim());

//Получение Prod устройства
listBox1.Items.Add("PID= " +
parsePidFromDeviceID(drive["PNPDeviceID"].ToString().Trim()).Trim());

//Получение Серийного номера устройства
string[] splitDeviceId = drive["PNPDeviceID"].ToString().Trim().Split('\');
listBox1.Items.Add("Серийный номер= " + splitDeviceId[2].Trim());

//Разделение списка устройств пустой строкой
listBox1.Items.Add("");
}

Так же добавьте два метода расшифровки значений «PNPDeviceID».

private string parseVidFromDeviceID(string deviceId)
{
string[] splitDeviceId = deviceId.Split('\');
string Prod;
//Разбиваем строку на несколько частей.
//Каждая часть отделяется по символу &
string[] splitProd = splitDeviceId[1].Split('&');

Prod = splitProd[0].Replace("VID", ""); ;
Prod = Prod.Replace("_", " ");
return Prod;
}
private string parsePidFromDeviceID(string deviceId)
{
string[] splitDeviceId = deviceId.Split('\');
string Prod;
//Разбиваем строку на несколько частей.
//Каждая часть отделяется по символу &
string[] splitProd = splitDeviceId[1].Split('&');

Prod = splitProd[1].Replace("PID_", ""); ;
Prod = Prod.Replace("_", " ");
return Prod;
}

      Запустите ваш проект, нажав на клавиатуре, клавишу «F5». Вставьте Usb накопитель и нажмите кнопку «Получить информацию». Вы получите информацию о данном накопителе. Если устройств подключено несколько, то информация об устройствах будет разделена пустой строкой.

Внимание! Для карт памяти MMC, SD, MicroSD и прочих VID и PID определить нельзя, у них нет этих значений. Если даже попытаться их прочесть с помощью утилит, то виден будет VID и PID карт-ридера.

Ссылка для скачивания примера: Яндекс.Диск

Получение значений VID и PID usb накопителей: Справочник по C#

0.00 (0%) 0 votes

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь