Как стать автором
Обновить

Несколько терминальных подключений WindowsXP

Время на прочтение5 мин
Количество просмотров5.1K
image
Поскольку часто приходится подключаться к удаленным машинам, и нужно, чтобы пользователи продолжали дальше работать на своих компьютерах, стало необходимо сделать так, чтобы одновременные терминальные сессии были возможны для Винды.

Началось, как всегда с гугления, но результаты давали или ЕХЕшник с трояном, или какой-то мудренный способ.
Верю, что где-то в просторах Сети есть таки нужное решение, но почему бы самому не создать велосипед программу, которая активирует сабжевые возможности Винды, из которой была беспощадно убрана поддержка этой замечательной фичи?

За основу бралась ДЛЛ-ка termsrv.dll версии 5.1.2600.5512. Ее можно скачать где-то из Сети или отсюда.

Кроме этого, надо в реестр запихнуть некие данные, относящиеся к работе службы терминалов. Можно воспользоваться BAT-файлом. Вот его содержимое:
@REG ADD "HKLM\SYSTEM\ControlSet001\Control\Terminal Server\Licensing Core" /v EnableConcurrentSessions /d 1 /t REG_DWORD /f >nul

@REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v EnableConcurrentSessions /d 1 /t REG_DWORD /f > nul

@REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AllowMultipleTSSessions /d 1 /t REG_DWORD /f > nul


Кому лень копипастить и создавать файл, готовый батник можно скачать отсюда.

Кстати, если машина в домене, то эти данные в реестр нужно вносить постоянно, так как после перезагрузки они терминальной службой сбрасываются на дефолтные.

Итак, каков порядок действий вручную:
  1. Грохнуть содержимое папки C:\Windows\Driver Cache\i386
  2. Грохнуть содержимое папки C:\Windows\Prefetch
  3. Грохнуть содержимое папки C:\Windows\System32\dllcache
  4. Убить службу терминалов. (Внимание! После этого служба серверных процессов DComLaunch упадет и появится окошко с обратным отсчетом, что система сейчас перезагрузится). Само убийство: taskkill /F /FI «MODULES eq termsrv.dll»
  5. Дабы отменить данную перезагрузку, выполним комманду Пуск-Выполнить: shutdown /a
  6. Теперь после остановки службы терминалов можно спокойно заменять файл termsrv.dll на файл ревизии 5512. Где его брать я написал выше.
  7. Создать Батник и запустить его (или же другим способом изменить значения в реестре).
  8. Перезагрузится. Придется, ибо службу терминалов-то удастся запустить, а вот DComLaunch — нет. Незря после ее падения в стоит триггер перезагрузки.

Вот и все. Осталось это автоматизировать. Вы можете это сделать, например, vbs-скриптом, я же нашкодил это на Вижуал Бейсике, который у меня стоит для подобного писательства.

В архиве — исходники и скомпилированнй проект. termsrv.dll и батник встроены уже в ЕХЕшник и сами оттуда вытягиваются. В vb-проекте они содержатся в файле ресурсов (.RES). Впрочем, думаю, там каждому будет все понятно, тем более кода там немного.

Все, что нужно — запустить ЕХЕшник, перезагружаетесь сами (или ждете, пока система вас вырубит сама через 60 секунд).
Загружаете операционку и — вуаля — терминальный сервер под управлением Windows XP готов!

ЕХЕшник копирует себя в папку %SYSTEMROOT% и ставит себя в автозагрузку, чтобы каждый раз менять те три параметра в реестре. Впрочем, можно вполне обойтись и без этого, но вы должны тогда придумать свой вариант, например, скрипт с невидимым окном.

И вообще, решений может быть просто туча. Я делал для себя, желая, чтобы моя работа не мешала другим пользователям и наоборот.

Посчитал, что кому-то это может пригодится и сэкономить хоть немного времени. Надеюсь, так и будет.

upd. Внимание! Поскольку эти действия можно расценить, как нелегальные, данный пост считать экспериментом и использовать только ради личного обучения. После того, как ваш эксперимент удался — настоятельно рекоммендую вернуть забэкапленную dll-ку обратно в %systemroot%\system32\.

