Установка определенного драйвера для конкретного устройства программно (и при сбое предварительной установки) - PullRequest
3 голосов
/ 19 декабря 2011

У меня есть подписанный драйвер, и мне нужно установить его программно для конкретного USB-устройства с использованием C # (для Vista и 7 64-битных).

Я обнаружил, что очень просто использовать функцию DriverPackagePreinstall в DIFx API ( здесь - это как P / вызвать его): вызывая его до того, как устройствоПодключенный к USB, Windows может связать драйвер с устройством, как только это будет обнаружено.

Проблемы возникают, когда устройство подключено к USB без предварительной установки драйвера.Может случиться так, что для этого устройства будет установлен другой драйвер (на одном тестовом ПК я обнаружил, что установлен общий драйвер и устройство указано в разделе «Другие устройства» в диспетчере устройств).

Попытка решитьЭта проблема, до сих пор я был в состоянии обнаружить, что устройство там с помощью функций SetupDiGetClassDevs , SetupDiEnumDeviceInfo и SetupDiGetDeviceRegistryProperty дляидентифицировать устройство по его VID и PID (поставщик и идентификатор продукта).Теперь, когда у меня есть SP_DEVINFO_DATA для моего устройства, я полагаю, мне нужно вызвать функцию InstallSelectedDriver , не так ли?Если да, подскажите, пожалуйста, как выполнить P / Invoke для этой функции (я не могу найти ее на pinvoke.net) и как ее использовать, указав драйвер, который я хочу установить для моего устройства (предположим, у меня есть путь INF).

1 Ответ

3 голосов
/ 20 декабря 2011

Я нашел образец именно для того, что искал здесь .У меня P / Invoke для InstallSelectedDriver работает как:

[DllImport("newdev.dll", SetLastError = true, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
protected static extern bool InstallSelectedDriver(
      IntPtr HwndParent,
      IntPtr DeviceInfoSet,
      string Reserved,
      [MarshalAs(UnmanagedType.Bool)] bool Backup,
      out UInt32 Reboot);
...