RtlValidAcl
UINT8 __stdcall RtlValidAcl(ACL *Acl){
unsigned __int16 *p_AclSize;
unsigned int v3;
ACE_HEADER *v4;
int v5;
ACE_HEADER *v6;
WORD *p_AceSize;
unsigned __int64 v8;
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 )
{
v3 = 0;
v4 = (ACE_HEADER *)&Acl[1];
if( !Acl->AceCount )
return 1;
v5 = 1730063;
while( 1 )
{
v6 = (ACE_HEADER *)((char *)Acl + *p_AclSize);
if( &v4[1] >= v6 )
break;
p_AceSize = &v4->AceSize;
if( (WORD *)(((unsigned __int64)&v4->AceSize + 1) & 0xFFFFFFFFFFFFFFFEui64) != &v4->AceSize )
break;
v8 = *p_AceSize;
if( (ACE_HEADER *)((char *)v4 + v8) > v6 )
break;
AceType = v4->AceType;
if( (unsigned __int8)AceType <= 0x14u && _bittest(&v5, AceType) )
{
if( ((v8 + 3) & 0xFFFFFFFFFFFFFFFCui64) != v8 )
return 0;
if( (unsigned int)v8 < 0x10 )
return 0;
if( v4[2].AceType != 1 )
return 0;
AceFlags = v4[2].AceFlags;
if( (unsigned __int8)AceFlags > 0xFu || v8 < 4 * AceFlags + 16 )
return 0;
}
else if( (_BYTE)AceType == 4 )
{
if( Acl->AclRevision < 3u || !RtlpValidCompoundAce(v4) )
return 0;
}
else if( (unsigned __int8)(AceType - 5) <= 3u
|| (unsigned __int8)(AceType - 11) <= 1u
|| (unsigned __int8)(AceType - 15) <= 1u )
{
if( Acl->AclRevision < 4u || !RtlpValidObjectAce(v4) )
return 0;
}
else if( (_BYTE)AceType == 18 )
{
if( !RtlpValidAttributeAce(v4) )
return 0;
}
else if( (_BYTE)AceType == 21 )
{
if( !RtlpValidAccessFilterAce((INT64)v4) )
return 0;
}
else if( (unsigned int)v8 < 4 )
{
return 0;
}
++v3;
v4 = (ACE_HEADER *)((char *)v4 + *p_AceSize);
if( v3 >= Acl->AceCount )
return 1;
}
}
}
return 0;
}Referenced by:
CMFCreateSecurityDescriptor
RtlAddAccessFilterAce
RtlAddAce
RtlAddMandatoryAce
RtlAddProcessTrustLabelAce
RtlAddResourceAttributeAce
RtlDeleteAce
RtlValidRelativeSecurityDescriptor
RtlValidSecurityDescriptor
RtlpAddKnownAce
RtlpAddKnownObjectAce
SddlAddAccessFilterAce
SddlAddMandatoryAce
SddlAddProcessTrustLabelAce
SddlAddScopedPolicyIDAce
SeCaptureSecurityDescriptor
SeValidSecurityDescriptor
SepCheckAcl