A Hole In My Head

Doron Holan's musings on drivers and other nibbles and bits

Browse by Tags

Tagged Content List
  • Blog Post: WDFREQUESTs are for sharing in KMDF v1.9

    In my last post I described why a WDFREQUEST is unique to a particular WDFDEVICE.  There is one particular programming pattern where this is not the behavior you want.  This pattern is when you have each PDO accepting IO requests which it then forwards on to the parent WDFDEVICE for processing...
  • Blog Post: Using KeAcquireSpinLockAtDpcLevel is only a perf gain if you know you are DISPATCH_LEVEL

    Well, that is certainly a long title ;). First, let us look at an approximate implementation of KeAcquireSpinLock and KeRaiseIrql (and yes I know that KeRaiseIrql is really a #define to KfRaiseIrql, but it is the same thing that happens in the end…) KIRQL KeAcquireSpinLock(PKSPIN_LOCK SpinLock, PKIRQL...
  • Blog Post: Returning failure from DriverEntry

    One thing that is easily overlooked about implementing DriverEntry is that upon return !NT_SUCCESS, DriverUnload is not called. I mentioned this anecdotally in a previous post , but it is worth expanding on. I was bit by this oversight when I was working on the Bluetooth stack. Driver verifier correctly...
  • Blog Post: How to share HW resources with another driver not in the same PnP hierarchy

    First, I have to say that I don't agree with this design pattern at all . I think it leads to too many problems and complications that are not worth the pain. The only reason I am writing this entry is that I have seen so many people get this wrong or not account for some details and I want to make sure...
  • Blog Post: Supporting query interface in KMDF

    In my last post I talked about bidirectional interfaces which can have both input and output parameters. KMDF supports both unidirectional and bidirectional interfaces. As is the case with many KMDF APIs and behaviors, we allow you to implement the easy pattern with little to no work and let you opt...
  • Blog Post: INTERFACEs can contain both input and output parameters…and not just function pointers

    When you look at the documentation for an INTERFACE and IRP_MN_QUERY_INTERFACE , it mentions that the INTERFACE structure is the input provided to the interface provider (set the by the driver querying for the interface) and the remainder of the interface structure is considered output (set by the driver...
Page 1 of 1 (6 items)