Activar y permitir mÚltiples conexiones por Escritorio Remoto

Aplicable a cualquier Windows Vista (incluidas versiones Vista Home que teóricamente no soportan el Escritorio Remoto). Es aplicable tanto a 32 como a 64 bits.

El proceso consta de los siguientes puntos:

1) Modificación de la DLL del sistema TERMSRV.DLL. Ver en capítulo correspondiente como hacerlo.

2) Para la versión Home Premium, la modificación de claves de registro (incorporar las que tiene Vista Ultimate), lo haremos construyéndonos un .reg. Esto es solamente para Vista Home Premium. Ver en el capítulo correspondiente como hacerlo.

Una vez realizados los puntos anteriores, procedemos a su instalación. Para ello, debemos trabajar en una consola en modo elevado, es decir, en Inicio, Accesorios, botón derecho sobre Símbolo del Sistema y “Ejecutar como Administrador”. Supongo que tenemos la nueva dll modificada y el .reg en una carpeta llamada TMP que cuelga de c:\

3) Realizamos en la consola:

cd \tmp
net  stop “Terminal Services”
takeown /a /f %SystemRoot%\System32\termsrv.dll
icacls %SystemRoot%\System32\termsrv.dll /Grant Administrators:F
(si nuestra versión de Windows es la versión española, cambiar en la línea anterior “Administrators” por “Administradores”
ren %SystemRoot%\System32\termsrv.dll  termsrv.dll .bak
copy termsrv.dll  %SystemRoot%\System32\termsrv.dll

4)Si nuestra versión es Home Premium, ejecutams el .reg creado en el punto 2) de la siguiente forma:

regedit /s  ts.reg

5) Si deseamos que se pueda por cada usuario tener sesiones independientes (es decir, que si un usuario ya está conectado, entrando con otro usuario, en vez de coger su sesión, se cree una nueva sesión limpia), debemos incorporar una clave de registro que podemos hacer de la siguiente forma:

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f

Si quisiéramos desactivar esta característica en cualquier momento y tomar control de la sesión existente, podríamos en cualquier momento modificar de nuevo la clave cambiando el valor 0 por un 1 mediante:

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fSingleSessionPerUser /t REG_DWORD /d 1 /f

6) Debido a que no nos aparece en el Home en la parte de Conexiones remotas, la posibilidad de activar o no el escritorio remoto, debemos realizar esto mediante una clave de registro. Para tener activo el escritorio remoto:

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

y en cualquier momento puede desactivarse mediante:

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f

7) Arrancar ya el servicio que hemos parado previamente en el punto 3)

net start “Terminal Services”

En Vista Home Premium, debemos abrir en el cortafuegos, creándonos una regla para definir una excepción en un nuevo puerto. Lo hacemos, e indicamos que es el puerto 3389 tcp. En Vista Business y Ultimate, verificar la regla de Escritorio Remoto en el cortafuegos y activar la excepción si fuese necesario.
Lo anterior nos permite ya el poder tener más de una sesión de escritorio remoto abierta e incluso el que se permita más de una con el mismo usuario.


PARTE  1 – MODIFICACIÓN DE LA DLL TERMSRV.DLL

Abrir una consola en modo elevado, y nos creamos una carpeta de trabajo:

cd \
md tmp
cd tmp
copy  %SystemRoot%\System32\termsrv.dll

Con esto ya tenemos en esta carpeta la DLL a modificar. La modificación consiste en que tenemos que cambiar unos pocos bytes, lo cual, como veremos a continuación, realizaremos con un programa editor hexadecimal, por ejemplo WinHEX.
Los bytes a modificar dependen de si la versión de nuestro Vista es de 32 o 64 bits. A continuación pongo las tablas con lo que hay que modificar cada una de las versiones.

32 bits
Offset
nuevo valor
original

000150D8:
000150D9:
000150DA:
000150DB:
000150DD: 
000150DF:
000150E0:
000150E1: 
000150E2:
000154BF:
0004943C:

