java - 使用纯 C++ 或 Java 设置文件夹权限

标签 java c++ windows

我正在维护一个使用 J2SE 开发的软件,(但我是 C# 开发人员,实际上在 Java 方面经验不足)。该软件使用访问作为数据存储,此访问数据库存储在 db 文件夹中。当用户从 Windows 7 或 Vista 中的“标准用户”而非管理员安装此应用程序时,他无法获得对 db 文件夹的权限。为了使软件运行起来,我们需要为当前用户(标准用户)添加“修改”权限。

实际上,我搜索了如何使用 Java 来做到这一点,但一无所获,而且我找到的资源很少,但还不够。问题是 “我如何在 c++(旧 c++ 而不是 .net)或使用 Java 中向当前登录的用户授予‘修改’权限?

最佳答案

MSDN 文章 "Modifying the ACLs of an Object in C++" 中介绍的函数完成工作。 GetNamedSecurityInfo检索对象(在您的情况下为目录)的自由访问控制列表 (DACL)。 SetEntriesInAcl通过将新条目(包括权限)与现有条目合并来创建新的访问控制列表 (ACL)。 SetNamedSecurityInfo将修改后的 DACL 分配回对象。

关于修改权限是以下权限的组合:FILE_GENERIC_READ | FILE_GENERIC_WRITE |文件_通用_执行 | DELETE 你可以像这里一样调用这个函数:

std::string strFullPath("C:\test");

DWORD dwRes = AddAceToObjectsSecurityDescriptor(
    const_cast<LPTSTR>(strFullPath.c_str()),
    SE_FILE_OBJECT,
    "StandardUser",
    TRUSTEE_IS_NAME,
    FILE_GENERIC_READ | FILE_GENERIC_WRITE | FILE_GENERIC_EXECUTE | DELETE,
    GRANT_ACCESS,
    NO_INHERITANCE);

关于java - 使用纯 C++ 或 Java 设置文件夹权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8149407/

相关文章:

windows - 从代码控制屏幕键盘位置上的 Windows 7

c++ - 使用 C++ 创建按钮

java - 为什么 MouseDown 事件的坐标与 MenuDetect 事件的坐标不同?

java - 如何在Weblogic上启用集群服务器的JMX?(不是Weblogic AdminServer本身)

C++ va_list 返回奇数

c++ - 如何从 C++ 文件中读取特定数量的字符?

windows - 适用于 Windows CE 和 Windows 桌面的 PCIe 驱动程序

java - 将方法名称作为字符串给出时,如何调用 Java 方法?

java - 如何统计文件中某个字符的出现次数?

c++ - opencv:在矩形检测中使用轮廓和霍夫变换