powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Permissions
5 сообщений из 5, страница 1 из 1
Permissions
    #32247582
bjohny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите как проставить permissions на файл или директорию.
Security_Attributes(разобраться чавотне могу)
...
Рейтинг: 0 / 0
Permissions
    #32247657
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а файловая система у тя какая ???
...
Рейтинг: 0 / 0
Permissions
    #32247659
bjohny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, NTFS, Win2k
...
Рейтинг: 0 / 0
Permissions
    #32248027
Speaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то меня сегодня зацепило...:) Ты не 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
Permissions
    #32248045
bjohny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Завтра посмотрю...
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Permissions
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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