Share via


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 之後,就無法在程式存留期間停用它。
PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION
0x00000002
停用目前程式的 DEP-ATL Thunk 模擬,以防止系統攔截源自 Active Template Library (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

只有 32 位進程才支援 SetProcessDEPPolicy。 如果在64位進程上呼叫此函式,它會因為 ERROR_NOT_SUPPORTED而失敗。

寫入 ATL 7.1 和更早版本的應用程式可以嘗試在標示為非可執行檔的頁面上執行程式碼,這會觸發 NX 錯誤並終止應用程式。 DEP-ATL Thunk 模擬可讓應用程式觸發 NX 錯誤以啟用 DEP 執行。 如需 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 標頭

規格需求

需求
最低支援的用戶端 Windows Vista WITH SP1、Windows XP with SP3 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 [僅限傳統型應用程式]
目標平台 Windows
標頭 winbase.h (包含 Windows.h)
程式庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

資料執行防止

GetProcessDEPPolicy

GetSystemDEPPolicy