WdipSemMarkNextTimedOutInstanceForDeletion
_WDIP_SEM_SCENARIO_INSTANCE_INFO *__stdcall WdipSemMarkNextTimedOutInstanceForDeletion(_LIST_ENTRY *ListHead){
_ETHREAD *CurrentThread;
_WDIP_SEM_SCENARIO_INSTANCE_INFO *v2;
_LIST_ENTRY *Flink;
_LIST_ENTRY *v6;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v2 = 0i64;
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)&ExBootDevicesRemovedEvent + 567, 0i64);
if( ListHead )
{
Flink = ListHead->Flink;
while( Flink != (_LIST_ENTRY *)((char *)&ExBootDevicesRemovedEvent + 4512) )
{
v6 = Flink;
Flink = Flink->Flink;
if( ++LODWORD(v6[2].Blink) >= 0xAu && LOBYTE(v6[2].Flink[73].Blink) && !HIDWORD(v6[2].Blink) )
{
HIDWORD(v6[2].Blink) = 1;
v2 = (_WDIP_SEM_SCENARIO_INSTANCE_INFO *)v6;
break;
}
}
}
ExReleasePushLockEx((ULONG_PTR)&ExBootDevicesRemovedEvent + 4536, 0);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return v2;
}Referenced by:
WdipTimeoutCheckRoutine