Как заставить функцию подождать?

Тема в разделе "WASM.NT.KERNEL", создана пользователем Weberd, 21 июн 2007.

  1. Weberd

    Weberd New Member

    Публикаций:
    0
    Регистрация:
    14 июн 2007
    Сообщения:
    67
    Перехвачена у меня какая-то функция, положим, что NtOpenProcess. Нужно передавать информацию о перехвате в какое-то другое место и (самое важное) дождаться решения о том, нужно ли перехватывать! Притом, во время ожидания, NtOpenProcess может вызываться еще несколько раз и запросы должны вставать в очередь. Пока что у меня в голове только вариант с созданием для каждого вызова NtOpenProcess своего Event и синхронизацией по ZwWaitForSingleObject в NtOpenProcess, плюс переменная для хранения полученного решения. Помоему достаточно кривое решение.... Есть ли у кого-нибудь мысли на этот счет?
     
  2. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    Код (Text):
    1. stdcall drugoe_mesto,param1,param2....
    2. cmp eax,PEREXVATIVOT_TRUE
    3. ...
    4.  
    5. proc drugoe_mesto p1,p2...
    6. ...
    7. mov eax,PEREXVATIVOT_TRUE
    8. ret
    9. endp
     
  3. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Weberd
    Через критические секции попробуй (EnterCriticalSection). (А вообще я не уверен, что запросы теряются, а не встают в очередь.)
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    asmfan
    Weberd
    тогда уж фастмьютексы лучше.
    вполне удовлетворяют твоим условияем.
     
  5. Weberd

    Weberd New Member

    Публикаций:
    0
    Регистрация:
    14 июн 2007
    Сообщения:
    67
    вы меня не поняли совсем, я видать плохо сформулировал то, что мне надо.... другое место, результата которого ждет перехваченная функция - это юзермодное приложение. то есть перехваченная функция как-то сообщает о перехвате, например создает Irp, а потом засыпает по ZwWaitFor...., затем приходит результат мутекс или евент сбрасывается, функция просыпается и через спец переменную (вот слабое место - переменная глобальная) смотрит, что ей дальше делать.