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


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

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

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/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 (0x0000000ui64 << 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 (0x0000003ui64 << 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 (0x0000002ui64 << 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 (0x00000000ui64 << 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)Этот флаг может использоваться процессами для защиты от одноуровневых аппаратных потоков (hyperthreads) от вмешательства в прогнозирование косвенных ветвей. Процессам, у которых есть конфиденциальная информация в адресном пространстве, следует рассмотреть возможность включения этого флага для защиты от атак, связанных с прогнозированием непрямых ветвей (например, 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

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