BgpFwQueryBootGraphicsInformation

INT64 __fastcall BgpFwQueryBootGraphicsInformation(INT64 a1, INT64 a2){
  unsigned int v2; 
  UINT8 *v3; 
  int v5; 
  int v7; 
  UINT8 *v8; 
  UINT64 v9; 
  UINT8 *v10; 
  UINT8 *PoolWithTag; 
  INT64 v12; 
  UINT8 *v13; 
  INT64 v14; 
  v2 = 0;
  v3 = 0i64;
  if( (_DWORD)a1 )
  {
    if( (_DWORD)a1 == 2 )
    {
      *(_DWORD *)a2 = 8;
      *(_DWORD *)a2 = *(_DWORD *)Size + 8;
    }
    else if( (_DWORD)a1 == 3 )
    {
      *(_OWORD *)a2 = xmmword_140C133F0;
      *(_OWORD *)(a2 + 16) = xmmword_140C13400;
      *(_OWORD *)(a2 + 32) = xmmword_140C13410;
      *(_OWORD *)(a2 + 48) = xmmword_140C13420;
      *(_OWORD *)(a2 + 64) = xmmword_140C13430;
      *(_OWORD *)(a2 + 80) = xmmword_140C13440;
      *(_OWORD *)(a2 + 96) = xmmword_140C13450;
      *(_OWORD *)(a2 + 112) = xmmword_140C13460;
    }
    else if( qword_140C13358 || qword_140C13360 )
    {
      v8 = (UINT8 *)qword_140C13360;
      v9 = *(unsigned int *)Size;
      if( !qword_140C13360 )
      {
        LODWORD(v10) = BgpFwAllocateMemory(*(unsigned int *)Size);
        v3 = v10;
        if( !v10 )
          return(unsigned int)-1073741801;
        v8 = v10;
        memmove(v10, (UINT8 *)qword_140C13358, v9);
      }
      if( (int)v9 + 8 < (unsigned int)v9 )
      {
        v2 = -1073741675;
      }
      else
      {
        BgpFwReleaseLock();
        PoolWithTag = (UINT8 *)ExAllocatePoolWithTag(PagedPool, (unsigned int)(v9 + 8), 0x4B494742ui64);
        v13 = PoolWithTag;
        if( PoolWithTag )
        {
          *(_DWORD *)PoolWithTag = ((unsigned int)dword_140C13310 >> 23) & 1;
          *((_DWORD *)PoolWithTag + 1) = 8;
          memmove(PoolWithTag + 8, v8, v9);
          BgpFwAcquireLock(v14);
          *(_QWORD *)a2 = v13;
        }
        else
        {
          BgpFwAcquireLock(v12);
          v2 = -1073741801;
        }
      }
      if( v3 )
        BgpFwFreeMemory(v3);
    }
    else
    {
      *(_QWORD *)a2 = 0i64;
    }
  }
  else
  {
    *(_OWORD *)a2 = xmmword_140C132F0;
    *(_OWORD *)(a2 + 16) = xmmword_140C13300;
    *(_DWORD *)(a2 + 20) = 0;
    v5 = *(_DWORD *)(a2 + 20);
    if( (dword_140C13310 & 2) != 0 )
      v5 = 1;
    *(_DWORD *)(a2 + 20) = v5;
    if( ((*((_BYTE *)BgInternal + 2) - 1) & 0xFD) == 0 )
    {
      v7 = *(_DWORD *)(a2 + 8);
      *(_DWORD *)(a2 + 8) = *(_DWORD *)(a2 + 12);
      *(_DWORD *)(a2 + 12) = v7;
    }
    *(_DWORD *)(a2 + 28) = *((unsigned __int8 *)BgInternal + 2);
  }
  return v2;
}

Referenced by:

BgQueryBootGraphicsInformation