непонятки с SetWindowsHookExA

Тема в разделе "WASM.BEGINNERS", создана пользователем vadak, 27 окт 2011.

  1. vadak

    vadak New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2010
    Сообщения:
    41
    по этому адресу расположен небольшой туториал: http://netcode.ru/cpp/?lang=&katID=6&skatID=67&artID=2742, так вот переписал пример на фасм, но с перехватом нажатий мыши:
    Код (Text):
    1. format PE console 4.0
    2.  
    3. include 'c:\asma\fasm\INCLUDE\WIN32A.INC'
    4.  
    5. section '.code' code readable writeable executable
    6. proc hook_prog nCode:DWORD, wParam:DWORD, lParam:DWORD
    7.         invoke Beep,0xff,0xff
    8.     ret
    9. endp
    10. entry $
    11.     invoke SetWindowsHookExA, WH_MOUSE, hook_prog, NULL, NULL
    12.     invoke ExitProcess,0
    13. section '.idata' import data readable writeable
    14. library kernel32, 'kernel32.dll',\
    15.     user32,'user32.dll'
    16. import kernel32,\
    17.     ExitProcess,'ExitProcess',\
    18.     Beep,'Beep'
    19. import user32,\
    20.     SetWindowsHookExA,'SetWindowsHookExA'
    Функция возвращает ERROR_HOOK_NEEDS_HMOD (00000594), непойму в чем загвоздка, в принципе аргументы удовлетворяют вызову функции: 3 параметр нулл, если обработчик находится в этом же процессе, и 4 перехват из всех потоков и процессов.
    ???
     
  2. valentin_p

    valentin_p New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2011
    Сообщения:
    382
    http://www.rsdn.ru/forum/winapi/2497205.flat.aspx -> dll
     
  3. vadak

    vadak New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2010
    Сообщения:
    41
    То есть обязательно нужно выносить обработчик в длл?, а нельзя сделать чтобы обработчик находился в контексте этого же процесса и плюс еще перехватывать от всех процессов?
     
  4. valentin_p

    valentin_p New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2011
    Сообщения:
    382
    эмм. нет. кажется - в пинче даже отдельной либой было
     
  5. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    vadak
    Конечно нельзя. Так как это рушет все концепции ...
    1) Как будем подгружать код в другой процессы? (Ну или как будем делать нотификацию ?)
    2) Контекст выполнения хука должен быть процесса который был похукан(а если еще точнее тот же поток) так как это бы разружелл привелегии и секурити.
    Вообще много факторов. Только ДЛЛ.
     
  6. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.186
    Адрес:
    подполье
    Канешн, много факторов. Только РТФМ, говорите открыто и смело в директивах конпелятору: 'глобальных хук!'