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


Функция 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.

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

None

Remarks

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

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

Напротив, метод WdfIoQueueStop не отменяет необработанные запросы в очереди или отменяемых запросах, принадлежащих драйверу.

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

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

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

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

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

Примеры

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

WDFCONTEXT stopandpurgeContext;

stopandpurgeContext = &myContext;

WdfIoQueueStopAndPurge(
               queue,
               EvtIoQueueStateStopAndPurge,
               stopandpurgeContext
               );

Требования

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

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

EvtIoCanceledOnQueue

EvtIoQueueState

WdfIoQueueStart

WdfIoQueueStopAndPurgeSynchronously