〔前の画面〕
〔クリックポイント〕 〔最新の一覧〕
〔全て読んだことにする〕〔全て読んだことにして終了〕 〔終了〕
2010/11/12(金)16:55 - 松岡 - 133.6.57.2 - 813 hit(s)
段々分かってきました。
http://yamanxworld.blogspot.com/2010/09/windows-dll.html
に書いてあるように
「Windows XP SP1 および Windows Server 2003 からは、
セキュリティ上の理由から検索順序が変更され、
カレンとディレクトリがシステム ディレクトリ
(%Windir%\System32 や %Windir%\System) や
Windows ディレクトリ (%Windir%) より後の 5 番目にくるように変更されました。」
shell32.dllは,%SystemRoot%\System32\shell32.dll
(普通は,C:\windows\system32)
にあり,
LoadLibrary(TEXT("shell32.dll"));
本来的には,XP SP1以降ならば安全なはずなのですが,
shell32.dllが間接的にdwmapi.dllというのを
呼ぶときに脆弱性が発生する可能性あるようです。
こうなるとOSが対応すべきことなので,gnuplotでどうこうという話ではないような
気がしてきました。
もう少し調べてみますが。
またガイドラインにある
SetDllDirectory ("");
を
LoadLibrary(TEXT("shell32.dll"));
の前に入れることぐらいは試してみます。
また,起動時のdllロードの件ですが,
DLL の検索順序は次のようになります。
1. アプリケーションがロードされたディレクトリ
になっているので,現在のgnuplotのパッケージは,必要なdllを
exeと同じフォルダにいれていますので,このフォルダに直接同じ名前で
整合性のとれたdllをたたきこまれる以外は大丈夫なはずです。
(そこまでやられたら原理的にはどうにもならない。)
ただ,
5. 現在の作業ディレクトリ (CWD)
6. PATH 環境変数の一覧にあるディレクトリ
容量を節約しようとして共通のdllをpathで共有するような場合,危険性があると
いうことになります。
〔ツリー構成〕
【2339】 DLL の読み込み 2010/11/12(金)08:51 竹の (258) |
┣【2347】 re(5):DLL の読み込み 2010/11/12(金)16:55 松岡 (1411) |
〔前の画面〕
〔クリックポイント〕 〔最新の一覧〕
〔全て読んだことにする〕〔全て読んだことにして終了〕 〔終了〕
※ 『クリックポイント』とは一覧上から読み始めた地点を指し、ツリー上の記事を巡回しても、その位置に戻ることができます.