WdipSemDeleteTransitionalInstance

PSLIST_ENTRY __fastcall WdipSemDeleteTransitionalInstance(struct SLIST_ENTRY *a1){
  _ETHREAD *CurrentThread; 
  _SLIST_ENTRY *Next; 
  struct SLIST_ENTRY **v4; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  ExAcquirePushLockExclusiveEx((UINT64)&qword_140C1A3B8, 0i64);
  Next = a1->Next;
  if( *(&a1->Next->Next + 1) != a1 || (v4 = (struct SLIST_ENTRY **)*((_QWORD *)&a1->Next + 1), *v4 != a1) )
    __fastfail(3u);
  *v4 = Next;
  *((_QWORD *)&Next->Next + 1) = v4;
  --dword_140C1A3B0;
  ExReleasePushLockEx((UINT64)&qword_140C1A3B8, 0i64);
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
  return WdipSemFastFree(3i64, a1);
}

Referenced by:

WdipSemDisableScenario
WdipSemEnableScenario
WdipTimeoutCheckRoutine