PnpMergeFilteredResourceRequirementsList

INT64 __stdcall PnpMergeFilteredResourceRequirementsList(
        IO_RESOURCE_REQUIREMENTS_LIST *IoList1,
        IO_RESOURCE_REQUIREMENTS_LIST *IoList2,
        IO_RESOURCE_REQUIREMENTS_LIST **MergedList){
  unsigned int v6; 
  UINT8 *PoolWithTag; 
  UINT8 *v8; 
  UINT8 *v10; 
  UINT8 *v11; 
  IO_RESOURCE_REQUIREMENTS_LIST *v12; 
  *MergedList = 0i64;
  if( (!IoList1 || !*((_DWORD *)IoList1 + 7)) && (!IoList2 || !*((_DWORD *)IoList2 + 7)) )
    return 0i64;
  if( IoList1 && *((_DWORD *)IoList1 + 7) )
  {
    if( IoList2 && *((_DWORD *)IoList2 + 7) )
    {
LABEL_7:
      v6 = *(_DWORD *)IoList1 - 32 + *(_DWORD *)IoList2;
      PoolWithTag = (UINT8 *)ExAllocatePoolWithTag(PagedPool, v6, 0x75737050ui64);
      v8 = PoolWithTag;
      if( PoolWithTag )
      {
        memmove(PoolWithTag, (UINT8 *)IoList1, *(_DWORD *)IoList1);
        memmove(&v8[*(_DWORD *)IoList1], (UINT8 *)IoList2 + 32, v6 - *(_DWORD *)IoList1);
        *(_DWORD *)v8 = v6;
        *((_DWORD *)v8 + 7) += *((_DWORD *)IoList2 + 7);
        *MergedList = (IO_RESOURCE_REQUIREMENTS_LIST *)v8;
        return 0i64;
      }
      return 3221225626i64;
    }
    v10 = (UINT8 *)IoList1;
  }
  else
  {
    v10 = (UINT8 *)IoList2;
  }
  if( !v10 )
    goto LABEL_7;
  v11 = (UINT8 *)ExAllocatePoolWithTag(PagedPool, *(unsigned int *)v10, 0x75737050ui64);
  v12 = (IO_RESOURCE_REQUIREMENTS_LIST *)v11;
  if( v11 )
  {
    memmove(v11, v10, *(unsigned int *)v10);
    *MergedList = v12;
    return 0i64;
  }
  return 3221225626i64;
}

Referenced by:

IopQueryDeviceResources