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

Вниз

SetFileSecurity   Найти похожие ветки 

 
Cj ©   (2008-02-18 17:20) [0]

Здраствуйте мастера! Проблема в том,что я начал изучать дескрипторы бузопасности и вот этим кодом заблокировал тестируемую папку Test. Что мне надо изменить,чтобы обратно ее разблокировать? Дело в том, что при повторе SetFileSecurity возвращает false, это что?, я для себя заблокировал папку по полной?- возвращает ведь она ERROR_ACCESS_DENIED, или все-таки ее можно разблокировать?Подскажите? Сильно плиз не пинайте.

вот код, которым заблокировал

procedure TForm1.Button1Click(Sender: TObject);
var
acl:_ACL;
sd:SECURITY_DESCRIPTOR;
begin
InitializeAcl(acl,sizeof(acl),2);

InitializeSecurityDescriptor(@sd,SECURITY_DESCRIPTOR_REVISION);  //sd

setsecuritydescriptordacl(@sd,true,@acl,true);                   //set dacl

windows.SetFileSecurity("Test",DACL_SECURITY_INFORMATION,@sd);

end;


 
Джо ©   (2008-02-18 17:27) [1]

> Что мне надо изменить,чтобы обратно ее разблокировать

Стать владельцем файла и выставить разрешения заново.


 
Cj ©   (2008-02-18 17:32) [2]

а как это программно сделать?
или подскажите пожалуйста как заблокировать файл оставшись его владельцем?


 
Cj ©   (2008-02-18 17:49) [3]

точно! вы правы, немогу разблокировать файлы которые я не созвавал(были на диске) вот поэтому наверное у них ACCESS_DENIED.
но вот только как разблокировать :( подскажите?


 
ага   (2008-02-18 20:36) [4]

Админ может стать владельцем любого объекта, файла в том числе, ко бы его ни создавал. А владелец может менять все его настройки защиты.

> а как это программно сделать?

SetSecutityDescriptorOwner


 
ага   (2008-02-18 20:43) [5]

Еще владельцем может стать обладатель привилегии SE_TAKE_OWNERSHIP, или у кого есть на объект право WRITE_OWNER. Но последний вариант не для тя, ты то пустой DACL воткнул.


 
Ins ©   (2008-02-18 20:45) [6]


> SetSecutityDescriptorOwner


Думаю, привилегию SE_TAKE_OWNERSHIP_NAME получить сначала придется.


 
Ins ©   (2008-02-18 20:47) [7]


> Еще владельцем может стать обладатель привилегии SE_TAKE_OWNERSHIP


Вот поэтому админ и может стать владельцем. У админского процесса в маркере по-умолчанию эта привилегия присутствует.


 
ага   (2008-02-18 20:57) [8]


>Думаю, привилегию SE_TAKE_OWNERSHIP_NAME получить сначала придется
> Вот поэтому админ и может стать владельцем

Спасибо, я в курсях, ага.

> У админского процесса в маркере по-умолчанию эта привилегия
> присутствует.

Строго говоря наоборот. Она есть у всех процессов, запущенных от имени членов группы Администраторы потому, что по умолчанию имеется у членов этой группы.

Эта типа если придираться.


 
Cj ©   (2008-02-19 10:16) [9]

Вот сделал, только че требуются еще какие-то дополнительные привилегии, что-ли? получил все какие знаю.Выдает  { Not all privileges referenced are assigned to the caller. }
 ERROR_NOT_ALL_ASSIGNED = 1300;
вот код. подскажите че не так?

type
PTOKEN_USER = ^TOKEN_USER;
_TOKEN_USER = record
  User : TSidAndAttributes;
end;
TOKEN_USER = _TOKEN_USER;

procedure TForm1.Button1Click(Sender: TObject);
var
acl:_ACL;
sd:SECURITY_DESCRIPTOR;
 HT: THandle;
 PR, prpr: TOKEN_PRIVILEGES;
 cp: dword;
var
lpDomain : PWideChar;
Sid : PSID;
cbDomain,cbSid : Cardinal;
peUse : Cardinal;
begin
cbSid:=128;
cbDomain:=64;

GetMem(Sid,cbSid);
GetMem(lpDomain,cbDomain*SizeOf(WideChar));

begin
  ReAllocMem(Sid,cbSid);
 
  ReAllocMem(lpDomain,cbDomain*SizeOf(WideChar));
 
  LookupAccountNameW(nil,"Cj",Sid,cbSid,lpDomain,cbDomain,peUse);
 end;            

 OpenThreadToken(GetCurrentThread, TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES, false, hT);
 OpenProcessToken(GetCurrentProcess, TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES, hT);
 Pr.PrivilegeCount := 28;

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "secreatetokenprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seassignprimarytokenprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "selockmemoryprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seincreasequotaprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seunsolicitedinputprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "semachineaccountprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "setcbprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "sesecurityprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "setakeownershipprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seloaddriverprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "sesystemprofileprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "sesystemtimeprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seprofilesingleprocessprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seincreasebasepriorityprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "secreatepagefileprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "secreatepermanentprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "sebackupprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "serestoreprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seshutdownprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "sedebugprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seauditprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "sesystemenvironmentprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "sechangenotifyprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seremoteshutdownprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seundockprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "sesyncagentprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seenabledelegationprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "semanagevolumeprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 CloseHandle(hT);

InitializeAcl(acl,sizeof(acl),2);

InitializeSecurityDescriptor(@sd,SECURITY_DESCRIPTOR_REVISION);  //sd

windows.SetSecurityDescriptorOwner(@sd,sid,false);

windows.SetFileSecurity("text_programs\BSOD",OWNER_SECURITY_INFORMATION,@sd);
caption:=inttostr(getlasterror);

end;


 
Cj ©   (2008-02-19 10:16) [10]

Вот сделал, только че требуются еще какие-то дополнительные привилегии, что-ли? получил все какие знаю.Выдает  { Not all privileges referenced are assigned to the caller. }
 ERROR_NOT_ALL_ASSIGNED = 1300;
вот код. подскажите че не так?

type
PTOKEN_USER = ^TOKEN_USER;
_TOKEN_USER = record
  User : TSidAndAttributes;
end;
TOKEN_USER = _TOKEN_USER;

procedure TForm1.Button1Click(Sender: TObject);
var
acl:_ACL;
sd:SECURITY_DESCRIPTOR;
 HT: THandle;
 PR, prpr: TOKEN_PRIVILEGES;
 cp: dword;
var
lpDomain : PWideChar;
Sid : PSID;
cbDomain,cbSid : Cardinal;
peUse : Cardinal;
begin
cbSid:=128;
cbDomain:=64;

GetMem(Sid,cbSid);
GetMem(lpDomain,cbDomain*SizeOf(WideChar));

begin
  ReAllocMem(Sid,cbSid);
 
  ReAllocMem(lpDomain,cbDomain*SizeOf(WideChar));
 
  LookupAccountNameW(nil,"Cj",Sid,cbSid,lpDomain,cbDomain,peUse);
 end;            

 OpenThreadToken(GetCurrentThread, TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES, false, hT);
 OpenProcessToken(GetCurrentProcess, TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES, hT);
 Pr.PrivilegeCount := 28;

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "secreatetokenprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seassignprimarytokenprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "selockmemoryprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seincreasequotaprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seunsolicitedinputprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "semachineaccountprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "setcbprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "sesecurityprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "setakeownershipprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seloaddriverprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "sesystemprofileprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "sesystemtimeprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seprofilesingleprocessprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seincreasebasepriorityprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "secreatepagefileprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "secreatepermanentprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "sebackupprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "serestoreprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seshutdownprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "sedebugprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seauditprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "sesystemenvironmentprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "sechangenotifyprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seremoteshutdownprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seundockprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "sesyncagentprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "seenabledelegationprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 Pr.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 LookupPrivilegeValue(nil, "semanagevolumeprivilege", Pr.Privileges[0].Luid);
 AdjustTokenPrivileges(hT, false, Pr, SizeOf(Pr), Prpr, cp);

 CloseHandle(hT);

InitializeAcl(acl,sizeof(acl),2);

InitializeSecurityDescriptor(@sd,SECURITY_DESCRIPTOR_REVISION);  //sd

windows.SetSecurityDescriptorOwner(@sd,sid,false);

windows.SetFileSecurity("text_programs\BSOD",OWNER_SECURITY_INFORMATION,@sd);
caption:=inttostr(getlasterror);

end;


 
Cj ©   (2008-02-19 10:18) [11]

чета Опера тормозит sorry


 
ага   (2008-02-19 18:03) [12]


> только че требуются еще

Еще требуется книжки всякие читать, MSDN, статьи разные. И ваще научиться с WinApi работать, прежде чем за такие вещи браться.

> получил все какие знаю

Откуда такая уверенность? Я дык в упор не вижу, чтобы ты "получил" хоть одну привилегию. И даже, что гарантированно включил уже имеющуюся, не вижу.


 
Cj ©   (2008-02-20 14:05) [13]


> Откуда такая уверенность? Я дык в упор не вижу, чтобы ты
> "получил" хоть одну привилегию. И даже, что гарантированно
> включил уже имеющуюся, не вижу.


в ProcessViewer-е проверял


 
ага   (2008-02-20 16:35) [14]


> в ProcessViewer-е проверял

Да проверяй чем хош. Нет у тя кода получения привилегий, понятно? Просто нет. У тя тут попытки включить для текущего маркера кучу привилегий. Разбирайся в чем разница.

И что самое смешное, тя совершенно не интересует успешность этих попыток. Спрашивается, нафига тогда включать? ProcessViewer-ом он проверял. А юзеру тож предложишь ProcessViewer юзать?

У тя ваще ни одной проверки вызовов нет, а за такое нать прилюдно розгами сечь в назидание. Вот ты вызвал SetSecurityDescriptorOwner, а откель ты знаешь
1) что ты туда нормальный SID передал
2) Что Owner сменился
А нифига ты этого не знаешь.

Ну ладно, нагородил ты этот код, пусть он даже успешно отработал. А хочешь-то чего? Как вставлял пустой список контроля доступа, так и продолжаешь вставлять. А пустой список - запрет для всех. Чего нать то? доступ получить? Ну так и давай себе разрешения.

> я начал изучать дескрипторы бузопасности

Нифига ты еще не начал изучать. та начал тыкаться наугад, авось чего получится. а эт не та область, где можно обойтись методом тыка.


 
Ins ©   (2008-02-22 10:55) [15]


> А хочешь-то чего? Как вставлял пустой список контроля доступа,
>  так и продолжаешь вставлять. А пустой список - запрет для
> всех. Чего нать то? доступ получить? Ну так и давай себе
> разрешения.


Мы же вроде уже разобрались, что можно никому не давать доступ, но будучи Owner-ом DACL все равно можно подменить. А Owner-ом может стать любой, имеющий привилегию SE_TAKE_OWNERSHIP_NAME.


> Cj ©   (19.02.08 10:18) [11]

Ты что-то слишком много телодвижений делаешь ненужных. Ты владелец объекта? Если да, то установить новый DACL ты сможешь в любом случае, ничего для этого не нужно. Если нет - то сначала владельцем ужно стать. Для этого нужно включить привелегию SE_TAKE_OWNERSHIP_NAME (если ты обычный юзер - ты не сможешь этого сделать, если конечно явно не изменить набор привилегий учеток по-умолчанию. У не-админских процессов этой привилегии в маркере попросту нет и включать там нечего). После включения привилегии - установить Owner-ом себя. Советую почитать хотя бы Соломона и Руссиновича, у них написано что как и почему.


 
ага   (2008-02-22 16:32) [16]


> Мы же вроде уже разобрались, что можно никому не давать
> доступ, но будучи Owner-ом DACL все равно можно подменить

