PnpProcessRebalance

INT64 __fastcall PnpProcessRebalance(LIST_ENTRY *ListHead){
  _LIST_ENTRY *Flink; 
  _LIST_ENTRY *Blink; 
  CHAR v4; 
  _ETHREAD *CurrentThread; 
  int v6; 
  UINT64 v7; 
  INT64 v9; 
  v9 = 0i64;
  Flink = ListHead[1].Flink;
  if( Flink )
    Blink = Flink[19].Blink[2].Blink;
  else
    Blink = (_LIST_ENTRY *)IopRootDeviceNode;
  v4 = (CHAR)ListHead[2].Flink;
  if( (unsigned int)(HIDWORD(Blink[18].Blink) - 787) <= 1 )
  {
    ObfDereferenceObjectWithTag(Flink, 0x746C6644ui64);
    return 3221225558i64;
  }
  else
  {
    if( !BYTE4(ListHead[1].Blink) && v4 && PiCollapseRebalanceRequests(ListHead) )
      Blink = (_LIST_ENTRY *)IopRootDeviceNode;
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --*((_WORD *)CurrentThread + 242);
    KeWaitForSingleObject(&PpRegistrySemaphore, DelayExecution, 0, 0, 0i64);
    v6 = PnpRebalance((UINT64)Blink, 0i64, 0i64, v4);
    KeReleaseSemaphoreEx(&PpRegistrySemaphore, 0i64, 1i64, v7);
    KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
    if( v6 >= 0 )
    {
      LODWORD(v9) = 3;
      BYTE4(v9) = PnPBootDriversInitialized;
      ObfReferenceObjectWithTag(*((PVOID *)IopRootDeviceNode + 4), 0x746C6644u);
      return(unsigned int)PipProcessDevNodeTree((INT64)IopRootDeviceNode, (INT64)ListHead, (INT64)&v9, 0i64, 0, 1u, 0);
    }
    return(unsigned int)v6;
  }
}

Referenced by:

PnpDeviceActionWorker