WdipSemDeleteTransitionalInstance

VOID __stdcall WdipSemDeleteTransitionalInstance(_WDIP_SEM_SCENARIO_INSTANCE_INFO *Instance){
  _ETHREAD *CurrentThread; 
  __int64 v3; 
  _WDIP_SEM_SCENARIO_INSTANCE_INFO **v4; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)&ExBootDevicesRemovedEvent + 567, 0i64);
  v3 = *(_QWORD *)Instance;
  if( *(_WDIP_SEM_SCENARIO_INSTANCE_INFO **)(*(_QWORD *)Instance + 8i64) != Instance
    || (v4 = (_WDIP_SEM_SCENARIO_INSTANCE_INFO **)*((_QWORD *)Instance + 1), *v4 != Instance) )
  {
    __fastfail(3u);
  }
  *v4 = (_WDIP_SEM_SCENARIO_INSTANCE_INFO *)v3;
  *(_QWORD *)(v3 + 8) = v4;
  --*(&ExBootDevicesRemovedEvent + 1132);
  ExReleasePushLockEx((ULONG_PTR)&ExBootDevicesRemovedEvent + 4536, 0);
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  WdipSemFastFree(3i64, (_SLIST_ENTRY *)Instance);
}

Referenced by:

WdipSemDisableScenario
WdipSemEnableScenario
WdipTimeoutCheckRoutine