Функция WdfRequestCancelSentRequest (wdfrequest.h)
[Относится к KMDF и UMDF]
Метод WdfRequestCancelSentRequest пытается отменить запрос ввода-вывода, который вызывающий объект ранее отправил в целевой объект ввода-вывода.
Синтаксис
BOOLEAN WdfRequestCancelSentRequest(
[in] WDFREQUEST Request
);
Параметры
[in] Request
Дескриптор объекта запроса платформы.
Возвращаемое значение
WdfRequestCancelSentRequest возвращает значение TRUE , если запрос на отмену успешно доставляется целевому объекту ввода-вывода драйвера. Этот метод возвращает значение FALSE , если запрос уже завершен или отменен, или если целевой драйвер ввода-вывода не вызвал WdfRequestMarkCancelable или WdfRequestMarkCancelableEx.
Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.
Комментарии
Драйвер может вызвать WdfRequestCancelSentRequest , чтобы попытаться отменить запрос ввода-вывода, отправленный ранее в целевой объект ввода-вывода, вызвав WdfRequestSend.
Если запрос находится в очереди целевого объекта ввода-вывода, платформа отменяет запрос. Если платформа уже доставила запрос драйверу целевого объекта ввода-вывода и если этот драйвер вызвал WdfRequestMarkCancelable или WdfRequestMarkCancelableEx для включения отмены, платформа вызывает функцию обратного вызова EvtRequestCancel этого драйвера. Если драйвер целевого объекта не вызвал WdfRequestMarkCancelable или WdfRequestMarkCancelableEx, запрос не будет отменен, если запрос не станет отменяемым.
Если драйвер зарегистрировал функцию обратного вызова CompletionRoutine для запроса, платформа вызывает функцию обратного вызова после отмены запроса.
Как правило, если драйвер вызывает WdfRequestCancelSentRequest, он должен увеличить число ссылок объекта запроса. Дополнительные сведения см. в разделе Синхронизация отмены отправленных запросов.
Дополнительные сведения об отмене запроса см. в разделе Отмена запросов ввода-вывода.
Примеры
Следующий пример кода из примера драйвера kmdf_fx2 . В этом примере показана функция обратного вызова EvtIoStop . Так как этот драйвер отправляет каждый запрос в целевой объект ввода-вывода, функция обратного вызова EvtIoStop вызывает WdfRequestCancelSentRequest , если устройство было удалено.
VOID
OsrFxEvtIoStop(
IN WDFQUEUE Queue,
IN WDFREQUEST Request,
IN ULONG ActionFlags
)
{
UNREFERENCED_PARAMETER(Queue);
if (ActionFlags & WdfRequestStopActionSuspend) {
WdfRequestStopAcknowledge(Request, FALSE);
} else if (ActionFlags & WdfRequestStopActionPurge) {
WdfRequestCancelSentRequest(Request);
}
return;
}
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Минимальная версия KMDF | 1,0 |
Минимальная версия UMDF | 2,0 |
Верхняя часть | wdfrequest.h (включая Wdf.h) |
Библиотека | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | <=DISPATCH_LEVEL |
Правила соответствия DDI | DriverCreate(kmdf), EvtIoStopCancel(kmdf), EvtIoStopCompleteOrStopAck(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |