设备驱动程序的ImagePath

时间:2011-01-24 09:54:50

标签: windows windows-services device-driver smb

我总是直接设置我的驱动程序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(我不确定)如何找到驱动程序的映像路径?

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

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

svchost.exe 是一种“多用途”服务。它在一个单独的exe文件中包含多个服务,每个服务文件可以使用例如单独的exe文件单独控制。服务管理控制台。 svchost.exe的参数声明了exe文件中的“子服务”。

因为startService()不是服务本身的控制消息,而是仅启动某个可执行文件的请求(它本身必须“知道”它是一个服务(和服务),然后将注册到服务控制经理),windows将只执行ImagePath指向的二进制文件。

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

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

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

答案 2 :(得分:1)

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