다음을 통해 공유


UpdateProcThreadAttribute 함수(processthreadsapi.h)

프로세스 및 스레드 만들기를 위한 특성 목록에서 지정된 특성을 업데이트합니다.

구문

BOOL UpdateProcThreadAttribute(
  [in, out]       LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList,
  [in]            DWORD                        dwFlags,
  [in]            DWORD_PTR                    Attribute,
  [in]            PVOID                        lpValue,
  [in]            SIZE_T                       cbSize,
  [out, optional] PVOID                        lpPreviousValue,
  [in, optional]  PSIZE_T                      lpReturnSize
);

매개 변수

[in, out] lpAttributeList

InitializeProcThreadAttributeList 함수에서 만든 특성 목록에 대한 포인터입니다.

[in] dwFlags

이 매개 변수는 예약되어 있으며 0이어야 합니다.

[in] Attribute

특성 목록에서 업데이트할 특성 키입니다. 이 매개 변수는 다음 값 중 하나일 수 있습니다.

의미
PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY
lpValue 매개 변수는 새 스레드에 대한 프로세서 그룹 선호도를 지정하는 GROUP_AFFINITY 구조체에 대한 포인터입니다.

Windows 7 이상 및 Windows Server 2008 R2 이상에서 지원됩니다.

PROC_THREAD_ATTRIBUTE_HANDLE_LIST
lpValue 매개 변수는 자식 프로세스에서 상속할 핸들 목록에 대한 포인터입니다.

이러한 핸들은 상속 가능한 핸들로 만들어야 하며 GetCurrentProcess 또는 GetCurrentThread 함수에서 반환하는 것과 같은 의사 핸들을 포함해서는 안 됩니다.

이 특성을 사용하는 경우CreateProcess 함수의 bInheritHandles 매개 변수에 TRUE 값을 전달합니다.
 
PROC_THREAD_ATTRIBUTE_IDEAL_PROCESSOR
lpValue 매개 변수는 새 스레드에 이상적인 프로세서를 지정하는 PROCESSOR_NUMBER 구조체에 대한 포인터입니다.

Windows 7 이상 및 Windows Server 2008 R2 이상에서 지원됩니다.

PROC_THREAD_ATTRIBUTE_MACHINE_TYPE
lpValue 매개 변수는 자식 프로세스의 컴퓨터 아키텍처를 지정하는 WORD에 대한 포인터입니다.

Windows 11 이상에서 지원됩니다.

lpValue에서 가리키는 WORDIMAGE FILE MACHINE 상수에 나열된 값일 수 있습니다.

PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY
lpValue 매개 변수는 자식 프로세스에 대한 악용 완화 정책을 지정하는 DWORD 또는 DWORD64 대한 포인터입니다. Windows 10 버전 1703부터 이 매개 변수는 두 요소 DWORD64 배열에 대한 포인터일 수도 있습니다.

지정된 정책은 애플리케이션 및 시스템에 대해 설정된 정책을 재정의하며 자식 프로세스가 실행되기 시작한 후에는 변경할 수 없습니다.

lpValue에서 가리키는 DWORD 또는 DWORD64 설명에 나열된 값 중 하나 이상이 될 수 있습니다.

Windows 7 이상 및 Windows Server 2008 R2 이상에서 지원됩니다.

PROC_THREAD_ATTRIBUTE_PARENT_PROCESS
lpValue 매개 변수는 생성되는 프로세스의 부모로 사용할 프로세스의 핸들에 대한 포인터입니다(호출 프로세스 대신). 사용된 프로세스에 대한 핸들에는 PROCESS_CREATE_PROCESS 액세스 권한이 있어야 합니다.

지정된 프로세스에서 상속되는 특성에는 핸들, 디바이스 맵, 프로세서 선호도, 우선 순위, 할당량, 프로세스 토큰 및 작업 개체가 포함됩니다. (디버그 포트와 같은 일부 특성은 이 핸들에서 지정한 프로세스가 아니라 만들기 프로세스에서 가져옵니다.)

