Как вызвать функцию WinAPI SetDllDirectory () в Delphi? - PullRequest
6 голосов
/ 29 октября 2010

Я хотел бы предотвратить загрузку вредоносных библиотек DLL, которые могут быть возможны через доступ к текущему рабочему каталогу, как описано в http://msdn.microsoft.com/en-us/library/ff919712(VS.85).aspx

Решение, реализованное в наших приложениях C ++, состояло в том, чтобы сделать вызов WinAPI SetDllDirectory(""), которая эффективно удаляет текущий рабочий каталог из пути поиска загрузки Windows DLL.Однако, кажется, что это решение недоступно для наших приложений Delphi, потому что функция SetDllDirectory () не существует.

Есть ли в Delphi эквивалентный вызов, который выполняет ту же функцию, что и SetDllDirectory ("")?Спасибо!

Ответы [ 3 ]

7 голосов
/ 29 октября 2010

Это должно сработать:

function SetDllDirectory(lpPathName:PWideChar): Bool; stdcall; external 'kernel32.dll' name 'SetDllDirectoryW';
4 голосов
/ 29 октября 2010

Вызов SetDllDirectory ('') не работает?Я вижу, что он правильно объявлен в последних версиях Windows.pas.Если у вас есть версия Delphi, в которой она не объявлена, вы можете обновить ее до последней версии Delphi или объявить ее самостоятельно.

Обновление: И все ...Дженс только что опубликовал декларацию.

3 голосов
/ 29 октября 2010
uses DSiWin32;

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

DSiSetDllDirectory также позаботится о динамическом связывании и изящно завершит работу в системах, предшествующих XP SP1.

DSiWin32 выпущен в качестве бесплатного программного обеспечения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...