![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Задержка выгрузки Dll [D5, D6, Win95/98, NT4, Win2k, WinXP]
Sodom © (2002-10-07 11:15:00)Я внеряю длл с помощью хуков. Действую по такой схеме:
Пусть процесс A.exe - жертва в адресное пространство которого я внедряю некую D.dll. Я в процессе B.exe ставлю хук (Проца хука в некой DH.dll а адр-м пр-ве B.exe) на WH_GETMESSAGE и посылаю postmessage окну процесса A.exe, чтобы DH.dll подгрузилось в его адресное пространство. DH.dll как только оказывается в адр. пр-ве процесса A.exe загружает туда нужную мне D.dll, снимаю хук и B.exe завершается. Все работает как часы, вопрос следующий: По идее сразу после снятия хука система выгружает DH.dll из всех процессов в которые она подгружалась. Но на практике оказывается что DH.dll может сидеть в каком нибудь процессе еще секунд 30..50 после снятия хука. Вот эта задержка мне и непонятна. Кто нибудь может дать этому объяснение?
Aleksey Pavlov (2002-10-14 15:50:00) [1]Не стоит путать DLL, которые подгружаются в память при загрузки системы (только в Win2k системах) и эффект DLL-ки оставшейся в памяти после её освобождения (т.е. когда число ссылок на неё становится равным 0).
Про первый вариант можно почитать в FAQ для Win2k, а про второй могу сказать следующее:
действительно, после того, как число ссылок на экземпляр DLL загруженный в физическую память стал равным 0 эта DLL должна быть выгружена из памяти (но где написано, что непременно сразу же? ;)
Дело тут в следующем: Microsoft таким образом решила увеличить быстродействие системы. Т.е. считается, что с немалой долей вероятности данная DLL может через короткий промежуток времени понадобится какой-то программе снова (к примеру, вы закрыли документ Word и открываете следующий) и что бы исключить накладные расходы на загрузку её в память (создания отображения) DLL остаётся в памяти некоторое время.
Работа этого механизма хорошо видна, когда, к примеру, повторно запускаешь (с малым промужетком времени) ресурсоёмкие приложения (3DMax, Photoshop и т.д.).
Xemax (2002-10-14 14:12:00) [2]>>>>Sodom © (14.10.02 12:06)
>Кто такой бил?
БИЛЛ ГЕЙТС
Василий2 (2002-10-14 12:43:00) [3]У меня такая же хрень была... Не знаю, правда, почему.....
Sodom (2002-10-14 12:06:00) [4]
> Xemax ©
> Задай этот вопрос билу ;-))
Кто такой бил?
> Cobalt ©
> В какой конкретно ОС такой глюк? ...
Win 2000. Да я бы не сказал что глюк, так интересно стало почему?
Cobalt (2002-10-14 11:12:00) [5]В какой конкретно ОС такой глюк?
А то, я слышал, что Какие-то винды(вроде как из серии НТ) не сразу вгыружали ДЛЛ-ку, а немного погодя. За это отвечал какой-то параметр реестра...
Xemax (2002-10-12 16:22:00) [6]Задай этот вопрос билу ;-))
Sodom (2002-10-12 14:58:00) [7]Странно, такой интересный вопрос, я думал разовьется "глобальная" дискуссия, а вы nil внимания.