· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› адрес WndProc

Посл.отвђт Сообщенiе


Дата: Ноя 8, 2004 03:21:21

Пытаюсь получить адрес WndProc другого приложения, и на
invoke SetWindowLong,hSub,GWL_WNDPROC,ADDR HookProc
возвращается ноль, на вызов GetLastError: описание ошибки - "Отказано в доступе"
A SPY++ показывает адрес WndProc, без проблем. Как можно получить доступ к этой процедуре, чтобы самому обработать одно из сообщений, которое в ней не обрабатывается?
Заранее спасибо


Дата: Ноя 8, 2004 03:59:48

внедриться в процесс


Дата: Ноя 8, 2004 09:53:57

Мне кажется, можно обойтись без доступа к WndProc, достаточно поставить хук на сообщение


Дата: Ноя 8, 2004 16:17:00

vinnie_pooh

Я вот ставлю его (хук), а он падает, иногда вместе с Виндой на пару :( Сначала процедура обработки HookProc была в ехе, затем перенёс в dll, но что-то танцы с бубном не помогают :(( Где тут может быть засада?
;тут получение адресов 2-х процедур из dll 
;адреса получаю корректно
.elseif eax==WM_CREATE
    invoke LoadLibrary,ADDR LibName
    .if eax!=0
        mov hLib,eax
        invoke GetProcAddress,hLib,ADDR ProcName1
        mov hProc1,eax
        invoke GetProcAddress,hLib,ADDR ProcName2
        mov hProc2,eax
    .endif

;тут ставлю хук на сообщения
    invoke GetWindowRect,hWin,ADDR Rct
    dec Rct.left
    invoke WindowFromPoint,Rct.left,Rct.top
    mov hSub,eax
; установка хука на сообщения, hProc2 - адрес процедуры обработки в dll.
    invoke SetWindowsHookEx,WH_GETMESSAGE,hProc2,hInstance,0
    mov hScrHook,eax
    push hScrHook		 ;хэндл хука
    push WM_MOUSEWHEEL		 ;интересующее сообщение
    push hSub		         ;хэндл окна, для которого сообщение
    Call hProc1	                 ;процедура установки 3-х значений^^

;а здесь две процедуры в dll: первая - её адрес в ехе hProc1
SetHookData proc hWin:DWORD, HookMessage:DWORD, hHook:DWORD    
.data
    HookWnd     dd ?
    HookMsg     dd ?
    hScrHook	dd ?
.code
    push hHook
    pop  hScrHook
    push hWin
    pop  HookWnd
    push HookMessage
    pop  HookMsg
    PrintHex HookWnd      ;хендл хука, хэндл окна и код интересующего сообщения приходят нормально
    PrintDec HookMsg
    PrintDec hScrHook
    ret
SetHookData endp

;вторая процедура - её адрес в ехе - hProc2
HookProc proc hCode:DWORD, wParam:DWORD, lParam:DWORD    
    invoke Beep,1000,100    ;это как индикатор :)
    mov eax,hCode
    .if eax<0
        invoke CallNextHookEx,hScrHook,hCode,wParam,lParam
        ret
    .else
        mov eax,lParam
        cmp eax,HookMsg
        jne @F
            ret
        @@:
        invoke CallNextHookEx,hScrHook,hCode,wParam,lParam
        ret
    .endif
    xor eax,eax
    ret
HookProc endp


и ни хрена не бикает вторая процедура. Не вызывается вообще :(

Пробовал WH_CALLWNDPROCRET поставить - Винда падает...

masquer

А может у тебя какой пример найдётся, а то поиск мне только предложил внедриться в процесс производства каких-то макарон :) (через ya.ru)


Дата: Ноя 8, 2004 16:55:20

Помоему ICEZLION предупреждал что хук должен находиться в библиотеке.. которая должна меппироваться в процесс нужный (ID процесса указываешь про установке хука)
Так что читай внимательно !


Дата: Ноя 8, 2004 20:20:10

Почитал IsZelion: в нём указано, что секция неинициализированных данных должна быть разделяемая между процессами, якобы это реализуется через опции линкера /SECTION:.bss,S
Пытаюсь указать эту опцию в RadASM'e - он все что после .bss воспринимает как имя файла и на такую строку
7,O,$B\LINK.EXE /SECTION:.bss,S /SUBSYSTEM:WINDOWS /RELEASE /DLL /DEF:$6 /LIBPATH:"$L" /OUT:"$7",3
выдаёт ошибку, что не найден файл
S /SUBSYSTEM:WINDOWS /RELEASE /DLL /DEF:$6 /LIBPATH:"$L" /OUT:"$7",3
А как указать RadASM'у, что секция разделяемая (S) - не знаю.
Пробовал использовать makefile из туториала (из примера) - он тоже не работает. DLL не создаётся. Такой вот капкан :(((
А сама dll работает, но выдаёт сообщения только адресуемые моему окну, а мне они нахрен не нужны, нужны чужие.


Дата: Ноя 8, 2004 21:18:01

Радасм не слинкует ее вот я создал *.BAT файлик все отлично линкуеться ...
сам проверял (причем недавно)...

@echo off

E:\ASM\masm32\bin\ml /c /coff /Cp Splash_dll.asm

E:\ASM\masm32\bin\Link /SECTION:.bss,S /DLL /DEF:Splash_dll.def /SUBSYSTEM:WINDOWS /LIBPATH:E:\ASM\masm32\lib Splash_dll.obj

pause

и еще в своем исходнике пропиши пути к инклюдам иначе нихера не закомпилиться


Дата: Ноя 8, 2004 21:42:51

TermoSINteZ

„и еще в своем исходнике пропиши пути к инклюдам иначе нихера не закомпилиться“

Да, я тут шёл сказать, что пришлось все пути к инклюдам указать полностью, а не относительные. Как и в .bat'e

Усё работает :) Спасибо всем


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.066