是否有可能删除由Windows下的进程打开的文件?

为了testing和模拟的目的,我想删除一个当前由我的进程打开的文件。

CreateFile文档声明可以在模式下打开文件( FILE_SHARE_DELETE ),允许打开的句柄指向的文件被另一个操作删除。 (我已经尝试并通过CreateFile(FILE_SHARE_DELETE)+ DeleteFile确认。)

然而,现在我想知道的是,是否有可能以某种方式删除没有上述标志的人打开的文件?

据我了解的DeleteFile文档这是不可能的这个function,如

如果应用程序试图删除为正常I / O打开的文件或作为内存映射文件,DeleteFile函数将失败。

有没有其他方法来删除已打开的文件,但没有设置FILE_SHARE_DELETE标志?

Solutions Collecting From Web of "是否有可能删除由Windows下的进程打开的文件?"

没有办法做到这一点。

最接近这样做的方法是使用目标文件名为NULL MoveFileEx和dwFlags参数中的MOVEFILE_DELAY_UNTIL_REBOOT在重新启动时安排删除。

我不认为有一个合法的方式来删除这样的文件。 但是,如果您想成为防弹软件,请记住,有些工具可以从外部关闭您的手柄,然后可以轻松删除文件( Process Explorer就是这样一个工具,但也有其他工具)。 如果有人关闭了您打开的文件的句柄,您将尝试使用该句柄时出错。

你可以看看DeleteFileTransacted ,它允许标记文件在关闭时删除。 但是,如果您想立即删除文件,则不适合您。 如果文件没有FILE_SHARE_DELETE标志,则需要先关闭它,但为此目的,您需要获取文件句柄,然后关闭它。 但是这需要使用代码注入技术。 我不知道如何做起来更容易。