News & Events
Exemplo de CheckSum
Difficulty level not set for this Post
Olá pessoal,
O Rubem Rocha da Lista-Delphi me passou uma dica através do Walter Chagas pra colocar no blog. Trata-se de uma função interessante de CheckSum que se utiliza de API do Windows. Estou postando a função abaixo e na seção de downloads tem um pequeno exemplo.
É necessário criar a função e declarar a unit ImageHlp no uses do form.
//Uses do projeto
...
uses
Windows, ImageHlp;
//Função
function TForm1.ComputePEChecksum(FileName: string): DWORD;
var
H, hMap : Cardinal;
pMem : Pointer;
HeaderSum : DWORD;
CheckSum : DWORD;
fSizeHigh : DWORD;
fSizeLow : DWORD;
Nth : PImageNtHeaders;
label
CleanUp;
begin
pMem := nil;
Result := 0;
HeaderSum := 0;
CheckSum := 0;
H := Windows.CreateFile(PChar(FileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
if H = INVALID_HANDLE_VALUE then
Exit;
fsizelow := Windows.GetFileSize(H, Pointer(@fSizeHigh));
hMap :=
Windows.CreateFileMapping(H, nil, PAGE_READONLY, fSizeHigh, fsizeLow, nil);
if hMap = 0 then
goto CleanUp;
pMem := Windows.MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);
if not Assigned(pMem) then
goto CleanUp;
Nth := CheckSumMappedFile(pMem, fsizeLow, @HeaderSum, @CheckSum);
if not Assigned(Nth) then
CheckSum := 0;
CleanUp:
if Assigned(pMem) then
Windows.UnmapViewOfFile(pMem);
if hMap <> 0 then
Windows.CloseHandle(hMap);
if H <> 0 then
Windows.CloseHandle(H);
Result := CheckSum;
end;
//Exemplo e uso
procedure TForm1.Button1Click(Sender: TObject);
begin
with TOpenDialog.Create(Self) do
begin
InitialDir := ExtractFilePath(ParamStr(0));
DefaultExt := '.exe';
Filter := '(*.EXE) Arquivos de Programas|*.EXE|(*.*) Todos os arquivos|*.*';
if Execute then
begin
Edit1.Text := FileName;
SpinEdit1.Value := ComputePEChecksum(FileName);
end
end;
end;
Baixe o exemplo na seção downloads.
Dica enviada por Rubem Rocha e Walter Chagas.
Parabéns, sua inscrição no Feed RSS foi aceita. Leia em primeira mão todas as notícias do blog.
Siga @tdevrocks no Twitter agora e fique por dentro de todas as atualizações do blog.
Siga também o autor @asrsantos
Author: Adriano Santos
Adriano Santos é especialista em linguagens de desenvolvimento, Embarcadero MVP, possui +1000 artigos e vídeo-aulas publicadas em revistas e websites especializados, ex-editor chefe das revistas ClubeDelphi e WebMobile. Atualmente Diretor de Operações na startup GET IT! Technology e Consultor Senior na Embarcadero do Brasil.
Fazia MUITOOO tempo que não via label/goto, principalmente em delphi…