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。
只有 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 |