【问题标题】:Active Wait in Windows I/O DriverWindows I/O 驱动程序中的主动等待
【发布时间】:2009-10-21 08:16:33
【问题描述】:

继续提问:

Keep windows trying to read a file

感谢该问题中接受的答案,我意识到让 Windows 等待数据是驱动程序的责任。

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

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

完成请求的代码是:

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

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

我已经尝试返回 STATUS_WAIT_0,但它似乎不起作用。

再次感谢:)

【问题讨论】:

    标签: c++ windows winapi driver dokan


    【解决方案1】:

    您应该返回 STATUS_PENDING 并为 IRP 设置 CancelRoutine。当数据可用或发生错误时完成您的 IRP。请参阅Asynchronous I/O ResponsesCanceling IRPs 了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      相关资源
      最近更新 更多