Уничтожается ли хук вместе с создавшим его потоком?

Тема в разделе "WASM.BEGINNERS", создана пользователем _Juicy, 22 май 2008.

  1. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Собственно, сабж.

    Основной поток создает поток для обработки сообщений от хука, ставит хук и самозавершается.
    Новому потоку никаких сообщений не приходит.
    Если стартовый поток засуспендить, то все работает.
    Хук принадлежит потоку, не процессу?

    Код (Text):
    1.     CreateThread (NULL, 0,           //поток,обрабатывающий сообщения от процедуры-перехватчика
    2.                   ThreadProc, 0, 0,
    3.                   &idThread);
    4.  
    5.     hhook = SetWindowsHookEx (WH_GETMESSAGE,
    6.                               HookProc,
    7.                               g_hInstance, 0);
    8.  
    9.     Sleep (INFINITE);               //если убрать, то хук не вызывается
    10.     ExitThread (0);
     
  2. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    При завершении процесса,породившего некоторый хэндл(HHOOK - тоже хэндл), WINDOWS закрывает все хэндлы, открытые процессом.

    add:
    Скорее процесса или потока. В любом случае, это происходит при завершение родителя.
     
  3. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Это кажется нелогичным, но похоже, что именно потоку.
    Win2k3 x86 sp2: после вызова NtTerminateThread (к которому и сводится ExitThread) хук убирается, а загруженная во все процессы dll, содержащяя HookProc, выгружается. По крайней мере это так для хуков WH_GETMESSAGE.