PopFxPepPerfInfoQuery
NTSTATUS __fastcall PopFxPepPerfInfoQuery(_POP_FX_DEVICE *P3, UINT64 P4, UINT64 **a3){
ULONG_PTR v3;
int v4;
UINT64 *v5;
unsigned int v7;
UINT64 v8;
VOID **PoolWithTag;
unsigned int v10;
__int64 v11;
unsigned int v12;
VOID **v13;
UINT64 *v14;
__int16 v15;
UINT64 v16;
VOID **v17;
__int64 pullResult[9];
UINT64 v21;
v3 = P4;
LODWORD(v21) = 0;
pullResult[0] = 0i64;
v4 = 0;
v5 = 0i64;
if( !PopPluginQueryComponentPerfCapabilities(P3, P4, &v21) )
{
v4 = -1073741822;
goto LABEL_19;
}
v7 = v21;
v8 = 48 * (int)v21 + 8;
PoolWithTag = ExAllocatePoolWithTag(1ui64, v8, 1297630800i64);
v5 = (UINT64 *)PoolWithTag;
if( !PoolWithTag )
{
LABEL_4:
v4 = -1073741670;
goto LABEL_19;
}
memset(PoolWithTag, 0i64, v8);
*(_DWORD *)v5 = v7;
v10 = 0;
if( !v7 )
goto LABEL_20;
while( 1 )
{
v11 = 6i64 * v10;
PopPluginQueryComponentPerfSet(
P3,
v3,
v10,
(_PO_FX_PERF_STATE_UNIT *)&v5[v11 + 4],
(_PO_FX_PERF_STATE_TYPE *)&v5[v11 + 4] + 1,
&v5[v11 + 5],
&v5[v11 + 5],
&v5[v11 + 6]);
if( !HIDWORD(v5[v11 + 4]) )
{
v12 = v5[v11 + 5];
if( !v12 )
PopFxBugCheck(0x61Au, *((_QWORD *)P3 + 8), (ULONG_PTR)P3, v3);
v4 = RtlULongLongMult(v12, 0x10ui64, (ULONGLONG *)pullResult);
v13 = ExAllocatePoolWithTag(1ui64, pullResult[0], 1297630800i64);
v5[v11 + 6] = (UINT64)v13;
if( !v13 )
goto LABEL_4;
PopPluginQueryComponentPerfStates((__int64)P3, v3, v10, (__int64)v13);
}
v14 = &v5[v11];
PopPluginQueryComponentPerfSetName(P3, v3, v10, (UINT16 *)&v5[v11 + 1] + 1, 0i64);
v15 = WORD1(v5[v11 + 1]);
if( v15 )
break;
LOWORD(v5[v11 + 1]) = 0;
v5[v11 + 2] = 0i64;
LABEL_14:
if( ++v10 >= v7 )
goto LABEL_18;
}
v16 = *((unsigned __int16 *)v14 + 5);
LOWORD(v5[v11 + 1]) = v15 - 2;
v17 = ExAllocatePoolWithTag(1ui64, v16, 1297630800i64);
v5[v11 + 2] = (UINT64)v17;
if( v17 )
{
PopPluginQueryComponentPerfSetName(P3, v3, v10, (UINT16 *)v14 + 5, (WCHAR *)v17);
goto LABEL_14;
}
v4 = -1073741670;
LABEL_18:
if( v4 >= 0 )
{
LABEL_20:
*a3 = v5;
return v4;
}
LABEL_19:
PopFxPepPerfInfoFree(v5);
return v4;
}Referenced by:
PopFxRegisterComponentPerfStates