WdipTimeoutCheckRoutine
VOID __fastcall WdipTimeoutCheckRoutine(VOID *Arg){
_ETHREAD *CurrentThread;
INT64 *TimedOutInstanceForDeletion;
INT64 v3;
struct SLIST_ENTRY *v4;
INT64 *v5;
INT64 v6;
GUID *v7;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockSharedEx((UINT64)&WdipSemPushLock, 0i64);
WdipSemSqmLogInflightLimitExceededDataPoints();
if( WdipSemTimeoutEnabled )
{
TimedOutInstanceForDeletion = WdipSemMarkNextTimedOutInstanceForDeletion(&WdipSemEnabledInstanceTable);
while( TimedOutInstanceForDeletion )
{
WdipSemDisableContextProviders((INT64)TimedOutInstanceForDeletion, 1);
v4 = (struct SLIST_ENTRY *)TimedOutInstanceForDeletion;
v5 = WdipSemMarkNextTimedOutInstanceForDeletion((INT64 **)TimedOutInstanceForDeletion);
v6 = TimedOutInstanceForDeletion[4];
v7 = (GUID *)(TimedOutInstanceForDeletion + 2);
TimedOutInstanceForDeletion = v5;
WdipSemLogTimeoutInformation((GUID *)v6, *(_WORD *)(v6 + 16), v7);
WdipSemDeleteTransitionalInstance(v4);
}
}
v3 = WdipSemOneSecond * (WdipSemTimeoutValue / 0xAu);
ExReleasePushLockEx((UINT64)&WdipSemPushLock, 0i64);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
ExSetTimer(WdipTimeoutTimer, v3, 0i64, (INT64)&WdipTimeoutTimerParameters);
}Referenced by:
No references.