PpmCapturePerformanceDistribution

INT64 __fastcall PpmCapturePerformanceDistribution(_DWORD *a1, unsigned int a2, int a3, __int64 a4, unsigned int *a5){
  unsigned __int16 *v9; 
  struct _KPRCB *v10; 
  struct _KPRCB *v11; 
  unsigned __int8 CurrentIrql; 
  int v13; 
  INT64 v14; 
  unsigned int v15; 
  UINT64 ProcessorNumber; 
  INT64 v17; 
  unsigned int v18; 
  unsigned int v19; 
  __int64 v20; 
  unsigned __int16 *v21[2]; 
  __int16 v22; 
  int v23; 
  __int16 v24; 
  int result; 
  INT64 result_4; 
  memset((INT64)&result, 0i64);
  v9 = *(unsigned __int16 **)a4;
  v19 = 4 * a3 + 4;
  v22 = *(_WORD *)(a4 + 8);
  v23 = 0;
  v24 = 0;
  LODWORD(ProcessorNumber) = 0;
  v20 = 0i64;
  v17 = (INT64)a1;
  v18 = a2;
  v21[1] = v9;
  v21[0] = 0i64;
  while( !(unsigned int)KeEnumerateNextProcessor(&ProcessorNumber, v21) )
  {
    KeGetPrcb((unsigned int)ProcessorNumber);
    v11 = v10;
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(2ui64);
    v13 = PpmCapturePerformanceDistributionCallback(v10, &v17);
    __writecr8(CurrentIrql);
    if( v13 < 0 )
    {
      result = 1310721;
      memset((INT64)&result_4, 0i64);
      KeAddProcessorAffinityEx(&result, *((_DWORD *)v11 + 9));
      v14 = PopExecuteOnTargetProcessors(
              (INT64)&result,
              (INT64)PpmCapturePerformanceDistributionCallback,
              (INT64)&v17,
              0i64);
      if( (int)v14 < 0 )
        return v14;
    }
  }
  v15 = v19;
  *a5 = v19;
  if( v15 > a2 )
    return 3221225476i64;
  *(_DWORD *)v17 = a3;
  return 0i64;
}

Referenced by:

ExpQuerySystemInformation