DLLの参照カウントについて

LoadLibraryとFreeLibraryを使用したDLLの動的ロードは以下の記事で説明しました。
http://d.hatena.ne.jp/tekk/20091018/1255880682

LoadLibraryとFreeLibraryは、DLLの実行時ロードと解放をそれぞれ担当するAPIですが、呼び出した際にいきなりDLLを読みこんだり解放したりはしません。OSは内部でDLLの参照カウントを保持していて、同一DLLに対してLoadLibraryを2回実行した場合は、1回目でDLLを実際にロードし参照カウントを1インクリメントし、2回目ではDLLは読み込まず(既にメモリ内にロードされているため)参照カウントを1インクリメントするという処理を行います。FreeLibraryでは、参照カウントを逆に1デクリメントし、0になったタイミングでDLLをメモリから解放するといった処理になります。

上記のような動作をするため、FreeLibraryを呼び出してもDLLが解放されない場合、別の処理で該当DLLを使用していると考えられます。(間違えてLoadLibraryを2回呼び出している可能性もありますが)そのため、User32.dllをLoadLibrary/FreeLibraryしても別に問題は無い事になります。