.context (ユーザーモード アドレス コンテキストの設定)
.context コマンドは、ユーザー モード のアドレス コンテキストに使用するプロセスのページ ディレクトリを指定するか、現在のユーザー モード アドレス コンテキストを表示します。
.context [PageDirectoryBase]
パラメーター
PageDirectoryBase
目的のプロセスのページ ディレクトリのベース アドレスを指定します。 ユーザー モードのアドレス コンテキストは、このページ ディレクトリに設定されます。 PageDirectoryBase が 0 の場合、ユーザー モードのアドレス コンテキストは現在のシステム状態のページ ディレクトリに設定されます。 PageDirectoryBaseを省略すると、現在のユーザー モード アドレス コンテキストが表示されます。
Environment
項目 | 説明 |
---|---|
モード | カーネル モードのみ |
対象 | ライブ、クラッシュ ダンプ |
プラットフォーム | すべて |
追加情報
ユーザー モード アドレス コンテキストとその他のコンテキスト設定の詳細については、コンテキストの変更を参照してください。
解説
一般に、カーネル デバッグを実行する場合、表示されるユーザー モードのアドレス空間は、現在のプロセスに関連付けられている唯一のアドレス空間です。
.context コマンドは、指定されたページ ディレクトリをユーザー モード アドレス コンテキストとして使用するようにカーネル デバッガーに指示します。 このコマンドを実行すると、デバッガーはこの仮想アドレス空間にアクセスできるようになります。 このアドレス空間のページ テーブルは、すべてのユーザー モード メモリ アドレスを解釈するために使用されます。 これにより、このメモリの読み取りと書き込みが可能になります。
.process (プロセス コンテキストの設定) コマンドにも同様の効果があります。 しかし、.contextコマンドはユーザーモードアドレスコンテキストを特定のページディレクトリに設定し、.processコマンドはプロセスコンテキストを特定のプロセスに設定する。 x86 プロセッサでは、これら 2 つのコマンドは実質的に同じ効果を持ちます。 詳細については、 プロセス コンテキスト を参照してください。
ライブ デバッグを実行している場合は、.context コマンドに加えて .cache forcedecodeuser コマンドを発行する必要があります。 これにより、デバッガーは必要なメモリ領域の物理アドレスを検索します。 (多くの場合、デバッグ ケーブルを介して大量のデータを転送する必要があるため、低速になる可能性があります)。
クラッシュ ダンプのデバッグを実行している場合は、 .cache コマンドは必要ありません。 ただし、クラッシュが発生したときにディスクにページングされたユーザー モード プロセスの仮想アドレス空間の一部にはアクセスできません。
次に例を示します。 !process 拡張機能を使用して、目的のプロセスのディレクトリ ベースを見つけます。
kd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
PROCESS fe5039e0 SessionId: 0 Cid: 0008 Peb: 00000000 ParentCid: 0000
DirBase: 00030000 ObjectTable: fe529b68 TableSize: 50.
Image: System
...
PROCESS fe3c0d60 SessionId: 0 Cid: 0208 Peb: 7ffdf000 ParentCid: 00d4
DirBase: 0011f000 ObjectTable: fe3d0f48 TableSize: 30.
Image: regsvc.exe
次に、 このページ ディレクトリ ベースで.context コマンドを使用します。
kd> .context 0011f000
これにより、さまざまな方法でアドレス空間を調べることができます。 たとえば、!peb拡張機能の出力を次に示します。
kd> !peb
PEB at 7FFDF000
InheritedAddressSpace: No
ReadImageFileExecOptions: No
BeingDebugged: No
ImageBaseAddress: 01000000
Ldr.Initialized: Yes
Ldr.InInitializationOrderModuleList: 71f40 . 77f68
Ldr.InLoadOrderModuleList: 71ec0 . 77f58
Ldr.InMemoryOrderModuleList: 71ec8 . 77f60
01000000 C:\WINNT\system32\regsvc.exe
77F80000 C:\WINNT\System32\ntdll.dll
77DB0000 C:\WINNT\system32\ADVAPI32.dll
77E80000 C:\WINNT\system32\KERNEL32.DLL
77D40000 C:\WINNT\system32\RPCRT4.DLL
77BE0000 C:\WINNT\system32\secur32.dll
SubSystemData: 0
ProcessHeap: 70000
ProcessParameters: 20000
WindowTitle: "'C:\WINNT\system32\regsvc.exe'"
ImageFile: 'C:\WINNT\system32\regsvc.exe'
CommandLine: 'C:\WINNT\system32\regsvc.exe'
DllPath: 'C:\WINNT\system32;.;C:\WINNT\System32;C:\WINNT\system;C:\WINNT;C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbem;C:\PROGRA~1\COMMON~1\AUTODE~1'
Environment: 0x10000