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