RDP Wrapper

article/2025/10/22 20:42:46

      说到要在非Windows Server版本上实现多用户远程桌面连接 ,我们都知道一个大名鼎鼎的软件RDP Wrapper Library,它是开源的,所有秘密作者都没有保留,所有问题全部在GitHub上面写的清清楚楚,在这里感谢这些伟大的人!

       打开项目的GitHub(https://github.com/stascorp/rdpwrap/releases/tag/v1.6.2),首页写着最新的版本是v1.6.2,最近一次更新时间为2017年12月,现在已经2020年,难道这个项目中途夭折了?实际上没有,而是这个项目目前已经接近完美,最后一个版本,作者将软件进行了拆分,将核心模块配置文件拆分独立出来了,通过修改配置文件,就可以让软件支持最新版本的Windows,并且配置文件的修改方法也录制了详细的视频放在了这个GItHub上面,只要有一个人更新了配置文件 ,并把它上传或者分享到GitHub上面,那么所有使用这个版本Windows的人都可以直接使用这个配置文件,多么方便啊!实际上,仔细看看这个项目的Issue,我们确实也是这么干的!共享万岁!正是这种优良的设计,所以作者才一直没有更新吧!

这个软件的原理是什么?(摘自该项目的GitHub官网,重要,这是本文的核心)

        RDP Wrapper works as a layer between Service Control Manager and Terminal Services, so the original termsrv.dll file remains untouched. Also this method is very strong against Windows Update.

        简单来说,RDPWrapper 是在服务控制管理器终端服务之间增加了一层,或者说,它类似一个管道,将服务控制管理器和终端服务连接起来,在这一层(管道)实现了并发RDP会话(多用户同时远程桌面),所以它让原始的termsrv.dll文件保持不变,不对其进行任何修改,从而保证Windows的稳定性,这种设计可以很好的应对Windows更新

        RDP Wrapper does not patch termsrv.dll, it loads termsrv with different parameters.

        RDPWrapper 不修改termsrv.dll,它用不同的参数加载termsrv.dll(Terminal Services)

       所以我们的问题:对于某某版本的Windows想支持多用户远程桌面,经过搜索尝试下载了很多软件不行,RDPWrapper也不支持,怎么办?急,在线等!这个根本不是问题,首先,看看我们自己Windows的termsrv.dll的版本,然后到RDPWrapper的GitHub上面找对应版本的配置文件或者修改方法(你要相信肯定不只你一个人遇到这个问题),修改配置文件,运行RDPWrapper,OK!

配置文件如何更新?

先来看看配置文件是什么以及里面的内容是什么?

       在后面的详细步骤中的第二步(实际是第一步,下载软件不算步骤),需要先执行 install.bat安装RDPWrapper,会在C:\Program Files\RDP Wrapper下面生成2个文件:rdpwrap.dll(核心模块),rdpwrap.ini(配置文件),没错,这就是我们要修改的配置文件。

        OK!长话短说,速度速度!我直接讲。看看这个配置文件的内容,显目的PatchCode,显目的nop,jump,熟悉的edx,eax,全是汇编,x64和x86是什么更不用我来说了,点到即止。还有仔细看看[10.0.17763.1-SLInit]这部分内容,是不是明白了?

       好吧,好像什么都没有说,没有办法,要讲清楚,只有pull源码来讲,但是抱歉我暂时没有那么多时间,我菜得很,还有很多东西要学,上面最重要的东西已经提到了,感兴趣的朋友自己去pull源码分析吧,我就浅尝辄止了。

       总结一下(以下内容未经深入分析源码,全是本人猜测,看看就行,不要当真,最重要的是,不要来找我验证,我无知啊!):

       如果我没有猜错的话,RDPWrapper将核心功能模块实现放在了rdpwrap.dll中,也就是软件原理里面提到了那一层(管道),采用Hook技术,通过加载配置文件rdpwrap.ini,Hook了termsrv.dll,从而实现其提到的:RDPWrapper 不修改termsrv.dll,它用不同的参数加载termsrv.dll,以及我前面提到的,软件拆分,将核心模块和配置文件拆分独立,通过修改配置文件rdpwrap.ini,就可以让软件支持最新版本的Windows。这涉及到汇编,Hook技术,Dll技术,我就不展开讲了。

所以,目前最重要的就是配置文件,其他的东西对我们不重要,我们来看看这段:

[10.0.17763.1-SLInit] RDPWrapper能支持的termsrv.dll版本号
bInitialized.x86 =CD798 X86这是针对32位系统的配置
bServerSku.x86 =CD79C
lMaxUserSessions.x86 =CD7A0
bAppServerAllowed.x86 =CD7A8
bRemoteConnAllowed.x86=CD7AC
bMultimonAllowed.x86 =CD7B0
ulMaxDebugSessions.x86=CD7B4
bFUSEnabled.x86 =CD7B8
bInitialized.x64 =ECAB0 x64这是针对64位系统的配置
bServerSku.x64 =ECAB4
lMaxUserSessions.x64 =ECAB8
bAppServerAllowed.x64 =ECAC0
bRemoteConnAllowed.x64=ECAC4
bMultimonAllowed.x64 =ECAC8
ulMaxDebugSessions.x64=ECACC
bFUSEnabled.x64 =ECAD0

       是不是明白了?RDPWrapper支持哪些Windows版本的termsrv.dll(就是下面图片中那个讨厌的不支持not supported),就是看配置文件里面有没有类似上面这段代码,所以,问题清楚了,RDPWrapper不支持最新的Windows10 1909版本怎么办?上RDPWrapper的GitHub去Issue里面找,找到别人提供的和上面类似的配置代码或者配置文件,将它复制添加到我们自己计算机上面对应的配置文件rdpwrap.ini或者直接替换掉我们自己计算机里面的配置文件rdpwrap.ini,再重新执行一次 install.bat,OK了,下班了,各位朋友。

总体思路:

       首先搞清楚自己的计算机或者你要实现多用户同时远程桌面的计算机上面termsrv.dll版本(不要管你的计算机Windows是什么版本,RDPWrapper针对是termsrv.dll的版本),可以通过RDPWrapper软件中自带的RDPConf.exe软件直接检测,如果显示不支持not supported,那就说明当前配置文件不支持这个版本的termsrv.dll,上RDPWrapper的GitHub去Issue里面找,找到别人提供的和上面类似的配置代码或者配置文件,将它复制添加到我们自己计算机上面对应的配置文件rdpwrap.ini或者直接替换掉我们自己计算机里面的配置文件rdpwrap.ini,再重新执行一次 install.bat,再检测一下,OK了。

 

详细步骤:(以本人计算机上面的termsrv.dll的版本[10.0.17763.1-SLInit]为例子)

1.下载RDPWrap-v1.6.2.zip,解压,里面包含如下文件,每个文件的作用参考下面的表格。

文件名描述
RDPWSTST.EXERDP包装库安装程序/卸载程序
RDPCHECK.EXE本地RDP检查器(可以检查RDP正在工作)
RDPCON.EXERDP包装器配置

install.bat

快速安装批处理文件
uninstall.bat快速卸载批处理文件
update.bat快速更新批处理文件

2.执行 install.bat,会在C:\Program Files\RDP Wrapper下面生成2个文件:rdpwrap.dll(核心模块),rdpwrap.ini(配置文件),没错,这就是我们要修改的配置文件。

3.执行RDPWrapper软件中自带的RDPConf.exe软件直接检测,如果显示全绿,那么恭喜你,RDPWrapper支持你当前计算机的termsrv.dll版本,如果显示不支持not supported,那就说明当前配置文件不支持这个版本的termsrv.dll,本人这里显示不支持。

4.上RDPWrapper的GitHub去Issue里面去搜索对应的版本号,找到别人提供的支持[10.0.17763.1]版本的配置代码,添加到位于C:\Program Files\RDP Wrapper\rdpwrap.ini下面rdpwrap.ini配置文件中。当然如果别人提供的是新版本的配置文件,直接替换即可。提醒一下,配置代码的格式一定要正确,请参考前面的分析部分。

本例中,在GitHub中找到了如下配置代码,将它添加到rdpwrap.ini配置文件中。

[10.0.17763.1-SLInit]
bInitialized.x86      =CD798
bServerSku.x86        =CD79C
lMaxUserSessions.x86  =CD7A0
bAppServerAllowed.x86 =CD7A8
bRemoteConnAllowed.x86=CD7AC
bMultimonAllowed.x86  =CD7B0
ulMaxDebugSessions.x86=CD7B4
bFUSEnabled.x86       =CD7B8

bInitialized.x64      =ECAB0
bServerSku.x64        =ECAB4
lMaxUserSessions.x64  =ECAB8
bAppServerAllowed.x64 =ECAC0
bRemoteConnAllowed.x64=ECAC4
bMultimonAllowed.x64  =ECAC8
ulMaxDebugSessions.x64=ECACC
bFUSEnabled.x64       =ECAD0

5.再次运行RDPConf.exe检测是否支持,可以看到已经支持了。

1024.还没有完,还有一些计算机本地策略需要修改,以及一些问题和优化,比如连接时提示最大连接数量?如何优化远程桌面性能实现自动注销登出用户?还有最基本的如何创建用户?如何替换系统文件termsrv.dll?几乎你能遇到的问题全部都详细写了。请看我另外一篇的博客!(https://blog.csdn.net/u010804317/article/details/100055558)

6666.今年运气不错,那么问题来了,有朋友说我是吹神,天天吹牛逼,问我,最新的Windows版本,版本新到RDPWrapper的GitHub上面都还没有人更新配置文件,怎么办?一直等吗?对此,我只想说,这个问题充钱就能解决!

直接丢王炸给各位

       想想Windows一贯以来的一个优点,向下兼容!get到了吗?远程桌面模块已经运行这么多年了,Bug和缺陷其实早就修复完了,最新的Windows中的termsrv.dll和上一个版本,甚至上上个版本的termsrv.dll基本上完全相同,也就是说,我们完全可以用上一个低版本的termsrv.dll替换本机上面最新termsrv.dll,当然凡事得有个度,物极必反,两个文件的版本还是不要相差的太大。只要替换成低版本后远程桌面能正常运行即可,而低版本GitHub上面肯定有人已经解决了,所以问题得到解决。详细过程请看我另外一篇的博客!(https://blog.csdn.net/u010804317/article/details/100055558).

                                  各位大佬,这个方法6不6?

       因为本方法毕竟替换了termsrv.dll,可能造成系统不稳定!注意!注意!注意!由此造成的任何损失本人概不负责!

       注意!这是另类方法!不是正道!标准简单的方法参见上面提到的博文!直接使用RDPWrap这个软件,执行bat文件,自动打入破解补丁即可完美解决,非常简单。

1.最后是大家喜闻乐见的成功截图!至于前面提到的直接通过RDPWrapper,点点鼠标就能成功的截图就不发了,没意思的,太简单了。

       注意看细节部分,第一张图,windows已经升级到最新的Windows10 1909版本,这个版本的termsrv.dll为18362.267,时间为2020/01/03,我直接替换成上一个Windows版本的termsrv.dll也就是Windows10 1809版本中的1773.1,时间为2018/09/15,看第二张图,OK的!使用起来也没有问题,稳如老狗!

2.关于更新支持Win10 2004版本的成功截图

       注意看细节部分,windows已经升级到最新的Windows10 2004版本,这个版本的termsrv.dll为10.0.19041.84,时间为2020/05/31,稳如老狗!

8888.关于相关资源问题,RDPWrapper软件和最新的支持最新Windows版本的配置文件rdpwrap.ini,请在GitHub官网(https://github.com/stascorp/rdpwrap/releases/tag/v1.6.2)下载。


http://chatgpt.dhexx.cn/article/bs9EUwxh.shtml

相关文章

wrapper后台启动java程序

文章目录 1,下载wrapper2,使用wrapper后台启动java程序2.1,编写java样例程序2.2,配置wrapper2.3,拷贝启动脚本2.4,启动服务 1,下载wrapper 下载地址:https://wrapper.tanukisoftwar…

Java常用类-包装类(Wrapper)简单介绍

目录 前言1、包装类(Wrapper) 前言 本文主要介绍java中的包装类 1、包装类(Wrapper) Java是面向对象的编程语言,但它也包含了8种基本数据类型,这8种基本数据类型不支持面向对象的编程机制,基本数据类型的数据也不具备“对象”的特性&#…

强大的wrapper

最近在看大数据和容器相关的东西,发现有一个模式被反复使用到,关键是被用的很恰当且优雅,并能在这些关键技术中都发挥着至关重要的核心作用。我想你已经猜到了,他就是Eminem——强大的rapper——哦,不对,是…

mybatis-plus中wrapper的用法(详细)

用到了wrapper,ge、le、ne、eq等的用法,及多表查询自写sql整理资料记录一下,以备后续复习。 目录------------(可点击相应目录直接跳转) 一、条件构造器关系介绍 条件构造器关系介绍 : wapper介绍 &…

锚点(anchorPoint)

转载请说明出处,谢谢。 原文出处:点击打开链接 今天研究了一下关于layer的anchorPoint问题。 附图: 原文出处:点击打开链接 位置坐标 position+anchorPoint(左下角0,0原点坐标系)。 要确…

cocos2d-x中的锚点(AnchorPoint)理解

锚点的定义 锚点是指节点在进行形状变换、位置变动时依据的基准点。可以想象为钉在墙上用于固定纸张的小图钉,或者公告栏上用于固定纸张用的围棋状的小磁粒。当对某个节点调用setPosition时,cocos2d-x即会将其锚点移动到相应位置;当对节点进行…

cocos2d-x3.2总结(一)Position和AnchorPoint的关系

当cocos2d-x引擎需要绘图时,就需要Position和AnchorPoint等属性。例如:在创建一个Sprite时,要设置Sprite的Position,而我们常常没有设置AnchorPoint,这是因为精灵的AnchorPoint默认值为(0.5,0.5&#xff09…

Anchor3

这里介绍如何修改 Anchor 的尺寸来提高小目标的检测效果,算法tricks优化小目标检测 修改 Anchor 尺寸 在实际的应用场景中,我们按照 MS COCO 标准中把大小不大于 32x32 或者占原始图片比率不足 0.01 的目标物体定义为一个小目标物体。 在使用 Anchor 的检测算法&…

ios-anchorPoint、position理解

anchorPoint(锚点)是layer的一个属性,下面我们来看看其对view的影响,本文主要通过图片方式展现: 锚点用单位坐标来描述也就是图层的相对坐标。在苹果文档中说明左下是(0,0),右上是(1,1),mac系统…

Anderson‘s pointer analysis

本文是垃圾文章,请直接学习其它资料 南京大学《软件分析》课程08(Pointer Analysis)https://www.cs.cmu.edu/~aldrich/courses/15-819O-13sp/resources/pointer.pdf 指针分析 指针分析是一类特殊的数据流问题,它是其它静态程序分析…

iOS围绕某点缩放或旋转的AnchorPoint的设定

经常会遇到需求,要求手势的缩放或者旋转操作,要求动作变化围绕某一个特定点,或者是两指的中心点,或者是某一个点。 这个问题首先要清晰的知道,iOS各个view的层次关系。特别是,要清除的知道,当前…

彻底理解CALayer的position与anchorPoint

引言 相信初接触到CALayer的人都会遇到以下几个问题: 为什么修改anchorPoint会移动layer的位置? CALayer的position点是哪一点呢? anchorPoint与position有什么关系? 我也迷惑过,找过网上的教程,大部分都是复制粘…

position和anchorPoint

本人录制技术视频地址: https://edu.csdn.net/lecturer/1899 欢迎观看。 一、理论概述 1.简单介绍 CALayer有2个非常重要的属性:position和anchorPoint property CGPoint position; 用来设置CALayer在父层中的位置 以父层的左上角为原点(0, 0) prop…

Ant Design - Anchor

Anchor锚点 此组件的属性有以下几点: 现在给出一份例子 其他属性都很简单就不多说了,主要我遇到的麻烦是 getContainer 属性 锚点是默认body滚动的,所以如果你滚动的区域是body就会看到锚点的小蓝点是会随内容滚动的,但是如果你…

Anchor Point

On default, CCNode’s anchor point is (0, 0), which is at the left-bottom point. CCSprite’s anchor point is (0.5, 0.5), which is at the center. 如果你把一个CCSprite作为child加入到CCNode中,CCNode的anchor point不会对sprite的位置有影响,…

【Cocos2d-x 3.0学习笔记】 AnchorPoint 和Position 关系

先不多说,上两张图片: 解释一下上面图片的意思: 描点就是图片中红点的位置。setAnchorPoint的取值范围0~1,距离设置的是一张图片 setAnchorPoint(Point(0,0))表示在图片左下角, setAnchorPoint(Point(1,1))表示在图片…

iOS开发之layer.frame,layer.anchorPoint,layer.position对frame的影响

最近遇到相关的问题,所以就将这三个属性值,进行了分析和研究,话不多说,直接上代码了,详细的文字描述都在代码中,可以自行查看。 之前还写了一篇文章,也可以同时查看一下: iOS开发之…

anchorPoint

OS开发UI篇—CAlayer层的属性 一、position和anchorPoint 1.简单介绍 CALayer有2个非常重要的属性:position和anchorPoint property CGPoint position; 用来设置CALayer在父层中的位置 以父层的左上角为原点(0, 0) property CGPoint anchorPoint; 称为“定位点”、“…

iOS动画小课堂:定点缩放弹窗(利用锚点anchorPoint进行实现)包含完整demo

文章目录 前言I 基础知识 (CALayer)1.1 anchorPoint1.2 positionII iOS开发中常用的动画(定点缩放弹窗)2.1 核心代码2.2 完整demo源码see also前言 iOS开发中常用的动画(定点缩放弹窗)的应用场景: 会员详情的右侧下拉操作菜单 浏览器的右侧下拉菜单

UIView的bounds、frame、center/position、anchorPoint的关系

视图的frame,bounds和center属性仅仅是存取方法,当操纵视图的frame,实际上是在改变位于视图下方CALayer的frame,不能够独立于图层之外改变视图的frame。 对于视图或者图层来说,frame并不是一个非常清晰的属性&#xff…