RtlpComputeMergedAcl
NTSTATUS __stdcall RtlpComputeMergedAcl(
_BYTE *CurrentAcl,
UINT64 CurrentGenericControl,
_ACL *ModificationAcl,
UINT64 ModificationGenericControl,
VOID *ClientOwnerSid,
VOID *ClientGroupSid,
_GENERIC_MAPPING *GenericMapping,
_SEP_ACL_TYPE AclType,
_ACL **NewAcl,
UINT64 *NewGenericControl){
unsigned int v10;
unsigned int v11;
unsigned int v13;
int v15;
VOID **AclBuffer;
int v17;
__int64 AclBufferSize[2];
v10 = 1024;
v11 = ModificationGenericControl;
LODWORD(AclBufferSize[0]) = 1024;
v13 = CurrentGenericControl;
v15 = 0;
while( 1 )
{
AclBuffer = ExAllocatePoolWithTag(1ui64, v10, 1665230163i64);
*NewAcl = (_ACL *)AclBuffer;
if( !AclBuffer )
break;
v17 = RtlpComputeMergedAcl2(
CurrentAcl,
v13,
ModificationAcl,
v11,
ClientOwnerSid,
ClientGroupSid,
GenericMapping,
AclType,
(UINT64 *)AclBufferSize,
(PACL)AclBuffer,
NewGenericControl);
if( v17 >= 0 )
{
if( !LODWORD(AclBufferSize[0]) )
{
ExFreePoolWithTag(*NewAcl, 0);
*NewAcl = 0i64;
}
return v17;
}
ExFreePoolWithTag(*NewAcl, 0);
*NewAcl = 0i64;
if( v17 != -1073741789 )
return v17;
if( (unsigned int)++v15 >= 2 )
return v17;
v10 = AclBufferSize[0];
}
return -1073741801;
}Referenced by:
RtlpNewSecurityObject
RtlpSetSecurityObject