RtlpApplyAclToObject
VOID __stdcall RtlpApplyAclToObject(_ACL *Acl, _GENERIC_MAPPING *GenericMapping, _GENERIC_MAPPING *ptr32){
unsigned int v5;
_ACL *v6;
int v7;
int v8;
int v9;
unsigned int AclRevision;
unsigned int GenericAll;
if( Acl )
{
v5 = 0;
v6 = Acl + 1;
if( Acl->AceCount )
{
v7 = 1651;
do
{
if( (v6->AclRevision < 0xBu || (unsigned __int8)(v6->AclRevision - 13) <= 1u) && (v6->Sbz1 & 8) == 0 )
{
v8 = *(_DWORD *)&v6->AceCount;
if( v8 < 0 )
{
v8 |= GenericMapping->GenericRead;
*(_DWORD *)&v6->AceCount = v8;
}
if( (v8 & 0x40000000) != 0 )
{
v8 |= GenericMapping->GenericWrite;
*(_DWORD *)&v6->AceCount = v8;
}
if( (v8 & 0x20000000) != 0 )
{
v8 |= GenericMapping->GenericExecute;
*(_DWORD *)&v6->AceCount = v8;
}
if( (v8 & 0x10000000) != 0 )
v8 |= GenericMapping->GenericAll;
v9 = v8 & 0xFFFFFFF;
*(_DWORD *)&v6->AceCount = v9;
AclRevision = v6->AclRevision;
if( (unsigned __int8)AclRevision <= 0xAu && _bittest(&v7, AclRevision) )
GenericAll = GenericMapping->GenericAll;
else
GenericAll = GenericMapping->GenericAll | 0x1000000;
*(_DWORD *)&v6->AceCount = v9 & GenericAll;
}
++v5;
v6 = (_ACL *)((char *)v6 + v6->AclSize);
}
while( v5 < Acl->AceCount );
}
}
}Referenced by:
ExpWnfSpecializeSecurityDescriptor
RtlpNewSecurityObject
RtlpSetSecurityObject