HalpCollectPmcCounters

void __fastcall HalpCollectPmcCounters(__int64 a1, __int64 a2){
  __int64 v2; 
  __int64 v5; 
  int i; 
  __int64 v7; 
  unsigned __int64 v8; 
  unsigned int v9; 
  __int64 v10; 
  unsigned __int64 v11; 
  __int64 v12; 
  __int64 **v13; 
  __int64 *v14; 
  unsigned int j; 
  __int64 v16; 
  unsigned __int64 v17; 
  unsigned int v18; 
  unsigned __int64 v19; 
  __int64 v20; 
  unsigned __int64 v21; 
  __int16 v22; 

  if( a1 )
  {
    _disable();
    v5 = 0i64;
    for( i = v22 & 0x200; (unsigned int)v5 < *(_DWORD *)(a1 + 20); v5 = (unsigned int)(v5 + 1) )
    {
      v7 = 32i64 * (unsigned int)v5;
      v8 = __readpmc(*(_DWORD *)(v7 + a1 + 28));
      v9 = *(_DWORD *)(v7 + a1 + 48);
      if( v9 < 0x40 )
        v10 = (1i64 << v9) - 1;
      else
        v10 = -1i64;
      v11 = v8 - *(_QWORD *)(v7 + a1 + 32);
      *(_QWORD *)(v7 + a1 + 32) = v8;
      v12 = *(_QWORD *)(v7 + a1 + 40) + (v11 & v10);
      *(_QWORD *)(v7 + a1 + 40) = v12;
      if( a2 )
        *(_QWORD *)(a2 + 8 * v5) = v12;
    }
  }
  else
  {
    LODWORD(v2) = KeGetPcr()->Prcb.Number;
    v13 = (__int64 **)(qword_140C4AD08 + 24 * v2);
    _disable();
    v14 = *v13;
    i = v22 & 0x200;
    while( v14 != (__int64 *)v13 )
    {
      for( j = 0; j < *((_DWORD *)v14 + 5); v14[v16 + 5] += v21 )
      {
        v16 = 4i64 * j;
        v17 = __readpmc(HIDWORD(v14[v16 + 3]));
        v18 = v14[v16 + 6];
        v19 = v17;
        if( v18 < 0x40 )
          v20 = (1i64 << v18) - 1;
        else
          v20 = -1i64;
        ++j;
        v21 = v20 & (v17 - v14[v16 + 4]);
        v14[v16 + 4] = v19;
      }
      v14 = (__int64 *)*v14;
    }
  }
  if( i )
    _enable();
}

Referenced by:

No references.