6

我想防止加载可能通过访问当前工作目录的恶意 DLL,如http://msdn.microsoft.com/en-us/library/ff919712(VS.85).aspx中所述

在我们的 C++ 应用程序中实现的解决方案是对 SetDllDirectory("") 进行 WinAPI 调用,这将有效地从 Windows DLL 加载搜索路径中删除当前工作目录。然而,这个解决方案似乎不适用于我们的 Delphi 应用程序,因为 SetDllDirectory() 函数不存在。

Delphi 中是否有与 SetDllDirectory("") 执行相同操作的等效调用?谢谢!

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 回答