Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сформировать списки ACL, помогите сделать... 
V
    Опции темы
iPlay
Дата 20.11.2007, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Вообщем есть такое вот задание:
Написать программу, которая для выбранного файла задает права доступа(Группа владельца - Выполнение файлов, Смена владельца ).

Подскажите пожалуйста где можно почитать примеры написание программ такого типа. Или кто нить выложете на подобие программу я разбиратся буду... plz


Это сообщение отредактировал(а) iPlay - 20.11.2007, 18:55
PM MAIL   Вверх
NiJazz
Дата 21.11.2007, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Цитата
Подскажите пожалуйста где можно почитать примеры написание программ такого типа.

В MSDN, конечно.
Смотри функции SetFileSecurity, SetSecurityDescriptorDacl, InitializeAcl, AddAccessAllowedAce, AddAccessDeniedAce.
Буду вопросы - задавай.
PM MAIL   Вверх
NiJazz
Дата 21.11.2007, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



А вот ипример.
PM MAIL   Вверх
iPlay
Дата 27.11.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Да есть один вопросик небольшой не могу понять зачем нужны SIDы и что это такое smile 
Там надо мне будет использовать функцию AllocateAndInitializeSid(.....) - не очень могу разобратся что она делает и какие параметры ей передавать.

PM MAIL   Вверх
NiJazz
Дата 27.11.2007, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



iPlay, SID (Security ID) используется в ОС для идентификации пользователей и групп при ограничении доступа.

Добавлено через 2 минуты и 14 секунд
Описание читай в MSDN, можешь посмотреть тут.
Если нужно получить SID из имени, то используй LookupAccountName.
PM MAIL   Вверх
iPlay
Дата 27.11.2007, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Почитал я статьи и МСДН собрался с мыслями и начал писать. Вот что написал   
Код

int main(){
    PSID pSid;
    DWORD dwDacl_Length;
    PACL pDacl;
    PSECURITY_DESCRIPTOR pSd;                    
             
    /*pSid = (PSID)LocalAlloc(LPTR,4096);
    SID_IDENTIFIER_AUTHORITY sIa = SECURITY_WORLD_SID_AUTHORITY;                                                    
    
    AllocateAndInitializeSid(&sIa,1,SECURITY_WORLD_RID,0,0,0,0,0,0,0,&pSid);

    dwDacl_Length = sizeof(ACL) + sizeof(ACCESS_ALLOWED_ACE) - sizeof(DWORD) + GetLengthSid(pSid);
    pDacl = (PACL)LocalAlloc(LPTR,dwDacl_Length);

    InitializeAcl(pDacl,dwDacl_Length,ACL_REVISION);
    AddAccessAllowedAce(pDacl,ACL_REVISION,WRITE_OWNER|GENERIC_EXECUTE,pSid);
    pSd = (PSECURITY_DESCRIPTOR)LocalAlloc(LPTR,SECURITY_DESCRIPTOR_MIN_LENGTH);
    try{
        InitializeSecurityDescriptor(pSd,SECURITY_DESCRIPTOR_REVISION);
    }
    catch(...){
    cout << "*Erorr* - invalid security descriptor";
    }*/

    SetSecurityDescriptorDacl(pSd,TRUE,pDacl,FALSE);
    SetSecurityDescriptorOwner(pSd,pSid,FALSE);
    SetSecurityDescriptorGroup(pSd,pSid,FALSE);
    
    cout << "This program sets the specified access rights for the file\n";
    cout << "Enter file name: ";
    
    char ObjName[100];
    cin.getline(ObjName,sizeof(ObjName));
    try{
    SetFileSecurity(__TEXT(ObjName),OWNER_SECURITY_INFORMATION,pSd); 
    }
    catch(...){
    cout << "Attributes cannot be setted";    
    }
    FreeSid(pSid);
    Sleep(4000);
return 0;
}


Нужно получить SID чето не шарю как? smile 

Это сообщение отредактировал(а) iPlay - 28.11.2007, 19:21
PM MAIL   Вверх
iPlay
Дата 28.11.2007, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Сегодня разобрался в универе почему не получалось я SID создавал новый надо было извлечь для группы   smile .

А можно получить SID с помощью ф-ций GetSid() чтобы потом поюзать?

Это сообщение отредактировал(а) iPlay - 28.11.2007, 19:13
PM MAIL   Вверх
iPlay
Дата 28.11.2007, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Ниче не получается вроде все изучил но не могу всё до кучи сложить. Помогите плиз..

