Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Permissions / 5 сообщений из 5, страница 1 из 1
26.08.2003, 14:12
    #32247582
bjohny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Permissions
Подскажите как проставить permissions на файл или директорию.
Security_Attributes(разобраться чавотне могу)
...
Рейтинг: 0 / 0
26.08.2003, 14:52
    #32247657
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Permissions
а файловая система у тя какая ???
...
Рейтинг: 0 / 0
26.08.2003, 14:53
    #32247659
bjohny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Permissions
Сорри, NTFS, Win2k
...
Рейтинг: 0 / 0
26.08.2003, 17:22
    #32248027
Speaker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Permissions
Что-то меня сегодня зацепило...:) Ты не Windows переписываешь? :)

Путем некоторого копания, получилось следующее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
procedure TfmMain.FormCreate(Sender: TObject);
var SI : SECURITY_INFORMATION;
    SD : PSECURITY_DESCRIPTOR;
    SDsize, nLength : DWORD;
    DaclPresent, DaclDefaulted : LongBool;
    pDacl : PACL;
    pAce  : Pointer;

    Result : String;
    i : Integer;
begin
    SI := DACL_SECURITY_INFORMATION;
    SDsize :=  52 ; 
    // определяется экспериментально, смотрим справку по
    // последнему параметру функции GetFileSecurity

    GetMem( SD, SDsize );
  try
    if  GetFileSecurity( PChar('d:\s.exe'), SI, SD, SDsize, nLength ) then
     begin
       if GetSecurityDescriptorDacl( SD, DaclPresent, pDacl, DaclDefaulted ) then
        begin
          if DaclPresent
            then Result := 'ACL presented'
            else Result := 'ACL not present';
          if DaclDefaulted
            then Result := Result + ', was retrieved by a default mechanism'
            else Result := Result + ', was explicitly specified by a user';
          if DaclPresent then
           begin
             Result := Result + # 13 # 10  + 'AclRevision='+IntToStr(pDacl.AclRevision)+
                          ', AclSize='+IntToStr(pDacl.AclSize)+', AceCount='+
                          IntToStr(pDacl.AceCount);
             for i:= 0  to pDacl.AceCount- 1  do
              begin
                if GetAce( pDacl^, i, pAce ) then
                 begin
                    // в каждом из pAce должна храниться инфа по поводу права доступа
                    // но так как в Delphi не прописаны детально соответствующие структуры
                    // (смотреть справку по слову ACE_HEADER)
                    // то переводить их самому из MSDN мне стало лень, (а может не нашел...)
                    // в общем смотреть справку по функция AddAce, AddAccessAllowedAce и т.п.
                    // и повторять все в обратном порядке.
                 end
                else raise Exception.Create( 'GetAce failed with index='+IntToStr(i) );
              end;
           end;
        end
       else raise Exception.Create( 'GetSecurityDescriptorDacl failed!' );
       ShowMessage( Result );
     end
    else raise Exception.Create( 'GetFileSecurity failed!' );
  finally
    FreeMem( SD );
  end;  
end;


есть неплохой пример в MSDN July 2002, если поможет,
называется "Example Code for Reading defaultSecurityDescriptor"

Код: plaintext
ms-help://MS.MSDNQTR.2002JUL. 1033 /netdir/ad/example_code_for_reading_defaultsecuritydescriptor.htm

Успехов
...
Рейтинг: 0 / 0
26.08.2003, 17:29
    #32248045
bjohny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Permissions
Завтра посмотрю...
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Permissions / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]