Windows 远程桌面多人同时登录:rdpwrap.ini 配置完整指南
【免费下载链接】rdpwrap.iniRDPWrap.ini for RDP Wrapper Library by Stas'M项目地址: https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini
Windows 远程桌面提示"已达到计算机的连接数最大值"时,问题不在系统设置,而在工作站版只允许一个交互式远程会话。RDP Wrapper Library 配合本仓库的 rdpwrap.ini 配置文件可以解除这一限制,让 Windows 远程桌面多用户同时登录成为可能。全程约 10 分钟:替换一份配置文件、重启一个服务即可,无需改注册表或系统文件。
先跑通:五步让远程桌面支持多人登录
先说清楚仓库定位:本仓库只提供配置文件,不含任何可执行程序,可执行部分(RDPWInst.exe、RDPCheck.exe、RDPConf.exe 等)需从 RDP Wrapper Library 的官方发布渠道单独获取。五步流程如下:
克隆本仓库,拿到最新配置
git clone https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini安装 RDP Wrapper Library 本体。以管理员身份运行安装程序,否则服务注册会失败。
用仓库里的 rdpwrap.ini 覆盖安装目录中的同名文件(默认
C:\Program Files\RDP Wrapper\):copy /Y rdpwrap.ini "C:\Program Files\RDP Wrapper\rdpwrap.ini"重启远程桌面服务,管理员命令提示符中执行:
net stop termservice net start termservice验证状态。运行
RDPConf.exe查看各补丁项是否显示为已生效(绿色);再运行RDPCheck.exe做一次本地回连,确认补丁真正落在当前系统的termsrv.dll上。
走到这一步,多名用户应能同时发起远程会话。若某一项打红叉,跳到文末的排查清单。
它凭什么能绕过单会话限制
结论先行:限制不是服务的能力上限,而是termsrv.dll里的一段许可检查逻辑;RDP Wrapper 在内存中改写这段逻辑,磁盘上的文件一个字节都不动。
展开说:Windows 的远程桌面服务(Terminal Services,服务名termservice)本身具备多会话能力,服务器版默认就开放。工作站版之所以只放行一个交互式远程会话,是许可策略在termsrv.dll内部做的判断——第二个会话发起时,这段代码返回"超限",于是出现那句"连接数最大值"提示。
RDP Wrapper 的做法是动态注入:服务加载termsrv.dll时,注入层把其中几处关键指令在内存中替换成指定的机器码,让许可检查返回"允许多会话"。因为不落盘,重启后注入重新执行,Windows 更新检测也看不到文件被改。而"哪几处、换成什么"完全由 rdpwrap.ini 描述——它是注入层唯一的指令来源。
rdpwrap.ini 的三个核心字段
这一节帮你读懂主文件里的内容,出了问题能自己对号入座。以 Windows 11 的某个版本区块为例(取自主文件第 8870 行附近):
[10.0.22621.5235] LocalOnlyPatch.x64=1 LocalOnlyOffset.x64=A6BF1 LocalOnlyCode.x64=jmpshort SingleUserPatch.x64=1 SingleUserOffset.x64=C883区块名就是 Windows 完整构建版本号,块内字段成组出现,每组三件套:
xxxPatch=1:补丁开关,1表示对该检查点启用修补;xxxOffset=十六进制数:目标地址在termsrv.dll内的文件偏移,例如C883就是单用户检查的落点;xxxCode=名称:替换用的机器码,值是[PatchCodes]区里预先定义的名字。
后文还有DefPolicyPatch/Offset/Code(默认策略查询)和SLInitHook/Offset/Func(策略初始化钩子)两组,结构相同,只是拦截的检查点不同。
[PatchCodes]区就是机器码字典,例如:
[PatchCodes] nop=90 jmpshort=EB CDefPolicy_Query_eax_rcx=B80001000089813806000090nop=90、jmpshort=EB这类短片段用于跳过或抹平单条检查指令;以CDefPolicy_Query_开头的一批则是重点——它们把"默认策略查询"的返回值整体改写为"允许多会话",是多用户能力真正生效的一环。mov_eax_1_nop_2=B8010000009090的含义是把结果寄存器强制置 1(检查通过)再补两个空操作保持长度。这套"字典 + 偏移"机制,正是同一份 ini 能覆盖上千个系统构建的原因。
按版本号快速取用:autogenerated 目录
如果你只需要某个具体版本的配置,不必在 2 万多行的主文件里搜索。autogenerated/ 下有 399 份按版本号拆分的独立配置文件,命名规则为"版本号 + 架构",例如10.0.26100.7523-autogenerated_x64.ini,按winver或注册表查出的精确版本找同名文件即可。
每份文件都是自包含的:含[Main]、[SLPolicy]、[PatchCodes]、对应版本区块,以及一个[SLInit]区——后者定义会话数量策略等全局参数(如MaxSessions=0表示不限会话数)。
一点维护建议:需要手动调整时,整体替换主文件比单挑某个区块稳妥。原因在下节的修复流程里会再强调一次:新版本的偏移往往依赖字典里新增的补丁码,零散维护很容易漏。
Windows 更新后失效:标准修复流程
Windows 更新会替换termsrv.dll,旧 ini 里的偏移地址对新文件全部落空,多用户能力随之失效。修复只需三步:
第一步:查出精确版本号。winver只显示大版本,还差修订号。管理员命令提示符执行:
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v CurrentBuildNumber reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v UBR两者拼成10.0.CurrentBuildNumber.UBR,例如26100+7523得10.0.26100.7523。
第二步:拉取最新配置。对本地仓库执行git pull,或直接重新克隆,让 rdpwrap.ini 和 autogenerated/ 都更新到维护者最新提交的版本。
第三步:整体替换并重启服务:
copy /Y rdpwrap.ini "C:\Program Files\RDP Wrapper\rdpwrap.ini" net stop termservice net start termservice不要只往旧文件里追加新的版本区块。新构建的
termsrv.dll通常需要[PatchCodes]字典中新增的补丁码,旧字典里没有对应条目,区块写了也打不上补丁。整体替换文件是唯一稳妥的做法。
细调会话策略:[SLPolicy] 参数表
多用户打通后,[SLPolicy]区就是会话策略的调节面板。参数均为TerminalServices-前缀的长键名,默认值已按"放开"配置,改完重启termservice生效:
| 参数(文件中的完整键名) | 含义 | 常用值 |
|---|---|---|
TerminalServices-RemoteConnectionManager-MaxUserSessions | 最大并发会话数 | 0不限制 |
TerminalServices-RemoteConnectionManager-AllowMultipleSessions | 允许多个会话 | 1启用 |
TerminalServices-RemoteConnectionManager-AllowRemoteConnections | 允许远程连接 | 1启用 |
TerminalServices-RemoteConnectionManager-AllowAppServerMode | 应用服务器模式 | 1启用 |
TerminalServices-RemoteConnectionManager-AllowMultimon | 多显示器 | 1启用 |
TerminalServices-RDP-7-Advanced-Compression-Allowed | 会话高级压缩,省带宽 | 1启用 |
TerminalServices-DeviceRedirection-Licenses-TSEasyPrintAllowed | 远程打印到本地打印机 | 1启用 |
TerminalServices-DeviceRedirection-Licenses-PnpRedirectionAllowed | U 盘等设备重定向 | 1启用 |
TerminalServices-RemoteConnectionManager-UiEffects-DWMRemotingAllowed | 桌面窗口管理器远程渲染 | 1启用 |
例如只想放 5 个人同时在线,把MaxUserSessions从0改成5,重启服务即可;改错了顶多回落到默认行为,不会影响系统本身。
排查清单:改完没生效先查这六项
补丁没打上、状态打红叉时,按顺序过一遍:
- 版本号是否逐位精确匹配——相邻 UBR 的偏移可能完全不同,
7523的配置对7535无效,别拿接近的版本硬套。 - x86 / x64 架构是否对应——配置项分
.x86与.x64两套,装错架构轻则无效,重则服务起不来。 - 是否整体替换了配置文件——只追加版本区块而
[PatchCodes]字典没更新,是最常见的"假修复"。 - 杀毒软件是否介入——注入式工具容易触发启发式误报,被拦截时先临时停用实时防护再验证,属已知现象。
- 动手前是否留了备份——旧配置备份一份,任何一步出问题都能原样回退。
- 是否用 RDPCheck.exe 做过本地回连验证——它直接读取当前
termsrv.dll判断补丁状态,比看日志更直观。
更新一下 Readme.md 里记录的已知注意事项,也能帮你排除个别构建的例外情况。
结尾
rdpwrap.ini 做的事只有一件:为每个 Windows 构建提供精确到偏移地址的修补指令,配合 RDP Wrapper 即可让工作站版远程桌面支持多人同时登录。建议收藏本页,下次补丁日之后失效时,直接按"更新后失效"一节走三步即可。
【免费下载链接】rdpwrap.iniRDPWrap.ini for RDP Wrapper Library by Stas'M项目地址: https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考