RtlCopyBitMap

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

  SizeOfBitMap = (unsigned int)(Destination->SizeOfBitMap - TargetBit);
  if( Source->SizeOfBitMap <= (unsigned int)SizeOfBitMap )
    SizeOfBitMap = Source->SizeOfBitMap;
  if( SizeOfBitMap )
  {
    Buffer = Destination->Buffer;
    v7 = Source->Buffer;
    v8 = &Buffer[(unsigned __int64)(unsigned int)TargetBit >> 5];
    if( v7 > v8 || v8 > &v7[(SizeOfBitMap - 1) >> 5] )
    {
      v9 = (unsigned __int64)(unsigned int)TargetBit >> 3;
      if( (TargetBit & 7) != 0 )
      {
        v14 = TargetBit & 0x1F;
        if( SizeOfBitMap >= 0x20 )
        {
          v18 = *v8;
          v19 = 1 << (32 - v14);
          v20 = SizeOfBitMap >> 5;
          SizeOfBitMap += -32i64 * (SizeOfBitMap >> 5);
          do
          {
            *v8++ = ((*v7 & (v19 - 1)) << v14) | v18 & ((1 << v14) - 1);
            v21 = *v7++ & ~(v19 - 1);
            v18 = (v21 >> (32 - v14)) | *v8 & ~((1 << v14) - 1);
            *v8 = v18;
            --v20;
          }
          while( v20 );
        }
        if( SizeOfBitMap )
        {
          v15 = *v7;
          v16 = 32 - v14;
          v17 = *v8;
          if( SizeOfBitMap > 32 - v14 )
          {
            *v8 = v17 & ((1 << v14) - 1) | ((v15 & ((1 << v16) - 1)) << v14);
            v8[1] = ((*v7 & (((1 << (SizeOfBitMap + v14 - 32)) - 1) << v16)) >> v16) | v8[1] & -(1 << (SizeOfBitMap + v14 - 32));
          }
          else
          {
            *v8 = ((v15 & ((1 << SizeOfBitMap) - 1)) << v14) | v17 & ~(((1 << 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);
        }
      }
    }
    else
    {
      RtlpCopyBitMapTailToHead(Source, Destination, (unsigned int)TargetBit, (unsigned int)SizeOfBitMap);
    }
  }
}

Referenced by:

HvpGrowDirtyVectors
PopSaveHiberContext
PspQueryRateControlHistory