EmonPauseProfiling

UINT64 __stdcall EmonPauseProfiling(){
  unsigned int v0; 
  UINT64 result; 
  __int64 v2; 
  unsigned int v3; 
  int *v4; 
  __int64 v5; 
  unsigned int v6; 
  UINT64 v7; 
  int *v8; 

  v0 = 0;
  result = *(&CmpDummyThreadEvent + 1223);
  v2 = *(&CmpDummyThreadEvent + 620) + 16i64 * *(&CmpDummyThreadEvent + 1217) * KeGetPcr()->Prcb.Number;
  if( *(&CmpDummyThreadEvent + 1223) )
  {
    v3 = 390;
    v4 = (int *)v2;
    v0 = *(&CmpDummyThreadEvent + 1223);
    v5 = *(&CmpDummyThreadEvent + 1223);
    do
    {
      if( *v4 < 2 )
      {
        result = __readmsr(v3) & 0xFFBFFFFF;
        __writemsr(v3, result);
      }
      ++v3;
      v4 += 4;
      --v5;
    }
    while( v5 );
  }
  if( *(&CmpDummyThreadEvent + 1216) >= 2u )
  {
    v6 = *(&CmpDummyThreadEvent + 1217);
    v7 = __readmsr(0x38Fu);
    if( v0 < *(&CmpDummyThreadEvent + 1217) )
    {
      v8 = (int *)(v2 + 16i64 * v0);
      do
      {
        if( *v8 < 2 )
          _bittestandreset64((__int64 *)&v7, v0 - *(&CmpDummyThreadEvent + 1223) + 32);
        ++v0;
        v8 += 4;
      }
      while( v0 < v6 );
    }
    result = v7;
    __writemsr(0x38Fu, v7);
  }
  return result;
}

Referenced by:

No references.