Администраторы рабочих мест под Windows знают, какая это морока — в Пнд. с утра внезапно выгонять
всех пользователей из сеансов и срочно обновлять отечественное ПО. Выход — одновременная работа в Windows XP пользователя и администратора.
Рецепты в интернетах немного неточны, расчитаны на мышку, не работают в домене, делают неизвестно что еще — выбери X из Y.
Мы же с вами изготовим нужное средство из известных материалов, работающее просто, быстро и без мышки (Linux way, да).
Note: юридические вопросы не рассматриваются.
1. Цель работы
- Подменить нужную dll
- Поправить/добавить ключи реестра
- Обеспечить восстановление статус кво после перегрузки
2. Приборы и материалы
- Windows XP в домене
- Исправленная на 3 байта termsrv.dll нужной версии (в интернетах)
- srvany.exe (в каком-нибудь ResourceKit или отдельно)
- instsrv.exe (там же)
- Создать два батника (руками)
Кладем всё в одну [сетевую] папку и радостно выпрямляем ручки.
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