Windows Server 远程桌面开多用户:RDPWrap 配置全流程与踩坑记录

Windows Server 远程桌面开多用户:RDPWrap 配置全流程与踩坑记录

【免费下载链接】rdpwrap.iniRDPWrap.ini for RDP Wrapper Library by Stas'M项目地址: https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini

凌晨两点,第三台 Windows Server 的远程桌面又连不进去了:前两个管理员的会话还挂着,新窗口弹回"连接数已达上限"。RDPWrap 本来能解除这种单会话限制、让多用户并发接入,但这台机器上组策略把 MaxUserSessions 刷新回了 1,补丁的强制值根本没接管。后来排查下来,问题出在配置文件没跟上系统的 build 号——这套工具能否生效,全靠本仓库里这一份份按版本对齐的 rdpwrap.ini 文件。

🧩 为什么是 RDPWrap 而不是原生终端服务策略

先说原生终端服务方案卡在哪。想在 Windows Server 上"正规"地开多用户远程桌面,得把 Terminal Services 那一整套配齐:RDSH 角色、CAL 许可服务器、对应数量的客户端访问许可。许可少一张,termsrv 就会把会话踢掉——策略写对了,门还是关的。我们只是想让两三个运维同时在线,不想为这个买单,原生路线在许可这一层就走不下去了;而组策略里那几项开关,改完还会被定时刷新的策略打回原形。

RDPWrap 补的是另一层拼图:termsrv.dll 内部那个写死的判断。它通过 hook SLInit 相关调用,把 bServerSku、lMaxUserSessions 这些内存里的值强制成"服务器 SKU、会话数不限"的状态,整个过程不落盘、不改注册表,重启后服务再应用一遍。所以原生策略被刷回什么,对最终结果影响很小。

与此同时它接管了策略读取这一层,[SLPolicy] 段就是工具回读策略时使用的替身值。部署后核对这几行是否就位:

TerminalServices-RemoteConnectionManager-AllowMultipleSessions=1 TerminalServices-RemoteConnectionManager-MaxUserSessions=0 TerminalServices-RemoteConnectionManager-AllowAppServerMode=1

这也是为什么注册表里看着是 1、实际却能进多个会话——真正被读走的不是那个值。

📂 RDPWrap 配置文件怎么选:按系统版本来

三个主流 Server 版本各有一条线,核对要点不一样。选文件的唯一依据是 systeminfo 里的 build 号,第四位也要逐位对。

Windows Server 2016(10.0.14393):配置在主文件里

先说个容易忽略的事实:autogenerated/ 目录里没有 14393 开头的文件。2016 这条线直接用顶层的 rdpwrap.ini,先找到 build 号对应的 [10.0.14393.xxx] 段。以 .5582 为例,需要核对的是:

[10.0.14393.5582] SingleUserOffset.x64=25FA4 SingleUserCode.x64=Zero DefPolicyCode.x64=CDefPolicy_Query_eax_rcx

这个版本同一段里 x86 和 x64 的偏移是两套(x86 的 SingleUserOffset 是 3A1E5),拿配置时先把架构后缀确认对——拿错架构比拿错版本更隐蔽,因为段标题看起来是对的。

Windows Server 2019(10.0.17763)

2019 是在用机器里最多的版本,配置取 autogenerated/ 下对应文件,例如 10.0.17763.5830-autogenerated_x64.ini。核心核对三行:

[10.0.17763.5830] SingleUserOffset.x64=16F41 DefPolicyOffset.x64=20435 DefPolicyCode.x64=CDefPolicy_Query_eax_rcx

原因很直接:偏移量随每次累积更新漂移,.5830 的文件不能硬套在 .7919 的系统上,build 第四位差一位,就该换另一份文件。

Windows Server 2022(10.0.20348)RDPWrap 补丁段核对

2022 线例如取 10.0.20348.1311-autogenerated_x64.ini:

[10.0.20348.1311] SingleUserOffset.x64=08982 DefPolicyOffset.x64=1BA65 DefPolicyCode.x64=CDefPolicy_Query_eax_rcx

