I/O Queue States
The framework defines the following states for I/O queues:
Idle
The I/O queue contains no I/O requests, and the driver is not processing any requests that it received from the I/O queue.
Ready
The I/O queue can receive I/O requests from the framework, and it can deliver I/O requests to the driver.
Stopped
The I/O queue can receive I/O requests from the framework, but it cannot deliver I/O requests to the driver, and the driver is not processing any requests that it received from the I/O queue.
Drained
The I/O queue is empty, it cannot receive new I/O requests from the framework, and all I/O requests that were in the I/O queue have been delivered to the driver.
Purged
The I/O queue is empty, it cannot receive new I/O requests from the framework, and all I/O requests that were in the I/O queue have been canceled.
The framework can set a new I/O queue to the ready state after your driver calls WdfIoQueueCreate. However, power-managed I/O queues enter the ready state only if the device is in its working (D0) state.
Your driver can change an I/O queue's state by:
Calling WdfIoQueueStop or WdfIoQueueStopSynchronously to place the queue in its stopped state.
Calling WdfIoQueueDrain or WdfIoQueueDrainSynchronously to place the queue in its drained state.
Calling WdfIoQueuePurge or WdfIoQueuePurgeSynchronously to place the queue in its purged state.
Calling WdfIoQueueStart to return the queue to its ready state.
To obtain an I/O queue's current state, your driver can call WdfIoQueueGetState.