Поделиться через


структура PROCESS_MITIGATION_USER_SHADOW_STACK_POLICY (winnt.h)

Содержит параметры политики устранения рисков процесса для аппаратной защиты стека (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, для процесса в режиме совместимости включена защита стека с применением аппаратного режима. Это означает, что ЦП проверяет адреса возвращаемых функций во время выполнения, используя механизм теневого стека, если он поддерживается оборудованием. В режиме совместимости только нарушения теневого стека, возникающие в модулях, которые считаются совместимыми с теневыми стеками (CETCOMPAT), являются неустранимыми. Чтобы модуль считался CETCOMPAT, его необходимо скомпилировать с помощью CETCOMPAT для двоичных файлов или пометить с помощью SetProcessDynamicEnforcedCetCompatibleRanges для динамического кода. Это поле нельзя изменить с помощью SetProcessMitigationPolicy.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.AuditUserShadowStack

Если значение РАВНО TRUE, нарушения стека тени, которые были бы неустранимы, вместо этого обрабатываются как неустранимые, а диагностические события регистрируются в журнале событий. Если это поле имеет значение TRUE, enableUserShadowStack должно иметь значение TRUE, а EnableUserShadowStackStrictMode может иметь значение TRUE в зависимости от того, выполняется ли аудит режима совместимости или строгий режим. Это поле нельзя изменить с помощью SetProcessMitigationPolicy.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.SetContextIpValidation

Если задано значение TRUE, то при вызове API, которые изменяют контекст выполнения потока , например SetThreadContext и RtlRestoreContext, проверка выполняется для указателя инструкции, указанного в новом контексте выполнения. Это поле нельзя изменить с помощью SetProcessMitigationPolicy.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.AuditSetContextIpValidation

Если значение РАВНО TRUE, указатели инструкций, которые привели бы к сбою проверки, вместо этого разрешены, а события диагностики регистрируются в журнале событий. Если это поле имеет значение TRUE, setContextIpValidation должно иметь значение TRUE, а SetContextIpValidationRelaxedMode может иметь значение TRUE в зависимости от того, в каком режиме в данный момент работает проверка указателя инструкций. Это поле нельзя изменить с помощью SetProcessMitigationPolicy.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.EnableUserShadowStackStrictMode

Если задано значение TRUE, защита стека с применением аппаратного режима в пользовательском режиме включена для процесса в строгом режиме. Все нарушения стека тени являются неустранимыми. Если это поле имеет значение TRUE, параметр EnableUserShadowStack должен иметь значение TRUE. Если HSP включен в режиме совместимости, его можно обновить до строгого режима во время выполнения, задав для этого поля значение TRUE и вызвав SetProcessMitigationPolicy. 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, некоторые API HSP, используемые для указания свойств безопасности динамического кода, можно вызывать только извне процесса в целях безопасности. К этим 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

См. также раздел

CETCOMPAT

GetProcessMitigationPolicy

SetProcessMitigationPolicy