HalpTimerDpcRoutine

VOID __stdcall HalpTimerDpcRoutine(_KDPC *Dpc, VOID *Context, VOID *SystemArgument1, VOID *SystemArgument2){
  void *v4; 
  void *v5; 
  void *v6; 
  PVOID 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 + 55) == 64 )
    {
      HalpTimerGetInternalData((_KDPC *)HalpAlwaysOnCounter, v4, v5, v6);
      v11 = (*((__int64(__fastcall **)(__int64))v7 + 14))(v10);
      v12 = *((_QWORD *)v7 + 26);
      v13 = v11;
    }
    else
    {
      do
      {
        v12 = *((_QWORD *)v7 + 26);
        do
        {
          v14 = *((_QWORD *)v7 + 25);
          HalpTimerGetInternalData((_KDPC *)v7, v4, v5, v6);
          v16 = (*((__int64(__fastcall **)(__int64))v7 + 14))(v15);
          _InterlockedOr(v23, 0);
          v17 = *((_QWORD *)v7 + 25);
        }
        while( v14 != v17 );
      }
      while( v12 != *((_QWORD *)v7 + 26) );
      v18 = *((_DWORD *)v7 + 55);
      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 + 25, v13, v17);
      }
      else
      {
        if( v18 == 64 )
          v22 = -1i64;
        else
          v22 = (1i64 << v18) - 1;
        v13 = v16 | v14 & ~v22;
      }
    }
    if( v12 + v13 < (unsigned __int64)qword_140C4A488 )
      KeBugCheckEx(0x5Cu, (PVOID)0x113, (PVOID)0x27, (PVOID)(v12 + v13), qword_140C4A488);
    qword_140C4A488 = (PVOID)(v12 + v13);
  }
  v8 = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
  if( (unsigned __int64)(*(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart - qword_140C4A498) >= 0x47868C00 )
  {
    v9 = (_KDPC *)_InterlockedExchange64((volatile __int64 *)&KiProcessorBlock->AcpiReserved, 0i64);
    if( v9 )
      KiInsertQueueDpc(v9, (VOID *)(unsigned int)v8, (VOID *)HIDWORD(v8), 0i64, 0);
    qword_140C4A498 = v8;
  }
}

Referenced by:

No references.