Не работают хуки, повешенные на тред находящийся в suspend'е

Тема в разделе "WASM.WIN32", создана пользователем voland, 31 окт 2010.

  1. voland

    voland New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2010
    Сообщения:
    3
    Приветствую, джентльмены

    Проблема возникла нежданно-негаданно. Согласно MSDN хуки вызываются системой _до_ того, как сообщение попадает в очередь отслеживаемого треда. Речь сейчас о system-wide хуках, которые в DLL живут.
    Так вот, картина маслом. Если подопечный тред в саспенде, то повешенный (хоть глобальный, хоть конкретно на него) хук не отрабатывает. Как только тред резюмится - все накопленные (где?!) нотификации сыплются в колбэки.
    Помогите добыть эти нотификации для спящего треда плиз. Где ковырять?
     
  2. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    http://www.wasm.ru/article.php?article=hooks_inside
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    С чего это ты взял ? Хуки, связанные с виндовыми сообщениями, вызываются в момент вызова потоком Get\PeekMessage или передачи сообщения в оконную процедуру. Причина простая -чтобы безопасно "вклинить" вызов постороннего хука в код потока, нужно чтобы этот поток находился в некотором известном состоянии, а не в каком-то "неопределенно-подвешенном" какое может быть на моент его останова по suspend и т.п.
     
  4. voland

    voland New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2010
    Сообщения:
    3
    leo
    Из MSDN.

    Есть хуки не относящиеся напрямую к виндовым сообщениям, например WH_CBT
    Так вот это все before на деле не всегда таковым является.
    И даже если сообщение POST'ится в очередь то постящему треду не обязательно знать состояние целевого треда, на то очереди и придуманы - когда нужно будет целевой тред сам заберет сообщение из очереди в подходящем состоянии. Ан нет, система внутри откладывает сообщения до момента когда тред резюмнется.
    В общем, вопрос остается открытым.
     
  5. voland

    voland New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2010
    Сообщения:
    3
    punxer
    Спасибо за ссылку, сейчас посмотрю.

    UPDATE: прочел. Много полезной инфы, но вопрос диспетчеризации и фильтрации хуков по активным/саспендженным тредам, увы, не раскрыт. Так что, ребята, подскажете функцию, где принимается решение вызова/не вызова хука?