gpt4 book ai didi

windows - 为什么当我尝试打开删除挂起的文件时 Windows 返回 ERROR_ACCESS_DENIED

转载 作者:可可西里 更新时间:2023-11-01 14:43:06 30 4
gpt4 key购买 nike

当我们打开一个删除挂起的文件时,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 内核和“ native ”api 使用 NTSTATUS 代码。 Win32 使用可追溯到 DOS 错误代码的 Win32 错误代码。 Windows 始终将 STATUS_DELETE_PENDING 映射到 ERROR_ACCESS_DENIED。我能够在 NT4 上验证这一点,它没有在 winerror.h 中定义 ERROR_DELETE_PENDING。

ERROR_DELETE_PENDING 的定义在 Windows XP 中添加到 winerror.h 中,但看起来映射一直是这样。

我想有人和你有同样的想法 - 为什么不将 STATUS_DELETE_PENDING 映射到 ERROR_DELETE_PENDING,尝试添加这个新的错误代码并发现它破坏了期待 ERROR_ACCESS_DENIED 的应用程序。所以他改回映射但忘记从 winerror.h 中删除定义

关于windows - 为什么当我尝试打开删除挂起的文件时 Windows 返回 ERROR_ACCESS_DENIED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6680491/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com