Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.10.03;
Скачать: CL | DM;

Вниз

Как программно стать владельцем файла?   Найти похожие ветки 

 
Виталий   (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 вся ветка

Текущий архив: 2010.10.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
15-1277989076
12
2010-07-01 16:57
2010.10.03
Как Вам х.ф. Сумерки.Затмение ?


2-1278501707
DC-AC
2010-07-07 15:21
2010.10.03
Изменить шрифт заголовка окна


15-1278528220
Knight
2010-07-07 22:43
2010.10.03
Пакетная обработка архивов RAR


15-1278309120
Ulugbek
2010-07-05 09:52
2010.10.03
Как удалить в самом Delphi Recent open files?


10-1168342746
Priest
2007-01-09 14:39
2010.10.03
Как определить путь к dll библиотеки com сервера