6

http://msdn.microsoft.com/en-us/library/ff919712(VS.85).aspxで説明されているように、現在の作業ディレクトリへのアクセスによって可能になる可能性のある悪意のある DLL の読み込みを防止したいと考えています。

C++ アプリに実装された解決策は、SetDllDirectory("") への WinAPI 呼び出しを行うことでした。これにより、現在の作業ディレクトリが Windows DLL 読み込み検索パスから効果的に削除されます。ただし、SetDllDirectory() 関数が存在しないため、このソリューションは Delphi アプリでは利用できないようです。

SetDllDirectory("") と同じことを行う Delphi の同等の呼び出しはありますか? ありがとう!

4

3 に答える 3

7

これでうまくいくはずです:

function SetDllDirectory(lpPathName:PWideChar): Bool; stdcall; external 'kernel32.dll' name 'SetDllDirectoryW';
于 2010-10-28T21:43:15.987 に答える
5

SetDllDirectory('') を呼び出しても機能しませんか? 最新バージョンの Windows.pas では適切に宣言されていることがわかります。宣言されていない Delphi のバージョンを使用している場合は、Delphi の最新バージョンにアップグレードするか、自分で宣言することができます。

更新:では、どうぞ... Jens が宣言を投稿しました。

于 2010-10-28T21:40:12.770 に答える
4
uses DSiWin32;

if not DSiSetDllDirectory('path') then
   ....

DSiSetDllDirectory は動的リンクも処理し、XP SP1 より前のシステムでは適切に失敗します。

DSiWin32はフリーウェアとしてリリースされています。

于 2010-10-29T09:31:39.723 に答える