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.