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がロードされるのを防ぐために行われたので、変更しない方が良いとのこと。