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.