|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Окт 28, 2004 19:24:06 · Поправил: Porolon Я новичек в разработке драйверов, и у меня возникла такая проблема: Мне нужно сигнализировать приложению что произошло прерывание из драйвера. Я делаю вот так: Драйвер: KEvent * m_event; DeviceIOcontrol(KIrp I) { ..... case SET_EVENT: //METHOD_BUFFERED HANDLE m_handle = *(HANDLE)* I.IoctlBuffer(); m_event = new KEvent(m_handle); ...... } Interrupt(..) { m_event->Set(); } Программа: ..... HANDLE m_handle = CreateEvent(NULL,FALSE,FALSE,NULL) if (handle) { DeviceIoControl (hDevice,SET_EVENT,m_handle,0,NULL,0,&sz,NULL); ..... WaitForSingleObject(m_handle,1000); //Ждем прерывание ...... } Когда выполняю DeviceIoControl в програме, вылетает синий экран. Пробовал остановливать io запрос через STATUS_PENDING тоже вылетает ошибка вроде: ERROR_IRP_COMPLETE_... Но мне нужен первый вариан т.к. мне нужно оюрабатывать другие IRP запросы... Возможно обект Event нужно создать в самом драйвере а потом по имени открывать? как вообще правильно обрабатывать прерывания? |
|
|
Дата: Окт 28, 2004 19:52:31 Porolon я не шарю в драйверах вообще, но мне кажется, что m_handle = CreateEvent() создаст тебе евент, хэндл которого будет валиден в адресном пространстве процесса, а не драйвера. так что, как ты сам и сказал, попробуй создавать именованный евент и в процессе, и в драйвере, через CreateEvent. Если имя заранее неизвестно, то процесс может передать имя евента через DeviceIOcontrol, а драйвер уже сделает CreateEvent. |
|
|
Дата: Окт 28, 2004 21:12:01 |
|
|
Дата: Ноя 1, 2004 12:47:51 Max дейтвительно. Проще посмотреть статью 14 от four-f. Объект события надо создавать дравиной, а ещё мона просто отображаемым файлом побаловаться. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.071 |