DmrEnumerateRmrrDomains
INT64 __fastcall DmrEnumerateRmrrDomains(UINT64 a1, INT64 a2, INT64 a3){
_QWORD **v3;
INT64 v4;
INT64 v5;
UINT64 v7;
UINT64 i;
INT16 v9;
_QWORD *v10;
INT64 v11;
int v12;
CHAR *NextDeviceScope;
UINT64 v14;
CHAR *v15;
_WORD *NextRemappingStructure;
_WORD *v17;
*(_DWORD *)a3 = 0;
v3 = (_QWORD **)(a3 + 8);
v4 = a2;
*(_QWORD *)(a3 + 16) = a3 + 8;
*(_QWORD *)(a3 + 8) = a3 + 8;
v5 = 0i64;
while( 1 )
{
NextRemappingStructure = (_WORD *)DmrGetNextRemappingStructure(a1, v5);
v17 = NextRemappingStructure;
if( !NextRemappingStructure )
break;
if( *NextRemappingStructure == 1 )
{
v7 = (UINT64)NextRemappingStructure + (unsigned __int16)NextRemappingStructure[1];
for( i = 0i64; ; i = (UINT64)v15 )
{
NextDeviceScope = (CHAR *)DmrGetNextDeviceScope((UINT64)(v17 + 12), v7, i);
v15 = NextDeviceScope;
if( !NextDeviceScope )
break;
if( *NextDeviceScope == 1 && (!v4 || DmrFindDrhdForDeviceScope(v14, v17[3], NextDeviceScope) == v4) )
{
v9 = v17[3];
v10 = *v3;
while( v10 != v3 )
{
v11 = (INT64)v10;
v10 = (_QWORD *)*v10;
if( *(_WORD *)(v11 + 32) == v9 && *(_BYTE *)(v11 + 34) == 1 && DmrCheckPathMatch(v15, (CHAR *)(v11 + 34)) )
goto LABEL_13;
}
v11 = DmrpRmrrTreeAddNewScope(a3, v9, (UINT8 *)v15);
LABEL_13:
if( !v11 )
{
v12 = -1073741670;
LABEL_23:
DmrFreeRmrrTree(a3);
return(unsigned int)v12;
}
v12 = DmrpRmrrTreeAddRegionToDevice(v11, *((_QWORD *)v17 + 1), *((_QWORD *)v17 + 2));
if( v12 < 0 )
goto LABEL_23;
v4 = a2;
}
}
}
v5 = (INT64)v17;
a1 = v14;
}
return 0;
}Referenced by:
HalpIvtProcessDrhdEntry