Функция 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

Этот параметр зарезервирован и должен быть равен нулю.

[in] Attribute

Ключ атрибута для обновления в списке атрибутов. Этот параметр может принимать одно из указанных ниже значений.

Значение Значение
PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY
Параметр lpValue — это указатель на структуру GROUP_AFFINITY , которая указывает сходство групп процессоров для нового потока.

Поддерживается в Windows 7 и более новых версиях и Windows Server 2008 R2 и более новых версиях.

PROC_THREAD_ATTRIBUTE_HANDLE_LIST
Параметр lpValue — это указатель на список дескрипторов, наследуемых дочерним процессом.

Эти дескрипторы должны быть созданы как наследуемые дескрипторы и не должны включать псевдо дескрипторы, такие как возвращенные функцией GetCurrentProcess или GetCurrentThread .

Обратите внимание , что при использовании этого атрибута передайте значение TRUE для параметра bInheritHandles функции CreateProcess .
 
PROC_THREAD_ATTRIBUTE_IDEAL_PROCESSOR
Параметр lpValue — это указатель на структуру PROCESSOR_NUMBER , которая задает идеальный процессор для нового потока.

Поддерживается в Windows 7 и более новых версиях и Windows Server 2008 R2 и более новых версиях.

PROC_THREAD_ATTRIBUTE_MACHINE_TYPE
Параметр lpValue — это указатель на WORD , указывающий архитектуру компьютера дочернего процесса.

Поддерживается в Windows 11 и более новых версиях.

Word, на которое указывает lpValue, может быть значением, указанным в КОНСТАНТЫ КОМПЬЮТЕРА IMAGE FILE MACHINE.

PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY
Параметр lpValue — это указатель на DWORD или DWORD64, указывающий политику устранения эксплойтов для дочернего процесса. Начиная с Windows 10 версии 1703 этот параметр также может быть указателем на массив DWORD64 с двумя элементами.

Указанная политика переопределяет политики, заданные для приложения и системы, и не может быть изменена после запуска дочернего процесса.

DWORD или DWORD64, на которые указывает lpValue, может быть одним или несколькими значениями, перечисленными в примечаниях.

Поддерживается в 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_CREATE_THREAD_ATTRIBUTES , которая задает контекст потока планирования в пользовательском режиме (UMS) и список завершения единой системы обмена сообщениями для связывания с потоком.

После создания потока 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 является указателем на значение DWORDPROTECTION_LEVEL_SAME. Это указывает уровень защиты дочернего процесса, который должен совпадать с уровнем защиты родительского процесса.

Поддерживается в Windows 8.1 и более новых версиях, а также Windows Server 2012 R2 и более новых версий.

PROC_THREAD_ATTRIBUTE_CHILD_PROCESS_POLICY
Параметр lpValue — это указатель на значение DWORD , указывающее политику дочернего процесса. Политика указывает, следует ли разрешить создание дочернего процесса.

Сведения о возможных значениях DWORD , к которым указывает значение lpValue , см. в примечаниях.

Поддерживается в Windows 10 и более новых версиях, а также Windows Server 2016 и более новых версиях.

PROC_THREAD_ATTRIBUTE_DESKTOP_APP_POLICY
Этот атрибут относится только к приложениям win32, преобразованным в пакеты UWP с помощью мост для классических приложений.

Параметр lpValue — это указатель на значение DWORD , указывающее политику классического приложения. Политика указывает, должны ли процессы-потомки продолжать выполняться в среде рабочего стола.

Сведения о возможных значениях DWORD , к которым указывает значение lpValue , см. в примечаниях.

Поддерживается в 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 — это указатель на значение DWORD64 , указывающее набор необязательных функций XState для включения для нового потока.

Поддерживается в Windows 11 и более новых версиях и Windows Server 2022 и более новых версиях.

[in] lpValue

Указатель на значение атрибута. Это значение должно сохраняться до тех пор, пока список атрибутов не будет уничтожен с помощью функции DeleteProcThreadAttributeList.

[in] cbSize

Размер значения атрибута, указанного параметром lpValue .

[out, optional] lpPreviousValue

Этот параметр зарезервирован и должен иметь значение NULL.

[in, optional] lpReturnSize

Этот параметр зарезервирован и должен иметь значение NULL.

Возвращаемое значение

Если функция выполняется успешно, возвращается ненулевое значение.

Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Список атрибутов — это непрозрачная структура, состоящая из ряда пар "ключ-значение", по одной для каждого атрибута. Процесс может обновлять только ключи атрибутов, описанные в этом разделе.

