レジストリの構成

SymProxy は、このレジストリ キーに設定を格納します。

HKLM/Software/Microsoft/Symbol Server Proxy

このレジストリ キーは、Web サイトに保存するシンボルを検索する場所、ログ レベル、SymProxy がネットワークへの直接接続で動作するかどうかを制御します。 このキーを作成するには、Windows デバッグ ツールに付属の SymProxy 登録ツール (Symproxy.reg) を実行します。 コマンド プロンプトで symproxy.reg と入力するか、Windows エクスプローラーからダブルクリックします。

これにより設定のエントリが追加され、無効化されていることを表す "x" というプレフィックスが付きます。 設定を有効にするには、目的の設定の前に付いている "x" を削除します。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Symbol Server Proxy]
"Available Settings"="Remove the 'x' prefix to use the setting"
"xMissAgeTimeout"=dword:00015180
"xMissAgeCheck"=dword:00000e10
"xMissTimeout"=dword:00000e10
"xNoCache"=dword:00000001
"xNoFilePointers"=dword:00000001
"xNoInternetProxy"=dword:00000001
"xNoLongerIndexedAuthoritive"=dword:00000001
"xNoUncompress"=dword:00000001
"xRequestTimeout"=dword:0000019
"xRetryAppHang"=dword:0000002
"xUriFilter"=dword:00000FF
"xUriTiers"=dword:0000001

symproxy.reg レジストリ ファイルは、仮想ディレクトリ名が Symbols であると想定して、Microsoft パブリック シンボル サーバーを使用するようにシンボル パスを構成します。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Symbol Server Proxy\Web Directories]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Symbol Server Proxy\Web Directories\Symbols]
"SymbolPath"="https://msdl.microsoft.com/download/symbols"

symproxy.reg のイベント ログのエントリについては、このトピックの「イベント ログ」セクションで説明します。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\Microsoft-Windows-SymProxy]
"ProviderGuid"="{0876099c-a903-47ff-af14-52035bb479ef}"
"EventMessageFile"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,\
  00,6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,\
  5c,00,69,00,6e,00,65,00,74,00,73,00,72,00,76,00,5c,00,53,00,79,00,6d,00,50,\
  00,72,00,6f,00,78,00,79,00,2e,00,64,00,6c,00,6c,00,00,00
"TypesSupported"=dword:00000007

このトピックでは、symproxy.reg の Web ディレクトリのエントリについて説明します。

Web Directories

シンボル ストアとして使用している、IIS に生成された仮想ディレクトリごとに、以下のレジストリ キーの Web Directories サブキーの下に、レジストリ キーを設定する必要があります。

HKLM/Software/Microsoft/Symbol Server Proxy

シンボル ストア仮想ディレクトリのレジストリ キーを編集するには

  • SymProxy シンボル ストアによって使用されるすべてのシンボル ストアを含めるように、SymbolPath の内容を編集します。 複数のシンボル ストアが使用されている場合は、セミコロンで区切ります。 値ごとに最大 10 個のストアがサポートされます。 HTTP パスには https:// プレフィックス を含める必要があり、UNC パスには \\ プレフィックスを含める必要があります。

たとえば、仮想ディレクトリの 1 つが Symbols という名前で、それがアクセスするシンボル ストアが UNC ストア \\symbols\symbols と HTTP ストア https://msdl.microsoft.com/download/symbols にある場合は、次のレジストリ キーを作成します。

HKLM/Software/Microsoft/Symbol Server Proxy/Web Directories/Symbols

このキーが作成されたら、その SymbolPath を編集して \\symbols\symbols;https://msdl.microsoft.com/download/symbols と指定します。 これは、以下に示すレジストリ エディターのスクリーンショットで確認できます。

Screenshot of the Registry Editor displaying an updated SymbolPath.

この例では、SymProxy は最初に \\symbols\symbols でシンボルを検索します。 この場所でファイルが見つからない場合は、Microsoft シンボル ストアが使用されます。

  • Web Directories の下にある、仮想ディレクトリ名と一致する各キーに、SymbolPath という名前の REG_SZ を作成する必要があります。 この値には、SymProxy シンボル ストアへの入力に使用されるすべてのアップストリーム シンボル ストアが含まれます。

  • 最大 10 個のエントリがサポートされます。

  • 各エントリは、セミコロンで区切ります。

  • UNC パスには "\\" プレフィックスを含める必要があります

  • HTTP パスには "https://" プレフィックスを含める必要があります

  • 最も低コストなものから最も高コストなものの順に値を並べ替えます。

    • 計算では、使用状況のパフォーマンス目標と、サーバーとデータ通信のコストとのバランスを考慮する必要があります。

    • 一般に、インターネット HTTP サーバーより前にローカル SMB/HTTP サーバーを並べます。

