KiBeginThreadAccountingPeriod

VOID __stdcall KiBeginThreadAccountingPeriod(_KPRCB *Prcb, _ETHREAD *Thread, UINT64 NetCycles){
  _ETHREAD *CurrentThread; 
  char v6; 
  char v7; 
  __int64 v8; 
  __int64 v9; 
  unsigned int v10; 
  unsigned int v11; 
  _QWORD *v12; 
  int v13; 
  __int64 v14; 
  __int64 v15; 
  __int64 v16; 
  CurrentThread = Thread;
  if( Thread )
  {
    v6 = 1;
  }
  else
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    v6 = 0;
  }
  v7 = *((_BYTE *)CurrentThread + 2);
  if( (v7 & 0x10) != 0 )
    *((_QWORD *)Prcb + 4057) = *((_QWORD *)Prcb + 4056);
  if( (v7 & 0x20) != 0 )
  {
    v8 = *((_QWORD *)Prcb + 4141);
    v9 = *((_QWORD *)Prcb + 4142);
    if( v8 && v9 )
    {
      if( *(_BYTE *)(v9 + 100) )
      {
        v10 = *(_DWORD *)(v9 + 116);
      }
      else
      {
        v10 = *(_DWORD *)(v9 + 72);
        if( v10 >= *(_DWORD *)(v8 + 368) )
          v10 = *(_DWORD *)(v8 + 368);
      }
    }
    else
    {
      v10 = 100;
    }
    if( v10 < 0x4B )
      v11 = v10 / 0x19;
    else
      v11 = 3;
    v12 = (_QWORD *)((char *)Prcb + 16 * v11 + 8 * *((unsigned __int8 *)Prcb + 33208) + 32576);
    *v12 += NetCycles;
  }
  if( (v7 & 0x40) != 0 )
  {
    v16 = *((_QWORD *)CurrentThread + 121);
    if( v16 )
      *(_BYTE *)(v16 + 64) = 1;
  }
  *((_BYTE *)Prcb + 32) = 0;
  if( v6 )
  {
    if( (v7 & 0x36) == 0 )
    {
      _enable();
      return;
    }
    if( *((_QWORD *)CurrentThread + 45) )
      KiBeginCounterAccumulation((_KTHREAD *)CurrentThread, 1u);
    _enable();
    if( (*((_BYTE *)CurrentThread + 2) & 4) != 0 )
    {
      v13 = *((_DWORD *)CurrentThread + 30);
      if( (v13 & 0x800) == 0 )
      {
        if( (v13 & 0x600) != 0 )
          return;
        v14 = *((_QWORD *)CurrentThread + 13);
        if( !v14 )
          return;
        v15 = *((unsigned int *)Prcb + 54) + v14;
        if( !v15 )
          return;
        while( (*(_BYTE *)(v15 + 112) & 2) == 0 )
        {
          v15 = *(_QWORD *)(v15 + 408);
          if( !v15 )
            return;
        }
      }
      KiInsertDeferredPreemptionApc(Prcb, (_KTHREAD *)CurrentThread, 1u);
    }
  }
  else if( (v7 & 2) != 0 )
  {
    KiBeginCounterAccumulation((_KTHREAD *)CurrentThread, 0);
  }
}

Referenced by:

KiIpiInterrupt
KiSpuriousDispatchNoEOI
KiSwInterrupt
KxIsrLinkage
SwapContext