最終更新:2011-01-30 (日) 07:44:53 (4806d)
DLLプリロード
Top / DLLプリロード
DLL ファイルを検索する場合に、検索する順番によってアプリケーションの開発者が意図しない DLL が読み込まれる可能性があるというものです。
主な原因
アプリケーションが DLL ファイルを読み込むには、LoadLibrary 関数、LoadLibraryEx 関数、SearchPath? 関数を利用できますが、主に、SearchPath? 関数を使用した場合に、DLL プリロード問題が発生します。SearchPath? 関数を安全に利用いただくには、BASE_SEARCH_PATH_ENABLE_SAFE_SEARCHMODE が含まれる SetSearchPathMode? 関数を利用してください。
SearchPath?関数の検索の順番
- アプリケーションが読み込まれたディレクトリ
- 現在の作業ディレクトリ (CWD: Current Working Directory)
- システム ディレクトリ
- 16 ビット システム ディレクトリ
- Windows ディレクトリ
- PATH 環境変数に設定されているディレクトリ
「現在の作業ディレクトリ」は、ファイルを開いたフォルダーを意味しています。例えばネットワーク共有 (\\Server1\share) 上に保存されたファイル Document.bar をダブルクリックするなどの方法で、.bar に関連付けられたアプリケーション C:\Program Files\foo\bar.exe を起動する場合、図 2 のように「現在の作業ディレクトリ」は、ネットワーク共有 (\\Server1\share) となり、「アプリケーションが読み込まれたディレクトリ」は、”C:\Program Files\foo” となります。
LoadLibrary関数、LoadLibraryEx関数の検索の順番
- アプリケーションが読み込まれたディレクトリ
- システム ディレクトリ
- 16 ビット システム ディレクトリ
- Windows ディレクトリ
- 現在の作業ディレクトリ (CWD: Current Working Directory)
- PATH 環境変数に設定されているディレクトリ