![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Уведомление DLL_PROCESS_DETACH
The Scorpion © (2004-12-13 18:17:00)Создал DLL и подгрузил в чужой процесс с помощью ловушки.Код DLL изменяет таблицу импорта процесса.При завершение моего приложения необходимо восстановить таблицу импорта ,это сделать не получается , DLL не получает уведомление DLL_PROCESS_DETACH . Пожалуйста ,подскажите как решить эту проблему.
Leonid Troyanovsky (2004-12-13 21:57:00) [1]
> Leonid Troyanovsky © (13.12.04 21:54) [10]
> б) при выгрузке библиотеки из своего процесса, т.е.
> откуда хук был установлен - потоком его установившим.
Фу-ты. Потоком, вызвавшим FreeLibrary.
Sorry.
Leonid Troyanovsky (2004-12-13 21:54:00) [2]
> The Scorpion (13.12.04 21:33) [9]
> "А, вообще, код из finalization должен выполняться
> тем потоком, который выгружает библиотеку."
> Библиотека выгружается при уничтожение ловушки , наверное
> основным потоком моей программы .Как из своей программы
> произвести указанные действия ,не представляю.
Библиотека выгружается:
а) при снятии ловушки в чужом адресном пространстве
потоком, на который установлен хук (зацепленным потоком)
в порядке, который я описывал ранее.
б) при выгрузке библиотеки из своего процесса, т.е.
откуда хук был установлен - потоком его установившим.
Секция finalization выполняется выгружающим его потоком.
--
С уважением, LVT.
The Scorpion (2004-12-13 21:33:00) [3]"А, вообще, код из finalization должен выполняться
тем потоком, который выгружает библиотеку."
Библиотека выгружается при уничтожение ловушки , наверное основным потоком моей программы .Как из своей программы произвести указанные действия ,не представляю.
Leonid Troyanovsky (2004-12-13 21:29:00) [4]
> The Scorpion (13.12.04 21:22) [7]
> Все таки ,как же решить поставленную проблему?
Хук поставлен на WH_GETMESSAGE?
Пошли зацепленному потоку условленное сообщение,
по которому он восстановит таблицу.
Естественно, до снятия хука/завершения своего приложения.
--
С уважением, LVT.
The Scorpion (2004-12-13 21:22:00) [5]Все таки ,как же решить поставленную проблему?
Leonid Troyanovsky (2004-12-13 20:57:00) [6]
> The Scorpion (13.12.04 20:45) [5]
> Он самый. Не совсем понял как секции finalization заставит
> что то выполниться(восстановит таблицу импорта) в чужом
> процессе?
Если у тебя D7 в использовании finalization нет нужды.
А, вообще, код из finalization должен выполняться
тем потоком, который выгружает библиотеку.
Как, скажем, то, что выполняется в begin..end.
--
С уважением, LVT.
The Scorpion (2004-12-13 20:45:00) [7]Он самый. Не совсем понял как секции finalization заставит что то выполниться(восстановит таблицу импорта) в чужом процессе?
Leonid Troyanovsky (2004-12-13 20:43:00) [8]
> The Scorpion (13.12.04 20:35) [2]
> У меня Delphi 7. Уведомление DLL_PROCESS_DETACH работает
> нормально , но не при данных условиях.
Каких условиях?
Библиотека с ловушкой выгружается из процесса не в момент
UnhookWindowsHook, а при обработке очередного события.
--
С уважением, LVT.
Leonid Troyanovsky (2004-12-13 20:38:00) [9]
> The Scorpion (13.12.04 18:17)
> Создал DLL и подгрузил в чужой процесс с помощью ловушки.Код
> DLL изменяет таблицу импорта процесса.При завершение моего
> приложения необходимо восстановить таблицу импорта ,это
> сделать не получается , DLL не получает уведомление DLL_PROCESS_DETACH
На дельфи 6 нужен update 2.
Или пользовать секцию finalization модуля (unit).
--
С уважением, LVT.
ЗЫ Это тоже из курсовой?
The Scorpion (2004-12-13 20:35:00) [10]У меня Delphi 7. Уведомление DLL_PROCESS_DETACH работает нормально , но не при данных условиях.
DeadMeat (2004-12-13 19:54:00) [11]Кстати тоже заметил, что в Delphi 6, DLL_PROCESS_DETACH не приходит. Читал, что это глюк Borland-a и исправляется добавлением определенных строк в System.pas кажись. Но вот перекомпилировать его у меня не получилось...
---
...Death Is Only The Begining...