В случае если необходимо установить драйвер к 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».
Если воспользоваться программой «WmiExplorer» и открыть класс «Win32_USBHub», то можно увидеть в столбце «PNPDeviceID» строку вида USBVID_152D&PID_2509 0A123457D9C, которая имеет формат USBVID_XXXX&PID_XXXXSerial_number. Именно из этой строки мы и будем извлекать данные. Но данный класс возвращает список всех USB устройств подключенных к компьютеру, поэтому необходимо их отфильтровать.
Посмотрите внимательно на представленный скриншот программы «WmiExplorer», вы увидите в колонке «Name» название устройства. Как и в диспетчере устройств, usb накопители представлены в виде «Запоминающее устройство для USB». Именно по этому значению будет сделан фильтр. Извлечение данных осуществляется через класс «ManagementObjectSearcher», путем указания запроса «Select», так как нам необходимо организовать фильтр «where», в запросе укажем условие поиска, вывести только устройства с именем «Запоминающее устройство для USB».
Функционал данного примера:
- Получение VID usb накопителя;
- Получение PID usb накопителя;
- Получение серийного номера usb накопителя.
Создайте проект 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 накопитель и нажмите кнопку «Получить информацию». Вы получите информацию о данном накопителе. Если устройств подключено несколько, то информация об устройствах будет разделена пустой строкой.
Ссылка для скачивания примера: Яндекс.Диск
0.00 (0%) 0 votes
















