0

私はいつもドライバのイメージパスを直接設定しています.(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 関数はうまく機能します。
Service Manager(? よくわかりません) はどのようにしてドライバーのイメージ パスを見つけますか?

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

4

3 に答える 3

3

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

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

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

于 2011-01-24T17:26:47.597 に答える
1

svchost.exeは「多目的」サービスです。1 つの 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 に答える