我想阻止加载可能通过访问当前工作目录的恶意DLL,如http://msdn.microsoft.com/en-us/library/ff919712(VS.85).aspx
中所述在我们的C ++应用程序中实现的解决方案是对SetDllDirectory(“”)进行WinAPI调用,这将有效地从Windows DLL加载搜索路径中删除当前工作目录。但是,似乎这个解决方案不适用于我们的Delphi应用程序,因为SetDllDirectory()函数不存在。
在Delphi中是否有与SetDllDirectory(“”)相同的调用?谢谢!
答案 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作为免费软件发布。