Форум: "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 := "Íå óäàëîñü óñòàíîâèòü äàííûå î êàòàëîãå.";
goto FreeAndExit;
end;
if not InitializeSecurityDescriptor(@sd, SECURITY_DESCRIPTOR_REVISION) then
begin
LastError := "Íå óäàëîñü óñòàíîâèòü äàííûå î êàòàëîãå.";
goto FreeAndExit;
end;
if not SetSecurityDescriptorDacl(@sd, TRUE, NewAcl, FALSE) then
begin
LastError := "Íå óäàëîñü óñòàíîâèòü äàííûå î êàòàëîãå.";
goto FreeAndExit;
end;
if not SetFileSecurity(lpFileName, DACL_SECURITY_INFORMATION, @sd) then
begin
LastError := "Íå óäàëîñü óñòàíîâèòü äàííûå î êàòàëîãå.";
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