RtlAreBitsClear
UINT8 __stdcall RtlAreBitsClear(RTL_BITMAP *BitMapHeader, UINT64 StartingIndex, UINT64 a3){
int v3;
UINT8 result;
unsigned int *Buffer;
char v6;
unsigned int *v7;
unsigned int v8;
unsigned int *v9;
unsigned int *v10;
v3 = StartingIndex;
if( (unsigned int)StartingIndex >= BitMapHeader->SizeOfBitMap )
return 0;
if( (unsigned int)a3 <= 1 )
{
if( (_DWORD)a3 == 1 )
return !_bittest((const signed __int32 *)BitMapHeader->Buffer, StartingIndex);
return 0;
}
if( BitMapHeader->SizeOfBitMap - (int)StartingIndex < (unsigned int)a3 )
return 0;
Buffer = BitMapHeader->Buffer;
v6 = StartingIndex + a3 - 1;
v7 = &Buffer[(unsigned __int64)(unsigned int)StartingIndex >> 5];
v8 = *v7;
v9 = &Buffer[(unsigned __int64)(unsigned int)(v3 + a3 - 1) >> 5];
if( v7 == v9 )
return(v8 & (0xFFFFFFFF >> (32 - a3) << v3)) == 0;
if( (v8 & (-1 << v3)) != 0 )
return 0;
v10 = v7 + 1;
if( v10 == v9 )
return((0xFFFFFFFF >> ~v6) & *v10) == 0;
result = 0;
while( !*v10 )
{
if( ++v10 == v9 )
return((0xFFFFFFFF >> ~v6) & *v10) == 0;
}
return result;
}Referenced by:
CmpLoadHiveThread
CmpMountPreloadedHives
HalpMmAllocCtxMarkHiberPhase
HvGetHiveLogFileStatus
HvIsRangeDirty