.process(设置进程上下文)

.process 命令指定用于进程上下文的进程。

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

参数

/i
仅限实时调试;非本地内核调试期间)指定 Process 要以侵入性的方式进行调试。 这种调试意味着目标计算机的操作系统实际上使指定的进程处于活动状态。 (如果没有此选项,.process 命令将更改调试器的输出,但不会影响目标计算机本身。)如果使用 /i,则必须使用 g (Go) 命令来执行目标。 几秒钟后,目标将中断回调试器,指定的 Process 处于活动状态,并用于进程上下文。

/p
如果使用 /pProcess 为非零,在访问之前将用于该进程的所有转换页表条目(PTE)转换为物理地址。 这种转换可能会导致速度减慢,因为调试器必须找到此进程使用的所有内存的物理地址。 此外,调试器可能必须通过调试电缆传输大量数据。 (此行为与 .cache forcedecodeuser 相同。)

如果包含 /p 选项且 Process 为零或省略它,则将禁用转换。 (此行为与 .cache noforcedecodeptes 相同。)

/r
如果使用 /r/p 选项,设置流程上下文后重新加载用户模式符号。 (此行为与 .reload /user 相同。)

/P
(仅限实时调试和完整内存转储)如果使用 /PProcess 为非零,则在访问之前将所有转换页表条目(PTE)转换为物理地址。 与 /p 选项不同,/P 选项将转换所有用户模式和内核模式进程的 PTE,而不仅仅是指定的进程。 这种转换可能会导致速度减慢,因为调试器必须找到正在使用的所有内存的物理地址。 此外,调试器可能必须通过调试电缆传输大量数据。 (此行为与 .cache forcedecodeptes 相同。)

处理
指定所需进程的地址。 (更确切地说,此参数指定了此进程的 EPROCESS 块的地址)。 进程上下文设置为此进程。 如果省略 Process 或指定零,则进程上下文将重置为当前系统状态的默认进程。 (如果使用 /i 选项设置进程上下文,则必须使用 /i 选项重置进程上下文。)

环境

说明
模式 仅内核模式
目标 实时、崩溃转储
平台 全部

其他信息

有关进程上下文和其他上下文设置的详细信息,请参阅更改上下文

注解

通常,在进行内核调试时,唯一可见的用户模式地址空间是与当前进程关联的地址空间。

.process 命令指示内核调试器使用特定的用户模式进程作为进程上下文。 此用法有几个影响,但最重要的是调试器有权访问此进程的虚拟地址空间。 调试器使用此进程的页表来解释所有用户模式内存地址,以便可以读取和写入此内存。

.context(设置用户模式地址上下文)命令具有类似的效果。 但是,.context 命令将用户模式地址上下文设置为特定页面目录,而 .process 命令将进程上下文设置为特定进程。 在基于 x86 的处理器上,.context.process 几乎具有相同的效果。 但是,在基于 Itanium 的处理器上,单个进程可能有多个页面目录。 在这种情况下,.process 命令功能更强大,因为它允许访问与进程关联的所有页面目录。 有关进程上下文的详细信息,请参阅进程上下文

注意 如果要执行实时调试,则应使用 /i/p 参数。 如果没有其中一个参数,就无法正确显示用户模式或会话内存。

/i 参数激活目标进程。 使用该选项时,必须执行一次目标,该命令才能生效。 如果再次执行,则进程上下文将丢失。

/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

请注意,此命令使 .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