繁体   English   中英

是否可以删除Windows下进程打开的文件?

[英]Is it possible to delete a file that is opened by a process under windows?

为了进行测试和模拟,我想删除当前由进程打开的文件。

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

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

据我了解DeleteFile文档 ,此功能将是不可能的,因为

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

还有其他方法可以删除已打开但未设置FILE_SHARE_DELETE标志的文件吗?

没有办法做到这一点。

执行此操作的最接近方法是使用目标文件名为NULL MoveFileEx并在dwFlags参数中使用MOVEFILE_DELAY_UNTIL_REBOOT计划重新启动时进行删除。

我认为没有删除此类文件的合法方法。 但是,如果您想防弹,请记住,有些工具可以从外面关闭手柄,然后可以轻松删除文件( Process Explorer是这样的一种工具,但还有其他工具)。 如果有人关闭您打开的文件的句柄,则尝试使用该句柄时会出现错误。

您可以查看DeleteFileTransacted ,它允许在关闭时标记要删除的文件。 但是,如果要立即删除文件,则不适合您。 如果文件没有FILE_SHARE_DELETE标志,则需要先将其关闭,但是为此,您需要获取文件句柄然后将其关闭。 但这需要使用代码注入技术。 我不知道该如何轻松完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM