我有一个在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/

10-13 06:51