Загрузка DLL из ресурса
Код | uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, BTMemoryModule;
type TShp = procedure (hk: HHOOK) stdcall;
type TForm1 = class(TForm) Load_Button: TButton; do_button: TButton; procedure Load_ButtonClick(Sender: TObject); procedure do_buttonClick(Sender: TObject); private { Private declarations } public m_DllDataSize:int64; mp_DllData:Pointer;
procedure TForm1.Load_ButtonClick(Sender: TObject); var ms : TMemoryStream; rs : TResourceStream; begin if 0 <> FindResource(hInstance, 'SPDLL', RT_RCDATA) then begin rs := TResourceStream.Create(hInstance, 'SPDLL', RT_RCDATA); ms := TMemoryStream.Create; try ms.LoadFromStream(rs); ms.Position := 0; m_DllDataSize := ms.Size; mp_DllData := GetMemory(m_DllDataSize); ms.Read(mp_DllData^, m_DllDataSize); finally ms.Free; rs.Free; end; end; end;
|
Так пытаюсь поставить хук из длл, загруженной в память
Код | procedure TForm1.do_buttonClick(Sender: TObject); var btMM: PBTMemoryModule; m_TestCallstd:Pointer; p: pointer; sh: TShp; hk: HHOOK; h:THandle; begin btMM := BTMemoryLoadLibary(mp_DllData, m_DllDataSize); h:=THandle(btMM.codeBase); try if btMM = nil then Abort; p := BTMemoryGetProcAddress(btMM, 'HookProc'); @sh:=BTMemoryGetProcAddress(btMM, 'SetHK'); if ((p=nil) or (@sh=nil)) then begin MessageBox(0, PAnsiChar('Библиотека не содержит необходимых процедур!'), 0, MB_OK+MB_ICONERROR); exit; end; hk:=SetWindowsHookEx(WH_CALLWNDPROC, p, h, 0); if hk=0 then begin MessageBox(0, PAnsiChar('Невозможно установить ловушку!'), 0, MB_OK+MB_ICONERROR); FreeLibrary(h); exit; end; sh(hk); MessageBox(0, 'Ловушка установлена! Нажмите OK для снятия.', 0, MB_OK); UnhookWindowsHookEx(hk); FreeLibrary(h); except Showmessage('Ошибка загрузки DLL: ' + BTMemoryGetLastError); end; if Assigned(btMM) then BTMemoryFreeLibrary(btMM); end;
|
hk равна нулю, то есть хук не устанавливается...
P.s если просто грузить DLL не из ресурса, а из файла через LoadLibrary - всё проходит на ура и хук точно таким же образом ставится, а вот с хуком из ресурса не выходит. Помогите пожалуйста разобраться, что я делаю не так? |