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