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