-
Подскажите пожалуйста как программно стать владельцем файла.
Говорят что нужно использовать SetNamedSecurityInfo, но мне пока не очень понятно как с ней работать, и как правильно передавать и наполнять их.
Если есть другой способ просьба натолкнуть на мысль, литературой или кодом.
Заранее спасибо.
-
> [0] Виталий (24.04.09 16:02)
> Говорят что нужно использовать SetNamedSecurityInfo
правильно говорят.
> но мне пока не очень понятно как с ней работать, и как правильно > передавать и наполнять их.
гугл не помогает?
-
> гугл не помогает?
неа. пока не очень. Не пойму как там параметры наполнять. откуда их брать...
-
-
Вот сообразил такой пример: function SID_GetUserSID;
var
PSID, PRef: Pointer;
SIDSize, RefSize, peUse: Cardinal;
begin
SIDSize:=0;
RefSize:=0;
LookupAccountName(PChar(Machine),PChar(AccountName),nil,SIDSize,nil,
RefSize,peUse);
GetMem(PSID,SIDSize);
GetMem(PRef,RefSize);
try
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);
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;
Все функции выполняются без ошибок, но владелец не меняется. Что я не учитываю?
-
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
-
> Не пойму как там параметры наполнять. откуда их брать...
Справка тоже не помогает ?
-
> 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]
Ну а как ты думаешь, если бы помогла, стал бы я спрашивать?
-
Удалено модератором
-
Удалено модератором
-
> Ну а как ты думаешь, если бы помогла, стал бы я спрашивать?
Я не в курсе, обычно справки хватает, ее для того и пишут, чтобы хватало.
|