Обновление драйвера для одного из сетевых адаптеров той же модели - PullRequest
1 голос
/ 23 октября 2019

На целевом компьютере установлено несколько сетевых адаптеров одной модели. Как показано ниже, все они являются Intel I211.

PCI\VEN_8086&DEV_1539&SUBSYS_00008086&REV_03\0060E0FFFF6336A000
    Name: Intel(R) I211 Gigabit Network Connection
    Hardware IDs:
        PCI\VEN_8086&DEV_1539&SUBSYS_00008086&REV_03
        PCI\VEN_8086&DEV_1539&SUBSYS_00008086
        PCI\VEN_8086&DEV_1539&CC_020000
        PCI\VEN_8086&DEV_1539&CC_0200
    Compatible IDs:
        PCI\VEN_8086&DEV_1539&REV_03
        PCI\VEN_8086&DEV_1539
        PCI\VEN_8086&CC_020000
        PCI\VEN_8086&CC_0200
        PCI\VEN_8086
        PCI\CC_020000&DT_0
        PCI\CC_020000
        PCI\CC_0200&DT_0
        PCI\CC_0200
PCI\VEN_8086&DEV_1539&SUBSYS_00008086&REV_03\0060E0FFFF6336A100
    Name: Intel(R) I211 Gigabit Network Connection #2
    Hardware IDs:
        PCI\VEN_8086&DEV_1539&SUBSYS_00008086&REV_03
        PCI\VEN_8086&DEV_1539&SUBSYS_00008086
        PCI\VEN_8086&DEV_1539&CC_020000
        PCI\VEN_8086&DEV_1539&CC_0200
    Compatible IDs:
        PCI\VEN_8086&DEV_1539&REV_03
        PCI\VEN_8086&DEV_1539
        PCI\VEN_8086&CC_020000
        PCI\VEN_8086&CC_0200
        PCI\VEN_8086
        PCI\CC_020000&DT_0
        PCI\CC_020000
        PCI\CC_0200&DT_0
        PCI\CC_0200

Как мне обновить драйвер для конкретной модели адаптеров devcon, C ++ или C #? Например, обновить с помощью уникального идентификатора экземпляра устройства ( ex: PCI \ VEN_8086 & DEV_1539 & SUBSYS_00008086 & REV_03 \ 0060E0FFFF6336A100 )

Спасибо

EDIT : Я искал API для этого, но все они используют ID оборудования для обновления драйвера, который обновит драйверы всех адаптеров той же модели. Пример: C ++ UpdateDriverForPlugAndPlayDevicesA и команда devcon update .

EDIT2 : Мотивация этой проблемы заключается в том, что мы используем ОСРВ (реальнаявремя ОС, RTX64 ), и мы хотим установить сетевую связь в реальном времени (соединение EtherCAT) с другими устройствами через ОСРВ. Нам нужно обновить драйвер одного из адаптеров до драйвера, предоставляемого RTX64, чтобы он мог использовать этот адаптер.

Единственное работоспособное решение для нас - просто обновить один изони используют «Диспетчер устройств» Windows. (На приведенном ниже рисунке нет адаптеров той же модели, просто показано, как выполнить обновление с помощью диспетчера устройств вручную) enter image description here

Мы просим наших пользователей сделать это обновление вручную после установки нашегопрограммное обеспечение. Это не удобно для них. Поэтому мы пытаемся найти автоматический способ сделать это.

Поскольку диспетчер устройств в Windows может сделать это, мы предполагаем, что есть API, который может сделать это тоже.

Ответы [ 2 ]

1 голос
/ 02 ноября 2019

Два обходных пути. Один сводит к минимуму ручное взаимодействие с пользователем при обновлении драйвера устройства, другой полностью автоматизирует процесс, но требует кодирования на языке, похожем на BASIC.

Первый состоит из , автоматически показывающего Мастер обновления оборудования для этого конкретного экземпляра устройства используется API-функция DiShowUpdateDevice, как описано в предыдущей ссылке.

Вторая - использовать free AutoIt программное обеспечение для автоматизации. С его помощью вы можете автоматизировать практически все в системе Windows, это очень мощно, и я использовал это в сочетании с веб-ботами и автоматическим веб-тестированием (без заголовка). Я также использовал его в двойном щелчке в системах Windows и во многих задачах системного администратора.

Как замечание, вы также можете смешать оба подхода. Сначала используйте DiShowUpdateDevice, чтобы показать мастер, а затем сценарий AutoIt может автоматически выполнять взаимодействие с пользовательским интерфейсом, клиенту вообще ничего не нужно будет делать.

1 голос
/ 31 октября 2019

Это на самом деле не обычная проблема программиста.

Программирование драйвера - как подмножество программирования в реальном времени - это узкоспециализированная область. Среднестатистическому программисту на C # или C ++ .NET редко приходится иметь дело с такими вещами, как указатели и другие с кодом уровня ассемблера. Но для тех двоих это их ежедневный хлеб с маслом. Я не могу дать вам немного больше, чем общий совет:

Мой Первый совет для вас состоит в том, чтобы получить чей-то другой код для принятия этого решения и установки. Обычно драйверы одного производителя распространяются в пакетах. Который понимает, как бороться с идентификацией оборудования. Обычно эти установщики также имеют беззвучный режим. Таким образом, все сводится к их вызову и перехвату вывода консоли / поиску возвращаемого значения.

Мой Второй совет - использовать их имя, как указано в диспетчере устройств. При желании их можно переименовать вручную. Это не так надежно, так как строки довольно терпеливы и легко изменяются / не соответствуют друг другу, но это поможет вам начать с чего-либо.

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

  1. Я даже не уверен, что это возможно . Поскольку папка драйвера по-прежнему использует старый подход «только один файл каждого имени», вполне вероятно, что вы не сможете использовать разные драйверы для разных экземпляров одного и того же оборудования. Если вы не определите свое собственное место хранения драйверов.

  2. Я понятия не имею, зачем вам это делать. Среднестатистической конечной программе не нужно беспокоиться даже о выборе интерфейса, который она будет использовать. Он просто передает запрос в сетевой стек и не обрабатывает уровень 3 или ниже . Серверы, возможно, должны выбрать определенный адаптер для прослушивания или просто прослушать оба в параллельном режиме. Но даже тем, кому не нужна используемая версия драйвера . Они даже не заботятся о том, является ли это реальным физическим интерфейсом - ведь неправильная классификация, как в ранних версиях Bluetooth, так и в виртуальных устройствах, таких как мониторы виртуальных машин / принтеры PDF, - вещь.

Так чточестно звучит так, как будто у вас есть проблема XY, с этой идеей (вероятно ошибочно) Y, к вашему настоящему X.

...