プロトコル ハンドラーのデバッグ

プロトコル ハンドラーの起動方法を理解することは、プロトコル ハンドラー実装のテストとデバッグに不可欠です。

このトピックは次のように構成されています。

プロトコル ハンドラーのデバッグについて

SearchIndexer プロセス (searchindexer.exe) は、システム コンテキストで SearchProtocolHost プロセス (SearchProtocolHost.exe) の 1 つのコピーを起動し、ユーザー コンテキストで別のコピーを起動します。 その後、必要に応じて、プロトコル ハンドラーが SearchProtocolHost プロセスに読み込まれます。 これらは、検索サービスが停止するまでアンロードされません。 サービスの実行中は、プロトコル ハンドラーの同じインスタンスが何度も再利用されます。

SearchIndexer および SearchProtocolHost プロセスは、インデックス作成中に頻繁に通信します。 デバッグする SearchProtocolHost プロセスを一時停止または停止すると、SearchIndexer によって新しい SearchProtocolHost プロセスが起動され、デバッグ セッションが無効になります。 また、デバッガーを SearchProtocolHost プロセスに直接アタッチすると、searchindexer.exe から searchprotocolhost.exe へのハンドル継承を解除され、2 つのプロセスが通信できなくなります。

これらの問題を回避するには、デバッグ中であることを検索サービスに通知する必要があり、次に説明するように、子プロセスをデバッグする手順を含むデバッガーを SearchIndexer プロセスにアタッチする必要があります。

デバッグの設定

プロトコル ハンドラーのデバッグを設定するには、次の手順に従います。

  1. デバッグ中であることを検索サービスに通知するには、レジストリで DebugFilters の値を 1 に設定してください。

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
       Windows Search
          Gathering Manager
             DebugFilters = 1
    
  2. イメージ ファイル実行オプションレジストリ キーを使用してデバッガーをアタッチしてください。

    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"

  3. compmgmt.msc、services.msc、または次に示すようなコマンド ウィンドウのコマンドを使用して、デバッガーで searchindexer.exe を再起動してください。

    net stop wsearch
    <copy new DLLs for debugging>
    net start wsearch
    

SearchProtocolHost プロセスが、システム コンテキストで実行されているのか、ユーザー コンテキストで実行されているのかを区別するには、環境文字列を確認してください。 たとえば、ntsd.exe では、拡張コマンド !peb を使用して、プロセス環境ブロック (PEB) に情報の書式設定されたビューを表示できます。

その他のリソース

Conceptual