DLLの検索順
ネタ元 Advanced Windows第5版下より。
DLLを読む時のフォルダ検索順序について発見があったのでメモ。
1.実行可能モジュールのイメージファイルが含まれているディレクトリ
2.GetWindowsDirectory関数から返されるWindowsシステムディレクトリ
3.16ビットシステムディレクトリ、つまりWindowsディレクトリは以下のSystemサブフォルダ
4.GetSystemDirectory関数から返されるWindowsディレクトリ
5.プロセスのカレントディレクトリ
6.PATH環境変数に列挙されているディレクトリ
プロセスのカレントディレクトリが5番目になったのがWindows XP SP2以降で、それ以前のOSでは2番目になる。
この挙動はレジストリで変更可能で、
HKLM\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode
が1だとSP2以降のデフォルト、0だとそれ以前の挙動になると。
このレジストリ設定じたいは2000でも可能。
MSDNのドキュメントはこの辺。
Dynamic-Link Library Search Order
この挙動変更はアプリケーションのカレントディレクトリから偽のシステムDLLがロードされるのを防ぐために行われたので、変更しない方が良いとのこと。