PROC_THREAD_ATTRIBUTE_PREFERRED_NODE
lpValue 매개 변수는 새 프로세스에 대한 기본 NUMA 노드의 노드 번호에 대한 포인터입니다.

Windows 7 이상 및 Windows Server 2008 R2 이상에서 지원됩니다.

PROC_THREAD_ATTRIBUTE_UMS_THREAD
lpValue 매개 변수는 UMS(사용자 모드 예약) 스레드 컨텍스트 및 스레드와 연결할 UMS 완료 목록을 지정하는 UMS_CREATE_THREAD_ATTRIBUTES 구조에 대한 포인터입니다.

UMS 스레드를 만든 후 시스템은 지정된 완료 목록으로 큐에 대기합니다. UMS 스레드는 애플리케이션의 UMS 스케줄러가 완료 목록에서 UMS 스레드를 검색하고 실행할 스레드를 선택하는 경우에만 실행됩니다. 자세한 내용은 사용자 모드 예약을 참조하세요.

Windows 7 이상 및 Windows Server 2008 R2 이상에서 지원됩니다.

Windows 11 이상에서는 지원되지 않습니다( 사용자 모드 일정 참조).

PROC_THREAD_ATTRIBUTE_SECURITY_CAPABILITIES
lpValue 매개 변수는 앱 컨테이너의 보안 기능을 정의하는 SECURITY_CAPABILITIES 구조체에 대한 포인터입니다. 이 특성을 설정하면 새 프로세스가 AppContainer 프로세스로 만들어집니다.

Windows 8 이상 및 Windows Server 2012 이상에서 지원됩니다.

PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL
lpValue 매개 변수는 PROTECTION_LEVEL_SAMEDWORD 값에 대한 포인터입니다. 자식 프로세스의 보호 수준이 부모 프로세스의 보호 수준과 같도록 지정합니다.

Windows 8.1 이상 및 Windows Server 2012 R2 이상에서 지원됩니다.

PROC_THREAD_ATTRIBUTE_CHILD_PROCESS_POLICY
lpValue 매개 변수는 자식 프로세스 정책을 지정하는 DWORD 값에 대한 포인터입니다. 정책은 자식 프로세스를 만들 수 있도록 허용할지 여부를 지정합니다.

lpValue가 가리키는 DWORD의 가능한 값에 대한 자세한 내용은 비고를 참조하세요.

Windows 10 이상 및 Windows Server 2016 이상에서 지원됩니다.

PROC_THREAD_ATTRIBUTE_DESKTOP_APP_POLICY
이 특성은 데스크톱 브리지를 사용하여 UWP 패키지로 변환된 win32 애플리케이션과만 관련이 있습니다.

lpValue 매개 변수는 데스크톱 앱 정책을 지정하는 DWORD 값에 대한 포인터입니다. 정책은 하위 프로세스가 데스크톱 환경에서 계속 실행되어야 하는지 여부를 지정합니다.

lpValue가 가리키는 DWORD의 가능한 값에 대한 자세한 내용은 비고를 참조하세요.

Windows 10 버전 1703 이상 및 Windows Server 버전 1709 이상에서 지원됩니다.

PROC_THREAD_ATTRIBUTE_JOB_LIST
lpValue 매개 변수는 지정된 순서대로 자식 프로세스에 할당할 작업 핸들 목록에 대한 포인터입니다.

Windows 10 이상 및 Windows Server 2016 이상에서 지원됩니다.

PROC_THREAD_ATTRIBUTE_ENABLE_OPTIONAL_XSTATE_FEATURES
lpValue 매개 변수는 새 스레드에 사용할 선택적 XState 기능 집합을 지정하는 DWORD64 값에 대한 포인터입니다.

Windows 11 이상 및 Windows Server 2022 이상에서 지원됩니다.

[in] lpValue

특성 값에 대한 포인터입니다. 이 값은 DeleteProcThreadAttributeList 함수를 사용하여 특성 목록이 제거될 때까지 유지되어야 합니다.

[in] cbSize

lpValue 매개 변수로 지정된 특성 값의 크기입니다.

[out, optional] lpPreviousValue

