PopFxCompleteComponentPerfState
VOID __stdcall PopFxCompleteComponentPerfState(
_POP_FX_DEVICE *FxDevice,
UINT64 Component,
_POP_FX_PERF_INFO *FxPerf,
UINT8 Succeeded){
unsigned int v6;
signed __int32 v8;
__int64 v9;
int v10;
unsigned int i;
__int64 v12;
__int64 v13;
__int64 v14;
v6 = Component;
v8 = _InterlockedExchangeAdd((volatile signed __int32 *)FxPerf + 10, 0xFFFFFFFF);
v9 = *((_QWORD *)FxPerf + 10);
v10 = v8 - 1;
for( i = 0; i < *((_DWORD *)FxPerf + 14); *(_QWORD *)(v13 + 8) = *(_QWORD *)(*((_QWORD *)FxPerf + 6) + 8 * v12 + 8) )
{
v12 = i++;
v12 *= 2i64;
v13 = *((_QWORD *)FxPerf + 19) + 32i64 * *(unsigned int *)(*((_QWORD *)FxPerf + 6) + 8 * v12);
*(_QWORD *)(v13 + 16) = *((_QWORD *)FxPerf + 8);
*(_BYTE *)(v13 + 24) = 0;
}
PopDiagTraceFxPerfRequestProgress(FxPerf, v10 & 7);
if( v10 >= 0 )
{
v10 = _InterlockedDecrement((volatile signed __int32 *)FxPerf + 10);
if( (v10 & 0x8000000) == 0 )
PopFxAddLogEntry(*((_QWORD *)FxDevice + 6), v6, 15, 1i64);
}
LOBYTE(v14) = Succeeded;
(*((void(__fastcall **)(_QWORD, _QWORD, __int64, __int64))FxPerf + 4))(*((_QWORD *)FxDevice + 24), v6, v14, v9);
if( v10 < 0 )
{
_InterlockedDecrement((volatile signed __int32 *)FxPerf + 10);
KeSetEvent((PRKEVENT)((char *)FxPerf + 8), 0, 0);
}
PopDiagTraceFxPerfRequestComplete(FxPerf, Succeeded);
}Referenced by:
PopFxComponentPerfWork
PopFxIssueComponentPerfStateChanges
PopFxProcessWork