【发布时间】:2011-07-13 14:26:32
【问题描述】:
当我们打开一个删除挂起的文件时,Windows 子系统会返回 ERROR_ACCESS_DENIED,即使它们处于 ERROR_DELETE_PENDING 状态。
HANDLE h = CreateFile(L"C:\\test.txt",
GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_DELETE, 0, CREATE_ALWAYS, 0, 0);
// Succeed
BOOL fOk = DeleteFile(L"C:\\test.txt");
// Succeed. The file has been delete pended now,
// because the file is still opening.
HANDLE h2 = CreateFile(L"C:\\test.txt",
GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_DELETE, 0, OPEN_EXISTING, 0, 0);
// Failed with ERROR_ACCESS_DENIED. But why not ERROR_DELETE_PENDING?
对于最后一个 CreateFile 函数,文件系统驱动程序返回了 STATUS_DELETE_PENDING。
但 Win32 子系统将其转换为 ERROR_ACCESS_DENIED。为什么?
我认为应该是 ERROR_DELETE_PENDING,我很好奇他们为什么要这样设计。
有充分的理由吗?
【问题讨论】:
标签: windows winapi file-io filesystems device-driver