DelphiXe; Xp,Vista,Win7,WSrv2008R2;
0.DEP(Data Execution Prevention) CPU supported
Function isCpuDEP:bool;
begin
Result:=... //???
end;
1.How to define, DEP is ON in system?
Function isEnableDEP:bool; // Win Xp comparable
begin
Result:=false;if isCpuDEP=false then exit;
Result:=... //???
end;
2.To define, that if DEP it is enabled, and also enabled for ALL programs and services?
Function isEnableDEPForAllProgram:bool;
begin
Result:=false;if isEnableDEP=false then exit;
Result:=... //???
end;
3.Get DEP program list?
Function GetDEPProgramList:TStringList;
begin
Result:=nil;if isEnableDEPForAllProgram=false then exit;
Result:=Tstringlist.Create;
Result:=... //???
end;
The below uses GetProcessDEPPolicy
for point (1):
type
TGetProcessDEPPolicy =
function(Process: THandle; out Flags: DWORD; out Permanent: Bool): Bool; stdcall;
const
PROCESS_DEP_ENABLE = $00000001;
PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION = $00000002;
procedure TForm1.Button1Click(Sender: TObject);
var
GetProcessDEPPolicy: TGetProcessDEPPolicy;
DEPFlags: DWORD;
IsPermanent: Bool;
begin
@GetProcessDEPPolicy :=
GetProcAddress(GetModuleHandle(kernel32), 'GetProcessDEPPolicy');
if Assigned(GetProcessDEPPolicy) then begin
if GetProcessDEPPolicy(GetCurrentProcess, DEPFlags, IsPermanent) then begin
if (DEPFlags and PROCESS_DEP_ENABLE) = PROCESS_DEP_ENABLE then
ShowMessage('DEP enabled')
else
ShowMessage('DEP disabled');
end else
raise EOSError.Create(SysErrorMessage(GetLastError));
end else
raise EOSError.Create('Unsupported OS');
end;
For point (2), you can use GetSystemDEPPolicy
in a similar fashion.
For point (3), you can enumerate processes and find out the ones running with DEP.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With