ExpTimerDpcRoutine
VOID __stdcall ExpTimerDpcRoutine(
_KDPC *Dpc,
VOID *DeferredContext,
VOID *SystemArgument1,
VOID *SystemArgument2,
INT64 a5){
int v9;
__int64 v10;
int v11;
_BYTE v12[89];
__int64 *v13;
v13 = &v10;
memset(v12, 0i64, sizeof(v12));
if( (unsigned __int64)(((__int64)DeferredContext >> 47) + 1) > 1 )
{
v11 = 0;
Dpc->Type = 0;
Dpc->DeferredContext = (void *)((unsigned __int64)SystemArgument2 >> 8);
*(_QWORD *)&v12[81] = SystemArgument1;
*(_QWORD *)&v12[1] = __ROL8__(DeferredContext, (char)SystemArgument1);
*(_QWORD *)&v12[73] = __ROR8__(Dpc, (char)SystemArgument1);
Dpc->SystemArgument1 = (void *)((unsigned __int64)Dpc->SystemArgument1 ^ (unsigned __int64)SystemArgument2);
Dpc->SystemArgument2 = (void *)((unsigned __int64)Dpc->SystemArgument2 ^ (unsigned __int64)SystemArgument1);
KiCustomAccessRoutine0((UINT64 *)DeferredContext);
}
v9 = 0;
KxAcquireSpinLock((UINT64 *)DeferredContext + 8);
if( (*((_BYTE *)DeferredContext + 304) & 1) != 0 )
{
if( !KeInsertQueueApc(
(INT64)DeferredContext + 72,
KUSER_SHARED_DATA.SystemTime.LowPart,
HIDWORD(*(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart),
0i64) )
v9 = 1;
if( *((_DWORD *)DeferredContext + 60) )
{
if( --v9 < 0 )
{
ObfReferenceObjectWithTag(DeferredContext, 0x746C6644ui64);
v9 = 0;
}
if( (*((_BYTE *)DeferredContext + 304) & 2) == 0
&& (unsigned __int8)KeSetCoalescableTimer(
(INT64)DeferredContext,
-10000i64 * *((int *)DeferredContext + 60),
0i64,
*((unsigned int *)DeferredContext + 80),
(INT64)Dpc) )
{
++v9;
}
}
}
KxReleaseSpinLock((UINT64 *)DeferredContext + 8);
if( v9 )
ObfDereferenceObjectWithTag(DeferredContext, 0x746C6644ui64);
}Referenced by:
No references.