Это сообщение отредактировал(а) iPlay - 28.11.2007, 20:11
PM MAIL   Вверх
iPlay
Дата 28.11.2007, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Зашел в тупик своих мыслей  smile 
PM MAIL   Вверх
NiJazz
Дата 29.11.2007, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Пример того, как получить SID группы пользователей:
Код

SID_IDENTIFIER_AUTHORITY auth = SECURITY_NT_AUTHORITY;

PSID sid = 0;

if ( !!::AllocateAndInitializeSid( &auth, 1, DOMAIN_GROUP_RID_USERS, 0, 0, 0, 0, 0, 0, 0, &sid ) )
{
   // Do smth with the SID
   ::FreeSid( sid );
}


Подробнее смотри Well-known SIDs
PM MAIL   Вверх
iPlay
Дата 29.11.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



В принципе вот что у меня получается 
Код

int main(){
    PSID pSid;
    DWORD dwDacl_Length;
    PACL pDacl;
    PSECURITY_DESCRIPTOR pSd;                    

    pSid = (PSID)LocalAlloc(LPTR,4096);
    
    SID_IDENTIFIER_AUTHORITY auth = SECURITY_NT_AUTHORITY;

    if ( !AllocateAndInitializeSid( &auth, 1, DOMAIN_GROUP_RID_USERS, 0, 0, 0, 0, 0, 0, 0, &pSid ) ){
        FreeSid( pSid );
    }

    dwDacl_Length = sizeof(ACL) + sizeof(ACCESS_ALLOWED_ACE) - sizeof(DWORD) + GetLengthSid(pSid);
    pDacl = (PACL)LocalAlloc(LPTR,dwDacl_Length);

    InitializeAcl(pDacl,dwDacl_Length,ACL_REVISION);
    AddAccessAllowedAce(pDacl,ACL_REVISION,WRITE_OWNER|GENERIC_EXECUTE,pSid);
    pSd = (PSECURITY_DESCRIPTOR)LocalAlloc(LPTR,SECURITY_DESCRIPTOR_MIN_LENGTH);
    try{
        InitializeSecurityDescriptor(pSd,SECURITY_DESCRIPTOR_REVISION);
    }
    catch(...){
    cout << "*Erorr* - invalid security descriptor";
    }
    SetSecurityDescriptorDacl(pSd,TRUE,pDacl,FALSE);
    SetSecurityDescriptorOwner(pSd,pSid,FALSE);
    SetSecurityDescriptorGroup(pSd,pSid,FALSE);
    
    cout << "This program sets the specified access rights for the file\n";
    cout << "Enter file name: ";
    
    char ObjName[100];
    cin.getline(ObjName,sizeof(ObjName));
    try{
    SetFileSecurity(__TEXT(ObjName),OWNER_SECURITY_INFORMATION,pSd); 
    }
    catch(...){
    cout << "Attributes cannot be setted";    
    }
    FreeSid(pSid);
    Sleep(4000);
return 0;
}


Но суть в том что SID почемуто ноль (в дебагере смотрю) странно ЧТО Я НЕ ТАК ДЕЛАЮ???
В чем ошибка?



Это сообщение отредактировал(а) iPlay - 29.11.2007, 21:06
PM MAIL   Вверх
NiJazz
Дата 30.11.2007, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Код

pSid = (PSID)LocalAlloc(LPTR,4096);

Это лишнее.
Цитата
Но суть в том что SID почемуто ноль (в дебагере смотрю) странно ЧТО Я НЕ ТАК ДЕЛАЮ???

Ноль после вызова AllocateAndInitializeSid?
PM MAIL   Вверх
iPlay
Дата 30.11.2007, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Да ноль  после вызова AllocateAndInitializeSid даже когда убрал лишнюю строчку.
PM MAIL   Вверх
NiJazz
Дата 30.11.2007, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Что возвращает GetLastError?
PM MAIL   Вверх
iPlay
Дата 30.11.2007, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Сейчас опять посидел в дебаггере и вот что увидел:
AllocateAndInitializeSid() - выполнился нормально но после него pSID стал равен ноль хотя до этого было что-то.
Сбой идет в SetFileSecurity(ObjName,OWNER_SECURITY_INFORMATION,pSd)) - GetLast Error вернул что путь к файлу не найден  smile  странно както я уже вручную в программе прописал.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.3147 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.