DWORD или DWORD64, на которые указывает lpValue, может быть одним или несколькими из следующих значений при указании PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY для параметра Attribute:

PROCESS_CREATION_MITIGATION_POLICY_DEP_ENABLE (0x00000001)Позволяет предотвратить выполнение данных (DEP) для дочернего процесса. Дополнительные сведения см. в разделе "Предотвращение выполнения данных".
PROCESS_CREATION_MITIGATION_POLICY_DEP_ATL_THUNK_ENABLE (0x00000002)Включает эмуляцию thunk DEP-ATL для дочернего процесса. Эмуляция thunk DEP-ATL приводит к тому, что система перехватывает ошибки NX, исходящие из слоя thunk библиотеки активных шаблонов (ATL). Это значение можно указать только с помощью 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), если она включена, принудительно перебазирует образы, не совместимые с динамической базой, действуя так, как будто во время загрузки произошло столкновение базы изображений. Если требуется перемещение, образы, у которых нет раздела базового перемещения, не будут загружены.

Для обязательной политики 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)
Политика рандомизации с высоким энтропией снизу вверх, если она включена, приводит к использованию до 1 ТБ дисперсии снизу вверх. Обратите внимание, что рандомизация снизу вверх с высокой энтропией эффективна, если и только если 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)
Политика отключения точки расширения ( если она включена) запрещает использование определенных встроенных точек расширения сторонних производителей. Эта политика блокирует следующие точки расширения:
  • Библиотеки DLL AppInit
  • Поставщики многоуровневых служб Winsock (LSPs)
  • Глобальные перехватчики Windows
  • Редакторы устаревших методов ввода (IMEs)
Локальные обработчики по-прежнему работают с включенной политикой отключения точки расширения. Это поведение используется для предотвращения загрузки устаревших точек расширения в процесс, который не использует их.

Для политики отключения точки расширения доступны следующие варианты устранения рисков:

PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_ALWAYS_ON (0x00000001 << 32)
PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_ALWAYS_OFF (0x00000002 << 32)
Политика защиты потока управления (CFG), если она включена, накладывает дополнительные ограничения на непрямые вызовы в коде, который был создан с включенным CFG.

Для управления политикой CFG доступны следующие варианты устранения рисков:

  • PROCESS_CREATION_MITIGATION_POLICY_CONTROL_FLOW_GUARD_MASK (0x00000003ui64 << 40)
  • PROCESS_CREATION_MITIGATION_POLICY_CONTROL_FLOW_GUARD_DEFER (0x00000000ui64 << 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)
