2011-01-24 52 views
0

我總是把我的司機的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(?我不確定)如何找到驅動程序的映像路徑?

使用它有優勢嗎?
如果我決定使用這種方式,我的驅動程序代碼應該修改嗎?

回答

3

您在設備驅動程序和服務之間混淆不清。
svchost.exe用於在多個服務之間共享相同的進程。該實現是Windows內部的,因此不支持在Windows之外使用。

如果您編寫設備驅動程序(用於硬件或過濾驅動程序)或不適用於Microsoft,則無法使用svchost。

混淆的原因是因爲舊式(NT4),非即插即用的驅動程序可以使用服務控制管理器API啓動。

+0

我正在寫一個設備驅動程序,如Lanmanager。(網絡重定向器)。我認爲Lanmanworkstation是SMB重定向器的註冊表鍵。我現在不確定。我錯了嗎? – Benjamin 2011-01-24 23:15:01

1

svchost.exe是一種「多用途」服務。它將多個服務集成在一個單獨的exe文件中,每個文件都可以單獨使用。服務管理控制檯。 svchost.exe的參數聲明exe文件中的「subservice」。由於startService()不是對服務本身的控制消息,而只是啓動某個可執行文件(它本身必須「知道」它是一個服務(以及極好的服務),然後將註冊到服務的請求控制管理器),Windows將簡單地執行指向ImagePath的二進制文件。

在這種情況下(LanManWorkstation)這個二進制文件是svchost.exe,給它的參數是-k netsvc。這讓svchost.exe知道應該啓動它提供的許多服務中的哪一個。如往常一樣,二進制文件本身不需要包含所有的函數,但也可以加載額外的庫。 mrxsmb.sys很可能是這樣一個圖書館,但我不確定這一點。

所以這個答案更多的是「它是如何工作的」,而不是「是的,netsvc和mrxsmb.sys是LanManWorkstation」。

1

svchost是其他服務的宿主進程,包含在DLL中。 「-k」後面的部分表示服務組。您可以在ServiceDll值中找到HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters中的服務DLL路徑。我猜如果你刪除圖像路徑,它仍能正確啓動的原因是因爲服務類型設置爲SERVICE_WIN32_SHARE_PROCESS,而SCM可能會忽略圖像路徑(不確定這一點)。