RtlCopyBitMapEx

VOID __stdcall RtlCopyBitMapEx(_RTL_BITMAP_EX *Source, _RTL_BITMAP_EX *Destination, UINT64 TargetBit){
  UINT64 SizeOfBitMap; 
  unsigned __int64 *Buffer; 
  unsigned __int64 *v7; 
  unsigned __int64 *v8; 
  UINT64 v9; 
  UINT64 v10; 
  UINT64 v11; 
  UINT64 v12; 
  _BYTE *v13; 
  UINT64 v14; 
  unsigned __int64 *v15; 
  __int64 v16; 
  UINT64 v17; 
  unsigned __int64 v18; 
  unsigned __int64 v19; 
  char v20; 
  __int64 v21; 

  SizeOfBitMap = Destination->SizeOfBitMap - TargetBit;
  if( Source->SizeOfBitMap <= SizeOfBitMap )
    SizeOfBitMap = Source->SizeOfBitMap;
  if( SizeOfBitMap )
  {
    Buffer = Destination->Buffer;
    v7 = Source->Buffer;
    v8 = &Buffer[TargetBit >> 6];
    if( v7 <= v8 && v8 <= &v7[(SizeOfBitMap - 1) >> 6] )
    {
      RtlpCopyBitMapTailToHeadEx((INT64)Source, (INT64)Destination, TargetBit, SizeOfBitMap);
    }
    else
    {
      v9 = TargetBit >> 3;
      if( (TargetBit & 7) != 0 )
      {
        v14 = TargetBit & 0x3F;
        v15 = &Buffer[TargetBit >> 6];
        if( SizeOfBitMap >= 0x40 )
        {
          v16 = *v15;
          v17 = SizeOfBitMap >> 6;
          SizeOfBitMap += -64i64 * (SizeOfBitMap >> 6);
          do
          {
            *v15++ = ((((1i64 << (64 - (unsigned __int8)v14)) - 1) & *v7) << v14) | v16 & ((1i64 << v14) - 1);
            v18 = ~((1i64 << (64 - (unsigned __int8)v14)) - 1) & *v7++;
            v16 = (v18 >> (64 - (unsigned __int8)v14)) | *v15 & ~((1i64 << v14) - 1);
            *v15 = v16;
            --v17;
          }
          while( v17 );
        }
        if( SizeOfBitMap )
        {
          v19 = *v7;
          v20 = 64 - v14;
          v21 = *v15;
          if( SizeOfBitMap > 64 - v14 )
          {
            *v15 = v21 & ((1i64 << v14) - 1) | ((v19 & ((1i64 << v20) - 1)) << v14);
            v15[1] = ((*v7 & (((1i64 << ((unsigned __int8)SizeOfBitMap + (unsigned __int8)v14 - 64)) - 1) << v20)) >> v20) | v15[1] & ~((1i64 << ((unsigned __int8)SizeOfBitMap + (unsigned __int8)v14 - 64)) - 1);
          }
          else
          {
            *v15 = ((v19 & ((1i64 << SizeOfBitMap) - 1)) << v14) | v21 & ~(((1i64 << SizeOfBitMap) - 1) << v14);
          }
        }
      }
      else
      {
        v10 = SizeOfBitMap;
        v11 = SizeOfBitMap & 7;
        v12 = v10 >> 3;
        if( v12 )
          memmove((char *)Buffer + v9, Source->Buffer, v12);
        if( v11 )
        {
          v13 = (char *)Destination->Buffer + v9 + v12;
          *v13 &= ~((1 << v11) - 1);
          *v13 |= (unsigned __int8)((1 << v11) - 1) & *((_BYTE *)Source->Buffer + v12);
        }
      }
    }
  }
}

Referenced by:

MiResizeAweBitMap
MiSelectRelocationStartHint