Есть драйвер PCI платы. В драйвере установлена процедура обработки прерывания. Она срабатывает нормально при при изменении сигнала на одной из ног микросхемы. Но вопрос - как передать сообщение в пользовательское приложение? Подсмотрел у PLX - они возвращают handle который нужно сунуть в WaitForSingleObject, но не весь исходник драйвера доступен.
Инициализируешь свой KEVENT, получаешь его HANDLE и передаешь в пользовательский режим. В процедуре обработки прерываний просто устанавливаешь event...
Была мысль через Overlapped. Но нужно каждый раз передавать hevent. Но, compnet, как же получить HANDLE из KEVENT?
Попробуй так: 1. создай event в пользовательской режиме; 2. передай его handle в драйвер; 3. с помощью функции ObReferenceObjectByHandle полаешь указатель на объект; 4. надо уменьшить счетчик указателей ObDeferenceObject; 5. дальше используешь полученный указатель И вовсе не надо каждый раз создавать событие - его можно использовать многокатно
Еще вариант шлешь в драйвер комманду, например, через IRP_MJ_DEVICE_CONTROL (DeviceIoControl). в драйвере, в обработчике IRP_MJ_DEVICE_CONTROL, делаешь для IRP IoMarkIrpPending и возвращаешь STATUS_PENDING. приходит нужное прерывание - в IRP взводишь DPC, в DPC процедуре делаешь отложенному IRP IoCompleteRequest все