SymProxy パフォーマンス カウンター

SymProxy は、SymProxy という名前のプロバイダーを介してパフォーマンス カウンターを生成できます。

パフォーマンス カウンターのサポートを有効にするには、管理者コマンド ウィンドウで symproxy マニフェスト ファイルを登録します。

C:\> lodctr.exe /m:%WINDIR%\system32\inetsrv\symproxy.man

パフォーマンス カウンターのサポートを無効にするには、マニフェストの登録を解除します。

C:\> unlodctr.exe /m:%WINDIR%\system32\inetsrv\symproxy.man

Windows 用の SymProxy イベント トレーシング

SymProxy は、Microsoft-Windows-SymProxy という名前のプロバイダーを介して ETW イベントを作成できます。

C:\> logman query providers | findstr SymProxy
Microsoft-Windows-SymProxy {0876099C-A903-47FF-AF14-52035BB479EF}

ETW のサポートを有効にするには、マニフェスト ファイルを登録します。

C:\> wevtutil.exe install-manifest %WINDIR%\system32\inetsrv\symproxy.man

ETW のサポートを無効にするには、マニフェスト ファイルの登録を解除します。

C:\> wevtutil.exe uninstall-manifest %WINDIR%\system32\inetsrv\symproxy.man

イベント ログ

ETW が構成されている場合、イベントは、イベント ログの Applications and Services Logs\Microsoft\Windows\SymProxy の下にある Operational and Analytic チャネルにイベントとして登録されます。

イベント ログのエントリのメッセージを正しく表示するには、symproxy.reg ファイルのイベント ログ領域をレジストリに追加する必要があります。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\Microsoft-Windows-SymProxy]
"ProviderGuid"="{0876099c-a903-47ff-af14-52035bb479ef}"
"EventMessageFile"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,\
  00,6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,\
  5c,00,69,00,6e,00,65,00,74,00,73,00,72,00,76,00,5c,00,53,00,79,00,6d,00,50,\
  00,72,00,6f,00,78,00,79,00,2e,00,64,00,6c,00,6c,00,00,00
"TypesSupported"=dword:00000007

SymProxy イベント

SymProxy は、以下のイベントをログに記録します。

イベント ID 説明 Channel
1 ISAPI フィルターの開始 管理者
2 ISAPI フィルターの停止 管理者
3 ISAPI フィルターの構成 管理者
4 ミス キャッシュ統計 管理者
10 URL 要求 - ローカル キャッシュ ヒット 運用時
11 URL 要求 - ローカル キャッシュ ミス 運用時
20 SymSrv を使用したシンボルのダウンロード 運用時
30 クリティカルなシンボルがありません 管理者
31 クリティカルなイメージがありません 管理者
40 SymSrv – パスが見つかりません 管理者
41 SymSrv – ファイルが見つかりません 管理者
42 SymSrv – アクセスが拒否されました 管理者
43 SymSrv – パスが長すぎます 管理者
49 SymSrv – エラー コード 管理者
90 ロック競合 運用時
100 一般的なクリティカル メッセージ 分析
101 一般的なエラー メッセージ 分析
102 一般的な警告メッセージ 分析
103 一般的な情報メッセージ 分析
104 一般的な分析メッセージ 分析
105 一般的なデバッグ メッセージ デバッグ

シンボル サーバー プロキシの構成

SymProxy は、構成設定を次のレジストリ キー領域に格納します。

HKLM/Software/Microsoft/Symbol Server Proxy

SymProxy はこの場所から、そのグローバル設定と、アップストリーム シンボル ストアのシンボル パスを取得します。

このキーを作成するには、前述のようにカスタマイズした symproxy.reg ファイルをマージします。

シンボル サーバー プロキシのキー

シンボル サーバー プロキシのレジストリ キーは、以下のグローバル設定 (すべて REG_DWORD) をサポートしています。 設定は、アプリケーション プールをリサイクルすることで、ライブで適用できます。 新しい w3wp.exe プロセスが作成され、新しい値が読み取られます。 古い w3wp.exe プロセスに対するすべての保留中の要求が完了すると、古い w3wp.exe プロセスが終了します。 IIS は既定で 1,740 分 (29 時間) ごとに w3wp.exeプロセスをリサイクルします。