这个版本比 2019 多一层要求:文件尾部还挂着一张 [10.0.20348.1311-SLInit] 偏移表(bInitialized.x64 等),因为 2022 改了 SLInit 结构体的地址布局。只核对主段、漏掉这张表,补丁会静默不生效,而且安装状态照样显示正常。

完整文件列表见 autogenerated/,主配置文件是同级的 rdpwrap.ini。

✅ RDPWrap 部署检查单:五步走完

把上面几节的结论压成一条操作线,每次新机器照着走一遍:

  1. 确认版本与架构:管理员终端跑systeminfo | findstr /B "OS Name" "OS Version",预期看到 "Windows Server 2022 Standard" 和 "10.0.20348.1311" 这样的两行,它们决定第 2 步选哪个文件。
  2. 放入配置文件:把对应 .ini 拷到 RDPWrap 安装目录并命名为 rdpwrap.ini;预期文件里的段标题与第 1 步的 build 号逐位一致,2022 的还要带 SLInit 偏移表。
  3. 安装并启动服务:执行RDPWrap.exe /install,再RDPWrap.exe /start;预期 services.msc 里 RDPWrap 状态为 Running,并在生成日志文件 \rdpwrap.txt。
  4. 放行防火墙:执行netsh advfirewall firewall set rule group="remote desktop" new enable=Yes;预期 3389 入站放行。NLA 保持客户端与服务端两端一致,一边开一边关会在握手阶段直接失败。
  5. 双会话验收:两个不同账号同时发起远程桌面;预期第二个会话进入时第一个不被挤掉。这一步过了,才算真正部署完成。

🚧 上线后最容易翻车的三件事

跑起来不等于跑得住,下面三个现场都真实发生过。

组策略刷新后 MaxUserSessions 又被改回 1

周一早上第二路会话突然进不来,注册表里 MaxUserSessions 又变回 1。先别急着再改策略:真正决定会话数的是 SLInit hook 强制的结构体值,策略里的 1 只是表象——出现这个症状,大概率是 RDPWrap 服务没在跑,打完更新之后尤其常见。查 services.msc 和 \rdpwrap.txt 最近几行,RDPWrap.exe /stop加/start重启服务,再用第 5 步的双会话验收一次。防再犯:把服务状态检查加进每日巡检,别拿策略值当健康指标。

autogenerated 配置和系统 build 号差了一位

某台机器打了月度更新后,RDPWrap 安装状态还是"成功",但新会话就是连不上,日志里能看到补丁没命中的记录。拿 systeminfo 的 build 号去对配置文件的段标题,会发现系统已经是 10.0.20348.1340,文件还停在 10.0.20348.1311。修复方式是整体替换:换一份最新的完整 rdpwrap.ini 或对应的 autogenerated 文件,而不是手工把单个 [10.0.x] 段拷进旧文件——较新的 build 依赖 [PatchCodes] 表里的新条目,段标题对了、补丁码没跟上,照样失败,Readme.md 顶部就专门警告过这一点。防再犯:每次打累积更新前,先确认新 build 已有对应配置,再安排安装。

服务 Running 但 3389 还是不通

服务状态是绿的,远程桌面却超时,这类问题基本不在补丁层。先在本机netstat -an | findstr 3389确认端口在监听,再查防火墙,跑一遍检查单第 4 步那条 netsh 命令。如果两端 NLA 配置不一致(客户端强制 NLA 而服务端证书或版本不支持),连接会在建立阶段直接失败,把两边 NLA 设置对齐即可。防再犯:每台新机器上线都完整走一遍检查单第 4、5 步,别假设"别的机器配过、这台也一样"。

这个仓库大约每月更新一次新 build 支持,节奏可以看 Readme.md 里的 History。建议把 autogenerated/ 目录加进例行巡检清单:每次系统更新后,第一件事就是核对 build 号有没有对应的配置。

【免费下载链接】rdpwrap.iniRDPWrap.ini for RDP Wrapper Library by Stas'M项目地址: https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

树莓派视觉小车实战:OpenCV寻迹避障与图像识别全解析

树莓派视觉小车实战:OpenCV寻迹避障与图像识别全解析

