Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
политики безопасности в WinAPI |

07.12.2006, 05:12
|
|
IQ- 137%
Регистрация: 15.06.2004
Сообщений: 441
Провел на форуме: 1212666
Репутация:
662
|
|
политики безопасности в WinAPI
вопрос. С помощью какой функции WinAPI можно выставить политики безопасности к какталогу тоесть пользоватей группы и их права??
__________________
|
|
|

07.12.2006, 10:41
|
|
Постоянный
Регистрация: 19.09.2005
Сообщений: 408
Провел на форуме: 3730496
Репутация:
519
|
|
|
|
|

07.12.2006, 13:20
|
|
Участник форума
Регистрация: 06.04.2006
Сообщений: 257
Провел на форуме: 367179
Репутация:
76
|
|
Вот пример, разрешяющий всем читать, запись, выполнять файл:
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
pSD : PSECURITY_DESCRIPTOR;
pDACL : PACL;
aclInfo : ACL_SIZE_INFORMATION;
ace : ^ACCESS_ACE;
sid : PSID;
i : Integer;
user, domain : array [0..200] of char;
len: DWORD;
sid_nu : SID_NAME_USE;
newAcl : TListItem;
actions:String;
sidLength, sidLengthDomain: Cardinal;
sidType: SID_NAME_USE;
sidValue: PSID;
domain1:PChar;
pNewDACL : PACL;
pNewSD : PSECURITY_DESCRIPTOR;
newSize:Integer;
begin
aclListView.Items.Clear;
if (GetNamedSecurityInfo(PChar(Edit1.Text), SE_FILE_OBJECT,
DACL_SECURITY_INFORMATION, nil, nil, PACL(@pDACL), nil,
pSD)<>ERROR_SUCCESS) then
begin
ShowMessage('Ошибка');
exit;
end;
if (pDACL=nil) then
begin
ShowMessage('Список доступа пуст');
exit;
end;
if (not GetAclInformation(pDACL^, @aclInfo, sizeOf(aclInfo),
AclSizeInformation)) then
begin
ShowMessage('Не получилось определить информацию об ACL');
exit;
end;
// Опредеяем SID пользователя, которому нужно дать разрешение
sidLength:=0;
sidLengthDomain:=0;
LookupAccountName(nil, 'everyone', nil, sidLength, nil, sidLengthDomain, sidType);
sidValue := AllocMem(sidLength);
domain1 := AllocMem(sidLengthDomain);
if (LookupAccountName(nil, 'everyone', sidValue, sidLength, domain1, sidLengthDomain, sidType)=false) then
exit;
// Выделяем память под новую таблицу
newSize:=AclInfo.AclBytesInUse + sizeof(ACCESS_ACE) + GetLengthSid(sidValue);
pNewDACL:=PACL(LocalAlloc(LPTR, newSize));
if not InitializeAcl(pNewDACL^, newSize, 2) then
exit;
for i:=0 to aclInfo.AceCount-1 do
begin
if not (GetAce(pDACL^, i, Pointer(ace))) then
continue;
newAcl:=aclListView.Items.Add;
sid := PSID(@((ace)^.SidStart));
len := 200;
if (LookupAccountSid(nil, sid, user, len,
domain, len, sid_nu)) then
begin
newAcl.Caption:=user;
newAcl.SubItems.Add(domain)
end
else
begin
newAcl.Caption:='Лажа';
newAcl.SubItems.Add('Лажа')
end;
case (ace^.Header.AceType) of
ACCESS_ALLOWED_ACE_TYPE: newAcl.SubItems.Add('Разрешено');
ACCESS_DENIED_ACE_TYPE: newAcl.SubItems.Add('Запрещено');
else newAcl.SubItems.Add('Другое');
end;
actions:='';
if (ace^.Header.AceType=ACCESS_ALLOWED_ACE_TYPE) or
(ace^.Header.AceType=ACCESS_DENIED_ACE_TYPE) then
begin
if (ace^.Mask and $1)=1 then
actions:=actions+' Чтение';
if (ace^.Mask and $2)=2 then
actions:=actions+' Запись';
if (ace^.Mask and $4)=4 then
actions:=actions+' Выполнение';
end;
newAcl.SubItems.Add(actions);
// Добавляем запись в новый список
if not AddAce(pNewDACL^, 2, MAXWORD, ace, ace.Header.AceSize) then
exit;
end;
// Добавляем ещё одну разрешающую запись
if not AddAccessAllowedAce(pNewDACL^, 2, GENERIC_ALL, sidValue) then
exit;
// Инициализируем новый дескриптор
pNewSD := PSECURITY_DESCRIPTOR(LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH));
if not InitializeSecurityDescriptor(pNewSD, SECURITY_DESCRIPTOR_REVISION) then
exit;
// Устанавливаем дескриптору новый ACL список
if not SetSecurityDescriptorDacl(pNewSD, TRUE, pNewDACL, FALSE) then
exit;
// Устанавливаем дескриптор файлу
if not SetFileSecurity(PChar(Edit1.Text), DACL_SECURITY_INFORMATION, pNewSD) then
exit;
end;
//(c) flenov
|
|
|

07.12.2006, 14:48
|
|
Участник форума
Регистрация: 21.03.2006
Сообщений: 117
Провел на форуме: 629074
Репутация:
137
|
|
Это не подойдёт? http://www.vclcomponents.com/Delphi/Components_Collection/NTSet-info.html
|
|
|

11.12.2006, 15:33
|
|
IQ- 137%
Регистрация: 15.06.2004
Сообщений: 441
Провел на форуме: 1212666
Репутация:
662
|
|
Всем пасиб но эт не много не то уже сам разобрался.
__________________
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|