REG_DWORD 説明
NoInternetProxy

サービスとして実行する場合、SymSrv.dll は WinInet ではなく WinHTTP を使用して HTTP 要求を行います。 そのため、サービスが外部のネットワーク リソースにアクセスできるようにする HTTP プロキシ設定が必要になる場合があります。 これは、netsh プログラムを使用して行うことができます。 “netsh.exe winhttp -?” と入力すると 説明が表示されます。

既定では、SymProxy は、指定された HTTP プロキシを使用します。 HTTP プロキシが構成されていない場合、SymProxy はダミー プロキシを使用します。 これにより、イントラネット内の HTTP サイトに安全にアクセスできます。 その影響で、SymProxy は、安全でないサイトに直接接続できなくなります。

  • 未指定 - (既定値) 無効 - プロキシが使用されます
  • 0: 無効にします。
  • 1+ – 有効

NoFilePointers

既定では、存在しないシンボルの場合、SymProxy は、(ローカル キャッシュ内で) 要求されたファイルの次にある file.ptr ファイルを検索します。 見つかった場合は、file.ptr ファイルによって指定された場所が返されます。 この機能は、SymStore.exe によってローカル キャッシュにデータが存在する場合にのみ必要です。

  • 未指定 - (既定値) 無効 - file.ptr ファイルの検索/読み取りが行われます
  • 0: 無効にします。
  • 1+ – 有効

NoUncompress

既定では、SymProxy は、ファイルを呼び出し元に返す前に、ダウンロードしたシンボルを展開します。 これにより、クライアントの CPU が消費されますが、I/O は向上します。

  • 未指定 - (既定値) 無効 - 展開が行われます
  • 0: 無効にします。
  • 1+ – 有効

NoCache

既定では、SymProxy は、ダウンロードしたシンボルを、仮想ディレクトリのパスによって定義されたローカル ファイル システムにキャッシュします。

  • 未指定 - (既定) 無効 - キャッシュが発生します
  • 0: 無効にします。
  • 1+ – 有効

MissTimeout

アップストリーム シンボル サーバーに対してクエリを再実行せずに、不足しているシンボルが欠落として報告されるタイムアウト期間 (秒単位)。

ミスは UTC ベースの時刻で関連付けられます。 そのファイルに対する後続の要求は、N 秒間は即座に拒否されます。

N 秒経過後のファイルに対する最初の要求で、アップストリーム シンボル ストアに対するクエリが再実行されます。

成功すると、シンボル ファイルが返され、ミスが削除されます。

失敗すると、ミスは現在の時刻 (UTC) に進められ、新しいタイムアウト期間が開始されます。

"Miss Cache" パフォーマンス カウンターを使用して、ミスを監視します。

  • 未指定 - (既定値) 300 秒 / 5 分
  • 0 – 機能は無効です
  • N – タイムアウトを N 秒継続

MissAgeCheck

ミス経過時間のチェック間隔。 ミス キャッシュがスキャンされ、MissAgeTimeout 秒より前のレコードが削除されます。

現在の統計は、イベント ID 4 を使用してイベント ログに保存されます。

  • 未指定 - (既定値) 3600 秒 / 1 時間
  • 0 – 機能は無効です
  • N – チェック間隔 (N 秒)

MissAgeTimeout

ミス キャッシュの各エントリの消去タイムアウト。 この期間にわたって要求が行われなかった場合、このエントリは消去されます。

  • 未指定 - (既定値) 86400 秒 / 1 日
  • 0 – 機能は無効です
  • N – エントリのタイムアウト (N 秒)

NoLongerIndexedAuthoritive

有効にすると、NoLongerIndexed の file.ptr 応答は、すべてのシンボル ストアで権限があるものとして扱われます。

これは、ファイルのインデックスを作成しないサーバーへの (不要な) 呼び出しを回避するために使用します。

  • 未指定 - (既定値) 無効
  • 0: 無効にします。
  • 1+ – 有効

RetryAppHang

アップストリーム HTTP シンボル ストアへの再試行を有効にします。 これは、SymSrv SSRVOPT_RETRY_APP_HANG (0x80000000) オプションと同じです。

アップストリーム HTTP シンボル ストアから 'Symbol-Agent-Status' HTTP 応答ヘッダーを介して 0x80070512/HRESULT_FROM_WIN32(ERROR_APP_HANG) エラー コードを受信すると、ソケットは開いたままになり、GET が最大 'N' 回繰り返されます。

