Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2009.05.10;
Скачать: [xml.tar.bz2];

Вниз

Как дать доступ на папку определённой группе пользователей   Найти похожие ветки 

 
Int23   (2008-04-24 11:33) [0]

Есть группа MyDomain\TestGroup и нужно это группе предоставить доступ "Чтение и выполнение" на папку C:\MyF\ локального компьютера. Как это сделать программно?


 
Дмитрий С   (2008-04-24 12:38) [1]

Разбирайся=)
function AddFilePerm(FileName, UserName: string; AccessPermissions: DWORD; AccessMode: ACCESS_MODE;
         Ineritance: DWORD): boolean;
var
 lpFileName: PChar;
 lpUserName: PChar;
 psd: PSECURITY_DESCRIPTOR;
 sd: SECURITY_DESCRIPTOR;
 ea: EXPLICIT_ACCESS;
 OldAcl, NewAcl: PACL;
 bDaclPresent, bDaclDefaulted: BOOL;
 dwSize: DWORD;

Label
 FreeAndExit;
begin
 Result := false;
 dwSize := 0;
 lpFileName := PChar(FileName);//"c:\test";
 lpUserName := PChar(UserName);//"Dima2";

 GetFileSecurity(lpFileName, DACL_SECURITY_INFORMATION, 0, 0, dwSize);

 psd := HeapAlloc(GetProcessHeap(), 8, dwSize);

 if psd = nil then
 begin
   LastError := "Íå óäàëîñü âûäåëèòü ïàìÿòü.";
   Exit;
 end;

 BuildExplicitAccessWithName(@ea, lpUserName, AccessPermissions,
     AccessMode, Ineritance);

 if not GetFileSecurity(lpFileName, DACL_SECURITY_INFORMATION, psd, dwSize, dwSize) then
 begin
   LastError := "Íå óäàëîñü ïîëó÷èòü äàííûå î êàòàëîãå.";
   goto FreeAndExit;
 end;

 if not GetSecurityDescriptorDacl(psd, bDaclPresent, OldAcl, bDaclDefaulted) then
 begin
   LastError := "Íå óäàëîñü ïîëó÷èòü äàííûå î êàòàëîãå.";
   goto FreeAndExit;
 end;

 //OldAcl := nil;

 if SetEntriesInAcl(1, @ea, OldAcl, NewAcl) <> ERROR_SUCCESS then
 begin
   LastError := "&#205;&#229; &#243;&#228;&#224;&#235;&#238;&#241;&#252; &#243;&#241;&#242;&#224;&#237;&#238;&#226;&#232;&#242;&#252; &#228;&#224;&#237;&#237;&#251;&#229; &#238; &#234;&#224;&#242;&#224;&#235;&#238;&#227;&#229;.";
   goto FreeAndExit;
 end;

 if not InitializeSecurityDescriptor(@sd, SECURITY_DESCRIPTOR_REVISION) then
 begin
   LastError := "&#205;&#229; &#243;&#228;&#224;&#235;&#238;&#241;&#252; &#243;&#241;&#242;&#224;&#237;&#238;&#226;&#232;&#242;&#252; &#228;&#224;&#237;&#237;&#251;&#229; &#238; &#234;&#224;&#242;&#224;&#235;&#238;&#227;&#229;.";
   goto FreeAndExit;
 end;

 if not SetSecurityDescriptorDacl(@sd, TRUE, NewAcl, FALSE) then
 begin
   LastError := "&#205;&#229; &#243;&#228;&#224;&#235;&#238;&#241;&#252; &#243;&#241;&#242;&#224;&#237;&#238;&#226;&#232;&#242;&#252; &#228;&#224;&#237;&#237;&#251;&#229; &#238; &#234;&#224;&#242;&#224;&#235;&#238;&#227;&#229;.";
   goto FreeAndExit;
 end;

 if not SetFileSecurity(lpFileName, DACL_SECURITY_INFORMATION, @sd) then
 begin
   LastError := "&#205;&#229; &#243;&#228;&#224;&#235;&#238;&#241;&#252; &#243;&#241;&#242;&#224;&#237;&#238;&#226;&#232;&#242;&#252; &#228;&#224;&#237;&#237;&#251;&#229; &#238; &#234;&#224;&#242;&#224;&#235;&#238;&#227;&#229;.";
   goto FreeAndExit;
 end;
 Result := true;

 FreeAndExit:
     HeapFree(GetProcessHeap(), 0, psd);
end;


 
Int23   (2008-04-24 14:53) [2]

Спасибо за функцию. У меня вопрос по параметра AccessPermissions, AccessMode, Ineritance. Мне нужно разрешить чтение и запуск, что я должен передать в те переметры?


 
han_malign ©   (2008-04-24 15:35) [3]


> Мне нужно разрешить чтение и запуск, что я должен передать в те переметры?

- а передать туда надо - битовые маски описанные в хелпе, и - в конкретных примерах - тоннами валяющиеся в Google на запрос BuildExplicitAccessWithName...
(RTFM)


 
Дмитрий С   (2008-04-24 16:00) [4]

Кстати у меня самого вопрос.

