Форум программистов, компьютерный форум, киберфорум
Наши страницы

Списки контроля доступа Access Control List (ACL) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Переменная ссылочного типа в прототипе функции http://www.cyberforum.ru/cpp-beginners/thread956466.html
Только начала изучать C++ и эти прототипы функций нигде не всртечал. Прописываю прототип функции со ссылкой: void dectohex(int&); При компиляции выдает ошибку: error: expected ';', ',' or ')'...
C++ Написать программу считалочка Народ помогите написать программу считалочка, суть самой программы - написать программу в которой водим количество играков, затем водим несколько слов через пробел. Программа и должна эти слова... http://www.cyberforum.ru/cpp-beginners/thread956465.html
C++ Дано целое k от 1 до 180. Определить, какая цифра находится в k-ой позиции последовательности
Товарищи, задача такая: Дано целое k от 1 до 180. Определить, какая цифра находится в k-ой позиции последовательности 10111213....9899 в которой выписаны подряд все двухзначные числа. Помогите...
C++ Перевести с Pascal на C++
Всем привет) есть задачи: 2) Слова, содержащие сочетание ‘кот’, расположить в конце последовательности, сохраняя исходный порядок следования слов. Есть решение этих задач, но нужно мне помочь...
C++ Вычислить значение функции http://www.cyberforum.ru/cpp-beginners/thread956451.html
Вычислить значение функции в зависимости от интервала, в который попадает вводимый с клавиатуры аргумент.
C++ Необходимо найти длины биссектрис Помогите, как дальше продолжить написание программы используя данную формулу lc=sqrt(a*b*(a+b+c)*(a+b-c))/a*b (формула по нахождению длин биссектрис зная длины сторон треугольника. Вот как я начала... подробнее

Показать сообщение отдельно
MrWoolf
3 / 1 / 0
Регистрация: 29.11.2012
Сообщений: 60

Списки контроля доступа Access Control List (ACL) - C++

17.09.2013, 18:43. Просмотров 2787. Ответов 24
Метки (Все метки)

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    PSID pEveryoneSID = NULL, pAdminSID = NULL, pNetworkSID  = NULL;
    PACL pACL = NULL;
    PSECURITY_DESCRIPTOR pSD = NULL;
    SID_IDENTIFIER_AUTHORITY SIDAuthNT = SECURITY_NT_AUTHORITY;           //deny Access
    SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY; //read
    AllocateAndInitializeSid(&SIDAuthNT, 2,SECURITY_BUILTIN_DOMA IN_RID,  
    DOMAIN_ALIAS_RID_ADMI NS,0, 0, 0, 0, 0, 0,&pAdminSID)  //admin
 
    if (ERROR_SUCCESS != SetEntriesInAcl(NUM_ACES,ea,NULL,&pACL))throw GetLastError();
    pSD = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR,SECURITY_DESCRIPTOR_MIN_ LENGTH); 
 
        if (!SetSecurityDescriptorDacl(pSD,TRUE,pACL,FALSE)) 
{
    throw GetLastError();
} 
        else {SECURITY_ATTRIBUTES sa;sa.nLength = sizeof(SECURITY_ATTRIBUTES);
                sa.bInheritHandle = FALSE;sa.lpSecurityDescriptor = pSD;
 
if (!CreateDirectory("C:\\Program Files\\MyStuf f", &sa)) throw GetLastError();
Я знаю что этот пример создает всего лишь 3 SID на файл и не создает каких-то прав доступа.
Как это все дальше развить??

Добавлено через 4 минуты
есть еще такой пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#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 пользователя, группы и прочих пользователей. 
 
   * Другие важные подробности можно найти на Web-сайте. */
 
  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; 
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru