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


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

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

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

Синтаксис

VOID WdfIoQueueStopAndPurge(
  [in]           WDFQUEUE               Queue,
  [in, optional] PFN_WDF_IO_QUEUE_STATE StopAndPurgeComplete,
  [in, optional] WDFCONTEXT             Context
);

Параметры

[in] Queue

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

[in, optional] StopAndPurgeComplete

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

[in, optional] Context

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

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

Нет

Замечания

Метод WdfIoQueueStopAndPurge запрещает очереди ввода-вывода отправлять запросы ввода-вывода драйверу, позволяя добавлять новые запросы в очередь.

Кроме того, он отменяет необработанные запросы в очереди и запросы, принадлежащие драйверу ( запросы, которые были доставлены драйверу, не завершены или повторно возвращены). Если новые запросы добавляются во время WdfIoQueueStopAndPurge, эти новые запросы не доставляются до тех пор, пока драйвер не вызывает WdfIoQueueStart.

В отличие от этого, метод WdfIoQueueStop не отменяет необработанные запросы в очереди или на основе драйвера отмененные запросы.

Если этот метод приводит к отмене необработанных запросов в очереди, платформа вызывает драйвера EvtIoCanceledOnQueue функцию обратного вызова для этой очереди, если драйвер предоставил один.

Если драйвер предоставляет функцию обратного вызова EvtIoQueueState, платформа вызывает ее после завершения или отмены всех запросов, доставленных драйверу.

Метод WdfIoQueueStopAndPurge позволяет очереди получать новые запросы, даже если очередь не получает новые запросы до вызова драйвера WdfIoQueueStopAndPurge. Например, драйвер может вызывать WdfIoQueueDrain, что приводит к остановке добавления новых запросов ввода-вывода в очередь. Последующий вызов драйвера WdfIoQueueStopAndPur ge приводит к возобновлению добавления запросов в очередь.

Напротив, WdfIoQueuePurge приводит к остановке добавления запросов ввода-вывода в указанную очередь.

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

Примеры

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

WDFCONTEXT stopandpurgeContext;

stopandpurgeContext = &myContext;

WdfIoQueueStopAndPurge(
               queue,
               EvtIoQueueStateStopAndPurge,
               stopandpurgeContext
               );

Требования

Требование Ценность
целевая платформа универсальный
минимальная версия KMDF 1.11
минимальная версия UMDF 2.0
Заголовок wdfio.h (include Wdf.h)
Библиотека Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
правил соответствия DDI ChangeQueueState(kmdf), DriverCreate(kmdf), EvtSurpriseRemoveNoSuspendQueue(kmdf), NoCancelFromEvtSurpriseRemove(kmdf)

См. также

EvtIoCanceledOnQueue

EvtIoQueueState

WdfIoQueueStart

WdfIoQueueStopAndPurgeSynchronously