const
 {
   $00000001 - содержание папки, чтение данных
   $00000002 - создание файлов, запись данных
   $00000004 - создание папок, дозапись данных
   $00000008 - чтение дополнительных аттрибутов
   $00000010 - запись дополнительных аттрибутов
   $00000020 - обзор папок, выполнение файлов
   $00000040 - удаление подпапок и файлов
   $00000080 - чтение аттрибутов
   $00000100 - запись аттрибутов

   $00010000 - удаление
   $00020000 - чтение разрешений
   $00040000 - смена разрешений
   $00080000 - смена владельца
 }
 apReadOnly = $00000001 or $00000008 or $00000020 or $00000080 or $00020000;
 apWrite = apReadOnly or $00000002 or $00000004 or $00000010 or $00000040 or $00000100;

Я это подобрал методом подбора. Непомню почему пришлось подбирать.
Так вот проблема такая. Есть папка. С помощью функции задаю права apWrite  .
Получается так. Пользователи, которые получают права по этому правилу могут создавать объекты, а переименовывать не могут.
Открываю свойства папки, безопастность, снимаю какую нить галку, затем ставлю - и... у пользователя нормальные права к папке.
В чем может быть проблема?


 
han_malign ©   (2008-04-24 16:49) [5]


> В чем может быть проблема?

в SDK везде еще SYNCHRONIZE присутствует ($00100000), может из-за этого...
JwaWinNT.pas:
//
// Define access rights to files and directories
//

//
// The FILE_READ_DATA and FILE_WRITE_DATA constants are also defined in
// devioctl.h as FILE_READ_ACCESS and FILE_WRITE_ACCESS. The values for these
// constants *MUST* always be in sync.
// The values are redefined in devioctl.h because they must be available to
// both DOS and NT.
//

 FILE_READ_DATA            = ($0001); // file & pipe
 {$EXTERNALSYM FILE_READ_DATA}
 FILE_LIST_DIRECTORY       = ($0001); // directory
 {$EXTERNALSYM FILE_LIST_DIRECTORY}

 FILE_WRITE_DATA           = ($0002); // file & pipe
 {$EXTERNALSYM FILE_WRITE_DATA}
 FILE_ADD_FILE             = ($0002); // directory
 {$EXTERNALSYM FILE_ADD_FILE}

 FILE_APPEND_DATA          = ($0004); // file
 {$EXTERNALSYM FILE_APPEND_DATA}
 FILE_ADD_SUBDIRECTORY     = ($0004); // directory
 {$EXTERNALSYM FILE_ADD_SUBDIRECTORY}
 FILE_CREATE_PIPE_INSTANCE = ($0004); // named pipe
 {$EXTERNALSYM FILE_CREATE_PIPE_INSTANCE}

 FILE_READ_EA = ($0008); // file & directory
 {$EXTERNALSYM FILE_READ_EA}

 FILE_WRITE_EA = ($0010); // file & directory
 {$EXTERNALSYM FILE_WRITE_EA}

 FILE_EXECUTE = ($0020); // file
 {$EXTERNALSYM FILE_EXECUTE}
 FILE_TRAVERSE = ($0020); // directory
 {$EXTERNALSYM FILE_TRAVERSE}

 FILE_DELETE_CHILD = ($0040); // directory
 {$EXTERNALSYM FILE_DELETE_CHILD}

 FILE_READ_ATTRIBUTES = ($0080); // all
 {$EXTERNALSYM FILE_READ_ATTRIBUTES}

 FILE_WRITE_ATTRIBUTES = ($0100); // all
 {$EXTERNALSYM FILE_WRITE_ATTRIBUTES}

 FILE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $1FF);
 {$EXTERNALSYM FILE_ALL_ACCESS}

 FILE_GENERIC_READ = (STANDARD_RIGHTS_READ or FILE_READ_DATA or
   FILE_READ_ATTRIBUTES or FILE_READ_EA or SYNCHRONIZE);
 {$EXTERNALSYM FILE_GENERIC_READ}

 FILE_GENERIC_WRITE = (STANDARD_RIGHTS_WRITE or FILE_WRITE_DATA or
   FILE_WRITE_ATTRIBUTES or FILE_WRITE_EA or FILE_APPEND_DATA or SYNCHRONIZE);
 {$EXTERNALSYM FILE_GENERIC_WRITE}

 FILE_GENERIC_EXECUTE = (STANDARD_RIGHTS_EXECUTE or FILE_READ_ATTRIBUTES or
   FILE_EXECUTE or SYNCHRONIZE);
 {$EXTERNALSYM FILE_GENERIC_EXECUTE}


 
ага   (2008-04-25 05:20) [6]

2 Дмитрий С

Код из [1] на помойку. Читать в MSDN про  canonical order. А заодно и про Generic rights


 
ага   (2008-04-25 10:21) [7]

2 Int23
http://delphikingdom.com/asp/answer.asp?IDAnswer=60081


 
Дмитрий С   (2008-04-25 14:45) [8]


> ага   (25.04.08 05:20) [6]

Ага... уже мусоровоз вызвал ;)



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2009.05.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
2-1238069200
dis12345
2009-03-26 15:06
2009.05.10
редактировать stringgrid


15-1236616818
Кое кто
2009-03-09 19:40
2009.05.10
Futronic - Finger Print Scanner


15-1236182668
Denis__
2009-03-04 19:04
2009.05.10
Бэкапы?


2-1238484507
deras
2009-03-31 11:28
2009.05.10
Как синхронизировать данные в разных БД?


15-1236203903
Германн
2009-03-05 00:58
2009.05.10
Welcom Page





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский