HalpTimerMeasureProcessorsWorker

VOID __stdcall HalpTimerMeasureProcessorsWorker(_EPROCESS *SourceProcess){
  int v2; 
  __int16 v3; 
  int v4; 
  int ActiveProcessorCount; 
  KPCR *Pcr; 
  int v7; 
  _KDPC *Timer; 
  unsigned int Latency; 
  UINT64 v10; 
  UINT64 v11; 
  unsigned __int64 v12; 
  _LARGE_INTEGER PerformanceFrequency; 
  int v14; 
  UINT64 v15; 
  UINT64 v16; 
  UINT64 v17; 
  UINT64 v18; 

  v15 = 0i64;
  v17 = 0i64;
  PerformanceFrequency.QuadPart = 0i64;
  v16 = 0i64;
  v18 = 0i64;
  v2 = *(_DWORD *)&SourceProcess->Pcb.gap0[16];
  v3 = v14;
  _disable();
  v4 = v3 & 0x200;
  ActiveProcessorCount = KeQueryActiveProcessorCountEx(0xFFFFu);
  Pcr = KeGetPcr();
  v7 = ActiveProcessorCount;
  Timer = (_KDPC *)HalpFindTimer(v2, 0, 0, 0, 1);
  HalpProcessorFence();
  if( _InterlockedExchangeAdd((volatile signed __int32 *)SourceProcess, 0xFFFFFFFF) != 1 )
  {
    do
      _mm_pause();
    while( *(_DWORD *)SourceProcess->Pcb.gap0 );
  }
  if( KeGetCurrentPrcb()->Number )
  {
    while( *(_DWORD *)&SourceProcess->Pcb.gap0[4] != KeGetCurrentPrcb()->Number )
      _mm_pause();
    KeQueryPerformanceCounter(&PerformanceFrequency);
    Latency = HalpTimerDetermineValidTimerPairReadLatency(Timer, (_KDPC *)HalpPerformanceCounter);
    HalpTimerReadTimerPairWithLatencyLimit(Latency, (__int64)Timer, HalpPerformanceCounter, &v16, &v18);
    _InterlockedIncrement((volatile signed __int32 *)&SourceProcess->Pcb.gap0[4]);
    while( *(_DWORD *)&SourceProcess->Pcb.gap0[8] != KeGetCurrentPrcb()->Number )
      _mm_pause();
    HalpTimerReadTimerPairWithLatencyLimit(Latency, (__int64)Timer, HalpPerformanceCounter, &v15, &v17);
    _InterlockedIncrement((volatile signed __int32 *)&SourceProcess->Pcb.gap0[8]);
    do
      _mm_pause();
    while( !*(_DWORD *)&SourceProcess->Pcb.gap0[12] );
    v10 = v15 - v16;
    v11 = 1000000 * v10 / HalpTimerScaleCounter(v17 - v18, PerformanceFrequency.QuadPart, 0xF4240ui64);
    *(_QWORD *)Pcr->HalReserved = 10000 * ((v11 + 5000) / 0x2710);
    v12 = 1000000 * ((v11 + 500000) / 0xF4240);
    Pcr->StallScaleFactor = v12 / 0xF4240;
    KeGetCurrentPrcb()->MHz = v12 / 0xF4240;
  }
  else
  {
    _InterlockedIncrement((volatile signed __int32 *)&SourceProcess->Pcb.gap0[4]);
    do
      _mm_pause();
    while( *(_DWORD *)&SourceProcess->Pcb.gap0[4] != v7 );
    KeStallExecutionProcessor(0x1E848u);
    _InterlockedIncrement((volatile signed __int32 *)&SourceProcess->Pcb.gap0[8]);
    do
      _mm_pause();
    while( *(_DWORD *)&SourceProcess->Pcb.gap0[8] != v7 );
    _InterlockedIncrement((volatile signed __int32 *)&SourceProcess->Pcb.gap0[12]);
  }
  if( v4 )
    _enable();
}

Referenced by:

No references.