MiLimitLoaderBlockTotalMemory
UINT64 __stdcall MiLimitLoaderBlockTotalMemory(_LOADER_PARAMETER_BLOCK *LoaderBlock, UINT64 TotalPagesAllowed){
__int64 *v2;
char *v3;
ULONG_PTR v4;
ULONG_PTR BugCheckParameter4;
UINT64 v6;
__int64 *v7;
__int64 v8;
int v9;
unsigned __int64 v10;
__int64 v11;
UINT64 v12;
unsigned __int64 v13;
__int64 v14;
UINT64 v15;
unsigned int v17;
unsigned __int64 v18;
__int64 *v19;
__int64 **v20;
v2 = (__int64 *)*((_QWORD *)LoaderBlock + 5);
v3 = (char *)LoaderBlock + 32;
v4 = 0i64;
BugCheckParameter4 = 0i64;
v6 = 0i64;
v7 = v2;
v8 = 0x1C5C0C00048i64;
v9 = 16777524;
if( v2 != (__int64 *)((char *)LoaderBlock + 32) )
{
do
{
v10 = *((int *)v7 + 4);
if( (unsigned int)v10 > 0x28 || !_bittest64(&v8, v10) )
{
v11 = v7[4];
v4 += v11;
if( (unsigned int)v10 <= 0x18 )
{
if( _bittest(&v9, v10) )
BugCheckParameter4 += v11;
}
}
v7 = (__int64 *)v7[1];
}
while( v7 != (__int64 *)v3 );
}
if( v4 - BugCheckParameter4 > TotalPagesAllowed )
KeBugCheckEx(0x1Au, 0x3030309ui64, TotalPagesAllowed, v4, BugCheckParameter4);
if( v2 != (__int64 *)v3 )
{
v12 = (v4 - TotalPagesAllowed) & -(__int64)(TotalPagesAllowed < v4);
do
{
if( v12 )
{
v17 = *((_DWORD *)v2 + 4);
if( v17 <= 0x18 )
{
if( _bittest(&v9, v17) )
{
v18 = v2[4];
if( v18 > v12 )
{
v2[4] = v18 - v12;
v12 = 0i64;
}
else
{
v19 = (__int64 *)*v2;
if( *(__int64 **)(*v2 + 8) != v2 || (v20 = (__int64 **)v2[1], *v20 != v2) )
__fastfail(3u);
*v20 = v19;
v19[1] = (__int64)v20;
v12 -= v2[4];
v2[4] = 0i64;
}
}
}
}
v13 = *((int *)v2 + 4);
if( (unsigned int)v13 > 0x28 || !_bittest64(&v8, v13) )
{
v14 = v2[4];
if( v14 )
{
v15 = v2[3] + v14;
if( v15 > v6 )
v6 = v15;
}
}
v2 = (__int64 *)v2[1];
}
while( v2 != (__int64 *)v3 );
}
return v6;
}Referenced by:
MiMemoryLicense