winnt.h) (PROCESS_MITIGATION_USER_SHADOW_STACK_POLICY 結構
包含使用者模式硬體強制堆疊保護的程式防護原則設定, (HSP) 。 GetProcessMitigationPolicy 和 SetProcessMitigationPolicy 函式會使用此結構。
語法
typedef struct _PROCESS_MITIGATION_USER_SHADOW_STACK_POLICY {
union {
DWORD Flags;
struct {
DWORD EnableUserShadowStack : 1;
DWORD AuditUserShadowStack : 1;
DWORD SetContextIpValidation : 1;
DWORD AuditSetContextIpValidation : 1;
DWORD EnableUserShadowStackStrictMode : 1;
DWORD BlockNonCetBinaries : 1;
DWORD BlockNonCetBinariesNonEhcont : 1;
DWORD AuditBlockNonCetBinaries : 1;
DWORD CetDynamicApisOutOfProcOnly : 1;
DWORD SetContextIpValidationRelaxedMode : 1;
DWORD ReservedFlags : 22;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME;
} PROCESS_MITIGATION_USER_SHADOW_STACK_POLICY, *PPROCESS_MITIGATION_USER_SHADOW_STACK_POLICY;
成員
DUMMYUNIONNAME
DUMMYUNIONNAME.Flags
此成員保留供系統使用。
DUMMYUNIONNAME.DUMMYSTRUCTNAME
DUMMYUNIONNAME.DUMMYSTRUCTNAME.EnableUserShadowStack
如果為 TRUE,則會針對相容性模式中的進程啟用使用者模式硬體強制堆疊保護。 這表示如果硬體支援,CPU 會藉由採用陰影堆疊機制,在運行時間驗證函式傳回位址。 在相容性模式中,只有視為與陰影堆疊相容的模組中發生陰影堆疊違規, (CETCOMPAT) 嚴重。 若要讓模組被視為 CETCOMPAT,它必須使用 CETCOMPAT 進行二進位檔編譯,或使用 SetProcessDynamicEnforcedCetCompatibleRanges 進行動態程式代碼標示。 無法透過 SetProcessMitigationPolicy 變更此字段。
DUMMYUNIONNAME.DUMMYSTRUCTNAME.AuditUserShadowStack
如果為 TRUE,則陰影堆疊違規會改為視為不嚴重,且診斷事件會記錄在事件記錄檔中。 當此欄位為 TRUE 時,EnableUserShadowStack 必須是 TRUE,而且 EnableUserShadowStackStrictMode 可能是 TRUE,視正在稽核相容性模式或正在稽核嚴格模式而定。 無法透過 SetProcessMitigationPolicy 變更此字段。
DUMMYUNIONNAME.DUMMYSTRUCTNAME.SetContextIpValidation
如果為 TRUE,則呼叫修改 SetThreadContext 和 RtlRestoreContext 等線程執行內容的 API 時,會在新執行內容中指定的指令指標上執行驗證。 無法透過 SetProcessMitigationPolicy 變更此字段。
DUMMYUNIONNAME.DUMMYSTRUCTNAME.AuditSetContextIpValidation
如果為 TRUE,則會改為允許導致驗證失敗的指令指標,並在事件記錄檔中記錄診斷事件。 當此欄位為 TRUE 時,SetContextIpValidation 必須是 TRUE,而且 SetContextIpValidationRelaxedMode 可能是 TRUE,視指令指標驗證目前運作的模式而定。 無法透過 SetProcessMitigationPolicy 變更此字段。
DUMMYUNIONNAME.DUMMYSTRUCTNAME.EnableUserShadowStackStrictMode
如果為 TRUE,則會以嚴格模式啟用程式的使用者模式硬體強制堆疊保護。 所有陰影堆疊違規都是嚴重性的。 當此欄位為 TRUE 時,EnableUserShadowStack 必須為 TRUE。 如果在相容性模式中啟用 HSP,可以將此欄位設定為 TRUE 並呼叫 SetProcessMitigationPolicy,在運行時間升級為 strict 模式。 HSP 無法透過 SetProcessMitigationPolicy 降級或停用。 如果 HSP 已停用,就無法透過 SetProcessMitigationPolicy 加以啟用。
DUMMYUNIONNAME.DUMMYSTRUCTNAME.BlockNonCetBinaries
如果為 TRUE,則不會使用 CETCOMPAT 編譯的二進位檔遭到封鎖,而無法載入進程。 呼叫 SetProcessMitigationPolicy,即可在進程啟動之後啟用此原則。 一旦啟用,就無法停用。
DUMMYUNIONNAME.DUMMYSTRUCTNAME.BlockNonCetBinariesNonEhcont
如果為 TRUE,則不會使用 CETCOMPAT 編譯或不包含例外狀況處理接續元數據的二進位檔, (/guard:ehcont) 遭到封鎖,而無法載入進程。 當此欄位為 TRUE 時,BlockNonCetBinaries 必須為 TRUE。 呼叫 SetProcessMitigationPolicy,即可在進程啟動之後啟用此原則。 一旦啟用,就無法停用或降級。
DUMMYUNIONNAME.DUMMYSTRUCTNAME.AuditBlockNonCetBinaries
如果為 TRUE,則會改為允許封鎖的二進位載入,並在事件記錄檔中記錄診斷事件。 當此欄位為 TRUE 時,BlockNonCetBinaries 必須是 TRUE,而 BlockNonCetBinariesNonEhcont 可能是 TRUE,視目前封鎖的二進位檔類型而定,無法載入進程。 無法透過 SetProcessMitigationPolicy 變更此字段。
DUMMYUNIONNAME.DUMMYSTRUCTNAME.CetDynamicApisOutOfProcOnly
如果為 TRUE,則某些用來指定動態程式碼安全性屬性的 HSP API 只能從進程外部呼叫,以供安全性之用。 這些 API 是 SetProcessDynamicEHContinuationTargets 和 SetProcessDynamicEnforcedCetCompatibleRanges。 呼叫 SetProcessMitigationPolicy,即可在進程啟動之後啟用此原則。 一旦啟用,就無法停用。
DUMMYUNIONNAME.DUMMYSTRUCTNAME.SetContextIpValidationRelaxedMode
如果為 TRUE,則程式的指令指標驗證會降級為寬鬆模式,這允許動態程式代碼中的所有指令指標,或在不包含 例外狀況處理接續元數據的二進位檔中。 當此欄位為 TRUE 時,SetContextIpValidation 必須為 TRUE。 此程式可以在運行時間從寬鬆模式升級為一般模式,方法是將此字段設定為 FALSE,並呼叫 SetProcessMitigationPolicy。
DUMMYUNIONNAME.DUMMYSTRUCTNAME.ReservedFlags
此成員保留供系統使用。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 10 版本 2004 (10.0;組建 19041) |
最低支援的伺服器 | Windows Server 版本 2004 (10.0;組建 19041) |
標頭 | winnt.h |