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;
}