PopFxCompleteComponentPerfState
void __fastcall PopFxCompleteComponentPerfState(__int64 a1, unsigned int a2, __int64 a3, unsigned __int8 a4){
signed __int32 v8;
__int64 v9;
int v10;
EVENT_DESCRIPTOR *i;
__int64 v12;
__int64 v13;
__int64 v14;
EVENT_DESCRIPTOR *v15;
v8 = _InterlockedExchangeAdd((volatile signed __int32 *)(a3 + 40), 0xFFFFFFFF);
v9 = *(_QWORD *)(a3 + 80);
v10 = v8 - 1;
for( i = 0i64;
(unsigned int)i < *(_DWORD *)(a3 + 56);
*(_QWORD *)(v13 + 8) = *(_QWORD *)(*(_QWORD *)(a3 + 48) + 8 * v12 + 8) )
{
v12 = (unsigned int)i;
i = (EVENT_DESCRIPTOR *)(unsigned int)((_DWORD)i + 1);
v12 *= 2i64;
v13 = *(_QWORD *)(a3 + 152) + 32i64 * *(unsigned int *)(*(_QWORD *)(a3 + 48) + 8 * v12);
*(_QWORD *)(v13 + 16) = *(_QWORD *)(a3 + 64);
*(_BYTE *)(v13 + 24) = 0;
}
PopDiagTraceFxPerfRequestProgress((__int64 *)a3, v10 & 7, i);
if( v10 >= 0 )
{
v10 = _InterlockedDecrement((volatile signed __int32 *)(a3 + 40));
if( (v10 & 0x8000000) == 0 )
PopFxAddLogEntry(*(_QWORD *)(a1 + 48), a2, 15, 1i64);
}
LOBYTE(v14) = a4;
(*(void(__fastcall **)(_QWORD, _QWORD, __int64, __int64))(a3 + 32))(*(_QWORD *)(a1 + 192), a2, v14, v9);
if( v10 < 0 )
{
_InterlockedDecrement((volatile signed __int32 *)(a3 + 40));
KeSetEvent((PRKEVENT)(a3 + 8), 0);
}
PopDiagTraceFxPerfRequestComplete((__int64 *)a3, a4, v15);
}Referenced by:
PopFxComponentPerfWork
PopFxIssueComponentPerfStateChanges
PopFxProcessWork