Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.24;
Скачать: CL | DM;

Вниз

моя DLL подгружается другими приложениями   Найти похожие ветки 

 
Nostradamus ©   (2006-05-24 15:39) [0]

Имеется DLL с хуком: http://predskazanie-wunschpunsch.ru/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 вся ветка

Текущий архив: 2006.09.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
2-1157445382
Sele
2006-09-05 12:36
2006.09.24
left top Timage


3-1153388502
svv
2006-07-20 13:41
2006.09.24
Как правильнее запрос через ADO или хранимка и sp_executeSql


15-1157202905
Копир
2006-09-02 17:15
2006.09.24
С Днём Рождения, Москва! Почти 860 лет!


15-1157058254
!_SM_!
2006-09-01 01:04
2006.09.24
BTN%Copy%1 BTN%Copy%2


4-1148310463
n0name
2006-05-22 19:07
2006.09.24
Наследник оконного класса