PopFxDestroyDirectedDripsCandidateDeviceList

VOID __fastcall PopFxDestroyDirectedDripsCandidateDeviceList(volatile INT32 **a1){
  volatile INT32 *v2; 
  __int64 v3; 
  while( 1 )
  {
    v2 = *a1;
    if( *a1 == (volatile INT32 *)a1 )
      break;
    v3 = *(_QWORD *)v2;
    if( *((volatile INT32 ***)v2 + 1) != a1 || *(volatile INT32 **)(v3 + 8) != v2 )
      __fastfail(3u);
    *a1 = (volatile INT32 *)v3;
    *(_QWORD *)(v3 + 8) = a1;
    *((_QWORD *)v2 + 1) = v2;
    *(_QWORD *)v2 = v2;
    if( _InterlockedExchangeAdd(v2 - 157, 0xFFFFFFFF) == 1 )
      KeSetEvent((PRKEVENT)v2 - 26, 0);
  }
  ExReleasePushLockEx((UINT64)&PopFxBlockingDeviceListLock, 0i64);
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}

Referenced by:

PopDirectedDripsInitializeBroadcast