2011-01-24 21 views
0

私はいつも私のドライバーIMAGEPATH直接設定。(C:\ WINDOWS \ System32に\ドライバを\ abc.sys)デバイスドライバのImagePathの

しかし、私はちょうど、多くのデバイスドライバが% SYSTEMROOT%\ SYSTEM32 に自分のImagePathを設定して知っていました\ 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を使用することはできません。

混乱の理由は、Service Control Manager APIを使用して古いスタイル(NT4)の非プラグアンドプレイドライバを開始できるためです。

+0

私はLanmanager(ネットワークリダイレクタ)のようなデバイスドライバを書いています。私はLanmanworkstationがSMBリダイレクターの登録キーだと思った。私は今確信していない。私が間違っている? – Benjamin

+0

lanmanworkstationはワークステーションサービスで、ドライバの名前はMrxsmb.sysです。 http://technet.microsoft.com/en-us/library/cc939966.aspxを参照してください。 – John

+1

svchostを使用して複数のサービス間で同じプロセスを共有することはできません(ただし、MicrosoftのWindows部門それに従わなければならない非常に厳しい規則がある))。 svchostのアーキテクチャはWindowsの100%内部であり、svchostとそのホストされたサービス間のインタフェースは、いつでも警告なしに変更される可能性があります。 –

1

svchost.exeは「多目的」サービスです。 1つの単一のexeファイルに複数のサービスが組み込まれています。それぞれのサービスは、個別のexeファイルを使用して個別に制御できます。サービス管理コンソール。 svchost.exeのパラメータは、exeファイル内の "サブサービス"を示します。

startService()はサービス自体に対する制御メッセージではなく、サービス(およびサービス)であることを「知っていなければならない」特定の実行可能ファイルを開始する要求のみであり、コントロールマネージャ)では、ウィンドウは単にImagePathが指すバイナリを実行します。

この場合(LanManWorkstation)、このバイナリはsvchost.exeで、パラメータは-k netsvcです。これにより、svchost.exeは提供する多くのサービスのどれを起動するべきかを知ることができます。

いつものように、バイナリはすべての関数をそれ自身に含む必要はありませんが、追加のライブラリを読み込むこともできます。 mrxsmb.sysはこのようなライブラリであるかもしれませんが、私はこの点については分かりません。

この回答は、「はい、netsvcおよびmrxsmb.sysはLanManWorkstationです」よりも、「一般的にどのように機能するのですか」の詳細です。

1

svchostは、DLLに含まれる他のサービスのホストプロセスです。 "-k"の後の部分はサービスグル​​ープを示します。 HKLM\System\CurrentControlSet\Services\LanmanWorkstation\ParametersのサービスDLLパスは、ServiceDllの値になります。サービスタイプがSERVICE_WIN32_SHARE_PROCESSに設定されているため、イメージパスを削除してもまだ正しく開始されている理由が考えられます。SCMはイメージパスを無視している可能性があります。

関連する問題