0

我总是直接设置我的驱动程序 Imagepath。(C:\Windows\System32\drivers\abc.sys)

但我只知道许多设备驱动程序将它们的 ImagePath 设置为%SystemRoot%\system32\svchost.exe -k netsvcs
在此处输入图像描述
这是 Lanmanworkstation 驱动程序的注册表配置单元。
我猜Lanmanworkstation 驱动的镜像文件是mrxsmb.sys
但他们没有放'System32\drivers\mrxsmb.sys'。为什么。

svchost.exe -k netsvcs是什么意思?
即使没有确定的路径,StartService 功能也能正常工作。
服务管理器(?我不确定)如何找到驱动程序的图像路径?

使用这个有优势吗?
如果我决定使用这种方式,我的驱动程序代码是否应该修改?

4

3 回答 3

3

您在设备驱动程序和服务之间感到困惑。
svchost.exe 用于在多个服务之间共享同一个进程。该实现是 Windows 内部的,因此不支持在 Windows 之外使用。

如果您编写设备驱动程序(用于硬件或过滤器驱动程序)或不为 Microsoft 工作,则无法使用 svchost。

造成混淆的原因是旧式 (NT4)、非即插即用驱动程序可以使用服务控制管理器 API 启动。

于 2011-01-24T17:26:47.597 回答
1

svchost.exe是一个“多用途”服务。它将多个服务合并到一个 exe 文件中,每个服务都可以使用服务管理控制台等单独控制。svchost.exe 的参数说明了 exe 文件中的“子服务”。

由于 startService() 不是服务本身的控制消息,而只是启动某个可执行文件的请求(它本身必须“知道”它是一个服务(以及服务),然后将向服务控制管理器注册), windows 将简单地执行ImagePath指向的二进制文件。

在这种情况下(LanManWorkstation)这个二进制是svchost.exe,给它的参数是-k netsvc。这让 svchost.exe 知道应该启动它提供的众多服务中的哪一个。

像往常一样,二进制文件本身不需要包含所有函数,但也可以加载其他库。mrxsmb.sys很可能是这样一个图书馆,尽管我不确定这一点。

所以这个答案更像是“它一般如何工作”而不是“是的,netsvc 和 mrxsmb.sys 是 LanManWorkstation”。

于 2011-01-24T10:00:49.360 回答
1

svchost 是包含在 DLL 中的其他服务的宿主进程。“-k”后面的部分表示服务组。HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters您可以在值中找到服务 DLL 路径ServiceDll。我猜如果您删除图像路径它仍然可以正常启动的原因是因为服务类型设置为SERVICE_WIN32_SHARE_PROCESS,并且 SCM 可能会忽略图像路径(对此不确定)。

于 2011-01-24T10:18:20.633 回答