PnpRemoveEventFromQueue

__int64 __fastcall PnpRemoveEventFromQueue(PVOID P){
  unsigned int v2; 
  PVOID *v3; 
  PVOID *v4; 
  v2 = 0;
  ExAcquireFastMutex((FAST_MUTEX *)(PnpDeviceEventList + 64));
  v3 = *(PVOID **)P;
  if( *(PVOID *)P != P )
  {
    if( v3[1] != P || (v4 = (PVOID *)*((_QWORD *)P + 1), *v4 != P) )
      __fastfail(3u);
    *v4 = v3;
    v2 = 1;
    v3[1] = v4;
    if( _InterlockedExchangeAdd((volatile signed __int32 *)P + 16, 0xFFFFFFFF) == 1 )
      ExFreePoolWithTag(P, 0x4B706E50u);
  }
  KeReleaseGuardedMutex((_FAST_MUTEX *)(PnpDeviceEventList + 64));
  return v2;
}

Referenced by:

PnpQueueQueryAndRemoveEvent