![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
InitializeAcl SECURITY_ATTRIBUTES крутые вопросы [D5, Win2k]
Georgiy © (2006-03-22 23:35:00)Код ниже.
Цель - делаю SECURITY_ATTRIBUTES для Всех доступ.
Выдает ошибку InitializeAcl - неправельно задан параметр,
Когда то работало после пляски с перебором,так как визуально все вроде правильно
доходило до того что ставил @pNewACL^ так как руки опускались, и спрашивается зачем мутили
(PSECURITY_DESCRIPTOR,TSECURITY_DESCRIPTOR,_SECURITY_DESCRIPTOR) смотришь одно (MSDN) ,а пишется другое ???
sd:PSECURITY_DESCRIPTOR
sd:_SECURITY_DESCRIPTOR
pNewACL:PACL;
pNewACL:_ACL; значений
var global
SA : _SECURITY_ATTRIBUTES;
procedure ALL;
var
sd:PSECURITY_DESCRIPTOR; // pointer äëÿ Alloc
s:pointer;
psidEver:PSID;
pNewACL:PACL;
FLAG:cardinal;
begin
TRY
if AllocateAndInitializeSid(SECURITY_WORLD_SID,1,SECURITY_WORLD_RID,0,0,0,0,0,0,0,p sidEver)=
false then showmessage('no a');;
if IsValidSid(psidEver)= false then showmessage('IsValidSid');
{ну выделил места до п0пы хватит}
pNewACL := PACL(LocalAlloc(LPTR,1024*8));
if not InitializeAcl(pNewACL^,1024*8,{ACL_REVISION}1) then showmessage('Error: ' + SysErrorMessage(GetLastError) + ' :InitializeAcl'); // тут ошибка мол неверный параметр
// AddAccessAllowedAce( _ACL
{непонятки требует _ACE а есть PACE,бросаем VOID чтоб подавился}
if AddAccessAllowedAce(pNewACL^, ACL_REVISION ,
STANDARD_RIGHTS_READ ,psidEver) then showmessage('AddAccessAllowedAceEx '+
SysErrorMessage(GetLastError));
if not IsValidAcl(pNewACL^) then showmessage('Error: IsValidAcl');
sd := pSECURITY_DESCRIPTOR(LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH));
if not Assigned(@SD) then showmessage('Error: PSECURITY_DESCRIPTOR(LocalAlloc');
if not InitializeSecurityDescriptor(sd,SECURITY_DESCRIPTOR_REVISION) then showmessage('Error:
InitializeSecurityDescriptor');
if not SetSecurityDescriptorDacl (sd,TRUE,@pNewACL,false) then showmessage('Error:
SetSecurityDescriptorDacl ');
ZeroMemory(@sa,SizeOf(sa));
sa.nLength:=sizeof(sa);
sa.bInheritHandle:=false;
sa.lpSecurityDescriptor:=sd;
if IsValidSecurityDescriptor(sd)=false then showmessage('IsValidSecurityDescriptor');
EXCEPT
showmessage('critiacal');
END;
end;
//------------------
Georgiy (2006-03-23 15:46:00) [1]>А зачем что-то добавлять, если нужно открыть для всех?
дык для отладки,чтобы потом вставить AddAccessDeniedAce,
а какой толк если и это не работает код (по минимому пока-что)
Leonid Troyanovsky (2006-03-23 14:50:00) [2]
> Georgiy (23.03.06 13:34) [2]
> >не подойдет ,так как (@sd, True, nil, False));
> мне надо не нулевой,а пустой ,чтоб добавить ACL
А зачем что-то добавлять, если нужно открыть для всех?
{TSecurityDescriptor}
if not InitializeSecurityDescriptor(@sd, 1) or
not SetSecurityDescriptorDACL(@sd, true, PAcl(nil), False) then
raise Exception.Create('MailSlot security failed');
{TSecurityAttributes}
sa.nLength:=SizeOf(sa);
sa.lpSecurityDescriptor:=@sd;
sa.bInheritHandle:= False;
И этот sa использовать в CreateEvent.
--
Regards, LVT.
Georgiy (2006-03-23 13:34:00) [3]>не подойдет ,так как (@sd, True, nil, False));
мне надо не нулевой,а пустой ,чтоб добавить ACL
Уже добился без ошибок работает,получаю SA : _SECURITY_ATTRIBUTES;
Но при попытке использовать
if CreateEvent(@sa,true,false,'WWWWWTESTWWWWWWWWW')=0 then BEGIN
//str(GetLastError,s);
//showmessage(S);
showmessage('test '+ SysErrorMessage(GetLastError) );
выдает ошибку 1305 тоесть Уровень редакции неизвесен
(Версия изменений неизвестна)
кого sid , acl ?
Leonid Troyanovsky (2006-03-23 09:11:00) [4]
> Georgiy (22.03.06 23:35)
> Цель - делаю SECURITY_ATTRIBUTES для Всех доступ.
Попробуй так
procedure SetNullDacl(Handle: THandle);
const
SECURITY_DESCRIPTOR_REVISION = 1;
var
sd: TSecurityDescriptor;
begin
Win32Check(InitializeSecurityDescriptor( @sd,
SECURITY_DESCRIPTOR_REVISION));
Win32Check(SetSecurityDescriptorDACL(@sd, True, nil, False));
Win32Check(SetKernelObjectSecurity( Handle,
DACL_SECURITY_INFORMATION,
@sd));
end;
--
Regards, LVT.