Handling IRPs 10: Optimizations

来源:互联网 发布:金蝶软件连接数据库 编辑:程序博客网 时间:2024/06/06 02:18

Optimizations

By testing the value of the Irp->PendingReturned field, a driver can take advantage of the pending bit to optimize post-processing work for an I/O request. For example, a driver can use the processor cache efficiently, thus improving throughput, by post-processing the IRP after the IoCallDriver routine returns a synchronous response. The logic of such an optimization follows:

·         In a synchronous I/O response, the thread that initiated the I/O request can perform post-processing ifIoCallDriver does not return STATUS_PENDING. In this case, the IRP is complete whenIoCallDriver returns, so the dispatch routine can perform any required processing.

·         In an asynchronous I/O response, the IoCompletion routine should perform the post-processing ifIoCallDriver returns STATUS_PENDING. The IoCompletion routine must test the value ofIrp->PendingReturned, as described in IoCompletion Routines and Asynchronous I/O Responses” earlier in this paper. If the value ofIrp‑>PendingReturned is TRUE, the IoCompletion routine performs the required post-processing.

 

The operating system uses this exact technique for read requests, write requests, and some I/O control codes (IOCTLs). Consequently, if a driver fails to follow the guidelines in “Summary of Guidelines for Pending IRPs” earlier in this paper, the operating system will perform post-processing twice or not at all
原创粉丝点击