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