На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> Как стать владельцем для файла/папки?
    Под скажите, пожалуйста. Как стать владельцем для файла или папки, чтобы изменить права доступа к файлу/папке? Заранее спасибо.
      Цитата Nikfel @
      Под скажите, пожалуйста. Как стать владельцем для файла или папки


      SetKernelObjectSecurity
      ?
        А можно ли по подробнее? Хотелось бы знать какие именно функции и в какой последовательности потребуются для реализации этой задачи. На каком-то форуме использовалась вот эта функция: SetNamedSecurityInfo. Но как-то везде не понятно как такое реализовать. Мне бы хотелось самому указывать имя владельца например: "Администратор" или "Любое другое имя".
          Здесь и здесь есть примеры как скопировать разрешения, а копирование это чтение прав и соответственно их установка.
          Да и мсдн вам в помощь
            Цитата Nikfel @
            использовалась вот эта функция: SetNamedSecurityInfo. Но как-то везде не понятно как такое реализовать. Мне бы хотелось самому указывать имя владельца например: "Администратор" или "Любое другое имя".


            Наверное GetNamedSecurityInfo ;)
            Вообще-то тема не раз обсуждалась.
            Попробуй пройтись поиском, например по фразе типа: "как узнать под администраторм ли мы (под какой учетной записью) ?"
              Где ошибка, код не работает, код ошибки 87:
              ExpandedWrap disabled
                function SID_GetUserSID(Machine,AccountName:string):Pointer;
                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:=nil;
                      exit;
                    end else result:=PSID;
                  finally
                    FreeMem(PRef);
                    FreeMem(PSID);
                  end;
                end;
                 
                 
                procedure TForm1.Button2Click(Sender: TObject);
                var Sid:Pointer;
                    Sd:PSecurityDescriptor;
                    i:integer;
                begin
                SetPrivilege('SeTakeOwnershipPrivilege', true);//включаем привилегию
                  sid:=SID_GetUserSID('','Администратор');
                  if sid<>nil then begin
                    GetMem(Sd,1024);
                       InitializeSecurityDescriptor(Sd,SECURITY_DESCRIPTOR_REVISION);
                       SetSecurityDescriptorOwner(Sd,Sid, False);
                       i:=SetNamedSecurityInfo('E:\',SE_FILE_OBJECT,OWNER_SECURITY_INFORMATION,@sid,nil,nil,nil);
                       if i = ERROR_SUCCESS then caption:='1' else caption:=inttostr(i);
                    FreeMem(Sd);
                  end;
                SetPrivilege('SeTakeOwnershipPrivilege', false);//выключаем привилегию
                end;
              Сообщение отредактировано: Nikfel -
                Код не работал потому что было в SetNamedSecurityInfo @Sid, а надо просто Sid.

                Добавлено
                Странно то, что если указать имя другого пользователя, не того с которого загрузился, а другое то выдаёт следующее: Этот идентификатор безопасности не может быть назначен владельцем этого объекта. Как это понять? Можно ли всё равно как-то назначить его владельцем? Ещё интересно бы узнать как убрать владельца файла, чтобы закрыть доступ?
                Сообщение отредактировано: Nikfel -
                  http://www.transl-gunsmoker.ru/2010/06/blog-post_12.html
                    Вот что удалось написать, может ошибки есть. Полностью не тестировал прогу, но доступ к файлам и папкам вроде должна открывать, если запускать от имени администратора. Недостаток в том, что нет обработки ошибок, но я прогу в основном для себя писал. Прогу скомпилировал в Delphi7 и не заметил что она не устанавливает владельца, короче нужно компилировать в новых версиях Delphi. Странно что в Delphi 7 этот код не работает. Может кто знает в чём тут дело?

                    Прикреплённый файлПрикреплённый файлDostup.zip (34,02 Кбайт, скачиваний: 240)
                    Сообщение отредактировано: Nikfel -
                    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0313 ]   [ 17 queries used ]   [ Generated: 14.05.24, 23:36 GMT ]