设备驱动器ImagePath

问题描述:

我总是把我的司机的ImagePath直接。(C:\ WINDOWS \ SYSTEM32 \ DRIVERS \ abc.sys)设备驱动器ImagePath

但我只知道许多设备驱动自己的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(?我不确定)如何找到驱动程序的映像路径?

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

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

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

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

+0

我正在写一个设备驱动程序,如Lanmanager。(网络重定向器)。我认为Lanmanworkstation是SMB重定向器的注册表键。我现在不确定。我错了吗? – Benjamin 2011-01-24 23:15:01

svchost.exe是一种“多用途”服务。它将多个服务集成在一个单独的exe文件中,每个文件都可以单独使用。服务管理控制台。 svchost.exe的参数声明exe文件中的“subservice”。由于startService()不是对服务本身的控制消息,而只是启动某个可执行文件(它本身必须“知道”它是一个服务(以及极好的服务),然后将注册到服务的请求控制管理器),Windows将简单地执行指向ImagePath的二进制文件。

在这种情况下(LanManWorkstation)这个二进制文件是svchost.exe,给它的参数是-k netsvc。这让svchost.exe知道应该启动它提供的许多服务中的哪一个。如往常一样,二进制文件本身不需要包含所有的函数,但也可以加载额外的库。 mrxsmb.sys很可能是这样一个图书馆,但我不确定这一点。

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

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