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