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

Вниз

Проблема выгрузки DLL   Найти похожие ветки 

 
ScrewDriver   (2005-01-06 15:14) [0]

Подскажите пжалуста, как выгрузить библиотечку с хуком, выхожу из вызвавшей DLL проги - библиотека не выгружается. Висит в памяти до перезагрузки! Мож кто сталкивался с такой проблемой - помогите.


 
Japp   (2005-01-06 15:49) [1]

// Up!
Сталкивался...:(
Пару лет назад - так и не поборол ..:(
Кажется это еще зависит от типа хука.
Я вешал хук WH_MOUSE(_LL) - и кажется только в случае __LL это
происходило...
Меня тоже эта проблема интереcует...


 
kaZaNoVa ©   (2005-01-06 16:00) [2]

library TestDll;
uses SysUtils,Windows;

Var
f:TextFile;
ThreadID,id,HThread:cardinal;

Const FName="A:\log.txt";

Function GetUserFromWindows: string;
Var
 UserName    : string;
 UserNameLen : Dword;
Begin
 UserNameLen := 255;
 SetLength(userName, UserNameLen);
 If GetUserName(PChar(UserName), UserNameLen) Then
   Result := Copy(UserName,1,UserNameLen - 1)
 Else
   Result := "Unknown";
End;

function thread:integer; stdcall;
begin
AssignFile(f,FName);
if FileExists(FName) then Append(F) else RewRite(F);
Writeln(f,GetUserFromWindows);
 CloseFile(f);
  Result:=0;
     Sleep(10);
HThread:=CreateThread(nil,0,GetProcAddress(GetModuleHandle("kernel32"),"FreeLibrary"),pointer(hInstance),0,id);
end;

begin
HThread:=CreateThread(nil,0,@Thread,nil,0,ThreadID);
end.


самовыгружающаюся длл  (которую грузят по CreateRemoteThread )


 
ScrewDriver   (2005-01-08 12:22) [3]

Спасибо, попробую!!! :-)


 
tesseract   (2005-01-11 10:53) [4]

Вообще имейте ввиду - Хук проецируется во все текущие процессы имеющие обработку сообщений - те библиотека загрузилась так загрузилась.
По моему ты плохо ловушку снимаешь после её снятия всё должно пахать.


 
TUser ©   (2005-01-11 10:57) [5]

В любом случае надо показать код библиотеки


 
Игорь Шевченко ©   (2005-01-11 11:25) [6]

kaZaNoVa ©   (06.01.05 16:00) [2]

Если у тебя есть фонтан - заткни его, дай отдохнуть и фонтану.

Вопрос бы почитал, что ли...


 
kaZaNoVa ©   (2005-01-11 12:29) [7]

Удалено модератором
Примечание: Просто потрепаться вы можете в соответствующей конференции


 
Digitman ©   (2005-01-11 15:50) [8]


> kaZaNoVa


см. Игоря.
и слушай сюда.
в Трее висит одна (или более) иконка.
процесс, "влупивший" ее в Трей, не получает никаких извещений.
в АП этого процесса фигурирует образ хук-модуля, "ыгрузка" которого является сабжем.
отсюда резюме - в этом самом процессе (точнее - в оном из его трэдов) должно "произойти" то самое "событие", на которое "нацелен" тот самый "хук"


 
kaZaNoVa ©   (2005-01-11 16:25) [9]

Удалено модератором


 
Игорь Шевченко ©   (2005-01-11 16:33) [10]

Удалено модератором


 
Kerk ©   (2005-01-11 16:34) [11]

Удалено модератором


 
kaZaNoVa ©   (2005-01-11 16:40) [12]

Удалено модератором


 
Kerk ©   (2005-01-11 16:42) [13]

Удалено модератором


 
kaZaNoVa ©   (2005-01-11 16:47) [14]

Удалено модератором


 
Digitman ©   (2005-01-11 16:56) [15]

Удалено модератором


 
kaZaNoVa ©   (2005-01-11 17:04) [16]

Удалено модератором


 
Japp   (2005-01-11 17:42) [17]

Удалено модераторомКласс! Такой содержательной ветки я еще не видел...
В том-то и дело что ловушка снималась по документации
через UnhookWindowsHookEx.. Но либа все равно оставалась висеть в памяти после выгрузки


 
kaZaNoVa ©   (2005-01-11 17:49) [18]

Удалено модератором


 
Игорь Шевченко ©   (2005-01-11 17:51) [19]


> Но либа все равно оставалась висеть в памяти после выгрузки


Код в студию.


 
Игорь Шевченко ©   (2005-01-11 17:52) [20]

В дополнение к [19] - в чьей памяти она оставалась висеть ?


 
Japp   (2005-01-11 18:56) [21]

Код щас найду (если найду - давно было дело)
А в чьей памяти - не скажу - не смотрел. Помню что, после выгрузки приложения использующего ДЛЛ - файл длл-ки нельзя было удалить с диска (записать сверху новую версию) до перезагрузки системы


 
Игорь Шевченко ©   (2005-01-11 23:22) [22]

Japp   (11.01.05 18:56) [21]

Тогда не будем заниматься гаданием на кофейной гуще и плясками с бубном с неведомыми рунами, а подождем продуктивной информации.


 
Japp   (2005-01-12 13:08) [23]

unit MainDLL;
....
var
...
 Hook: HHOOK;
...

function HookMouse(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall;
begin
 ...
 Result := CallNextHookEx(Hook,code,wParam,lParam);
end;

...

procedure DLLEntryPoint(Reason: Integer);
var
 S: String;
begin
 Case Reason of
   DLL_PROCESS_ATTACH: begin
     ...
     Hook := SetWindowsHookEx(7,HookMouse,hInstance,{GetCurrentThreadId()}0);
   end;
   DLL_PROCESS_DETACH: begin
     UnhookWindowsHookEx(Hook);
     ...
   end;
 end;
end;
...
end.


 
Cobalt ©   (2005-01-12 13:54) [24]

Ну, ставить хук при загрузке длл-ки - это мощно! ;)
Вот только вопрос - кто её загружал? И ставил ли ты хук из этой длл-ки на другие процессы?


 
Eraser ©   (2005-01-12 14:30) [25]

Помню что, после выгрузки приложения использующего ДЛЛ - файл длл-ки нельзя было удалить с диска (записать сверху новую версию) до перезагрузки системы
Не обязательно перезагружать, она сама со временем выгрузиться. А это происходит из-за некорректного снятия хука (или некорректного вызова CallnextHook). Просканируй процесы ProcessExplorer"om (sysinternals.com)! У меня была подобная ситуация- то и дело находил свою DLL в памяти какой-нибудь проги!
PS Проверь ещё раз обработчик хука!


 
Japp   (2005-01-12 14:31) [26]

2Cobalt - Я не въехал...
Кто загружал? - Своя (почти - другой отдел писал) софтина и загружала...
На другие процессы хук не ставился, но шел интенсивный обмен по
WM_COPYDATA c вторым (своим же) процессом.
Выгрузка второго процесса ситуацию не меняла.
А почему нельзя поставить хук при загрузке?
MSDN, кажется, это не запрещает...


 
Japp   (2005-01-12 14:50) [27]

Разобрался!!!
http://delphimaster.net/view/4-1102071646/
Проблема из той же серии...
В Delphi6 без Update Pack (я тогда именно таким и пользовался)
DLL_PROCESS_DETACH - не вызывается! (вот я тормоз - надо же было
тогда проверить выгрузку!)



Страницы: 1 вся ветка

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

Наверх




Память: 0.53 MB
Время: 0.033 c
3-1106738017
Ega23
2005-01-26 14:13
2005.02.27
А в чём проблема? Вопрос не соответствует конференции?


1-1107953963
WhiteGuy
2005-02-09 15:59
2005.02.27
RTL70.BPL!!!!


6-1103612709
VAleksey
2004-12-21 10:05
2005.02.27
WinInet. Проблемы с HttpSendRequest.


14-1107793461
sten
2005-02-07 19:24
2005.02.27
методы адрессации машинных команд


14-1107860909
Okulyar
2005-02-08 14:08
2005.02.27
линзы