![]() |
AW: Data Execution Prevention (DEP) aktivieren
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; |
AW: Data Execution Prevention (DEP) aktivieren
Prüfe besser auf das Vorhandensein des Features, als auf die Windowsversion. In Kompatibilitätsmodus wird DEP ausgeschaltet bleiben. 8-)
EDIT: Rückgabewert ist S_FALSE, wenn Opt-Out aktiv ist. |
AW: Data Execution Prevention (DEP) aktivieren
Zitat:
Zitat:
|
AW: Data Execution Prevention (DEP) aktivieren
1. Prüfe, ob die DEP Funktion existiert.
2. Ja, bei Opt-Out ist DEP auch normal aktiv. D.h. die Funktion ist schon erfolgreich, bevor sie überhaupt etwas gemacht hat. In diesem Fall müsste man S_FALSE nur dann zurückliefern, wenn DEP vom Benutzer für dieses Prozess manuell ausgeschalten wurde. BTW: AlwaysOn bedeutet auch, dass DEP standardmäßig aktiv ist (und nicht ausgeschalten werden kann). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz