RtlFindFirstRunClear
UINT64 __stdcall RtlFindFirstRunClear(_RTL_BITMAP *BitMapHeader, UINT64 *StartingIndex){
unsigned int SizeOfBitMap;
unsigned int v3;
unsigned int *Buffer;
unsigned int v7;
unsigned int *v8;
unsigned int v9;
__int64 v10;
unsigned int v11;
unsigned int i;
unsigned int *v14;
SizeOfBitMap = BitMapHeader->SizeOfBitMap;
v3 = 0;
if( !BitMapHeader->SizeOfBitMap )
{
*(_DWORD *)StartingIndex = 0;
return v3;
}
Buffer = BitMapHeader->Buffer;
v7 = 0;
v8 = &Buffer[(unsigned __int64)(SizeOfBitMap - 1) >> 5];
if( Buffer != v8 && *Buffer == -1 )
{
v7 = 32;
for( ++Buffer; Buffer < v8 && *Buffer == -1; ++Buffer )
v7 += 32;
}
for( ; v7 < SizeOfBitMap; ++v7 )
{
if( !_bittest((const signed __int32 *)BitMapHeader->Buffer, v7) )
break;
}
v9 = 0;
if( Buffer == v8 )
goto LABEL_13;
v10 = v7 & 0x1F;
if( (*Buffer & ~*((_DWORD *)qword_140011CE0 + v10)) != 0 )
goto LABEL_13;
v9 = 32 - v10;
if( (_DWORD)v10 != 33 )
{
v14 = Buffer + 1;
while( v14 < v8 && !*v14 )
{
++v14;
v9 += 32;
if( v9 == -1 )
goto LABEL_17;
}
LABEL_13:
v11 = BitMapHeader->SizeOfBitMap;
for( i = v9 + v7; i < v11; ++v9 )
{
if( _bittest((const signed __int32 *)BitMapHeader->Buffer, i) )
break;
if( v9 == -1 )
break;
++i;
}
}
LABEL_17:
*(_DWORD *)StartingIndex = v7;
return v9;
}Referenced by:
PnprMirrorMarkedPages