FindFirstFile 返回拒绝访问

Posted

技术标签:

【中文标题】FindFirstFile 返回拒绝访问【英文标题】:FindFirstFile returns access denied 【发布时间】:2012-05-16 18:52:25 【问题描述】:

我正在尝试创建一个强大的递归文件夹删除器函数。

使用普通目录可以很好地工作。

当我创建“硬核”目录时出现问题,例如:

C:\test\x\x\x\x\x\x\x\x\x\x\x\x\x\x\x\x\x\x\x\x\ .. .\x\x\x

此长度约为 25000(小于 MSDN 限制:32,767)。基本上我递归地创建了这个目录,直到 CreatDirectory 函数失败。

现在,最奇怪的是,我的函数能够删除 2 个目录,然后 FindFirstFile 以 0x5 失败:

\\?\C:\test\x\ ... \x\x\x\*.*    < no error
\\?\C:\test\x\ ... \x\x\*.*      < no error
\\?\C:\test\x\ ... \x\*.*        < access denied

(我可以重新运行它,该应用程序正在慢慢地咀嚼文件夹,2 x 2,可能直到路径长度变得非常小)

我正在运行 FindFirstFile 来检查文件夹是否为空。

是否存在任何记录较少的限制? FindFirstFile 根本不起作用? (越野车?) 我是否缺少某种 NTFS 权限? 别的...

编辑: 重要提示:如果我一步一步慢慢运行程序......那么什么都不会失败。

【问题讨论】:

请向我们展示您的剥离代码 代码很大,我不觉得发帖有用。 我已经做过很多次了,从来没有遇到过问题;问题很可能在您的代码中。至少试着把它简化为一个最小的例子,看看它是否很明显。 我要求我提供一些奇怪的未知事物,这让事情变得混乱。根据您的评论,没有,所以我必须修复我的代码。 【参考方案1】:

您可能遇到了诸如病毒扫描程序、索引器或持续备份解决方案之类的东西,该解决方案持有目录句柄。例如,如果索引服务配置为索引该文件夹。

试图删除不是以 FILE_SHARE_DELETE 标志打开的文件夹或文件将导致 ACCESS_DENIED。

要确认这一点,请使用进程监视器查看与您的路径匹配的任何内容的打开和关闭。

(当然也确认你调用了 FindClose)。

【讨论】:

索引服务一直在查询最深的文件夹。 我的问题是我试图访问的文件的访问权限错误。这似乎是一个“duh”解决方案,但我会检查文件属性-> 安全性并确保正确的访问组可以访问文件,因为它是“ACCESS_DENIED”最明显的情况,因为......你无法访问文件=P

以上是关于FindFirstFile 返回拒绝访问的主要内容,如果未能解决你的问题,请参考以下文章

WinApi FindFirstFile 和文件句柄

Spring Security 总是返回 403 被禁止,访问被拒绝

SetSecurityInfo 返回拒绝访问

Spring Boot Jwt 返回访问被拒绝

MFC GetLastError 返回 5(拒绝访问)

服务返回代码 5 中的 CreateProcessWithLogonw:访问被拒绝