RtlpCompareKnownObjectAces
bool __fastcall RtlpCompareKnownObjectAces(unsigned __int8 *a1, unsigned __int8 *a2){
__int64 v4;
int v5;
_DWORD *v6;
int v7;
unsigned __int8 *v8;
int v9;
_DWORD *v10;
unsigned __int8 *v11;
v4 = *a2;
if( *((_BYTE *)&RtlBaseAceType + v4) != *((_BYTE *)&RtlBaseAceType + *a1)
|| *((_BYTE *)&RtlIsSystemAceType + v4) && ((a1[1] ^ a2[1]) & 0xC0) != 0 )
{
return 0;
}
v5 = *((_DWORD *)a2 + 2) & 1;
v6 = (_DWORD *)((unsigned __int64)(a2 + 12) & -(__int64)(v5 != 0));
v7 = *((_DWORD *)a2 + 2) & 2;
if( v7 )
v8 = &a2[16 * v5 + 12];
else
v8 = 0i64;
v9 = *((_DWORD *)a1 + 2) & 1;
v10 = (_DWORD *)((unsigned __int64)(a1 + 12) & -(__int64)(v9 != 0));
if( (*((_DWORD *)a1 + 2) & 2) != 0 )
v11 = &a1[16 * v9 + 12];
else
v11 = 0i64;
if( v8 )
{
if( !v11
|| *(_DWORD *)v8 != *(_DWORD *)v11
|| *((_DWORD *)v8 + 1) != *((_DWORD *)v11 + 1)
|| *((_DWORD *)v8 + 2) != *((_DWORD *)v11 + 2)
|| *((_DWORD *)v8 + 3) != *((_DWORD *)v11 + 3) )
{
return 0;
}
}
else if( v11 )
{
return 0;
}
if( v6 )
{
if( !v10
|| *v6 != *v10
|| *(_DWORD *)(((unsigned __int64)(a2 + 12) & -(__int64)((*((_DWORD *)a2 + 2) & 1) != 0)) + 4) != *(_DWORD *)(((unsigned __int64)(a1 + 12) & -(__int64)((*((_DWORD *)a1 + 2) & 1) != 0)) + 4)
|| *(_DWORD *)(((unsigned __int64)(a2 + 12) & -(__int64)((*((_DWORD *)a2 + 2) & 1) != 0)) + 8) != *(_DWORD *)(((unsigned __int64)(a1 + 12) & -(__int64)((*((_DWORD *)a1 + 2) & 1) != 0)) + 8)
|| *(_DWORD *)(((unsigned __int64)(a2 + 12) & -(__int64)((*((_DWORD *)a2 + 2) & 1) != 0)) + 0xC) != *(_DWORD *)(((unsigned __int64)(a1 + 12) & -(__int64)((*((_DWORD *)a1 + 2) & 1) != 0)) + 0xC) )
{
return 0;
}
}
else if( v10 )
{
return 0;
}
return RtlEqualSid(
&a2[16 * v5 + 12 + (v7 != 0 ? 0x10 : 0)],
&a1[16 * v9 + 12 + ((*((_DWORD *)a1 + 2) & 2) != 0 ? 0x10 : 0)]) != 0;
}Referenced by:
RtlpIsDuplicateAce