質問

私は常にドライバーのイメージパスを直接設定します。(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 関数は正常に動作します。
サービスマネージャー(?よくわかりません)ドライバーのイメージパスを見つけますか?

これを使うメリットはありますか?
この方法で使用することにした場合、ドライバー コードを変更する必要はありますか?

役に立ちましたか?

解決

デバイスドライバーとサービスの間で混乱しています。
SVChost.exeは、複数のサービス間で同じプロセスを共有するために使用されます。実装はWindowsの内部であるため、Windowsの外で使用することはサポートされていません。

デバイスドライバー(ハードウェア用、またはフィルタードライバー用)を作成したり、Microsoftで動作しない場合は、SVChostを使用できません。

混乱の理由は、古いスタイル(NT4)、非プラグアンドプレイドライバーをサービスコントロールマネージャーAPIを使用して開始できるためです。

他のヒント

svchost は、DLL に含まれる他のサービスのホスト プロセスです。「-k」以降の部分はサービスグル​​ープを示します。サービス DLL パスは次の場所にあります。 HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters の中に ServiceDll 価値。イメージパスを削除しても正しく起動するのは、サービスタイプが次のように設定されているためだと思います。 SERVICE_WIN32_SHARE_PROCESS, 、SCM はおそらくイメージ パスを無視します (これについてはわかりません)。

svchost.exe 「多目的」サービスです。 1つのEXEファイルに複数のサービスが組み込まれており、それぞれがEG Services Management Consoleを使用して個別に制御できます。 svchost.exeのパラメーターは、exeファイル内の「サブサービス」を記載しています。

StartService()はサービス自体へのコントロールメッセージではなく、特定の実行可能ファイルを開始するリクエストのみ(それ自体がサービス(およびWICHサービス)であることを「知る」必要があり、サービスコントロールマネージャーに登録する必要があります)、 Windowsは単純にバイナリを実行します ImagePath に指差す。

この場合(LanmanworkStation)、このバイナリはです svchost.exe, 、それに与えられたパラメーターはです -k netsvc. 。これにより、SVChost.exeが提供する多くのサービスのどれを開始する必要があるかを知ることができます。

いつものように、バイナリはそれ自体にすべての関数を含める必要はありませんが、追加のライブラリをロードすることもできます。 mrxsmb.sys この点はわかりませんが、そのようなライブラリかもしれません。

したがって、この答えは、「はい、netsvc、mrxsmb.sysはlanmanworkstation」よりも「どのように機能するのか」のようなものです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top