重复使用框架请求对象

为了提高性能,创建大量几乎相同的异步请求并将其发送到 I/O 目标的基于框架的驱动程序可以重复使用请求对象,而不是为每个请求创建新的请求对象。 完成请求后,驱动程序可以重复使用请求对象。

如果驱动程序已通过调用 WdfRequestCreateWdfRequestCreateFromIrp 创建了请求对象,则可以通过调用 WdfRequestReuse 来重复使用该请求。 驱动程序还可以在其 I/O 队列中重复使用从框架收到的请求对象,但无法更改收到的请求对象包含的 IRP。

如果小心避免导致 WdfRequestReuse 中所述的返回值失败的情况,驱动程序可以从 CompletionRoutine 回调函数中调用 WdfRequestReuse。 (CompletionRoutine 回调函数具有 VOID 返回值,因此无法报告 errors。)

如果驱动程序为它重用的请求对象提供 CompletionRoutine 回调函数,则驱动程序必须在调用 WdfRequestReuse 后调用 WdfRequestSetCompletionRoutine