이 매개 변수는 예약되어 있으며 NULL이어야 합니다.

[in, optional] lpReturnSize

이 매개 변수는 예약되어 있으며 NULL이어야 합니다.

반환 값

함수가 성공하면 반환 값이 0이 아닙니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

특성 목록은 각 특성에 대해 하나씩 일련의 키/값 쌍으로 구성된 불투명 구조체입니다. 프로세스는 이 항목에 설명된 특성 키만 업데이트할 수 있습니다.

LpValue에서 가리키는 DWORD 또는 DWORD64Attribute 매개 변수에 대한 PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY 지정할 때 다음 값 중 하나 이상이 될 수 있습니다.

PROCESS_CREATION_MITIGATION_POLICY_DEP_ENABLE (0x00000001)자식 프로세스에 DEP(데이터 실행 방지)를 사용하도록 설정합니다. 자세한 내용은 데이터 실행 방지를 참조하세요.
PROCESS_CREATION_MITIGATION_POLICY_DEP_ATL_THUNK_ENABLE (0x00000002)자식 프로세스에 DEP-ATL 썽크 에뮬레이션을 사용하도록 설정합니다. DEP-ATL 썽크 에뮬레이션은 시스템이 ATL(활성 템플릿 라이브러리) 썽크 계층에서 발생한 NX 오류를 가로채도록 합니다. 이 값은 PROCESS_CREATION_MITIGATION_POLICY_DEP_ENABLE 사용하여만 지정할 수 있습니다.
PROCESS_CREATION_MITIGATION_POLICY_SEHOP_ENABLE (0x00000004)자식 프로세스에 대해 SEHOP(구조적 예외 처리기 덮어쓰기 보호)를 사용하도록 설정합니다. SEHOP는 SEH(구조적 예외 처리기) 덮어쓰기 기술을 사용하는 익스플로잇을 차단합니다.
Windows 7, Windows Server 2008 R2, Windows Server 2008 및 Windows Vista: 다음 값은 Windows 8 및 Windows Server 2012까지 지원되지 않습니다.
ASLR(Address Space Layout Randomization) 강제 적용 정책은 사용하도록 설정된 경우 로드 시 이미지 기본 충돌이 발생한 것처럼 작동하여 동적 기본 호환되지 않는 이미지를 강제로 다시 지정합니다. 재배치가 필요한 경우 기본 재배치 섹션이 없는 이미지는 로드되지 않습니다.

필수 ASLR 정책에 사용할 수 있는 완화 옵션은 다음과 같습니다.

PROCESS_CREATION_MITIGATION_POLICY_FORCE_RELOCATE_IMAGES_ALWAYS_ON (0x00000001 << 8)
PROCESS_CREATION_MITIGATION_POLICY_FORCE_RELOCATE_IMAGES_ALWAYS_OFF (0x00000002 << 8)
PROCESS_CREATION_MITIGATION_POLICY_FORCE_RELOCATE_IMAGES_ALWAYS_ON_REQ_RELOCS (0x00000003 << 8)
힙은 손상 정책에서 종료되며, 사용하도록 설정하면 손상되면 힙이 종료됩니다. 'always off'는 이미지 헤더에 설정된 현재 하위 시스템 버전을 사용하여 이진 파일에 대한 기본 옵트인을 재정의하지 않습니다. 손상 시 힙 종료는 사용자 모드가 적용됩니다.

손상 정책에 대한 힙 종료에 사용할 수 있는 완화 옵션은 다음과 같습니다.

PROCESS_CREATION_MITIGATION_POLICY_HEAP_TERMINATE_ALWAYS_ON (0x00000001 << 12)
PROCESS_CREATION_MITIGATION_POLICY_HEAP_TERMINATE_ALWAYS_OFF (0x00000002 << 12)
스택 임의화 옵션을 포함하는 상향식 임의화 정책을 사용하면 임의의 위치가 가장 낮은 사용자 주소로 사용됩니다.

상향식 임의화 정책에 사용할 수 있는 완화 옵션은 다음과 같습니다.

