Функция WdfIoQueueDrain (wdfio.h)

[Применимо к KMDF и UMDF]

Метод WdfIoQueueDrain приводит к тому, что платформа перестает ставить запросы ввода-вывода в очередь ввода-вывода, позволяя доставлять и обрабатывать уже помещенные в очередь запросы.

Синтаксис

void WdfIoQueueDrain(
  [in]           WDFQUEUE               Queue,
  [in, optional] PFN_WDF_IO_QUEUE_STATE DrainComplete,
  [in, optional] WDFCONTEXT             Context
);

Параметры

[in] Queue

Дескриптор объекта очереди платформы.

[in, optional] DrainComplete

Указатель на предоставленную драйвером функцию обратного вызова EvtIoQueueState . Этот параметр является необязательным и может иметь значение NULL.

[in, optional] Context

Нетипизированный указатель на предоставленные драйвером сведения о контексте, которые платформа передает функции обратного вызова EvtIoQueueState . Этот параметр является необязательным и может иметь значение NULL.

Возвращаемое значение

None

Remarks

Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.

После того как драйвер вызывает WdfIoQueueDrain, платформа прекращает добавлять запросы ввода-вывода в указанную очередь. Если платформа получает дополнительные запросы для очереди, она завершает их со значением состояния завершения STATUS_INVALID_DEVICE_STATE.

Если драйвер предоставляет функцию обратного вызова EvtIoQueueState , платформа вызывает ее после завершения или отмены всех запросов, доставленных драйверу. Вы можете изменить IRQL, в котором выполняется обратный вызов, указав ExecutionLevel в WDF_OBJECT_ATTRIBUTES во время создания очереди. Дополнительные сведения см. в разделе ПримечанияEVT_WDF_IO_QUEUE_STATE.

Драйвер не должен вызывать другой метод, изменяющий состояние очереди, например WdfIoQueuePurge или WdfIoQueueStart, до вызова платформы EvtIoQueueState.

Если драйвер задает значение NULL для DrainComplete, драйвер может вызвать другую операцию изменения состояния перед выполнением запросов.

Рекомендуется вызывать WdfIoQueueDrain только в том случае, если вы уверены, что ожидающие выполнения запросов ввода-вывода очереди будут выполнены своевременно. В противном случае используйте WdfIoQueuePurge. Дополнительные сведения см. в разделе Управление очередями ввода-вывода.

После очистки очереди ввода-вывода драйвер может перезапустить очередь, вызвав WdfIoQueueStart.

Примеры

В следующем примере кода выполняется очистка очереди ввода-вывода и вызывается функция EvtIoQueueDrainComplete драйвера, когда все запросы, доставленные драйверу, были завершены или отменены.

WdfIoQueueDrain(
                Queue,
                EvtIoQueueDrainComplete,
                (WDFCONTEXT) myQueueContext
                );

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия 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)

См. также раздел

EvtIoQueueState

WdfIoQueueDrainSynchronously

WdfIoQueuePurge