![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SetFileSecurity [D7, WinXP]
Сергей Макс. © (2007-06-26 02:59:00)Как пользоваться этой функцией?
Подскажите.
Зарание признателен за ответ.
Инс (2007-07-26 09:28:00) [1]
> Сергей Макс. © (26.06.07 02:59)
> Как пользоваться этой функцией?
Достаточно просто:
1. Создаете дескриптор безопасности (SD)
2. Создаете список контроля доступа (ACL)
3. Заносите в этот список элементы (ACE), управляющие доступом к файлу
4. Назначаете полученный список дескриптору дезопасности в качестве DACL
5. Передаете ссылку на дескриптор в SetFileSecurity
Осталось только прогуляться по гуглу, чтобы найти смысл всех сказанный в данном посте незнакомых словей. Успехов!
Lacmus (2007-07-25 16:52:00) [2]Пример использования
uses
AccCtrl, AclApi;
function FileSetAccess(const FileName, UserName: string; dwAccess : DWord) : Boolean;
var
dwSize, dwError : DWord;
bDaclPresent : Bool;
bDaclDefaulted : Bool;
ea : EXPLICIT_ACCESS;
OldAcl : PACL;
NewAcl : PACL;
psd : PSECURITY_DESCRIPTOR;
sd : SECURITY_DESCRIPTOR;
begin
Result := False; psd := nil; NewAcl := nil;
if not GetFileSecurity(PChar(FileName), 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(UserName), dwAccess,
SET_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT{NO_INHERITANCE});
Result := GetFileSecurity(PChar(FileName), 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(FileName), DACL_SECURITY_INFORMATION, @sd);
end
finally
dwError := GetLastError;
if NewAcl <> nil then
LocalFree(HLocal(NewAcl));
if psd <> nil then
HeapFree(GetProcessHeap, 0, psd);
SetLastError(dwError)
end
end;
Cj (2007-06-26 09:56:00) [3]
> Как пользоватьсяэтой функцией?
> Отвечаю: пользоваться традиционно.
всмысле в 24-ой?
Джо (2007-06-26 04:49:00) [4]Не ответил на вопрос «Как пользоваться?». Извините. Отвечаю: пользоваться традиционно.
Джо (2007-06-26 04:48:00) [5]> [0] Сергей Макс. © (26.06.07 02:59)
> Как пользоваться этой функцией?
> Подскажите.
> Зарание признателен за ответ.
Я пользовался.
Что подсказать?
Пожалуйста.