PROCESS_CREATION_MITIGATION_POLICY_BOTTOM_UP_ASLR_ALWAYS_ON (0x00000001 << 16)
PROCESS_CREATION_MITIGATION_POLICY_BOTTOM_UP_ASLR_ALWAYS_OFF (0x00000002 << 16)
높은 엔트로피 상향식 임의화 정책을 사용하도록 설정하면 최대 1TB의 상향식 분산이 사용됩니다. 상위 엔트로피 상향식 임의화는 상향식 ASLR도 사용하도록 설정된 경우에만 유효합니다. 상위 엔트로피 상향식 임의화는 네이티브 64비트 프로세스에만 의미가 있습니다.

높은 엔트로피 상향식 임의화 정책에 사용할 수 있는 완화 옵션은 다음과 같습니다.

PROCESS_CREATION_MITIGATION_POLICY_HIGH_ENTROPY_ASLR_ALWAYS_ON (0x00000001 << 20)
PROCESS_CREATION_MITIGATION_POLICY_HIGH_ENTROPY_ASLR_ALWAYS_OFF (0x00000002 << 20)
엄격한 핸들 검사 적용 정책을 사용하도록 설정하면 잘못된 핸들 참조에서 예외가 즉시 발생합니다. 이 정책을 사용하도록 설정하지 않으면 대신 핸들 참조에서 실패 상태가 반환됩니다.

엄격한 핸들 검사 적용 정책에 사용할 수 있는 완화 옵션은 다음과 같습니다.

PROCESS_CREATION_MITIGATION_POLICY_STRICT_HANDLE_CHECKS_ALWAYS_ON (0x00000001 << 24)
PROCESS_CREATION_MITIGATION_POLICY_STRICT_HANDLE_CHECKS_ALWAYS_OFF (0x00000002 << 24)
Win32k 시스템 호출 사용 안 함 정책은 사용하도록 설정된 경우 프로세스가 Win32k 호출을 수행하지 못하도록 합니다.

Win32k 시스템 호출 사용 안 함 정책에 사용할 수 있는 완화 옵션은 다음과 같습니다.

PROCESS_CREATION_MITIGATION_POLICY_WIN32K_SYSTEM_CALL_DISABLE_ALWAYS_ON (0x00000001 << 28)
PROCESS_CREATION_MITIGATION_POLICY_WIN32K_SYSTEM_CALL_DISABLE_ALWAYS_OFF (0x00000002 << 28)
확장 지점 사용 안 함 정책을 사용하도록 설정하면 특정 기본 제공 타사 확장 지점이 사용되지 않습니다. 이 정책은 다음 확장 지점을 차단합니다.
  • AppInit DLL
  • Winsock LSP(계층화된 서비스 공급자)
  • 전역 Windows 후크
  • 레거시 IME(입력 방법 편집기)
로컬 후크는 확장 지점 사용 안 함 정책을 사용하도록 설정된 상태로 계속 작동합니다. 이 동작은 레거시 확장 지점을 사용하지 않는 프로세스에 로드되지 않도록 하는 데 사용됩니다.

확장 지점 사용 안 함 정책에 사용할 수 있는 완화 옵션은 다음과 같습니다.

PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_ALWAYS_ON (0x00000001 << 32)
PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_ALWAYS_OFF (0x00000002 << 32)
CFG(Control Flow Guard) 정책이 켜져 있으면 CFG를 사용하도록 설정된 코드에서 간접 호출에 대한 추가 제한을 적용합니다.

CFG 정책을 제어하는 데 사용할 수 있는 완화 옵션은 다음과 같습니다.

  • PROCESS_CREATION_MITIGATION_POLICY_CONTROL_FLOW_GUARD_MASK (0x00000003ui64 40 << )
  • PROCESS_CREATION_MITIGATION_POLICY_CONTROL_FLOW_GUARD_DEFER (0x000000000ui64 40 << )
  • PROCESS_CREATION_MITIGATION_POLICY_CONTROL_FLOW_GUARD_ALWAYS_ON (0x00000001ui64 40 << )
  • PROCESS_CREATION_MITIGATION_POLICY_CONTROL_FLOW_GUARD_ALWAYS_OFF (0x00000002ui64 40 << )
  • PROCESS_CREATION_MITIGATION_POLICY_CONTROL_FLOW_GUARD_EXPORT_SUPPRESSION (0x00000003ui64 40 << )
