1

ProcessStrictHandleCheckPolicySetProcessMitigationPolicyを有効にするために Windows 10 で使用しようとしています。

プロセスが無効なハンドルを操作すると、プロセスは致命的なエラーを受け取ります。

原則として、厳密なハンドル チェックをオンにすると、オフにすることはできません。したがって、このポリシーでSetProcessMitigationPolicy関数を呼び出す場合、RaiseExceptionOnInvalidHandleReferenceおよびHandleExceptionsPermanentlyEnabled サブ構造メンバーの値は同じである必要があります。無効なハンドルの例外を一時的にのみ有効にすることはできません。

他の多くの軽減策を有効にすることができます。

  • ProcessDynamicCodePolicy: プロセスの動的コード ポリシー。オンにすると、プロセスは動的コードを生成したり、既存の実行可能コードを変更したりできなくなります。
  • ProcessExtensionPointDisablePolicy: レガシ拡張ポイント DLL のプロセス軽減ポリシー設定が含まれています。
  • ProcessSignaturePolicy: イメージの読み込みを、Microsoft、Windows ストア、または Microsoft、Windows ストア、および Windows Hardware Quality Labs (WHQL) によって署名されたイメージに制限できるプロセスのポリシー。
  • ProcessFontDisablePolicy: プロセスのフォント読み込みに関するポリシー。オンにすると、プロセスは非システム フォントをロードできません。
  • ProcessImageLoadPolicy: プロセスのイメージ読み込みに関するポリシー。プロセスにマップできる実行可能イメージのタイプを決定します。オンにすると、リモート デバイスや必須ラベルが低いファイルなど、一部の場所からイメージを読み込むことができなくなります。

しかしProcessStrictHandleCheckPolicy :

PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY policy;
policy.RaiseExceptionOnInvalidHandleReference = 1;
policy.HandleExceptionsPermanentlyEnabled = 1;

BOOL res = SetProcessMitigationPolicy(ProcessStrictHandleCheckPolicy, policy, sizeof(policy));

if (!res) 
   RaiseLastWin32Error();

エラー コード 87 で失敗します。

ERROR_INVALID_PARAMETER
パラメータが正しくありません

なにが問題ですか?

ボーナスおしゃべり

ProcessDynamicCodePolicyポリシーは、組み込み Web ブラウザーが Javascript を実行するのを防ぎます。

  • ProhibitDynamicCode: プロセスが動的コードを生成したり、既存の実行可能コードを変更したりしないようにするには、(0x1) を設定します。それ以外の場合は未設定 (0x0) のままにします。
  • AllowThreadOptOut: ThreadInformation パラメーターをThreadDynamicCodePolicyに設定してSetThreadInformation関数を呼び出すことにより、スレッドが動的コード生成の制限をオプトアウトできるように (0x1) を設定します。それ以外の場合は未設定 (0x0) のままにします。強力なセキュリティを提供するために、 AllowThreadOptOutThreadDynamicCodePolicyの設定を一緒に使用しないでください。これらの設定は、完全な動的コード制限に対してアプリケーションがコードをより簡単に適応できるようにすることのみを目的としています。

より多くのボーナス

私は実際には Delphi を使用しているため、構文は上記の C/C++/C# 擬似コードとは異なります。

type
    //ProcessStrictHandleCheckPolicy - The process will receive a fatal error if it manipulates an invalid handle. Useful for preventing downstream problems in a process due to handle misuse.
    PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY = record
        Flags: DWORD;
                //DWORD RaiseExceptionOnInvalidHandleReference : 1;
                //DWORD HandleExceptionsPermanentlyEnabled : 1;
                //DWORD ReservedFlags : 30;
    end;

procedure SetMitigationPolicy;
var
    policy: PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY;
    res: BOOL;
begin
    policy.Flags := $00000002;
    res := SetProcessMitigationPolicy(ProcessStrictHandleCheckPolicy, @policy, sizeof(policy));
    if not res then
        RaiseLastWin32Error;
end;

質問は変わりません:

  • 厳密には Delphi 関連ではない Delphi コードを投稿すると、Delphi タグを含めるべきだったというコメントが表示されることがあります。
  • Delphi コードを投稿すると、Delphi に厳密には関係なく、Delphi タグを含めるべきではなかったというコメントが表示されることがあります。

サイコロを振る

delphi delphi-xe6タグを含めないでください。

ボーナスリーディング

4

1 に答える 1

3

PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICYドキュメントから:

原則として、厳密なハンドル チェックをオンにすると、オフにすることはできません。したがって、このポリシーで SetProcessMitigationPolicy 関数を呼び出す場合、RaiseExceptionOnInvalidHandleReference および HandleExceptionsPermanentlyEnabled サブ構造メンバーの値は同じでなければなりません。無効なハンドルの例外を一時的にのみ有効にすることはできません。

あなたが書いたとき:

policy.Flags := $00000002;

フラグを設定するだけで、HandleExceptionsPermanentlyEnabledフラグは設定しませんRaiseExceptionOnInvalidHandleReference。代わりに、両方のフラグを設定するのは次のようにする必要があります。

policy.Flags := $00000003;

C++ コードはコンパイルされないため、実際に実行したことがないと確信しています。明らかなコンパイル エラーを修正すると、正常に実行されます。

#define  _WIN32_WINNT 0x0602

#include <Windows.h>
#include <Processthreadsapi.h>
#include <iostream>

int main()
{
    PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY policy = { 0 };
    policy.RaiseExceptionOnInvalidHandleReference = 1;
    policy.HandleExceptionsPermanentlyEnabled = 1;

    BOOL res = SetProcessMitigationPolicy(ProcessStrictHandleCheckPolicy, &policy, 
        sizeof(policy));
    DWORD err = 0;
    if (!res)
        err = GetLastError();
    std::cout << res << ", " << err;
}

このプログラム1, 0は期待どおりに出力します。追加すると

policy.Flags = 0x00000002;

への呼び出しの直前にSetProcessMitigationPolicy、出力は0, 87です。

于 2016-10-27T21:43:44.283 に答える