RtlAreBitsClearEx
VOID __stdcall RtlAreBitsClearEx(_RTL_BITMAP_EX *BitMapHeader, UINT64 StartingIndex, UINT64 Length){
unsigned __int64 *Buffer;
unsigned __int64 *v4;
unsigned __int64 *v5;
unsigned __int64 *i;
if( StartingIndex < BitMapHeader->SizeOfBitMap )
{
if( Length <= 1 )
{
if( Length == 1 )
_bittest64((const signed __int64 *)BitMapHeader->Buffer, StartingIndex);
}
else if( BitMapHeader->SizeOfBitMap - StartingIndex >= Length )
{
Buffer = BitMapHeader->Buffer;
v4 = &Buffer[StartingIndex >> 6];
v5 = &Buffer[(StartingIndex + Length - 1) >> 6];
if( v4 != v5 && (Buffer[StartingIndex >> 6] & (-1i64 << StartingIndex)) == 0 )
{
for( i = v4 + 1; i != v5; ++i )
{
if( *i )
break;
}
}
}
}
}Referenced by:
MiCheckHotPatchApplicable
MiCommitPageTablesForVad
MiHotAddPartitionMemory
MiMarkHugePfnGood
MiMarkRetpolineBits
MiReturnPageTablePageCommitment