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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Списки контроля доступа Access Control List (ACL), HELP  
:(
    Опции темы
MrWoolf
Дата 20.9.2013, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть код помогите идею развить дальше, никак не получаеться, не могу разобраться. Помогите пожалуйста буду очень благодарен.
 Нужно создать Списки контроля доступа Access Control List (ACL).
 Обьект: мьютекс!
 Запретить доступ: read!

Код

#include "EvryThng.h"
 
#define ACL_SIZE 1024 
 
#define INIT_EXCEPTION 0x3 
 
#define CHANGE_EXCEPTION 0x4 
 
#define SID_SIZE LUSIZE 
 
#define DOM_SIZE LUSIZE
 
LPSECURITY_ATTRIBUTES InitializeUnixSA(DWORD UnixPerms, LPCTSTR UsrNam, LPCTSTR GrpNam, LPDWORD AceMasks, LPHANDLE pHeap) {
 
 HANDLE SAHeap = HeapCreate(HEAP_GENERATE_EXCEPTIONS, 0, 0);
 
 LPSECURITY_ATTRIBUTES pSA = NULL;
 
 PSECURITY_DESCRIPTOR pSD = NULL;
 
 PACL pAcl = NULL;
 
 BOOL Success;
 
 DWORD iBit, iSid, UsrCnt = ACCT_NAME_SIZE;
 
 /* Таблицы имен пользователя (User), группы (Group) и прочих пользователей (Everyone), идентификаторов SID и так далее для LookupAccountName и создания SID. */
 
 LPCTSTR pGrpNms[3] = {EMPTY, EMPTY, _T("Everyone")};
 
 PSID pSidTable[3] = {NULL, NULL, NULL};
 
 SID_NAME_USE sNamUse[3] = {SidTypeUser, SidTypeGroup, SidTypeWellKnownGroup};
 
 TCHAR RefDomain[3][DOM_SIZE];
 
 DWORD RefDomCnt[3] = {DOM_SIZE, DOM_SIZE, DOM_SIZE};
 
 DWORD SidCnt[3] = {SID_SIZE, SID_SIZE, SID_SIZE};
 
 __try { /* Блок try-except для исключений при распределении памяти. */
 
  *рНеар = SAHeap;
 
  pSA = HeapAlloc(SAHeap, 0, sizeof (SECURITY_ATTRIBUTES));
 
  pSA->nLength = sizeof(SECURITY_ATTRIBUTES);
 
  pSA->bInheritHandle = FALSE;
 
  /* можна выполнить эти установки позже. */
 
  pSD = HeapAlloc(SAHeap, 0, sizeof(SECURITY_DESCRIPTOR));
 
  pSA->lpSecurityDescriptor = pSD;
 
  InitializeSecurityDescriptor(pSD, SECURITY DESCRIPTOR REVISION); 
 
  /* Получить SID пользователя, группы и прочих пользователей. */
 
  pGrpNms[0] = UsrNam;
 
  pGrpNms[1] = GrpNam;
 
  for (iSid = 0; iSid < 3; iSid++) {
 
   pSidTable[iSid] = HeapAlloc(SAHeap, 0, SID_SIZE);
 
   LookupAccountName(NULL, pGrpNms[iSid], pSidTable[iSid], &SidCnt[iSid], RefDomain[iSid], &RefDomCnt[iSid], &sNamUse[iSid]);
 
  }
 
  SetSecurityDescriptorOwner(pSD, pSidTable[0], FALSE);
 
  SetSecurityDescriptorGroup(pSD, pSidTable[1], FALSE);
 
  pAcl = HeapAlloc(ProcHeap, HEAP_GENERATE_EXCEPTIONS, ACL_SIZE);
 
  InitializeAcl(pAcl, ACL_SIZE, ACL_REVISION);
 
  /* Добавить все элементы АСЕ, разрешающие и запрещающие доступ. */
 
  for (iBit = 0; iBit < 9; iBit++) {
 
   if ((UnixPerms >> (8 – iBit) & 0x1) != 0 && AceMasks[iBit%3] != 0) AddAccessAllowedAce(pAcl, ACL_REVISION, AceMasks [iBit%3], pSidTable [iBit/3]);
 
   else if (AceMasks[iBit%3] != 0) AddAccessDeniedAce(pAcl, ACL_REVISION, AceMasks [iBit%3], pSidTable [iBit/3]);
 
  }
 
  /* Добавить запрет доступа для всех АСЕ категории "Прочие". */
 
  Success = Success && AddAccessDeniedAce(pAcl, ACL_REVISION, STANDARD_RIGHTS_ALL | SPECIFIC_RIGHTS_ALL, pSidTable[2]);
 
  /* Связать ACL с атрибутом защиты. */
 
  SetSecurityDescriptorDacl(pSD, TRUE, pAcl, FALSE);
 
  return pSA;
 
 } /* Конец блока try-except. */
 
 __except(EXCEPTION_EXECUTE_HANDLER) { /* Освободить все ресурсы. */
 
  if (SAHeap != NULL) HeapDestroy(SAHeap);
 
  pSA = NULL;
 
 }
 
 return pSA; 
 
}

Нужно создать две програмулины.

 1. Создает обьект мьютекс.

 2. Мытаеться открыть мьютекс и получает запрет на чтение.

 Они должны работать вместе, одна создает мьютекс и делает на него запрет а другая пытаеться получить доступ, и получает запрет на него, и выводить собщение об отказе в доступе.
 Помогите плиз очень надо.

Это сообщение отредактировал(а) MrWoolf - 20.9.2013, 17:12
PM MAIL   Вверх
feodorv
Дата 20.9.2013, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 9
Всего: 45



Откуда Вы взяли этот код? Из WINE'а?

Гм, разве Вам плохо здесь ответили?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
MrWoolf
Дата 21.9.2013, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



нет мне не плохо ответили, я спрашиваю на всех форумах чтоб получить макс справку о своей проблеме...
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.0418 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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