需要知道目录是否具有C++的写入权限
Need to know if a directory has write permission or not in C++
我需要知道指定的目录(具有登录凭据的本地或共享路径)是否具有写入权限。
我正在使用 GetFileAttributes,但它总是返回FILE_ATTRIBUTE_DIRECTORY,没有其他内容。
我的代码如下所示
if(storageLocation != "")
{
//! check if local storage - user name password would be empty
if(storageUsername == "" && storagePassword == "")
{
//! local storage
//! lets check whether the local path is a valid path or not
boost::filesystem::path fpath(storageUsername.c_str());
if(boost::filesystem::exists(fpath))
{
DWORD attrib = ::GetFileAttributes(storageLocation.c_str());
if((attrib != INVALID_FILE_ATTRIBUTES) &&
((attrib & FILE_ATTRIBUTE_READONLY) != FILE_ATTRIBUTE_READONLY))
{
string strWritePermission = "TRUE";
}
}
}
else
{
uncLocation_t uncLocation;
uncLocation.m_location = storageLocation;
uncLocation.m_username = storageUsername;
uncLocation.m_password = storagePassword;
if(0 == connectToUNCLocation(uncLocation)) // My function to connect to UNC location
{
//! successful connection
DWORD attrib = ::GetFileAttributes(storageLocation.c_str());
if((attrib != INVALID_FILE_ATTRIBUTES) &&
((attrib & FILE_ATTRIBUTE_READONLY) != FILE_ATTRIBUTE_READONLY))
{
string strWritePermission = "TRUE";
}
}
}
}
我不明白为什么,但 GetFileAttributes 总是返回0x16。
我已经通过创建一个共享文件夹并在其中创建 2 个文件夹对其进行了测试。一个具有只读权限,另一个具有默认权限。但是在所有 3 种情况下(共享文件夹、只读文件夹和默认权限文件夹),我都得到了相同的返回值。
有办法找到写入权限,创建一个临时文件(GENERIC_WRITE模式下的usinf CreateFile),如果成功创建,则将其删除。但我不想使用此方法,因为我不希望我的应用程序在每次用户指定位置时创建一个临时文件。
请建议应该怎么做。
您需要复制 Windows 执行的安全检查。AccessCheck
函数将对此有所帮助。您目前在查看文件属性方面已经很宽泛了。Windows安全比这复杂得多。
虽然你说你不想这样做,但正确的解决方案是不要试图检查。只需做你想做的任何事情。如果系统确定用户没有足够的权限,则CreateFile
将失败,最后一个错误将设置为 ERROR_ACCESS_DENIED
。不需要临时文件。你只是试着做你正在做的任何事情,让它失败。无论如何,您都必须处理失败,因为文件操作失败的方式有很多种,而不仅仅是安全性。
俗话说,求饶比许可好。
我认为您正在寻找AccessCheck。仅供参考,这不是一个C++问题,而是一个Windows API问题。
相关文章:
- Termux权限被拒绝
- AWS Lambda C++运行时权限被拒绝
- 为什么 KMS drmModeSetCrtc() 在 X11 会话中运行时会失败并被拒绝权限?
- 编写一个函数来删除单链表中的节点(尾部除外),仅授予对该节点的访问权限
- 在没有管理员权限的情况下连接到同一网络中的命名管道
- 为什么我在空指针错误(链表)中获取成员访问权限
- Q没有管理权限的 exe 无法启动维护工具
- 在没有管理员权限的情况下,在 c++ 中以编程方式将程序添加到启动
- 如何使用Windows API C++更改已创建的文件夹/目录安全权限
- 如何修复无效的API密钥,IP或操作权限错误?
- 使用崇高文本 3 进行C++拒绝授予权限?
- 为什么"delete"操作员给我访问权限冲突
- 从根权限进程创建可访问的文件
- Android因为权限问题而杀死Qt应用程序
- 具有管理员权限的外壳执行不会结束
- 父级的子属性 - 访问权限
- 从C++获得对在python中创建的C++类的访问权限
- 安卓inotify_add_watch失败:权限被拒绝?
- 威纳派读取自定义文件或文件夹的所有访问权限
- 为什么当我使用 soci 连接到 postgresql 时,我没有足够的数据库权限?