简介:基于树莓派视觉图像识别的智能寻迹避障小车项目源码包,面向人工智能、物联网、自动化等方向的在校学生、教师及竞赛选手,以树莓派为核心实现视觉寻迹与避障,代码带详细注释,新手也能上手,适合作为毕业…

2026/10/20 18:24:04 阅读更多 →
Apache DolphinScheduler年度盘点:工作流调度与生产实践全解析

Apache DolphinScheduler年度盘点:工作流调度与生产实践全解析

又到年底,朋友圈里各种年度盘点纷纷刷屏。作为常年和数据打交道的人,我脑子里第一个冒出来的盘点对象,不是别的,正是Apache DolphinScheduler。这个在开源工作流调度领域占据重要位置的项目,这一年变化其实不小。趁着年…

2026/10/20 18:23:03 阅读更多 →
AI论文写作工具怎么选?查重、逻辑与效率实测指南

AI论文写作工具怎么选?查重、逻辑与效率实测指南

2026年了,论文AI写作早就不是“要不要用”的问题,而是“用得稳不稳”的问题。过去两年,我陆陆续续帮不同背景的写作者做过工具调研和选型,从本科课程论文到硕士学位论文都上手摸过。这篇文章不打算堆一堆功能列表,而是…

2026/10/20 18:23:03 阅读更多 →

最新新闻

CANFD记录仪如何破解新能源车偶发故障排查难题

CANFD记录仪如何破解新能源车偶发故障排查难题

1. 先从一次海外售后支援说起:偶发故障为什么难缠做国产新能源出海配套这几年,我接过最多的需求不是“帮我们做个新功能”,而是“帮我们查一个偶发故障”。这类故障有个共同点:客户报障时描述得很清楚——没动力、亮故障灯、偶发抖…

2026/10/20 19:02:01 阅读更多 →
REA房产经纪人全攻略:从带看谈单到风险控制,手把手教你站稳这行

REA房产经纪人全攻略:从带看谈单到风险控制,手把手教你站稳这行

REA,三个字母,如果不在这一行里泡过几年,可能很多人会以为是某个软件版本号或者游戏职业缩写,但在我们这行,它就是"房产经纪人"的标准代号。我见过不少人抱着"卖房子不就是陪客户看看房"的想法入行…

2026/10/20 19:02:01 阅读更多 →
消息传递接口死锁检测:基于队列的模拟算法与工程实现解析

消息传递接口死锁检测:基于队列的模拟算法与工程实现解析

1. 题目到底在说什么 这道题,是最短路径问题的一个经典变体,题意很直白,但实现起来有不少小坑。我们需要在一个无向图中,给定起点,找到所有其他点到起点的最短路径长度,并且要求输出这些路径本身&#xff0…

2026/10/20 19:02:01 阅读更多 →
非定常气动力与颤振计算:偶极子格网法和p-k法工程实践

非定常气动力与颤振计算:偶极子格网法和p-k法工程实践

简介:压缩包“飞行器机翼非定常气动力计算及颤振计算程序.7z”是一份面向航空航天专业研究生、工程师及高年级本科生的轻量级MATLAB代码资源,重点解决飞行器机翼在非定常流动环境下的气动力响应计算与颤振边界预测问题。资源包内仅含1个程序文件&#xf…

2026/10/20 19:02:01 阅读更多 →
深入理解.NET Async/Await原理:状态机、同步上下文与性能开销

深入理解.NET Async/Await原理:状态机、同步上下文与性能开销

“每日一题:.NET中的Async/Await原理是什么”——这题我前后被面试官问过至少三次,也在组内分享时讲过两轮。我越来越觉得,这个题目最值钱的地方不在“语法长什么样”,而在于它能把线程模型、编译器机制、上下文调度和性能开销串成…

2026/10/20 19:02:01 阅读更多 →
字节开源Agent手册:可运行源码拆解调度循环与工具注册

字节开源Agent手册:可运行源码拆解调度循环与工具注册

简介:这份资源是字节跳动开源的Agent实践手册配套可运行源码包,面向企业内部业务与技术团队、AI应用开发者及希望将智能体技术落地到实际业务中的技术人员。手册系统总结了字节在飞书、抖音、教育等多条业务线落地Agent的方法、工具与规范,涵…

2026/10/20 19:01:00 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →