обработка прерываний и драйвер от NuMega Driver Studio

Тема в разделе "WASM.WIN32", создана пользователем Porolon, 28 окт 2004.

  1. Porolon

    Porolon New Member

    Публикаций:
    0
    Регистрация:
    28 окт 2004
    Сообщения:
    1
    Адрес:
    Москва
    Я новичек в разработке драйверов, и у меня возникла такая проблема: Мне нужно сигнализировать приложению что произошло прерывание из драйвера. Я делаю вот так:

    Драйвер:

    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 нужно создать в самом драйвере а потом по имени открывать? как вообще правильно обрабатывать прерывания?
     
  2. Max

    Max Member

    Публикаций:
    0
    Регистрация:
    22 май 2003
    Сообщения:
    192
    Porolon

    я не шарю в драйверах вообще, но мне кажется, что m_handle = CreateEvent() создаст тебе евент, хэндл которого будет валиден в адресном пространстве процесса, а не драйвера.



    так что, как ты сам и сказал, попробуй создавать именованный евент и в процессе, и в драйвере, через CreateEvent. Если имя заранее неизвестно, то процесс может передать имя евента через DeviceIOcontrol, а драйвер уже сделает CreateEvent.
     
  3. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
  4. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    Max



    дейтвительно. Проще посмотреть статью 14 от four-f. Объект события надо создавать дравиной, а ещё мона просто отображаемым файлом побаловаться.