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