Метод IWDFIoRequest::MarkCancelable (wudfddi.h)

[Предупреждение: UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. В UMDF 1 новые функции не добавляются, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы Windows должны использовать UMDF 2. Дополнительные сведения см. в разделе начало работы с UMDF.]

Метод MarkCancelable позволяет отменить запрос ввода-вывода.

Синтаксис

void MarkCancelable(
  [in] IRequestCallbackCancel *pCancelCallback
);

Параметры

[in] pCancelCallback

Указатель на интерфейс IRequestCallbackCancel , метод которого платформа вызывает после отмены запроса ввода-вывода.

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

None

Remarks

После того как драйвер получает запрос ввода-вывода в качестве входных данных функции обратного вызова события IQueueCallbackRead::OnRead, IQueueCallbackWrite::OnWrite или IQueueCallbackDeviceIoControl::OnDeviceIoControl , драйвер может вызвать метод MarkCancelable , чтобы включить отмену запроса. Позже драйвер может вызвать метод IWDFIoRequest::UnmarkCancelable , чтобы отключить отмену запроса.

Прежде чем драйвер вызывает MarkCancelable, драйвер должен реализовать метод IRequestCallbackCancel::OnCancel .

Платформа драйвера пользовательского режима (UMDF) разрешает только один метод IRequestCallbackCancel::OnCancel в очереди. Поэтому, когда драйвер вызывает MarkCancelable для запросов, связанных с определенной очередью, чтобы платформа могла отменять эти запросы, драйвер должен передать указатель на интерфейс IRequestCallbackCancel для того же объекта request-callback. Позже, чтобы отменить каждый запрос, платформа передает указатель на интерфейс IWDFIoRequest для запроса в вызове метода IRequestCallbackCancel::OnCancel этого объекта request-callback.

Драйвер должен вызвать IWDFIoRequest::Complete из метода IRequestCallbackCancel::OnCancel или из обычного пути завершения ввода-вывода.

После того как драйвер вызывает MarkCancelable для включения отмены, запрос остается отменяемым, пока драйвер владеет объектом запроса, если драйвер не вызывает UnmarkCancelable , чтобы отключить отмену.

Если драйвер вызывает метод IWDFIoRequest::ForwardToIoQueue для переадресации запроса в другую очередь, применяются следующие правила:

  • Отмена запросов ввода-вывода не может быть включена, если драйвер перенаправит запросы в другую очередь.

    Как правило, драйвер не должен вызывать MarkCancelable , чтобы включить отмену запроса перед вызовом IWDFIoRequest::ForwardToIoQueue. Кроме того, драйвер может сделать запрос отмененным. Однако драйвер должен вызвать UnmarkCancelable , чтобы отключить отмену запроса перед вызовом IWDFIoRequest::ForwardToIoQueue.

  • Пока запрос находится во второй очереди, платформа владеет им и может отменить его, не уведомляя драйвер.
  • После того как платформа извлекает запрос из второй очереди и доставляет его драйверу, драйвер может вызвать MarkCancelable , чтобы включить отмену.

Примеры

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

    //
    // The QueryInteraface should not fail.
    //
    (VOID)this->QueryInterface(_uuidof(IRequestCallbackCancel),
                               (PVOID *)&cancelCallback);

    pWdfRequest->MarkCancelable(cancelCallback);

Требования

Требование Значение
Дата окончания поддержки Недоступно в UMDF 2.0 и более поздних версиях.
Целевая платформа Персональный компьютер
Минимальная версия UMDF 1.5
Верхняя часть wudfddi.h (включая Wudfddi.h)
DLL WUDFx.dll

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

IQueueCallbackDeviceIoControl::OnDeviceIoControl

IQueueCallbackRead::OnRead

IQueueCallbackWrite::OnWrite

IRequestCallbackCancel

IRequestCallbackCancel::OnCancel

IWDFIoRequest

IWDFIoRequest::Complete

IWDFIoRequest::ForwardToIoQueue

IWDFIoRequest::UnmarkCancelable