次の方法で共有


SetProcessDEPPolicy 関数 (winbase.h)

32 ビット プロセスのデータ実行防止 (DEP) と DEP-ATL サンク エミュレーション設定を変更します。

構文

BOOL SetProcessDEPPolicy(
  [in] DWORD dwFlags
);

パラメーター

[in] dwFlags

次の値のうち 1 つ以上を指定できる DWORD

意味
0
DEP システム ポリシーが OptIn または OptOut で、プロセスに対して DEP が有効になっている場合、 dwFlags を 0 に設定すると、プロセスの DEP が無効になります。
PROCESS_DEP_ENABLE
0x00000001
現在のプロセスで DEP を永続的に有効にします。 PROCESS_DEP_ENABLEを設定してプロセスに対して DEP を有効にした後、プロセスの有効期間中は無効にすることはできません。
PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION
0x00000002
現在のプロセスの DEP-ATL サンク エミュレーションを無効にします。これにより、システムが Active Template Library (ATL) サンク 層から発生した NX 障害をインターセプトできなくなります。 詳細については、「解説」を参照してください。 このフラグは、 PROCESS_DEP_ENABLEでのみ指定できます。

戻り値

関数が成功すると、 TRUE が返されます。

関数が失敗した場合は、 FALSE を返します。 この関数に対して定義されているエラー値を取得するには、 GetLastError を呼び出します。

注釈

SetProcessDEPPolicy 関数は、プロセスの作成時に DEP ポリシーが指定されていない限り、現在のプロセスのシステム DEP ポリシーをオーバーライドします。 システム DEP ポリシー設定は OptIn または OptOut である必要があります。 システム DEP ポリシーが AlwaysOff または AlwaysOn の場合、 SetProcessDEPPolicy はエラーを返します。 プロセスに対して DEP が有効になった後、 SetProcessDEPPolicy の後続の呼び出しは無視されます。

PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY属性を使用してプロセスの作成時に指定された DEP ポリシーは、プロセスの有効期間中は変更できません。 この場合、 SetProcessDEPPolicy の呼び出しは ERROR_ACCESS_DENIEDで失敗します。

SetProcessDEPPolicy は、32 ビット プロセスでのみサポートされています。 この関数が 64 ビット プロセスで呼び出されると、 ERROR_NOT_SUPPORTEDで失敗します。

ATL 7.1 以前に書き込まれたアプリケーションは、非実行可能とマークされたページでコードの実行を試みることができます。これにより、NX エラーがトリガーされ、アプリケーションが終了します。 DEP-ATL サンク エミュレーションを使用すると、それ以外の場合は、NX 障害をトリガーするアプリケーションを DEP を有効にして実行できます。 ATL バージョンの詳細については、「 ATL と MFC のバージョン番号」を参照してください。

DEP-ATL サンク エミュレーションが有効になっている場合、システムは NX 障害をインターセプトし、命令をエミュレートし、例外を処理して、アプリケーションを引き続き実行できるようにします。 プロセスに PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION を設定して DEP-ATL サンク エミュレーションを無効にした場合、NX 障害はインターセプトされません。これは、DEP との互換性のためにアプリケーションをテストするときに便利です。

次の表は、システム DEP ポリシー、DEP-ATL サンク エミュレーション、 および SetProcessDEPPolicy 間の相互作用をまとめたものです。 システム DEP ポリシー設定を取得するには、 GetSystemDEPPolicy 関数を使用します。

システム DEP ポリシー DEP の動作 サンク エミュレーションの動作をDEP_ATLする SetProcessDEPPolicy の 動作
AlwaysOff

0

オペレーティング システムとすべてのプロセスで無効になっています。 適用不可。 エラーを返します。
AlwaysOn

1

オペレーティング システムとすべてのプロセスに対して有効になります。 無効。 エラーを返します。
OptIn

2

Windows クライアント バージョンの既定の構成。

オペレーティング システムに対して有効で、システム以外のプロセスでは無効です。 管理者は、選択した実行可能ファイルに対して DEP を明示的に有効にすることができます。 適用不可。 DEP は、現在のプロセスで有効にすることができます。

現在のプロセスで DEP が有効になっている場合、そのプロセスで DEP-ATL サンク エミュレーションを無効にすることができます。

Optout

3

Windows Server バージョンの既定の構成。

オペレーティング システムとすべてのプロセスに対して有効になります。 管理者は、選択した実行可能ファイルの DEP を明示的に無効にすることができます。 有効にします。 DEP は、現在のプロセスで無効にすることができます。

現在のプロセスで DEP が無効になっている場合、DEP-ATL サンク エミュレーションはそのプロセスに対して自動的に無効になります。

 

この関数を呼び出すアプリケーションをコンパイルするには、 _WIN32_WINNT を 0x0600 以降として定義します。 詳細については、「 Windows ヘッダーの使用」を参照してください。

要件

要件
サポートされている最小のクライアント Windows Vista と SP1、Windows XP SP3 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winbase.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

データ実行防止

GetProcessDEPPolicy

GetSystemDEPPolicy