PiCollapseRebalanceRequests

UINT8 __stdcall PiCollapseRebalanceRequests(_LIST_ENTRY *ListHead){
  UINT64 v1; 
  INT64 v3; 
  _LIST_ENTRY *Blink; 
  unsigned __int8 v5; 
  unsigned __int64 v6; 
  INT64 *v7; 
  INT64 **v8; 
  _LIST_ENTRY *v9; 
  _LIST_ENTRY *i; 
  KeAcquireSpinLockRaiseToDpc(&PnpSpinLock, v1);
  v3 = PnpEnumerationRequestList;
  Blink = ListHead->Blink;
  v6 = v5;
  if( (INT64 *)PnpEnumerationRequestList != &PnpEnumerationRequestList )
  {
    do
    {
      v7 = *(INT64 **)v3;
      if( *(_BYTE *)(v3 + 28) )
        break;
      if( *(_DWORD *)(v3 + 24) == 6 && *(_BYTE *)(v3 + 32) )
      {
        v8 = *(INT64 ***)(v3 + 8);
        if( v7[1] != v3
          || *v8 != (INT64 *)v3
          || (*v8 = v7, v7[1] = (INT64)v8, v9 = ListHead->Blink, v9->Flink != ListHead) )
        {
          __fastfail(3u);
        }
        *(_QWORD *)v3 = ListHead;
        *(_QWORD *)(v3 + 8) = v9;
        v9->Flink = (_LIST_ENTRY *)v3;
        ListHead->Blink = (_LIST_ENTRY *)v3;
      }
      v3 = (INT64)v7;
    }
    while( v7 != &PnpEnumerationRequestList );
  }
  KxReleaseSpinLock(&PnpSpinLock);
  __writecr8(v6);
  for( i = Blink->Flink; i != ListHead; i = i->Flink )
  {
    ObfDereferenceObjectWithTag(i[1].Flink, 0x746C6644ui64);
    i[1].Flink = 0i64;
  }
  return Blink != ListHead->Blink;
}

Referenced by:

PnpProcessRebalance