Когда мы открываем удаление отложенного файла, подсистема 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, и мне очень любопытно, почему они так устроены.
Есть ли веская причина?