Einzelnen Beitrag anzeigen

Benutzerbild von HeikoAdams
HeikoAdams

Registriert seit: 12. Jul 2004
Ort: Oberfranken
661 Beiträge
 
FreePascal / Lazarus
 
#1

Data Execution Prevention (DEP) aktivieren

  Alt 5. Aug 2010, 14:19
Da bei älteren Delphi-Versionen die Data Execution Prevention noch manuell aktiviert werden muss, kann man die nachfolgende Funktion dafür nutzen.
Delphi-Quellcode:
function ActiveDEP: Cardinal;
const
  OptIn: Byte = 2;
  PROCESS_DEP_ENABLE = 1;
var
  Info: TOSVersionInfo;
  SetProcessDEPPolicy: function (dwFlags: dword): Boolean; stdcall;
  GetSystemDEPPolicy: function: Word; stdcall;
  nStatus: Word;
  h :HINST;
begin
  Result := S_FALSE;
  ZeroMemory(@Info, SizeOf(TOSVersionInfo));
  Info.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);

  // Wir benötigen mind. Windows XP SP3
  if Windows.GetVersionEx(Info)
    and (Info.dwMajorVersion >= 6)
    or ((Info.dwMajorVersion = 5)
    and (Info.dwMinorVersion = 1)
    and (lstrcmpi(Info.szCSDVersion, 'Service Pack 3') = 0)) then
  begin
    h := SafeLoadLibrary('Kernel32.dll', SEM_NOOPENFILEERRORBOX);
    nStatus := OptIn;

    // Den aktuellen systemweiten Status der Datenausführungsverhinderung (DEP) abfragen
    if (h <> 0) then
    begin
      @GetSystemDEPPolicy := GetProcAddress(h, 'GetSystemDEPPolicy');
      FreeLibrary(h);
      nStatus := GetSystemDEPPolicy();
    end;

    // Wenn der Staus auf OptIn (=2) steht, dann kann DEP für den aktuelle Prozess aktviert werden
    if (nStatus = OptIn) then
    begin
      h := SafeLoadLibrary('Kernel32.dll', SEM_NOOPENFILEERRORBOX);

      if (h <> 0) then
      begin
        @SetProcessDEPPolicy := GetProcAddress(h, 'SetProcessDEPPolicy');
        FreeLibrary(h);

        if not SetProcessDEPPolicy(PROCESS_DEP_ENABLE) then
          Result := GetLastError
        else
          Result := S_OK;
      end;
    end;
  end
  else
    Result := ERROR_OLD_WIN_VERSION;
end;
Jeder kann ein Held werden und Leben retten!
Einfach beim NKR oder der DKMS als Stammzellenspender registrieren! Also: worauf wartest Du noch?

Geändert von HeikoAdams ( 5. Aug 2010 um 16:54 Uhr)
  Mit Zitat antworten Zitat