вопрос. С помощью какой функции WinAPI можно выставить политики безопасности к какталогу тоесть пользоватей группы и их права??
Вот пример, разрешяющий всем читать, запись, выполнять файл: Code: 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