Pull to refresh

Windows XP в домене как Terminal Server (Linux way)

Reading time3 min
Views20K
Администраторы рабочих мест под Windows знают, какая это морока — в Пнд. с утра внезапно выгонять
всех пользователей из сеансов и срочно обновлять отечественное ПО. Выход — одновременная работа в Windows XP пользователя и администратора.
Рецепты в интернетах немного неточны, расчитаны на мышку, не работают в домене, делают неизвестно что еще — выбери X из Y.
Мы же с вами изготовим нужное средство из известных материалов, работающее просто, быстро и без мышки (Linux way, да).
Note: юридические вопросы не рассматриваются.


1. Цель работы


  1. Подменить нужную dll
  2. Поправить/добавить ключи реестра
  3. Обеспечить восстановление статус кво после перегрузки

2. Приборы и материалы


  1. Windows XP в домене
  2. Исправленная на 3 байта termsrv.dll нужной версии (в интернетах)
  3. srvany.exe (в каком-нибудь ResourceKit или отдельно)
  4. instsrv.exe (там же)
  5. Создать два батника (руками)

Кладем всё в одну [сетевую] папку и радостно выпрямляем ручки.

3. Ход работы



Делай раз

1.cmd:
@ECHO "1. SFC off"
@REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v SFCDisable /t REG_DWORD /d 00000001 /f
@ECHO "2. Terminal service off"
@REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\TermService" /v Start /t REG_DWORD /d 00000004 /f
@PAUSE

> 1.cmd && shutdown -t 0 -r

Делай два

2.cmd:
@REM store src path (w/ trailing slash)
@SET ROOT=%~dp0

@ECHO "1. Copy files"
@ECHO "termsrv.dll..."
@copy /y %ROOT%termsrv.dll %WINDIR%\ServicePackFiles\i386\
@copy /y %ROOT%termsrv.dll %WINDIR%\System32\dllcache\
@copy /y %ROOT%termsrv.dll %WINDIR%\System32\
@ECHO "srvany.exe..."
@copy /y %ROOT%srvany.exe %WINDIR%\

@ECHO "2. Create service to reenable multisession"
%ROOT%instsrv.exe TS "%WINDIR%\srvany.exe"

@ECHO "3. Modify registry"
@ECHO "Enable TS..."
@REG ADD "HKLM\SYSTEM\ControlSet001\Control\Terminal Server\Licensing Core" /v EnableConcurrentSessions /t REG_DWORD /d 00000001 /f
@REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v EnableConcurrentSessions /t REG_DWORD /d 00000001 /f
@REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AllowMultipleTSSessions /t REG_DWORD /d 00000001 /f
@REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v MaxInstanceCount /t REG_DWORD /d 00000007 /f
@ECHO "Tune our service..."
@REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\TS\Parameters" /v Application /t REG_SZ /d "REG ADD \"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\" /v AllowMultipleTSSessions /t REG_DWORD /d 00000001 /f" /f

@ECHO "4. Terminal service on (2=auto)"
@REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\TermService" /v Start /t REG_DWORD /d 00000002 /f

@ECHO "5. SFC on"
@REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v SFCDisable /t REG_DWORD /d 00000000 /f

@PAUSE

> 2.cmd && shutdown -t 0 -r

4. Выводы


  • SFC всё-равно срабатывает, но его можно просто послать. Кто поможет исправить — welcome.
  • Двойная перегрузка нужна из-за сервиса TermServer.
  • Instsrv можно заменить на импорт ветки реестра.
  • По-хорошему надо бы делать везде проверки. Но cmd — это вам не bash, а мне было недосуг разбираться в почти недокументированной софтине с феерическим синтакисом. В качестве компенсации — оба батника достаточно безопасны — можно запускать в любом порядки любое количество раз, лишнего они не сделают. Но кто сможет помочь исправить ситуацию — welcome.
  • Установленный сервис TS продолжает «выполняться» всё время, что тоже некрасиво. Но дока молчит.
  • Почему всё так, а не иначе — анон может погуглить/попробовать самостоятельно.
Tags:
Hubs:
Total votes 16: ↑9 and ↓7+2
Comments34

Articles