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

について .プロセス コマンドは、プロセス・コンテキストにどのプロセスを使うかを指定する。

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

パラメーター

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

/p
を使用する場合、このプロセスのすべての遷移ページ・テーブル・エントリ(PTE)を、アクセス前に物理アドレスに変換します。 /p そして プロセス はゼロではない。 なぜなら、デバッガはこのプロセスが使用するすべてのメモリの物理アドレスを見つけなければならないからである。 また、デバッガーは、デバッグ・ケーブルを通してかなりの量のデータを転送しなければならないかもしれない。 (この動作は .cache forcedecodeuser.)

もし /p オプションと Process がゼロの場合、または省略した場合は、翻訳が無効になります。 (この動作は .cache noforcedecodeptes.)

/r
を使用した場合、プロセス・コンテキストが設定された後にユーザー・モード・シンボルをリロードする。 /r そして /p オプション. (この動作は .reload /user.)

/P
(ライブ・デバッグと完全なメモリ・ダンプのみ)以下の場合、アクセス前にすべての遷移ページ・テーブル・エントリ(PTE)を物理アドレスに変換します。 /P and プロセス はゼロではない。 とは異なる /p オプションは /P オプションは、指定されたプロセスだけでなく、すべてのユーザーモードプロセスとカーネルモードプロセスのPTEを変換する。 デバッガは、使用中の全メモリの物理アドレスを見つけなければならないため、この変換は速度低下を引き起こすかもしれない。 また、デバッガーはデバッグ・ケーブルで大量のデータを転送しなければならないかもしれない。 (この動作は .cache forcedecodeptes.)

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

環境

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

追加情報

プロセス・コンテキストとその他のコンテキスト設定の詳細については、以下を参照のこと。 コンテクストの変化.

解説

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

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

について .コンテキスト(ユーザーモードアドレスコンテキストの設定) コマンドも同様の効果がある。 しかし .context コマンドは ユーザーモードアドレスコンテキスト を特定のページディレクトリにコピーします。 .process コマンドは、プロセス・コンテキストを特定のプロセスに設定する。 x86ベースのプロセッサーの場合、 .コンテキスト そして .プロセス ほとんど同じ効果がある。 しかし、Itaniumベースのプロセッサーでは、1つのプロセスが複数のページ・ディレクトリを持つことがある。 このような状況では .process コマンドの方が強力で、プロセスに関連するすべてのページ・ディレクトリにアクセスできるからだ。 プロセス・コンテキストの詳細については プロセス・コンテクスト.

Note ライブ・デバッグを行う場合は /i または /p パラメータ. これらのパラメータのいずれかがないと、ユーザーモードやセッションメモリを正しく表示することができません。

について /i パラメーターは、ターゲット・プロセスをアクティブにする。 このオプションを使用する場合、このコマンドを有効にするには、ターゲットを一度実行する必要があります。 再度実行すると、プロセス・コンテキストは失われる。

について /p パラメーターは 強制デコードユーザー セッティング. (を使用する必要はない /p もし 強制デコードユーザー オプションはすでに有効になっている)。プロセス・コンテキストと 強制デコードユーザー の状態は、ターゲットが再び実行されるまで残る。

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

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

次の例では !プロセス 拡張を使用して、目的のプロセスの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

このコマンドは .context コマンドは不要だ。 ユーザーモードアドレスコンテキストは、すでに希望する値を持っている。

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