upd2. Меня спрашивали в личку о том, как быть с Windows Home версией. Отвечаю сюда, если кого-то еще такой вопрос интересует.
Очень даже легко. Кстати, Windows XP Home можно «конвертировать» в Windows Xp Pro (и не только в про) без переустановки оной. Да-да. Это нам и нужно для того, чтобы активировать возможность, о которой Вы спрашиваете. Так вот, приступим:
  1. Откываем редактор реестра (regedit).
  2. Идем в ветку HKEY_LOCAL_MACHINE/SYSTEM/ControlSet00X/Control/ProductOptions, гдее ControlSet00X — наибольший номер.
  3. Удаляем ключ ProductSuite.
  4. Создаем новое свойство DWORD и даем ему имя Brand.
  5. Задаем нашему «Brand» значение 0.
  6. Перезагружаемся.
  7. При загрузке сразу после экрана BIOS, жмем F8 для отображения загрузочного меню Windows XP.
  8. Выбираем «Последнюю удачную конфигурацию» (Last Known Good Configuration) и жмем ЕНТЕР.
  9. Радуемся.


upd3.
sacred1972 некродополняет: подменять dll вовсе нет необходимости. Нужно просто назвать патченую версию по-другому, например termserv.full.dll
И в ветке реестра
HKLM\SYSTEM\CurrentControlSet\Services\TermService\Parameters
установить ключ
ServiceDll="%SystemRoot%\System32\termserv.full.dll"

Загрузились? Отлично. Теперь идем в свойства системы и проверям, Pro версия это или нет. Должна быть Windows XP Professional.
Дальше, качаем утититу с мелкософта с именем devcon
Эта утилита — самораспакуется, укажите c:\temp
После распаковки Вы увидите две папки: i386 и ia64.
Запустите коммандную оболочку (Cmd) и перейдите в папку i386:
cd c:\temp\i386
Ну что, давайте уже скорее инсталируем драйвер RDP?
devcon.exe -r install %windir%\inf\machine.inf root\rdpdr
После этого не забудем перезапустить компьютер.
После перезагрузки Вы будете иметь Службу Терминалов, но она не будет работать, пока Вы не измените несколько ключей в реестре. Создадим BAT-файл:
@echo off
echo Windows Registry Editor Version 5.00> C:\TSXP.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermService]>> C:\TSXP.reg
echo "Start"=dword:00000002>> C:\TSXP.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]>> C:\TSXP.reg
echo "AllowTSConnections"=dword:00000001>> C:\TSXP.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]>> C:\TSXP.reg
echo "fDenyTSConnections"=dword:00000000>> c:\TSXP.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]>> C:\TSXP.reg
echo "fAllowToGetHelp"=dword:00000001>> C:\TSXP.reg
echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]>> C:\TSXP.reg
echo "AllowMultipleTSSessions"=dword:00000001>> C:\TSXP.reg
echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]>> C:\TSXP.reg
echo "AutoAdminLogon"="1">> C:\TSXP.reg
%windir%\regedit.exe /S C:\TSXP.reg
echo [Components] > c:\bootlog~.txt
echo TSEnabled = on >> c:\bootlog~.txt
sysocmgr /i:%windir%\inf\sysoc.inf /u:c:\bootlog~.txt /q
DEL /Q C:\TSXP.reg
DEL /Q C:\bootlog~.txt
exit


Сохраняем и запускаем. Снова перезапускаемся.
После перезагрузки Ваш компьютер уже может принимать входящие подключения через службу терминалов.
Чтобы убедиться, что служба запущениа, запускаем апплет в панели управления Администрирование-Службы. Ищем Службу терминалов (Terminal Server) — должно быть состояние «Работает» и тип запуска «Авто».

Кроме того, Вы можете разрешить несколько подключений к этой машине, проделав все то, что написано выше в основном тексте статьи. Если нужно, то можно дописать в код VB-проекта и этот патч-конвертер Home2Pro :)

Все!

ps. Да, и не забывайте о лицензионном соглашении!
Теги:
Хабы:
+15
Комментарии44

Публикации

Изменить настройки темы

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн