Вниз
Скачать: 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.02 c
4-1173057637
Непонятливый
2007-03-05 04:20
2007.08.26
Как из D7 изменить права доступа к файлу/каталогу в Vista/XP?


2-1185830237
_Anton
2007-07-31 01:17
2007.08.26
Узнать полезное пространство


15-1185958814
Vlad Oshin
2007-08-01 13:00
2007.08.26
работа, программист


15-1185044562
palva
2007-07-21 23:02
2007.08.26
Эммиграция из России в Украину?


2-1186262373
Antonito
2007-08-05 01:19
2007.08.26
Преобразовать текст в Unucode




   Наверх