CmpInitGlobalQuotaAllowed

INT64 __stdcall CmpInitGlobalQuotaAllowed(){
  char v0; 
  unsigned __int64 v1; 
  UINT64 v2; 
  INT64 result; 
  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;
  }
  *(_QWORD *)CmpGlobalQuotaWarning = 95 * (v1 / 0x64);
  if( CmSystemHiveLimitSize )
  {
    result = (unsigned int)(CmSystemHiveLimitSize << 20);
  }
  else
  {
    if( (MmGetNumberOfPhysicalPages(0i64) & 0xFFFFFFFFFFFFFFFEui64) < 0xC0000 )
      v2 = MmGetNumberOfPhysicalPages(0i64) >> 1;
    else
      LODWORD(v2) = 393216;
    result = (unsigned int)((_DWORD)v2 << 12);
  }
  CmSystemHiveLimitSize = result;
  return result;
}

Referenced by:

CmInitSystem1