イメージにはメッセージ ダイジェストに含めないほうがよい部分がいくつかあります。本節ではそのような部分を識別し、なぜそれをメッセージ ダイジェストに含めないのかを説明します。属性認証に関連する情報。認証を認証の中に存在するメッセージ ダイジェストの計算に含めることは不可能です。認証はイメージ全体の統合に影響を与えることなく、イメージへの追加およびイメージからの削除ができるようになっているので、これは問題ではありません。したがって、メッセージ ダイジェストを計算するときにすでにイメージに含まれている認証があったとしても、すべての属性認証をイメージの外に残すのが最良の方法です。それらの認証が後になってもそこに存在していたり、他の認証が追加されないという保証はありません。メッセージ ダイジェストの計算から属性認証情報を除外するには、以下の情報を計算から除外しなければなりません。
- オプション ヘッダ データ ディレクトリのCertificate Tableフィールド。
- Certificate Tableとすぐ上にリストのあるCertificate Tableによって指し示されている対応する認証。
デバッグ情報。- デバッグ情報は一般に参考資料(デバッガのための)と考えられ、実行プログラムの実際の統合には効果を持ちません。できあがった成果物からは、プログラムの機能に何の影響も与えることなく、まったく文字通りに、デバッグ情報をイメージから削除することが可能です。これは、実際に、ディスクを節約するための手段としてしばしば用いられる方法です。メッセージ ダイジェストにデバッグ情報をどうしても含めておきたい場合は、以下の情報をメッセージ ダイジェストの計算に含めないようにするべきです。
- オプション ヘッダ内のデータ ディレクトリのデバッグ エントリ。
- .debugセクション オプション ヘッダのWindows NT固有フィールドのFile Checksumフィールド。このチェックサムはファイル全体を含んでおり(ファイルに含まれているあらゆる属性認証を含んでいます)、あらゆる点で、認証を挿入した後では、認証を含めるために元のメッセージ ダイジェストを計算したときとは異なっています。
未使用、または無効のフィールド。- いくつかの未使用または無効になったフィールドがあります。これらのフィールドは不定であり、メッセージ ダイジェストを計算した後で変わることがあります。以下のものが含まれます。
- オプション ヘッダのWindows NT固有フィールドのReserved フィールド(オフセット52)。
- オプション ヘッダのWindows NT固有フィールドのDLL Flagsフィールド。このフィールドは無効になっています。
- オプション ヘッダのWindows NT固有フィールドのLoader Flagsフィールド。このフィールドは無効になっています。
- オブジェクト ヘッダのデータ ディレクトリの予約済みエントリ。
リソース(ローカライズを容易にします)- 特定の属性認証に依存するため、メッセージ ダイジェストにリソースを含めることは望ましいときと望ましくないときがあります。新しい認証を生成せずにローカライズをできるようにしたい場合には、メッセージ ダイジェストにリソースを含めないほうがよいでしょう。リソースの値がアプリケーションにとって重要である場合には、メッセージ ダイジェストにそれらを含めるほうがよく、イメージのローカライズされたコピーごとに認証を生成するオーバーヘッドを受け入れることになるでしょう。メッセージ ダイジェストの中にリソースを含めたくない場合には、メッセージ ダイジェストの計算に次の情報を含めないようにしなければなりません。
- オプション ヘッダデータ ディレクトリのResource Tableエントリ
- .rsrc セクション