ExpTimerPause
VOID __fastcall ExpTimerPause(INT64 Timer, INT64 a2, UINT64 r8, CHAR a4){
char v8;
char v9;
UINT64 v10;
UINT64 v11;
UINT64 v12;
int v13;
v12 = 0i64;
v13 = 0;
if( !a4 )
KxAcquireSpinLock((UINT64 *)(Timer + 64));
v8 = *(_BYTE *)(Timer + 304);
if( (v8 & 2) == 0 )
{
*(_BYTE *)(Timer + 304) = v8 | 2;
if( KeCancelTimerInternal(Timer, &v12, &v13, (unsigned int *)(Timer + 320)) )
{
v9 = v13;
switch( v13 )
{
case 1:
if( v12 <= r8 )
{
*(_QWORD *)(Timer + 312) = 0i64;
break;
}
v11 = a2 + v12 - r8;
goto LABEL_20;
case 2:
if( v12 <= r8 )
v10 = 0i64;
else
v10 = r8 - v12;
*(_QWORD *)(Timer + 312) = v10;
break;
case 3:
v11 = v12;
LABEL_20:
*(_QWORD *)(Timer + 312) = v11;
break;
}
}
else
{
v9 = 0;
}
*(_BYTE *)(Timer + 248) = v9;
}
if( !a4 )
KxReleaseSpinLock((UINT64 *)(Timer + 64));
}Referenced by:
ExWakeTimersPause
PspSetProcessFreezeStateCallback