次の方法で共有


PROCESS_MITIGATION_USER_SHADOW_STACK_POLICY構造体 (winnt.h)

ユーザー モードのハードウェア強制スタック保護 (HSP) のプロセス軽減ポリシー設定が含まれています。 GetProcessMitigationPolicy 関数と SetProcessMitigationPolicy 関数は、この構造体を使用します。

構文

typedef struct _PROCESS_MITIGATION_USER_SHADOW_STACK_POLICY {
  union {
    DWORD Flags;
    struct {
      DWORD EnableUserShadowStack : 1;
      DWORD AuditUserShadowStack : 1;
      DWORD SetContextIpValidation : 1;
      DWORD AuditSetContextIpValidation : 1;
      DWORD EnableUserShadowStackStrictMode : 1;
      DWORD BlockNonCetBinaries : 1;
      DWORD BlockNonCetBinariesNonEhcont : 1;
      DWORD AuditBlockNonCetBinaries : 1;
      DWORD CetDynamicApisOutOfProcOnly : 1;
      DWORD SetContextIpValidationRelaxedMode : 1;
      DWORD ReservedFlags : 22;
    } DUMMYSTRUCTNAME;
  } DUMMYUNIONNAME;
} PROCESS_MITIGATION_USER_SHADOW_STACK_POLICY, *PPROCESS_MITIGATION_USER_SHADOW_STACK_POLICY;

メンバー

DUMMYUNIONNAME

DUMMYUNIONNAME.Flags

このメンバーは、システム使用のために予約されています。

DUMMYUNIONNAME.DUMMYSTRUCTNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME.EnableUserShadowStack

TRUE の場合、互換性モードのプロセスに対してユーザー モードのハードウェア強制スタック保護が有効になります。 つまり、ハードウェアでサポートされている場合、CPU はシャドウ スタック メカニズムを使用して実行時に関数のリターン アドレスを検証します。 互換モードでは、シャドウ スタック (CETCOMPAT) と互換性があると見なされるモジュールで発生するシャドウ スタック違反のみが致命的です。 モジュールを CETCOMPAT と見なすには、バイナリの 場合は CETCOMPAT を使用してコンパイルするか、動的コードに SetProcessDynamicEnforcedCetCompatibleRanges を使用してマークする必要があります。 このフィールドは 、SetProcessMitigationPolicy では変更できません。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.AuditUserShadowStack

TRUE の場合、致命的なシャドウ スタック違反は代わりに致命的ではないものとして扱われ、診断イベントはイベント ログに記録されます。 このフィールドが TRUE の場合、互換性モードが監査されているか厳密モードが監査されているかに応じて、EnableUserShadowStack が TRUE で、EnableUserShadowStackStrictMode が TRUE になる場合があります。 このフィールドは 、SetProcessMitigationPolicy では変更できません。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.SetContextIpValidation

TRUE の場合、 SetThreadContextRtlRestoreContext などのスレッドの実行コンテキストを変更する API を呼び出すときに、新しい実行コンテキストで指定された命令ポインターに対して検証が実行されます。 このフィールドは 、SetProcessMitigationPolicy では変更できません。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.AuditSetContextIpValidation

TRUE の場合、検証が失敗する原因となった命令ポインターが代わりに許可され、診断イベントがイベント ログに記録されます。 このフィールドが TRUE の場合、SetContextIpValidation は TRUE である必要があり、命令ポインター検証が現在動作しているモードに応じて、SetContextIpValidationRelaxedMode が TRUE になる場合があります。 このフィールドは 、SetProcessMitigationPolicy では変更できません。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.EnableUserShadowStackStrictMode

TRUE の場合、厳密モードでプロセスに対してユーザー モードのハードウェア強制スタック保護が有効になります。 シャドウ スタック違反はすべて致命的です。 このフィールドが TRUE の場合、EnableUserShadowStack は TRUE である必要があります。 HSP が互換モードで有効になっている場合は、実行時にこのフィールドを TRUE に設定し、 SetProcessMitigationPolicy を呼び出すことで、厳密モードにアップグレードできます。 SetProcessMitigationPolicy を使用して HSP をダウングレードまたは無効にすることはできません。 HSP が無効になっている場合、 SetProcessMitigationPolicy を使用して有効にすることはできません。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.BlockNonCetBinaries

TRUE の場合、CETCOMPAT でコンパイルされていないバイナリは、プロセスへの読み込みからブロックされます。 このポリシーは、 SetProcessMitigationPolicy を呼び出してプロセスが開始された後に有効にすることができます。 一度有効にした後は無効にできません。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.BlockNonCetBinariesNonEhcont

TRUE の場合、CETCOMPAT でコンパイルされていないバイナリ、または例外処理継続メタデータ (/guard:ehcont) が含まれていないバイナリは、プロセスへの読み込みからブロックされます。 このフィールドが TRUE の場合、BlockNonCetBinaries は TRUE である必要があります。 このポリシーは、 SetProcessMitigationPolicy を呼び出してプロセスが開始された後に有効にすることができます。 一度有効にした場合、無効またはダウングレードすることはできません。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.AuditBlockNonCetBinaries

TRUE の場合、ブロックされていたバイナリ読み込みが許可され、診断イベントがイベント ログに記録されます。 このフィールドが TRUE の場合、BlockNonCetBinaries は TRUE である必要があり、BlockNonCetBinariesNonEhcont は、現在プロセスへの読み込みからブロックされているバイナリの種類に応じて TRUE になる場合があります。 このフィールドは 、SetProcessMitigationPolicy では変更できません。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.CetDynamicApisOutOfProcOnly

TRUE の場合、動的コードのセキュリティ プロパティを指定するために使用される特定の HSP API は、セキュリティのためにプロセスの外部からのみ呼び出すことができます。 これらの API は 、SetProcessDynamicEHContinuationTargets および SetProcessDynamicEnforcedCetCompatibleRanges です。 このポリシーは、 SetProcessMitigationPolicy を呼び出してプロセスが開始された後に有効にすることができます。 一度有効にした後は無効にできません。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.SetContextIpValidationRelaxedMode

TRUE の場合、プロセスの命令ポインターの検証は緩やかなモードにダウングレードされます。これにより、動的コード内または 例外処理継続メタデータを含まないバイナリ内にあるすべての命令ポインターが許可されます。 このフィールドが TRUE の場合、SetContextIpValidation は TRUE である必要があります。 実行時にこのフィールドを FALSE に設定し、 SetProcessMitigationPolicy を呼び出すことで、プロセスをリラックス モードから通常モードにアップグレードできます。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.ReservedFlags

このメンバーは、システム使用のために予約されています。

要件

要件
サポートされている最小のクライアント Windows 10バージョン 2004 (10.0;ビルド 19041)
サポートされている最小のサーバー Windows Server バージョン 2004 (10.0;ビルド 19041)
Header winnt.h

こちらもご覧ください

CETCOMPAT

GetProcessMitigationPolicy

SetProcessMitigationPolicy