激活进程服务器

Windows 调试工具中包含的进程服务器称为 DbgSrv (dbgsrv.exe)。 若要激活进程服务器,请打开提升的命令提示符窗口(以管理员身份运行),并输入 dbgsrv 命令。

注意 无需提升权限即可激活进程服务器,调试客户端将能够连接到服务器。 但是,除非使用提升的权限激活进程服务器,否则客户端将无法发现进程服务器。 有关如何发现调试服务器的信息,请参阅 搜索进程服务器

重要

使用远程调试时,有一些重要的安全注意事项。 有关详细信息,包括有关启用安全模式的信息,请参阅远程调试 期间 安全性,以及 Windows 调试工具安全注意事项。

DbgSrv 支持多种传输协议:命名管道(NPIPE)、TCP、COM 端口、安全管道(SPIPE)和安全套接字层(SSL)。

建议的连接方法,并提供了一些额外的安全性

dbgsrv -t spipe:proto=Protocol,{certuser=Cert|machuser=Cert},pipe=PipeName[,hidden][,password=Password] [[-sifeo Executable] -c[s] AppCmdLine] [-x | -pc] 

dbgsrv -t ssl:proto=Protocol,{certuser=Cert|machuser=Cert},port=Socket[,hidden][,password=Password] [[-sifeo Executable] -c[s] AppCmdLine] [-x | -pc] 

dbgsrv -t ssl:proto=Protocol,{certuser=Cert|machuser=Cert},port=Socket,clicon=Client[,password=Password] [[-sifeo Executable] -c[s] AppCmdLine] [-x | -pc] 

不安全的连接方法

dbgsrv -t tcp:port=Socket[,hidden][,password=Password][,ipversion=6][,IcfEnable] [[-sifeo Executable] -c[s] AppCmdLine] [-x | -pc] 

dbgsrv -t tcp:port=Socket,clicon=Client[,password=Password][,ipversion=6] [[-sifeo Executable] -c[s] AppCmdLine] [-x | -pc] 

dbgsrv -t npipe:pipe=PipeName[,hidden][,password=Password][,IcfEnable] [[-sifeo Executable] -c[s] AppCmdLine] [-x | -pc] 

dbgsrv -t com:port=COMPort,baud=BaudRate,channel=COMChannel[,hidden][,password=Password] [[-sifeo Executable] -c[s] AppCmdLine] [-x | -pc] 

参数

上述命令中的参数具有以下可能的值:

pipe=PipeName
使用 NPIPE 或 SPIPE 协议时,PipeName 是将用作管道名称的字符串。 每个管道名称应标识唯一的进程服务器。 如果尝试重复使用管道名称,将收到错误消息。 PipeName 不得包含空格或引号。 PipeName 可以包含数字 printf样式格式代码,例如 %x%d。 进程服务器将替换为 DbgSrv 的进程 ID。 第二个此类代码将替换为 DbgSrv 的线程 ID。

注意 可能需要在运行进程服务器的计算机上启用文件和打印机共享。 在控制面板中,导航到 网络和 Internet > 网络和共享中心> 高级共享设置。 选择 打开文件和打印机共享

端口=套接字
使用 TCP 或 SSL 协议时,套接字 是套接字端口号。