BA
00
01
00
90
89
91
20
03
90
EB

3B
91
20
03
00
0F
84
0C
CA
43
74

64 bits
Offset
nuevo valor
original
0005BC8F:
0005BC90:
0005BC91:
0005BC92: 
0005BC94:
0005BC95:
0005BC97:
0005BC9B:
0006523E:
B8
00
01
00
90
89
38
EB
00
8B
81
38
06
00
39
3C
75
01

El programa que voy a usar para modificar es el WinHEX pero puede servir cualquier otro editor hexadecimal. WinHEX lo tenemos en: http://www.winhex.com/winhex/index-e.html
Es muy intuitivo, veamos la DLL para Vista de 64 bits:
En el menú File, cargamos la DLL desde la carpeta c:\tmp en donde acabamos de copiarla.

Si nos fijamos en el cuadro anterior, la primera dirección a modificar (en 64 bits) es la 0005BC8F la cual corresponde a la última posición (ver columnas superiores) de la fila que comienza por 0005BC80 y que la he resaltado en azul. Fijemonos que contiene un 8B, tal y como dice el cuadro superior de cambios, y lo tenemos que cambiar por un B8. Así hacemos por cada una de las direcciones marcadas en el cuadro superior. Hay que verificar que realmente lo que contiene la DLL actual es lo MISMO que he puesto en el cuadro. Si no lo fuese, es que esa DLL no es de la versión final de Vista o ha sido ya parcheada por Microsoft, en cuyo caso el presente método no sirve y no debemos continuar.

Al final de la modificación, guardamos la DLL y nos salimos de programa.


PARTE  2 – CREACIÓN DEL ARCHIVO DE REGISTRO TS.REG (sólo para Home Premium)

