PopFxDestroyDripsBlockingDeviceList

VOID __stdcall PopFxDestroyDripsBlockingDeviceList(INT64 a1, INT64 rdx0, INT64 a3, INT64 a4, INT64 a5, INT64 a6){
  __int64 *v7; 
  __int64 v8; 
  void *v9; 

  while( 1 )
  {
    v7 = *(__int64 **)a1;
    if( *(_QWORD *)a1 == a1 )
      break;
    if( v7[1] != a1 || (v8 = *v7, *(__int64 **)(*v7 + 8) != v7) )
      __fastfail(3u);
    *(_QWORD *)a1 = v8;
    *(_QWORD *)(v8 + 8) = a1;
    v9 = (void *)v7[3];
    if( v9 )
    {
      ExFreePoolWithTag(v9, 0x4D584650u);
      v7[3] = 0i64;
      *((_DWORD *)v7 + 8) = 0;
    }
    PopFxReleaseDevice((_POP_FX_DEVICE *)(v7 - 109));
  }
  ExReleasePushLockEx((ULONG_PTR)&stru_140C23628 + 3984, 0);
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  IoLockUnlockPnpDeviceTree(0);
}

Referenced by:

PopDripsWatchdogCallbackHandler
PopDripsWatchdogTakeAction
PopFxBuildDripsBlockingDeviceList