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
Header wdfrequest.h (包括 Wdf.h)
Library 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) MdlAfterReqCompleted IoctlA (kmdf) MdlAfterReqCompletedRead (kmdf) MdlAfterReqCompletedReadA (kmdf ) , MdlAfterReqCompletedWrite) (, 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) RequestComplet (ed) 、RequestCompletedLocal (kmdf)

另请参阅

WdfObjectReference

WdfRequestComplete

WdfRequestCompleteWithInformation