如何在Delphi中调用WinAPI函数SetDllDirectory()?

时间:2010-10-28 21:27:10

标签: security delphi winapi dll setdlldirectory

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

中所述

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

在Delphi中是否有与SetDllDirectory(“”)相同的调用?谢谢!

3 个答案:

答案 0 :(得分:7)

这应该可以解决问题:

function SetDllDirectory(lpPathName:PWideChar): Bool; stdcall; external 'kernel32.dll' name 'SetDllDirectoryW';

答案 1 :(得分:4)

调用SetDllDirectory('')不起作用?我看到它在最新版本的Windows.pas中被正确声明。如果你有一个未声明的Delphi版本,你可以升级到最新版本的Delphi,或者自己声明。

更新:你去了...... Jens刚发布了声明。

答案 2 :(得分:3)

uses DSiWin32;

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

DSiSetDllDirectory还会处理动态链接,并且会在XP SP1之前的系统上正常运行。

DSiWin32作为免费软件发布。