Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Программная инженерия > Безопасность, Шифрование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2008, 08:46   #1
AstraBon
Новичок
Джуниор
 
Регистрация: 03.06.2008
Сообщений: 1
По умолчанию Просмотр прав на папку

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

Код:
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.
AstraBon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос авторских прав SG13 Свободное общение 4 18.12.2009 01:14
В чем я не прав?С++ diden Помощь студентам 3 23.05.2008 18:32
Нарушение прав иконок трея joker Win Api 4 24.11.2007 07:33
Назначение прав пользователя Seqular Безопасность, Шифрование 1 04.08.2007 16:48