SymProxy は、同じ URI に対する複数の要求を結合します。 保留中の要求が 25 秒に達すると、SymProxy は 'Symbol-Agent-Status' HTTP 応答ヘッダーを介して呼び出し元に 0x80070512 を返しますが、バックグラウンドで操作を続行します。

クライアントは、(余分な) 長い要求がサポートされるように、SymSrv で SSRVOPT_RETRY_APP_HANG オプションを有効にする必要があります。つまり、再試行アップストリームを連鎖させます。

SymProxy は、既定で応答タイムアウトを 25 秒に設定し、SymSrv が HTTP シンボル ストアに対して使用する (既定の) 30 秒のタイムアウトでソケットが閉じる前に、応答が行われるようにします。 新しいバージョンの SymSrv では、構成された HTTP タイムアウト値を "Symbol-Agent-Receive-Timeout" HTTP 要求ヘッダー (mSec) を介して送信します。 この HTTP 要求ヘッダーが指定されている場合、この値が 25 秒の既定値の代わりに使用されます。

  • 未指定 - (既定値) 無効
  • 0: 無効にします。
  • N – 再試行回数

UriFilter

URI フィルター処理を有効にする これは、SymSrv SSRVOPT_URI_FILTER (0x20000000) オプションと同じです。

URI フィルタリングを使用すると、すべてのアップストリーム シンボル ストアに対するさまざまな要求が減ります。 この値はビットマスクです。

HTTP - SSRVURI_HTTP_MASK (0x0F)

  • 0x01 - SSRVURI_HTTP_NORMAL - 例: http://symbols/.../foo.pdb
  • 0x02 - SSRVURI_HTTP_COMPRESSED - 例: http://symbols/.../foo.pd_
  • 0x04 - SSRVURI_HTTP_FILEPTR - 例: http://symbols/.../file.ptr

UNC - SSRVURI_UNC_MASK (0xF0)

  • 0x10 - SSRVURI_UNC_NORMAL - 例: \\MyServer\Symbols\...\foo.pdb
  • 0x20 - SSRVURI_UNC_COMPRESSED - 例: \\MyServer\Symbols\...\foo.pd_
  • 0x40 - SSRVURI_UNC_FILEPTR - 例: \\MyServer\Symbols\...\file.ptr

UriTiers

URI 層を有効にします。 これは、SymSrv SSRVOPT_URI_TIERS (0x40000000) オプションと同じです。

URI 層は、すべてのアップストリーム シンボル ストアで層スキーマが使用されるように強制します。 設定しない場合は、スキーマを決定するために追加の要求が必要です。 ルート内に 'index2.txt' がある場合、2 層レイアウトを示します。

1 層ストアは次の形式になります: /widget.dll/<index>/widget.dll|widget.dl_|file.ptr

2 層ストアは次の形式になります: /wi/widget.dll/<index>/widget.dll|widget.dl_|file.ptr

  • 未指定 - (既定値) 無効
  • 0: 無効にします。
  • 1 – 1 層シンボル ストア
  • 2 – 2 層シンボル ストア

外部ネットワーク リソースへのアクセス

SymSrv を SymProxy と組み合わせて使用すると、サービスとして実行され、WinHTTP API を使用して HTTP 接続経由でシンボルにアクセスします。 これは、この目的で WinInet を使用する通常の動作とは異なります。

そのため、このサービスが外部のネットワーク リソースにアクセスできるようにする HTTP プロキシ設定が必要になる場合があります。 これらの設定を構成するには、次のいずれかの方法を使用します。

  • Netsh ツール (netsh.exe) を使用します。 手順については、コマンド プロンプト ウィンドウで次のように入力します。

    netsh winhttp -? 
    

SymProxy の既定の動作では、ProxyCfg または Netsh によって指定されている HTTP プロキシを使用します。 HTTP プロキシが構成されていない場合、SymProxy はダミー プロキシを使用して、イントラネット内の安全な HTTP サイトへのアクセスを許可します。 その影響で、この方法では、SymProxy が外部インターネットへの直接接続では機能しなくなります。 インターネットへの直接接続で SymProxy が動作することを許可する場合は、レジストリの Symbol Server Proxy キーに NoInternetProxy という名前の REG_DWORD 値を作成します。 NoInternetProxy の値を 1 に設定し、ProxyCfg によって示される HTTP プロキシがないことを確認します。