IoCompleteRequest 的目的是什么?

What is the purpose of IoCompleteRequest?

为什么许多设备驱动程序在调度例程的末尾有一个 IoCompleteRequest(irp,IO_NO_INCREMENT);?我阅读了 IoCompleteRequest 函数的相应 Microsoft 文档,但我对这些概念不是很了解。

首先,您需要了解 IRP 的生命周期。工作完成后如何创建 (IoAllocateIrp)、交付 (IoCallDriver) 和释放 (IoFreeIrp)。 其次,如果有必要,在运行结束时需要post-processing时,I/O完成例程的处理也以驱动层级的方式处理。 IoCompleteRequest 负责确保这两件事。

  1. 应用程序执行 I/O 请求。
  2. I/O 经理(创建 IRP,传递给驱动程序)
  3. 驱动程序(IRP 在处理作业 (IoCompleteRequest) 后完成)
  4. I/OManager(发布IRP,将结果传递给上层应用)
  5. 应用程序收到 I/O 结果。