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.