У меня есть 32-битный исполняемый файл, работающий на Windows 10. Системный DEP установлен в OptIn.
Я вызываю GetProcessDEPPolicy, и он возвращает:
dwFlags == 0 // DEP is disabled
bPermanent == 184 // which means TRUE, so permanent
Это означает, что я не должно быть в состоянии изменить это. Тем не менее, это правильно при запуске, поэтому я ДОЛЖЕН иметь возможность изменить его.
В любом случае, если я проигнорирую bPermanent и вызову SetProcessDEPPolicy с PROCESS_DEP_ENABLE, а затем снова вызовет GetProcessDEPPolicy, тогда он вернет:
dwFlags == 1 // DEP is enabled
bPermanent == 1 // Also TRUE, so supposedly still permanent
И если я снова вызову SetProcessDEPPolicy, ТОГДА он начинает отказывать, и я не могу изменить его обратно.
Итак, мой вопрос: почему GetProcessDEPPolicy возвращает bPermanent для первого вызова? Это похоже на ошибку / регрессию, и я думаю, что это изменение в поведении, так как этот код существует уже десять лет, и я уверен, что он работал правильно в Windows 7 & 8.