또한 EXE/DLL에서 CFG를 사용하도록 설정하도록 다음 정책을 지정할 수 있습니다. CFG를 사용하도록 설정하지 않는 EXE/DLL을 로드하려고 하면 로드가 실패합니다.
  • PROCESS_CREATION_MITIGATION_POLICY2_STRICT_CONTROL_FLOW_GUARD_MASK (0x00000003ui64 << 8)
  • PROCESS_CREATION_MITIGATION_POLICY2_STRICT_CONTROL_FLOW_GUARD_DEFER (0x000000000ui64 << 8)
  • PROCESS_CREATION_MITIGATION_POLICY2_STRICT_CONTROL_FLOW_GUARD_ALWAYS_ON (0x00000001ui64 << 8)
  • PROCESS_CREATION_MITIGATION_POLICY2_STRICT_CONTROL_FLOW_GUARD_ALWAYS_OFF (0x00000002ui64 << 8)
  • PROCESS_CREATION_MITIGATION_POLICY2_STRICT_CONTROL_FLOW_GUARD_RESERVED (0x00000003ui64 << 8)
동적 코드 정책을 설정하면 프로세스가 동적 코드를 생성하거나 실행 코드를 수정하지 못하도록 방지합니다.

동적 코드 정책에 사용할 수 있는 완화 옵션은 다음과 같습니다.

PROCESS_CREATION_MITIGATION_POLICY_PROHIBIT_DYNAMIC_CODE_MASK (0x00000003ui64 << 36)
PROCESS_CREATION_MITIGATION_POLICY_PROHIBIT_DYNAMIC_CODE_DEFER (0x000000000ui64 << 36)
PROCESS_CREATION_MITIGATION_POLICY_PROHIBIT_DYNAMIC_CODE_ALWAYS_ON (0x00000001ui64 << 36)
PROCESS_CREATION_MITIGATION_POLICY_PROHIBIT_DYNAMIC_CODE_ALWAYS_OFF (0x00000002ui64 << 36)
PROCESS_CREATION_MITIGATION_POLICY_PROHIBIT_DYNAMIC_CODE_ALWAYS_ON_ALLOW_OPT_OUT (0x00000003ui64 << 36)
이진 서명 정책을 사용하려면 EXE/DLL에 올바르게 서명해야 합니다.

이진 서명 정책에 사용할 수 있는 완화 옵션은 다음과 같습니다.

  • PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_MASK (0x00000003ui64 44 << )
  • PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_DEFER (0x000000000ui64 44 << )
  • PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_ON (0x00000001ui64 44 << )
  • PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_OFF (0x000000002ui64 44 << )
  • PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALLOW_STORE (0x00000003ui64 44 << )
프로세스에 대한 글꼴 로드 방지 정책은 프로세스에 대해 시스템 이외의 글꼴을 로드할 수 있는지 여부를 결정합니다. 정책을 켜면 프로세스가 시스템 이외의 글꼴을 로드할 수 없습니다.

글꼴 로드 방지 정책에 사용할 수 있는 완화 옵션은 다음과 같습니다.

PROCESS_CREATION_MITIGATION_POLICY_FONT_DISABLE_MASK (0x00000003ui64 48 << )
PROCESS_CREATION_MITIGATION_POLICY_FONT_DISABLE_DEFER (0x000000000ui64 48 << )
PROCESS_CREATION_MITIGATION_POLICY_FONT_DISABLE_ALWAYS_ON (0x00000001ui64 48 << )
PROCESS_CREATION_MITIGATION_POLICY_FONT_DISABLE_ALWAYS_OFF (0x00000002ui64 48 << )
PROCESS_CREATION_MITIGATION_POLICY_AUDIT_NONSYSTEM_FONTS (0x00000003ui64 48 << )
프로세스의 이미지 로드 정책은 프로세스에 매핑할 수 있는 실행 이미지 유형을 결정합니다. 정책을 켜면 낮은 필수 레이블이 있는 디바이스 또는 파일 제거와 같은 일부 위치에서 이미지를 로드할 수 없습니다.

