WdfIoQueuePurge function (wdfio.h)
[Applies to KMDF and UMDF]
The WdfIoQueuePurge method causes the framework to stop queuing I/O requests to an I/O queue and to cancel unprocessed requests.
Syntax
void WdfIoQueuePurge(
[in] WDFQUEUE Queue,
[in, optional] PFN_WDF_IO_QUEUE_STATE PurgeComplete,
[in, optional] WDFCONTEXT Context
);
Parameters
[in] Queue
A handle to a framework queue object.
[in, optional] PurgeComplete
A pointer to a driver-supplied EvtIoQueueState callback function. This parameter is optional and can be NULL.
[in, optional] Context
An untyped pointer to driver-supplied context information that the framework passes to the EvtIoQueueState callback function. This parameter is optional and can be NULL.
Return value
None
Remarks
A bug check occurs if the driver supplies an invalid object handle.
After a driver calls WdfIoQueuePurge, the framework stops adding I/O requests to the specified queue. The framework cancels all requests that it has not delivered to the target device and calls the driver's CompletionRoutine callback function for each. The framework also attempts to cancel (by calling IoCancelIrp) any requests delivered to the target device that were not marked WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE.
If the framework receives additional requests for the queue, it completes them with a completion status value of STATUS_INVALID_DEVICE_STATE.
If the driver supplies an EvtIoQueueState callback function, the framework calls it after all requests that were delivered to the driver have been completed or canceled. You can modify the IRQL at which the callback runs by specifying ExecutionLevel in WDF_OBJECT_ATTRIBUTES at queue creation time. For more info, see the Remarks section ofEVT_WDF_IO_QUEUE_STATE.
After a driver has purged an I/O queue, it can restart the queue by calling WdfIoQueueStart.
If the driver calls WdfRequestRequeue after calling WdfIoQueuePurge, the requeue attempt may succeed before the purge is complete. In versions 1.9 and earlier of KMDF, this sequence causes the operating system to crash. This problem is fixed in KMDF version 1.11 and later.
For more information about the WdfIoQueuePurge method, see Managing I/O Queues.
Examples
The following code example purges an I/O queue and does not call a callback function when all requests that were delivered to the driver have been completed or canceled.
WdfIoQueuePurge(
ReadQueue,
WDF_NO_EVENT_CALLBACK,
WDF_NO_CONTEXT
);
Requirements
Requirement | Value |
---|---|
Target Platform | Universal |
Minimum KMDF version | 1.0 |
Minimum UMDF version | 2.0 |
Header | wdfio.h (include Wdf.h) |
Library | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | <= DISPATCH_LEVEL |
DDI compliance rules | ChangeQueueState(kmdf), DriverCreate(kmdf), EvtSurpriseRemoveNoSuspendQueue(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), NoCancelFromEvtSurpriseRemove(kmdf) |