ImagePath драйвера устройства - PullRequest
0 голосов
/ 24 января 2011

Я всегда устанавливаю свой драйвер Imagepath напрямую. (C: \ Windows \ System32 \ drivers \ abc.sys)

Но я просто знал, что многие драйверы устройств устанавливают для своего ImagePath значение % SystemRoot% \ system32 \ svchost.exe -k netsvcs
enter image description here
Это куст реестра драйвера Lanmanworkstation.
Я полагаю, файл образа драйвера Lanmanworkstation - mrxsmb.sys
Но онине поставил 'System32 \ drivers \ mrxsmb.sys'.Почему.

Что означает svchost.exe -k netsvcs ?
Несмотря на отсутствие определенного пути, функция StartService работает хорошо.
Как работает Service Manager (? Iя не уверен) найти путь к образу драйвера?

Есть ли преимущество в этом?
Что если я решу использовать этот способ, должны ли мои коды драйверов измениться?

Ответы [ 3 ]

3 голосов
/ 24 января 2011

Вы путаете драйверы устройств и службы.
svchost.exe используется для совместного использования одного и того же процесса несколькими службами.Реализация является внутренней для Windows, поэтому использование за пределами Windows не поддерживается.

Если вы пишете драйвер устройства (для оборудования или драйвера фильтра) или не работаете для Microsoft, вы не можете использовать svchost.

Причина путаницы заключается в том, что устаревшие (NT4) драйверы, не поддерживающие технологию plug-and-play, можно запускать с помощью API-интерфейсов Service Control Manager.

1 голос
/ 24 января 2011

svchost является хост-процессом для других сервисов, содержащихся в DLL. Часть после «-k» указывает на сервисную группу. Путь к служебной DLL можно найти в HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters в значении ServiceDll. Я предполагаю, что причина того, что он по-прежнему запускается правильно, если вы удалите путь к изображению, заключается в том, что тип службы установлен на SERVICE_WIN32_SHARE_PROCESS, а SCM, вероятно, игнорирует путь к изображению (не уверен в этом).

1 голос
/ 24 января 2011

svchost.exe - это «многоцелевая» служба.Он включает в себя несколько сервисов в одном исполняемом файле, каждый из которых может управляться отдельно, например, с помощью консоли управления сервисами.Параметры для svchost.exe указывают «subservice» внутри exe-файла.

Поскольку startService () - это не управляющее сообщение для самой службы, а только запрос на запуск определенного исполняемого файла (который сам должен)Если вы знаете, что это служба (и которая является службой) и затем зарегистрируется в диспетчере управления службами), Windows просто выполнит двоичный файл, на который указывает ImagePath.

В этом случае (LanManWorkstation) этот двоичныйsvchost.exe, данный ему параметр равен -k netsvc.Это позволяет svchost.exe знать, какую из множества предоставляемых им служб следует запустить.

Как обычно, двоичный файл не должен содержать в себе все функции, но также может загружать дополнительные библиотеки.mrxsmb.sys вполне может быть такой библиотекой, хотя я не уверен в этом.

Так что этот ответ скорее "как это работает в целом", чем "yes, netsvc и mrxsmb.sys являются LanManWorkstation ".

...