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 を無効にすることはできません。
これは、 データ実行防止機能との互換性テストされたことを意味する 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) の対象から除外できるようになります。