Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Форум .::NoWa.cc::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Программирование > Delphi

Уважаемые пользователи nowa.cc. Мы работаем для вас более 20 лет и сейчас вынуждены просить о финансовой помощи по оплате за сервер.
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: 826074280762 Webmoney WME: 804621616710
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!
Ответ
 
Опции темы Опции просмотра Language
Старый 29.03.2008, 20:32   #1
Неактивный пользователь
 
Пол:Мужской
Регистрация: 01.01.2007
Сообщений: 64
Репутация: 18
По умолчанию GetNamedSecurityInfo

Помогите разобраться с просмотром прав доступа к папке.
Проблема в том, что для разрешений "Чтение выполнение" и "Список содержимого папки" получаю одну и туже маску доступа. Для других разрешений маски разные.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, AclApi, AccCtrl;

type
  TForm1 = class(TForm)
  Button1: TButton;
  Edit1: TEdit;
  Memo1: TMemo;
  procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
type
    ACL_SIZE_INFORMATION = record
    AceCount :DWORD;
    AclBytesInUse :DWORD;
    AclBytesFree : DWORD;
  end;
  _ACE_HEADER = record
    AceType : BYTE;
    AceFlags : BYTE;
    AceSize : WORD;
  end;
  ACCESS_ACE = record
    Header : _ACE_HEADER;
    Mask : ACCESS_MASK;
    SidStart : DWORD;
  end;
var
  pSD: PSECURITY_DESCRIPTOR;
  pDACL: PACL;
  aclInfo: ACL_SIZE_INFORMATION;
  i:integer;
  ace: ^ACCESS_ACE;
  sid: PSID;
  len:dword;
  user, domain : array [0..200] of char;
  sid_nu:SID_NAME_USE;
  actions:string;
const
  ACCESS_ALLOWED_ACE_TYPE = $00;
  ACCESS_DENIED_ACE_TYPE = $01;

begin
  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;
  for i:=0 to aclInfo.AceCount-1 do begin
    if not (GetAce(pDACL^, i, Pointer(ace))) then continue;
    sid := PSID(@((ace)^.SidStart));
    len := 200;
    if (LookupAccountSid(nil,
                         sid,
                         user,
                         len,
                         domain,
                         len,
                         sid_nu)) then begin
      memo1.Lines.Add(StrPas(domain)+'\'+StrPas(user));
    end else begin
      memo1.Lines.Add('Лажа');
    end;
    case (ace^.Header.AceType) of
      ACCESS_ALLOWED_ACE_TYPE: memo1.Lines.Add('Разрешено');
      ACCESS_DENIED_ACE_TYPE: memo1.Lines.Add('Запрещено');
      else memo1.Lines.Add('Другое');
    end;
    actions:='';
    if (ace^.Header.AceType=ACCESS_ALLOWED_ACE_TYPE)
    or (ace^.Header.AceType=ACCESS_DENIED_ACE_TYPE) then begin
      memo1.Lines.Add(actions+'    '+inttostr(ace^.Mask));
    end;
  end;
end;

end.
Tyrrhene вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама: умывальник для дачи уличныйИнтегрируй приложения вместе с Альбато: связать Pinterest - синхронизация за 5 минут!ал сапиенцадиван еврокнижка фотокатышев сергей


Старый 31.03.2008, 10:15   #2
Vasuha
Постоялец
 
Пол:Мужской
Регистрация: 13.03.2008
Адрес: Минск
Сообщений: 257
Репутация: 231
По умолчанию Ответ: GetNamedSecurityInfo

Одно из предположений..
Получая список прав доступа, для файла и папки мы будем иметь одну и ту же структуру. Если это папка то применима маска: "Список содержимого папки", иначе :"Чтение выполнение".
Vasuha вне форума
 
Ответить с цитированием Вверх
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 19:13. Часовой пояс GMT +3.


Copyright ©2004 - 2025 NoWa.cc

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.11817 секунды с 10 запросами