IopAddPageRangeToPageMaps

void __fastcall IopAddPageRangeToPageMaps(__int64 a1, _RTL_BITMAP_EX *a2, UINT64 a3, UINT64 a4, unsigned int a5){
  _RTL_BITMAP_EX v9; 
  unsigned int v10; 
  unsigned int v11; 
  int v12; 
  _RTL_BITMAP_EX BitMapHeader; 

  RtlSetBitsEx(a2, a3, a4);
  if( a1 )
  {
    if( (a5 & 0xFF0) != 0 )
    {
      v9 = *a2;
      v10 = 56;
      v11 = (unsigned __int8)(a5 >> 4);
      v12 = (((unsigned __int64)(*(_QWORD *)(a1 + 48) + 7i64) >> 3) + 7) & 0xFFFFFFF8;
      for( BitMapHeader = v9; v11; v11 >>= 1 )
      {
        v10 += v12;
        if( v10 + v12 > (unsigned __int64)(*(_QWORD *)(a1 + 32) - 0x2000i64) )
          break;
        BitMapHeader.Buffer = (unsigned __int64 *)(a1 + v10);
        if( (v11 & 1) != 0 )
        {
          RtlSetBitsEx(&BitMapHeader, a3, a4);
        }
        else if( (v11 & 0x10) != 0 )
        {
          RtlClearBitsEx(&BitMapHeader, a3, a4);
          v11 &= ~0x10u;
        }
      }
    }
  }
}

Referenced by:

IopAddPageToPageMap