WdipTimeoutCheckRoutine

VOID __stdcall WdipTimeoutCheckRoutine(VOID *Arg){
  _ETHREAD *CurrentThread; 
  _WDIP_SEM_SCENARIO_INSTANCE_INFO *TimedOutInstanceForDeletion; 
  INT64 v3; 
  _WDIP_SEM_SCENARIO_INSTANCE_INFO *v4; 
  _WDIP_SEM_SCENARIO_INSTANCE_INFO *v5; 
  __int64 v6; 
  _GUID *v7; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)&ExBootDevicesRemovedEvent + 559, 0i64);
  WdipSemSqmLogInflightLimitExceededDataPoints();
  if( WdipSemTimeoutEnabled )
  {
    TimedOutInstanceForDeletion = WdipSemMarkNextTimedOutInstanceForDeletion((_LIST_ENTRY *)&ExBootDevicesRemovedEvent + 282);
    while( TimedOutInstanceForDeletion )
    {
      WdipSemDisableContextProviders(TimedOutInstanceForDeletion, 1u);
      v4 = TimedOutInstanceForDeletion;
      v5 = WdipSemMarkNextTimedOutInstanceForDeletion((_LIST_ENTRY *)TimedOutInstanceForDeletion);
      v6 = *((_QWORD *)TimedOutInstanceForDeletion + 4);
      v7 = (_GUID *)(TimedOutInstanceForDeletion + 4);
      TimedOutInstanceForDeletion = v5;
      WdipSemLogTimeoutInformation((_GUID *)v6, *(_WORD *)(v6 + 16), v7);
      WdipSemDeleteTransitionalInstance(v4);
    }
  }
  v3 = WdipSemOneSecond * (WdipSemTimeoutValue / 0xAu);
  ExReleasePushLockEx((ULONG_PTR)&ExBootDevicesRemovedEvent + 4472, 0);
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  ExSetTimer(*(&ExBootDevicesRemovedEvent + 448), v3, 0i64, (INT64)&ExBootDevicesRemovedEvent + 3504);
}

Referenced by:

No references.