Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как программно стать владельцем файла? [D6, WinXP]


Виталий ©   (2009-04-24 16:02:00) 

Подскажите пожалуйста как программно стать владельцем файла.

Говорят что нужно использовать SetNamedSecurityInfo, но мне пока не очень понятно как с ней работать, и как правильно передавать и наполнять их.

Если есть другой способ просьба натолкнуть на мысль, литературой или кодом.

Заранее спасибо.


Игорь Шевченко   (2009-04-27 18:11:00) [1]


> Ну а как ты думаешь, если бы помогла, стал бы я спрашивать?


Я не в курсе, обычно справки хватает, ее для того и пишут, чтобы хватало.


Виталий   (2009-04-27 16:05:00) [2]

Удалено модератором


Виталий   (2009-04-27 16:04:00) [3]


> 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:00) [4]

Удалено модератором


Игорь Шевченко   (2009-04-27 14:42:00) [5]


> Не пойму как там параметры наполнять. откуда их брать...


Справка тоже не помогает ?


clickmaker   (2009-04-27 14:34:00) [6]

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 11:28:00) [7]

Вот сообразил такой пример:

//****************************************************
  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;


Все функции выполняются без ошибок, но владелец не меняется. Что я не учитываю?


Eraser   (2009-04-24 17:38:00) [8]

полно ж примеров
http://www.google.com/search?client=opera&rls=ru&q=delphi+SetNamedSecurityInfo&sourceid=opera&ie=utf-8&oe=utf-8


Виталий   (2009-04-24 17:06:00) [9]


> гугл не помогает?

неа. пока не очень.
Не пойму как там параметры наполнять. откуда их брать...


Eraser   (2009-04-24 16:08:00) [10]

> [0] Виталий   (24.04.09 16:02)


> Говорят что нужно использовать SetNamedSecurityInfo

правильно говорят.

> но мне пока не очень понятно как с ней работать, и как правильно
> передавать и наполнять их.

гугл не помогает?


Наверх

Титульная страница Поиск, карта сайта Написать письмо