Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.054 c
15-1157526130
Задачник
2006-09-06 11:02
2006.09.24
Еще один баян.


2-1157371407
Ефимыч
2006-09-04 16:03
2006.09.24
Подскажите, как сделать, чтоб jpeg не компилировался в exe-шник?


5-1139847378
TVV
2006-02-13 19:16
2006.09.24
Использование компонент из DLL


2-1157437863
worldmen
2006-09-05 10:31
2006.09.24
Программное изменение языков.


15-1157493318
Palladin
2006-09-06 01:55
2006.09.24
Гэндальф





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский