當我們打開刪除掛起的文件時,Windows子系統返回ERROR_ACCESS_DENIED,即使它們具有ERROR_DELETE_PENDING狀態。當我嘗試打開刪除掛起文件時,爲什麼Windows返回ERROR_ACCESS_DENIED
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,我很好奇他們爲什麼這樣設計。
有沒有很好的理由?
CreateFile不會返回ERROR_DELETE_PENDING它返回ERROR_ACCESS_DENIED。這個事實對雷蒙德撰寫博客文章來說並不重要。 – John
我只指出STATUS_DELETE_PENDING與您期望的不同。這個問題在我回答之後發生了變化,那是幾周前的事。 –