Windows I / O驱动程序中的活动等待

时间:2009-10-21 08:16:33

标签: c++ windows winapi driver dokan

继续提问:

Keep windows trying to read a file

由于在该问题中接受了回答,我意识到保持窗口等待数据是驱动程序的责任。

当我使用Dokan时,我可以查看驱动程序代码。当您没有返回任何数据时,Dokan使用STATUS_END_OF_FILE完成IRP请求,这会强制窗口停止等待数据并关闭文件。

我想要做的是保存请求文件数据的应用程序,直到数据可用,正如我在原始问题中所说,用户必须能够随时取消该过程。

完成请求的代码是:

PIRP irp
irp->IoStatus.Status = STATUS_END_OF_FILE
IoCompleteRequest(irp, IO_NO_INCREMENT);

实际上,我可以返回任何错误代码,我想知道是否有一些STATUS代码(NTSTATUS值之一),强制窗口等待数据,以及返回该状态代码是否足以在读取操作中保持窗口。

我已经尝试返回STATUS_WAIT_0,但它似乎无效。

再次感谢:)

1 个答案:

答案 0 :(得分:2)

您应该返回STATUS_PENDING并为IRP设置CancelRoutine。在数据可用或发生错误时完成IRP。有关详细信息,请参阅Asynchronous I/O ResponsesCanceling IRPs