2011-01-24 6 views
0

Я всегда устанавливать мои водители ImagePath сразу. (C: \ Windows \ System32 \ Drivers \ abc.sys)Device водителя

Но я просто знал, что многие драйверы устройств установить их 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 (? Я не уверен) найти путь к изображению драйвера?

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

ответ

3

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

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

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

+0

Я пишу драйвер устройства, такой как Lanmanager. (Сетевой перенаправитель). Я думал, что Lanmanworkstation - это раздел реестра ретранслятора SMB. Теперь я не уверен. Я ошибаюсь? – Benjamin

+0

lanmanworkstation - это служба рабочей станции, драйвер называется Mrxsmb.sys. См. Http://technet.microsoft.com/en-us/library/cc939966.aspx – John

+1

Обратите внимание, что вы * не можете * использовать svchost для совместного использования одного и того же процесса между несколькими службами (если только вы не работаете в подразделении Windows в Microsoft (и даже то есть очень строгие правила, которые должны соблюдаться)). Архитектура svchost на 100% является внутренней для Windows, и интерфейсы между svchost и его размещенными службами могут быть изменены без предупреждения в любое время. –

1

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

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

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

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

Так что этот ответ скорее всего «как он работает вообще», чем «да, netsvc и mrxsmb.sys являются LanManWorkstation».

1

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