Queuing I/O Requests While a Device Is Sleeping
While a device is asleep, its drivers should queue any I/O requests directed to the device. The IoAllocateWorkItem, IoQueueWorkItem, and IoFreeWorkItem support routines provide one way of queuing IRPs for delayed processing. For an example, see the queuing mechanism described for PnP drivers in Holding Incoming IRPs When A Device Is Paused.
A driver can access its device only when the device is in the Working (D0) state. A driver cannot touch any device registers when the device is in a sleep state; the device must first be returned to the Working state.