SepConstrainByConstraintMask
VOID __stdcall SepConstrainByConstraintMask(INT64 a1, INT64 a2, CHAR *a3, CHAR *a4, BOOL *a5, UINT64 a6, _BYTE *a7){
int v7;
int v8;
int v9;
signed __int64 v10;
BOOL *v11;
__int64 v12;
int v13;
v7 = a2;
v8 = a1;
*a7 = 0;
if( (_DWORD)a1 != -1 )
{
if( (_DWORD)a6 )
{
v10 = a4 - a3;
v11 = a5;
v12 = (unsigned int)a6;
do
{
v13 = v8 & *(_DWORD *)a3;
if( v13 != *(_DWORD *)a3 )
{
*a7 = 1;
*(_DWORD *)a3 = v13;
if( (v7 & 0x2000000) != 0 )
{
if( v13 )
{
*(_DWORD *)&a3[v10] = 0;
if( a5 )
*v11 = 1;
}
else
{
*(_DWORD *)&a3[v10] = -1073741790;
if( a5 )
*v11 = 0;
}
}
else
{
*(_DWORD *)&a3[v10] = -1073741790;
if( a5 )
*v11 = *(_DWORD *)a3 != 0;
}
}
a3 += 4;
++v11;
--v12;
}
while( v12 );
}
else
{
v9 = a1 & *(_DWORD *)a3;
if( v9 != *(_DWORD *)a3 )
{
*a7 = 1;
*(_DWORD *)a3 = v9;
if( (a2 & 0x2000000) != 0 )
{
if( v9 )
{
*(_DWORD *)a4 = 0;
if( a5 )
*a5 = 1;
}
else
{
*(_DWORD *)a4 = -1073741790;
if( a5 )
*a5 = 0;
}
}
else
{
*(_DWORD *)a4 = -1073741790;
if( a5 )
*a5 = *(_DWORD *)a3 != 0;
}
}
}
}
}Referenced by:
SeAccessCheckByTypeWithAdminlessChecks
SepAccessCheckAndAuditAlarmWithAdminlessChecks