Форум: "WinAPI";
Текущий архив: 2003.11.17;
Скачать: [xml.tar.bz2];
ВнизКак предотвратить загрузку Dll в определенный процесс Найти похожие ветки
← →
vic_vm (2003-09-20 16:05) [0]Где-то встречал примерно такой метод предотвращения загрузки Dll в определенный процесс:
В DllMain на уведомление DLL_PROCESS_ATTACH определяем имя главного модуля процесса и если не хотим чтобы наша Dll загружалась возвращаем в значении функции FALSE.
Проблемма в том что в MFC DllMain это функция, а в Delphi это процедура. Как быть?
← →
MBo (2003-09-20 16:47) [1]получилось так:
library DllPr;
uses
Windows, dialogs;
procedure A(var Param:Integer);
begin
Param:=Param+1;
end;
procedure DLLEntryPoint(dwReason: DWord);
var lproc: string;
l:integer;
begin
case dwReason of
DLL_PROCESS_ATTACH: begin
setlength(lproc,max_path);
l:=getmodulefilename(0,Pchar(lproc),max_path);
setlength(lproc,l);
ShowMessage("Attaching to process "+lproc);
if pos("Project2",lproc)>0 then
ExitCode:=1;
end;
DLL_PROCESS_DETACH: ;
end;
end;
exports
A;
begin
DllProc := @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.
← →
vic_vm (2003-09-21 13:53) [2]2 MBo
Ну и что мы в итоге получим?
Запускаю Project2 из под делфей и все равно вижу
в списке модулей (View->Debug Windows->Modules) DllPr.dll
А если запускаю Project2 без делфей то он вообще не запускается.
Пишет "Ошибка при инициализации приложения (0x0000142). Для выхода нажмите кнопку OK"
← →
vic_vm (2003-09-21 14:02) [3]Поправлюсь - этот код не работает в случае
ранего связывания
procedure A; external "DllPr.dll" name "A";
А при позднем связывании
LoadLibrary("DllPr.dll");
Все работает нормально.
← →
Digitman (2003-09-22 16:06) [4]
> vic_vm
тебе ж говорят : состояние переменной ExitCode, устанавливаемая тобой в хде иниц-ции DLL, известит ОС об успешной либо неуспешной инициализации библ-ки
ExitCode = 0 - иниц-я прошла успешно
ExitCode = 1 - иначе
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.11.17;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c