シンボル ストレージの形式

SymStore は、ファイル システム自体をデータベースとして使用します。 シンボル ファイルのタイムスタンプ、署名、年齢、その他のデータなどに基づいてディレクトリ名を持つディレクトリの大きなツリーが作成されます。

たとえば、いくつかの異なる acpi.dbgs ファイルがサーバーに追加された後、ディレクトリは次のようになります。

Directory of \\mybuilds\symsrv\acpi.dbg
10/06/1999  05:46p      <DIR>          .
10/06/1999  05:46p      <DIR>          ..
10/04/1999  01:54p      <DIR>          37cdb03962040
10/04/1999  01:49p      <DIR>          37cdb04027740
10/04/1999  12:56p      <DIR>          37e3eb1c62060
10/04/1999  12:51p      <DIR>          37e3ebcc27760
10/04/1999  12:45p      <DIR>          37ed151662060
10/04/1999  12:39p      <DIR>          37ed15dd27760
10/04/1999  11:33a      <DIR>          37f03ce962020
10/04/1999  11:21a      <DIR>          37f03cf7277c0
10/06/1999  05:38p      <DIR>          37fa7f00277e0
10/06/1999  05:46p      <DIR>          37fa7f01620a0

この例では、acpi.dbg シンボル ファイルのルックアップ パスは、\\mybuilds\symsrv\acpi.dbg\37cdb03962040 のようになります。

ルックアップ ディレクトリ内に次の 3 つのファイルが存在する場合があります。

  1. acpi.dbg (ファイルが格納されている場合)

  2. ポインターが格納されている場合、file.ptr に実際のシンボル ファイルへのパスを指定します。

  3. refs.ptr のファイルには、現在シンボル ストアに追加されている、このタイムスタンプとイメージ サイズを持つ acpi.dbg の現在の場所のリストがすべて含まれています。

\\mybuilds\symsrv\acpi.dbg\37cdb03962040 のディレクトリ リストを表示すると、次のようになります。

10/04/1999  01:54p                  52 file.ptr
10/04/1999  01:54p                  67 refs.ptr

ファイル file.ptr には、テキスト文字列「\\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg」が含まれています。 このディレクトリには acpi.dbg というファイルがないため、デバッガーは \\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg でファイルを見つけようとします。

refs.ptr の内容は、デバッガーではなく SymStore でのみ使用されます。 このファイルには、このディレクトリで実行されたすべてのトランザクションのレコードが含まれています。 refs.ptr のサンプル ラインは次のようになります。

0000000026,ptr,\\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg

これは、\\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg へのポインターがトランザクション「0000000026」で追加されたことを示しています。

一部のシンボル ファイルは、さまざまな製品やビルド、または特定の製品を通じて一定の状態を維持します。 この例の 1 つは、Windows 2000 ファイル msvcrt.pdb です。 \\mybuilds\symsrv\msvcrt.pdb のディレクトリのリストから、msvcrt.pdb の 2 つのバージョンのみがシンボル サーバーに追加されていることがわかります。

Directory of \\mybuilds\symsrv\msvcrt.pdb
10/06/1999  05:37p      <DIR>          .
10/06/1999  05:37p      <DIR>          ..
10/04/1999  11:19a      <DIR>          37a8f40e2
10/06/1999  05:37p      <DIR>          37f2c2272

ただし、\\mybuilds\symsrv\msvcrt.pdb\37a8f40e2 のディレクトリのリストから、refs.ptr に複数のポインターがあることがわかります。

Directory of \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2
10/05/1999  02:50p              54     file.ptr
10/05/1999  02:50p           2,039     refs.ptr

\\mybuilds\symsrv\msvcrt.pdb\37a8f40e2\refs.ptr の内容は次のとおりです。

