IoCompleteRequest 的目的是什么?
What is the purpose of IoCompleteRequest?
为什么许多设备驱动程序在调度例程的末尾有一个 IoCompleteRequest(irp,IO_NO_INCREMENT);
?我阅读了 IoCompleteRequest
函数的相应 Microsoft 文档,但我对这些概念不是很了解。
首先,您需要了解 IRP 的生命周期。工作完成后如何创建 (IoAllocateIrp)、交付 (IoCallDriver) 和释放 (IoFreeIrp)。
其次,如果有必要,在运行结束时需要post-processing时,I/O完成例程的处理也以驱动层级的方式处理。
IoCompleteRequest 负责确保这两件事。
- 应用程序执行 I/O 请求。
- I/O 经理(创建 IRP,传递给驱动程序)
- 驱动程序(IRP 在处理作业 (IoCompleteRequest) 后完成)
- I/OManager(发布IRP,将结果传递给上层应用)
- 应用程序收到 I/O 结果。
为什么许多设备驱动程序在调度例程的末尾有一个 IoCompleteRequest(irp,IO_NO_INCREMENT);
?我阅读了 IoCompleteRequest
函数的相应 Microsoft 文档,但我对这些概念不是很了解。
首先,您需要了解 IRP 的生命周期。工作完成后如何创建 (IoAllocateIrp)、交付 (IoCallDriver) 和释放 (IoFreeIrp)。 其次,如果有必要,在运行结束时需要post-processing时,I/O完成例程的处理也以驱动层级的方式处理。 IoCompleteRequest 负责确保这两件事。
- 应用程序执行 I/O 请求。
- I/O 经理(创建 IRP,传递给驱动程序)
- 驱动程序(IRP 在处理作业 (IoCompleteRequest) 后完成)
- I/OManager(发布IRP,将结果传递给上层应用)
- 应用程序收到 I/O 结果。