Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   политики безопасности в WinAPI (https://forum.antichat.xyz/showthread.php?t=28634)

grinay 07.12.2006 05:12

политики безопасности в WinAPI
 
вопрос. С помощью какой функции WinAPI можно выставить политики безопасности к какталогу тоесть пользоватей группы и их права??

Deem3n® 07.12.2006 10:41

SetFileSecurity/SetNamedSecurityInfo
ссылка по теме

TaNkist 07.12.2006 13:20

Вот пример, разрешяющий всем читать, запись, выполнять файл:
Код:


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


Brun 07.12.2006 14:48

Это не подойдёт? http://www.vclcomponents.com/Delphi/Components_Collection/NTSet-info.html

grinay 11.12.2006 15:33

Всем пасиб но эт не много не то уже сам разобрался.


Время: 15:48