2017-03-23 5 views
0

私はC#アプリケーションを持っており、管理者権限で実行します。私はそれのためにDEPを強制したい。プロセスのDEPをオンに設定するか、DEPが無効になっている場合はアプリを強制終了します。C#アプリケーションでデータ実行防止(DEP)を実施

しかし、私は両方で失敗しました。 私のコードは次のとおりです。機能SetProcessDEPPolicyを呼び出す

private static void CheckDEP() 
{ 
    var dep = SetProcessDEPPolicy(3); 

    var handle = Process.GetCurrentProcess().Handle; 
    var res = GetProcessDEPPolicy(handle, out var flags, out var permanent); 
} 

[DllImport("kernel32.dll", SetLastError = true)] 
static extern bool SetProcessDEPPolicy(uint dwFlags); 

[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] 
static extern bool GetProcessDEPPolicy(IntPtr hProcess, out uint lpFlags, out bool lpPermanent); 

(3)常に(ドキュメントは、それはそれは、64ビットプロセスから呼ばれていた場合にのみ、このエラーを返すべきであると述べているが、これはそうではありません)エラー50で失敗します。

そして、おそらくエラー87(パラメータが間違っている)で呼び出しが失敗するため、GetProcessDEPPolicyにいくつかのバグがあります。たぶん、ハンドルが間違っていますか?

+0

AlwaysOnを選択するBoot.iniを使用して、最新のマシンを実行しています。それをコードで変更するということは、*サポートされていない*です。 –

+1

bcdeditは自分のケースではOptInと言っています –

答えて

0

ので、解決策は、x86に変更 AnyCPUから構成マネージャビルド構成にあります。両方のメソッドが期待どおりに動作するようになりました。

AnyCPUのエラーは、x64(DEPがデフォルトで強制され、これらのメソッドは前述のエラーを返す必要があります)と同じです。

関連する問題