Установите права доступа к папке, используя обычный c ++ или java - PullRequest
1 голос
/ 16 ноября 2011

Я поддерживаю программное обеспечение, разработанное с использованием J2SE (но я разработчик на C # на самом деле не имею большого опыта в Java). Это программное обеспечение использует доступ как хранилище данных, эта база данных доступа хранится в папке базы данных. Когда пользователь устанавливает это приложение от «Обычного пользователя», а не от администратора, в Windows 7 или Vista, он не может получить разрешение на папку db. Для запуска программного обеспечения нам необходимо добавить разрешение «Изменить» для текущего пользователя (который является обычным пользователем).

На самом деле я искал, как это сделать с помощью Java, но ничего не нашел, но я нашел мало ресурсов, но недостаточно. Вопрос «Как я могу предоставить разрешение« Изменить »текущему зарегистрированному пользователю, либо в c ++ (старый c ++ не .net), либо с использованием Java)?

»

Ответы [ 2 ]

2 голосов
/ 16 ноября 2011

Функция представлена ​​в статье MSDN «Изменение ACL объекта в C ++» выполняет свою работу. GetNamedSecurityInfo извлекает дискреционный список контроля доступа (DACL) для объекта (каталог в вашем случае). SetEntriesInAcl создает новый список управления доступом (ACL), объединяя новые записи (включая разрешения) с существующими. SetNamedSecurityInfo назначает измененный DACL обратно объекту.

В отношении того, что разрешение на изменение является комбинацией следующих прав: FILE_GENERIC_READ |FILE_GENERIC_WRITE |FILE_GENERIC_EXECUTE |УДАЛИТЬ вы можете вызвать эту функцию, как здесь:

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);
0 голосов
/ 16 ноября 2011

Этот вопрос может помочь вам в C ++. Этот объясняет, что это невозможно в Java до Java 7. Для более подробного ответа, пожалуйста, задайте более конкретный вопрос (что вы уже пробовали, почему это не работает).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...