继续在以下问题:
保持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 。