.process (プロセス コンテキストの設定)

モード

カーネルモードのみ

ターゲット

ライブ、クラッシュダンプ

プラットフォーム

All

追加情報

プロセスコンテキストとその他のコンテキスト設定の詳細については、「 コンテキストの変更」を参照してください。

解説

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

. Processコマンドは、プロセスコンテキストとして特定のユーザーモードプロセスを使用するようにカーネルデバッガーに指示します。 この使用方法にはいくつかの影響がありますが、最も重要なのは、デバッガーがこのプロセスの仮想アドレス空間にアクセスできることです。 デバッガーは、このプロセスのページテーブルを使用してすべてのユーザーモードメモリアドレスを解釈するため、このメモリの読み取りと書き込みができます。

Context (Set User-Mode Address context)コマンドにも同様の効果があります。 ただし、 . context コマンドを実行すると、 ユーザーモードアドレスコンテキスト が特定のページディレクトリに設定され ます。また、. process コマンドを実行すると、プロセスコンテキストが特定のプロセスに設定されます。 X86 ベースのプロセッサでは、 コンテキスト. プロセス はほぼ同じ効果を持ちます。 ただし、Itanium ベースのプロセッサでは、1つのプロセスに複数のページディレクトリが存在する場合があります。 このような状況では、プロセスに関連付けられているすべてのページディレクトリにアクセスできるので、 . process コマンドはより強力です。 プロセスコンテキストの詳細については、「 プロセスコンテキスト」を参照してください。

メモ ライブデバッグを実行する場合は、 /i または /p パラメーターを使用する必要があります。 これらのパラメーターのいずれも指定しないと、ユーザーモードまたはセッションメモリを正しく表示できません。

/Iパラメーターを指定すると、ターゲットプロセスがアクティブになります。 このオプションを使用する場合は、このコマンドを有効にするためにターゲットを1回実行する必要があります。 もう一度実行すると、プロセスコンテキストは失われます。

/Pパラメーターを指定すると、 forcedecodeuser設定が有効になります。 ( Forcedecodeuserオプションが既にアクティブになっている場合は、 /pを使用する必要はありません)。 プロセスコンテキストと forcedecodeuser 状態は、ターゲットが再度実行されるまで維持されます。

クラッシュダンプのデバッグを実行している場合、 /i オプションと /p オプションは使用できません。 ただし、クラッシュが発生したときに、ディスクにページングされたユーザーモードプロセスの仮想アドレス空間のどの部分にもアクセスできません。

カーネルデバッガーを使用してユーザー空間にブレークポイントを設定する場合は、 /i オプションを使用してターゲットを正しいプロセスコンテキストに切り替えます。

次の例では、 ! process 拡張機能を使用して、目的のプロセスの eprocess ブロックのアドレスを検索する方法を示します。

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

この例では、このプロセスアドレスで . process コマンドを使用します。

kd> .process fe3c0d60
Implicit process is now fe3c0d60

このコマンドでは、 コンテキスト コマンドが不要になることに注意してください。 ユーザーモードアドレスコンテキストには、既に必要な値が含まれています。

kd> .context 
User-mode page directory base is 11f000

この値により、さまざまな方法でアドレス空間を調べることができます。 たとえば、次の例は、 ! 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

Process コマンドでは、プロセスコンテキストに使用するプロセスを指定し ます

.process [/i] [/p [/r]] [/P] [Process]

パラメーター


ライブデバッグのみ。ローカルカーネルデバッグ中ではない) は、 プロセスinvasivelyをデバッグすることを指定します。 この種のデバッグでは、対象のコンピューターのオペレーティングシステムによって、指定されたプロセスが実際にアクティブになります。 (このオプションを指定しない場合、 . process コマンドを実行すると、デバッガーの出力が変更されますが、対象のコンピューター自体には影響しません)。 /Iを使用する場合は、 g (移動)コマンドを使用してターゲットを実行する必要があります。 数秒後、ターゲットがデバッガーに戻り、指定された プロセス がアクティブになり、プロセスコンテキストに使用されます。


/Pを使用し、 processが0以外の場合、このプロセスのすべての遷移ページテーブルエントリ (pte) を、アクセス前の物理アドレスに変換します。 このような変換は、このプロセスが使用するすべてのメモリの物理アドレスをデバッガーが検出する必要があるため、パフォーマンスが低下する可能性があります。 また、デバッガーがデバッグケーブルを介して大量のデータを転送する必要がある場合もあります。 (この動作は、 . cache forcedecodeuserと同じです)。

/Pオプションを指定し、 Processがゼロの場合、またはこのオプションを省略した場合、変換は無効になります。 (この動作は、 . cache noforcedecodeptesと同じです)。


/Rオプションと/pオプションを使用する場合は、プロセスコンテキストが設定された後にユーザーモードシンボルを再読み込みします。 (この動作はと同じ です。再読み込み/user)。


(ライブデバッグと完全なメモリダンプのみ) /P を使用し、 Process が0以外の場合、アクセス前にすべての遷移ページテーブルエントリ (pte) を物理アドレスに変換します。 /Pオプションとは異なり、 /pオプションは、指定されたプロセスだけでなく、すべてのユーザーモードおよびカーネルモードプロセスの pte を変換します。 この変換により、使用中のすべてのメモリの物理アドレスがデバッガーによって検出されるため、パフォーマンスが低下する可能性があります。 また、デバッガーがデバッグケーブルで大量のデータを転送する必要がある場合もあります。 (この動作は、 . cache forcedecodeptesと同じです)。


必要なプロセスのアドレスを指定します。 (正確には、このパラメーターは、このプロセスの EPROCESS ブロックのアドレスを指定します)。 プロセスコンテキストは、このプロセスに設定されます。 Processを省略した場合、または0を指定した場合、プロセスコンテキストは現在のシステム状態の既定のプロセスにリセットされます。 ( /I オプションを使用してプロセスコンテキストを設定した場合は、 /i オプションを使用してプロセスコンテキストをリセットする必要があります)。

Environment