Форум: "WinAPI";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];
ВнизКак из 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.041 c