HvpAdjustBitmap
NTSTATUS __stdcall HvpAdjustBitmap(_HHIVE *Hive, UINT64 HiveLength, _FREE_DISPLAY *FreeDisplay){
_RTL_BITMAP *p_Display;
unsigned int v4;
unsigned int v7;
unsigned int v8;
unsigned int v9;
__int64 SizeOfBitMap;
unsigned int v11;
unsigned int *v13;
unsigned int *v14;
unsigned int *Buffer;
p_Display = &FreeDisplay->Display;
v4 = (unsigned int)HiveLength >> 12;
v7 = 256;
v8 = (((unsigned int)HiveLength >> 12) + 7) >> 3;
if( v8 )
v9 = (v8 + 255) & 0xFFFFFF00;
else
v9 = 256;
SizeOfBitMap = p_Display->SizeOfBitMap;
if( (_DWORD)SizeOfBitMap )
{
v11 = (unsigned int)(SizeOfBitMap + 7) >> 3;
if( v11 )
v7 = (v11 + 255) & 0xFFFFFF00;
}
else
{
v7 = 0;
}
if( v9 <= FreeDisplay->RealVectorSize )
{
p_Display->SizeOfBitMap = v4;
if( (unsigned int)SizeOfBitMap < v4 )
RtlClearBits(&FreeDisplay->Display, SizeOfBitMap, v4 - SizeOfBitMap);
return 0;
}
LOBYTE(SizeOfBitMap) = 1;
v13 = (unsigned int *)Hive->Allocate(v9, SizeOfBitMap, 959663427i64);
v14 = v13;
if( v13 )
{
FreeDisplay->RealVectorSize = v9;
Buffer = p_Display->Buffer;
memset(v13, 0i64, v9);
p_Display->SizeOfBitMap = v4;
p_Display->Buffer = v14;
if( Buffer )
{
memmove(v14, Buffer, v7);
Hive->Free(Buffer, v7);
}
return 0;
}
return -1073741670;
}Referenced by:
HvpAdjustHiveFreeDisplay