Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2012, 18:26   #1
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию Выгрузка dll из всех процессов

Всем привет, в общем проблема такая:
Есть некоторая dll, которая содержит глобальный хук SetWindowsHookEx, ну по сути это "хук пустышка", который сделан только для того, чтобы dll'ка загрузилась во все процессы.

Код:
procedure SetWindowsHook(e:Boolean); stdcall;
var
  M:THandle;
begin
  if e then
   begin
    m:=CreateMutex(nil,false,MutexName);
    if m=0 then exit;
    SH:=SetWindowsHookEx(WH_GETMESSAGE,@MsgProc,HInstance,0);
   end
       else
    UnhookWindowsHookEx(sh);
end;

procedure DLLEntryPoint(dwReason:DWord);// export; stdcall;
begin
  case dwReason of
    DLL_PROCESS_ATTACH:
     begin
      StopProcess(GetCurrentProcessId);
      SetWindowsHook(true);
    ResumeProcess(GetCurrentProcessId);
     end;
    DLL_PROCESS_DETACH:
     begin
      StopProcess(GetCurrentProcessId);
      SetWindowsHook(false);
      ResumeProcess(GetCurrentProcessId);
     end;
   end;
end;
Также есть определенная программа, которая загружает и выгружает эту длл вот так:
Код:
procedure TVipProg.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeLibrary(card);
end;

procedure TVipProg.FormCreate(Sender: TObject);
begin
path:=pchar(ExtractFileDir(Application.ExeName)+'\'+'dll.dll');
card:=LoadLibrary(path);
memo1.Text:=inttostr(card);
end;
Но вот выгружается она только из этой программы. После завершения работы программы dll все еще загружаена в другие процессы, как же это все глобально выгрузить?
Каждый день узнаю новое...

Последний раз редактировалось Anton911; 30.07.2012 в 18:29.
Anton911 вне форума Ответить с цитированием
Старый 30.07.2012, 18:38   #2
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

UnhookWindowsHookEx + broadcast WM_NULL
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 31.07.2012, 12:38   #3
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию

Можно по подробнее об broadcast WM_NULL
Каждый день узнаю новое...
Anton911 вне форума Ответить с цитированием
Старый 01.08.2012, 14:50   #4
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию

Короче разобрался, просто проверял если нужное приложение не запущено, то dll выгружает сама себя. Теперь все работает и WriteProcessMemory перехватывается. Отлично.
Каждый день узнаю новое...
Anton911 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выгрузка dll памяти medved6216 Общие вопросы Delphi 2 07.11.2011 16:12
Загрузка DLL и ее выгрузка Den7656 Помощь студентам 2 17.09.2011 14:34
Чтение всех запущенных процессов Crunkordie Общие вопросы Delphi 0 07.03.2011 13:40
[DLL] Загрузка и выгрузка dll в/из чужого процесса Человек_Борща Win Api 4 28.02.2010 17:47
Закрыть доступ для всех процессов к файлу Sanek_ntsk Общие вопросы Delphi 6 04.12.2007 16:26