![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как предотвратить загрузку Dll в определенный процесс [D5, Win2k]
vic_vm © (2003-09-20 16:05:00)
Где-то встречал примерно такой метод предотвращения загрузки Dll в определенный процесс:
В DllMain на уведомление DLL_PROCESS_ATTACH определяем имя главного модуля процесса и если не хотим чтобы наша Dll загружалась возвращаем в значении функции FALSE.
Проблемма в том что в MFC DllMain это функция, а в Delphi это процедура. Как быть?
Digitman (2003-09-22 16:06:00) [1]
> vic_vm
тебе ж говорят : состояние переменной ExitCode, устанавливаемая тобой в хде иниц-ции DLL, известит ОС об успешной либо неуспешной инициализации библ-ки
ExitCode = 0 - иниц-я прошла успешно
ExitCode = 1 - иначе
vic_vm (2003-09-21 14:02:00) [2]
Поправлюсь - этот код не работает в случае
ранего связывания
procedure A; external "DllPr.dll" name "A";
А при позднем связывании
LoadLibrary("DllPr.dll");
Все работает нормально.
vic_vm (2003-09-21 13:53:00) [3]
2 MBo
Ну и что мы в итоге получим?
Запускаю Project2 из под делфей и все равно вижу
в списке модулей (View->Debug Windows->Modules) DllPr.dll
А если запускаю Project2 без делфей то он вообще не запускается.
Пишет "Ошибка при инициализации приложения (0x0000142). Для выхода нажмите кнопку OK"
MBo (2003-09-20 16:47:00) [4]
получилось так:
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.