Registriert seit: 12. Jul 2004
Ort: Oberfranken
661 Beiträge
FreePascal / Lazarus
|
AW: Data Execution Prevention (DEP) aktivieren
9. Aug 2010, 15:44
So, ich habe meine Funktion mit Hilfe der JclSysInfo ein wenig überarbeitet:
Delphi-Quellcode:
function ActiveDEP: Cardinal;
const
OptIn: Byte = 2;
OptOut: Byte = 3;
PROCESS_DEP_ENABLE = 1;
var
Info: TOSVersionInfoEx;
SetProcessDEPPolicy: function(dwFlags: dword): Boolean; stdcall;
GetSystemDEPPolicy: function: Word; stdcall;
nStatus: Word;
h: HINST;
bVerOK: Boolean;
begin
Result := S_FALSE;
ZeroMemory(@Info, SizeOf(TOSVersionInfo));
Info.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
// Wir benötigen mind. Windows XP SP >= 3, Windows Vista SP >= 2 oder Windows 7
if GetVersionEx(Info) then
bVerOK := ((Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 1) and (Info.wServicePackMajor >= 3))
or ((Info.dwMajorVersion = 6) and (Info.dwMinorVersion = 0) and (info.wServicePackMajor >= 2))
or ((Info.dwMajorVersion >= 6) and (Info.dwMinorVersion > 0))
else
bVerOK := FalsE;
if bVerOK then
begin
// Beim Windows Server ist die System-Policy standardmäßig "Opt Out", beim Windows Client "Opt In"
if (Info.wProductType in [VER_NT_SERVER, VER_NT_DOMAIN_CONTROLLER]) then
nStatus := OptOut
else
nStatus := OptIn;
// Den aktuellen systemweiten Status der Datenausführungsverhinderung (DEP) abfragen
h := SafeLoadLibrary('Kernel32.dll', SEM_NOOPENFILEERRORBOX);
if Succeeded(h) then
begin
@GetSystemDEPPolicy := GetProcAddress(h, 'GetSystemDEPPolicy');
FreeLibrary(h);
nStatus := GetSystemDEPPolicy();
end;
// Wenn die System-Policy auf OptIn steht, dann kann DEP für den aktuelle Prozess aktviert werden
if (nStatus = OptIn) then
begin
h := SafeLoadLibrary('Kernel32.dll', SEM_NOOPENFILEERRORBOX);
if Succeeded(h) then
begin
@SetProcessDEPPolicy := GetProcAddress(h, 'SetProcessDEPPolicy');
FreeLibrary(h);
// DEP für den aktuelle Prozess aktivieren
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?
|
|
Zitat
|