RtlAreBitsClearEx
BOOL __fastcall RtlAreBitsClearEx(INT64 a1, UINT64 a2, UINT64 a3){
const signed __int64 *v3;
__int64 v4;
UINT64 v5;
__int64 v6;
_QWORD *v7;
_QWORD *v8;
bool v9;
_QWORD *v10;
v3 = *(const signed __int64 **)a1;
if( a2 >= *(_QWORD *)a1 )
goto LABEL_7;
if( a3 <= 1 )
{
if( a3 == 1 )
{
v3 = *(const signed __int64 **)(a1 + 8);
LOBYTE(v3) = !_bittest64(v3, a2);
return(int)v3;
}
goto LABEL_7;
}
v3 = (const signed __int64 *)((char *)v3 - a2);
if( (unsigned __int64)v3 < a3 )
{
LABEL_7:
LOBYTE(v3) = 0;
return(int)v3;
}
v4 = *(_QWORD *)(a1 + 8);
v5 = a2 + a3 - 1;
v6 = *(_QWORD *)(v4 + 8 * (a2 >> 6));
v7 = (_QWORD *)(v4 + 8 * (a2 >> 6));
v3 = (const signed __int64 *)(v5 >> 6);
v8 = (_QWORD *)(v4 + 8 * (v5 >> 6));
if( v7 != v8 )
{
v3 = (const signed __int64 *)(-1i64 << a2);
if( (v6 & (-1i64 << a2)) == 0 )
{
v10 = v7 + 1;
if( v10 == v8 )
{
LABEL_14:
v9 = ((0xFFFFFFFFFFFFFFFFui64 >> ~(_BYTE)v5) & *v10) == 0;
goto LABEL_6;
}
while( !*v10 )
{
if( ++v10 == v8 )
goto LABEL_14;
}
}
LOBYTE(v3) = 0;
return(int)v3;
}
v9 = (v6 & (0xFFFFFFFFFFFFFFFFui64 >> (64 - (unsigned __int8)a3) << a2)) == 0;
LABEL_6:
LOBYTE(v3) = v9;
return(int)v3;
}Referenced by:
MiCheckHotPatchApplicable
MiCommitPageTablesForVad
MiHotAddPartitionMemory
MiMarkHugePfnGood
MiMarkRetpolineBits
MiReturnPageTablePageCommitment