ResFwFreeContext
VOID __stdcall ResFwFreeContext(VOID *Context){
__int64 v2;
__int64 v3;
_MDL *v4;
if( (*(&SbiVmbusArrivalEvent + 92) & 0x100000) != 0 )
{
v2 = *(&stru_140C00F40 + 931);
v3 = **(&stru_140C00F40 + 931);
if( *(_UNKNOWN **)(*(&stru_140C00F40 + 931) + 8i64) != (_UNKNOWN *)((char *)&stru_140C00F40 + 7448) )
LABEL_15:
__fastfail(3u);
while( 1 )
{
if( *(_QWORD *)(v3 + 8) != v2 )
goto LABEL_15;
*(&stru_140C00F40 + 931) = v3;
*(_QWORD *)(v3 + 8) = (char *)&stru_140C00F40 + 7448;
if( (_UNKNOWN *)v2 == (_UNKNOWN *)((char *)&stru_140C00F40 + 7448) )
break;
BgpGxRectangleDestroy(*(_GRAPHICS_RECTANGLE **)(v2 + 48));
BgpFwFreeMemory((VOID *)v2);
v2 = *(&stru_140C00F40 + 931);
if( *(_UNKNOWN **)(*(&stru_140C00F40 + 931) + 8i64) != (_UNKNOWN *)((char *)&stru_140C00F40 + 7448) )
goto LABEL_15;
v3 = **(&stru_140C00F40 + 931);
}
*(&stru_140C00F40 + 1866) = 0;
if( *(&SbiVmbusArrivalEvent + 120) )
RaspClearCache();
AnFwDisableBackgroundUpdateTimer();
AnFwFadeCompletion();
LogFwReport();
if( *((_QWORD *)Context + 2) )
{
BgpFwReservePoolSwap(POP, 0i64, 0i64, 0i64);
MmFreePagesFromMdl(*((PMDL *)Context + 1));
ExFreePoolWithTag(*((PVOID *)Context + 1), 0);
}
*(&SbiVmbusArrivalEvent + 92) &= 0xFFEFF7FD;
*(&SbiVmbusArrivalEvent + 70) = qword_140C50460;
*(&SbiVmbusArrivalEvent + 71) = qword_140C50458;
*(&SbiVmbusArrivalEvent + 36) = 0i64;
*(&SbiVmbusArrivalEvent + 16) = 0i64;
*(&SbiVmbusArrivalEvent + 17) = 0i64;
ResFwBackgroundTransition(LIBRARY_DISABLE);
}
else
{
v4 = (_MDL *)*((_QWORD *)Context + 1);
if( v4 )
{
MmFreePagesFromMdl(v4);
ExFreePoolWithTag(*((PVOID *)Context + 1), 0);
}
}
}Referenced by:
BgFreeContext