MiAllocateMostlyContiguousPagesForMdl
NTSTATUS __stdcall MiAllocateMostlyContiguousPagesForMdl(INT64 a1, INT64 a2, INT64 a3){
__int64 v3;
UINT64 v5;
int v6;
UINT64 v7;
int v8;
UINT64 v9;
UINT64 v10;
__int64 v11;
unsigned __int64 v12;
__int64 v13;
UINT64 v14;
UINT64 PreferredNode;
UINT64 PreferredNodea;
UINT64 Flags;
UINT64 Flagsa;
UINT64 *v20;
UINT64 *v21;
v3 = *(_QWORD *)(a1 + 64);
v5 = *(_QWORD *)(a1 + 16);
v6 = a3 | 0x60002000;
v7 = *(_QWORD *)(a1 + 24);
v8 = a2;
v9 = *(&stru_140C50B28 + 852);
LODWORD(v20) = a3 | 0x60002000;
LODWORD(Flags) = 0x80000000;
LODWORD(PreferredNode) = a2;
for( LODWORD(v10) = MiFindContiguousPages(
*(_MI_PARTITION **)a1,
v5,
v7,
0i64,
*(_QWORD *)(a1 + 40) - ((unsigned __int64)*(unsigned int *)(v3 + 40) >> 12),
*(_MI_PFN_CACHE_ATTRIBUTE *)(a1 + 60),
PreferredNode,
Flags,
v20);
;
LODWORD(v10) = MiFindContiguousPages(
*(_MI_PARTITION **)a1,
v5,
v7,
0i64,
v11 - v12,
*(_MI_PFN_CACHE_ATTRIBUTE *)(a1 + 60),
PreferredNodea,
Flagsa,
v21) )
{
v11 = *(_QWORD *)(a1 + 40);
v12 = (unsigned __int64)*(unsigned int *)(v3 + 40) >> 12;
if( v12 == v11 )
break;
v13 = *(_QWORD *)(a1 + 32);
if( !v13 )
break;
v10 = v13 + v5;
if( v13 + v5 <= v5 || v10 > v9 )
break;
v5 += v13;
v14 = v13 + v7;
if( v13 + v7 <= v7 || (v7 += v13, v14 > v9) )
v7 = v9;
LODWORD(v21) = v6;
LODWORD(Flagsa) = 0x80000000;
LODWORD(PreferredNodea) = v8;
}
return v10;
}Referenced by:
MiFindPagesForMdl