SepConstrainByMandatory
VOID __fastcall SepConstrainByMandatory(INT64 a1, INT64 a2, CHAR *a3, CHAR *a4, BOOL *a5, UINT64 a6){
int v6;
int v7;
signed __int64 v8;
BOOL *v9;
__int64 v10;
int v11;
v6 = a2;
if( *(_DWORD *)(a1 + 8) && (!*(_BYTE *)(a1 + 5) || !*(_BYTE *)(a1 + 4) || !*(_BYTE *)(a1 + 6)) )
{
if( (_DWORD)a6 )
{
v8 = a4 - a3;
v9 = a5;
v10 = (unsigned int)a6;
do
{
v11 = *(_DWORD *)a3 & *(_DWORD *)a1;
if( v11 != *(_DWORD *)a3 )
{
*(_DWORD *)a3 = v11;
if( (v6 & 0x2000000) != 0 )
{
if( v11 )
{
*(_DWORD *)&a3[v8] = 0;
if( a5 )
*(_BYTE *)v9 = 1;
}
else
{
*(_DWORD *)&a3[v8] = -1073741790;
if( a5 )
*(_BYTE *)v9 = 0;
}
}
else
{
*(_DWORD *)&a3[v8] = -1073741790;
if( a5 )
*(_BYTE *)v9 = *(_DWORD *)a3 != 0;
}
}
a3 += 4;
v9 = (BOOL *)((char *)v9 + 1);
--v10;
}
while( v10 );
}
else
{
v7 = *(_DWORD *)a3 & *(_DWORD *)a1;
if( v7 != *(_DWORD *)a3 )
{
*(_DWORD *)a3 = v7;
if( (a2 & 0x2000000) != 0 )
{
if( v7 )
{
*(_DWORD *)a4 = 0;
if( a5 )
*(_BYTE *)a5 = 1;
}
else
{
*(_DWORD *)a4 = -1073741790;
if( a5 )
*(_BYTE *)a5 = 0;
}
}
else
{
*(_DWORD *)a4 = -1073741790;
if( a5 )
*(_BYTE *)a5 = *(_DWORD *)a3 != 0;
}
}
}
}
}Referenced by:
SeAccessCheckByTypeWithAdminlessChecks
SepAccessCheckAndAuditAlarmWithAdminlessChecks
SepCommonAccessCheckExWithAdminlessChecks