让XP 3389支持多人登陆的方法
程序员文章站
2023-03-29 08:58:01
其实很简单了,2082以后的termsrv.dll不支持多人终端,我用2055的termsrv.dll覆盖原来的termsrv.dll就可以了... 09-07-22...
第一步:首先是在windows xp上安装sp2正式版,按照常规方式安装即可,这里不再赘述。
第二步:准备一份版本较早的sp2终端服务器软件(据说从build 2082开始该功能就被禁止了,所以最好使用之前版本),中文sp2测试版较难找到,我用的是英文版build 2055,运行之后没有发现任何问题。你可以从下载build 2055的终端服务器执行文件termsrv.dll。从这个链接下载来的是一个扩展名为.dl_的文件,你可以把它的扩展名改成zip文件,然后用winrar解开它。
第三步:接下来,以安全模式启动windows xp,如果有多个操作系统,可以启动另一个能访问windows xp系统分区的系统(除非安装了第三方工具软件,否则windows 98不能访问ntfs分区,因此windows 98可能没用)。然后,把windows xp里面sp2正式版的所有termsrv.dll备份一下,在所有termsrv.dll文件出现的位置,用build 2055版本的termsrv.dll覆盖。通常,termsrv.dll至少出现在二个位置,分别是:\windows\system32,\windows\system32\dllcache。凡是原来有termsrv.dll的地方,就用build 2055版本的termsrv.dll覆盖。
第四步:以正常模式启动windows xp,如果系统的文件保护功能提示说termsrv.dll文件已被修改,并询问是否要复原,选择否。
第五步:最后还要修改一下注册表,增加终端服务器的多用户许可。鉴于修改注册表比较麻烦而且容易出错,你可以用下面的批命令修改注册表:
@echo off
setlocal
set regkey="hklm\system\currentcontrolset\control\terminal server\licensing core"
reg add %regkey% /v enableconcurrentsessions /t reg_dword /d 1 /f
endlocal
将上述内容保存为一个批命令文件,如aa.bat,双击执行一下就可以了。
我不推荐这种做法 ,太烦锁了,而且还要让系统重起过。我们可以写一个批处理文件使系统不用重起就实现xp多用户登陆,首先我们先来了解一个对注册表操作的命令参数:
reg add keyname [/v valuename | /ve] [/t type] [/s separator] [/d data] [/f]
keyname [\\machine\]fullkey
machine 远程机器名 - 忽略默认到当前机器。远程机器上
只有 hklm 和 hku。
fullkey rootkey\subkey
rootkey [ hklm | hkcu | hkcr | hku | hkcc ]
subkey 所选 rootkey 下注册表项的完整名。
/v 所选项之下要添加的值名。
/ve 为注册表项添加空白值名(默认)。
/t regkey 数据类型
[ reg_sz | reg_multi_sz | reg_expand_sz |
reg_dword | reg_binary | reg_none ]
如果忽略,则采用 reg_sz。
/s 指定一个在 reg_multi_sz 数据字符串中用作分隔符的字符
如果忽略,则将 "\0" 用作分隔符。
/d 要分配给添加的注册表 valuename 的数据。
/f 不用提示就强行覆盖现有注册表项。
例如:
reg add \\abc\hklm\software\myco
添加远程机器 abc 上的一个注册表项 hklm\software\myco
reg add hklm\software\myco /v data /t reg_binary /d fe340ead
添加一个值(名称: data,类型: reg_binary,数据: fe340ead)
reg add hklm\software\myco /v mru /t reg_multi_sz /d fax\0mail
添加一个值(名称: mru,类型: reg_mutli_sz,数据: fax\0mail\0\0)
reg add hklm\software\myco /v path /t reg_expand_sz /d ^%systemroot^%
添加一个值(名称: path,类型: reg_expand_sz,数据: %systemroot%)
注意: 在扩充字符串中使用插入符号 ( ^ )
为了让系统不重起,我们可以用shutdown -a 这个命令。
根据上面找来的资料,我们可以编写一个批处理,实现xp系统多用户登陆而又不用重起系统。
@net stop sharedaccess
@ntsd -c q -p "pid"
@reg add hklm\software\microsoft\windows" "nt\currentversion\winlogon /v keeprasconnections /t reg_sz /d 1 /f
@reg add hklm\system\currentcontrolset\control\terminal" "server /v fdenytsconnections /t reg_dword /d 00000000 /f
@reg add hklm\system\currentcontrolset\control\terminal" "server\licensing" "core /v enableconcurrentsessions /t reg_dword /d 00000001 /f
@reg add hklm\system\currentcontrolset\services\termservice\parameters /v servicedll /t reg_expand_sz /d %systemroot%\system32\slyartermsrv.dll /f
@copy slyartermsrv.dll c:\windows\system32\dllcache\slyartermsrv.dll
@attrib +h +s +r c:\windows\system32\dllcache\slyartermsrv.dll
@copy slyartermsrv.dll c:\windows\system32\slyartermsrv.dll
@attrib +h +s +r c:\windows\system32\slyartermsrv.dll
@shutdown -a
@net start termservice
稍微解释几个命令好了。
net stop sharedaccess
禁用xp的防火墙。
shutdown -a
因为svchost被干掉,所以会导致重启,这个命令可以终止重启。
ntsd -c q -p "pid"
系统debug级的ntsd,用来干掉进程特别爽。
第二步:准备一份版本较早的sp2终端服务器软件(据说从build 2082开始该功能就被禁止了,所以最好使用之前版本),中文sp2测试版较难找到,我用的是英文版build 2055,运行之后没有发现任何问题。你可以从下载build 2055的终端服务器执行文件termsrv.dll。从这个链接下载来的是一个扩展名为.dl_的文件,你可以把它的扩展名改成zip文件,然后用winrar解开它。
第三步:接下来,以安全模式启动windows xp,如果有多个操作系统,可以启动另一个能访问windows xp系统分区的系统(除非安装了第三方工具软件,否则windows 98不能访问ntfs分区,因此windows 98可能没用)。然后,把windows xp里面sp2正式版的所有termsrv.dll备份一下,在所有termsrv.dll文件出现的位置,用build 2055版本的termsrv.dll覆盖。通常,termsrv.dll至少出现在二个位置,分别是:\windows\system32,\windows\system32\dllcache。凡是原来有termsrv.dll的地方,就用build 2055版本的termsrv.dll覆盖。
第四步:以正常模式启动windows xp,如果系统的文件保护功能提示说termsrv.dll文件已被修改,并询问是否要复原,选择否。
第五步:最后还要修改一下注册表,增加终端服务器的多用户许可。鉴于修改注册表比较麻烦而且容易出错,你可以用下面的批命令修改注册表:
@echo off
setlocal
set regkey="hklm\system\currentcontrolset\control\terminal server\licensing core"
reg add %regkey% /v enableconcurrentsessions /t reg_dword /d 1 /f
endlocal
将上述内容保存为一个批命令文件,如aa.bat,双击执行一下就可以了。
我不推荐这种做法 ,太烦锁了,而且还要让系统重起过。我们可以写一个批处理文件使系统不用重起就实现xp多用户登陆,首先我们先来了解一个对注册表操作的命令参数:
reg add keyname [/v valuename | /ve] [/t type] [/s separator] [/d data] [/f]
keyname [\\machine\]fullkey
machine 远程机器名 - 忽略默认到当前机器。远程机器上
只有 hklm 和 hku。
fullkey rootkey\subkey
rootkey [ hklm | hkcu | hkcr | hku | hkcc ]
subkey 所选 rootkey 下注册表项的完整名。
/v 所选项之下要添加的值名。
/ve 为注册表项添加空白值名(默认)。
/t regkey 数据类型
[ reg_sz | reg_multi_sz | reg_expand_sz |
reg_dword | reg_binary | reg_none ]
如果忽略,则采用 reg_sz。
/s 指定一个在 reg_multi_sz 数据字符串中用作分隔符的字符
如果忽略,则将 "\0" 用作分隔符。
/d 要分配给添加的注册表 valuename 的数据。
/f 不用提示就强行覆盖现有注册表项。
例如:
reg add \\abc\hklm\software\myco
添加远程机器 abc 上的一个注册表项 hklm\software\myco
reg add hklm\software\myco /v data /t reg_binary /d fe340ead
添加一个值(名称: data,类型: reg_binary,数据: fe340ead)
reg add hklm\software\myco /v mru /t reg_multi_sz /d fax\0mail
添加一个值(名称: mru,类型: reg_mutli_sz,数据: fax\0mail\0\0)
reg add hklm\software\myco /v path /t reg_expand_sz /d ^%systemroot^%
添加一个值(名称: path,类型: reg_expand_sz,数据: %systemroot%)
注意: 在扩充字符串中使用插入符号 ( ^ )
为了让系统不重起,我们可以用shutdown -a 这个命令。
根据上面找来的资料,我们可以编写一个批处理,实现xp系统多用户登陆而又不用重起系统。
呵呵,这个也是几年前经常用的东西了,看以前的博客找到的,觉得以后可能还有用,特地找出来改了改,又到xpsp3上测试了一下,能用,现在发上来。slyar去掉了一些隐藏的功能,因为用不着了,哈哈~~本来说做成exe的补丁,结果出去上了个厕所打消了这个念头。。。
需要的到下载基地下载,解压后一个文件夹里面有2个文件:slyartermsrv.dll、slyar3389.bat。
恩,还是cmd下吧,先用tasklist /svc命令得到termservice的pid,然后编辑一下文件夹里的slyar3389.bat,把"pid"里的pid改成你得到的数字,保存退出。
行了,剩下的工作就是双击一下slyar3389.bat,完成了,mstsc连接验证一下就ok。
是不是写得有点少?那多写点。。。
原理:其实很简单了,2082以后的termsrv.dll不支持多人终端,我用2055的termsrv.dll覆盖原来的termsrv.dll就可以了。
那个bat也没啥,贴出来看看。
复制代码
代码如下:@net stop sharedaccess
@ntsd -c q -p "pid"
@reg add hklm\software\microsoft\windows" "nt\currentversion\winlogon /v keeprasconnections /t reg_sz /d 1 /f
@reg add hklm\system\currentcontrolset\control\terminal" "server /v fdenytsconnections /t reg_dword /d 00000000 /f
@reg add hklm\system\currentcontrolset\control\terminal" "server\licensing" "core /v enableconcurrentsessions /t reg_dword /d 00000001 /f
@reg add hklm\system\currentcontrolset\services\termservice\parameters /v servicedll /t reg_expand_sz /d %systemroot%\system32\slyartermsrv.dll /f
@copy slyartermsrv.dll c:\windows\system32\dllcache\slyartermsrv.dll
@attrib +h +s +r c:\windows\system32\dllcache\slyartermsrv.dll
@copy slyartermsrv.dll c:\windows\system32\slyartermsrv.dll
@attrib +h +s +r c:\windows\system32\slyartermsrv.dll
@shutdown -a
@net start termservice
稍微解释几个命令好了。
net stop sharedaccess
禁用xp的防火墙。
shutdown -a
因为svchost被干掉,所以会导致重启,这个命令可以终止重启。
ntsd -c q -p "pid"
系统debug级的ntsd,用来干掉进程特别爽。