IopReportBootResources

NTSTATUS __stdcall IopReportBootResources(
        _ARBITER_REQUEST_SOURCE ArbiterRequestSource,
        PDEVICE_OBJECT DeviceObject,
        PCM_RESOURCE_LIST BootResources){
  _CM_RESOURCE_LIST *v4; 
  size_t v6; 
  void *DeviceNode; 
  size_t v9; 
  VOID **v10; 
  VOID **PoolWithTag; 
  void *v12; 

  v4 = BootResources;
  v6 = PnpDetermineResourceListSize(BootResources);
  if( !v6 )
    return 0;
  if( !DeviceObject )
  {
    DeviceNode = 0i64;
LABEL_10:
    PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x18ui64, 538996816i64);
    if( !PoolWithTag )
    {
      if( DeviceNode )
      {
        v12 = (void *)*((_QWORD *)DeviceNode + 68);
        if( v12 )
        {
          ExFreePoolWithTag(v12, 0);
          *((_QWORD *)DeviceNode + 68) = 0i64;
        }
      }
      return -1073741670;
    }
    if( DeviceNode )
      v4 = (_CM_RESOURCE_LIST *)*((_QWORD *)DeviceNode + 68);
    PoolWithTag[2] = v4;
    PoolWithTag[1] = DeviceObject;
    *PoolWithTag = IopInitReservedResourceList;
    IopInitReservedResourceList = PoolWithTag;
    return 0;
  }
  DeviceNode = DeviceObject->DeviceObjectExtension->DeviceNode;
  if( (*((_DWORD *)DeviceNode + 99) & 1) == 0 )
    return IopAllocateBootResources(ArbiterRequestSource, DeviceObject, v4);
  if( *((_QWORD *)DeviceNode + 68) )
    goto LABEL_10;
  v9 = v6;
  v10 = ExAllocatePoolWithTag(1ui64, v6, 538996816i64);
  *((_QWORD *)DeviceNode + 68) = v10;
  if( v10 )
  {
    memmove(v10, v4, v9);
    goto LABEL_10;
  }
  return -1073741670;
}

Referenced by:

No references.