RtlpGenerateInheritAcl
NTSTATUS __stdcall RtlpGenerateInheritAcl(
_ACL *Acl,
UINT8 IsDirectoryObject,
UINT8 AutoInherit,
VOID *ClientOwnerSid,
VOID *ClientGroupSid,
VOID *ServerOwnerSid,
VOID *ServerGroupSid,
_GENERIC_MAPPING *GenericMapping,
_GUID **pNewObjectType,
UINT64 GuidCount,
_SEP_ACL_TYPE AclType,
UINT8 PreviousAclOverflowed,
UINT64 *NewAclSizeParam,
_ACL *NewAcl,
UINT8 *ObjectAceInherited){
int v15;
_ACL *v16;
unsigned int v17;
unsigned int v19;
_ACL *v20;
int v21;
_GUID **v22;
NTSTATUS result;
UINT64 v24;
char v25;
UINT64 NewAceLength[10];
UINT8 v27;
UINT8 v28;
UINT8 v29;
VOID *ClientOwnerSida;
ClientOwnerSida = ClientOwnerSid;
v29 = AutoInherit;
v28 = IsDirectoryObject;
v15 = 0;
v16 = Acl + 1;
v17 = 0;
NewAceLength[0] = 0i64;
v19 = 0;
v27 = 0;
v25 = 0;
*ObjectAceInherited = 0;
if( Acl->AceCount )
{
v20 = NewAcl;
v21 = GuidCount;
v22 = pNewObjectType;
while( 1 )
{
if( v16->AclRevision == 17 )
{
if( AclType == SepAclTypeMacl )
{
if( RtlFindAceByType(v20, 0x11ui64, 0i64) )
{
LABEL_13:
if( !v25 )
break;
LABEL_21:
result = -1073741789;
*(_DWORD *)NewAclSizeParam = v17 + v15;
return result;
}
LABEL_5:
LODWORD(v24) = v21;
result = RtlpGenerateInheritedAce(
v16,
v28,
v29,
ClientOwnerSida,
ClientGroupSid,
ServerOwnerSid,
ServerGroupSid,
GenericMapping,
v22,
v24,
NewAceLength,
v20,
(UINT64 *)((char *)NewAceLength + 4),
&v27);
if( result == -1073741789 )
{
v25 = 1;
}
else if( result < 0 )
{
return result;
}
if( v27 )
*ObjectAceInherited = 1;
v15 += LODWORD(NewAceLength[0]);
if( LODWORD(NewAceLength[0]) > v17 || (v17 -= LODWORD(NewAceLength[0]), v17 <= HIDWORD(NewAceLength[0])) )
v17 = HIDWORD(NewAceLength[0]);
}
}
else if( AclType != SepAclTypeMacl )
{
goto LABEL_5;
}
++v19;
v16 = (_ACL *)((char *)v16 + v16->AclSize);
if( v19 >= Acl->AceCount )
goto LABEL_13;
}
}
if( PreviousAclOverflowed )
goto LABEL_21;
*(_DWORD *)NewAclSizeParam = v15;
return 0;
}Referenced by:
RtlpInheritAcl2