PiProcessResourceRequirementsChanged

INT64 __fastcall PiProcessResourceRequirementsChanged(_PNP_DEVICE_ACTION_ENTRY *Request){
  _DEVICE_OBJECT *DeviceObject; 
  ULONG_PTR v3; 
  const WCHAR *v4; 
  INT64 v5; 
  _KEVENT *CompletionEvent; 
  int v7; 
  INT64 v9; 
  v9 = 0i64;
  DeviceObject = Request->DeviceObject;
  if( DeviceObject )
    v3 = *(_QWORD *)(*((_QWORD *)DeviceObject + 39) + 40i64);
  else
    v3 = 0i64;
  ObfReferenceObjectWithTag(DeviceObject, 0x65706E50u);
  if( (unsigned int)(*(_DWORD *)(v3 + 300) - 787) <= 1 )
  {
    v7 = -1073741738;
  }
  else
  {
    PoFxActivateDevice(Request->DeviceObject);
    *(_DWORD *)(v3 + 704) |= 0x40u;
    PipClearDevNodeFlags((_DEVICE_NODE *)v3, 0x100ui64);
    PipSetDevNodeFlags(v3, 1024);
    PipClearDevNodeProblem(v3, v4, v5);
    if( *(_DWORD *)(v3 + 300) == 776 )
    {
      if( Request->RequestArgument )
        PipClearDevNodeFlags((_DEVICE_NODE *)v3, 0x800ui64);
      else
        PipSetDevNodeFlags(v3, 2048);
      PnpReallocateResources(v3);
      CompletionEvent = Request->CompletionEvent;
      LODWORD(v9) = 3;
      BYTE4(v9) = PnPBootDriversInitialized;
      ObfReferenceObject(*((PVOID *)IopRootDeviceNode + 4));
      v7 = PipProcessDevNodeTree(
             (INT64)IopRootDeviceNode,
             (INT64)Request,
             (INT64)&v9,
             0i64,
             0,
             CompletionEvent != 0i64,
             0);
      if( v7 < 0 )
        v7 = 0;
    }
    else
    {
      v7 = -1073741823;
    }
  }
  if( (*(_DWORD *)(v3 + 704) & 0x40) != 0 )
  {
    PoFxIdleDevice(*(DEVICE_OBJECT **)(v3 + 32));
    *(_DWORD *)(v3 + 704) &= ~0x40u;
  }
  ObfDereferenceObjectWithTag(Request->DeviceObject, 0x65706E50ui64);
  return(unsigned int)v7;
}

Referenced by:

PnpDeviceActionWorker