Форум: "WinAPI";
Текущий архив: 2010.10.03;
Скачать: [xml.tar.bz2];
ВнизКак программно стать владельцем файла? Найти похожие ветки
← →
Виталий (2009-04-24 16:02) [0]Подскажите пожалуйста как программно стать владельцем файла.
Говорят что нужно использовать SetNamedSecurityInfo, но мне пока не очень понятно как с ней работать, и как правильно передавать и наполнять их.
Если есть другой способ просьба натолкнуть на мысль, литературой или кодом.
Заранее спасибо.
← →
Eraser © (2009-04-24 16:08) [1]> [0] Виталий (24.04.09 16:02)
> Говорят что нужно использовать SetNamedSecurityInfo
правильно говорят.
> но мне пока не очень понятно как с ней работать, и как правильно
> передавать и наполнять их.
гугл не помогает?
← →
Виталий (2009-04-24 17:06) [2]
> гугл не помогает?
неа. пока не очень.
Не пойму как там параметры наполнять. откуда их брать...
← →
Eraser © (2009-04-24 17:38) [3]полно ж примеров
http://www.google.com/search?client=opera&rls=ru&q=delphi+SetNamedSecurityInfo&sourceid=opera&ie=utf-8&oe=utf-8
← →
Виталий (2009-04-27 11:28) [4]Вот сообразил такой пример:
//****************************************************
function SID_GetUserSID;
var
PSID, PRef: Pointer;
SIDSize, RefSize, peUse: Cardinal;
begin
SIDSize:=0;
RefSize:=0;
// Первый вызов функции позволяет получить необходимые размеры буферов
// для SID и имени домена
LookupAccountName(PChar(Machine),PChar(AccountName),nil,SIDSize,nil,
RefSize,peUse);
GetMem(PSID,SIDSize);
GetMem(PRef,RefSize);
try
// Получаем SID учетной записи
if not LookupAccountName(PChar(Machine),PChar(AccountName),PSID,
SIDSize, PRef,RefSize,peUse) then begin
result:=0;
exit;
end else result:=PSID;
finally
FreeMem(PRef);
FreeMem(PSID);
end;
end;
//****************************************************
...
begin
sid:=SID_GetUserSID(Edit1.Text,"");
Memo1.Lines.Text:="Взят SID из "+IntToStr(integer(sid));
if sid<>nil then
Memo1.Lines.Text:=Memo1.Lines.Text+" ["+SID_SidToName(sid)+"]";
SetLastError(0);
IsValidSid(sid);
err:=GetLastError; Memo1.Lines.Add("IsValidSid(sid); - "+SysErrorMessage(err));
SetLastError(0);
InitializeSecurityDescriptor(@sd,SECURITY_DESCRIPTOR_REVISION);
err:=GetLastError; Memo1.Lines.Add("InitializeSecurityDescriptor(@sd,2) - "+SysErrorMessage(err));
{SetLastError(0);
GetSecurityDescriptorOwner(@sd,SID,pbOwnerDefaulted);
err:=GetLastError; Memo1.Lines.Add("GetSecurityDescriptorOwner(@sd,SID,true) - "+SysErrorMessage(err));
Memo1.Lines.Add("SID - "+IntToStr(integer(sid)));
{}
SetLastError(0);
SetSecurityDescriptorOwner(@sd,SID,pbOwnerDefaulted);
err:=GetLastError; Memo1.Lines.Add("SetSecurityDescriptorOwner(@sd,SID,true) - "+SysErrorMessage(err));
SetLastError(0);
SetNamedSecurityInfo(pchar(ShellTreeView1.Path),SE_FILE_OBJECT,OWNER_SECURITY_IN FORMATION,@sid,nil,nil,nil);
err:=GetLastError; Memo1.Lines.Add("SetNamedSecurityInfo - "+SysErrorMessage(err));
end;
Все функции выполняются без ошибок, но владелец не меняется. Что я не учитываю?
← →
clickmaker © (2009-04-27 14:34) [5]IsValidSid
If the SID structure is not valid, the return value is zero. There is no extended error information for this function; do not call GetLastError.
(c) MSDN
← →
Игорь Шевченко © (2009-04-27 14:42) [6]
> Не пойму как там параметры наполнять. откуда их брать...
Справка тоже не помогает ?
← →
Виталий (2009-04-27 16:04) [7]
> clickmaker © (27.04.09 14:34) [5]
Лады, согласен переписал:if not IsValidSid(sid) then
Memo1.Lines.Add("IsValidSid(sid); - "+SysErrorMessage(err))
else
Memo1.Lines.Add("IsValidSid(sid) ok");
Возвращает isValidSid(sid) ok
т.е. SID Верный, к тому же я по нему правильно получаю имя и аккаунт, так что эта функа точно вне подозрения.
> Игорь Шевченко © (27.04.09 14:42) [6]
Ну а как ты думаешь, если бы помогла, стал бы я спрашивать?
← →
Виталий (2009-04-27 16:04) [8]Удалено модератором
← →
Виталий (2009-04-27 16:05) [9]Удалено модератором
← →
Игорь Шевченко © (2009-04-27 18:11) [10]
> Ну а как ты думаешь, если бы помогла, стал бы я спрашивать?
Я не в курсе, обычно справки хватает, ее для того и пишут, чтобы хватало.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2010.10.03;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c