AnFwDisplayFade

INT64 __fastcall AnFwDisplayFade(){
  __int64 v0; 
  UINT64 *v1; 
  __int64 v2; 
  __int64 v3; 
  int SubRectangle; 
  unsigned int v5; 
  INT64 RegionContext; 
  INT64 v7; 
  INT64 v8; 
  PVOID v9; 
  PVOID v10; 
  int v11; 
  UINT64 v12; 
  int v13; 
  int v14; 
  unsigned int v15; 
  unsigned int v16; 
  unsigned int v17; 
  unsigned int v18; 
  unsigned int v19; 
  unsigned int v20; 
  int v21; 
  UINT64 v22; 
  UINT64 v23; 
  int v24; 
  int v25; 
  int v26; 
  _CM_KEY_CONTROL_BLOCK **v27; 
  unsigned int v28; 
  unsigned int v29; 
  unsigned int v30; 
  UINT64 v31; 
  UINT8 v32; 
  UINT8 v33; 
  __int64 *v34; 
  __int64 v35; 
  unsigned int v37; 
  IRP *Dpc; 
  char a5; 
  char v40; 
  char v41; 
  char v42; 
  unsigned int v43; 
  UINT64 BitsPerPixel; 
  UINT64 a4; 
  INT64 a1; 
  UINT64 *v47; 
  UINT64 *a3; 
  __int64 v49; 
  INT64 v50; 
  unsigned int v51; 
  int v52; 
  int v53; 
  __int64 v54; 
  __int64 v55; 
  INT64 v56; 
  __int128 v57[2]; 
  v53 = 0;
  v0 = 0i64;
  v54 = 0i64;
  v1 = 0i64;
  v55 = 0i64;
  v2 = 0i64;
  v43 = 0;
  v3 = 0i64;
  a4 = 0i64;
  a3 = 0i64;
  SubRectangle = 0;
  v5 = 0;
  a5 = 0;
  v47 = 0i64;
  a1 = 0i64;
  v50 = 0i64;
  v56 = 0i64;
  v49 = 0i64;
  memset(v57, 0, sizeof(v57));
  if( (dword_140C13310 & 0x2000) != 0 )
    return(unsigned int)SubRectangle;
  if( (dword_140C13310 & 0x200000) != 0 )
    goto LABEL_69;
  RegionContext = BgpTxtGetRegionContext(qword_140C133D0);
  v7 = BgpTxtGetRegionContext(RegionHandle);
  v8 = v7;
  if( !RegionContext || !v7 )
  {
    SubRectangle = -1073741670;
    goto LABEL_36;
  }
  *(_OWORD *)&OrigKCB = *(_OWORD *)RegionContext;
  qword_140C10E20 = *(_QWORD *)(RegionContext + 16);
  dword_140C10E28 = *(_DWORD *)(RegionContext + 24);
  *(_OWORD *)&xmmword_140C10E48 = *(_OWORD *)v7;
  qword_140C10E58 = *(_QWORD *)(v7 + 16);
  dword_140C10E60 = *(_DWORD *)(v7 + 24);
  BgpFwFreeMemory(RegionContext);
  BgpFwFreeMemory(v8);
  AnFwpDisableProgressTimer();
  AnFwDisableBackgroundUpdateTimer();
  v40 = 0;
  v41 = 0;
  LODWORD(BitsPerPixel) = BgpGetBitsPerPixel(v10, v9);
  LogFwStat(1i64, 5i64, 0i64);
  if( !qword_140C13358 )
  {
    v42 = 1;
    goto LABEL_13;
  }
  v42 = 0;
  v11 = BgpGxParseBitmap(qword_140C13358, &v50);
  v1 = (UINT64 *)v50;
  SubRectangle = v11;
  if( v11 < 0 )
    goto LABEL_41;
  v12 = *(unsigned int *)(v50 + 8);
  if( (_DWORD)BitsPerPixel != (_DWORD)v12 )
  {
    v13 = BgpGxRectangleSize(*(unsigned int *)v50, *(unsigned int *)(v50 + 4), v12);
    v50 = 0i64;
    v5 = ((v13 + 15) & 0xFFFFFFF0) + 32;
    SubRectangle = BgpGxConvertRectangleEx((INT64)v1, (unsigned int)BitsPerPixel, &v50, 0);
    if( SubRectangle >= 0 )
    {
      *(_QWORD *)&v57[0] = v1;
      v1 = (UINT64 *)v50;
      v43 = 1;
      goto LABEL_10;
    }
LABEL_41:
    v3 = v49;
LABEL_69:
    AnFwpDisableProgressTimer();
    AnFwDisableBackgroundUpdateTimer();
    SubRectangle = BgpClearScreen(0xFF000000ui64);
    if( v0 )
      BgpGxRectangleDestroy(v0);
    if( v54 )
      BgpGxRectangleDestroy(v54);
    if( v1 )
      BgpGxRectangleDestroy((__int64)v1);
    if( v55 )
      BgpGxRectangleDestroy(v55);
    if( v2 )
      BgpGxRectangleDestroy(v2);
    if( v3 )
      BgpGxRectangleDestroy(v3);
    return(unsigned int)SubRectangle;
  }
LABEL_10:
  v14 = BgpGxRectangleSize(*(unsigned int *)v1, *((unsigned int *)v1 + 1), (unsigned int)BitsPerPixel);
  v15 = qword_140C1336C + dword_140C13374;
  v16 = HIDWORD(qword_140C1336C) + dword_140C13378;
  v17 = OrigKCB + *((_DWORD *)&OrigKCB + 2);
  v5 += ((v14 + 15) & 0xFFFFFFF0) + 32 + 2 * (((v14 + 15) & 0xFFFFFFF0) + 32);
  v18 = HIDWORD(OrigKCB) + *((_DWORD *)&OrigKCB + 3);
  if( (unsigned int)OrigKCB <= (int)qword_140C1336C + dword_140C13374
    && (unsigned int)OrigKCB >= (unsigned int)qword_140C1336C
    && HIDWORD(OrigKCB) >= HIDWORD(qword_140C1336C)
    && HIDWORD(OrigKCB) <= v16 )
  {
    if( v17 < (unsigned int)qword_140C1336C || v17 > v15 || v18 < HIDWORD(qword_140C1336C) || v18 > v16 )
      goto LABEL_51;
    v40 = 1;
  }
  v19 = xmmword_140C10E48 + *((_DWORD *)&xmmword_140C10E48 + 2);
  v20 = HIDWORD(xmmword_140C10E48) + *((_DWORD *)&xmmword_140C10E48 + 3);
  if( (unsigned int)xmmword_140C10E48 >= (unsigned int)qword_140C1336C
    && (unsigned int)xmmword_140C10E48 <= v15
    && HIDWORD(xmmword_140C10E48) >= HIDWORD(qword_140C1336C)
    && HIDWORD(xmmword_140C10E48) <= v16 )
  {
    if( v19 >= (unsigned int)qword_140C1336C && v19 <= v15 && v20 >= HIDWORD(qword_140C1336C) && v20 <= v16 )
    {
      v41 = 1;
      goto LABEL_12;
    }
LABEL_51:
    SubRectangle = -1073741823;
    goto LABEL_36;
  }
LABEL_12:
  if( !v40 )
  {
LABEL_13:
    v21 = BgpGxReadRectangle(&a1, &OrigKCB);
    v0 = a1;
    SubRectangle = v21;
    if( v21 < 0 )
      goto LABEL_36;
    v22 = *(unsigned int *)a1;
    v23 = *(unsigned int *)(a1 + 4);
    v47 = (UINT64 *)a1;
    v24 = BgpGxRectangleSize(v22, v23, (unsigned int)BitsPerPixel);
    v5 += 2 * (((v24 + 15) & 0xFFFFFFF0) + 32) + ((v24 + 15) & 0xFFFFFFF0) + 32;
  }
  if( !v41 )
  {
    v25 = BgpGxReadRectangle(&v56, &xmmword_140C10E48);
    v2 = v56;
    SubRectangle = v25;
    if( v25 < 0 )
      goto LABEL_36;
    v26 = BgpGxRectangleSize(*(unsigned int *)v56, *(unsigned int *)(v56 + 4), (unsigned int)BitsPerPixel);
    v5 += 2 * (((v26 + 15) & 0xFFFFFFF0) + 32) + ((v26 + 15) & 0xFFFFFFF0) + 32;
  }
  v27 = (_CM_KEY_CONTROL_BLOCK **)qword_140C1336C;
  v28 = Color;
  a1 = qword_140C1336C;
  if( !v42 )
  {
    SubRectangle = BgpGxFindSubRectangle(v1, (unsigned int)Color, &a3, &a4, &a5);
    if( SubRectangle >= 0 )
    {
      v29 = v43;
      *((_QWORD *)v57 + v43) = v1;
      v43 = v29 + 1;
      if( a5 )
      {
        v42 = 1;
        v1 = 0i64;
      }
      else
      {
        LODWORD(a1) = a4 + a1;
        HIDWORD(a1) += HIDWORD(a4);
        v27 = (_CM_KEY_CONTROL_BLOCK **)a1;
        v1 = a3;
      }
    }
  }
  if( !v40 )
  {
    SubRectangle = BgpGxFindSubRectangle(v47, v28, &a3, &a4, &a5);
    if( SubRectangle >= 0 )
    {
      v37 = v43;
      *((_QWORD *)v57 + v43) = v47;
      v43 = v37 + 1;
      if( a5 )
      {
        v47 = 0i64;
        v40 = 1;
      }
      else
      {
        v47 = a3;
        LODWORD(OrigKCB) = a4 + OrigKCB;
        HIDWORD(OrigKCB) += HIDWORD(a4);
      }
    }
  }
  if( !v41 )
  {
    SubRectangle = BgpGxFindSubRectangle((UINT64 *)v2, v28, &a3, &a4, &a5);
    if( SubRectangle >= 0 )
    {
      v30 = v43;
      *((_QWORD *)v57 + v43) = v2;
      v43 = v30 + 1;
      if( a5 )
      {
        v41 = 1;
        v2 = 0i64;
      }
      else
      {
        LODWORD(xmmword_140C10E48) = a4 + xmmword_140C10E48;
        HIDWORD(xmmword_140C10E48) += HIDWORD(a4);
        v2 = (__int64)a3;
      }
    }
  }
  if( !v42 )
  {
    v51 = *((_DWORD *)v1 + 1);
    v52 = *(_DWORD *)v1;
    SubRectangle = BgpGxRectangleCreate(&v51, BitsPerPixel, &v55);
    if( SubRectangle < 0 )
    {
      v0 = (__int64)v47;
      goto LABEL_36;
    }
    memset(*(_QWORD *)(v55 + 24), 0i64);
  }
  v0 = (__int64)v47;
  if( !v40 )
  {
    v51 = *((_DWORD *)v47 + 1);
    v52 = *(_DWORD *)v47;
    SubRectangle = BgpGxRectangleCreate(&v51, BitsPerPixel, &v54);
    if( SubRectangle < 0 )
      goto LABEL_36;
    memset(*(_QWORD *)(v54 + 24), 0i64);
  }
  if( v41 )
    goto LABEL_35;
  v51 = *(_DWORD *)(v2 + 4);
  v52 = *(_DWORD *)v2;
  SubRectangle = BgpGxRectangleCreate(&v51, BitsPerPixel, &v49);
  if( SubRectangle >= 0 )
  {
    memset(*(_QWORD *)(v49 + 24), 0i64);
LABEL_35:
    LogFwStat(0i64, 5i64, 0i64);
    dword_140C10DF4 = 0;
    byte_140C10E00 = v40;
    byte_140C10E01 = v41;
    byte_140C10E02 = v42;
    qword_140C10E30 = (_HHIVE **)v54;
    SubKeyCount = (UINT64 *)v55;
    Cell = (UINT64 *)v49;
    dword_140C10DF0 = 100;
    ChildKcb = v27;
    qword_140C10E08 = v0;
    qword_140C10E38 = (__int64)v1;
    qword_140C10E68 = v2;
    KeResetEvent(&stru_140CF2E80, v31, v32, v33, Dpc);
    KeInitializeTimerEx((PKTIMER)Timer, NotificationTimer);
    KeInitializeDpc(&stru_140CF2DC0, AnFwpFadeAnimationTimer, 0i64);
    byte_140CDAEA1 = 1;
    LogFwStat(1i64, 7i64, 0i64);
    KeSetCoalescableTimer((PKTIMER)Timer, 0i64, 0x1Eu, 0, &stru_140CF2DC0);
    dword_140C13310 |= 0x2000u;
    dword_140C1332C = v5;
  }
LABEL_36:
  if( v43 )
  {
    v34 = (__int64 *)v57;
    v35 = v43;
    do
    {
      BgpGxRectangleDestroy(*v34++);
      --v35;
    }
    while( v35 );
  }
  if( SubRectangle < 0 )
    goto LABEL_41;
  return(unsigned int)SubRectangle;
}

Referenced by:

BgDisplayFade