다음을 통해 공유


PROCESS_MITIGATION_USER_SHADOW_STACK_POLICY 구조체(winnt.h)

사용자 모드 HSP(하드웨어 적용 스택 보호)에 대한 프로세스 완화 정책 설정을 포함합니다. GetProcessMitigationPolicySetProcessMitigationPolicy 함수는 이 구조를 사용합니다.

구문

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이면 호환 모드가 감사되고 있는지 또는 strict 모드가 감사되는지에 따라 EnableUserShadowStackStack이 TRUE이고 EnableUserShadowStackStrictMode가 TRUE일 수 있습니다. SetProcessMitigationPolicy를 통해 이 필드를 변경할 수 없습니다.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.SetContextIpValidation

TRUE이면 SetThreadContextRtlRestoreContext와 같은 스레드의 실행 컨텍스트를 수정하는 API를 호출할 때 새 실행 컨텍스트에 지정된 명령 포인터에서 유효성 검사가 수행됩니다. SetProcessMitigationPolicy를 통해 이 필드를 변경할 수 없습니다.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.AuditSetContextIpValidation

TRUE이면 유효성 검사를 실패하게 한 명령 포인터가 대신 허용되고 진단 이벤트가 이벤트 로그에 기록됩니다. 이 필드가 TRUE이면 SetContextIpValidation은 TRUE여야 하며 현재 작동 중인 명령 포인터 유효성 검사 모드에 따라 SetContextIpValidationRelaxedMode는 TRUE일 수 있습니다. SetProcessMitigationPolicy를 통해 이 필드를 변경할 수 없습니다.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.EnableUserShadowStackStrictMode

TRUE이면 엄격한 모드에서 프로세스에 대해 사용자 모드 하드웨어 적용 스택 보호를 사용하도록 설정됩니다. 모든 섀도 스택 위반은 치명적입니다. 이 필드가 TRUE이면 EnableUserShadowStack이 TRUE여야 합니다. HSP가 호환 모드에서 사용하도록 설정된 경우 이 필드를 TRUE로 설정하고 SetProcessMitigationPolicy를 호출하여 런타임 시 엄격한 모드로 업그레이드할 수 있습니다. SetProcessMitigationPolicy를 통해 HSP를 다운그레이드하거나 사용하지 않도록 설정할 수 없습니다. 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는 SetProcessDynamicEHContinuationTargetsSetProcessDynamicEnforcedCetCompatibleRanges입니다. 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