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