Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.91.37] |
|
Сообщ.
#1
,
|
|
|
Под скажите, пожалуйста. Как стать владельцем для файла или папки, чтобы изменить права доступа к файлу/папке? Заранее спасибо.
|
Сообщ.
#2
,
|
|
|
Цитата Nikfel @ Под скажите, пожалуйста. Как стать владельцем для файла или папки SetKernelObjectSecurity ? |
Сообщ.
#3
,
|
|
|
А можно ли по подробнее? Хотелось бы знать какие именно функции и в какой последовательности потребуются для реализации этой задачи. На каком-то форуме использовалась вот эта функция: SetNamedSecurityInfo. Но как-то везде не понятно как такое реализовать. Мне бы хотелось самому указывать имя владельца например: "Администратор" или "Любое другое имя".
|
Сообщ.
#4
,
|
|
|
Сообщ.
#5
,
|
|
|
Цитата Nikfel @ использовалась вот эта функция: SetNamedSecurityInfo. Но как-то везде не понятно как такое реализовать. Мне бы хотелось самому указывать имя владельца например: "Администратор" или "Любое другое имя". Наверное GetNamedSecurityInfo Вообще-то тема не раз обсуждалась. Попробуй пройтись поиском, например по фразе типа: "как узнать под администраторм ли мы (под какой учетной записью) ?" |
Сообщ.
#6
,
|
|
|
Где ошибка, код не работает, код ошибки 87:
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; |
Сообщ.
#7
,
|
|
|
Код не работал потому что было в SetNamedSecurityInfo @Sid, а надо просто Sid.
Добавлено Странно то, что если указать имя другого пользователя, не того с которого загрузился, а другое то выдаёт следующее: Этот идентификатор безопасности не может быть назначен владельцем этого объекта. Как это понять? Можно ли всё равно как-то назначить его владельцем? Ещё интересно бы узнать как убрать владельца файла, чтобы закрыть доступ? |
Сообщ.
#8
,
|
|
|
http://www.transl-gunsmoker.ru/2010/06/blog-post_12.html
|
Сообщ.
#9
,
|
|
|
Вот что удалось написать, может ошибки есть. Полностью не тестировал прогу, но доступ к файлам и папкам вроде должна открывать, если запускать от имени администратора. Недостаток в том, что нет обработки ошибок, но я прогу в основном для себя писал. Прогу скомпилировал в Delphi7 и не заметил что она не устанавливает владельца, короче нужно компилировать в новых версиях Delphi. Странно что в Delphi 7 этот код не работает. Может кто знает в чём тут дело?
Прикреплённый файлDostup.zip (34,02 Кбайт, скачиваний: 240) |