이미지 로드 정책에 사용할 수 있는 완화 옵션은 다음과 같습니다.

PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_REMOTE_MASK (0x00000003ui64 << 52)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_REMOTE_DEFER (0x000000000ui64 << 52)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_REMOTE_ALWAYS_ON (0x00000001ui64 << 52)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_REMOTE_ALWAYS_OFF (0x00000002ui64 << 52)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_REMOTE_RESERVED (0x00000003ui64 << 52)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_LOW_LABEL_MASK (0x00000003ui64 << 56)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_LOW_LABEL_DEFER (0x000000000ui64 << 56)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_LOW_LABEL_ALWAYS_ON (0x00000001ui64 << 56)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_LOW_LABEL_ALWAYS_OFF (0x00000002ui64 << 56)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_LOW_LABEL_RESERVED (0x00000003ui64 << 56)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_PREFER_SYSTEM32_MASK (0x00000003ui64 << 60)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_PREFER_SYSTEM32_DEFER (0x000000000ui64 << 60)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_PREFER_SYSTEM32_ALWAYS_ON (0x00000001ui64 << 60)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_PREFER_SYSTEM32_ALWAYS_OFF (0x000000002ui64 << 60)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_PREFER_SYSTEM32_RESERVED (0x00000003ui64 << 60)
Windows 10 버전 1709: 다음 값은 Windows 10 버전 1709 이상에서만 사용할 수 있으며 2018년 1월 Windows 보안 업데이트 및 OEM 디바이스 제조업체의 적용 가능한 펌웨어 업데이트에서만 사용할 수 있습니다. 투기적 실행 쪽 채널 취약성으로부터 보호하려면 IT 전문가용 Windows 클라이언트 지침을 참조하세요.
PROCESS_CREATION_MITIGATION_POLICY2_RESTRICT_INDIRECT_BRANCH_PREDICTION_ALWAYS_ON (0x00000001ui64 << 16)이 플래그는 프로세스에서 간접 분기 예측을 방해하지 않도록 형제 하드웨어 스레드(하이퍼스레드)로부터 보호하는 데 사용할 수 있습니다. 주소 공간에 중요한 정보가 있는 프로세스는 간접 분기 예측(예: CVE-2017-5715)과 관련된 공격으로부터 이 플래그를 보호할 수 있도록 하는 것이 좋습니다.
Windows 10 버전 1809: 다음 값은 Windows 10 버전 1809 이상에서만 사용할 수 있습니다.
PROCESS_CREATION_MITIGATION_POLICY2_SPECULATIVE_STORE_BYPASS_DISABLE_ALWAYS_ON (0x00000001ui64 24 << )프로세스에서 이 플래그를 사용하여 SSB(CVE-2018-3639)와 관련된 투기적 실행 쪽 채널 공격에 취약할 수 있는 CPU의 SSB(투기 저장소 바이패스) 기능을 사용하지 않도록 설정할 수 있습니다. 이 플래그는 필수 하드웨어 기능이 있는 특정 Intel CPU에서만 지원됩니다. 이 기능을 지원하지 않는 CPU에서는 플래그가 적용되지 않습니다.

Windows 10 버전 2004: 다음 값은 Windows 10 버전 2004 이상에서만 사용할 수 있습니다.

HSP(하드웨어 적용 스택 보호)는 CPU가 섀도 스택 메커니즘을 사용하여 런타임에 함수 반환 주소를 확인하는 하드웨어 기반 보안 기능입니다. 사용자 모드 HSP의 경우 기본 모드는 호환성 모드로, CETCOMPAT(섀도 스택)와 호환되는 것으로 간주되는 모듈에서 발생하는 섀도 스택 위반만 치명적입니다. 엄격한 모드에서는 모든 섀도 스택 위반이 치명적입니다.

다음 완화 옵션은 사용자 모드 하드웨어 적용 스택 보호 및 관련 기능에 사용할 수 있습니다.

