Subversion Repositories autosfx

Rev

Blame | Last modification | View Log | RSS feed

  1. program RemoveSignature;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   SysUtils,
  7.   Windows,
  8.   ImageHlp;
  9.  
  10. resourcestring
  11.   LNG_NOTFOUND = 'File not found';
  12.   LNG_REMOVE = 'Remove certificate from "%s".';
  13.   LNG_ERROR = 'Error while removing certificate. Error code: %s';
  14.   LNG_OPEN_ERROR = 'Error while opening file. Error code: %s.';
  15.   LNG_OK = 'OK';
  16.  
  17. var
  18.   fil, err: String;
  19.   x: Cardinal;
  20.   i: integer;
  21.  
  22. begin
  23.   WriteLn('ViaThinkSoft RemoveSignature');
  24.   WriteLn('');
  25.   WriteLn('Usage:');
  26.   WriteLn('RemoveSignature.exe [File1 [File2 ...]]');
  27.   WriteLn('');
  28.  
  29.   for i := 1 to ParamCount do
  30.   begin
  31.     fil := ParamStr(i);
  32.  
  33.     WriteLn(Format(LNG_REMOVE, [fil]));
  34.     Write(#9);
  35.  
  36.     if not FileExists(fil) then
  37.     begin
  38.       WriteLn(Format(LNG_NOTFOUND, [fil]));
  39.       ExitCode := 1;
  40.       Exit;
  41.     end;
  42.  
  43.     x := CreateFile(PChar(fil), GENERIC_READ or GENERIC_WRITE, 0,
  44.       nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  45.     try
  46.       if x = INVALID_HANDLE_VALUE then
  47.       begin
  48.         ExitCode := 1;
  49.         err := IntToHex(GetLastError, 8);
  50.         WriteLn(Format(LNG_OPEN_ERROR, [err]));
  51.       end
  52.       else
  53.       begin
  54.         if not ImageRemoveCertificate(x, 0) then
  55.         begin
  56.           ExitCode := 1;
  57.           err := IntToHex(GetLastError, 8);
  58.           WriteLn(Format(LNG_ERROR, [err]));
  59.         end
  60.         else
  61.         begin
  62.           WriteLn(LNG_OK);
  63.         end;
  64.       end;
  65.     finally
  66.       CloseHandle(x);
  67.     end;
  68.   end;
  69.  
  70.   Sleep(2000);
  71. end.
  72.