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

в 13:17, , рубрики: cmd, terminal server, windows, Windows XP, системное администрирование, метки: , , ,

Администраторы рабочих мест под 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 "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" /v SFCDisable /t REG_DWORD /d 00000001 /f
@ECHO "2. Terminal service off"
@REG ADD "HKLMSYSTEMCurrentControlSetServicesTermService" /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%ServicePackFilesi386
@copy /y %ROOT%termsrv.dll %WINDIR%System32dllcache
@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 "HKLMSYSTEMControlSet001ControlTerminal ServerLicensing Core" /v EnableConcurrentSessions /t REG_DWORD /d 00000001 /f
@REG ADD "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" /v EnableConcurrentSessions /t REG_DWORD /d 00000001 /f
@REG ADD "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" /v AllowMultipleTSSessions /t REG_DWORD /d 00000001 /f
@REG ADD "HKLMSOFTWAREPoliciesMicrosoftWindows NTTerminal Services" /v MaxInstanceCount /t REG_DWORD /d 00000007 /f
@ECHO "Tune our service..."
@REG ADD "HKLMSYSTEMCurrentControlSetServicesTSParameters" /v Application /t REG_SZ /d "REG ADD "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" /v AllowMultipleTSSessions /t REG_DWORD /d 00000001 /f" /f

@ECHO "4. Terminal service on (2=auto)"
@REG ADD "HKLMSYSTEMCurrentControlSetServicesTermService" /v Start /t REG_DWORD /d 00000002 /f

@ECHO "5. SFC on"
@REG ADD "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" /v SFCDisable /t REG_DWORD /d 00000000 /f

@PAUSE

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

4. Выводы

  • SFC всё-равно срабатывает, но его можно просто послать. Кто поможет исправить — welcome.
  • Двойная перегрузка нужна из-за сервиса TermServer.
  • Instsrv можно заменить на импорт ветки реестра.
  • По-хорошему надо бы делать везде проверки. Но cmd — это вам не bash, а мне было недосуг разбираться в почти недокументированной софтине с феерическим синтакисом. В качестве компенсации — оба батника достаточно безопасны — можно запускать в любом порядки любое количество раз, лишнего они не сделают. Но кто сможет помочь исправить ситуацию — welcome.
  • Установленный сервис TS продолжает «выполняться» всё время, что тоже некрасиво. Но дока молчит.
  • Почему всё так, а не иначе — анон может погуглить/попробовать самостоятельно.

Автор: TIEugene

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js