setProcessDEPPolicy 函数 (winbase.h)
(32 位进程的 DEP) 和 DEP-ATL thunk 仿真设置更改数据执行防护。
语法
BOOL SetProcessDEPPolicy(
[in] DWORD dwFlags
);
参数
[in] dwFlags
可以是以下一个或多个值的 DWORD 。
返回值
如果函数成功,则返回 TRUE。
如果函数失败,则返回 FALSE。 若要检索为此函数定义的错误值,请调用 GetLastError。
注解
SetProcessDEPPolicy 函数替代当前进程的系统 DEP 策略,除非在创建进程时指定了其 DEP 策略。 系统 DEP 策略设置必须为 OptIn 或 OptOut。 如果系统 DEP 策略为 AlwaysOff 或 AlwaysOn, 则 SetProcessDEPPolicy 将返回错误。 为进程启用 DEP 后,将忽略对 SetProcessDEPPolicy 的 后续调用。
在进程创建时使用 PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY 属性指定的 DEP 策略在进程的整个生命周期内无法更改。 在这种情况下,对 SetProcessDEPPolicy 的 调用失败, 并出现ERROR_ACCESS_DENIED。
SetProcessDEPPolicy 仅支持 32 位进程。 如果在 64 位进程中调用此函数,它将失败并 ERROR_NOT_SUPPORTED。
写入 ATL 7.1 及更早版本的应用程序可以尝试在标记为不可执行的页面上执行代码,这会触发 NX 错误并终止应用程序。 DEP-ATL thunk 仿真允许在启用 DEP 的情况下触发 NX 故障的应用程序运行。 有关 ATL 版本的信息,请参阅 ATL 和 MFC 版本号。
如果启用了 DEP-ATL thunk 仿真,系统将截获 NX 错误、模拟指令并处理异常,以便应用程序可以继续运行。 如果通过为进程设置 PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION 来禁用 DEP-ATL thunk 仿真,则不会截获 NX 错误,这在测试应用程序与 DEP 的兼容性时非常有用。
下表总结了系统 DEP 策略、DEP-ATL thunk 仿真和 SetProcessDEPPolicy 之间的交互。 若要获取系统 DEP 策略设置,请使用 GetSystemDEPPolicy 函数。
系统 DEP 策略 | DEP 行为 | DEP_ATL thunk 仿真行为 | SetProcessDEPPolicy 行为 |
---|---|---|---|
AlwaysOff 0 |
对操作系统和所有进程禁用。 | 不适用。 | 返回错误。 |
AlwaysOn 1 |
为操作系统和所有进程启用。 | 已禁用。 | 返回错误。 |
OptIn 2 Windows 客户端版本的默认配置。 |
为操作系统启用,为非系统进程禁用。 管理员可以为选定的可执行文件显式启用 DEP。 | 不适用。 |
可以为当前进程启用 DEP。
如果为当前进程启用了 DEP,则可以为该进程禁用 DEP-ATL thunk 仿真。 |
OptOut 3 Windows Server 版本的默认配置。 |
为操作系统和所有进程启用。 管理员可以显式禁用所选可执行文件的 DEP。 | 已启用。 |
可以为当前进程禁用 DEP。
如果对当前进程禁用 DEP,则会自动为该进程禁用 DEP-ATL thunk 仿真。 |
若要编译调用此函数的应用程序, 请将_WIN32_WINNT 定义为 0x0600 或更高版本。 有关详细信息,请参阅 使用 Windows 标头。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 带 SP1 的 Windows Vista、带 SP3 的 Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 [仅限桌面应用] |
目标平台 | Windows |
标头 | winbase.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |