Форум: "WinAPI";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];
Внизмоя DLL подгружается другими приложениями Найти похожие ветки
← →
Nostradamus © (2006-05-24 15:39) [0]Имеется DLL с хуком: http://delphimaster.net/view/4-1147959433/
Я изменил её код следующим образом:case dwReason of
DLL_PROCESS_ATTACH:
begin
HMap := CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeOf(TData), MapID);
Data := MapViewOfFile(HMap, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(TData));
end;
DLL_PROCESS_DETACH:
begin
if Data^.OldHook <> 0 then begin
UnhookWindowsHookEx(Data^.OldHook);
Data^.OldHook := 0;
end;
UnMapViewOfFile(Data);
CloseHandle(HMap);
end;
Теперь после того как я запущу паралельно моей программе скажем Блокнот и закрою его то происходитDLL_PROCESS_DETACH:
begin
if Data^.OldHook <> 0 then begin
UnhookWindowsHookEx(Data^.OldHook);
Data^.OldHook := 0;
end;
UnMapViewOfFile(Data);
CloseHandle(HMap);
end;
Не смотря на то, что моя программа всё ещё работает. Я сделал вывод, что моя ДЛЛ атачится по какой-то причине к другим приложениям.
Вопроc - почему и как это предотвратит???
← →
Сергей М. © (2006-05-24 15:43) [1]
> Вопроc - почему
Потому что это нормальное поведение ОС.
> как это предотвратит?
В случае с Windows - никак.
← →
Nostradamus © (2006-05-24 15:49) [2]ага, ну по крайней мере это не моя ошибка.
Но есть ещё одна проблема:
после закрытия моей программы длл ещё какое-то время (иногда длительное) всё ещё занята, т.е. её нельзя удалить/перезаписать.
← →
tesseract © (2006-05-24 15:55) [3]Тоже нормальное поведение OC.
Если конечно в реестре не выставлен параметр для немедленной выгрузки DLL.
← →
Nostradamus © (2006-05-24 15:57) [4]
> Если конечно в реестре не выставлен параметр для немедленной
> выгрузки DLL.
>
А где конкретно можно выставить этот параметер?
← →
Сергей М. © (2006-05-24 16:30) [5]
> Nostradamus © (24.05.06 15:49) [2]
Это как минимум из-за некоторых "кривых" приложений, "висящих в трее" - они не "отпускают" библиотеку.
← →
Nostradamus © (2006-05-24 16:32) [6]
> Это как минимум из-за некоторых "кривых" приложений, "висящих
> в трее" - они не "отпускают" библиотеку.
>
Одним словом реально повлиять на ситуацию я не могу :(
← →
Сергей М. © (2006-05-24 16:34) [7]Для начала проверь-подтверди/опровергни мое предположение
← →
Nostradamus © (2006-05-24 16:42) [8]Сложно сказать на 100%, но я уже проделал очень много тестов и действительно заметил, что чем больше разного софта запущено, тем больше вероятность того, что длл будет долго занята. В VMWare на голой машине она всегда через секунд 30 свободна...
← →
Сергей М. © (2006-05-24 17:42) [9]
> Сложно сказать на 100%
Найди любой инструмент, позволяющий перечислять процессы, использующие указанный модуль - он поможет понять закономерность
← →
Leonid Troyanovsky © (2006-05-24 18:28) [10]
> Nostradamus © (24.05.06 16:42) [8]
> Сложно сказать на 100%, но я уже проделал очень много тестов
> и действительно заметил, что чем больше разного софта запущено,
> тем больше вероятность того, что длл будет долго
Хуковая dll выгружается после снятия хука (UnhookWindowsHookEx)
при обработке _очередного_ сообщения.
Если процессов много, то, возможно, что некоторые потоки
не получают вообще процессорного времени, т.к. заняты,
например, ожиданием ввода.
Если речь о конкретном приложении, то ему можно послать
SendMessage, скажем WM_NULL. Бродкаст более рискован,
на худой конец - SendMessageTimeout.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c