プロトコル ハンドラーのデバッグ
プロトコル ハンドラーの起動方法を理解することは、プロトコル ハンドラー実装のテストとデバッグに不可欠です。
このトピックは次のように構成されています。
プロトコル ハンドラーのデバッグについて
SearchIndexer プロセス (searchindexer.exe) は、システム コンテキストで SearchProtocolHost プロセス (SearchProtocolHost.exe) の 1 つのコピーを起動し、ユーザー コンテキストで別のコピーを起動します。 その後、必要に応じて、プロトコル ハンドラーが SearchProtocolHost プロセスに読み込まれます。 これらは、検索サービスが停止するまでアンロードされません。 サービスの実行中は、プロトコル ハンドラーの同じインスタンスが何度も再利用されます。
SearchIndexer および SearchProtocolHost プロセスは、インデックス作成中に頻繁に通信します。 デバッグする SearchProtocolHost プロセスを一時停止または停止すると、SearchIndexer によって新しい SearchProtocolHost プロセスが起動され、デバッグ セッションが無効になります。 また、デバッガーを SearchProtocolHost プロセスに直接アタッチすると、searchindexer.exe から searchprotocolhost.exe へのハンドル継承を解除され、2 つのプロセスが通信できなくなります。
これらの問題を回避するには、デバッグ中であることを検索サービスに通知する必要があり、次に説明するように、子プロセスをデバッグする手順を含むデバッガーを SearchIndexer プロセスにアタッチする必要があります。
デバッグの設定
プロトコル ハンドラーのデバッグを設定するには、次の手順に従います。
デバッグ中であることを検索サービスに通知するには、レジストリで DebugFilters の値を 1 に設定してください。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft Windows Search Gathering Manager DebugFilters = 1
イメージ ファイル実行オプションレジストリ キーを使用してデバッガーをアタッチしてください。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion Image File Execution Options SearchIndexer.exe Debugger = <path to debugger> <debugger options>
サンプル デバッガーのオプションについて、次の表で説明します。
ntsd デバッガーの使用例Debugger = C:\debuggers\ntsd.exe -odGx -c: "sxe ld mydll.dll;g"
compmgmt.msc、services.msc、または次に示すようなコマンド ウィンドウのコマンドを使用して、デバッガーで searchindexer.exe を再起動してください。
net stop wsearch <copy new DLLs for debugging> net start wsearch
SearchProtocolHost プロセスが、システム コンテキストで実行されているのか、ユーザー コンテキストで実行されているのかを区別するには、環境文字列を確認してください。 たとえば、ntsd.exe では、拡張コマンド !peb を使用して、プロセス環境ブロック (PEB) に情報の書式設定されたビューを表示できます。
その他のリソース
- ハンドラーの作成の詳細については、シェル拡張機能の登録に関するページを参照してください。
関連トピック
Conceptual