An intermediate driver must agree with the next-lower driver's device
object about DO_DIRECT_IO or DO_BUFFERED_IO, but a highest-level
driver (FSD?) is allowed to use whatever buffering method it wants or
neither. Does this mean that if an FSD is using neither I/O, before
it passes an IRP to a driver below it that wants DO_BUFFERED_IO, the
FSD has to do the validity checking, alignment guarantee, and memcopy
before/after to make the lower driver happy?
I was initially confused by the implication that one driver in a stack
could use whatever buffering method it wants and wondered how that
could be reconciled with passing IRPs down the stack to other drivers
that might use a different buffering method.