.context (ユーザーモード アドレス コンテキストの設定)

.context コマンドは、ユーザー モード のアドレス コンテキストに使用するプロセスのページ ディレクトリを指定するか、現在のユーザー モード アドレス コンテキストを表示します。

.context [PageDirectoryBase]

パラメーター

ページディレクトリベース
目的のプロセスのページ ディレクトリのベース アドレスを指定します。 ユーザー モードのアドレス コンテキストは、このページ ディレクトリに設定されます。 PageDirectoryBase が 0 の場合、ユーザー モードのアドレス コンテキストは現在のシステム状態のページ ディレクトリに設定されます。 PageDirectoryBaseを省略すると、現在のユーザー モード アドレス コンテキストが表示されます。

環境

項目 説明
モード カーネルモードのみ
目標値 ライブ、クラッシュ ダンプ
プラットフォーム すべて

追加情報

ユーザー モード アドレス コンテキストとその他のコンテキスト設定の詳細については、コンテキストの変更を参照してください。

解説

一般に、カーネル デバッグを実行する場合、表示されるユーザー モードのアドレス空間は、現在のプロセスに関連付けられている唯一のアドレス空間です。

.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