Fix: не запускается служба "Удаленный вызов процедур (RPC)"
версия для печатиПосле перезагрузки компа не запустилась служба "Удаленный вызов процедур (RPC)". Очень многое зависит от этой службы. В итоге не работает восстановление системы, сетевое окружение, звук, Windows Installer, почти не работает консоль управления (MMC), на панели задач не показываются открытые окна и т.д. и т.п. Попытка ручного запуска приводит к ошибке "Неудается запустить ...(RPC) на xxxComp. Ошибка 5: Отказано в доступе". Антивирус ничего не нашел. Два дня копаний и комп удалось вернуть к жизни.
По рекомендации Microsoft, первое, что пробовал, найти и удалить ветку реестра [HKLM\SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Enum\ROOT\LEGACY_RPCSS]. Ее у меня не оказалось, возможно в результате каких-то установленных обновлений.
Далее, попытка восстановить параметры службы в реестре. Поскольку regedit.exe работал только на чтение/удаление (еще один побочный эффект), не получилось внести изменения. Да они и не нужны были, т.к. все было верно. Должно выглядеть вот так:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RpcSs]
"Description"="Обеспечивает сопоставление конечных точек и иных служб RPC."
"DisplayName"="Удаленный вызов процедур (RPC)"
"ErrorControl"=dword:00000001
"Group"="COM Infrastructure"
"ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,\
00,76,00,63,00,68,00,6f,00,73,00,74,00,20,00,2d,00,6b,00,20,00,72,00,70,00,\
63,00,73,00,73,00,00,00
"ObjectName"="NT AUTHORITY\\NetworkService"
"Start"=dword:00000002
"Type"=dword:00000010
"FailureActions"=hex:00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,\
00,02,00,00,00,60,ea,00,00
"ServiceSidType"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RpcSs\Parameters]
"ServiceDll"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,\
00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,\
72,00,70,00,63,00,73,00,73,00,2e,00,64,00,6c,00,6c,00,00,00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RpcSs\Security]
"Security"=hex:01,00,14,80,a8,00,00,00,b4,00,00,00,14,00,00,00,30,00,00,00,02,\
00,1c,00,01,00,00,00,02,80,14,00,ff,01,0f,00,01,01,00,00,00,00,00,01,00,00,\
00,00,02,00,78,00,05,00,00,00,00,00,14,00,8d,00,02,00,01,01,00,00,00,00,00,\
05,0b,00,00,00,00,00,18,00,ff,01,0f,00,01,02,00,00,00,00,00,05,20,00,00,00,\
20,02,00,00,00,00,18,00,8d,00,02,00,01,02,00,00,00,00,00,05,20,00,00,00,23,\
02,00,00,00,00,14,00,9d,00,00,00,01,01,00,00,00,00,00,05,04,00,00,00,00,00,\
18,00,9d,00,00,00,01,02,00,00,00,00,00,05,20,00,00,00,21,02,00,00,01,01,00,\
00,00,00,00,05,12,00,00,00,01,01,00,00,00,00,00,05,12,00,00,00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RpcSs\Enum]
"0"="Root\\LEGACY_RPCSS\\0000"
"Count"=dword:00000001
"NextInstance"=dword:00000001
Значение параметра start может отличаться. Изменить реестр все же можно, но при этом нужно загрузиться с MS ERD commander.
Следующие шаги просто распишу по пунктам. Общая идея в том, что нужно заменить файлы на заведомо рабочие. Их можно взять с другой машины или из дистрибутива Windows (как я сделал).
- Запустить консоль (Пуск > Выполнить: cmd)
- cd z:\i386 (там дистрибутив Windows)
- expand explorer.ex_ %TEMP%\explorer.exe
- expand svchost.ex_ %TEMP%\svchost.exe
- Запустить Диспетчер задач (Ctrl+Shift+Esc)
- Остановить процесс exlporer.exe
- copy %TEMP%\explorer.exe %SYSTEMROOT% /y
- Остановить все процессы svchost.exe. Внимание! После этого у вас будет 60 секунд до перезагрузки машины.
- copy %TEMP%\svchost.exe %systemroot%\system32 /y
Этот финт тоже не дал результатов. Еще вариант: запустить проверку всех защищенных системных файлов с заменой неправильных версий правильными. В консоли выполнить:
sfc /PURGECACHE - Очистка файлового кэша и немедленная проверка файловsfc /SCANONCE - Разовая проверка при следующей загрузке
Не помогло.. Тогда совсем брутальный ход - восстановление параметров безопасности. Опять же в консоли:
secedit /configure /cfg %windir%\repair\secsetup.inf /db secsetup.sdb /verboseПосле перезагрузки комп заработал, базовые сервисы стартовали. Появился новый косяк (а может он был с самого начала): под моей учеткой не запускался, как минимум, менеджер управления дисками и Windows Installer. Отказано в доступе. Можно через консоль восстановить права доступа к системному диску "по умолчанию":
secedit /configure /db %TEMP%\temp.mdb /Cfg %WINDIR%\inf\defltwk.inf /areas filestoreПосле чего нужно в ручную определить права для каждой учетки к [c:\Documents and Settings\UserXXX] или пересоздать их, смотря что проще.
В моем случае я просто назначил одинаковые права на весь системный диск, взяв за эталон доступ к каталогу [c:\windows]. К эталону добавил свою учетку в домене с полными правами к диску. Может это неправильно с точки зрения безопасности, но копаться с каждым каталогом отдельно у меня времени нет.
Что еще можно было предпринять
Пока комп "болел" вот этого не было в реестре:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_RPCSS\0000\Control]
"ActiveService"="RpcSs"
Возможно ручное добавление как-то бы изменило ситуацию.
Попытки ручного запуска сервиса, например через команду "net start rcpss" заканчивались ошибкой "Error 5: access denied". Я предполагаю, отказано в доступе потому, что сервис должен запускаться под учеткой системы - "NT AUTHORITY". В реестре есть такой параметр:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RpcSs]
"ObjectName"="NT AUTHORITY\\NetworkService"
Я бы попытался вписать сюда админскую учетку и опять запустить сервис. Но это только идея, не дожившая до реализации.
Еще вариант: использование эксплоита KiTrap0D для получения консоли с правами системы. Об этом эксплоите писали в Хакере. Собственно бинарник здесь. Вот только у меня стоят виндовские обновки, так что похоже данный эксплоит уже не работает.
[1oo%, EoF]Похожие материалы: Флешка с LiveCD
Понравилась статья? Расскажите о ней друзьям: