データ実行防止(DEP)からプログラムを除外する
2015-01-18 Windows

Windows にはデータ実行防止 DEP : Data Execution Prevention という機能が搭載されています。データ実行防止 DEP 機能によって 一部のプログラムが正しく動作せず異常終了してしまうことがあります。

データ実行防止 DEP が有効になっている Windows McAfee VirusScan Enterprise Symantec Endpoint Protection などのウィルス対策ソフトを導入すると これらの製品不具合によって一部のプログラムが異常終了することもあります。

Windows 7/8 ではデータ実行防止 DEP の対象は重要な Windows のプログラムおよびサービスに限定されていますが Windows Server では既定の設定ですべてのプログラムがデータ実行防止 DEP の対象となっています。

また McAfee VirusScan Enterprise Symantec Endpoint Protection などのウィルス対策ソフトを導入している場合も プログラムがデータ実行防止 DEP の影響を受けて異常終了してしまうことがあります。

データ実行防止 DEP

データ実行防止 DEP の設定は システムのプロパティ にあります。コントロールパネルシステムとセキュリティシステムシステムの詳細設定 を開きます。

システムのプロパティ

システムのプロパティ が表示されるので パフォーマンス欄の 設定... ボタンを押します。次に パフォーマンス オプション が表示されるので データ実行防止 タブに切り替えます。

データ実行防止

これが Windows Server 2012 R2 の既定の設定です。Windows 7/8 と異なり すべてのプログラムがデータ実行防止 DEP の対象となっています。

ユーザープログラムを除外設定する

下部にある 追加... ボタンを押してプログラムを選択することで データ実行防止 DEP の対象から除外することができます。

ウィルス対策ソフトを導入している場合には ウィルス対策ソフトの設定でプログラムを除外登録できるものもあります。ウィルス対策ソフトの設定を確認してみてください。

プログラムを除外対象として追加できないときは?

プログラムを除外しようとしても以下のメッセージが表示されて 除外対象に追加できないことがあります。

このプログラムは データ実行防止 (DEP) を有効にして実行する必要があります。このプログラムでは DEP を無効にすることはできません。

DEPを無効にできない

これは データ実行防止機能との互換性テストされたことを意味する NXCOMPAT フラグがプログラムに付加されていることが原因です。プログラム内の NXCOMPAT フラグを無効にすることで データ実行防止 DEP から除外できるようになります。

C/C++で作成したアプリケーションの場合

対象のプログラムが C/C++で作成したアプリケーションの場合は ビルド時に NXCOMPAT フラグが有効にならないように設定することができます。

プロジェクトのプロパティで 構成プロパティリンカー詳細設定 を表示します。データ実行防止 (DEP) という項目を はい (/NXCOMPAT) から いいえ (/NXCOMPAT:NO) に変更します。

リンカー

これでプログラムをビルドすればデータ実行防止 DEP に除外登録できるようになります。

.NET C#/VB.NET で作成したアプリケーションの場合

Visual Studio を使用して.NET C#/VB.NET アプリケーションを作成している場合 Visual Studio NXCOMPAT フラグを変更することはできません。プログラムをビルドした後にツールを使用して NXCOMPAT フラグを除去する必要があります。

NXCOMPAT フラグの変更に使用するツールは editbin.exe です。これは Visual Studio Windows SDK に含まれています。

たとえば 自作の myapp.exe から NXCOMPAT フラグを除去する場合は以下のコマンドを実行します。

コマンドプロンプト
C:¥>editbin.exe /NXCOMPAT:NO myapp.exe

リンカー

editbin.exe が見つからないときは PATH が正しく設定されているか確認してください。通常のコマンドプロンプトではなく PATH が適切に設定されている開発者コマンドプロンプトを起動するのがオススメです。

自分で作成したアプリケーションではないときは?

自分で作成したアプリケーションではない場合も前述の editbin.exe を使って NXCOMPAT フラグを取り除くことでデータ実行防止 DEP から除外することができるようになります。

なるべくなら アプリケーションの製造元にデータ実行防止 DEP が有効になっている場合に異常終了してしまう旨を伝えてアプリケーション自体を修正してもらうのがベストです。

もう一度 データ実行防止 DEP の除外に挑戦

これで プログラムをデータ実行防止 DEP の対象から除外できるようになります。

DEP除外