RtlValidAcl
VOID __fastcall RtlValidAcl(_ACL *Acl, VOID *SystemArgument1, VOID *SystemArgument2){
unsigned __int16 *p_AclSize;
unsigned int v5;
_ACE_HEADER *v6;
int v7;
_ACE_HEADER *v8;
USHORT *p_AceSize;
unsigned __int64 v10;
unsigned int AceType;
__int64 AceFlags;
if( (unsigned __int8)(Acl->AclRevision - 2) <= 2u )
{
p_AclSize = &Acl->AclSize;
if( (unsigned __int16 *)(((unsigned __int64)&Acl->AclSize + 1) & 0xFFFFFFFFFFFFFFFEui64) == &Acl->AclSize
&& *p_AclSize >= 8u )
{
v5 = 0;
v6 = (_ACE_HEADER *)&Acl[1];
if( Acl->AceCount )
{
v7 = 1730063;
do
{
v8 = (_ACE_HEADER *)((char *)Acl + *p_AclSize);
if( &v6[1] >= v8 )
break;
p_AceSize = &v6->AceSize;
if( (USHORT *)(((unsigned __int64)&v6->AceSize + 1) & 0xFFFFFFFFFFFFFFFEui64) != &v6->AceSize )
break;
v10 = *p_AceSize;
if( (_ACE_HEADER *)((char *)v6 + v10) > v8 )
break;
AceType = v6->AceType;
if( (unsigned __int8)AceType <= 0x14u && _bittest(&v7, AceType) )
{
if( ((v10 + 3) & 0xFFFFFFFFFFFFFFFCui64) != v10 )
return;
if( (unsigned int)v10 < 0x10 )
return;
if( v6[2].AceType != 1 )
return;
AceFlags = v6[2].AceFlags;
if( (unsigned __int8)AceFlags > 0xFu || v10 < 4 * AceFlags + 16 )
return;
}
else if( (_BYTE)AceType == 4 )
{
if( Acl->AclRevision < 3u || !RtlpValidCompoundAce(v6) )
return;
}
else if( (unsigned __int8)(AceType - 5) <= 3u
|| (unsigned __int8)(AceType - 11) <= 1u
|| (unsigned __int8)(AceType - 15) <= 1u )
{
if( Acl->AclRevision < 4u || !RtlpValidObjectAce(v6) )
return;
}
else if( (_BYTE)AceType == 18 )
{
if( !RtlpValidAttributeAce(v6) )
return;
}
else if( (_BYTE)AceType == 21 )
{
if( !RtlpValidAccessFilterAce((INT64)v6) )
return;
}
else if( (unsigned int)v10 < 4 )
{
return;
}
++v5;
v6 = (_ACE_HEADER *)((char *)v6 + *p_AceSize);
}
while( v5 < Acl->AceCount );
}
}
}
}Referenced by:
CMFCreateSecurityDescriptor
RtlAddAccessFilterAce
RtlAddAce
RtlAddMandatoryAce
RtlAddProcessTrustLabelAce
RtlAddResourceAttributeAce
RtlDeleteAce
RtlValidRelativeSecurityDescriptor
RtlValidSecurityDescriptor
RtlpAddKnownAce
RtlpAddKnownObjectAce
SddlAddAccessFilterAce
SddlAddMandatoryAce
SddlAddProcessTrustLabelAce
SddlAddScopedPolicyIDAce
SeCaptureSecurityDescriptor
SeValidSecurityDescriptor
SepCheckAcl