PROCESS_CREATION_MITIGATION_POLICY2_CET_USER_SHADOW_STACKS_ALWAYS_ON (0x00000001ui64 << 28)
PROCESS_CREATION_MITIGATION_POLICY2_CET_USER_SHADOW_STACKS_ALWAYS_OFF (0x00000002ui64 << 28)
PROCESS_CREATION_MITIGATION_POLICY2_CET_USER_SHADOW_STACKS_STRICT_MODE (0x00000003ui64 << 28)

명령 포인터 유효성 검사:

PROCESS_CREATION_MITIGATION_POLICY2_USER_CET_SET_CONTEXT_IP_VALIDATION_ALWAYS_ON (0x00000001ui64 << 32)
PROCESS_CREATION_MITIGATION_POLICY2_USER_CET_SET_CONTEXT_IP_VALIDATION_ALWAYS_OFF (0x00000002ui64 << 32)
PROCESS_CREATION_MITIGATION_POLICY2_USER_CET_SET_CONTEXT_IP_VALIDATION_RELAXED_MODE (0x00000003ui64 << 32)

비 CETCOMPAT/비 EHCONT 이진 파일의 로드 차단:

PROCESS_CREATION_MITIGATION_POLICY2_BLOCK_NON_CET_BINARIES_ALWAYS_ON (0x00000001ui64 << 36)
PROCESS_CREATION_MITIGATION_POLICY2_BLOCK_NON_CET_BINARIES_ALWAYS_OFF (0x00000002ui64 << 36)
PROCESS_CREATION_MITIGATION_POLICY2_BLOCK_NON_CET_BINARIES_NON_EHCONT (0x00000003ui64 << 36)

프로세스 외부에서만 호출할 수 있도록 동적 코드의 보안 속성을 지정하는 데 사용되는 특정 HSP API 제한:

PROCESS_CREATION_MITIGATION_POLICY2_CET_DYNAMIC_APIS_OUT_OF_PROC_ONLY_ALWAYS_ON (0x00000001ui64 48 << )
PROCESS_CREATION_MITIGATION_POLICY2_CET_DYNAMIC_APIS_OUT_OF_PROC_ONLY_ALWAYS_OFF (0x00000002ui64 48 << )

FSCTL 시스템 호출 사용 안 함 정책은 사용하도록 설정된 경우 프로세스가 NtFsControlFile 호출을 수행하지 못하도록 합니다. FSCTL 시스템 호출 사용 안 함 정책에 사용할 수 있는 완화 옵션은 다음과 같습니다.

PROCESS_CREATION_MITIGATION_POLICY2_FSCTL_SYSTEM_CALL_DISABLE_ALWAYS_ON (0x00000001ui64 << 56)
PROCESS_CREATION_MITIGATION_POLICY2_FSCTL_SYSTEM_CALL_DISABLE_ALWAYS_OFF (0x00000002ui64 << 56)

lpValue에서 가리키는 DWORDAttribute 매개 변수에 대한 PROC_THREAD_ATTRIBUTE_CHILD_PROCESS_POLICY 지정할 때 다음 값 중 하나 이상이 될 수 있습니다.

PROCESS_CREATION_CHILD_PROCESS_RESTRICTED 0x01

생성되는 프로세스는 자식 프로세스를 만들 수 없습니다. 이 제한은 프로세스가 실행되는 토큰의 속성이 됩니다. 이 제한은 프로세스에서 권한 있는 프로세스 핸들에 액세스할 수 없도록 하는 샌드박스 애플리케이션(예: AppContainer)에서만 유효합니다. 예를 들어 자식 프로세스 만들기를 제한하는 프로세스가 PROCESS_CREATE_PROCESS 사용하여 다른 프로세스 핸들에 액세스하거나 액세스 권한을 PROCESS_VM_WRITE 경우 자식 프로세스 제한을 무시할 수 있습니다.

PROCESS_CREATION_CHILD_PROCESS_OVERRIDE 0x02

생성되는 프로세스는 자식 프로세스를 만들 수 있습니다(그렇지 않으면 제한되는 경우). 새 프로세스를 만드는 프로세스가 제한되지 않은 경우에만 이 값을 지정할 수 있습니다.

lpValue에서 가리키는 DWORDAttribute 매개 변수에 대한 PROC_THREAD_ATTRIBUTE_DESKTOP_APP_POLICY 지정할 때 다음 값 중 하나 이상이 될 수 있습니다.

PROCESS_CREATION_DESKTOP_APP_BREAKAWAY_ENABLE_PROCESS_TREE 0x01

생성되는 프로세스는 데스크톱 앱 런타임 환경 외부에서 모든 자식 프로세스를 만듭니다. 이 동작은 정책이 설정되지 않은 프로세스의 기본값입니다.

PROCESS_CREATION_DESKTOP_APP_BREAKAWAY_DISABLE_PROCESS_TREE 0x02

생성되는 프로세스는 데스크톱 앱 런타임 환경 내에서 모든 자식 프로세스를 만듭니다. 이 정책은 PROCESS_CREATION_DESKTOP_APP_BREAKAWAY_ENABLE_PROCESS_TREE 사용하여 프로세스를 만들어 재정의될 때까지 하위 프로세스에서 상속됩니다.

PROCESS_CREATION_DESKTOP_APP_BREAKAWAY_OVERRIDE 0x04

생성되는 프로세스는 데스크톱 앱 런타임 환경 내에서 실행됩니다. 이 정책은 하위 항목이 아니라 생성되는 프로세스에만 적용됩니다.

부모 프로세스와 동일한 보호 수준으로 자식 프로세스를 시작하려면 부모 프로세스에서 자식 프로세스에 대한 PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL 특성을 지정해야 합니다. 보호된 프로세스와 보호되지 않는 프로세스 모두에 사용할 수 있습니다. 예를 들어 보호되지 않는 프로세스에서 이 플래그를 사용하는 경우 시스템은 보호되지 않는 수준에서 자식 프로세스를 시작합니다. 두 경우 모두 CREATE_PROTECTED_PROCESS 플래그를 지정해야 합니다.

다음 예제에서는 부모 프로세스와 동일한 보호 수준으로 자식 프로세스를 시작합니다.

DWORD ProtectionLevel = PROTECTION_LEVEL_SAME;
SIZE_T AttributeListSize;

STARTUPINFOEXW StartupInfoEx = { 0 };

StartupInfoEx.StartupInfo.cb = sizeof(StartupInfoEx);

InitializeProcThreadAttributeList(NULL, 1, 0, &AttributeListSize)


StartupInfoEx.lpAttributeList = (LPPROC_THREAD_ATTRIBUTE_LIST) HeapAlloc(
    GetProcessHeap(),
    0,
    AttributeListSize
    );

if (InitializeProcThreadAttributeList(StartupInfoEx.lpAttributeList,
                                      1,
                                      0,
                                      &AttributeListSize) == FALSE)
{
    Result = GetLastError();
    goto exitFunc;
}

if (UpdateProcThreadAttribute(StartupInfoEx.lpAttributeList,
                              0,
                              PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL,
                              &ProtectionLevel,
                              sizeof(ProtectionLevel),
                              NULL,
                              NULL) == FALSE)
{
    Result = GetLastError();
    goto exitFunc;
}

PROCESS_INFORMATION ProcessInformation = { 0 };

if (CreateProcessW(ApplicationName,
                   CommandLine,
                   ProcessAttributes,
                   ThreadAttributes,
                   InheritHandles,
                   EXTENDED_STARTUPINFO_PRESENT | CREATE_PROTECTED_PROCESS,
                   Environment,
                   CurrentDirectory,
                   (LPSTARTUPINFOW)&StartupInfoEx,
                   &ProcessInformation) == FALSE)
{
    Result = GetLastError();
    goto exitFunc;
}

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 processthreadsapi.h(Windows 7, Windows Server 2008 Windows Server 2008 R2의 Windows.h 포함)
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

DeleteProcThreadAttributeList

InitializeProcThreadAttributeList

프로세스 및 스레드 함수