Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вызов KeSetEvent прямо в обработчике аппаратного прерывания самоубийство ?  (Прочитано 7165 раз)
0 Пользователей и 1 Гость смотрят эту тему.
SergeiS
Участник

ru
Offline Offline

« : 21-10-2009 21:21 » 

Здравствуйте! У меня есть драйвер для обслуживания устройства ввода цифрового сигнала. Я передаю в него события и затем, по прерыванию от устройства, взвожу эти события для пользовательского процесса чтобы он обработал информацию в отображенном на его пространство совместном с драйвером разделе памяти. Проблема в том что сегодня вдруг система "зависла" без синего экрана но не реагируя ни на какие раздражители. Я подумал что это повышение IRQL. Дело в том что я набираюсь наглости и вызываю KeSetEvent для совместных с пользовательским приложением событий прямо в процедуре обработки аппаратного прерывания от устройства. Может быть так что внтури KeSetEvent временно повысится IRQL (как написано в документации) а в это время происходит переключение ? и после переключения идет мертвая петля с ожиданием понижения IRQL ? Или же взведенное событие взывает переключение прямо при обработке прерывания ? Но это по идее невозможно. Обязательно ли в этом случае использовать DPC процедуру в драйвере для окончательной обработки поступившего прерывания и в частности взведения события ? Буду очень признателен за замечания и рекомендации!


Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 22-10-2009 06:28 » 

http://msdn.microsoft.com/en-us/library/ms801639.aspx
Цитата
The KeSetEvent routine might temporarily raise the IRQL. If the Wait parameter is FALSE, the routine, before it returns, restores the IRQL to the original value that it had at the start of the call.
Цитата
If Wait is set to FALSE, the caller can be running at IRQL <= DISPATCH_LEVEL. Otherwise, callers of KeSetEvent must be running at IRQL <= APC_LEVEL and in a nonarbitrary thread context.
ТОЛЬКО DPC.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
SergeiS
Участник

ru
Offline Offline

« Ответ #2 : 22-10-2009 11:19 » 

СПАСИБО!!!
Записан
SergeiS
Участник

ru
Offline Offline

« Ответ #3 : 23-10-2009 20:53 » 

Премного Благодарен! Все заработало!
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 24-10-2009 07:51 » 

да не за что)))
просто читайте внимательнее про каждую функцию, в DDK почти все есть)

а по поводу первого сообщения... почитайте руссиновича. там просто великолепно про IRQL, функции ожидания и переключения задач написано.
« Последнее редактирование: 24-10-2009 07:55 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines