Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2009.01.04;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2009.01.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.006 c
11-1196588514
Vinum
2007-12-02 12:41
2009.01.04
GradientPanel enabled->not(enabled)


2-1227463627
Nastya
2008-11-23 21:07
2009.01.04
Создание у уничтожение компонентов в RunTime


15-1225429373
Slider007
2008-10-31 08:02
2009.01.04
С днем рождения ! 31 октября 2008 пятница


2-1227600006
bioss
2008-11-25 11:00
2009.01.04
Мастера, подкажите пожалуйста


2-1227090068
oracled
2008-11-19 13:21
2009.01.04
IdHTTP





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский