有没有办法在将成功返回给调用应用程序的同时取消创建或写入操作?

Is there a way to cancel a create or write operation while returning succes to the calling application?

我正在尝试创建一个 driver 来伪造文件写入,记录尝试。但是我确实希望调用应用程序认为它成功了。有人对如何做到这一点有什么建议吗?

我是 driver 编程新手 (Windows);尽管我确实有 C、C++ 和操作系统(创建)方面的经验。

我查看了一些样本,但找不到类似的东西,也没有任何 NTSTATUS 看起来像我正在尝试做的事情。

编辑 1: 至于我需要一个中级driver,我已经知道了。现在 minispy 示例执行日志记录但不执行假装操作成功的主要功能。至于 Dokan 方法,我不想自己做,因为我觉得它很有趣,而且我想对注册表项做同样的事情。

困难的方法是构建一个 KMDF intermediate driver. Samples here, github of all samples here. Check MiniSpy,例如。

简单的方法是使用 Dokan 创建虚拟文件系统。

建议的方法是退出项目。 Windows 对于根本没有为 Windows 开发过的人来说,编程太复杂了,更不用说需要资金支持的 KDMF 开发了。

要执行 "fake" 操作,您真正需要做的是 return STATUS_SUCCESS。或者在迷你过滤器中,您可以从您的预操作例程中 return FLT_PREOP_COMPLETE(并将 IoStatus.Status 字段设置为 STATUS_SUCCESS)。

当您有一个写入某些更改然后尝试读取它们的进程时,这可能会变得更加复杂。如果你想完全伪造它,你必须管理跟踪所有更改而不将它们写入基础文件对象。对于所有可能的情况,这将是一个非常困难的问题!

从 PreWrite 中简单地完成 STATUS_SUCCESS 和 return FLT_PREOP_COMPLETE 的操作。 写入不会做任何事情,因为它没有到达文件系统并且 WriteFile 的调用者获得成功状态。