PnprMmAddRange
__int64 __fastcall PnprMmAddRange(unsigned int *a1, unsigned __int64 a2, unsigned __int64 a3){
unsigned __int64 v3;
unsigned int v4;
unsigned __int64 v5;
__int64 v7;
VOID **PoolWithTag;
VOID **v9;
__int64 i;
_QWORD *v11;
__int64 v12;
int v13;
int v14;
v3 = a2 >> 12;
v4 = 0;
v5 = a3 >> 12;
if( a3 >> 12 )
{
while( 1 )
{
v7 = v5;
if( v5 > 0x80000000 )
v7 = 0x80000000i64;
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, ((((_DWORD)v7 + 32) & 0xFFFFFFE0) >> 3) + 48, 1383099984i64);
v9 = PoolWithTag;
if( !PoolWithTag )
break;
PoolWithTag[2] = (VOID *)v3;
PoolWithTag[3] = (VOID *)v7;
PoolWithTag[5] = PoolWithTag + 6;
*((_DWORD *)PoolWithTag + 8) = (v7 + 32) & 0xFFFFFFE0;
RtlSetAllBits((PRTL_BITMAP)PoolWithTag + 2);
for( i = *((_QWORD *)a1 + 1); (unsigned int *)i != a1; i = *(_QWORD *)(i + 8) )
{
if( *(_QWORD *)(i + 16) < (unsigned __int64)v9[2] )
break;
}
v11 = *(_QWORD **)i;
if( *(_QWORD *)(*(_QWORD *)i + 8i64) != i )
__fastfail(3u);
*v9 = v11;
v3 += v7;
v9[1] = (VOID *)i;
v11[1] = v9;
*(_QWORD *)i = v9;
v5 -= v7;
if( !v5 )
return v4;
}
v12 = PnprContext;
v4 = -1073741670;
v13 = *(_DWORD *)(PnprContext + 20984);
if( !v13 )
v13 = 4366;
*(_DWORD *)(PnprContext + 20984) = v13;
v14 = *(_DWORD *)(v12 + 20988);
if( !v14 )
v14 = 10;
*(_DWORD *)(v12 + 20988) = v14;
}
return v4;
}Referenced by:
PnprMmConstruct