Con el cuaderno de notas nos creamos un archivo llamado TS.REG que guardaremos en c:\tmp. El contenido del archivo debe ser:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]
“fDenyTSConnections”=dword:00000000
“StartRCM”=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\AddIns]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\AddIns\Clip Redirector]
“Type”=dword:00000003
“Name”=”RDPClip”
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\AddIns\DND Redirector]
“Type”=dword:00000003
“Name”=”RDPDND”
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\AddIns\Dynamic VC]
“Type”=dword:00000000
“Name”=”\\Device\\DrDynVc”
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\AddIns\Sound Redirector]
“Type”=dword:00000003
“Name”=”RDPSound”
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\AddIns\Terminal Server Redirector]
“Type”=dword:00000000
“Name”=”\\Device\\RdpDr”
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\DefaultUserConfiguration]
“fInheritAutoLogon”=dword:00000001
“fInheritResetBroken”=dword:00000001
“fInheritReconnectSame”=dword:00000001
“fInheritInitialProgram”=dword:00000001
“fInheritCallback”=dword:00000000
“fInheritCallbackNumber”=dword:00000001
“fInheritShadow”=dword:00000001
“fInheritMaxSessionTime”=dword:00000001
“fInheritMaxDisconnectionTime”=dword:00000001
“fInheritMaxIdleTime”=dword:00000001
“fInheritAutoClient”=dword:00000001
“fInheritSecurity”=dword:00000000
“fPromptForPassword”=dword:00000000
“fInheritColorDepth”=dword:00000001
“fResetBroken”=dword:00000000
“fReconnectSame”=dword:00000000
“fLogonDisabled”=dword:00000000
“fAutoClientDrives”=dword:00000001
“fAutoClientLpts”=dword:00000001
“fForceClientLptDef”=dword:00000001
“fDisableEncryption”=dword:00000001
“fHomeDirectoryMapRoot”=dword:00000000
“fUseDefaultGina”=dword:00000000
“fDisableCpm”=dword:00000000
“fDisableCdm”=dword:00000000
“fDisableCcm”=dword:00000000
“fDisableLPT”=dword:00000000
“fDisableClip”=dword:00000000
“fDisableExe”=dword:00000000
“fDisableCam”=dword:00000000
“Username”=”"
“Domain”=”"
“WorkDirectory”=”"
“InitialProgram”=”"
“CallbackNumber”=”"
“Callback”=dword:00000000
“Shadow”=dword:00000001
“MaxConnectionTime”=dword:00000000
“MaxDisconnectionTime”=dword:00000000
“MaxIdleTime”=dword:00000000
“KeyboardLayout”=dword:00000000
“MinEncryptionLevel”=dword:00000001
“ColorDepth”=dword:00000001
“NWLogonServer”=”"
“WFProfilePath”=”"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\SysProcs]
“rdpclip.exe”=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Utilities]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Utilities\change]
“winsta”=hex(7):31,00,00,00,57,00,49,00,4e,00,53,00,54,00,41,00,00,00,63,00,68,\
00,67,00,6c,00,6f,00,67,00,6f,00,6e,00,2e,00,65,00,78,00,65,00,00,00,00,00
“port”=hex(7):30,00,00,00,31,00,00,00,50,00,4f,00,52,00,54,00,00,00,63,00,68,\
00,67,00,70,00,6f,00,72,00,74,00,2e,00,65,00,78,00,65,00,00,00,00,00
“logon”=hex(7):30,00,00,00,31,00,00,00,4c,00,4f,00,47,00,4f,00,4e,00,00,00,63,\
00,68,00,67,00,6c,00,6f,00,67,00,6f,00,6e,00,2e,00,65,00,78,00,65,00,00,00,\
00,00
“user”=hex(7):30,00,00,00,31,00,00,00,55,00,53,00,45,00,52,00,00,00,63,00,68,\
00,67,00,75,00,73,00,72,00,2e,00,65,00,78,00,65,00,00,00,00,00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Utilities\query]
“winsta”=hex(7):31,00,00,00,57,00,49,00,4e,00,53,00,54,00,41,00,00,00,71,00,77,\
00,69,00,6e,00,73,00,74,00,61,00,2e,00,65,00,78,00,65,00,00,00,00,00
“appserver”=hex(7):30,00,00,00,32,00,00,00,54,00,45,00,52,00,4d,00,53,00,45,00,\
52,00,56,00,45,00,52,00,00,00,71,00,61,00,70,00,70,00,73,00,72,00,76,00,2e,\
00,65,00,78,00,65,00,00,00,00,00
“session”=hex(7):30,00,00,00,31,00,00,00,53,00,45,00,53,00,53,00,49,00,4f,00,\
4e,00,00,00,71,00,77,00,69,00,6e,00,73,00,74,00,61,00,2e,00,65,00,78,00,65,\
00,00,00,00,00
“process”=hex(7):30,00,00,00,31,00,00,00,50,00,52,00,4f,00,43,00,45,00,53,00,\
53,00,00,00,71,00,70,00,72,00,6f,00,63,00,65,00,73,00,73,00,2e,00,65,00,78,\
00,65,00,00,00,00,00
“user”=hex(7):30,00,00,00,31,00,00,00,55,00,53,00,45,00,52,00,00,00,71,00,75,\
00,73,00,65,00,72,00,2e,00,65,00,78,00,65,00,00,00,00,00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Utilities\reset]
“winsta”=hex(7):31,00,00,00,57,00,49,00,4e,00,53,00,54,00,41,00,00,00,72,00,77,\
00,69,00,6e,00,73,00,74,00,61,00,2e,00,65,00,78,00,65,00,00,00,00,00
“session”=hex(7):30,00,00,00,31,00,00,00,53,00,45,00,53,00,53,00,49,00,4f,00,\
4e,00,00,00,72,00,77,00,69,00,6e,00,73,00,74,00,61,00,2e,00,65,00,78,00,65,\
00,00,00,00,00

--

José Manuel Tella Llop
jmtella@compuserve.com

Multinglés/JMT        
25 - septiembre - 2007