PiCollapseRebalanceRequests

bool __fastcall PiCollapseRebalanceRequests(_LIST_ENTRY *a1){
  unsigned __int8 v2; 
  __int64 *v3; 
  _LIST_ENTRY *Blink; 
  unsigned __int64 v5; 
  __int64 *v6; 
  __int64 **v7; 
  _LIST_ENTRY *v8; 
  _LIST_ENTRY *i; 

  v2 = KeAcquireSpinLockRaiseToDpc((UINT64 *)&PnpReplaceEvent + 50);
  v3 = (__int64 *)*(&PnpReplaceEvent + 48);
  Blink = a1->Blink;
  v5 = v2;
  if( (_UNKNOWN *)*(&PnpReplaceEvent + 48) != (_UNKNOWN *)((char *)&PnpReplaceEvent + 384) )
  {
    do
    {
      v6 = (__int64 *)*v3;
      if( *((_BYTE *)v3 + 28) )
        break;
      if( *((_DWORD *)v3 + 6) == 6 && *((_BYTE *)v3 + 32) )
      {
        v7 = (__int64 **)v3[1];
        if( (__int64 *)v6[1] != v3 || *v7 != v3 || (*v7 = v6, v6[1] = (__int64)v7, v8 = a1->Blink, v8->Flink != a1) )
          __fastfail(3u);
        *v3 = (__int64)a1;
        v3[1] = (__int64)v8;
        v8->Flink = (_LIST_ENTRY *)v3;
        a1->Blink = (_LIST_ENTRY *)v3;
      }
      v3 = v6;
    }
    while( v6 != (__int64 *)((char *)&PnpReplaceEvent + 384) );
  }
  KxReleaseSpinLock((UINT64 *)&PnpReplaceEvent + 50);
  __writecr8(v5);
  for( i = Blink->Flink; i != a1; i = i->Flink )
  {
    ObfDereferenceObjectWithTag(i[1].Flink, 0x746C6644ui64);
    i[1].Flink = 0i64;
  }
  return Blink != a1->Blink;
}

Referenced by:

PnpProcessRebalance