CmpInitGlobalQuotaAllowed

INT64 __stdcall CmpInitGlobalQuotaAllowed(){
  char v0; 
  unsigned __int64 v1; 
  __int64 v2; 
  unsigned __int64 v3; 
  INT64 result; 
  unsigned __int64 v5; 

  CmpSizeOfPagedPoolInBytes = MmSizeOfPagedPoolInBytes;
  if( CmRegistrySizeLimitLength == 4 && CmRegistrySizeLimitType == 4 && CmRegistrySizeLimit
    || (v0 = 0, CmRegistrySizeLimitLength == 8) && CmRegistrySizeLimitType == 11 && CmRegistrySizeLimit )
  {
    v0 = 1;
  }
  if( v0 )
  {
    v1 = CmRegistrySizeLimit;
    CmpQuotaExplicitlySet = 1;
    if( CmRegistrySizeLimit >= ((((unsigned __int64)MmSizeOfPagedPoolInBytes * (unsigned __int128)0xCCCCCCCCCCCCCCCDui64) >> 64) & 0xFFFFFFFFFFFFFFF8ui64) )
      v1 = (((unsigned __int64)MmSizeOfPagedPoolInBytes * (unsigned __int128)0xCCCCCCCCCCCCCCCDui64) >> 64) & 0xFFFFFFFFFFFFFFF8ui64;
  }
  else
  {
    v1 = MmSizeOfPagedPoolInBytes / 3ui64;
  }
  CmpGlobalQuota = v1;
  if( v1 > 0xFFFFFFFF )
  {
    v1 = 0xFFFFFFFFi64;
    CmpGlobalQuota = 0xFFFFFFFFi64;
  }
  if( v1 < 0x1000000 )
  {
    v1 = 0x1000000i64;
    CmpGlobalQuota = 0x1000000i64;
  }
  CmpGlobalQuotaWarning = 95 * (v1 / 0x64);
  if( dword_140C50860 )
  {
    result = (unsigned int)(dword_140C50860 << 20);
  }
  else
  {
    LODWORD(v2) = MmGetNumberOfPhysicalPages(0i64);
    if( (v2 & 0xFFFFFFFFFFFFFFFEui64) < 0xC0000 )
    {
      LODWORD(v5) = MmGetNumberOfPhysicalPages(0i64);
      v3 = v5 >> 1;
    }
    else
    {
      LODWORD(v3) = 393216;
    }
    result = (unsigned int)((_DWORD)v3 << 12);
  }
  dword_140C50860 = result;
  return result;
}

Referenced by:

CmInitSystem1