0000000001,ptr,\\mybuilds\symbols\x86\2137\symbols\dll\msvcrt.pdb
0000000002,ptr,\\mybuilds\symbols\x86\2137.chk\symbols\dll\msvcrt.pdb
0000000003,ptr,\\mybuilds\symbols\x86\2138\symbols\dll\msvcrt.pdb
0000000004,ptr,\\mybuilds\symbols\x86\2138.chk\symbols\dll\msvcrt.pdb
0000000005,ptr,\\mybuilds\symbols\x86\2139\symbols\dll\msvcrt.pdb
0000000006,ptr,\\mybuilds\symbols\x86\2139.chk\symbols\dll\msvcrt.pdb
0000000007,ptr,\\mybuilds\symbols\x86\2140\symbols\dll\msvcrt.pdb
0000000008,ptr,\\mybuilds\symbols\x86\2140.chk\symbols\dll\msvcrt.pdb
0000000009,ptr,\\mybuilds\symbols\x86\2136\symbols\dll\msvcrt.pdb
0000000010,ptr,\\mybuilds\symbols\x86\2136.chk\symbols\dll\msvcrt.pdb
0000000011,ptr,\\mybuilds\symbols\x86\2135\symbols\dll\msvcrt.pdb
0000000012,ptr,\\mybuilds\symbols\x86\2135.chk\symbols\dll\msvcrt.pdb
0000000013,ptr,\\mybuilds\symbols\x86\2134\symbols\dll\msvcrt.pdb
0000000014,ptr,\\mybuilds\symbols\x86\2134.chk\symbols\dll\msvcrt.pdb
0000000015,ptr,\\mybuilds\symbols\x86\2133\symbols\dll\msvcrt.pdb
0000000016,ptr,\\mybuilds\symbols\x86\2133.chk\symbols\dll\msvcrt.pdb
0000000017,ptr,\\mybuilds\symbols\x86\2132\symbols\dll\msvcrt.pdb
0000000018,ptr,\\mybuilds\symbols\x86\2132.chk\symbols\dll\msvcrt.pdb
0000000019,ptr,\\mybuilds\symbols\x86\2131\symbols\dll\msvcrt.pdb
0000000020,ptr,\\mybuilds\symbols\x86\2131.chk\symbols\dll\msvcrt.pdb
0000000021,ptr,\\mybuilds\symbols\x86\2130\symbols\dll\msvcrt.pdb
0000000022,ptr,\\mybuilds\symbols\x86\2130.chk\symbols\dll\msvcrt.pdb
0000000023,ptr,\\mybuilds\symbols\x86\2129\symbols\dll\msvcrt.pdb
0000000024,ptr,\\mybuilds\symbols\x86\2129.chk\symbols\dll\msvcrt.pdb
0000000025,ptr,\\mybuilds\symbols\x86\2128\symbols\dll\msvcrt.pdb
0000000026,ptr,\\mybuilds\symbols\x86\2128.chk\symbols\dll\msvcrt.pdb
0000000027,ptr,\\mybuilds\symbols\x86\2141\symbols\dll\msvcrt.pdb
0000000028,ptr,\\mybuilds\symbols\x86\2141.chk\symbols\dll\msvcrt.pdb
0000000029,ptr,\\mybuilds\symbols\x86\2142\symbols\dll\msvcrt.pdb
0000000030,ptr,\\mybuilds\symbols\x86\2142.chk\symbols\dll\msvcrt.pdb

これは、\\mybuilds\symsrv に保存されている Windows 2000 用シンボルの複数のビルドに同じ msvcrt.pdb が使用されたことを示しています。

ファイルとポインターの追加の組み合わせが含まれるディレクトリの例を次に示します。

Directory of E:\symsrv\dbghelp.dbg\38039ff439000
10/12/1999  01:54p         141,232     dbghelp.dbg
10/13/1999  04:57p              49     file.ptr
10/13/1999  04:57p             306     refs.ptr

この場合、refs.ptr には次の内容があります。

0000000043,file,e:\binaries\symbols\retail\dll\dbghelp.dbg
0000000044,file,f:\binaries\symbols\retail\dll\dbghelp.dbg
0000000045,file,g:\binaries\symbols\retail\dll\dbghelp.dbg
0000000046,ptr,\\MyDir\bin\symbols\retail\dll\dbghelp.dbg
0000000047,ptr,\\foo2\bin\symbols\retail\dll\dbghelp.dbg

したがって、トランザクション 43、44、および 45 は同じファイルをサーバーに追加し、トランザクション 46 と 47 はポインタを追加しました。 トランザクション 43、44、および 45 が削除された場合、ファイル dbghelp.dbg はディレクトリから削除されます。 その後、ディレクトリには次の内容が含まれます。

Directory of e:\symsrv\dbghelp.dbg\38039ff439000
10/13/1999  05:01p                   49 file.ptr
10/13/1999  05:01p                 130 refs.ptr

これで、file.ptr には「\\foo2\bin\symbols\retail\dll\dbghelp.dbg」が含まれ、refs.ptr には次のものが含まれます

0000000046,ptr,\\MyDir\bin\symbols\retail\dll\dbghelp.dbg
0000000047,ptr,\\foo2\bin\symbols\retail\dll\dbghelp.dbg

refs.ptr の最後のエントリがポインタである場合は常に、ファイル file.ptr が存在し、関連するファイルへのパスが含まれます。 refs.ptr の最後のエントリがファイルである場合、このディレクトリには file.ptr は存在しません。 したがって、refs.ptr の最後のエントリを削除する削除操作を行うと、file.ptr が作成、削除、または変更される可能性があります。