Обработка драйвером прерывания PCI платы

Тема в разделе "WASM.ELECTRONICS", создана пользователем _SimpleSoft_, 19 июл 2005.

  1. _SimpleSoft_

    _SimpleSoft_ New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2005
    Сообщения:
    5
    Есть драйвер PCI платы. В драйвере установлена процедура обработки прерывания. Она срабатывает нормально при при изменении сигнала на одной из ног микросхемы. Но вопрос - как передать сообщение в пользовательское приложение?

    Подсмотрел у PLX - они возвращают handle который нужно сунуть в WaitForSingleObject, но не весь исходник драйвера доступен.
     
  2. compnet

    compnet New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2004
    Сообщения:
    10
    Адрес:
    Russia
    Инициализируешь свой KEVENT, получаешь его HANDLE и передаешь в пользовательский режим. В процедуре обработки прерываний просто устанавливаешь event...
     
  3. perez

    perez Member

    Публикаций:
    0
    Регистрация:
    25 апр 2005
    Сообщения:
    502
    Адрес:
    Moscow city
  4. _SimpleSoft_

    _SimpleSoft_ New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2005
    Сообщения:
    5
    Была мысль через Overlapped. Но нужно каждый раз передавать hevent.



    Но, compnet, как же получить HANDLE из KEVENT?
     
  5. _SimpleSoft_

    _SimpleSoft_ New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2005
    Сообщения:
    5
    perez, на

    ObReferenceObjectByHandle намекаешь?
     
  6. compnet

    compnet New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2004
    Сообщения:
    10
    Адрес:
    Russia
    Попробуй так:

    1. создай event в пользовательской режиме;

    2. передай его handle в драйвер;

    3. с помощью функции ObReferenceObjectByHandle полаешь указатель на объект;

    4. надо уменьшить счетчик указателей ObDeferenceObject;

    5. дальше используешь полученный указатель

    И вовсе не надо каждый раз создавать событие - его можно использовать многокатно
     
  7. _SimpleSoft_

    _SimpleSoft_ New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2005
    Сообщения:
    5


    Это зачем? После ObDeferenceObjectHandle указатель представить как указатель на KEVENT? Хм...
     
  8. Kola

    Kola New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2004
    Сообщения:
    69
    Еще вариант

    шлешь в драйвер комманду, например, через IRP_MJ_DEVICE_CONTROL (DeviceIoControl).

    в драйвере, в обработчике IRP_MJ_DEVICE_CONTROL, делаешь для IRP IoMarkIrpPending и возвращаешь STATUS_PENDING.



    приходит нужное прерывание - в IRP взводишь DPC, в DPC процедуре делаешь отложенному IRP IoCompleteRequest



    все
     
  9. _SimpleSoft_

    _SimpleSoft_ New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2005
    Сообщения:
    5
    Kola, щас так сделал... как вариант, но не очень. нужно каждый раз делать CreateEvent