Handle interrupt in WDF

Hello,

Long time ago I learned here to handle driver interrupts using the following concept:

  1. Application sends IOCTL request to the driver. This request is blocked with timeout.
  2. This request is forwarded to “internal” queue.
  3. Upon interrupt, the DPC handler reads from the “internal” queue and calls WdfRequestCompleteWithInformation
  4. At this point the application is not blocked anymore.

Can you please explain:
If another interrupt occurs after step 3 and before application is blocked again, how can I make sure not to miss an interrupt ?

Thank you,
Zvika

Well, that’s not really the right question. Your driver won’t miss an interrupt. If you want your application to catch all the notifications in real time, then you need to queue up several requests, using FILE_FLAG_OVERLAPPED. Easy.

Hi Tim,

Do you mean FILE_FLAG_OVERLAPPED in the application’s file that sends IOCTLs ?

Thank you,
Zvika

Yes. That’s what he means.

It’s trickier than Mr. Roberts is making it sound, though. While he’s (of course) correct that your driver won’t miss an interrupt, you must be aware of the fact that two calls to WdfInterruptQueueDpcForIsr can result in a single callback to that DpcForIsr.

Have I mentioned before that you really need to take a seminar on writing WDF drivers? It’s just so hard to explain this stuff one isolated post at a time.

Peter