Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
2-1278503255
linuxoid
2010-07-07 15:47
2010.10.03
загрузка из базы в Treeview


15-1278403825
DaveRT
2010-07-06 12:10
2010.10.03
Нужен код


15-1278525894
Kerk
2010-07-07 22:04
2010.10.03
Открыл для себя волынку


2-1278410497
GanibalLector
2010-07-06 14:01
2010.10.03
Hint в TStringGrid


15-1278002591
KilkennyCat
2010-07-01 20:43
2010.10.03
В поисках оптоволокна наткнулся на "больных"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский