RtlFindLastBackwardRunClear
UINT64 __stdcall RtlFindLastBackwardRunClear(_RTL_BITMAP *BitMapHeader, UINT64 FromIndex, UINT64 *StartingRunIndex){
unsigned int *Buffer;
unsigned int *v5;
int v6;
unsigned int v7;
unsigned int *i;
if( BitMapHeader->SizeOfBitMap <= (unsigned int)FromIndex )
{
*(_DWORD *)StartingRunIndex = FromIndex;
return 0i64;
}
else
{
Buffer = BitMapHeader->Buffer;
v5 = &Buffer[(unsigned __int64)(unsigned int)FromIndex >> 5];
if( v5 != Buffer )
{
v6 = FromIndex & 0x1F;
if( (*v5 | ~*((_DWORD *)qword_140011CE0 + (unsigned int)(v6 + 1))) == -1 )
{
LODWORD(FromIndex) = FromIndex - v6 - 1;
for( --v5; v5 > Buffer && *v5 == -1; --v5 )
LODWORD(FromIndex) = FromIndex - 32;
}
}
while( (_DWORD)FromIndex != -1 && _bittest64((const signed __int64 *)Buffer, (unsigned int)FromIndex) == 1 )
LODWORD(FromIndex) = FromIndex - 1;
v7 = FromIndex;
if( (*((_DWORD *)qword_140011CE0 + (FromIndex & 0x1F)) & *v5) == 0 )
{
v7 = (FromIndex & 0xFFFFFFE0) - 1;
for( i = v5 - 1; i > Buffer && !*i; --i )
v7 -= 32;
}
while( v7 != -1 && !_bittest64((const signed __int64 *)Buffer, v7) )
--v7;
*(_DWORD *)StartingRunIndex = v7 + 1;
return(unsigned int)FromIndex - v7;
}
}Referenced by:
MiAttemptPageFileReductionApc
MiReduceMappedFileReadAhead