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 が指す WORD には、IMAGE FILE MACHINE CONSTANTS に一覧表示される値を指定できます。

PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY
lpValue パラメーターは、子プロセスの悪用軽減ポリシーを指定する DWORD またはDWORD64へのポインターです。 Windows 10 バージョン 1703 以降では、このパラメーターは 2 要素 のDWORD64 配列へのポインターにすることもできます。

指定されたポリシーは、アプリケーションとシステムに対して設定されたポリシーをオーバーライドし、子プロセスの実行開始後に変更することはできません。

lpValue によって指DWORD64DWORD または DWORD64は、解説に記載されている値の 1 つ以上を指定できます。

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 スケジューラが完了リストから 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 を呼び出します。

解説

属性リストは、一連のキーと値のペア (属性ごとに 1 つ) で構成される不透明な構造です。 プロセスでは、このトピックで説明されている属性キーのみを更新できます。

attribute パラメーターにPROC_THREAD_ATTRIBUTE_MITIGATION_POLICYを指定する場合、lpValue が指す DWORD またはDWORD64は、次の 1 つ以上の値になります。

PROCESS_CREATION_MITIGATION_POLICY_DEP_ENABLE (0x00000001)子プロセスのデータ実行防止 (DEP) を有効にします。 詳細については、「 データ実行防止」を参照してください。
PROCESS_CREATION_MITIGATION_POLICY_DEP_ATL_THUNK_ENABLE (0x00000002)子プロセスの DEP-ATL サンク エミュレーションを有効にします。 DEP-ATL サンク エミュレーションにより、システムは Active Template Library (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 まではサポートされません。
force Address Space Layout Randomization (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 TB のボトムアップ分散が使用されます。 ボトムアップ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 Layered Service Providers (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) ポリシーがオンになっている場合、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)
さらに、EXEs/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 (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)
プロセスのイメージ読み込みポリシーによって、プロセスにマップできる実行可能イメージの種類が決まります。 ポリシーを有効にすると、低必須ラベルを持つデバイスやファイルを削除するなど、一部の場所からイメージを読み込むことができません。

イメージの読み込みポリシーでは、次の軽減策オプションを使用できます。

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 以降でのみ使用でき、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 に関連する投機的実行サイド チャネル攻撃に対して脆弱な可能性がある CPU の投機的ストア バイパス (SSB) 機能を無効にすることができます (CVE-2018-3639)。 このフラグは、必要なハードウェア機能を備えた特定の Intel CPU でのみサポートされます。 この機能をサポートしていない CPU では、フラグは無効です。

Windows 10 バージョン 2004: 次の値は、Windows 10 バージョン 2004 以降でのみ使用できます。

ハードウェア強制スタック保護 (HSP) はハードウェアベースのセキュリティ機能であり、CPU はシャドウ スタック メカニズムを使用して実行時に関数のリターン アドレスを検証します。 ユーザー モード HSP の場合、既定のモードは互換モードです。シャドウ スタック (CETCOMPAT) との互換性があると見なされるモジュールで発生するシャドウ スタック違反のみが致命的です。 strict モードでは、すべてのシャドウ スタック違反は致命的です。

次の軽減オプションは、ユーザー モードのハードウェア強制スタック保護と関連機能に使用できます。

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)

attribute パラメーターに PROC_THREAD_ATTRIBUTE_CHILD_PROCESS_POLICYを指定する場合、lpValue が指す DWORD には次の値を 1 つ以上指定できます。

PROCESS_CREATION_CHILD_PROCESS_RESTRICTED 0x01

作成されるプロセスは、子プロセスの作成を許可されていません。 この制限は、プロセスが実行されるトークンのプロパティになります。 この制限は、特権プロセス ハンドルがプロセスからアクセスできないようにするサンドボックス アプリケーション (AppContainer など) でのみ有効です。 たとえば、子プロセスの作成を制限するプロセスが、PROCESS_CREATE_PROCESSまたはPROCESS_VM_WRITEアクセス権を持つ別のプロセス ハンドルにアクセスできる場合、子プロセスの制限をバイパスできる場合があります。

PROCESS_CREATION_CHILD_PROCESS_OVERRIDE 0x02

作成されるプロセスは、それ以外の場合は、子プロセスの作成を許可されます。 この値は、新しいプロセスを作成するプロセスが制限されていない場合にのみ指定できます。

lpValue が指す DWORD は、Attribute パラメーターにPROC_THREAD_ATTRIBUTE_DESKTOP_APP_POLICYを指定するときに、次の値の 1 つ以上を指定できます。

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.h、Windows Server 2008 Windows Server 2008 R2 を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

DeleteProcThreadAttributeList

InitializeProcThreadAttributeList

プロセス関数とスレッド関数