Функция WdfRequestCompleteWithPriorityBoost (wdfrequest.h)

[Относится только к KMDF]

Метод WdfRequestCompleteWithPriorityBoost завершает указанный запрос ввода-вывода и предоставляет состояние завершения. Он также указывает значение, которое система может использовать для повышения приоритета во время выполнения потока, запрашивающего операцию ввода-вывода.

Синтаксис

void WdfRequestCompleteWithPriorityBoost(
  [in] WDFREQUEST Request,
  [in] NTSTATUS   Status,
  [in] CCHAR      PriorityBoost
);

Параметры

[in] Request

Дескриптор объекта запроса платформы, представляющий завершаемый запрос ввода-вывода.

[in] Status

Значение NTSTATUS, представляющее состояние завершения запроса. Допустимые значения состояния включают, помимо прочего, следующие:

STATUS_SUCCESS

Драйвер успешно выполнил запрос.

STATUS_CANCELLED

Драйвер отменил запрос.

STATUS_UNSUCCESSFUL

Драйвер обнаружил ошибку при обработке запроса.

[in] PriorityBoost

Системное значение константы, на которое увеличивается приоритет времени выполнения исходного потока, запрашивающего операцию. Значения констант зависят от типа устройства и определяются в Wdm.h. Формат имен констант — XXX_INCREMENT. Дополнительные сведения о значениях повышения приоритета см. в разделе Указание повышения приоритета при выполнении запросов ввода-вывода.

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

None

Remarks

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

Драйвер должен вызвать WdfRequestCompleteWithPriorityBoost , если вы хотите переопределить повышение приоритета по умолчанию, которое предоставляет платформа. Например, драйвер может задать повышение приоритета на IO_NO_INCREMENT, если ему удалось быстро выполнить запрос, возможно, из-за того, что он обнаружил ошибку.

После вызова WdfRequestCompleteWithPriorityBoost дескриптор запроса становится недействительным, если драйвер не вызвал WdfObjectReference для добавления одного или нескольких дополнительных счетчиков ссылок в объект запроса. Обратите внимание, что после возврата WdfRequestCompleteWithPriorityBoost драйвер не должен пытаться получить доступ к связанной структуре WDM IRP, даже если он вызвал WdfObjectReference.

Дополнительные сведения о вызове WdfRequestCompleteWithPriorityBoost см. в разделе Завершение запросов ввода-вывода.

Примеры

В следующем примере кода показано, как в примере в WdfRequestComplete можно использовать WdfRequestCompleteWithPriorityBoost вместо WdfRequestComplete.

switch (params.Type) {
    case WdfRequestTypeRead:
        length = params.Parameters.Read.Length;
        direction = WdfDmaDirectionReadFromDevice;
        break;
    case WdfRequestTypeWrite:
        length = params.Parameters.Write.Length;
        direction = WdfDmaDirectionWriteToDevice;
        break;
    default:
        WdfRequestCompleteWithPriorityBoost(
                                            Request,
                                            STATUS_INVALID_PARAMETER,
                                            IO_NO_INCREMENT
                                            );
        return;
    }

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия KMDF 1,0
Верхняя часть wdfrequest.h (включая Wdf.h)
Библиотека Wdf01000.sys (см. раздел Управление версиями библиотеки Платформы).
IRQL <=DISPATCH_LEVEL
Правила соответствия DDI BufAfterReqCompletedIntIoctl(kmdf), BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctl(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedRead(kmdf), BufAfterReqCompletedReadA(kmdf), BufAfterReqCompletedWrite(kmdf), BufAfterReqCompletedWriteA(kmdf), CompleteCanceledReq(kmdf), DeferredRequestCompleted(kmdf), DoubleCompletion(kmdf), DoubleCompletionLocal(kmdf), DriverCreate(kmdf), EvtIoStopCancel(kmdf), EvtIoStopCompleteOrStopAck(kmdf), EvtSurpriseRemoveNoRequestComplete(kmdf), InvalidReqAccess(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), MarkCancOnCancReqLocal(kmdf), MdlAfterReqCompletedIntIoctl(kmdf), MdlAfterReqCompletedIntIoctlA(kmdf), MdlAfterReqCompletedIoctl(kmdf), MdlAfterReqCompletedIoctlA(kmdf), MdlAfterReqCompletedRead(kmdf), MdlAfterReqCompletedReadA(kmdf), MdlAfterReqCompletedWrite(kmdf), MdlAfterReqCompletedWriteA(kmdf), MemAfterReqCompletedIntIoctl(kmdf), MemAfterReqCompletedIntIoctlA(kmdf), MemAfterReqCompletedIoctl(kmdf), MemAfterReqCompletedIoctlA(kmdf), MemAfterReqCompletedRead(kmdf), MemAfterReqCompletedReadA(kmdf), MemAfterReqCompletedWrite(kmdf), MemAfterReqCompletedWriteA(kmdf), NoCancelFromEvtSurpriseRemove(kmdf), ReqDelete(kmdf), ReqIsCancOnCancReq(kmdf), ReqNotCanceledLocal(kmdf), ReqSendFail(kmdf), RequestCompleted(kmdf), RequestCompletedLocal(kmdf)

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

WdfObjectReference

WdfRequestComplete

WdfRequestCompleteWithInformation