WdfRequestCompleteWithPriorityBoost 函数 (wdfrequest.h)

[仅适用于 KMDF]

WdfRequestCompleteWithPriorityBoost 方法完成指定的 I/O 请求并提供完成状态。 它还指定一个值,系统可以使用该值来提升请求 I/O 操作的线程的运行时优先级。

语法

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

参数

[in] Request

表示正在完成的 I/O 请求的框架请求对象的句柄。

[in] Status

表示请求完成状态的 NTSTATUS 值 。 有效状态值包括但不限于以下内容:

STATUS_SUCCESS

驱动程序已成功完成请求。

STATUS_CANCELLED

驱动程序取消了请求。

STATUS_UNSUCCESSFUL

驱动程序在处理请求时遇到错误。

[in] PriorityBoost

一个系统定义的常量值,用于递增请求操作的原始线程的运行时优先级。 常量值特定于设备类型,在 Wdm.h 中定义。 常量名称的格式为 XXX_INCREMENT。 有关优先级提升值的详细信息,请参阅 在完成 I/O 请求时指定优先级提升

返回值

备注

如果驱动程序提供无效的对象句柄,则会发生 bug 检查。

如果要替代框架提供的默认优先级提升,驱动程序应调用 WdfRequestCompleteWithPriorityBoost 。 例如,如果驱动程序能够快速完成请求(可能是因为它检测到错误),则驱动程序可能会将优先级提升设置为IO_NO_INCREMENT。

调用 WdfRequestCompleteWithPriorityBoost 后,请求句柄不再有效,除非驱动程序已调用 WdfObjectReference 向请求对象添加一个或多个其他引用计数。 请注意,在 WdfRequestCompleteWithPriorityBoost 返回后,驱动程序不得尝试访问关联的 WDM IRP 结构,即使它已调用 WdfObjectReference

有关调用 WdfRequestCompleteWithPriorityBoost 的详细信息,请参阅 完成 I/O 请求

示例

下面的代码示例演示 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)
Library Wdf01000.sys (请参阅框架库 Versioning.)
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) MdlAfterReqCompleted IoctlA (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