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

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 приложения извлекает поток 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)Включает эмуляцию dep-ATL для дочернего процесса. Эмуляция отключения 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)
Куча завершается политикой повреждения, если она включена, приводит к завершению кучи, если она становится поврежденной. Обратите внимание, что параметр "всегда выкл." не переопределяет согласие по умолчанию для двоичных файлов с текущими версиями подсистемы, заданными в заголовке образа. Завершение кучи при повреждении принудительно применяется в пользовательском режиме.

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

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 (LSP)
  • Глобальные перехватчики Windows
  • Устаревшие редакторы методов ввода (IMEs)
Локальные перехватчики по-прежнему работают с включенной политикой отключения точки расширения. Это поведение используется для предотвращения загрузки устаревших точек расширения в процесс, который не использует их.

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

PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_ALWAYS_ON (0x00000001 << 32)
PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_ALWAYS_OFF (0x00000002 << 32)
Политика Control Flow Guard (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/БИБЛИОТЕК DLL. Если предпринята попытка загрузить ФАЙЛ 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 (0x000000000ui64 << 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 (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/non-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)

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

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)

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

0x01 PROCESS_CREATION_CHILD_PROCESS_RESTRICTED

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

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

0x02 PROCESS_CREATION_DESKTOP_APP_BREAKAWAY_DISABLE_PROCESS_TREE

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

0x04 PROCESS_CREATION_DESKTOP_APP_BREAKAWAY_OVERRIDE

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

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

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