Форум: "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