Администраторы рабочих мест под Windows знают, какая это морока — в Пнд. с утра внезапно выгонять
всех пользователей из сеансов и срочно обновлять отечественное ПО. Выход — одновременная работа в Windows XP пользователя и администратора.
Рецепты в интернетах немного неточны, расчитаны на мышку, не работают в домене, делают неизвестно что еще — выбери X из Y.
Мы же с вами изготовим нужное средство из известных материалов, работающее просто, быстро и без мышки (Linux way, да).
Note: юридические вопросы не рассматриваются.
Кладем всё в одну [сетевую] папку и радостно выпрямляем ручки.
1.cmd:
> 1.cmd && shutdown -t 0 -r
2.cmd:
> 2.cmd && shutdown -t 0 -r
всех пользователей из сеансов и срочно обновлять отечественное ПО. Выход — одновременная работа в 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 "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 продолжает «выполняться» всё время, что тоже некрасиво. Но дока молчит.
- Почему всё так, а не иначе — анон может погуглить/попробовать самостоятельно.
