Скрипт по замене файла beep.sys

Тема в разделе "Рекомендации и инструкции", создана пользователем Drongo, 26 апр 2011.

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

    Drongo Ассоциация VN/VIP Разработчик

    Сообщения:
    7.905
    Симпатии:
    8.222
    В лечении нередко бывают случаи когда повреждённый\патченый\отсутствующий файл необходимо заменить на целый и чистый. Примером такого случая можно считать пропатчивание системного файла beep.sys. Восстановить файл из дистрибутива вручную можно с помощью команды expand. Описание процесса распаковки всегда будет занимать некоторое время, поэтому мы предлагаем вам автоматический скрипт для восстановления файлов из дистрибутива и\или из dllcache (в случае если там находится чистый файл.)

    Логика скрипта простая, идёт сверка контрольных сумм MD5 файла из dllcache и исходного, файл присутствует в dllcache и если контрольные суммы не равны, подразумевается что исходный файл был подменён\пропатчен\повреждён.Восстановление файла будет произведено из dllcache. В случае если искомого файла в dllcache не будет по причинам кривых сборок или если пользователь самостоятельно отключил кеширование системных файлов с дальшейшей очисткой папки dllcache, то в этом случае файл будет восстановлен из пользовательской копии дистрибутива Windows. Перед применением скрипта попросите пользователя вставить диск с Windows в привод.

    Внимание, некоторые патчи по украшению систем (ResPath, WinStyle) также патчат системные файлы, относитесь к таким файлам с разумным скепсисом.

    Файлы можно восстанавливать в папки:
    1. C:\Windows
    2. C:\Windows\System32
    3. C:\Windows\System32\Drivers
    Для восстановления файлов используйте функцию FileRestore(CABNameFile, OriginalNameFile, NameFolder : String). Таких функций можно использовать несколько за раз. Некоторые файлы в дистрибутиве не будут сжаты в cab-архивы, поэтому в обоих параметрах можно написать оригинальные имена файлов. Ниже приведено несколько примеров использования функции:
    И собственно сам скрипт.

    Код (Text):
    procedure FileRestore(CABNameFile, OriginalNameFile, NameFolder : String);
    var i : integer;
    begin
    if (FileExists('%windir%\system32\dllcache\' + OriginalNameFile) and (CalkFileMD5('%windir%\system32\dllcache\' + OriginalNameFile) <> CalkFileMD5(NameFolder + OriginalNameFile))) then
      begin
        RenameFile(NameFolder + OriginalNameFile, NameFolder + 'Bakcup.bak');
        CopyFile('%windir%\system32\dllcache\' + OriginalNameFile, NameFolder + OriginalNameFile);
        DeleteFile(NameFolder + 'Bakcup.bak');
        AddToLog('Замена ' + OriginalNameFile + ' успешно произведена из dllcache');
      end
    else if not FileExists('%windir%\system32\dllcache\' + OriginalNameFile) then
      begin
        ShowMessage('Вставьте диск с Windows');
        for i := 65 to 90 do
          if(GetDriveType(Chr(i) + ':\') = 5) and (FileExists(Chr(i) + ':\i386\' + CABNameFile)) then
           begin
             ExecuteFile('expand.exe ' + Chr(i) + ':\I386\' + CABNameFile + ' ' + NameFolder + OriginalNameFile, '', 0, 10000, true);
             AddToLog('Замена успешно произведена из ' + Chr(i) + ':\I386\');
           end;
      end;
    end;

    begin
    FileRestore('BEEP.SY_', 'BEEP.SYS', '%windir%\system32\drivers\'); // Указываем имя: cab-имя и оригинальное
    SaveLog(GetAVZDirectory + 'SafeZone.log');
    end.
    После выполнения скрипта просите пользователя прикрепить лог SafeZone.log, который будет создан в папке утилиты AVZ.
     
    Последнее редактирование модератором: 13 окт 2015
    ysn, Alex.M, Kиpилл и 26 другим нравится это.
Статус темы:
Закрыта.

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