Поделиться через


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

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

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

Синтаксис

void WdfIoQueueDrainSynchronously(
  [in] WDFQUEUE Queue
);

Параметры

[in] Queue

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

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

None

Remarks

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

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

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

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

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

Не вызывайте WdfIoQueueDrainSynchronous из следующих функций обратного вызова событий объекта очереди, независимо от очереди, с которой связана функция обратного вызова события:

EvtIoDefaultEvtIoDeviceControlEvtIoInternalDeviceControlEvtIoReadEvtIoWrite

Примеры

В следующем примере кода выполняется очистка очереди ввода-вывода.

WdfIoQueueDrainSynchronously(queue);

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия KMDF 1,0
Минимальная версия UMDF 2,0
Верхняя часть wdfio.h (включая Wdf.h)
Библиотека Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
Правила соответствия DDI ChangeQueueState(kmdf), DriverCreate(kmdf), EvtSurpriseRemoveNoSuspendQueue(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), NoCancelFromEvtSurpriseRemove(kmdf)

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

WdfIoQueueDrain