Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2011, 20:34   #1
romec1
Пользователь
 
Регистрация: 04.02.2010
Сообщений: 50
По умолчанию Списки ACL Вопрос

Ув. знатоки. Собсна необходимо написать программу, которая для выбранного файла задает права доступа на Смену разрешений и Выполнение файлов.
Программа вроде как готова, но хоть убейте не нашел нигде константы или комбинации флагов для установки Смены разрешений. Прошу помощи, может кто знает.
Код:
#include <windows.h>
#include <stdio.h>
#include <aclapi.h>
#include <iostream>
int main()
{
    DWORD dwDisposition;
    PSID pEveryoneSID = NULL;
    PACL pACL = NULL;
    PSECURITY_DESCRIPTOR pSD = NULL;
    EXPLICIT_ACCESS ea;
    SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY;
    SECURITY_ATTRIBUTES sa;
    LONG lRes;

    // Create a well-known SID for the Everyone.
    AllocateAndInitializeSid(&SIDAuthWorld, 1,
                      		 SECURITY_WORLD_RID,
                     		 0, 0, 0, 0, 0, 0, 0,
                     		 &pEveryoneSID);

    // Initialize an EXPLICIT_ACCESS structure for an ACE.

    ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));
    ea.grfAccessPermissions = GENERIC_EXECUTE; /*собсна здесь и должна прописываться Смена разрешений */
    ea.grfAccessMode        = SET_ACCESS;
    ea.grfInheritance       = NO_INHERITANCE;
    ea.Trustee.TrusteeForm  = TRUSTEE_IS_SID;
    ea.Trustee.TrusteeType  = TRUSTEE_IS_WELL_KNOWN_GROUP;
    ea.Trustee.ptstrName    = (LPTSTR) pEveryoneSID;

    // Create a new ACL that contains the new ACEs.
    SetEntriesInAcl(1, &ea, NULL, &pACL);

    // Initialize a security descriptor.
    pSD = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR,
                             SECURITY_DESCRIPTOR_MIN_LENGTH);

    InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION);

    // Add the ACL to the security descriptor.
    SetSecurityDescriptorDacl(pSD,
            TRUE,     // bDaclPresent flag
            pACL,
            FALSE);   // not a default DACL

    // Initialize a security attributes structure.
    sa.nLength = sizeof (SECURITY_ATTRIBUTES);
    sa.lpSecurityDescriptor = pSD;
    sa.bInheritHandle = FALSE;

    CreateFile("d:\\1.txt", GENERIC_WRITE,
                            FILE_SHARE_READ,
                            &sa,
		                    OPEN_ALWAYS,
                            FILE_ATTRIBUTE_NORMAL,
                            NULL);
    FreeSid(pEveryoneSID);
    LocalFree(pACL);
    LocalFree(pSD);
    std::cin.get();
    return 0;
}
Заранее благодарен.
Я не волшебник.. я только учусь

Последний раз редактировалось romec1; 08.01.2011 в 20:36.
romec1 вне форума Ответить с цитированием
Старый 09.01.2011, 03:36   #2
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

SetFileSecurity?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 09.01.2011, 16:53   #3
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

получаешь хендл файла, формируешь DACL c нужными правами для некоторого пользовтеля и устанавливаешь их через SetSecurityInfo. смотри не напартачь с правами, а то файл можно будет удалить или открыть только в безопасном режиме
rpy3uH вне форума Ответить с цитированием
Старый 09.01.2011, 18:53   #4
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
смотри не напартачь с правами, а то файл можно будет удалить или открыть только в безопасном режиме
Администратор всегда может сделать себя владельцем любого файла, даже если на это нет прав (потому что у него есть специальная привилегия на обход проверки). А когда он станет владельцем, он может поменять права обратно.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 09.01.2011, 19:24   #5
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Администратор всегда может сделать себя владельцем любого файла, даже если на это нет прав (потому что у него есть специальная привилегия на обход проверки)
да, да. что-то я тупанул...
rpy3uH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про линейные списки Girumm Общие вопросы C/C++ 3 07.07.2010 00:21
Описание Маски доступа списка ACL Stilet Общие вопросы по программированию, компьютерный форум 0 20.07.2009 12:13
ACL (API Controls Library) kiloz Win Api 4 25.06.2009 19:56
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10