PpmCheckSnapAllUtility

INT64 __fastcall PpmCheckSnapAllUtility(){
  unsigned __int64 v0; 
  unsigned __int16 v1; 
  unsigned __int64 v2; 
  __int64 v3; 
  __int64 v4; 
  __int64 v5; 
  __int64 v6; 
  unsigned __int64 v7; 
  unsigned __int64 v8; 
  unsigned __int64 v9; 
  unsigned __int64 v10; 
  unsigned __int64 v11; 
  int v12; 
  unsigned int v13; 
  __int64 v14; 
  unsigned __int64 v15; 
  unsigned __int64 v16; 
  unsigned __int64 v17; 
  unsigned __int64 v18; 
  unsigned __int64 v19; 
  unsigned __int64 v20; 
  unsigned __int64 v21; 
  INT64 result; 
  INT64 i; 
  unsigned int j; 
  __int64 v25; 
  PpmParkSnapNodeStatistics();
  v0 = qword_140C11268[0];
  v1 = 0;
  while( v0 )
  {
LABEL_3:
    _BitScanForward64(&v2, v0);
    v0 &= ~(1i64 << v2);
    v3 = (unsigned int)KiProcessorNumberToIndexMappingTable[64 * v1 + (unsigned __int8)v2];
    if( (unsigned int)v3 >= (unsigned int)KeNumberProcessors_0 )
    {
      v4 = 0i64;
    }
    else
    {
      _mm_lfence();
      v4 = (__int64)*(&KiProcessorBlock + v3);
    }
    v5 = *(_QWORD *)(v4 + 33144);
    if( v5 )
    {
      v6 = *(_QWORD *)(v5 + 128) - *(_QWORD *)(v5 + 32);
      v7 = *(_QWORD *)(v5 + 136) - *(_QWORD *)(v5 + 40);
      v8 = v7;
      v9 = *(_QWORD *)(v5 + 176) - *(_QWORD *)(v5 + 80);
      if( !v7 )
        v8 = 1i64;
      v10 = (*(_QWORD *)(v5 + 160) - *(_QWORD *)(v5 + 64)) / v8;
      v11 = *(_QWORD *)(v5 + 176) - *(_QWORD *)(v5 + 80);
      v12 = v10;
      if( !v9 )
        v11 = 1i64;
      v13 = (unsigned __int8)(100i64 * (*(_QWORD *)(v5 + 184) - *(_QWORD *)(v5 + 88)) / v11);
      if( v13 > 0x64 )
        LOWORD(v13) = 100;
      v14 = *(_QWORD *)(v4 + 33136);
      if( !(_DWORD)v10 )
      {
        if( v14 )
          v12 = *(_DWORD *)(v14 + 120);
        else
          v12 = 100;
      }
      v15 = *(_QWORD *)(v5 + 176) - *(_QWORD *)(v5 + 80);
      if( !v9 )
        v15 = 1i64;
      v16 = 100i64 * (*(_QWORD *)(v5 + 192) - *(_QWORD *)(v5 + 96)) / v15;
      if( (unsigned __int8)v16 > 0x64u )
        LOBYTE(v16) = 100;
      *(_BYTE *)(v5 + 328) = v16;
      v17 = v9;
      if( !v9 )
        v17 = 1i64;
      v18 = 100i64 * (*(_QWORD *)(v5 + 200) - *(_QWORD *)(v5 + 104)) / v17;
      if( (unsigned __int8)v18 > 0x64u )
        LOBYTE(v18) = 100;
      *(_BYTE *)(v5 + 329) = v18;
      if( !v9 )
        v9 = 1i64;
      v19 = 100i64 * (*(_QWORD *)(v5 + 208) - *(_QWORD *)(v5 + 112)) / v9;
      if( (unsigned __int8)v19 > 0x64u )
        LOBYTE(v19) = 100;
      *(_BYTE *)(v5 + 330) = v19;
      *(_WORD *)(v4 + 33180) = v13;
      if( v14 )
      {
        v20 = v7;
        if( !v7 )
          v20 = 1i64;
        v21 = (*(_QWORD *)(v5 + 152) - *(_QWORD *)(v5 + 56)) / v20;
        if( !(_DWORD)v21 )
          LODWORD(v21) = *(_DWORD *)(v14 + 116);
        *(_DWORD *)(v14 + 116) = v21;
        *(_DWORD *)(v14 + 120) = v12;
      }
      *(_OWORD *)(v5 + 32) = *(_OWORD *)(v5 + 128);
      *(_OWORD *)(v5 + 48) = *(_OWORD *)(v5 + 144);
      *(_OWORD *)(v5 + 64) = *(_OWORD *)(v5 + 160);
      *(_OWORD *)(v5 + 80) = *(_OWORD *)(v5 + 176);
      *(_OWORD *)(v5 + 96) = *(_OWORD *)(v5 + 192);
      *(_OWORD *)(v5 + 112) = *(_OWORD *)(v5 + 208);
      if( *(_BYTE *)(v4 + 33188) )
      {
        *(_QWORD *)(v4 + 33224) += v7;
        *(_QWORD *)(v4 + 33232) += v6;
      }
    }
  }
  while( 1 )
  {
    result = ++v1;
    if( v1 >= (unsigned int)(unsigned __int16)PpmCheckRegistered )
      break;
    v0 = qword_140C11268[v1];
    if( v0 )
      goto LABEL_3;
  }
  for( i = PpmPerfDomainHead; (INT64 *)i != &PpmPerfDomainHead; i = *(_QWORD *)i )
  {
    for( j = 0; j < *(_DWORD *)(i + 200); ++j )
    {
      result = j;
      v25 = *(_QWORD *)(i + 216) + 136i64 * j;
      if( *(_DWORD *)(v25 + 16) == 1 )
        PpmPerfSnapUtility(*(_QWORD *)v25);
    }
  }
  LOBYTE(result) = 1;
  return result;
}

Referenced by:

No references.