!bpid

!bpid 扩展请求目标计算机上的进程进入调试器,或请求将用户模式调试器附加到目标计算机上的进程。

    !bpid [Options] PID 

参数

选择
控制此命令的其他活动。

下表显示 Option 的有效值。

-a

将新的用户模式调试器附加到 PID 指定的进程。 用户模式调试器在目标计算机上运行。

-s

PID 指定的用户模式进程中,立即在中断之前添加在 WinLogon 进程中发生的断点。 这允许用户在尝试操作之前验证请求。

-w

将请求存储在目标计算机的内存中。 然后,目标系统可以重复请求,但这通常不是必需的。

PID
指定目标计算机上的所需进程的进程 ID。 如果使用此方法来控制目标计算机上的用户模式调试器,PID 应是目标应用程序的进程 ID,而不是用户模式调试器。 (由于进程 ID 通常以十进制格式列出,因此可能需要以 0n 为前缀,或将其转换为十六进制格式。)

DLL

Kdexts.dll

基于 x86、基于 x64 的目标计算机上支持此扩展命令。

注解

将用户模式调试器的输入和输出重定向到内核调试器时,此命令特别有用。 它会促使用户模式目标应用程序进入用户模式调试器,而用户模式调试器又会请求内核调试器的输入。 有关详细信息,请参阅从内核调试器控制用户模式调试器

如果在另一种情况下使用此命令,则用户模式进程将调用 DbgBreakPoint。 这通常直接进入内核调试器。

-s 选项在发生指定进程的中断之前,在 WinLogon 中导致中断。 如果要在 WinLogon 的进程上下文中执行调试操作,这非常有用。 然后,可以使用 g(执行)命令转到第二个中断。

请注意,存在可能无法执行此扩展的情况:

  • 缺少资源。 !bpid 扩展将线程注入目标进程,因此系统必须有足够的资源来创建线程。 使用 -a 选项需要更多的系统资源,因为 !bpid -a 必须在目标计算机上运行调试器的完整实例。

  • 加载程序锁定已保留。 !bpid!bpid -a 都需要线程在目标进程中运行,以便使其进入调试器。 如果另一个线程持有加载程序锁定,则 !bpid 线程将无法运行,并且可能无法进入调试器。 因此,如果 !bpid 在目标进程有足够的用户模式内存可用时失败,则可能会保留加载程序锁定。

  • 权限不足。 !bpid 扩展的操作需要足以让 WinLogon 创建远程线程并将调试器附加到给定进程的权限。

  • 无法访问 ntsd.exe。 如果在常见已知路径中找不到 ntsd.exe,!bpid 将无法设置适当的 PID。 请注意,Windows Vista 默认不包含 ntsd.exe。