Я не знаю, кто там с чем разбирался/разобрался, мне тут разбираться не с чем.
Но стать владельцем - не самоцель. Для того и делают себя владельцем, шоб иметь возможность назначить необходимые разрешения себе, любимому. И хрена толку, что он владелец, если список доступа назначает опять пустой?

Владелец имеет возможность управлять настройками безопасности - все, список исчерпывающий. А чтоб иметь возможность что-то полезное делать с объектом, нужны конкретные права. А сам факт владения тут не приделах.

Эт я и сказал в предыдущем посте. Че не понятно-то?


 
ага   (2008-02-22 16:54) [17]

2 Ins

> можно никому не давать доступ, но будучи Owner-ом DACL все
> равно можно подменить

Хе, сразу не заметил:) А в чем разница-та? Между "права давать" и "DACL"подменить". DACL-то, эт че? Не права чтол-ли, кому чего можно?


 
Ins ©   (2008-02-22 17:48) [18]


> Хе, сразу не заметил:) А в чем разница-та? Между "права
> давать" и "DACL"подменить". DACL-то, эт че? Не права чтол-
> ли, кому чего можно?


Что-то я не совсем понял, что Вы хотитие этим сказать... Автор спрашивает, можно ли как-нибудь получить доступ к папке, для которой закрыт абсолютно любой вид доступа и абсолютно для всех. Ответ - можно. Так как владелец имеет право изменять DACL, даже если в самом DACL это явно запретить. Согласны?

Если да, то задача сводится к тому, чтобы стать владельцем объекта (если владелец изначально некто другой).


 
ага   (2008-02-23 05:20) [19]


> Что-то я не совсем понял, что Вы хотитие этим сказать


Я хочу сказать, что фраза "можно никому не давать доступ, но будучи Owner-ом DACL все равно можно подменить" в свете обсуждаемого вопроса звучит абсурдно - замена DACL и есть "дача" прав или запретов.

Вопрос озвучен так:

> вот этим кодом заблокировал тестируемую папку Test. Что
> мне надо изменить,чтобы обратно ее разблокировать?

Из кода видно, что автор заблокировал доступ, назначив пустой DACL. Соответственно, чтобы снять эту блокировку, ему надо назначить непустой DACL, с правами для себя. А вклинившийся в обсуждение Qwner - всего лишь средство решения данной задачи. И в контексте этого, а также последующего обсуждения, замечание

> Мы же вроде уже разобрались, что можно никому не давать
> доступ, но будучи Owner-ом DACL все равно можно подменить.
>  А Owner-ом может стать любой, имеющий привилегию SE_TAKE_OWNERSHIP_NAME.
>

звучит как минимум странно.

Причем ответ-то правильный емы был дан сразу же, в первом посте. А во втором посте он (автор) уточнил направление

> а как это программно сделать?


 
Ins ©   (2008-02-23 13:05) [20]


> А вклинившийся в обсуждение Qwner - всего лишь средство
> решения данной задачи....
> Причем ответ-то правильный емы был дан сразу же, в первом
> посте.

Снова либо я не понимаю суть вашей претензии, либо вы сами себе противоречите, так как Owner "вклинился" в первом же посте, который вы (и я) считаете правилным ответом.


> звучит как минимум странно.

ОК. Если это неочевидно, то уточню, фразу следует читать так:

Мы же вроде уже разобрались, что можно никому не давать доступ изначально, но будучи Owner-ом...

Хотя на этот вопрос можно ответить и в духе "надо было изначально не запрещать, не пришлось бы выеживаться".



Страницы: 1 вся ветка

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

Наверх




Память: 0.56 MB
Время: 0.011 c
11-1196550348
Byka (345-824-826)
2007-12-02 02:05
2009.01.04
Kostia


2-1227650952
Аврам
2008-11-26 01:09
2009.01.04
алгоритм кубиков для арканоида


15-1225715882
bv7
2008-11-03 15:38
2009.01.04
MySQL + Delphi (доступ и редактирование данных)


1-1202899639
Darvin
2008-02-13 13:47
2009.01.04
Приложение с несколькими chm файлами справки


2-1227038290
Lamer6666
2008-11-18 22:58
2009.01.04
Поле типа Calculated