还可以指定用冒号分隔的端口范围。 DbgSrv 将检查此范围中的每个端口,以查看它是否是免费的。 如果找到可用端口且未发生错误,将创建进程服务器。 智能客户端必须指定用于连接到服务器的实际端口。 若要确定实际端口,请使用 搜索进程服务器中所述的任何方法;显示此进程服务器时,端口后跟两个用冒号分隔的数字。 第一个数字将是使用的实际端口;可以忽略第二个。 例如,如果将端口指定为 port=51:60,并且实际使用了端口 53,则搜索结果将显示“port=53:60”。 (如果使用 clicon 参数建立反向连接,智能客户端可以采用这种方式指定端口范围,而进程服务器必须指定使用的实际端口。

clicon=客户端
使用 TCP 或 SSL 协议并指定 clicon 参数时,将打开 反向连接。 这意味着进程服务器将尝试连接到智能客户端,而不是让客户端启动联系人。 如果你的防火墙阻止了往常的连接,这非常有用。 客户端 指定智能客户端所在的计算机的网络名称或 IP 地址。 两个初始反斜杠 (\) 是可选的。

由于进程服务器正在寻找一个特定的客户端,因此如果使用此方法,则无法将多个客户端连接到服务器。 如果连接被拒绝或断开,则必须重启进程服务器。 当某人使用 -QR 命令行选项显示所有活动服务器时,将不会显示反向连接进程服务器。

注意 使用 clicon 时,最好在创建进程服务器之前启动智能客户端,尽管允许通常的顺序(客户端之前服务器)。

port=COMPort
使用 COM 协议时,COMPort 指定要使用的 COM 端口。 前缀“COM”是可选的 -- 例如,“com2”和“2”都是可接受的。

baud=BaudRate
使用 COM 协议时,BaudRate 指定连接将运行时的波特率。 允许硬件支持的任何波特率。

channel=COMChannel
如果使用 COM 协议,COMChannel 指定要用于与调试客户端通信的 COM 通道。 此值可以是介于 0 和 254 之间的任意值(包括 0 和 254)。 可以使用不同的通道编号将单个 COM 端口用于多个连接。 (这不同于对调试电缆使用 COM 端口 -- 在这种情况下,不能在 COM 端口中使用通道。

proto=协议
如果使用 SSL 或 SPIPE 协议,协议 指定安全通道(S 通道)协议。 这可以是任一字符串 tls1、pct1、ssl2 或 ssl3。

证书
如果使用 SSL 或 SPIPE 协议,证书 指定证书。 这可以是证书名称或证书的指纹(证书管理单元提供的十六进制数字字符串)。 如果使用语法 certuser=证书,调试器将在系统存储(默认存储)中查找证书。 如果使用语法 machuser=证书,调试器将在计算机存储中查找证书。 指定的证书必须支持服务器身份验证。

隐藏
当有人使用 -QR 命令行选项显示所有活动服务器时,阻止进程服务器出现。

password=密码
要求智能客户端提供指定的密码才能连接到进程服务器。 密码 可以是任意字母数字字符串,长度最多为 12 个字符。

重要

将密码与 TCP、NPIPE 或 COM 协议配合使用仅提供少量的保护,因为密码未加密。 将密码与 SSL 或 SPIPE 协议一起使用时,密码将加密。 如果要建立更安全的远程会话,必须使用 SSL 或 SPIPE 协议。

ipversion=6
(仅适用于 Windows 6.6.07 和更早版本的调试工具)使用 TCP 连接到 Internet 时,强制调试器使用 IP 版本 6 而不是版本 4。 在 Windows Vista 和更高版本中,调试器会尝试自动默认为 IP 版本 6,因此不需要此选项。

IcfEnable
使调试器在 Internet 连接防火墙处于活动状态时为 TCP 或命名管道通信启用必要的端口连接。 默认情况下,Internet 连接防火墙会禁用这些协议使用的端口。 IcfEnable 与 TCP 连接一起使用时,调试器会导致 Windows 打开由 Socket 参数指定的端口。 当 IcfEnable 与命名管道连接一起使用时,调试器会导致 Windows 打开用于命名管道的端口(端口 139 和 445)。 连接终止后,调试器不会关闭这些端口。

-sifeo可执行文件
挂起给定映像的图像文件执行选项 (IFEO) 值。 可执行文件 应包括可执行文件映像的文件名,包括文件扩展名。 -sifeo 选项允许将 DbgSrv 设置为由 -c 选项创建的映像的 IFEO 调试器,而不会由于 IFEO 设置而导致递归调用。 仅当使用 -c 时,才能使用此选项。

-c
导致 DbgSrv 创建新进程。 可以使用此方法创建要调试的进程。 这类似于从调试器生成新进程,只是创建此过程时不会对其进行调试。 若要调试此过程,请确定其 PID,并在启动智能客户端调试此过程时使用 -p 选项。

s
导致新创建的进程立即挂起。 如果使用的是此选项,建议将 CDB 用作智能客户端,并使用 -pb 命令行选项启动智能客户端,并结合 -p PID。 如果在命令行中包含 -pb 选项,则调试器附加到该选项时将恢复该过程;否则,可以使用 ~*m 命令恢复该过程。

AppCmdLine
指定要创建的进程的完整命令行。 AppCmdLine 可以是 Unicode 或 ASCII 字符串,并且可以包含任何可打印字符。 -c[s] 参数后显示的所有文本都将形成字符串 AppCmdLine

-x
导致忽略命令行的其余部分。 如果要从可能将不需要的文本追加到其命令行的应用程序启动 DbgSrv,此选项非常有用。

-pc
导致忽略命令行的其余部分。 如果要从可能将不需要的文本追加到其命令行的应用程序启动 DbgSrv,此选项非常有用。 如果 -pc 是 DbgSrv 命令行上的最终元素,则语法错误将产生。 除了此限制之外,-pc-x相同。

可以在一台计算机上启动任意数量的进程服务器。 但是,这通常是不必要的,因为一个进程服务器可供任意数量的智能客户端使用(每个客户端都参与不同的调试会话)。