HalpTimerDpcRoutine

VOID __stdcall HalpTimerDpcRoutine(KDPC *Dpc, PVOID Context, PVOID SystemArgument1, PVOID SystemArgument2){
  void *v4; 
  void *v5; 
  void *v6; 
  ULONG_PTR v7; 
  unsigned __int64 v8; 
  _KDPC *v9; 
  __int64 v10; 
  __int64 v11; 
  __int64 v12; 
  signed __int64 v13; 
  __int64 v14; 
  __int64 v15; 
  unsigned __int64 v16; 
  signed __int64 v17; 
  int v18; 
  __int64 v19; 
  __int64 v20; 
  unsigned __int64 v21; 
  __int64 v22; 
  int v23[8]; 
  KeQueryPerformanceCounter(0i64);
  v7 = HalpAlwaysOnCounter;
  if( HalpAlwaysOnCounter )
  {
    if( *(_DWORD *)(HalpAlwaysOnCounter + 220) == 64 )
    {
      HalpTimerGetInternalData((KDPC *)HalpAlwaysOnCounter, v4, v5, v6);
      v11 = (*(__int64(__fastcall **)(__int64))(v7 + 112))(v10);
      v12 = *(_QWORD *)(v7 + 208);
      v13 = v11;
    }
    else
    {
      do
      {
        v12 = *(_QWORD *)(v7 + 208);
        do
        {
          v14 = *(_QWORD *)(v7 + 200);
          HalpTimerGetInternalData((KDPC *)v7, v4, v5, v6);
          v16 = (*(__int64(__fastcall **)(__int64))(v7 + 112))(v15);
          _InterlockedOr(v23, 0);
          v17 = *(_QWORD *)(v7 + 200);
        }
        while( v14 != v17 );
      }
      while( v12 != *(_QWORD *)(v7 + 208) );
      v18 = *(_DWORD *)(v7 + 220);
      if( ((v14 ^ v16) & (1i64 << ((unsigned __int8)v18 - 1))) != 0 )
      {
        v19 = 1i64 << v18;
        if( v18 == 64 )
          v20 = -1i64;
        else
          v20 = v19 - 1;
        v21 = v14 & v20;
        v13 = v16 | v14 ^ v21;
        if( v16 < v21 )
          v13 += v19;
        _InterlockedCompareExchange64((volatile signed __int64 *)(v7 + 200), v13, v17);
      }
      else
      {
        if( v18 == 64 )
          v22 = -1i64;
        else
          v22 = (1i64 << v18) - 1;
        v13 = v16 | v14 & ~v22;
      }
    }
    if( v12 + v13 < HalpTimerLastAlwaysOnCounterValue )
      KeBugCheckEx(0x5Cu, 0x113ui64, 0x27ui64, v12 + v13, HalpTimerLastAlwaysOnCounterValue);
    HalpTimerLastAlwaysOnCounterValue = v12 + v13;
  }
  v8 = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
  if( (unsigned __int64)(*(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart - HalpTimerLastDpc) >= 0x47868C00 )
  {
    v9 = (_KDPC *)_InterlockedExchange64((volatile __int64 *)KiProcessorBlock + 28, 0i64);
    if( v9 )
      KiInsertQueueDpc(v9, (PVOID)(unsigned int)v8, (PVOID)HIDWORD(v8), 0i64, 0);
    HalpTimerLastDpc = v8;
  }
}

Referenced by:

No references.