MiRemoveLargeFreeLoaderDescriptors
VOID __stdcall MiRemoveLargeFreeLoaderDescriptors(INT64 a1){
int v1;
_QWORD *v2;
_QWORD *v3;
__int64 v4;
unsigned __int64 v5;
unsigned __int64 v6;
int v7;
UINT64 v8;
char *j;
unsigned __int64 v10;
unsigned __int64 v11;
__int64 v12;
UINT64 v13;
char *v14;
unsigned __int64 v15;
unsigned __int64 v16;
__int64 v17;
int v18;
__int64 *v19;
__int64 v20;
unsigned __int64 v21;
unsigned __int64 v22;
__int64 **v23;
unsigned __int64 v24;
__int64 v25;
__int64 v26;
__int64 v27;
__int64 v28;
_QWORD *v29;
__int64 *v30;
__int64 **v31;
unsigned __int64 v32;
INT64 i;
qword_140D57758 = (__int64)&MxDeferredBootFreeDescriptorHead;
MxDeferredBootFreeDescriptorHead = (__int64)&MxDeferredBootFreeDescriptorHead;
if( ((unsigned __int64)KeFeatureBits & 0x2000000000i64) != 0 )
{
v1 = 0;
if( KeNumberNodes )
{
v2 = (_QWORD *)(a1 + 32);
for( i = a1 + 32; ; v2 = (_QWORD *)i )
{
v3 = (_QWORD *)*v2;
v4 = 0i64;
v5 = 0i64;
v6 = 0i64;
if( (_QWORD *)*v2 != v2 )
{
do
{
v7 = *((_DWORD *)v3 + 4);
if( v7 == 2 || v7 == 24 )
{
v8 = v3[4];
for( j = (char *)v3[3]; v8; v8 -= v11 )
{
MiRestrictRangeToNode((UINT64)j, v8);
v11 = v10;
LODWORD(v12) = MiSearchNumaNodeTable(j);
if( *(_DWORD *)(v12 + 8) == v1 )
{
v5 += v11;
if( v11 >= 0x200000 && (unsigned __int64)j >= 0x100000 && v11 > v6 )
{
v6 = v11;
v4 = (__int64)v3;
}
}
j += v11;
}
}
v3 = (_QWORD *)*v3;
}
while( v3 != (_QWORD *)i );
if( v5 >= 0x300000 )
{
if( v4 )
{
v13 = *(_QWORD *)(v4 + 32);
v14 = *(char **)(v4 + 24);
if( v13 )
{
while( 1 )
{
MiRestrictRangeToNode((UINT64)v14, v13);
v16 = v15;
LODWORD(v17) = MiSearchNumaNodeTable(v14);
if( *(_DWORD *)(v17 + 8) == v1 && v16 >= 0x200000 && (unsigned __int64)v14 >= 0x100000 && v16 >= v6 )
{
if( v5 - v16 >= 0x100000 )
goto LABEL_29;
if( v5 - 0x100000 >= 0x100000 )
break;
}
v14 += v16;
v13 -= v16;
if( !v13 )
goto LABEL_9;
}
v16 = v5 - 0x100000;
LABEL_29:
v18 = MxDeferredBootFreeDescriptorIndex;
v19 = &MxDeferredBootFreeDescriptor[5 * (unsigned int)MxDeferredBootFreeDescriptorIndex];
*((_DWORD *)v19 + 4) = *(_DWORD *)(v4 + 16);
v20 = (unsigned int)(v18 + 1);
MxDeferredBootFreeDescriptorIndex = v18 + 1;
v21 = (unsigned __int64)(v14 + 0x3FFFF) & 0xFFFFFFFFFFFC0000ui64;
v22 = (unsigned __int64)&v14[v16] & 0xFFFFFFFFFFFC0000ui64;
v23 = (__int64 **)qword_140D57758;
v24 = v22 - v21;
v19[3] = v21;
v19[4] = v22 - v21;
if( *v23 != &MxDeferredBootFreeDescriptorHead )
LABEL_42:
__fastfail(3u);
*v19 = (__int64)&MxDeferredBootFreeDescriptorHead;
v19[1] = (__int64)v23;
*v23 = v19;
qword_140D57758 = (__int64)v19;
v25 = *(_QWORD *)(v4 + 24);
v26 = *(_QWORD *)(v4 + 32);
v27 = v26 + v25;
if( v21 == v25 )
{
if( v22 != v27 )
{
*(_QWORD *)(v4 + 24) = v24 + v25;
LABEL_38:
*(_QWORD *)(v4 + 32) = v26 - v24;
goto LABEL_9;
}
v28 = *(_QWORD *)v4;
if( *(_QWORD *)(*(_QWORD *)v4 + 8i64) != v4 )
goto LABEL_42;
v29 = *(_QWORD **)(v4 + 8);
if( *v29 != v4 )
goto LABEL_42;
*v29 = v28;
*(_QWORD *)(v28 + 8) = v29;
}
else
{
if( v22 == v27 )
goto LABEL_38;
MxDeferredBootFreeDescriptorIndex = v20 + 1;
v30 = &MxDeferredBootFreeDescriptor[5 * v20];
*((_DWORD *)v30 + 4) = *(_DWORD *)(v4 + 16);
v30[3] = *(_QWORD *)(v4 + 24);
v30[4] = v21 - *(_QWORD *)(v4 + 24);
v31 = *(__int64 ***)(v4 + 8);
if( *v31 != (__int64 *)v4 )
goto LABEL_42;
v30[1] = (__int64)v31;
*v30 = v4;
*v31 = v30;
*(_QWORD *)(v4 + 8) = v30;
v32 = *(_QWORD *)(v4 + 24) - v21;
*(_QWORD *)(v4 + 24) = v22;
*(_QWORD *)(v4 + 32) += v32 - v24;
}
}
}
}
}
LABEL_9:
if( ++v1 >= (unsigned int)(unsigned __int16)KeNumberNodes )
return;
}
}
}
}Referenced by:
MiInitNucleus