Установить / обновить драйвер из службы Windows - PullRequest
2 голосов
/ 31 октября 2011

Чтобы установить драйвер, вы обычно отправляете команду:

DefaultInstall 128 {inf path}

в InstallHinfSection через прямой вызов или RunDLL.

Это прекрасно работает. Я могу установить свой драйвер в любом месте (включая 64-разрядную версию Win 2008 R2, что означает, что у меня тоже есть все права для подписи кода).

ОДНАКО, вышеприведенный сбой при запуске из службы Windows. Я читал об установках службы против клиента и надеялся, что выполнил все требования для установки службы без вывода сообщений (создал файл .CAT, он подписан вместе с драйвером и т. Д.).

Но без игры в кости - она ​​просто терпит неудачу. Сравнение ошибок в файле SetupAPI.log между интерактивной установкой и установкой из службы не показывает каких-либо различий (за исключением того, что интерактивная выполняется копирование файла драйвера и выполняется успешно, а другая - нет).

Сам драйвер не используется (мой сервис единственный, кто его использует). Есть ли ЛЮБОЙ способ для службы обновить драйвер без уведомления пользователя?

1 Ответ

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

Я позвонил в Microsoft и обсудил это с инженером службы поддержки.

Оказывается, что использование DefaultInstall с InstallHinfSection несколько устарело, но все еще работает. И это просто работает без запроса пользователя, если драйвер подписан сертификатом, который он распознает, потому что DefaultInstall 'тупой'. Тем не менее самому драйверу все еще разрешено запускаться, потому что он подписан сертификатом Microsoft. Хорошая маленькая лазейка, я думаю. Хитрость заключается в том, что он должен быть установлен службой, которая настроена на Взаимодействие с рабочим столом (требование). Использование чего-то вроде PsExec или RemCom - это способ сделать это, если ваша служба в данный момент не работает таким образом.

В будущем это может не работать. В этот момент поместите файл .cat драйвера в папку Windows \ System32 \ Catroot {F7 ​​..., но его нельзя просто скопировать напрямую - есть API.

Если файл .cat был помещен первым, то теоретически драйвер не должен запрашивать, приемлем ли для пользователя сертификат для драйвера, потому что catroot - это список сертификатов, «приемлемый для пользователя», и драйвера.

Также может помочь установление файла каталога перед попыткой установки драйвера, поскольку каталог содержит сертификат безопасности, который будет представлен драйвером (хотя не обязательно в этом случае - но это может помочь в будущем (и, возможно, с Win 2003)

В основном инженер службы поддержки был удивлен, что это сработало вообще, и мы обошли вокруг и выяснили, как это может работать ... Надеюсь, это поможет кому-то еще.

...