我有一个创建FILE_FLAG_DELETE_ON_CLOSE属性文件的程序。我在一些机器上看到很少的情况,即使进程停止,文件也在那里。
CreateFile(fileName,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
NULL,
OPEN_ALWAYS,
FILE_FLAG_DELETE_ON_CLOSE,
NULL);
注意:我确信100%没有其他进程持有这些文件的句柄。此外,所有句柄(OpenFile、CreateFile)都是使用FILE_FLAG_DELETE_ON_CLOSE属性创建的。
我正在尝试寻找边缘情况,即保证文件将在其所有句柄关闭后立即删除,是不起作用的。(除了意外关闭操作系统)有人知道其他情况下文件可以留在磁盘上吗?
发布于 2020-05-28 02:56:15
正如注释所述,最有可能的情况是文件上的句柄仍处于打开状态。然而,这并不是它仍然存在的唯一原因。
您可能有一个名为WriteFile
的程序,但它已被强制终止(因此句柄已关闭),并且一个挂起的IRP保存着该文件。此IRP将不允许释放该文件,直到它在内核中的引用计数达到0。由于IRP仍处于挂起状态,因此它是非零的。
https://stackoverflow.com/questions/62042293
复制相似问题