Функция WdfIoQueuePurge (wdfio.h)
[Относится к KMDF и UMDF]
Метод WdfIoQueuePurge приводит к тому, что платформа прекращает очередь запросов ввода-вывода в очередь ввода-вывода и отменяет необработанные запросы.
Синтаксис
void WdfIoQueuePurge(
[in] WDFQUEUE Queue,
[in, optional] PFN_WDF_IO_QUEUE_STATE PurgeComplete,
[in, optional] WDFCONTEXT Context
);
Параметры
[in] Queue
Дескриптор объекта очереди платформы.
[in, optional] PurgeComplete
Указатель на функцию обратного вызова EvtIoQueueState , предоставляемую драйвером. Этот параметр является необязательным и может иметь значение NULL.
[in, optional] Context
Нетипизированный указатель на предоставленные драйвером сведения о контексте, которые платформа передает функции обратного вызова EvtIoQueueState . Этот параметр является необязательным и может иметь значение NULL.
Возвращаемое значение
None
Remarks
Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.
После вызова драйвером WdfIoQueuePurge платформа перестает добавлять запросы ввода-вывода в указанную очередь. Платформа отменяет все запросы, которые она не доставила на целевое устройство, и вызывает функцию обратного вызова CompletionRoutine драйвера для каждого из них. Платформа также пытается отменить (путем вызова IoCancelIrp) все запросы, доставленные на целевое устройство, которые не были помечены WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE.
Если платформа получает дополнительные запросы для очереди, она завершает их со значением состояния завершения STATUS_INVALID_DEVICE_STATE.
Если драйвер предоставляет функцию обратного вызова EvtIoQueueState , платформа вызывает ее после завершения или отмены всех запросов, которые были доставлены драйверу. Вы можете изменить irQL, по которому выполняется обратный вызов, указав ExecutionLevel в WDF_OBJECT_ATTRIBUTES во время создания очереди. Дополнительные сведения см. в разделе ПримечанияEVT_WDF_IO_QUEUE_STATE.
После очистки очереди ввода-вывода драйвер может перезапустить очередь, вызвав WdfIoQueueStart.
Если драйвер вызывает WdfRequestRequeue после вызова WdfIoQueuePurge, повторная попытка может завершиться до завершения очистки. В kmdf версии 1.9 и более ранних эта последовательность приводит к сбою операционной системы. Эта проблема устранена в KMDF версии 1.11 и более поздних.
Дополнительные сведения о методе WdfIoQueuePurge см. в разделе Управление очередями ввода-вывода.
Примеры
Следующий пример кода очищает очередь ввода-вывода и не вызывает функцию обратного вызова, если все запросы, доставленные драйверу, были завершены или отменены.
WdfIoQueuePurge(
ReadQueue,
WDF_NO_EVENT_CALLBACK,
WDF_NO_CONTEXT
);
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Минимальная версия KMDF | 1,0 |
Минимальная версия UMDF | 2,0 |
Верхняя часть | wdfio.h (включая Wdf.h) |
Библиотека | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | <= DISPATCH_LEVEL |
Правила соответствия DDI | ChangeQueueState(kmdf), DriverCreate(kmdf), EvtSurpriseRemoveNoSuspendQueue(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), NoCancelFromEvtSurpriseRemove(kmdf) |