setProcessDEPPolicy 函数 (winbase.h)

(32 位进程的 DEP) 和 DEP-ATL thunk 仿真设置更改数据执行防护。

语法

BOOL SetProcessDEPPolicy(
  [in] DWORD dwFlags
);

参数

[in] dwFlags

可以是以下一个或多个值的 DWORD

含义
0
如果 DEP 系统策略为 OptIn 或 OptOut,并且为进程启用了 DEP,则将 dwFlags 设置为 0 将禁用进程的 DEP。
PROCESS_DEP_ENABLE
0x00000001
在当前进程上永久启用 DEP。 通过设置 PROCESS_DEP_ENABLE为进程启用 DEP 后,在进程的生命周期内无法禁用 DEP。
PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION
0x00000002
禁用当前进程的 DEP-ATL thunk 仿真,这会阻止系统截获源自活动模板库 (ATL) thunk 层的 NX 错误。 有关详细信息,请参见“备注”部分。 只能使用 PROCESS_DEP_ENABLE 指定此标志。

返回值

如果函数成功,则返回 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

另请参阅

数据执行保护

GetProcessDEPPolicy

GetSystemDEPPolicy