Как вызвать функцию WinAPI SetDllDirectory() в Delphi?
Я хотел бы предотвратить загрузку вредоносных библиотек DLL, которые могут быть возможны через доступ к текущему рабочему каталогу, как описано в http://msdn.microsoft.com/en-us/library/ff919712(VS.85).aspx
Решение, реализованное в наших приложениях C++, заключалось в вызове WinAPI SetDllDirectory(""), который эффективно удалял бы текущий рабочий каталог из пути поиска загрузки Windows DLL. Однако, похоже, что это решение недоступно для наших приложений Delphi, потому что функция SetDllDirectory() не существует.
Есть ли в Delphi эквивалентный вызов, который делает то же самое, что SetDllDirectory("")? Спасибо!
3 ответа
Это должно сделать трюк:
function SetDllDirectory(lpPathName:PWideChar): Bool; stdcall; external 'kernel32.dll' name 'SetDllDirectoryW';
Вызов SetDllDirectory('') не работает? Я вижу, что он правильно объявлен в последних версиях Windows.pas. Если у вас есть версия Delphi, в которой она не объявлена, вы можете обновить ее до последней версии Delphi или объявить ее самостоятельно.
Обновление: И вы идете... Дженс только что опубликовал декларацию.
uses DSiWin32;
if not DSiSetDllDirectory('path') then
....
DSiSetDllDirectory также позаботится о динамическом связывании и изменится изящно в системах до XP SP1.
DSiWin32 выпущен как бесплатная программа.