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