1

我正在使用 VS2005 开发 C 程序,我发现当文件夹访问受到限制时,我无法创建文件夹或从文件夹中删除任何内容,文件夹的 _stat 函数没有正确设置 errno。errno 设置为值 ENOENT。我绝对不能修改权限,所以我可以获得价值 EACCES。_stat 返回 0(无错误)或 errno 设置为 ENOENT。你能告诉我如何区分真正存在的文件夹和用户没有足够的文件夹权限吗?我不理解的另一件事是特定权限导致_stat 返回-1。当我查看文件夹的有效权限时,我一直在测试 _stat,它在“拒绝”列中没有任何内容。当我无法在其中创建文件夹时,甚至检查了“创建文件夹/附加数据”。

谢谢和BR-马蒂

4

2 回答 2

2

Windows 安全属性的粒度太细,无法使用 _stat() 进行测试。它的实现使用 FindFirstFile() API 函数,只有在未授予枚举文件的权限时才会失败。这种情况很少见,通常关闭的限制性更强的是写入或修改。

通常可以避免攻击安全 API 来测试 ACL,并且非常难以移植。当您尝试打开文件时,您会发现自己没有必要的权限。完全可以接受,因为您无法在代码中做任何事情来获得访问文件的权利。

于 2010-09-26T20:19:53.687 回答
1

我不是 100% 确定这一点,但你试过_doserrno吗?根据 MSDN 文档:

For I/O operations, use _doserrno to access the operating-system error-code 
equivalents of errno codes. For most non-I/O operations the value of _doserrno is   
undefined.
于 2010-09-26T19:08:56.653 回答