Текущий архив: 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.54 MB
Время: 0.046 c