PnpRemoveDeviceActionRequests

__int64 __fastcall PnpRemoveDeviceActionRequests(_LIST_ENTRY *a1){
  unsigned __int8 v2; 
  __int64 *v3; 
  unsigned __int64 v4; 
  __int64 *v5; 
  __int64 result; 
  __int64 **v7; 
  _DWORD *v8; 
  _KEVENT *v9; 
  __int64 v10; 
  unsigned __int8 v11; 
  bool v12; 
  unsigned __int64 v13; 
  unsigned __int64 v14; 

  v2 = KeAcquireSpinLockRaiseToDpc((UINT64 *)&PnpReplaceEvent + 50);
  v3 = (__int64 *)*(&PnpReplaceEvent + 48);
  v4 = v2;
  if( (_UNKNOWN *)*(&PnpReplaceEvent + 48) != (_UNKNOWN *)((char *)&PnpReplaceEvent + 384) )
  {
    do
    {
      v5 = (__int64 *)*v3;
      if( (_LIST_ENTRY *)v3[2] == a1 )
      {
        v7 = (__int64 **)v3[1];
        if( (__int64 *)v5[1] != v3 || *v7 != v3 )
          __fastfail(3u);
        *v7 = v5;
        v5[1] = (__int64)v7;
        v8 = (_DWORD *)v3[6];
        if( v8 )
          *v8 = -1073741810;
        v9 = (_KEVENT *)v3[5];
        if( v9 )
          KeSetEvent(v9, 0, 0);
        v10 = *((unsigned int *)v3 + 6);
        v11 = KeAcquireSpinLockRaiseToDpc((UINT64 *)&stru_140C23628 + 700);
        v12 = (*(&stru_140C23628 + 1402))-- == 1;
        v13 = v11;
        if( v12 )
          PopDirectedDripsClearDisengageReason(4);
        KxReleaseSpinLock((UINT64 *)&stru_140C23628 + 700);
        __writecr8(v13);
        v14 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc(&qword_140C1E9B0);
        if( !--dword_140C1E9B8 && byte_140C1EA28 )
        {
          qword_140C1EA30 += *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - qword_140C1EA38;
          qword_140C1EA38 = 0i64;
        }
        --dword_140C1E9C0[v10];
        KxReleaseSpinLock(&qword_140C1E9B0);
        __writecr8(v14);
        ObfDereferenceObjectWithTag((VOID *)v3[2], 0x746C6644ui64);
        PnpDeleteDeviceActionRequest((volatile signed __int32 *)v3);
      }
      v3 = v5;
    }
    while( v5 != (__int64 *)((char *)&PnpReplaceEvent + 384) );
  }
  KxReleaseSpinLock((UINT64 *)&PnpReplaceEvent + 50);
  result = (unsigned int)KiIrqlFlags;
  __writecr8(v4);
  return result;
}

Referenced by:

PipSetDevNodeState