Форум программистов, компьютерный форум, киберфорум
Программирование драйверов
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
37 / 31 / 5
Регистрация: 30.04.2014
Сообщений: 1,035

Послать сообщение kernel mode -> user mode

16.10.2014, 12:10. Показов 2028. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. В процессе разработки драйвера столкнулся с необходимостью посылать события/сообщения из kernel mode в user mode (из драйвера в управляющую программу). Есть пример, где сделано так:

C
1
2
    KeSetEvent(DeviceExtension->pEventObject, 0, FALSE);
    KeClearEvent(DeviceExtension->pEventObject);
Для чего событие вначале создаётся, а затем сразу уничтожается?

Правда ли, что если событие не обработать в пользовательской программе, то мы его не сможем второй раз послать?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.10.2014, 12:10
Ответы с готовыми решениями:

Получение UserName в Kernel Mode
Коллеги, приветствую! Пишу минифильтр FS, задача - блокировка операций записи в файл для определенных юзеров. Понимаю, что это...

Записать информацию в файл из kernel mode
Здравствуйте. Мне нужно записать информацию в файл из kernel mode. Знаю, что процедура нежелательная, но сейчас она мне необходима. ...

Не создается устройство через IoCreateDevice в Kernel Mode
Доброе утро всем! Возникла такая проблема: нужно создать диск(виртуальный) через драйвер. В DriverEntry создаю один девайс для общения с...

6
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
16.10.2014, 21:29
Лучший ответ Сообщение было отмечено NickoTin как решение

Решение

Цитата Сообщение от Khludenkov Посмотреть сообщение
В процессе разработки драйвера столкнулся с необходимостью посылать события/сообщения из kernel mode в user mode
Чем не устраивает IRP ?

Цитата Сообщение от Khludenkov Посмотреть сообщение
Есть пример, где сделано так:
И очень плохо. Ибо нет никакой гарантии, что клиент успеет "увидеть"
событие, которое "зажглось, и тут же погасло".

Цитата Сообщение от Khludenkov Посмотреть сообщение
Для чего событие вначале создаётся, а затем сразу уничтожается?
Наверное, это скрытое пожелание "happy debugging" тому, кто будет
разбирать код

Цитата Сообщение от Khludenkov Посмотреть сообщение
Правда ли, что если событие не обработать в пользовательской программе, то мы его не сможем второй раз послать?
Нет.
1
37 / 31 / 5
Регистрация: 30.04.2014
Сообщений: 1,035
17.10.2014, 08:19  [ТС]
Убежденный, спасибо за ответы.

Я думаю, в процессе работы пользовательскому приложению понадобится получать сообщения от драйвера. Насколько я понимаю, функцию обратного вызова приложения вызываемую из драйвера зарегистрировать нельзя. Поэтому остаётся только использовать механизм зарегистрированных сообщений.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
17.10.2014, 09:58
Вот здесь еще посмотрите (communication ports).
Может, для некоторых сценариев эта штука окажется удобнее, чем IRP:

Communication Between User Mode and Kernel Mode
http://msdn.microsoft.com/en-u... 85%29.aspx
1
37 / 31 / 5
Регистрация: 30.04.2014
Сообщений: 1,035
17.10.2014, 10:23  [ТС]
Спасибо! Буду разбирать Тему можно считать закрытой.
0
Эксперт по электронике
6569 / 3196 / 335
Регистрация: 28.10.2011
Сообщений: 12,475
Записей в блоге: 7
22.12.2014, 21:54
Цитата Сообщение от Khludenkov Посмотреть сообщение
Для чего событие вначале создаётся, а затем сразу уничтожается?
Возможно тема уже не актуальна, но попался мне код в котором были строки:
C
1
2
    KeSetEvent(DeviceExtension->pEventObject, 0, FALSE);
    KeClearEvent(DeviceExtension->pEventObject);
Оказалось что событие уничтожается сразу же после создания потому что оно (событие) создано в ядре (скорее всего в DriverEntry()) и используется в приложении, где оно открывается по имени. Так вот, в этом случае невозможно сбросить событие в приложении.
Подробнее об этом в описании функции IoCreateNotificationEvent(). http://msdn.microsoft.com/en-u... s.85).aspx
Там советуют создавать событие в приложении и передавать его драйверу.
The user-mode application creates the event object and passes a handle to the object to the driver by sending an IOCTL to the driver. The driver must handle the IOCTL in the context of the process that created the event object and must validate the handle by calling ObReferenceObjectByHandle. This method is the recommended method for sharing event objects between user and kernel modes.
1
37 / 31 / 5
Регистрация: 30.04.2014
Сообщений: 1,035
23.12.2014, 08:08  [ТС]
Спасибо, весьма актуально. Тема драйверов для меня сейчас очень важна.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.12.2014, 08:08
Помогаю со студенческими работами здесь

Принцип написания Kernel Mode Driver | Visual Studio
Весь интернет перерыл про Kernel Mode Driver. Начитался кучу одного и того же: "При крашах возникает BSoD", "На драйвера Kernel...

Управление драйвером из user-mode
Всех приветствую. Я начинающий в теме драйвера. Изучаю примеры NDIS (тяга к сетевому программированию). Каким образом можно настроить...

IIS Cache - Kernel mode and User mode - чем отличаются, что представляют из себя?
Не могу найти толкового описания Kernel mode and User mode cache. Во-первых, чтобы лучше обрисовать в своем воображении: 1) где они...

unexpected kernel mode trap
Синий экран и эта надпись. Как узнать в чем проблема?

Unexpected kernel mode trap
Добры день! Имеется случайные вылеты и перезагрузки, которые не связанны объективно с каким-то событием. Началось всё несколько недель...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru