Вниз
Скачать: CL | DM;

Как из D7 изменить права доступа к файлу/каталогу в Vista/XP?   Найти похожие ветки 

 
Непонятливый   (2007-03-05 04:20) [0]

Приветствую. У Vista интересная особенность: пользователь группы Users и с правами Админа (а это default после установки) все равно не имеет полного доступа к файлам, пока явно не изменить права на Full Control.

Вопрос: как изменить права доступа к каталогу/файлам из Дельфей? Хотя бы в XP, дальше сам накопаю.

Спасибо.


 
Rouse_ ©   (2007-03-05 11:15) [1]

uses ..., Aclapi, AccCtrl;

function SetFileAccessRights(AFile, AUser: String; AMask: DWORD): Boolean;
var
 psd             : PSECURITY_DESCRIPTOR;
 dwSize, dwError : DWord;
 bDaclPresent    : Bool;
 bDaclDefaulted  : Bool;
 OldAcl          : PACL;
 NewAcl          : PACL;
 sd              : SECURITY_DESCRIPTOR;
 ea              : EXPLICIT_ACCESS;
begin
 Result := False;
 if WIN32Platform <> VER_PLATFORM_WIN32_NT then Exit;
 psd := nil;
 NewAcl := nil;
 bDaclDefaulted := True;
 if not GetFileSecurity(PChar(AFile), DACL_SECURITY_INFORMATION, Pointer(1),
          0, dwSize) and (GetLastError = ERROR_INSUFFICIENT_BUFFER)
 then
 try
   psd := HeapAlloc(GetProcessHeap, 8, dwSize);
   if psd <> nil then
   begin
     BuildExplicitAccessWithName(@ea, PChar(AUser), AMask,
       SET_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT{NO_INHERITANCE});
     Result := GetFileSecurity(PChar(AFile), DACL_SECURITY_INFORMATION, psd, dwSize, dwSize) and
       GetSecurityDescriptorDacl(psd, bDaclPresent, OldAcl, bDaclDefaulted) and
       (SetEntriesInAcl(1, @ea, OldAcl, NewAcl) = ERROR_SUCCESS) and
       InitializeSecurityDescriptor(@sd, SECURITY_DESCRIPTOR_REVISION) and
       SetSecurityDescriptorDacl(@sd, True, NewAcl, False) and
       SetFileSecurity(PChar(AFile), DACL_SECURITY_INFORMATION, @sd);
   end;
 finally  
   if NewAcl <> nil then LocalFree(HLocal(NewAcl));
   if psd <> nil then HeapFree(GetProcessHeap, 0, psd);    
 end;
end;


Параметры: путь к объекту, имя пользователя, маска доступа, ее расчитываешь вот так: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/access_mask.asp


 
BiN ©   (2007-03-05 13:15) [2]

Также могу предложить пример редактирования ACL защищаемого объекта.

http://binary.front.ru/downloads/pma/pma.zip (35527 байт)


 
Eraser ©   (2007-03-05 19:37) [3]

> [0] Непонятливый   (05.03.07 04:20)

необходимо запускать программу с elevated правами, для этого можно поправить манифест, чтобы при запуске система сама запрашивала у юзера эти права, ну а далее см. [1], [2]. Хотя не понятно, какие файлы нужно изменять. Для изменения файлов в некоторых каталогах не нужно никаких дополнительных прав.



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.021 c
5-1160386111
Prohor
2006-10-09 13:28
2007.08.26
Где взять нормальный DbGridEh


15-1185523979
Reindeer Moss Eater
2007-07-27 12:12
2007.08.26
Синоним к "Decisions", начинающийся на "D"


8-1163431376
maker
2006-11-13 18:22
2007.08.26
WMA Тэги


15-1185414465
Зет
2007-07-26 05:47
2007.08.26
Как узнать какой пункт из case в record выбран?


2-1186151958
vegarulez
2007-08-03 18:39
2007.08.26
Вопрос про thread.




   Наверх