Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо