KiTimerExpirationDpc

VOID __stdcall KiTimerExpirationDpc(
        _KDPC *TimerDpc,
        VOID *DeferredContext,
        VOID *SystemArgument1,
        VOID *SystemArgument2){
  unsigned int v4; 
  _KDPC_TRACKER_TABLE *v5; 
  struct _KPRCB *CurrentPrcb; 
  UINT64 v7; 
  __int64 v8; 
  __int64 v9; 
  __int64 v10; 
  _KDPC_TRACKER_TABLE *v11; 
  __int64 v12[34]; 

  v4 = (unsigned int)SystemArgument1;
  memset(v12, 0i64, sizeof(v12));
  CurrentPrcb = KeGetCurrentPrcb();
  v12[1] = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
  _disable();
  v7 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
  if( KiSerializeTimerExpiration )
  {
    if( CurrentPrcb->ClockOwner )
    {
      v8 = 31568i64;
      v9 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart >> 18;
      v10 = 2i64;
      do
      {
        *(unsigned int *)((char *)&KiProcessorBlock->_MxCsr + v8) = v9;
        v8 += 4i64;
        --v10;
      }
      while( v10 );
    }
  }
  else
  {
    CurrentPrcb->TimerTable.TableState.LastTimerHand[0] = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart >> 18;
    CurrentPrcb->TimerTable.TableState.LastTimerHand[1] = v7 >> 18;
  }
  _enable();
  LOBYTE(v5) = 1;
  KiTimerExpiration(CurrentPrcb, v4, v7, v5);
  CurrentPrcb->DpcData[0].ActiveDpc = 0i64;
  if( CurrentPrcb->ClockOwner )
  {
    LOBYTE(v11) = 1;
    KiTimer2Expiration(CurrentPrcb, v7, 1u, v11);
  }
}

Referenced by:

No references.