GFlags と PageHeap
このバージョンのGFlagsには、Windowsでのヒープ割り当ての監視を可能にするツールであるPageHeap (pageheap.exe) の機能が含まれています。 PageHeap を使用すると、各割り当ての境界でメモリを予約する Windows 機能を使用して、割り当てを超えるメモリへのアクセス試行を検出できます。
GFlags のページ ヒープ オプションでは、各ヒープ割り当ての最後にフィル パターンを書き込み、割り当てが解放されたときにパターンを検査する標準ヒープ検証、または フルページ ヒープ検証 を選択できます。 プログラムが割り当てを超えてメモリにアクセスした場合にプログラムが即座に停止するように、各割り当ての最後にアクセスできないページを配置します。 完全ヒープ検証では、割り当てごとにメモリのフル ページが使用されるため、その広範な使用により、システム メモリ不足が発生する可能性があります。
すべてのプロセスに対して標準のページ ヒープ検証を有効にするには、gflags /r +hpa または gflags /k +hpa を使用します。
1 つのプロセスに対して標準ページ ヒープ検証を有効にするには、 gflags /p /enable ImageFileName を使用します。
1 つのプロセスでフル ページ ヒープ検証を有効にするには、 gflags /i ImageFileName +hpa または gflags /p /enable ImageFileName /full を使用します。
/k を除くすべてのページ ヒープ設定はレジストリに格納されメイン変更するまで有効になります。
PageHeap 機能は、イメージが起動される前に PageHeap 検証が有効になっている場合にのみアクティブであることに注意してください。 運用環境の IIS の W3WP など、実行時間の長いプロセスの場合、プロセスが再起動されるまで検証は開始されません。 同様に、プロセスの実行中に PageHeap が無効になっている場合、プロセスが再起動されるまで検証が続行されます。 プロセスの実行中に同じ GFlags コマンドを繰り返し発行しても、追加の効果はありません。 この影響として、GFlags コマンドを使用して PageHeap を有効にすることはべき等です。
PageHeap 構成は、プロセスの終了とシステムの再起動の間も永続的です。 必要な PageHeap 設定が構成されたら、システムの再起動を使用してプロセスを再初期化できますが、有効にすると機能を無効にすることはできません。 PageHeap の無効化は明示的に行う必要があります。
[GFlags] ダイアログ ボックスのイメージ ファイルの [ページ ヒープを有効にする] チェック ボックスを解釈する際には注意してください。 これは、イメージ ファイルに対してページ ヒープ検証が有効になっていることを示しますが、完全なページ ヒープ検証か標準ページ ヒープ検証かは示しません。 チェック ボックスをオンにした場合は、イメージ ファイルに対して [ページ ヒープの完全な検証] が有効になります。 ただし、コマンド ライン インターフェイスを使用してチェックを実行した場合は、イメージ ファイルに対して完全または標準のページ ヒープ検証を有効にするかどうかを確認できます。
プログラムに対してページ ヒープの完全検証と標準ページのどちらが有効になっているかを確認するには、コマンド ラインで gflags /pと入力します。 結果の表示では、 トレース は、プログラムに対して標準のページヒープ検証が有効になっていることを示し、 完全なトレース は、そのプログラムに対して完全なページヒープ検証が有効になっていることを示します。