Метод 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
IRequestCallbackCancel::OnCancel