Кроме того, можно указать следующую политику, чтобы обеспечить включение CFG для exEs/DLLs. Если предпринята попытка загрузить exe/DLL, которая не включает CFG, загрузка завершится ошибкой:
  • PROCESS_CREATION_MITIGATION_POLICY2_STRICT_CONTROL_FLOW_GUARD_MASK (0x00000003ui64 << 8)
  • PROCESS_CREATION_MITIGATION_POLICY2_STRICT_CONTROL_FLOW_GUARD_DEFER (0x00000000ui64 << 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 (0x00000000ui64 << 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)
Политика двоичной подписи требует правильной подписи EXEs/DLL.

Для политики двоичной подписи доступны следующие варианты устранения рисков:

  • PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_MASK (0x00000003ui64 << 44)
  • PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_DEFER (0x00000000ui64 << 44)
  • PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_ON (0x00000001ui64 << 44)
  • PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_OFF (0x00000002ui64 << 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 (0x00000000ui64 << 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)
Политика загрузки изображений процесса определяет типы исполняемых образов, которые можно сопоставить с процессом. Если политика включена, изображения не могут загружаться из некоторых расположений, таких как удаление устройств или файлов с обязательной меткой Low.

Для политики загрузки образов доступны следующие варианты устранения рисков:

PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_REMOTE_MASK (0x00000003ui64 << 52)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_REMOTE_DEFER (0x00000000ui64 << 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 (0x00000000ui64 << 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 (0x00000002ui64 << 60)
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_PREFER_SYSTEM32_RESERVED (0x00000003ui64 << 60)
Windows 10 версии 1709: следующее значение доступно только в Windows 10 версии 1709 или более поздней и только с обновлениями системы безопасности Windows за январь 2018 г. и любыми применимыми обновлениями встроенного ПО от изготовителя устройства OEM. Ознакомьтесь с рекомендациями клиента 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) ЦП, которые могут быть уязвимы для атак спекулятивного выполнения на стороне канала с использованием SSB (CVE-2018-3639). Этот флаг поддерживается только некоторыми ЦП Intel с необходимыми аппаратными функциями. На ЦП, которые не поддерживают эту функцию, флаг не действует.

Windows 10 версии 2004: следующие значения доступны только в Windows 10 версии 2004 или более поздней.

Аппаратная защита стека (HSP) — это аппаратная функция безопасности, в которой ЦП проверяет адреса, возвращаемые функцией во время выполнения, используя механизм теневого стека. Для HSP в пользовательском режиме режим по умолчанию используется режим совместимости, где только нарушения теневого стека, происходящие в модулях, которые считаются совместимыми с теневыми стеками (CETCOMPAT), являются неустранимыми. В строгом режиме все нарушения теневого стека являются неустранимыми.

Ниже перечислены варианты устранения рисков, доступные для аппаратной защиты стека в пользовательском режиме и связанных функций.

PROCESS_CREATION_MITIGATION_POLICY2_CET_USER_SHADOW_STACKS_ALWAYS_ON (0x0000001ui64 << 28)
PROCESS_CREATION_MITIGATION_POLICY2_CET_USER_SHADOW_STACKS_ALWAYS_OFF (0x0000002ui64 << 28)
PROCESS_CREATION_MITIGATION_POLICY2_CET_USER_SHADOW_STACKS_STRICT_MODE (0x0000003ui64 << 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 (0x0000002ui64 << 32)
PROCESS_CREATION_MITIGATION_POLICY2_USER_CET_SET_CONTEXT_IP_VALIDATION_RELAXED_MODE (0x0000003ui64 << 32)

Блокировка загрузки двоичных файлов, отличных от CETCOMPAT/non-EHCONT:

PROCESS_CREATION_MITIGATION_POLICY2_BLOCK_NON_CET_BINARIES_ALWAYS_ON (0x00000001ui64 << 36)
PROCESS_CREATION_MITIGATION_POLICY2_BLOCK_NON_CET_BINARIES_ALWAYS_OFF (0x0000002ui64 << 36)
PROCESS_CREATION_MITIGATION_POLICY2_BLOCK_NON_CET_BINARIES_NON_EHCONT (0x0000003ui64 << 36)

Ограничение определенных API HSP, используемых для указания свойств безопасности динамического кода, которые могут быть вызываемыми только извне процесса:

PROCESS_CREATION_MITIGATION_POLICY2_CET_DYNAMIC_APIS_OUT_OF_PROC_ONLY_ALWAYS_ON (0x0000001ui64 << 48)
PROCESS_CREATION_MITIGATION_POLICY2_CET_DYNAMIC_APIS_OUT_OF_PROC_ONLY_ALWAYS_OFF (0x0000002ui64 << 48)

DWORD, на который указывает lpValue, может быть одним или несколькими из следующих значений при указании PROC_THREAD_ATTRIBUTE_CHILD_PROCESS_POLICY для параметра Attribute:

PROCESS_CREATION_CHILD_PROCESS_RESTRICTED 0x01

Создаваемый процесс не может создавать дочерние процессы. Это ограничение становится свойством маркера, в котором выполняется процесс. Следует отметить, что это ограничение действует только в изолированных приложениях (таких как AppContainer), которые гарантируют, что дескриптор привилегированных процессов недоступен для процесса. Например, если процесс, ограничивающий создание дочернего процесса, может получить доступ к другому дескриптору процесса с помощью PROCESS_CREATE_PROCESS или PROCESS_VM_WRITE прав доступа, то можно обойти ограничение дочернего процесса.

PROCESS_CREATION_CHILD_PROCESS_OVERRIDE 0x02

Создаваемый процесс может создавать дочерний процесс, если в противном случае он будет ограничен. Это значение можно указать только в том случае, если процесс, создающий новый процесс, не ограничен.

DWORD, на который указывает lpValue, может быть одним или несколькими из следующих значений при указании PROC_THREAD_ATTRIBUTE_DESKTOP_APP_POLICY для параметра Attribute:

0x01 PROCESS_CREATION_DESKTOP_APP_BREAKAWAY_ENABLE_PROCESS_TREE

Создаваемый процесс создаст все дочерние процессы за пределами среды выполнения классических приложений. Это поведение по умолчанию для процессов, для которых не задана политика.

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
Header processthreadsapi.h (включая Windows.h в Windows 7, Windows Server 2008 Windows Server 2008 R2)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

DeleteProcThreadAttributeList

InitializeProcThreadAttributeList

Функции процессов и потоков