MiClearVadCellBits
VOID __fastcall MiClearVadCellBits(UINT64 *a1, UINT64 a2, UINT64 a3, INT64 a4, INT64 a5, INT64 a6){
UINT64 v6;
UINT64 v7;
UINT64 v9;
UINT64 v11;
UINT64 v12;
int v13;
UINT64 v14;
UINT64 v15;
UINT64 v16;
UINT64 v17;
UINT64 v18;
int v19;
UINT64 v20;
unsigned __int64 v21;
UINT64 v22;
v6 = a3;
v7 = a1[1] - qword_140C4E0A0;
v9 = a2;
if( !a2 )
{
if( v7 )
goto LABEL_3;
v9 = 1i64;
}
if( v9 > a3 )
return;
LABEL_3:
v11 = 8 * v7;
if( a3 < v11 )
return;
v12 = v11 + *a1;
if( v9 >= v12 )
return;
v13 = 0;
if( v9 < v11 )
{
v9 = v11;
v13 = 1;
}
if( a3 >= v12 )
{
v6 = v12 - 1;
v13 = 1;
}
v14 = v6 - v9 + 1;
v15 = v9 - v11;
v16 = v6 - v11;
v17 = a1[8] - v11;
if( !*(_DWORD *)a6 )
{
RtlClearBitsEx((INT64)a1, v15, v14);
if( !v13 )
*(_DWORD *)a6 = 1;
}
v18 = a1[2];
v19 = 1;
if( v18 < v17 || a1[4] < v17 )
v19 = 0;
if( v18 > v15 )
{
if( v15 < v17 && v19 )
{
if( v16 >= v17 )
a1[2] = v17;
}
else
{
a1[2] = v15;
}
}
v20 = 0i64;
if( !a4 )
goto LABEL_32;
v21 = ((((*(unsigned int *)(a4 + 28) | ((unsigned __int64)*(unsigned __int8 *)(a4 + 33) << 32)) << 12) | 0xFFF)
+ 0xFFFF) >> 16;
if( v21 <= v11 )
{
v20 = 0i64;
LABEL_32:
if( !v11 )
v20 = 1i64;
goto LABEL_18;
}
v20 = v21 - v11;
if( !v20 )
goto LABEL_32;
LABEL_18:
if( v19 && v20 < v17 )
v20 = v17;
if( v20 <= v16 )
{
v22 = *a1;
if( a5
&& (((unsigned __int64)*(unsigned int *)(a5 + 24) >> 4) | ((unsigned __int64)*(unsigned __int8 *)(a5 + 32) << 28)) <= v22 + v11 )
{
v22 = (((unsigned __int64)*(unsigned int *)(a5 + 24) >> 4) | ((unsigned __int64)*(unsigned __int8 *)(a5 + 32) << 28))
- v11;
}
if( v20 < a1[4] && v22 - v20 >= a1[3] )
a1[4] = v20;
}
}Referenced by:
MiClearVadBits