Как полностью устранить проблему, связанную с настройками автоматического обновления

Тема в разделе "Рекомендации и инструкции", создана пользователем akok, 15 авг 2010.

Статус темы:
Закрыта.
  1. akok
    Оффлайн

    akok Команда форума Администратор

    Сообщения:
    12.452
    Симпатии:
    13.952
    Данный скрипт распространяется свободно и может быть модицифирован по согласованию с авторами - представителями SafeZone.cc
    При публикации скрипта данный комментарий обязателен.

    Описание:

    Из-за своей универсальности скрипт применяется целиком, как есть, для русской и английской локализации Windows. Определение локализации автоматическое.

    Скриптом устраняется проблемы вида %fystemroot% как для обеих служб, так и для одной из них: BITS или wuauserv

    Скрипт автоматически определит службу с повреждённым параметром и исправит неправильное значение параметра(ов) ImagePath
    Код (Text):
    %[B][COLOR="Red"]f[/COLOR][/B]ystemRoot%\system32\svchost.exe -k netsvcs
    на правильное
    Код (Text):
    %SystemRoot%\system32\svchost.exe -k netsvcs
    Также скрипт применяется для случаев вида
    Кратко: некоторые вредоносы удаляют часть параметров из веток и\или параметров в службах BITS и\или wuauserv. И в результате мы можем наблюдать, что в этих ветках обычно присутствует всего две ветки и два параметра: ImagePath и ServiceDll.

    Скрипт автоматически производит проверку на наличие необходимых параметров и добавляет, а также исправляет, если это необходимо, на нужные\недостающие.

    При выполнении скрипта перед перезаписью для страховки делается бекап двух веток
    Код (Text):
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BITS
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wuauserv
    Файлы бекапа BITS.reg и wuauserv.reg


    AVZ, меню "Файл - Выполнить скрипт" -- Скопировать ниже написанный скрипт-- Нажать кнопку "Запустить".
    Код (Text):
    var
    DescriptionTextWuauServ, DispayNameTextWuauServ, DescriptionTextBITS: String;
    DispayNameTextBITS, FullPathSystem32, NameFolderSystem32, FileServiceDll: String;
    ImagePathStr, RootStr, SubRootStr, LangID: string;
    AllRoots, AllKeys, RootsRestored, KeysRestored, KeysFixed: integer;
    FinishMsg, RestoreMsg, FixMsg, CheckMsg: String;
    RegSectMsg, ParamMsg, ParamValueMsg, InRegSectMsg, CorrectMsg, RestMsg: String;

    procedure CheckAndRestoreSection(Root: String);
    begin
    Inc(AllRoots);
    if RegKeyExistsEx('HKLM', Root)
      then RegKeyResetSecurity('HKLM', Root)
      else
       begin
        Inc(RootsRestored);
        RegKeyCreate('HKLM', Root);
        AddToLog(RegSectMsg + Root + RestMsg);
       end;
    end;

    procedure CheckAndRestoreSubSection;
    begin
    CheckAndRestoreSection(SubRootStr);
    end;

    procedure RestoredMsg(Root, Param: String);
    begin
    AddToLog(ParamMsg + Param + InRegSectMsg + Root + RestMsg);
    Inc(KeysRestored);
    end;

    procedure FixedMsg(Root, Param: String);
    begin
    AddToLog(ParamValueMsg + Param + InRegSectMsg + Root + CorrectMsg);
    Inc(KeysFixed);
    end;

    procedure RestoreStrParam(Root, Param, Value: String);
    begin
    RegKeyStrParamWrite('HKLM', Root, Param, Value);
    RestoredMsg(Root, Param);
    end;

    procedure CheckAndRestoreStrParam(Root, Param, Value: String);
    begin
    Inc(AllKeys);
    if not RegKeyParamExists('HKLM', Root, Param)
      then RestoreStrParam(Root, Param, Value);
    end;

    procedure CheckAndRestoreIntParam(Root, Param: String; Value: Integer);
    begin
    Inc(AllKeys);
    if not RegKeyParamExists('HKLM', Root, Param) then
      begin
       RegKeyIntParamWrite('HKLM', Root, Param, Value);
       RestoredMsg(Root, Param);
      end;
    end;

    procedure CheckAndRestoreMultiSZParam(Param, Value: String);
    begin
    Inc(AllKeys);
    if not RegKeyParamExists('HKLM', RootStr, Param)
      then
       begin
        ExecuteFile('REG ADD HKLM\' + RootStr + ' /v ' + Param + Value, '', 0, 10000, true);
        RestoredMsg(RootStr, Param);
       end;
    end;

    // Исправление значения параметра ImagePath для служб 'wuauserv' и 'BITS'
    procedure ImagePathFix(Node, Srv: String);
    var RegStr: String;
    begin
    RegStr:= 'SYSTEM\' + Node + '\Services\' + Srv;
    if RegKeyExistsEx('HKLM', RegStr) then
      begin
       Inc(AllKeys);
       RegKeyResetSecurity('HKLM', RegStr);
       RegKeyStrParamWrite('HKLM', RegStr, 'ImagePath', ImagePathStr);
       FixedMsg(RegStr, 'ImagePath');
      end;
    end;

    { Выполнение исправление всех ключей в ветках -
       'HKLM\SYSTEM\CurrentControlSet\Services\BITS' и 'HKLM\SYSTEM\CurrentControlSet\Services\wuauserv'}
    procedure CorrectRegistryRoot(DescriptionText, DisplayNameText, Srv: String);
    var FileServiceDll, CCSNumber: string;
         i : integer;
    begin
    if Srv = 'BITS'
      then FileServiceDll := FullPathSystem32 + 'qmgr.dll'
      else FileServiceDll := FullPathSystem32 + 'wuauserv.dll';
    RootStr:= 'SYSTEM\CurrentControlSet\Services\' + Srv;

    CheckAndRestoreSection(RootStr);

    CheckAndRestoreStrParam(RootStr, 'Description', DescriptionText);
    CheckAndRestoreStrParam(RootStr, 'DisplayName', DisplayNameText);
    CheckAndRestoreStrParam(RootStr, 'ObjectName', 'LocalSystem');

    Inc(AllKeys);
    if not RegKeyParamExists('HKLM', RootStr, 'ImagePath')
      then RestoreStrParam(RootStr, 'ImagePath', ImagePathStr)
      else
       begin
        Dec(AllKeys);
        if LowerCase(RegKeyStrParamRead('HKLM', RootStr, 'ImagePath')) <> LowerCase(ImagePathStr)
         then
          for i:= 0 to 999 do
           begin
            if i > 0
             then CCSNumber:= FormatFloat('ControlSet000', i)
             else CCSNumber:= 'CurrentControlSet';
             ImagePathFix(CCSNumber, Srv);
            end;
       end;

    CheckAndRestoreIntParam(RootStr, 'ErrorControl', 1);
    CheckAndRestoreIntParam(RootStr, 'Start', 2);
    CheckAndRestoreIntParam(RootStr, 'Type', 32);

    if Srv = 'BITS'
      then
       begin
        CheckAndRestoreMultiSZParam('DependOnService', ' /t REG_MULTI_SZ /d RpcSs');
        CheckAndRestoreMultiSZParam('DependOnGroup', ' /t REG_MULTI_SZ');
       end;

    SubRootStr:= RootStr + '\Enum';
    CheckAndRestoreSubSection;

    CheckAndRestoreStrParam(SubRootStr, '0', 'Root\LEGACY_' + UpperCase(Srv) + '\0000');
    CheckAndRestoreIntParam(SubRootStr, 'Count', 1);
    CheckAndRestoreIntParam(SubRootStr, 'NextInstance', 1);

    SubRootStr := RootStr + '\Security';
    CheckAndRestoreSubSection;

    Inc(AllKeys);
    if not RegKeyParamExists('HKLM', SubRootStr, 'Security') then
      begin
       RegKeyBinParamWrite('HKLM', SubRootStr, 'Security', '01,00,14,80,78,00,00,00,84,00,00,00,14,00,00,00,30,00,00,00,02,00,1c,00,01,00,00,00,02,80,14,00,ff,00,0f,00,01,01,00,00,00,00,00,01,00,00,00,00,02,00,48,00,03,00,00,00,00,00,14,00,9d,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,14,00,ff,01,0f,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,01,01,00,00,00,00,00,05,12,00,00,00');
       RestoredMsg(SubRootStr, 'Security');
      end;

    SubRootStr:= RootStr + '\Parameters';
    CheckAndRestoreSubSection;

    Inc(AllKeys);
    if not RegKeyParamExists('HKLM', SubRootStr, 'ServiceDll')
      then
      begin
       RegKeyParamWrite('HKLM', SubRootStr, 'ServiceDll', 'REG_EXPAND_SZ', FileServiceDll);
       RestoredMsg(SubRootStr, 'ServiceDll');
      end
       else
        if LowerCase(RegKeyStrParamRead('HKLM', SubRootStr, 'ServiceDll')) <> LowerCase(FileServiceDll)
         then
          begin
           RegKeyParamWrite('HKLM', SubRootStr, 'ServiceDll', 'REG_EXPAND_SZ', FileServiceDll);
           FixedMsg(SubRootStr, 'ServiceDll');
          end
    end;

    { Главное выполнение }
    begin
    ClearLog;
    ExpRegKey('HKLM', 'SYSTEM\CurrentControlSet\Services\wuauserv', 'wuauserv.reg');
    ExpRegKey('HKLM', 'SYSTEM\CurrentControlSet\Services\BITS', 'BITS.reg');
    LangID:= RegKeyStrParamRead('HKLM', 'SYSTEM\CurrentControlSet\Control\Nls\Language', 'InstallLanguage');
    if LangID = '0419'
      then
       begin
        DescriptionTextWuauServ:= 'Включает загрузку и установку обновлений Windows. Если служба отключена, то на этом компьютере нельзя будет использовать возможности автоматического обновления или веб-узел Центра обновления Windows.';
        DispayNameTextWuauServ:= 'Автоматическое обновление';
        DescriptionTextBITS:= 'Обеспечивает передачу данных между клиентами и серверами в фоновом режиме. Если служба BITS отключена, такие возможности, как Windows Update, не могут правильно работать.';
        DispayNameTextBITS:= 'Фоновая интеллектуальная служба передачи (BITS)';
        AddToLog('Операционная система - русская');
        FinishMsg:= '–––– Восстановление завершено ––––';
        RestoreMsg:= 'Восстановлено разделов\параметров: ';
        FixMsg:= 'Исправлено параметров: ';
        CheckMsg:= 'Проверено разделов\параметров: ';
        RegSectMsg:= 'Раздел реестра HKLM\';
        ParamMsg:= 'Параметр ';
        ParamValueMsg:= 'Значение параметра ';
        InRegSectMsg:= ' в разделе реестра HKLM\';
        CorrectMsg:= ' исправлено на оригинальное.';
        RestMsg:= ' восстановлен.';
       end
      else
       if LangID = '0409'
        then
         begin
          DescriptionTextWuauServ:= 'Enables the download and installation of Windows updates. If this service is disabled, this computer will not be able to use the Automatic Updates feature or the Windows Update Web site.';
          DispayNameTextWuauServ := 'Automatic Updates';
          DescriptionTextBITS:= 'Transfers data between clients and servers in the background. If BITS is disabled, features such as Windows Update will not work correctly.';
          DispayNameTextBITS:= 'Background Intelligent Transfer Service';
          AddToLog('Operation system - english');
          FinishMsg:= '–––– Restoration finished ––––';
          RestoreMsg:= 'Sections\parameters restored: ';
          FixMsg:= 'Parameters corrected: ';
          CheckMsg:= 'Sections\parameters checked: ';
          RegSectMsg:= 'Registry section HKLM\';
          ParamMsg:= 'Parameter ';
          ParamValueMsg:= 'Value of parameter ';
          InRegSectMsg:= ' in registry section HKLM\';
          CorrectMsg:= ' corrected on original.';
          RestMsg:= ' restored.';
         end;
    AddToLog('');

    { Определение папки X:\Windows\System32\ }
    NameFolderSystem32:= RegKeyStrParamRead('HKLM', 'SYSTEM\CurrentControlSet\Control\Windows', 'SystemDirectory');
    ImagePathStr:= NameFolderSystem32 + '\svchost.exe -k netsvcs';
    Delete(NameFolderSystem32, 1, pos('\', NameFolderSystem32) - 1);
    FullPathSystem32:= GetEnvironmentVariable('WinDir') + NameFolderSystem32 + '\';

    AllRoots:= 0;
    AllKeys:= 0;
    RootsRestored:= 0;
    KeysRestored:= 0;
    KeysFixed:= 0;

    CorrectRegistryRoot(DescriptionTextBITS, DispayNameTextBITS, 'BITS');
    CorrectRegistryRoot(DescriptionTextWuauServ, DispayNameTextWuauServ, 'wuauserv');

    AddToLog('');
    AddToLog(FinishMsg);
    AddToLog('');
    AddToLog(RestoreMsg + IntToStr(RootsRestored) + ' \ ' + IntToStr(KeysRestored));
    AddToLog(FixMsg + IntToStr(KeysFixed));
    AddToLog(CheckMsg + IntToStr(AllRoots) + ' \ ' + IntToStr(AllKeys));
    SaveLog(RegKeyStrParamRead('HKEY_CURRENT_USER', 'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', 'Desktop') + '\Correct_wuauserv&BITS.log');
    end.
    После выполнения скрипта на рабочем столе появится текстовый файл Correct_wuauserv&BITS. Его необходимо прикрепить к следующему посту в теме где вам оказывает помощь.
     
    Последнее редактирование: 31 мар 2015
    fseto, mike 1, Kиpилл и 33 другим нравится это.
Статус темы:
Закрыта.

Поделиться этой страницей