我有一个在Windows 10上运行的32位可执行文件。系统DEP设置为OptIn。
我调用GetProcessDEPPolicy,它返回:
dwFlags == 0 // DEP is disabled
bPermanent == 184 // which means TRUE, so permanent
这意味着我不应该更改它。但是,这在启动时是正确的,因此我应该能够进行更改。
无论如何,如果我忽略bPermanent并使用PROCESS_DEP_ENABLE调用SetProcessDEPPolicy,然后再次调用GetProcessDEPPolicy,则它将返回:
dwFlags == 1 // DEP is enabled
bPermanent == 1 // Also TRUE, so supposedly still permanent
而且,如果我再次调用SetProcessDEPPolicy,那么它将开始失败,并且无法将其改回。
所以我的问题是:为什么GetProcessDEPPolicy在第一次调用时返回bPermanent?它肯定看起来像一个错误/回归,并且我认为这是行为的改变,因为此代码已经存在了十年,并且我确定它在Windows 7和8中可以正常工作。
最佳答案
这是GetProcessDEPPolicy函数中的缺陷。您可以通过使用GetProcesMitigationPolicy函数来解决此问题。
PROCESS_MITIGATION_DEP_POLICY policy = { 0 }; // important to preinitialize with 0
GetProcessMitigationPolicy(hProcess, ProcessDEPPolicy, &policy, sizeof(policy));
对不起。
关于windows - GetProcessDEPPolicy表示永久,但不是,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59902591/