Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Boa Soft

Компьютерный шаман


Сообщения: 2910
Благодарности: 956

Профиль | Сайт | Отправить PM | Цитировать


Вложения
Тип файла: 7z CrcTools.7z
(2.7 Kb, 21 просмотров)

Цитата mbgroot:
Что-то не так... Патчер отрабатывает прекрасно - ядра патчатся. Но получается, что аддон несовсем корректен - патчатся файлы в папке UpdatePack-XPSP3-Rus\Files - один раз и навсегда. И ядра не обрабатываются modifype.exe - зачем он тогда в аддоне? Может корректнее переделать аддон таким образом, что бы ядра в папке UpdatePack-XPSP3-Rus\Files оставались оригинальными? И без обработки ядер программой modifype.exe установщик винды отказался их копировать с компат-диска... »
SOLON7,

Дабавте правку CRC в PE заголовке файла. Для драйверов и файлов ядра это жизненно важно. строчек 10 кода.

Код: Выделить весь код
function CorrectLdrChecSumm(FileName:string):boolean;

var

 hFile: THandle ;
 hFileMapping: THandle;
 pBaseAddress: pointer;
 pStartAddress: pointer;
 dwHeaderSize: DWORD;
 dwFileLengt: DWORD ;
 dwHeaderSum: DWORD ; // Checksum as stated by Header
 dwCheckSum: DWORD ; // Calculated Checksum
 pNtheader: PIMAGE_NT_HEADERS;
 I: integer;
begin
 result:=false;
 hFile := CreateFile(PChar(Filename),
                     GENERIC_READ or GENERIC_WRITE,
                     FILE_SHARE_READ,
                     0,
                     OPEN_EXISTING,
                     FILE_ATTRIBUTE_NORMAL,
                     0 );
 if hFile <> INVALID_HANDLE_VALUE then begin
    dwFileLengt:=GetFileSize(hFile, nil);
    hFileMapping := CreateFileMapping(hFile, 0, PAGE_READWRITE, 0, 0, 0);
    if hFileMapping <> 0 then begin
       pBaseAddress := MapViewOfFile( hFileMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
       if pBaseAddress <> nil then begin
          dwHeaderSize:=0;
          pStartAddress:= Pointer(LongInt(pBaseAddress));
          for I := 0 to dwFileLengt div $10 do begin
            if PDword(pStartAddress)^ = PE_SIGNATURE_VS then break;
            if PDword(pStartAddress)^ = PE_SIGNATURE_DE then break;
            pStartAddress:= Pointer(LongInt(pStartAddress)+$10);
            inc(dwHeaderSize,$10);
          end;
          pNtheader:=nil;
          pNtheader:= CheckSumMappedFile(pStartAddress, dwFileLengt - dwHeaderSize, &dwHeaderSum, &dwCheckSum );
          if pNtheader<> nil then begin
             pNtheader.OptionalHeader.CheckSum:=dwCheckSum;
             result:=true;
          end;
         UnmapViewOfFile(pBaseAddress);
       end;
       CloseHandle(hFileMapping);
    end;
    CloseHandle(hFile);
 end;
end;

-------
Человеческая лень - главная движущая сила технического прогресса.

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:22, 20-11-2008 | #85