C++ 是否可以删除windows下进程打开的文件?
出于测试和模拟目的,我想删除进程当前打开的文件 可以在模式(C++ 是否可以删除windows下进程打开的文件?,c++,windows,winapi,C++,Windows,Winapi,出于测试和模拟目的,我想删除进程当前打开的文件 可以在模式(file\u SHARE\u DELETE)下打开文件的状态,该模式允许打开句柄指向的文件被其他操作删除。(我已经通过CreateFile(FILE\u SHARE\u DELETE)+DeleteFile尝试并确认了这一点。) 然而,我现在想知道的是,是否有可能以某种方式删除任何人在没有上述标志的情况下打开的文件 据我所知,由于 如果应用程序试图删除打开的文件,DeleteFile函数将失败 用于普通I/O或作为内存映射文件 是否有其
file\u SHARE\u DELETE
)下打开文件的状态,该模式允许打开句柄指向的文件被其他操作删除。(我已经通过CreateFile(FILE\u SHARE\u DELETE)+DeleteFile尝试并确认了这一点。)
然而,我现在想知道的是,是否有可能以某种方式删除任何人在没有上述标志的情况下打开的文件
据我所知,由于
如果应用程序试图删除打开的文件,DeleteFile函数将失败
用于普通I/O或作为内存映射文件
是否有其他方法可以删除已打开但未设置文件共享删除标志的文件?我认为没有合法的方法可以删除此类文件。但是,如果您想防弹,请记住,有一些工具可以从外部关闭您的句柄,然后文件可以轻松删除(这是一种工具,但也有)。如果有人关闭了您打开的文件的句柄,您将在尝试使用该句柄时出错。您可以查看,它允许在关闭时将文件标记为删除。但如果您想立即删除文件,它不适合您。如果文件没有
file\u SHARE\u DELETE
标志,则需要先关闭它,但为此,需要获取文件句柄,然后关闭它。但这需要使用代码注入技术。我不知道怎样才能做得更容易。没有办法做到这一点
执行类似操作的最接近的方法是使用目标文件名为
NULL
的计划重新启动时删除,并在dwFlags
参数中使用MOVEFILE\u DELAY\u直到重新启动。在某些情况下可以重命名它。我认为,这在您想要升级/替换与以前相同的问题时非常有用。“如果应用程序试图删除为正常I/O或内存映射文件打开的文件,DeleteFileTransaction函数将失败。”还要记住,句柄值可以循环使用,因此如果这样做,可能会发生非常奇怪的事情(至少在理论上)。在解决某些问题时,将其作为最后手段,而不是作为生产代码的一部分。@Leo Davidson-是的,我知道。。。我试图找到雷蒙德·陈关于这方面的帖子,但就是找不到,所以我留下了这张便条。你有没有读过?我很想添加链接,以备将来参考。我想的是同一篇文章,但我也找不到(