Справочник по C#

    Исходники по языку программирования CSharp

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

    /
    /
    /
    145 Views


          В случае если необходимо установить драйвер к 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 накопителя.

    Создайте проект 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

    moyadcode13
    • Facebook
    • Twitter
    • Google+
    • Linkedin
    • Pinterest
    moyadcode10
    moyadcode11
    moyadcode9