我希望防止通过访问当前工作目录加载恶意DLL,如http://msdn.microsoft.com/en-us/library/ff919712(VS.85).aspx中所述
在我们的C++应用程序中实现的解决方案是对SetDllDirectory("")进行WinAPI调用,这将有效地从Windows DLL加载搜索路径中删除当前的工作目录。然而,这个解决方案似乎不适用于我们的Delphi应用程序,因为SetDllDirectory()函数不存在。
在Delphi中有没有和SetDllDirectory("")做同样事情的等效调用?谢谢!
发布于 2010-10-29 05:43:16
这应该能起到作用:
function SetDllDirectory(lpPathName:PWideChar): Bool; stdcall; external 'kernel32.dll' name 'SetDllDirectoryW';发布于 2010-10-29 05:40:13
调用SetDllDirectory('')不起作用?我看到它在最新版本的Windows.pas中被正确地声明了。如果你有一个没有声明的Delphi版本,你可以升级到最新版本的Delphi,或者自己声明它。
更新:,这就对了……延斯刚刚贴出了声明。
发布于 2010-10-29 17:31:40
uses DSiWin32;
if not DSiSetDllDirectory('path') then
....DSiSetDllDirectory还将负责动态链接,并将在XP之前的SP1系统上优雅地失败。
DSiWin32是作为免费软件发布的。
https://stackoverflow.com/questions/4047307
复制相似问题