Суть в том что необходимо сообщать приложение о событиях (в моем случае это события происходящие в NDIS IM драйвере), при этом надо передать данные с драйвера в приложение... Кто знает какие решения этой проблемы ??? Про метод описаный у W.Oney на 463 странице про приостановку IOCTL я знаю, но там свои проблемы со состояниями и тд... Например, можно использывать общее событие (описан у тогоже W.Oney ), но оно может только сигнализировать о событие... но ведь мы можем при получении сигнала отправить еще один IOCTL и получить необходимые данные, сохранненые во время сообщения о событии... Может кто нибудь знает другие методы ???
Шаренная секция + событие для уведомления. А можно подробне ? или пару ключевых слов в гугл =) а то я не давно этим занимаюсь ...
ZwCreateSection() ZwMapViewOfSection() IoCreateSynchronizationEvent() Плюс небольшие заморочки с безопасностью этих объектов. Но этот способ больше подходит для небольших объёмов данных фиксированного размера. Если же размер передаваемых данных неизвестен, тогда лучше всего будет первый способ. Он частично недокументирован, но работает стабильно на любой версии вплоть до Windows 7: ZwAllocateVirtualMemory() KeInitializeApc() KeInsertQueueApc()
неправильно выразился. NtDeviceIoControlFile c параметром ApcRoutine. затем MsgWaitForMultipleObjects.
Я использую немног другой способ- выделяю память и евент в юзермоде, а потом передаю в драйвер. Там память мапится в кернел, из хендла евента вытаскивается его объект. Потом, когда происходит событие, заполняем память и дёргаем объект евента.
Сорри, заглянул к себе в код и понял, что ошибся. Память я выделяю в ring0, а затем уже маплю в приложение и возвращаю начало на неё.