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

继续在以下问题:

保持Windows试图读取文件

感谢在这个问题中接受的答案,我意识到保持等待数据的窗口是一个驱动程序的责任。

当我使用Dokan时,我可以查看驱动程序代码。 当没有数据返回时,Dokan使用STATUS_END_OF_FILE完成IRP请求,但是强制Windows停止等待数据并closures文件。

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

完成请求的代码是:

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

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

我已经试过返回STATUS_WAIT_0,但似乎没有工作。

再次感谢 :)

您应该返回STATUS_PENDING并为IRP设置CancelRoutine。 数据可用或发生错误时完成IRP。 有关更多信息,请参阅异步I / O响应和取消IRP 。